@guajiritos/general-autocomplete 0.1.7 → 0.1.8

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.
package/README.md CHANGED
@@ -64,6 +64,7 @@ Como elementos opcionales se pueden introducir los siguientes campos:
64
64
  * `showLabel` - Muestra u oculta el label.
65
65
  * `showSuffix` - Muestra u oculta el ícono del input.
66
66
  * `suffixIcon` - Nombre del ícono de material usado como sufijo del input. Se muestra si `showSuffix` está activo y por defecto tiene valor `search`.
67
+ * `customValidators` - Una lista de validadores para el formulario reactivo. Se definen en la interfaz `CustomValidator`.
67
68
 
68
69
  ```html
69
70
  ...
@@ -37,6 +37,7 @@ export class GuajiritosGeneralAutocomplete {
37
37
  this.selectedElement = signal(null);
38
38
  this._url = signal(null);
39
39
  this.restrictionsFilters = signal([]);
40
+ this.validators = signal([]);
40
41
  this.disabledButton = signal(false);
41
42
  this.loading = signal(false);
42
43
  this.required = signal(false);
@@ -163,6 +164,22 @@ export class GuajiritosGeneralAutocomplete {
163
164
  });
164
165
  }
165
166
  }
167
+ /**
168
+ * Set custom validators for autocomplete
169
+ *
170
+ * @param validators - A list of customs validators
171
+ */
172
+ set customValidators(validators) {
173
+ if (validators?.length) {
174
+ validators.forEach((validator) => {
175
+ this.component.addValidators(validator.validator);
176
+ });
177
+ this.validators.set(validators);
178
+ }
179
+ else {
180
+ this.validators.set([]);
181
+ }
182
+ }
166
183
  /**
167
184
  * Validación customizada para la selección de elementos
168
185
  */
@@ -307,21 +324,18 @@ export class GuajiritosGeneralAutocomplete {
307
324
  this.propagateChange(item);
308
325
  }
309
326
  }
310
- ngOnInit() {
311
- // this.component.markAllAsTouched();
312
- }
313
327
  ngOnDestroy() {
314
328
  this.unsubscribeAll$.next();
315
329
  this.unsubscribeAll$.complete();
316
330
  }
317
331
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: GuajiritosGeneralAutocomplete, deps: [{ token: i1.AutocompleteService }, { token: i0.NgZone }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
318
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: GuajiritosGeneralAutocomplete, isStandalone: true, selector: "guajiritos-general-autocomplete", inputs: { floatLabel: "floatLabel", bodyRequest: "bodyRequest", debounceTimeValue: "debounceTimeValue", detailsTemplate: "detailsTemplate", label: "label", showLabel: "showLabel", appearance: "appearance", color: "color", placeholder: "placeholder", field: "field", filterString: "filterString", displayOptions: "displayOptions", withoutPaddingBottom: "withoutPaddingBottom", valueId: "valueId", showSuffix: "showSuffix", order: "order", suffixIcon: "suffixIcon", removeProperties: "removeProperties", url: "url", clearData: "clearData", initialValue: "initialValue", restrictions: "restrictions", isRequired: "isRequired", doFocus: "doFocus" }, outputs: { SelectElement: "SelectElement" }, providers: [
332
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: GuajiritosGeneralAutocomplete, isStandalone: true, selector: "guajiritos-general-autocomplete", inputs: { floatLabel: "floatLabel", bodyRequest: "bodyRequest", debounceTimeValue: "debounceTimeValue", detailsTemplate: "detailsTemplate", label: "label", showLabel: "showLabel", appearance: "appearance", color: "color", placeholder: "placeholder", field: "field", filterString: "filterString", displayOptions: "displayOptions", withoutPaddingBottom: "withoutPaddingBottom", valueId: "valueId", showSuffix: "showSuffix", order: "order", suffixIcon: "suffixIcon", removeProperties: "removeProperties", url: "url", clearData: "clearData", initialValue: "initialValue", restrictions: "restrictions", isRequired: "isRequired", doFocus: "doFocus", customValidators: "customValidators" }, outputs: { SelectElement: "SelectElement" }, providers: [
319
333
  {
320
334
  provide: NG_VALUE_ACCESSOR,
321
335
  useExisting: forwardRef(() => GuajiritosGeneralAutocomplete),
322
336
  multi: true,
323
337
  },
324
- ], viewQueries: [{ propertyName: "inputText", first: true, predicate: ["inputText"], descendants: true, static: true }], ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\" [ngClass]=\"{'without-padding-bottom': withoutPaddingBottom}\" class=\"w-100\"\r\n [appearance]=\"appearance\" [color]=\"color\">\r\n\r\n <mat-label *ngIf=\"showLabel\">{{label | translate}}</mat-label>\r\n <mat-icon matSuffix *ngIf=\"showSuffix\">{{suffixIcon ?? \"search\"}}</mat-icon>\r\n <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\"\r\n [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\r\n autocomplete=\"off\" matInput type=\"text\" [required]=\"required()\">\r\n <button (click)=\"clear(trigger)\" *ngIf=\"!loading() && component?.value\" [disabled]=\"disabledButton()\"\r\n aria-label=\"Clear\" mat-icon-button matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button *ngIf=\"loading()\" aria-label=\"search\" mat-icon-button matSuffix>\r\n <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\r\n </button>\r\n <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\" (onSelectionChange)=\"onSelectElement(option)\">\r\n\r\n <ng-container *ngIf=\"!displayOptions && !detailsTemplate\">\r\n {{ option?.name | i18nField: translateService.currentLang }}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!detailsTemplate\">\r\n <div class=\"display-options\">\r\n <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\r\n {{option | resolvePropertyPath:displayOptions.firthLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n <span *ngIf=\"displayOptions?.secondLabel\" class=\"mat-caption\">\r\n {{option | resolvePropertyPath: displayOptions.secondLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"detailsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-error *ngIf=\"component.invalid\">\r\n {{'Este campo es requerido.' | translate}}\r\n </mat-error>\r\n</mat-form-field>\r\n", styles: [".w-100{width:100%}.display-options{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}\n"], dependencies: [{ 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: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { 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: ReactiveFormsModule }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: i11.I18nFieldPipe, name: "i18nField" }, { kind: "pipe", type: i12.ResolvePropertyPath, name: "resolvePropertyPath" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
338
+ ], viewQueries: [{ propertyName: "inputText", first: true, predicate: ["inputText"], descendants: true, static: true }], ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\" [ngClass]=\"{'without-padding-bottom': withoutPaddingBottom}\" class=\"w-100\"\r\n [appearance]=\"appearance\" [color]=\"color\">\r\n\r\n <mat-label *ngIf=\"showLabel\">{{label | translate}}</mat-label>\r\n <mat-icon matSuffix *ngIf=\"showSuffix\">{{suffixIcon ?? \"search\"}}</mat-icon>\r\n <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\"\r\n [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\r\n autocomplete=\"off\" matInput type=\"text\" [required]=\"required()\">\r\n <button (click)=\"clear(trigger)\" *ngIf=\"!loading() && component?.value\" [disabled]=\"disabledButton()\"\r\n aria-label=\"Clear\" mat-icon-button matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button *ngIf=\"loading()\" aria-label=\"search\" mat-icon-button matSuffix>\r\n <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\r\n </button>\r\n <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\" (onSelectionChange)=\"onSelectElement(option)\">\r\n\r\n <ng-container *ngIf=\"!displayOptions && !detailsTemplate\">\r\n {{ option?.name | i18nField: translateService.currentLang }}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!detailsTemplate\">\r\n <div class=\"display-options\">\r\n <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\r\n {{option | resolvePropertyPath:displayOptions.firthLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n <span *ngIf=\"displayOptions?.secondLabel\" class=\"mat-caption\">\r\n {{option | resolvePropertyPath: displayOptions.secondLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"detailsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-error *ngIf=\"component.hasError('required')\">\r\n {{'Este campo es requerido.' | translate}}\r\n </mat-error>\r\n\r\n <mat-error *ngIf=\"component.hasError('invalidSelection')\">\r\n {{'Debe seleccionar un elemento.' | translate}}\r\n </mat-error>\r\n\r\n <ng-container *ngFor=\"let validator of validators()\">\r\n <mat-error *ngIf=\"component.hasError(validator.key)\">\r\n {{validator.message | translate}}\r\n </mat-error>\r\n </ng-container>\r\n</mat-form-field>\r\n", styles: [".w-100{width:100%}.display-options{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}\n"], dependencies: [{ 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: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { 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: ReactiveFormsModule }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: i11.I18nFieldPipe, name: "i18nField" }, { kind: "pipe", type: i12.ResolvePropertyPath, name: "resolvePropertyPath" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
325
339
  }
326
340
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: GuajiritosGeneralAutocomplete, decorators: [{
327
341
  type: Component,
@@ -346,7 +360,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
346
360
  useExisting: forwardRef(() => GuajiritosGeneralAutocomplete),
347
361
  multi: true,
348
362
  },
349
- ], template: "<mat-form-field [floatLabel]=\"floatLabel\" [ngClass]=\"{'without-padding-bottom': withoutPaddingBottom}\" class=\"w-100\"\r\n [appearance]=\"appearance\" [color]=\"color\">\r\n\r\n <mat-label *ngIf=\"showLabel\">{{label | translate}}</mat-label>\r\n <mat-icon matSuffix *ngIf=\"showSuffix\">{{suffixIcon ?? \"search\"}}</mat-icon>\r\n <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\"\r\n [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\r\n autocomplete=\"off\" matInput type=\"text\" [required]=\"required()\">\r\n <button (click)=\"clear(trigger)\" *ngIf=\"!loading() && component?.value\" [disabled]=\"disabledButton()\"\r\n aria-label=\"Clear\" mat-icon-button matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button *ngIf=\"loading()\" aria-label=\"search\" mat-icon-button matSuffix>\r\n <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\r\n </button>\r\n <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\" (onSelectionChange)=\"onSelectElement(option)\">\r\n\r\n <ng-container *ngIf=\"!displayOptions && !detailsTemplate\">\r\n {{ option?.name | i18nField: translateService.currentLang }}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!detailsTemplate\">\r\n <div class=\"display-options\">\r\n <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\r\n {{option | resolvePropertyPath:displayOptions.firthLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n <span *ngIf=\"displayOptions?.secondLabel\" class=\"mat-caption\">\r\n {{option | resolvePropertyPath: displayOptions.secondLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"detailsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-error *ngIf=\"component.invalid\">\r\n {{'Este campo es requerido.' | translate}}\r\n </mat-error>\r\n</mat-form-field>\r\n", styles: [".w-100{width:100%}.display-options{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}\n"] }]
363
+ ], template: "<mat-form-field [floatLabel]=\"floatLabel\" [ngClass]=\"{'without-padding-bottom': withoutPaddingBottom}\" class=\"w-100\"\r\n [appearance]=\"appearance\" [color]=\"color\">\r\n\r\n <mat-label *ngIf=\"showLabel\">{{label | translate}}</mat-label>\r\n <mat-icon matSuffix *ngIf=\"showSuffix\">{{suffixIcon ?? \"search\"}}</mat-icon>\r\n <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\"\r\n [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\r\n autocomplete=\"off\" matInput type=\"text\" [required]=\"required()\">\r\n <button (click)=\"clear(trigger)\" *ngIf=\"!loading() && component?.value\" [disabled]=\"disabledButton()\"\r\n aria-label=\"Clear\" mat-icon-button matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button *ngIf=\"loading()\" aria-label=\"search\" mat-icon-button matSuffix>\r\n <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\r\n </button>\r\n <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\" (onSelectionChange)=\"onSelectElement(option)\">\r\n\r\n <ng-container *ngIf=\"!displayOptions && !detailsTemplate\">\r\n {{ option?.name | i18nField: translateService.currentLang }}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!detailsTemplate\">\r\n <div class=\"display-options\">\r\n <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\r\n {{option | resolvePropertyPath:displayOptions.firthLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n <span *ngIf=\"displayOptions?.secondLabel\" class=\"mat-caption\">\r\n {{option | resolvePropertyPath: displayOptions.secondLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"detailsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-error *ngIf=\"component.hasError('required')\">\r\n {{'Este campo es requerido.' | translate}}\r\n </mat-error>\r\n\r\n <mat-error *ngIf=\"component.hasError('invalidSelection')\">\r\n {{'Debe seleccionar un elemento.' | translate}}\r\n </mat-error>\r\n\r\n <ng-container *ngFor=\"let validator of validators()\">\r\n <mat-error *ngIf=\"component.hasError(validator.key)\">\r\n {{validator.message | translate}}\r\n </mat-error>\r\n </ng-container>\r\n</mat-form-field>\r\n", styles: [".w-100{width:100%}.display-options{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}\n"] }]
350
364
  }], ctorParameters: function () { return [{ type: i1.AutocompleteService }, { type: i0.NgZone }, { type: i2.TranslateService }]; }, propDecorators: { inputText: [{
351
365
  type: ViewChild,
352
366
  args: ['inputText', { static: true }]
@@ -400,5 +414,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
400
414
  type: Input
401
415
  }], doFocus: [{
402
416
  type: Input
417
+ }], customValidators: [{
418
+ type: Input
403
419
  }] } });
404
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhY2hvcy1nZW5lcmFsLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWFjaG9zLWdlbmVyYWwtYXV0b2NvbXBsZXRlL3NyYy9saWIvZ3VhY2hvcy1nZW5lcmFsLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWFjaG9zLWdlbmVyYWwtYXV0b2NvbXBsZXRlL3NyYy9saWIvZ3VhY2hvcy1nZW5lcmFsLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sRUFDTixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFFbEIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLHFCQUFxQixFQUF5QixNQUFNLGdDQUFnQyxDQUFDO0FBQzdGLE9BQU8sRUFBeUMsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RyxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFDLFlBQVksRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUc1RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWdDeEQsTUFBTSxPQUFPLDZCQUE2QjtJQUV4QyxZQUNVLG9CQUF5QyxFQUN6QyxLQUFhLEVBQ2QsZ0JBQWtDO1FBRmpDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFJbkMsZ0JBQVcsR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELGNBQVMsR0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxELG9CQUFlLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFckQsb0JBQWUsR0FBd0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELFNBQUksR0FBMkIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLHdCQUFtQixHQUF3QyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdkUsbUJBQWMsR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELFlBQU8sR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELGFBQVEsR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELG9CQUFlLEdBQTBCLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRCxjQUFTLEdBQXVCLElBQUksa0JBQWtCLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBRzlGOztXQUVHO1FBQ00sZUFBVSxHQUFtQixNQUFNLENBQUM7UUFFcEMsc0JBQWlCLEdBQVcsR0FBRyxDQUFDO1FBRWhDLFVBQUssR0FBVyxZQUFZLENBQUM7UUFDN0IsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixlQUFVLEdBQTJCLFNBQVMsQ0FBQztRQUMvQyxVQUFLLEdBQWlCLFFBQVEsQ0FBQztRQUMvQixnQkFBVyxHQUFXLHdCQUF3QixDQUFDO1FBQy9DLFVBQUssR0FBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLGlCQUFZLEdBQVcsMkJBQTJCLENBQUM7UUFDbkQsbUJBQWMsR0FBa0IsdUJBQXVCLENBQUM7UUFDeEQseUJBQW9CLEdBQVksSUFBSSxDQUFDO1FBQ3JDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUU1QixlQUFVLEdBQVcsUUFBUSxDQUFDO1FBQzlCLHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUMvQixrQkFBYSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBa0tyRSxvQkFBZSxHQUFHLENBQUMsQ0FBTSxFQUFRLEVBQUU7UUFDbkMsQ0FBQyxDQUFDO1FBcUNGOzs7O1dBSUc7UUFDSSxjQUFTLEdBQUcsQ0FBQyxLQUFVLEVBQVUsRUFBRTtZQUN4QyxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDN0IsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBRUQsSUFBSSxXQUFXLEdBQVcsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztpQkFDL0M7Z0JBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFRLEVBQUU7b0JBQzVELElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxNQUFNLEVBQUU7d0JBQzFCLFdBQVcsSUFBSSxZQUFZLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDdkU7eUJBQU07d0JBQ0wsV0FBVyxJQUFJLEtBQUssRUFBRSxPQUFPLENBQUM7cUJBQy9CO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sV0FBVyxDQUFDO2FBQ3BCO1FBQ0gsQ0FBQyxDQUFDO0lBelFGLENBQUM7SUF5Q0QsSUFBYSxHQUFHLENBQUMsSUFBWTtRQUMzQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELElBQWEsU0FBUyxDQUFDLEtBQW9CO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVTtpQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDckMsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxHQUFTLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7b0JBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7YUFDRixDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxJQUFhLFlBQVksQ0FBQyxLQUFVO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxZQUFZLENBQUMsWUFBaUM7UUFDekQsSUFBSSxZQUFZLEVBQUU7WUFDaEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxVQUFVLENBQUMsUUFBaUI7UUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUIsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsNkJBQTZCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1NBQzFHO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxPQUFPLENBQUMsWUFBMkI7UUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUM7UUFFcEMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlO2lCQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDckMsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxHQUFTLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBUyxFQUFFO3dCQUN4QixVQUFVLENBQUMsR0FBUyxFQUFFOzRCQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQzt3QkFDekMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNWLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7YUFDRixDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyxxQkFBcUI7UUFDbEMsT0FBTyxDQUFDLE9BQXdCLEVBQWlDLEVBQUU7WUFDakUsSUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLFdBQVcsS0FBSyxNQUFNLElBQUksQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtnQkFDakUsT0FBTyxFQUFDLGdCQUFnQixFQUFFLElBQUksRUFBQyxDQUFDO2FBQ2pDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLFNBQVMsRUFBRSxZQUFZO1lBQzFCLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQzdFLEVBQUUsU0FBUyxDQUFDO1lBQ1YsSUFBSSxFQUFFLEdBQVMsRUFBRTtnQkFDZixJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO29CQUM1QyxJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQztpQkFDckU7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7aUJBQzNCO2dCQUVELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCLENBQUM7U0FDRixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLDRCQUE0QixDQUFDLElBQWE7UUFDaEQsSUFBSSxDQUFDLG9CQUFvQjthQUN0QixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUFFLEVBQ3JGLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7YUFDckQsSUFBSSxDQUFDLENBQUMsSUFBcUIsRUFBUSxFQUFFO1lBQ3BDLElBQUksRUFBRSxTQUFTLENBQUM7Z0JBQ2QsSUFBSSxFQUFFLENBQUMsTUFBVyxFQUFRLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDaEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzFCLENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0sseUJBQXlCO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZCLElBQUksSUFBSSxHQUFXLEVBQUUsQ0FBQztRQUV0QixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFO1lBQ3pCLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQzVDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxPQUFPLGNBQWMsS0FBSyxRQUFRLEVBQUU7b0JBQ3RDLElBQUksSUFBSSxHQUFXLElBQUksQ0FBQztvQkFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUNqQixJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDdEI7b0JBRUQsSUFBSSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztpQkFDN0I7YUFDRjtpQkFBTSxJQUFJLE9BQU8sSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEtBQUssUUFBUSxFQUFFO2dCQUNwRCxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7YUFDN0I7U0FDRjtRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUtELGdCQUFnQixDQUFDLEVBQW9CO1FBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxpQkFBaUI7SUFDakIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxVQUFVLENBQUMsS0FBVTtRQUNuQixJQUFJLEtBQUssRUFBRTtZQUNULElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1lBRW5ELElBQUksT0FBTyxLQUFLLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQzdDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQzthQUNyQztpQkFBTTtnQkFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNqQztTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFtQjtRQUNsQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxJQUFJLFVBQVUsRUFBRTtZQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDMUI7YUFBTTtZQUNMLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBOEJEOzs7O09BSUc7SUFDSSxLQUFLLENBQUMsT0FBK0I7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFTLEVBQUU7WUFDeEIsVUFBVSxDQUFDLEdBQVMsRUFBRTtnQkFDcEIsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3RCLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNWLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksT0FBTztRQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7WUFDM0IsSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLENBQUM7U0FDckU7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLGVBQWUsQ0FBQyxJQUFTO1FBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTlCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNoQixJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sSUFBSSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbEU7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDNUI7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLHFDQUFxQztJQUN2QyxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNsQyxDQUFDOzhHQXJVVSw2QkFBNkI7a0dBQTdCLDZCQUE2Qixpd0JBUjdCO1lBQ1Q7Z0JBQ0UsT0FBTyxFQUFFLGlCQUFpQjtnQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztnQkFDNUQsS0FBSyxFQUFFLElBQUk7YUFDWjtTQUNGLGdKQ3RFSCw4MkVBMkNBLG1MRE1JLGtCQUFrQix5Z0JBQ2xCLE9BQU8sbUZBQ1AsZUFBZSwyRkFDZixxQkFBcUIsZ2NBQ3JCLGNBQWMsMFdBQ2QsbUJBQW1CLHN5QkFDbkIsZUFBZSwyTEFDZixhQUFhLG1MQUNiLHdCQUF3QixvT0FDeEIsSUFBSSw2RkFDSixPQUFPLG1IQUNQLE9BQU8sMEVBQ1AsV0FBVywyS0FDWCxnQkFBZ0I7OzJGQVVQLDZCQUE2QjtrQkE5QnpDLFNBQVM7K0JBQ0UsaUNBQWlDLG1CQUcxQix1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLElBQUksV0FDUDt3QkFDUCxrQkFBa0I7d0JBQ2xCLE9BQU87d0JBQ1AsZUFBZTt3QkFDZixxQkFBcUI7d0JBQ3JCLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixlQUFlO3dCQUNmLGFBQWE7d0JBQ2Isd0JBQXdCO3dCQUN4QixJQUFJO3dCQUNKLE9BQU87d0JBQ1AsT0FBTzt3QkFDUCxXQUFXO3dCQUNYLGdCQUFnQjtxQkFDakIsYUFDVTt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSw4QkFBOEIsQ0FBQzs0QkFDNUQsS0FBSyxFQUFFLElBQUk7eUJBQ1o7cUJBQ0Y7OEpBMEJ1QyxTQUFTO3NCQUFoRCxTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Z0JBSTdCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUVNLEdBQUc7c0JBQWYsS0FBSztnQkFPTyxTQUFTO3NCQUFyQixLQUFLO2dCQWlCTyxZQUFZO3NCQUF4QixLQUFLO2dCQVNPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBYU8sVUFBVTtzQkFBdEIsS0FBSztnQkFpQk8sT0FBTztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ29tcG9uZW50LFxyXG4gIEVsZW1lbnRSZWYsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIGZvcndhcmRSZWYsXHJcbiAgSW5wdXQsXHJcbiAgTmdab25lLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIFZhbGlkYXRvckZuLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge01hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHtGbG9hdExhYmVsVHlwZSwgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSwgTWF0Rm9ybUZpZWxkTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGFrZVVudGlsfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtOZ0NsYXNzLCBOZ0Zvck9mLCBOZ0lmLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge01hdElucHV0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQge01hdEljb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuXHJcbmltcG9ydCB7R0VORVJBTF9ESVNQTEFZX09QVElPTlN9IGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cy9jb250YWN0cyc7XHJcbmltcG9ydCB7QXV0b2NvbXBsZXRlU2VydmljZX0gZnJvbSAnLi4vdXRpbHMvc2VydmljZXMvYXV0b2NvbXBsZXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzU2VydmljZX0gZnJvbSAnLi4vdXRpbHMvc2VydmljZXMvdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7QXBpRm9ybURhdGEsIERpc3BsYXlPcHRpb24sIFJlc3RyaWN0aW9uRmlsdGVyfSBmcm9tICcuLi91dGlscy9pbnRlcmZhY2VzL2ludGVyZmFjZXMnO1xyXG5pbXBvcnQge1BpcGVzTW9kdWxlfSBmcm9tICcuLi91dGlscy9waXBlcy9waXBlcy5tb2R1bGUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdndWFqaXJpdG9zLWdlbmVyYWwtYXV0b2NvbXBsZXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZ3VhY2hvcy1nZW5lcmFsLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZ3VhY2hvcy1nZW5lcmFsLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxyXG4gICAgTmdDbGFzcyxcclxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcclxuICAgIE1hdEF1dG9jb21wbGV0ZU1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcclxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcclxuICAgIE1hdEljb25Nb2R1bGUsXHJcbiAgICBNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGUsXHJcbiAgICBOZ0lmLFxyXG4gICAgTmdGb3JPZixcclxuICAgIE5nU3R5bGUsXHJcbiAgICBQaXBlc01vZHVsZSxcclxuICAgIE5nVGVtcGxhdGVPdXRsZXQsXHJcbiAgXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHtcclxuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEd1YWppcml0b3NHZW5lcmFsQXV0b2NvbXBsZXRlKSxcclxuICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICB9LFxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHdWFqaXJpdG9zR2VuZXJhbEF1dG9jb21wbGV0ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfYXV0b2NvbXBsZXRlU2VydmljZTogQXV0b2NvbXBsZXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcclxuICAgIHB1YmxpYyB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXNTZWxlY3RlZDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIHByaXZhdGUgZmlyc3RDYWxsOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbCh0cnVlKTtcclxuICBwcml2YXRlIGNsZWFyRGF0YSQ6IFN1YmplY3Q8dm9pZD47XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUFsbCQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgZG9Gb2N1c1N1YmplY3QkOiBTdWJqZWN0PHZvaWQ+O1xyXG4gIHByaXZhdGUgc2VsZWN0ZWRFbGVtZW50OiBXcml0YWJsZVNpZ25hbDxhbnk+ID0gc2lnbmFsKG51bGwpO1xyXG4gIHByaXZhdGUgX3VybDogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbChudWxsKTtcclxuICBwcml2YXRlIHJlc3RyaWN0aW9uc0ZpbHRlcnM6IFdyaXRhYmxlU2lnbmFsPFJlc3RyaWN0aW9uRmlsdGVyW10+ID0gc2lnbmFsKFtdKTtcclxuXHJcbiAgcHVibGljIGRpc2FibGVkQnV0dG9uOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbChmYWxzZSk7XHJcbiAgcHVibGljIGxvYWRpbmc6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcclxuICBwdWJsaWMgcmVxdWlyZWQ6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcclxuICBwdWJsaWMgZmlsdGVyZWRPcHRpb25zOiBXcml0YWJsZVNpZ25hbDxhbnlbXT4gPSBzaWduYWwoW10pO1xyXG4gIHB1YmxpYyBjb21wb25lbnQ6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woe3ZhbHVlOiBudWxsLCBkaXNhYmxlZDogZmFsc2V9KTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRUZXh0Jywge3N0YXRpYzogdHJ1ZX0pIGlucHV0VGV4dDogRWxlbWVudFJlZjtcclxuICAvKipcclxuICAgKiBQb3NzaWJsZSB2YWx1ZXMgJ25ldmVyJywgJ2F1dG8nIG9yICdhbHdheXMnXHJcbiAgICovXHJcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XHJcbiAgQElucHV0KCkgYm9keVJlcXVlc3Q6IEFwaUZvcm1EYXRhO1xyXG4gIEBJbnB1dCgpIGRlYm91bmNlVGltZVZhbHVlOiBudW1iZXIgPSAzMDA7XHJcbiAgQElucHV0KCkgZGV0YWlsc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnU2VsZWNjaW9uZSc7XHJcbiAgQElucHV0KCkgc2hvd0xhYmVsOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ291dGxpbmUnO1xyXG4gIEBJbnB1dCgpIGNvbG9yOiBUaGVtZVBhbGV0dGUgPSAnYWNjZW50JztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjY2lvbmUgdW4gZWxlbWVudG8nO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBzdHJpbmdbXSA9IFsnbmFtZSddO1xyXG4gIEBJbnB1dCgpIGZpbHRlclN0cmluZzogc3RyaW5nID0gJ2ZpbHRlclskYW5kXVtuYW1lXVskbGlrZV0nO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9uID0gR0VORVJBTF9ESVNQTEFZX09QVElPTlM7XHJcbiAgQElucHV0KCkgd2l0aG91dFBhZGRpbmdCb3R0b206IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHZhbHVlSWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93U3VmZml4OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgb3JkZXIhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3VmZml4SWNvbjogc3RyaW5nID0gJ3NlYXJjaCc7XHJcbiAgQElucHV0KCkgcmVtb3ZlUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcclxuICBAT3V0cHV0KCkgU2VsZWN0RWxlbWVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQElucHV0KCkgc2V0IHVybChkYXRhOiBzdHJpbmcpIHtcclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIHRoaXMuX3VybC5zZXQoZGF0YSk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlQ29tcG9uZW50Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IGNsZWFyRGF0YSh2YWx1ZTogU3ViamVjdDx2b2lkPikge1xyXG4gICAgdGhpcy5jbGVhckRhdGEkID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5jbGVhckRhdGEkKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJEYXRhJFxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQWxsJCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnNldFZhbHVlKG51bGwsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnNldChudWxsKTtcclxuICAgICAgICAgICAgdGhpcy5TZWxlY3RFbGVtZW50LmVtaXQobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zLnNldChbXSk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBpbml0aWFsVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5jb21wb25lbnQuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQcOxYWRlIG8gZWxpbWluYSByZXN0cmljY2lvbmVzIHBhcmEgbGEgYsO6c3F1ZWRhXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcmVzdHJpY3Rpb25zIC0gUmVzdHJpY2Npb25lcyBwYXJhIGxhIGLDunNxdWVkYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNldCByZXN0cmljdGlvbnMocmVzdHJpY3Rpb25zOiBSZXN0cmljdGlvbkZpbHRlcltdKSB7XHJcbiAgICBpZiAocmVzdHJpY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMucmVzdHJpY3Rpb25zRmlsdGVycy5zZXQocmVzdHJpY3Rpb25zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVzdHJpY3Rpb25zRmlsdGVycy5zZXQoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQcOxYWRlIG8gZWxpbWluYSBsYSB2YWxpZGFjacOzbiBkZSBxdWUgZWwgY2FtcG8gc2VhIHJlcXVlcmlkb1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHJlcXVpcmVkIC0gRGVmaW5lIHNpIGVzIHJlcXVlcmlkbyBvIG5vXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IGlzUmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucmVxdWlyZWQuc2V0KHJlcXVpcmVkKTtcclxuXHJcbiAgICBpZiAocmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnQuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgR3VhamlyaXRvc0dlbmVyYWxBdXRvY29tcGxldGUuYXV0b2NvbXBsZXRlVmFsaWRhdG9yXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgc2kgdmFtb3MgYSByZWFsaXphciB1bmEgYsO6c3F1ZWRhIGFsIGVsZW1lbnRvIGVzdGFyIGVuIGVsIGZvY3VzIGRlIGxhIGFwbGljYWNpw7NuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZm9jdXNTdWJqZWN0IC0gT2JzZXJ2YWJsZSBwYXJhIGxhIHN1YnNjcmlwY2nDs24gYWwgZXZlbnRvIEZvY3VzXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IGRvRm9jdXMoZm9jdXNTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+KSB7XHJcbiAgICB0aGlzLmRvRm9jdXNTdWJqZWN0JCA9IGZvY3VzU3ViamVjdDtcclxuXHJcbiAgICBpZiAodGhpcy5kb0ZvY3VzU3ViamVjdCQpIHtcclxuICAgICAgdGhpcy5kb0ZvY3VzU3ViamVjdCRcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFsbCQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl96b25lLnJ1bigoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0VGV4dD8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGFjacOzbiBjdXN0b21pemFkYSBwYXJhIGxhIHNlbGVjY2nDs24gZGUgZWxlbWVudG9zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXV0b2NvbXBsZXRlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbD8udmFsdWU/LmNvbnN0cnVjdG9yICE9PSBPYmplY3QgfHwgIWNvbnRyb2w/LnZhbHVlPy5pZCkge1xyXG4gICAgICAgIHJldHVybiB7aW52YWxpZFNlbGVjdGlvbjogdHJ1ZX07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXBjacOzbiBhIGxvcyBjYW1iaW9zIGRlbCBpbnB1dCBkZSBiw7pzcXVlZGFcclxuICAgKi9cclxuICBwcml2YXRlIHN1YnNjcmliZUNvbXBvbmVudENoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbXBvbmVudD8udmFsdWVDaGFuZ2VzXHJcbiAgICAgID8ucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVWYWx1ZSksIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQWxsJCkpXHJcbiAgICAgID8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZmlyc3RDYWxsKCkgJiYgIXRoaXMud2FzU2VsZWN0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEF1dG9jb21wbGV0ZUJ5VGV4dEhhbmRsZXIodGhpcy5nZXRBdXRvY29tcGxldGVTZWFyY2hUZXh0KCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdENhbGwuc2V0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLndhc1NlbGVjdGVkLnNldChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCw7pzcXVlZGEgZGUgbG9zIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gZWwgY29tcG9uZW50ZSBkZSBhdXRvY29tcGxldGFtaWVudG9cclxuICAgKlxyXG4gICAqIEBwYXJhbSB0ZXh0IC0gVGV4dG8gYSBidXNjYXJcclxuICAgKi9cclxuICBwcml2YXRlIGdldEF1dG9jb21wbGV0ZUJ5VGV4dEhhbmRsZXIodGV4dD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlU2VydmljZVxyXG4gICAgICAuZ2V0QXV0b2NvbXBsZXRlQnlUZXh0KHRoaXMuX3VybCgpLCB0ZXh0LCB0aGlzLmZpbHRlclN0cmluZywgdGhpcy5yZXN0cmljdGlvbnNGaWx0ZXJzKCksXHJcbiAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0aWVzLCB0aGlzLm9yZGVyLCB0aGlzLmJvZHlSZXF1ZXN0KVxyXG4gICAgICAudGhlbigocmVzcDogT2JzZXJ2YWJsZTxhbnk+KTogdm9pZCA9PiB7XHJcbiAgICAgICAgcmVzcD8uc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXN1bHQ6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucy5zZXQocmVzdWx0Py5wYXlsb2FkPy5kYXRhID8/IHJlc3VsdD8uZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgZWwgdGV4dG8gcG9yIGVsIHF1ZSBzZSB2YSBhIHJlYWxpemFyIGxhIGLDunNxdWVkYVxyXG4gICAqXHJcbiAgICogQHJldHVybiB7c3RyaW5nfSBUZXh0byBkZSBsYSBiw7pzcXVlZGFcclxuICAgKi9cclxuICBwcml2YXRlIGdldEF1dG9jb21wbGV0ZVNlYXJjaFRleHQoKTogc3RyaW5nIHtcclxuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XHJcblxyXG4gICAgbGV0IHRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBvbmVudD8udmFsdWUpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudC52YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBjb25zdCBjb21wb25lbnRWYWx1ZSA9IHRoaXMuY29tcG9uZW50Py52YWx1ZVt0aGlzLmZpZWxkWzBdXTtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudFZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgbGV0IGxhbmc6IHN0cmluZyA9ICdlcyc7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWVsZFsxXSkge1xyXG4gICAgICAgICAgICBsYW5nID0gdGhpcy5maWVsZFsxXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0ZXh0ID0gY29tcG9uZW50VmFsdWVbbGFuZ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudD8udmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGV4dCA9IHRoaXMuY29tcG9uZW50LnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG5cclxuICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KTogdm9pZCA9PiB7XHJcbiAgfTtcclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjaWJlIGVsIHZhbG9yIGRlbCBGb3JtQ29udHJvbFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsb3IgZW50cmFkbyBwb3IgRm9ybUNvbnRyb2xcclxuICAgKi9cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5zZXRWYWx1ZSh2YWx1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHRoaXMudmFsdWVJZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnNldCh2YWx1ZT8uaWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnNldCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnNldChudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaXNhYmxlZEJ1dHRvbi5zZXQoaXNEaXNhYmxlZCk7XHJcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5lbmFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmNpw7NuIHBhcmEgbW9zdHJhciBsb3MgZWxlbWVudG9zIGEgc2VsZWNjaW9uYXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbG9yIGEgbW9zdHJhclxyXG4gICAqL1xyXG4gIHB1YmxpYyBkaXNwbGF5Rm4gPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkaXNwbGF5VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgICAgIGlmICghdGhpcy5kaXNwbGF5T3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU9wdGlvbnMgPSBHRU5FUkFMX0RJU1BMQVlfT1BUSU9OUztcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kaXNwbGF5T3B0aW9ucz8uZmlydGhMYWJlbD8uZm9yRWFjaCgoZmllbGQ6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3BhdGgnKSB7XHJcbiAgICAgICAgICBkaXNwbGF5VGV4dCArPSBVdGlsc1NlcnZpY2UucmVzb2x2ZVByb3BlcnR5QnlQYXRoKHZhbHVlLCBmaWVsZD8ucGF0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRpc3BsYXlUZXh0ICs9IGZpZWxkPy5kaXZpZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gZGlzcGxheVRleHQ7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWNjacOzbiBhbCBsaW1waWFyIGVsIHZhbG9yIGRlbCBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHRyaWdnZXJcclxuICAgKi9cclxuICBwdWJsaWMgY2xlYXIodHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jb21wb25lbnQuc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5zZXQobnVsbCk7XHJcbiAgICB0aGlzLlNlbGVjdEVsZW1lbnQuZW1pdChudWxsKTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG51bGwpO1xyXG5cclxuICAgIHRoaXMuX3pvbmUucnVuKCgpOiB2b2lkID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgdHJpZ2dlci5vcGVuUGFuZWwoKTtcclxuICAgICAgfSwgMTAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWNjacOzbiBlbiBlbCBGb2N1cyBkZWwgZWxlbWVudG9cclxuICAgKi9cclxuICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZEVsZW1lbnQoKSkge1xyXG4gICAgICB0aGlzLmdldEF1dG9jb21wbGV0ZUJ5VGV4dEhhbmRsZXIodGhpcy5nZXRBdXRvY29tcGxldGVTZWFyY2hUZXh0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWNjacOzbiBhbCBzZWxlY2Npb25hciB1biBlbGVtZW50b1xyXG4gICAqXHJcbiAgICogQHBhcmFtIGl0ZW0gLSBFbGVtZW50byBzZWxlY2Npb25hZG9cclxuICAgKi9cclxuICBwdWJsaWMgb25TZWxlY3RFbGVtZW50KGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy53YXNTZWxlY3RlZC5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5zZXQoaXRlbSk7XHJcbiAgICB0aGlzLlNlbGVjdEVsZW1lbnQuZW1pdChpdGVtKTtcclxuXHJcbiAgICBpZiAodGhpcy52YWx1ZUlkKSB7XHJcbiAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IGl0ZW0/LmlkIDogaXRlbSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgLy8gdGhpcy5jb21wb25lbnQubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlQWxsJC5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlQWxsJC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8bWF0LWZvcm0tZmllbGQgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbFwiIFtuZ0NsYXNzXT1cInsnd2l0aG91dC1wYWRkaW5nLWJvdHRvbSc6IHdpdGhvdXRQYWRkaW5nQm90dG9tfVwiIGNsYXNzPVwidy0xMDBcIlxyXG4gICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiIFtjb2xvcl09XCJjb2xvclwiPlxyXG5cclxuICA8bWF0LWxhYmVsICpuZ0lmPVwic2hvd0xhYmVsXCI+e3tsYWJlbCB8IHRyYW5zbGF0ZX19PC9tYXQtbGFiZWw+XHJcbiAgPG1hdC1pY29uIG1hdFN1ZmZpeCAqbmdJZj1cInNob3dTdWZmaXhcIj57e3N1ZmZpeEljb24gPz8gXCJzZWFyY2hcIn19PC9tYXQtaWNvbj5cclxuICA8aW5wdXQgI2lucHV0VGV4dCAjdHJpZ2dlcj1cIm1hdEF1dG9jb21wbGV0ZVRyaWdnZXJcIiAoZm9jdXMpPVwib25Gb2N1cygpXCIgW2Zvcm1Db250cm9sXT1cImNvbXBvbmVudFwiXHJcbiAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b2NvbXBsZXRlXCIgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHwgdHJhbnNsYXRlXCIgYXJpYS1sYWJlbD1cImF1dG9jb21wbGV0ZVwiXHJcbiAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiIG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgW3JlcXVpcmVkXT1cInJlcXVpcmVkKClcIj5cclxuICA8YnV0dG9uIChjbGljayk9XCJjbGVhcih0cmlnZ2VyKVwiICpuZ0lmPVwiIWxvYWRpbmcoKSAmJiBjb21wb25lbnQ/LnZhbHVlXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkQnV0dG9uKClcIlxyXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkNsZWFyXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeD5cclxuICAgIDxtYXQtaWNvbj5jbG9zZTwvbWF0LWljb24+XHJcbiAgPC9idXR0b24+XHJcbiAgPGJ1dHRvbiAqbmdJZj1cImxvYWRpbmcoKVwiIGFyaWEtbGFiZWw9XCJzZWFyY2hcIiBtYXQtaWNvbi1idXR0b24gbWF0U3VmZml4PlxyXG4gICAgPG1hdC1zcGlubmVyIFt2YWx1ZV09XCI5MFwiIGNvbG9yPVwiYWNjZW50XCIgZGlhbWV0ZXI9XCIyNVwiPjwvbWF0LXNwaW5uZXI+XHJcbiAgPC9idXR0b24+XHJcbiAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG9jb21wbGV0ZT1cIm1hdEF1dG9jb21wbGV0ZVwiIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5Rm5cIj5cclxuICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgZmlsdGVyZWRPcHRpb25zKClcIiBbdmFsdWVdPVwib3B0aW9uXCIgKG9uU2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0RWxlbWVudChvcHRpb24pXCI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRpc3BsYXlPcHRpb25zICYmICFkZXRhaWxzVGVtcGxhdGVcIj5cclxuICAgICAgICB7eyBvcHRpb24/Lm5hbWUgfCBpMThuRmllbGQ6IHRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmcgfX1cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWRldGFpbHNUZW1wbGF0ZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkaXNwbGF5LW9wdGlvbnNcIj5cclxuICAgICAgICAgIDxzcGFuIFtuZ1N0eWxlXT1cInsnbGluZS1oZWlnaHQnOiBkaXNwbGF5T3B0aW9ucz8uc2Vjb25kTGFiZWwgPyAnMTZweCcgOiAnJ31cIj5cclxuICAgICAgICAgICAge3tvcHRpb24gfCByZXNvbHZlUHJvcGVydHlQYXRoOmRpc3BsYXlPcHRpb25zLmZpcnRoTGFiZWwgfCBpMThuRmllbGQ6IHRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmd9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPHNwYW4gKm5nSWY9XCJkaXNwbGF5T3B0aW9ucz8uc2Vjb25kTGFiZWxcIiBjbGFzcz1cIm1hdC1jYXB0aW9uXCI+XHJcbiAgICAgICAgICAgIHt7b3B0aW9uIHwgcmVzb2x2ZVByb3BlcnR5UGF0aDogZGlzcGxheU9wdGlvbnMuc2Vjb25kTGFiZWwgfCBpMThuRmllbGQ6IHRyYW5zbGF0ZVNlcnZpY2UuY3VycmVudExhbmd9fVxyXG4gICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXRhaWxzVGVtcGxhdGVcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGV0YWlsc1RlbXBsYXRlO2NvbnRleHQ6eyRpbXBsaWNpdDogb3B0aW9uIH1cIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L21hdC1vcHRpb24+XHJcbiAgPC9tYXQtYXV0b2NvbXBsZXRlPlxyXG5cclxuICA8bWF0LWVycm9yICpuZ0lmPVwiY29tcG9uZW50LmludmFsaWRcIj5cclxuICAgIHt7J0VzdGUgY2FtcG8gZXMgcmVxdWVyaWRvLicgfCB0cmFuc2xhdGV9fVxyXG4gIDwvbWF0LWVycm9yPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG4iXX0=
420
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3VhY2hvcy1nZW5lcmFsLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWFjaG9zLWdlbmVyYWwtYXV0b2NvbXBsZXRlL3NyYy9saWIvZ3VhY2hvcy1nZW5lcmFsLWF1dG9jb21wbGV0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9ndWFjaG9zLWdlbmVyYWwtYXV0b2NvbXBsZXRlL3NyYy9saWIvZ3VhY2hvcy1nZW5lcmFsLWF1dG9jb21wbGV0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUVOLE1BQU0sRUFDTixNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0wsaUJBQWlCLEVBQ2pCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFFbEIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLHFCQUFxQixFQUF5QixNQUFNLGdDQUFnQyxDQUFDO0FBQzdGLE9BQU8sRUFBeUMsa0JBQWtCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQztBQUN4RyxPQUFPLEVBQUMsZUFBZSxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDdEUsT0FBTyxFQUFDLFlBQVksRUFBYyxPQUFPLEVBQUUsU0FBUyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNsRixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDBCQUEwQixDQUFDO0FBQ3pELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUc1RSxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQztBQUMzRSxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUNBQWlDLENBQUM7QUFFN0QsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDZCQUE2QixDQUFDOzs7Ozs7Ozs7Ozs7OztBQWdDeEQsTUFBTSxPQUFPLDZCQUE2QjtJQUV4QyxZQUNVLG9CQUF5QyxFQUN6QyxLQUFhLEVBQ2QsZ0JBQWtDO1FBRmpDLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBcUI7UUFDekMsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQUNkLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFJbkMsZ0JBQVcsR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JELGNBQVMsR0FBNEIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWxELG9CQUFlLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFckQsb0JBQWUsR0FBd0IsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3BELFNBQUksR0FBMkIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzVDLHdCQUFtQixHQUF3QyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdkUsZUFBVSxHQUFzQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDM0QsbUJBQWMsR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3hELFlBQU8sR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pELGFBQVEsR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELG9CQUFlLEdBQTBCLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRCxjQUFTLEdBQXVCLElBQUksa0JBQWtCLENBQUMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUMsQ0FBQyxDQUFDO1FBRzlGOztXQUVHO1FBQ00sZUFBVSxHQUFtQixNQUFNLENBQUM7UUFFcEMsc0JBQWlCLEdBQVcsR0FBRyxDQUFDO1FBRWhDLFVBQUssR0FBVyxZQUFZLENBQUM7UUFDN0IsY0FBUyxHQUFZLElBQUksQ0FBQztRQUMxQixlQUFVLEdBQTJCLFNBQVMsQ0FBQztRQUMvQyxVQUFLLEdBQWlCLFFBQVEsQ0FBQztRQUMvQixnQkFBVyxHQUFXLHdCQUF3QixDQUFDO1FBQy9DLFVBQUssR0FBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLGlCQUFZLEdBQVcsMkJBQTJCLENBQUM7UUFDbkQsbUJBQWMsR0FBa0IsdUJBQXVCLENBQUM7UUFDeEQseUJBQW9CLEdBQVksSUFBSSxDQUFDO1FBQ3JDLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFDekIsZUFBVSxHQUFZLEtBQUssQ0FBQztRQUU1QixlQUFVLEdBQVcsUUFBUSxDQUFDO1FBQzlCLHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUMvQixrQkFBYSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBa0xyRSxvQkFBZSxHQUFHLENBQUMsQ0FBTSxFQUFRLEVBQUU7UUFDbkMsQ0FBQyxDQUFDO1FBcUNGOzs7O1dBSUc7UUFDSSxjQUFTLEdBQUcsQ0FBQyxLQUFVLEVBQVUsRUFBRTtZQUN4QyxJQUFJLEtBQUssRUFBRTtnQkFDVCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtvQkFDN0IsT0FBTyxLQUFLLENBQUM7aUJBQ2Q7Z0JBRUQsSUFBSSxXQUFXLEdBQVcsRUFBRSxDQUFDO2dCQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtvQkFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztpQkFDL0M7Z0JBRUQsSUFBSSxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFRLEVBQUU7b0JBQzVELElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxNQUFNLEVBQUU7d0JBQzFCLFdBQVcsSUFBSSxZQUFZLENBQUMscUJBQXFCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztxQkFDdkU7eUJBQU07d0JBQ0wsV0FBVyxJQUFJLEtBQUssRUFBRSxPQUFPLENBQUM7cUJBQy9CO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUVILE9BQU8sV0FBVyxDQUFDO2FBQ3BCO1FBQ0gsQ0FBQyxDQUFDO0lBMVJGLENBQUM7SUEwQ0QsSUFBYSxHQUFHLENBQUMsSUFBWTtRQUMzQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELElBQWEsU0FBUyxDQUFDLEtBQW9CO1FBQ3pDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNuQixJQUFJLENBQUMsVUFBVTtpQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDckMsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxHQUFTLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7b0JBQ2xELElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzdCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzdCLENBQUM7YUFDRixDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRCxJQUFhLFlBQVksQ0FBQyxLQUFVO1FBQ2xDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxZQUFZLENBQUMsWUFBaUM7UUFDekQsSUFBSSxZQUFZLEVBQUU7WUFDaEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUM1QzthQUFNO1lBQ0wsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxVQUFVLENBQUMsUUFBaUI7UUFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFNUIsSUFBSSxRQUFRLEVBQUU7WUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsNkJBQTZCLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1NBQzFHO2FBQU07WUFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1NBQ2xDO1FBRUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQzFDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxPQUFPLENBQUMsWUFBMkI7UUFDOUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxZQUFZLENBQUM7UUFFcEMsSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3hCLElBQUksQ0FBQyxlQUFlO2lCQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztpQkFDckMsU0FBUyxDQUFDO2dCQUNULElBQUksRUFBRSxHQUFTLEVBQUU7b0JBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBUyxFQUFFO3dCQUN4QixVQUFVLENBQUMsR0FBUyxFQUFFOzRCQUNwQixJQUFJLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsQ0FBQzt3QkFDekMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUNWLENBQUMsQ0FBQyxDQUFDO2dCQUNMLENBQUM7YUFDRixDQUFDLENBQUM7U0FDTjtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBYSxnQkFBZ0IsQ0FBQyxVQUE2QjtRQUN6RCxJQUFJLFVBQVUsRUFBRSxNQUFNLEVBQUU7WUFDdEIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQTBCLEVBQVEsRUFBRTtnQkFDdEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3BELENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDakM7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssTUFBTSxDQUFDLHFCQUFxQjtRQUNsQyxPQUFPLENBQUMsT0FBd0IsRUFBaUMsRUFBRTtZQUNqRSxJQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUUsV0FBVyxLQUFLLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO2dCQUNqRSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsSUFBSSxFQUFDLENBQUM7YUFDakM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNLLHlCQUF5QjtRQUMvQixJQUFJLENBQUMsU0FBUyxFQUFFLFlBQVk7WUFDMUIsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDN0UsRUFBRSxTQUFTLENBQUM7WUFDVixJQUFJLEVBQUUsR0FBUyxFQUFFO2dCQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQzVDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQyxDQUFDO2lCQUNyRTtxQkFBTTtvQkFDTCxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDM0I7Z0JBRUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsQ0FBQztTQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssNEJBQTRCLENBQUMsSUFBYTtRQUNoRCxJQUFJLENBQUMsb0JBQW9CO2FBQ3RCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFDckYsSUFBSSxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUNyRCxJQUFJLENBQUMsQ0FBQyxJQUFxQixFQUFRLEVBQUU7WUFDcEMsSUFBSSxFQUFFLFNBQVMsQ0FBQztnQkFDZCxJQUFJLEVBQUUsQ0FBQyxNQUFXLEVBQVEsRUFBRTtvQkFDMUIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLElBQUksTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDMUIsQ0FBQzthQUNGLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyx5QkFBeUI7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkIsSUFBSSxJQUFJLEdBQVcsRUFBRSxDQUFDO1FBRXRCLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUU7WUFDekIsSUFBSSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxLQUFLLFFBQVEsRUFBRTtnQkFDNUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLE9BQU8sY0FBYyxLQUFLLFFBQVEsRUFBRTtvQkFDdEMsSUFBSSxJQUFJLEdBQVcsSUFBSSxDQUFDO29CQUN4QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ2pCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO3FCQUN0QjtvQkFFRCxJQUFJLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM3QjthQUNGO2lCQUFNLElBQUksT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssS0FBSyxRQUFRLEVBQUU7Z0JBQ3BELElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQzthQUM3QjtTQUNGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBS0QsZ0JBQWdCLENBQUMsRUFBb0I7UUFDbkMsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELGlCQUFpQjtJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFVBQVUsQ0FBQyxLQUFVO1FBQ25CLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUM7WUFFbkQsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDN0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2FBQ3JDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ2pDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQztJQUVELGdCQUFnQixDQUFDLFVBQW1CO1FBQ2xDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BDLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxQjthQUFNO1lBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztTQUN6QjtJQUNILENBQUM7SUE4QkQ7Ozs7T0FJRztJQUNJLEtBQUssQ0FBQyxPQUErQjtRQUMxQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTNCLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQVMsRUFBRTtZQUN4QixVQUFVLENBQUMsR0FBUyxFQUFFO2dCQUNwQixPQUFPLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdEIsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1YsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxPQUFPO1FBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUMzQixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUMsQ0FBQztTQUNyRTtJQUNILENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZUFBZSxDQUFDLElBQVM7UUFDOUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNsRTthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xDLENBQUM7OEdBbFZVLDZCQUE2QjtrR0FBN0IsNkJBQTZCLHV5QkFSN0I7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDZCQUE2QixDQUFDO2dCQUM1RCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0YsZ0pDckVILDh0RkFxREEsbUxETEksa0JBQWtCLHlnQkFDbEIsT0FBTyxtRkFDUCxlQUFlLDJGQUNmLHFCQUFxQixnY0FDckIsY0FBYywwV0FDZCxtQkFBbUIsc3lCQUNuQixlQUFlLDJMQUNmLGFBQWEsbUxBQ2Isd0JBQXdCLG9PQUN4QixJQUFJLDZGQUNKLE9BQU8sbUhBQ1AsT0FBTywwRUFDUCxXQUFXLDJLQUNYLGdCQUFnQjs7MkZBVVAsNkJBQTZCO2tCQTlCekMsU0FBUzsrQkFDRSxpQ0FBaUMsbUJBRzFCLHVCQUF1QixDQUFDLE1BQU0sY0FDbkMsSUFBSSxXQUNQO3dCQUNQLGtCQUFrQjt3QkFDbEIsT0FBTzt3QkFDUCxlQUFlO3dCQUNmLHFCQUFxQjt3QkFDckIsY0FBYzt3QkFDZCxtQkFBbUI7d0JBQ25CLGVBQWU7d0JBQ2YsYUFBYTt3QkFDYix3QkFBd0I7d0JBQ3hCLElBQUk7d0JBQ0osT0FBTzt3QkFDUCxPQUFPO3dCQUNQLFdBQVc7d0JBQ1gsZ0JBQWdCO3FCQUNqQixhQUNVO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDhCQUE4QixDQUFDOzRCQUM1RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjs4SkEyQnVDLFNBQVM7c0JBQWhELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQztnQkFJN0IsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRU0sR0FBRztzQkFBZixLQUFLO2dCQU9PLFNBQVM7c0JBQXJCLEtBQUs7Z0JBaUJPLFlBQVk7c0JBQXhCLEtBQUs7Z0JBU08sWUFBWTtzQkFBeEIsS0FBSztnQkFhTyxVQUFVO3NCQUF0QixLQUFLO2dCQWlCTyxPQUFPO3NCQUFuQixLQUFLO2dCQXVCTyxnQkFBZ0I7c0JBQTVCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBmb3J3YXJkUmVmLFxyXG4gIElucHV0LFxyXG4gIE5nWm9uZSxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT3V0cHV0LFxyXG4gIHNpZ25hbCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3Q2hpbGQsXHJcbiAgV3JpdGFibGVTaWduYWwsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxyXG4gIFJlYWN0aXZlRm9ybXNNb2R1bGUsXHJcbiAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gIFZhbGlkYXRvckZuLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge01hdEF1dG9jb21wbGV0ZU1vZHVsZSwgTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHtGbG9hdExhYmVsVHlwZSwgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSwgTWF0Rm9ybUZpZWxkTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcclxuaW1wb3J0IHtUcmFuc2xhdGVNb2R1bGUsIFRyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQge2RlYm91bmNlVGltZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgdGFrZVVudGlsfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtOZ0NsYXNzLCBOZ0Zvck9mLCBOZ0lmLCBOZ1N0eWxlLCBOZ1RlbXBsYXRlT3V0bGV0fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge01hdElucHV0TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQge01hdEljb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQge01hdFByb2dyZXNzU3Bpbm5lck1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcHJvZ3Jlc3Mtc3Bpbm5lcic7XHJcbmltcG9ydCB7VGhlbWVQYWxldHRlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcclxuXHJcbmltcG9ydCB7R0VORVJBTF9ESVNQTEFZX09QVElPTlN9IGZyb20gJy4uL3V0aWxzL2NvbnN0YW50cy9jb250YWN0cyc7XHJcbmltcG9ydCB7QXV0b2NvbXBsZXRlU2VydmljZX0gZnJvbSAnLi4vdXRpbHMvc2VydmljZXMvYXV0b2NvbXBsZXRlLnNlcnZpY2UnO1xyXG5pbXBvcnQge1V0aWxzU2VydmljZX0gZnJvbSAnLi4vdXRpbHMvc2VydmljZXMvdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7QXBpRm9ybURhdGEsIEN1c3RvbVZhbGlkYXRvciwgRGlzcGxheU9wdGlvbiwgUmVzdHJpY3Rpb25GaWx0ZXJ9IGZyb20gJy4uL3V0aWxzL2ludGVyZmFjZXMvaW50ZXJmYWNlcyc7XHJcbmltcG9ydCB7UGlwZXNNb2R1bGV9IGZyb20gJy4uL3V0aWxzL3BpcGVzL3BpcGVzLm1vZHVsZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2d1YWppcml0b3MtZ2VuZXJhbC1hdXRvY29tcGxldGUnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9ndWFjaG9zLWdlbmVyYWwtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9ndWFjaG9zLWdlbmVyYWwtYXV0b2NvbXBsZXRlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBNYXRGb3JtRmllbGRNb2R1bGUsXHJcbiAgICBOZ0NsYXNzLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxyXG4gICAgTWF0QXV0b2NvbXBsZXRlTW9kdWxlLFxyXG4gICAgTWF0SW5wdXRNb2R1bGUsXHJcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxyXG4gICAgTWF0QnV0dG9uTW9kdWxlLFxyXG4gICAgTWF0SWNvbk1vZHVsZSxcclxuICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcclxuICAgIE5nSWYsXHJcbiAgICBOZ0Zvck9mLFxyXG4gICAgTmdTdHlsZSxcclxuICAgIFBpcGVzTW9kdWxlLFxyXG4gICAgTmdUZW1wbGF0ZU91dGxldCxcclxuICBdLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gR3VhamlyaXRvc0dlbmVyYWxBdXRvY29tcGxldGUpLFxyXG4gICAgICBtdWx0aTogdHJ1ZSxcclxuICAgIH0sXHJcbiAgXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEd1YWppcml0b3NHZW5lcmFsQXV0b2NvbXBsZXRlIGltcGxlbWVudHMgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfYXV0b2NvbXBsZXRlU2VydmljZTogQXV0b2NvbXBsZXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgX3pvbmU6IE5nWm9uZSxcclxuICAgIHB1YmxpYyB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB3YXNTZWxlY3RlZDogV3JpdGFibGVTaWduYWw8Ym9vbGVhbj4gPSBzaWduYWwoZmFsc2UpO1xyXG4gIHByaXZhdGUgZmlyc3RDYWxsOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbCh0cnVlKTtcclxuICBwcml2YXRlIGNsZWFyRGF0YSQ6IFN1YmplY3Q8dm9pZD47XHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZUFsbCQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgZG9Gb2N1c1N1YmplY3QkOiBTdWJqZWN0PHZvaWQ+O1xyXG4gIHByaXZhdGUgc2VsZWN0ZWRFbGVtZW50OiBXcml0YWJsZVNpZ25hbDxhbnk+ID0gc2lnbmFsKG51bGwpO1xyXG4gIHByaXZhdGUgX3VybDogV3JpdGFibGVTaWduYWw8c3RyaW5nPiA9IHNpZ25hbChudWxsKTtcclxuICBwcml2YXRlIHJlc3RyaWN0aW9uc0ZpbHRlcnM6IFdyaXRhYmxlU2lnbmFsPFJlc3RyaWN0aW9uRmlsdGVyW10+ID0gc2lnbmFsKFtdKTtcclxuXHJcbiAgcHVibGljIHZhbGlkYXRvcnM6IFdyaXRhYmxlU2lnbmFsPEN1c3RvbVZhbGlkYXRvcltdPiA9IHNpZ25hbChbXSk7XHJcbiAgcHVibGljIGRpc2FibGVkQnV0dG9uOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPiA9IHNpZ25hbChmYWxzZSk7XHJcbiAgcHVibGljIGxvYWRpbmc6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcclxuICBwdWJsaWMgcmVxdWlyZWQ6IFdyaXRhYmxlU2lnbmFsPGJvb2xlYW4+ID0gc2lnbmFsKGZhbHNlKTtcclxuICBwdWJsaWMgZmlsdGVyZWRPcHRpb25zOiBXcml0YWJsZVNpZ25hbDxhbnlbXT4gPSBzaWduYWwoW10pO1xyXG4gIHB1YmxpYyBjb21wb25lbnQ6IFVudHlwZWRGb3JtQ29udHJvbCA9IG5ldyBVbnR5cGVkRm9ybUNvbnRyb2woe3ZhbHVlOiBudWxsLCBkaXNhYmxlZDogZmFsc2V9KTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnaW5wdXRUZXh0Jywge3N0YXRpYzogdHJ1ZX0pIGlucHV0VGV4dDogRWxlbWVudFJlZjtcclxuICAvKipcclxuICAgKiBQb3NzaWJsZSB2YWx1ZXMgJ25ldmVyJywgJ2F1dG8nIG9yICdhbHdheXMnXHJcbiAgICovXHJcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XHJcbiAgQElucHV0KCkgYm9keVJlcXVlc3Q6IEFwaUZvcm1EYXRhO1xyXG4gIEBJbnB1dCgpIGRlYm91bmNlVGltZVZhbHVlOiBudW1iZXIgPSAzMDA7XHJcbiAgQElucHV0KCkgZGV0YWlsc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmcgPSAnU2VsZWNjaW9uZSc7XHJcbiAgQElucHV0KCkgc2hvd0xhYmVsOiBib29sZWFuID0gdHJ1ZTtcclxuICBASW5wdXQoKSBhcHBlYXJhbmNlOiBNYXRGb3JtRmllbGRBcHBlYXJhbmNlID0gJ291dGxpbmUnO1xyXG4gIEBJbnB1dCgpIGNvbG9yOiBUaGVtZVBhbGV0dGUgPSAnYWNjZW50JztcclxuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nID0gJ1NlbGVjY2lvbmUgdW4gZWxlbWVudG8nO1xyXG4gIEBJbnB1dCgpIGZpZWxkOiBzdHJpbmdbXSA9IFsnbmFtZSddO1xyXG4gIEBJbnB1dCgpIGZpbHRlclN0cmluZzogc3RyaW5nID0gJ2ZpbHRlclskYW5kXVtuYW1lXVskbGlrZV0nO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlPcHRpb25zOiBEaXNwbGF5T3B0aW9uID0gR0VORVJBTF9ESVNQTEFZX09QVElPTlM7XHJcbiAgQElucHV0KCkgd2l0aG91dFBhZGRpbmdCb3R0b206IGJvb2xlYW4gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIHZhbHVlSWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBzaG93U3VmZml4OiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KCkgb3JkZXIhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgc3VmZml4SWNvbjogc3RyaW5nID0gJ3NlYXJjaCc7XHJcbiAgQElucHV0KCkgcmVtb3ZlUHJvcGVydGllczogc3RyaW5nW10gPSBbXTtcclxuICBAT3V0cHV0KCkgU2VsZWN0RWxlbWVudDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuXHJcbiAgQElucHV0KCkgc2V0IHVybChkYXRhOiBzdHJpbmcpIHtcclxuICAgIGlmIChkYXRhKSB7XHJcbiAgICAgIHRoaXMuX3VybC5zZXQoZGF0YSk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlQ29tcG9uZW50Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KCkgc2V0IGNsZWFyRGF0YSh2YWx1ZTogU3ViamVjdDx2b2lkPikge1xyXG4gICAgdGhpcy5jbGVhckRhdGEkID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5jbGVhckRhdGEkKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJEYXRhJFxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQWxsJCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnNldFZhbHVlKG51bGwsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnNldChudWxsKTtcclxuICAgICAgICAgICAgdGhpcy5TZWxlY3RFbGVtZW50LmVtaXQobnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zLnNldChbXSk7XHJcbiAgICAgICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG51bGwpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIHNldCBpbml0aWFsVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgdGhpcy5jb21wb25lbnQuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQcOxYWRlIG8gZWxpbWluYSByZXN0cmljY2lvbmVzIHBhcmEgbGEgYsO6c3F1ZWRhXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcmVzdHJpY3Rpb25zIC0gUmVzdHJpY2Npb25lcyBwYXJhIGxhIGLDunNxdWVkYVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNldCByZXN0cmljdGlvbnMocmVzdHJpY3Rpb25zOiBSZXN0cmljdGlvbkZpbHRlcltdKSB7XHJcbiAgICBpZiAocmVzdHJpY3Rpb25zKSB7XHJcbiAgICAgIHRoaXMucmVzdHJpY3Rpb25zRmlsdGVycy5zZXQocmVzdHJpY3Rpb25zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucmVzdHJpY3Rpb25zRmlsdGVycy5zZXQoW10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQcOxYWRlIG8gZWxpbWluYSBsYSB2YWxpZGFjacOzbiBkZSBxdWUgZWwgY2FtcG8gc2VhIHJlcXVlcmlkb1xyXG4gICAqXHJcbiAgICogQHBhcmFtIHJlcXVpcmVkIC0gRGVmaW5lIHNpIGVzIHJlcXVlcmlkbyBvIG5vXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IGlzUmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMucmVxdWlyZWQuc2V0KHJlcXVpcmVkKTtcclxuXHJcbiAgICBpZiAocmVxdWlyZWQpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnQuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgR3VhamlyaXRvc0dlbmVyYWxBdXRvY29tcGxldGUuYXV0b2NvbXBsZXRlVmFsaWRhdG9yXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgc2kgdmFtb3MgYSByZWFsaXphciB1bmEgYsO6c3F1ZWRhIGFsIGVsZW1lbnRvIGVzdGFyIGVuIGVsIGZvY3VzIGRlIGxhIGFwbGljYWNpw7NuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gZm9jdXNTdWJqZWN0IC0gT2JzZXJ2YWJsZSBwYXJhIGxhIHN1YnNjcmlwY2nDs24gYWwgZXZlbnRvIEZvY3VzXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IGRvRm9jdXMoZm9jdXNTdWJqZWN0OiBTdWJqZWN0PHZvaWQ+KSB7XHJcbiAgICB0aGlzLmRvRm9jdXNTdWJqZWN0JCA9IGZvY3VzU3ViamVjdDtcclxuXHJcbiAgICBpZiAodGhpcy5kb0ZvY3VzU3ViamVjdCQpIHtcclxuICAgICAgdGhpcy5kb0ZvY3VzU3ViamVjdCRcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZUFsbCQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKCk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl96b25lLnJ1bigoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0VGV4dD8ubmF0aXZlRWxlbWVudD8uZm9jdXMoKTtcclxuICAgICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgY3VzdG9tIHZhbGlkYXRvcnMgZm9yIGF1dG9jb21wbGV0ZVxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbGlkYXRvcnMgLSBBIGxpc3Qgb2YgY3VzdG9tcyB2YWxpZGF0b3JzXHJcbiAgICovXHJcbiAgQElucHV0KCkgc2V0IGN1c3RvbVZhbGlkYXRvcnModmFsaWRhdG9yczogQ3VzdG9tVmFsaWRhdG9yW10pIHtcclxuICAgIGlmICh2YWxpZGF0b3JzPy5sZW5ndGgpIHtcclxuICAgICAgdmFsaWRhdG9ycy5mb3JFYWNoKCh2YWxpZGF0b3I6IEN1c3RvbVZhbGlkYXRvcik6IHZvaWQgPT4ge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50LmFkZFZhbGlkYXRvcnModmFsaWRhdG9yLnZhbGlkYXRvcik7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnZhbGlkYXRvcnMuc2V0KHZhbGlkYXRvcnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52YWxpZGF0b3JzLnNldChbXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGFjacOzbiBjdXN0b21pemFkYSBwYXJhIGxhIHNlbGVjY2nDs24gZGUgZWxlbWVudG9zXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzdGF0aWMgYXV0b2NvbXBsZXRlVmFsaWRhdG9yKCk6IFZhbGlkYXRvckZuIHtcclxuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xyXG4gICAgICBpZiAoY29udHJvbD8udmFsdWU/LmNvbnN0cnVjdG9yICE9PSBPYmplY3QgfHwgIWNvbnRyb2w/LnZhbHVlPy5pZCkge1xyXG4gICAgICAgIHJldHVybiB7aW52YWxpZFNlbGVjdGlvbjogdHJ1ZX07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU3Vic2NyaXBjacOzbiBhIGxvcyBjYW1iaW9zIGRlbCBpbnB1dCBkZSBiw7pzcXVlZGFcclxuICAgKi9cclxuICBwcml2YXRlIHN1YnNjcmliZUNvbXBvbmVudENoYW5nZXMoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvbXBvbmVudD8udmFsdWVDaGFuZ2VzXHJcbiAgICAgID8ucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVRpbWVWYWx1ZSksIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlQWxsJCkpXHJcbiAgICAgID8uc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgICBpZiAoIXRoaXMuZmlyc3RDYWxsKCkgJiYgIXRoaXMud2FzU2VsZWN0ZWQoKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldEF1dG9jb21wbGV0ZUJ5VGV4dEhhbmRsZXIodGhpcy5nZXRBdXRvY29tcGxldGVTZWFyY2hUZXh0KCkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maXJzdENhbGwuc2V0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLndhc1NlbGVjdGVkLnNldChmYWxzZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBCw7pzcXVlZGEgZGUgbG9zIGVsZW1lbnRvcyBhIG1vc3RyYXIgZW4gZWwgY29tcG9uZW50ZSBkZSBhdXRvY29tcGxldGFtaWVudG9cclxuICAgKlxyXG4gICAqIEBwYXJhbSB0ZXh0IC0gVGV4dG8gYSBidXNjYXJcclxuICAgKi9cclxuICBwcml2YXRlIGdldEF1dG9jb21wbGV0ZUJ5VGV4dEhhbmRsZXIodGV4dD86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlU2VydmljZVxyXG4gICAgICAuZ2V0QXV0b2NvbXBsZXRlQnlUZXh0KHRoaXMuX3VybCgpLCB0ZXh0LCB0aGlzLmZpbHRlclN0cmluZywgdGhpcy5yZXN0cmljdGlvbnNGaWx0ZXJzKCksXHJcbiAgICAgICAgdGhpcy5yZW1vdmVQcm9wZXJ0aWVzLCB0aGlzLm9yZGVyLCB0aGlzLmJvZHlSZXF1ZXN0KVxyXG4gICAgICAudGhlbigocmVzcDogT2JzZXJ2YWJsZTxhbnk+KTogdm9pZCA9PiB7XHJcbiAgICAgICAgcmVzcD8uc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZXN1bHQ6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucy5zZXQocmVzdWx0Py5wYXlsb2FkPy5kYXRhID8/IHJlc3VsdD8uZGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZy5zZXQoZmFsc2UpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmUgZWwgdGV4dG8gcG9yIGVsIHF1ZSBzZSB2YSBhIHJlYWxpemFyIGxhIGLDunNxdWVkYVxyXG4gICAqXHJcbiAgICogQHJldHVybiB7c3RyaW5nfSBUZXh0byBkZSBsYSBiw7pzcXVlZGFcclxuICAgKi9cclxuICBwcml2YXRlIGdldEF1dG9jb21wbGV0ZVNlYXJjaFRleHQoKTogc3RyaW5nIHtcclxuICAgIHRoaXMubG9hZGluZy5zZXQodHJ1ZSk7XHJcblxyXG4gICAgbGV0IHRleHQ6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbXBvbmVudD8udmFsdWUpIHtcclxuICAgICAgaWYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudC52YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBjb25zdCBjb21wb25lbnRWYWx1ZSA9IHRoaXMuY29tcG9uZW50Py52YWx1ZVt0aGlzLmZpZWxkWzBdXTtcclxuICAgICAgICBpZiAodHlwZW9mIGNvbXBvbmVudFZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgbGV0IGxhbmc6IHN0cmluZyA9ICdlcyc7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWVsZFsxXSkge1xyXG4gICAgICAgICAgICBsYW5nID0gdGhpcy5maWVsZFsxXTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0ZXh0ID0gY29tcG9uZW50VmFsdWVbbGFuZ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLmNvbXBvbmVudD8udmFsdWUgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgdGV4dCA9IHRoaXMuY29tcG9uZW50LnZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG5cclxuICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KTogdm9pZCA9PiB7XHJcbiAgfTtcclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF86IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVjaWJlIGVsIHZhbG9yIGRlbCBGb3JtQ29udHJvbFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHZhbHVlIC0gVmFsb3IgZW50cmFkbyBwb3IgRm9ybUNvbnRyb2xcclxuICAgKi9cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5zZXRWYWx1ZSh2YWx1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHRoaXMudmFsdWVJZCkge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnNldCh2YWx1ZT8uaWQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnNldCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbGVtZW50LnNldChudWxsKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNhYmxlZEJ1dHRvbi5zZXQoaXNEaXNhYmxlZCk7XHJcbiAgICBpZiAoaXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5kaXNhYmxlKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudC5lbmFibGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZ1bmNpw7NuIHBhcmEgbW9zdHJhciBsb3MgZWxlbWVudG9zIGEgc2VsZWNjaW9uYXJcclxuICAgKlxyXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFZhbG9yIGEgbW9zdHJhclxyXG4gICAqL1xyXG4gIHB1YmxpYyBkaXNwbGF5Rm4gPSAodmFsdWU6IGFueSk6IHN0cmluZyA9PiB7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBkaXNwbGF5VGV4dDogc3RyaW5nID0gJyc7XHJcbiAgICAgIGlmICghdGhpcy5kaXNwbGF5T3B0aW9ucykge1xyXG4gICAgICAgIHRoaXMuZGlzcGxheU9wdGlvbnMgPSBHRU5FUkFMX0RJU1BMQVlfT1BUSU9OUztcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kaXNwbGF5T3B0aW9ucz8uZmlydGhMYWJlbD8uZm9yRWFjaCgoZmllbGQ6IGFueSk6IHZvaWQgPT4ge1xyXG4gICAgICAgIGlmIChmaWVsZD8udHlwZSA9PT0gJ3BhdGgnKSB7XHJcbiAgICAgICAgICBkaXNwbGF5VGV4dCArPSBVdGlsc1NlcnZpY2UucmVzb2x2ZVByb3BlcnR5QnlQYXRoKHZhbHVlLCBmaWVsZD8ucGF0aCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGRpc3BsYXlUZXh0ICs9IGZpZWxkPy5kaXZpZGVyO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICByZXR1cm4gZGlzcGxheVRleHQ7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWNjacOzbiBhbCBsaW1waWFyIGVsIHZhbG9yIGRlbCBpbnB1dFxyXG4gICAqXHJcbiAgICogQHBhcmFtIHRyaWdnZXJcclxuICAgKi9cclxuICBwdWJsaWMgY2xlYXIodHJpZ2dlcjogTWF0QXV0b2NvbXBsZXRlVHJpZ2dlcik6IHZvaWQge1xyXG4gICAgdGhpcy5jb21wb25lbnQuc2V0VmFsdWUobnVsbCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5zZXQobnVsbCk7XHJcbiAgICB0aGlzLlNlbGVjdEVsZW1lbnQuZW1pdChudWxsKTtcclxuICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKG51bGwpO1xyXG5cclxuICAgIHRoaXMuX3pvbmUucnVuKCgpOiB2b2lkID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKTogdm9pZCA9PiB7XHJcbiAgICAgICAgdHJpZ2dlci5vcGVuUGFuZWwoKTtcclxuICAgICAgfSwgMTAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWNjacOzbiBlbiBlbCBGb2N1cyBkZWwgZWxlbWVudG9cclxuICAgKi9cclxuICBwdWJsaWMgb25Gb2N1cygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RlZEVsZW1lbnQoKSkge1xyXG4gICAgICB0aGlzLmdldEF1dG9jb21wbGV0ZUJ5VGV4dEhhbmRsZXIodGhpcy5nZXRBdXRvY29tcGxldGVTZWFyY2hUZXh0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWNjacOzbiBhbCBzZWxlY2Npb25hciB1biBlbGVtZW50b1xyXG4gICAqXHJcbiAgICogQHBhcmFtIGl0ZW0gLSBFbGVtZW50byBzZWxlY2Npb25hZG9cclxuICAgKi9cclxuICBwdWJsaWMgb25TZWxlY3RFbGVtZW50KGl0ZW06IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy53YXNTZWxlY3RlZC5zZXQodHJ1ZSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkRWxlbWVudC5zZXQoaXRlbSk7XHJcbiAgICB0aGlzLlNlbGVjdEVsZW1lbnQuZW1pdChpdGVtKTtcclxuXHJcbiAgICBpZiAodGhpcy52YWx1ZUlkKSB7XHJcbiAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JyA/IGl0ZW0/LmlkIDogaXRlbSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZShpdGVtKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFsbCQubmV4dCgpO1xyXG4gICAgdGhpcy51bnN1YnNjcmliZUFsbCQuY29tcGxldGUoKTtcclxuICB9XHJcbn1cclxuIiwiPG1hdC1mb3JtLWZpZWxkIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWxcIiBbbmdDbGFzc109XCJ7J3dpdGhvdXQtcGFkZGluZy1ib3R0b20nOiB3aXRob3V0UGFkZGluZ0JvdHRvbX1cIiBjbGFzcz1cInctMTAwXCJcclxuICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIiBbY29sb3JdPVwiY29sb3JcIj5cclxuXHJcbiAgPG1hdC1sYWJlbCAqbmdJZj1cInNob3dMYWJlbFwiPnt7bGFiZWwgfCB0cmFuc2xhdGV9fTwvbWF0LWxhYmVsPlxyXG4gIDxtYXQtaWNvbiBtYXRTdWZmaXggKm5nSWY9XCJzaG93U3VmZml4XCI+e3tzdWZmaXhJY29uID8/IFwic2VhcmNoXCJ9fTwvbWF0LWljb24+XHJcbiAgPGlucHV0ICNpbnB1dFRleHQgI3RyaWdnZXI9XCJtYXRBdXRvY29tcGxldGVUcmlnZ2VyXCIgKGZvY3VzKT1cIm9uRm9jdXMoKVwiIFtmb3JtQ29udHJvbF09XCJjb21wb25lbnRcIlxyXG4gICAgICAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9jb21wbGV0ZVwiIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8IHRyYW5zbGF0ZVwiIGFyaWEtbGFiZWw9XCJhdXRvY29tcGxldGVcIlxyXG4gICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIiBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIFtyZXF1aXJlZF09XCJyZXF1aXJlZCgpXCI+XHJcbiAgPGJ1dHRvbiAoY2xpY2spPVwiY2xlYXIodHJpZ2dlcilcIiAqbmdJZj1cIiFsb2FkaW5nKCkgJiYgY29tcG9uZW50Py52YWx1ZVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZEJ1dHRvbigpXCJcclxuICAgICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiIG1hdC1pY29uLWJ1dHRvbiBtYXRTdWZmaXg+XHJcbiAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxidXR0b24gKm5nSWY9XCJsb2FkaW5nKClcIiBhcmlhLWxhYmVsPVwic2VhcmNoXCIgbWF0LWljb24tYnV0dG9uIG1hdFN1ZmZpeD5cclxuICAgIDxtYXQtc3Bpbm5lciBbdmFsdWVdPVwiOTBcIiBjb2xvcj1cImFjY2VudFwiIGRpYW1ldGVyPVwiMjVcIj48L21hdC1zcGlubmVyPlxyXG4gIDwvYnV0dG9uPlxyXG4gIDxtYXQtYXV0b2NvbXBsZXRlICNhdXRvY29tcGxldGU9XCJtYXRBdXRvY29tcGxldGVcIiBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUZuXCI+XHJcbiAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGZpbHRlcmVkT3B0aW9ucygpXCIgW3ZhbHVlXT1cIm9wdGlvblwiIChvblNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdEVsZW1lbnQob3B0aW9uKVwiPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkaXNwbGF5T3B0aW9ucyAmJiAhZGV0YWlsc1RlbXBsYXRlXCI+XHJcbiAgICAgICAge3sgb3B0aW9uPy5uYW1lIHwgaTE4bkZpZWxkOiB0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nIH19XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFkZXRhaWxzVGVtcGxhdGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGlzcGxheS1vcHRpb25zXCI+XHJcbiAgICAgICAgICA8c3BhbiBbbmdTdHlsZV09XCJ7J2xpbmUtaGVpZ2h0JzogZGlzcGxheU9wdGlvbnM/LnNlY29uZExhYmVsID8gJzE2cHgnIDogJyd9XCI+XHJcbiAgICAgICAgICAgIHt7b3B0aW9uIHwgcmVzb2x2ZVByb3BlcnR5UGF0aDpkaXNwbGF5T3B0aW9ucy5maXJ0aExhYmVsIHwgaTE4bkZpZWxkOiB0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZGlzcGxheU9wdGlvbnM/LnNlY29uZExhYmVsXCIgY2xhc3M9XCJtYXQtY2FwdGlvblwiPlxyXG4gICAgICAgICAgICB7e29wdGlvbiB8IHJlc29sdmVQcm9wZXJ0eVBhdGg6IGRpc3BsYXlPcHRpb25zLnNlY29uZExhYmVsIHwgaTE4bkZpZWxkOiB0cmFuc2xhdGVTZXJ2aWNlLmN1cnJlbnRMYW5nfX1cclxuICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZGV0YWlsc1RlbXBsYXRlXCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRldGFpbHNUZW1wbGF0ZTtjb250ZXh0OnskaW1wbGljaXQ6IG9wdGlvbiB9XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9tYXQtb3B0aW9uPlxyXG4gIDwvbWF0LWF1dG9jb21wbGV0ZT5cclxuXHJcbiAgPG1hdC1lcnJvciAqbmdJZj1cImNvbXBvbmVudC5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAge3snRXN0ZSBjYW1wbyBlcyByZXF1ZXJpZG8uJyB8IHRyYW5zbGF0ZX19XHJcbiAgPC9tYXQtZXJyb3I+XHJcblxyXG4gIDxtYXQtZXJyb3IgKm5nSWY9XCJjb21wb25lbnQuaGFzRXJyb3IoJ2ludmFsaWRTZWxlY3Rpb24nKVwiPlxyXG4gICAge3snRGViZSBzZWxlY2Npb25hciB1biBlbGVtZW50by4nIHwgdHJhbnNsYXRlfX1cclxuICA8L21hdC1lcnJvcj5cclxuXHJcbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdmFsaWRhdG9yIG9mIHZhbGlkYXRvcnMoKVwiPlxyXG4gICAgPG1hdC1lcnJvciAqbmdJZj1cImNvbXBvbmVudC5oYXNFcnJvcih2YWxpZGF0b3Iua2V5KVwiPlxyXG4gICAgICB7e3ZhbGlkYXRvci5tZXNzYWdlIHwgdHJhbnNsYXRlfX1cclxuICAgIDwvbWF0LWVycm9yPlxyXG4gIDwvbmctY29udGFpbmVyPlxyXG48L21hdC1mb3JtLWZpZWxkPlxyXG4iXX0=
@@ -9,4 +9,4 @@ export var CustomPipes;
9
9
  CustomPipes["CURRENCY"] = "currency";
10
10
  CustomPipes["UPPERCASE"] = "uppercase";
11
11
  })(CustomPipes || (CustomPipes = {}));
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1YWNob3MtZ2VuZXJhbC1hdXRvY29tcGxldGUvc3JjL3V0aWxzL2ludGVyZmFjZXMvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQU4sSUFBWSxXQVNYO0FBVEQsV0FBWSxXQUFXO0lBQ25CLDZDQUE4QixDQUFBO0lBQzlCLDZDQUE4QixDQUFBO0lBQzlCLHFEQUFzQyxDQUFBO0lBQ3RDLDBEQUEyQyxDQUFBO0lBQzNDLHVDQUF3QixDQUFBO0lBQ3hCLHVDQUF3QixDQUFBO0lBQ3hCLG9DQUFxQixDQUFBO0lBQ3JCLHNDQUF1QixDQUFBO0FBQzNCLENBQUMsRUFUVyxXQUFXLEtBQVgsV0FBVyxRQVN0QiIsInNvdXJjZXNDb250ZW50IjpbImRlY2xhcmUgdHlwZSBEaXNwbGF5T3B0aW9uSXRlbVR5cGUgPSAnZGl2aWRlcicgfCAncGF0aCc7XHJcblxyXG5leHBvcnQgZW51bSBDdXN0b21QaXBlcyB7XHJcbiAgICBTSE9XX1NFR01FTlRTID0gJ3Nob3dTZWdtZW50cycsXHJcbiAgICBEVVJBVElPTl9USU1FID0gJ2R1cmF0aW9uVGltZScsXHJcbiAgICBIVU1BTklaRV9EVVJBVElPTiA9ICdodW1hbml6ZUR1cmF0aW9uJyxcclxuICAgIFNIT1dfVFJBTlNQT1JUX1RZUEVTID0gJ3Nob3dUcmFuc3BvcnRUeXBlcycsXHJcbiAgICBTSE9XX1JPTEVTID0gJ3Nob3dSb2xlcycsXHJcbiAgICBJREFfUkVUVVJOID0gJ2lkYVJldHVybicsXHJcbiAgICBDVVJSRU5DWSA9ICdjdXJyZW5jeScsXHJcbiAgICBVUFBFUkNBU0UgPSAndXBwZXJjYXNlJyxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaXNwbGF5T3B0aW9uSXRlbSB7XHJcbiAgICB0eXBlOiBEaXNwbGF5T3B0aW9uSXRlbVR5cGU7XHJcbiAgICBjdXN0b21QaXBlPzogc3RyaW5nO1xyXG4gICAgZGl2aWRlcj86IHN0cmluZztcclxuICAgIHBhdGg/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaXNwbGF5T3B0aW9uIHtcclxuICAgIGZpcnRoTGFiZWw6IERpc3BsYXlPcHRpb25JdGVtW107XHJcbiAgICBzZWNvbmRMYWJlbD86IERpc3BsYXlPcHRpb25JdGVtW107XHJcbiAgICBmaWx0ZXJTdHJpbmc/OiBzdHJpbmdbXSB8IHN0cmluZztcclxuICAgIGFwcGx5VHJhbnNsYXRlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXN0cmljdGlvbkZpbHRlciB7XHJcbiAgICBmaWx0ZXI6IHN0cmluZztcclxuICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBpRm9ybURhdGEge1xyXG4gICAgYXR0cmlidXRlcz86IHN0cmluZ1tdLFxyXG4gICAgZmlsdGVyPzogYW55O1xyXG4gICAgcmVsYXRpb25zPzogYW55O1xyXG59XHJcbiJdfQ==
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2d1YWNob3MtZ2VuZXJhbC1hdXRvY29tcGxldGUvc3JjL3V0aWxzL2ludGVyZmFjZXMvaW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLENBQU4sSUFBWSxXQVNYO0FBVEQsV0FBWSxXQUFXO0lBQ25CLDZDQUE4QixDQUFBO0lBQzlCLDZDQUE4QixDQUFBO0lBQzlCLHFEQUFzQyxDQUFBO0lBQ3RDLDBEQUEyQyxDQUFBO0lBQzNDLHVDQUF3QixDQUFBO0lBQ3hCLHVDQUF3QixDQUFBO0lBQ3hCLG9DQUFxQixDQUFBO0lBQ3JCLHNDQUF1QixDQUFBO0FBQzNCLENBQUMsRUFUVyxXQUFXLEtBQVgsV0FBVyxRQVN0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7VmFsaWRhdG9yRm59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmRlY2xhcmUgdHlwZSBEaXNwbGF5T3B0aW9uSXRlbVR5cGUgPSAnZGl2aWRlcicgfCAncGF0aCc7XHJcblxyXG5leHBvcnQgZW51bSBDdXN0b21QaXBlcyB7XHJcbiAgICBTSE9XX1NFR01FTlRTID0gJ3Nob3dTZWdtZW50cycsXHJcbiAgICBEVVJBVElPTl9USU1FID0gJ2R1cmF0aW9uVGltZScsXHJcbiAgICBIVU1BTklaRV9EVVJBVElPTiA9ICdodW1hbml6ZUR1cmF0aW9uJyxcclxuICAgIFNIT1dfVFJBTlNQT1JUX1RZUEVTID0gJ3Nob3dUcmFuc3BvcnRUeXBlcycsXHJcbiAgICBTSE9XX1JPTEVTID0gJ3Nob3dSb2xlcycsXHJcbiAgICBJREFfUkVUVVJOID0gJ2lkYVJldHVybicsXHJcbiAgICBDVVJSRU5DWSA9ICdjdXJyZW5jeScsXHJcbiAgICBVUFBFUkNBU0UgPSAndXBwZXJjYXNlJyxcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaXNwbGF5T3B0aW9uSXRlbSB7XHJcbiAgICB0eXBlOiBEaXNwbGF5T3B0aW9uSXRlbVR5cGU7XHJcbiAgICBjdXN0b21QaXBlPzogc3RyaW5nO1xyXG4gICAgZGl2aWRlcj86IHN0cmluZztcclxuICAgIHBhdGg/OiBzdHJpbmdbXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEaXNwbGF5T3B0aW9uIHtcclxuICAgIGZpcnRoTGFiZWw6IERpc3BsYXlPcHRpb25JdGVtW107XHJcbiAgICBzZWNvbmRMYWJlbD86IERpc3BsYXlPcHRpb25JdGVtW107XHJcbiAgICBmaWx0ZXJTdHJpbmc/OiBzdHJpbmdbXSB8IHN0cmluZztcclxuICAgIGFwcGx5VHJhbnNsYXRlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBSZXN0cmljdGlvbkZpbHRlciB7XHJcbiAgICBmaWx0ZXI6IHN0cmluZztcclxuICAgIHZhbHVlOiBzdHJpbmcgfCBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBpRm9ybURhdGEge1xyXG4gICAgYXR0cmlidXRlcz86IHN0cmluZ1tdLFxyXG4gICAgZmlsdGVyPzogYW55O1xyXG4gICAgcmVsYXRpb25zPzogYW55O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEN1c3RvbVZhbGlkYXRvciB7XHJcbiAgICBrZXk6IHN0cmluZztcclxuICAgIG1lc3NhZ2U6IHN0cmluZztcclxuICAgIHZhbGlkYXRvcjogVmFsaWRhdG9yRm47XHJcbn1cclxuIl19
@@ -535,6 +535,7 @@ class GuajiritosGeneralAutocomplete {
535
535
  this.selectedElement = signal(null);
536
536
  this._url = signal(null);
537
537
  this.restrictionsFilters = signal([]);
538
+ this.validators = signal([]);
538
539
  this.disabledButton = signal(false);
539
540
  this.loading = signal(false);
540
541
  this.required = signal(false);
@@ -661,6 +662,22 @@ class GuajiritosGeneralAutocomplete {
661
662
  });
662
663
  }
663
664
  }
665
+ /**
666
+ * Set custom validators for autocomplete
667
+ *
668
+ * @param validators - A list of customs validators
669
+ */
670
+ set customValidators(validators) {
671
+ if (validators?.length) {
672
+ validators.forEach((validator) => {
673
+ this.component.addValidators(validator.validator);
674
+ });
675
+ this.validators.set(validators);
676
+ }
677
+ else {
678
+ this.validators.set([]);
679
+ }
680
+ }
664
681
  /**
665
682
  * Validación customizada para la selección de elementos
666
683
  */
@@ -805,21 +822,18 @@ class GuajiritosGeneralAutocomplete {
805
822
  this.propagateChange(item);
806
823
  }
807
824
  }
808
- ngOnInit() {
809
- // this.component.markAllAsTouched();
810
- }
811
825
  ngOnDestroy() {
812
826
  this.unsubscribeAll$.next();
813
827
  this.unsubscribeAll$.complete();
814
828
  }
815
829
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: GuajiritosGeneralAutocomplete, deps: [{ token: AutocompleteService }, { token: i0.NgZone }, { token: i2.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
816
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: GuajiritosGeneralAutocomplete, isStandalone: true, selector: "guajiritos-general-autocomplete", inputs: { floatLabel: "floatLabel", bodyRequest: "bodyRequest", debounceTimeValue: "debounceTimeValue", detailsTemplate: "detailsTemplate", label: "label", showLabel: "showLabel", appearance: "appearance", color: "color", placeholder: "placeholder", field: "field", filterString: "filterString", displayOptions: "displayOptions", withoutPaddingBottom: "withoutPaddingBottom", valueId: "valueId", showSuffix: "showSuffix", order: "order", suffixIcon: "suffixIcon", removeProperties: "removeProperties", url: "url", clearData: "clearData", initialValue: "initialValue", restrictions: "restrictions", isRequired: "isRequired", doFocus: "doFocus" }, outputs: { SelectElement: "SelectElement" }, providers: [
830
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.1", type: GuajiritosGeneralAutocomplete, isStandalone: true, selector: "guajiritos-general-autocomplete", inputs: { floatLabel: "floatLabel", bodyRequest: "bodyRequest", debounceTimeValue: "debounceTimeValue", detailsTemplate: "detailsTemplate", label: "label", showLabel: "showLabel", appearance: "appearance", color: "color", placeholder: "placeholder", field: "field", filterString: "filterString", displayOptions: "displayOptions", withoutPaddingBottom: "withoutPaddingBottom", valueId: "valueId", showSuffix: "showSuffix", order: "order", suffixIcon: "suffixIcon", removeProperties: "removeProperties", url: "url", clearData: "clearData", initialValue: "initialValue", restrictions: "restrictions", isRequired: "isRequired", doFocus: "doFocus", customValidators: "customValidators" }, outputs: { SelectElement: "SelectElement" }, providers: [
817
831
  {
818
832
  provide: NG_VALUE_ACCESSOR,
819
833
  useExisting: forwardRef(() => GuajiritosGeneralAutocomplete),
820
834
  multi: true,
821
835
  },
822
- ], viewQueries: [{ propertyName: "inputText", first: true, predicate: ["inputText"], descendants: true, static: true }], ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\" [ngClass]=\"{'without-padding-bottom': withoutPaddingBottom}\" class=\"w-100\"\r\n [appearance]=\"appearance\" [color]=\"color\">\r\n\r\n <mat-label *ngIf=\"showLabel\">{{label | translate}}</mat-label>\r\n <mat-icon matSuffix *ngIf=\"showSuffix\">{{suffixIcon ?? \"search\"}}</mat-icon>\r\n <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\"\r\n [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\r\n autocomplete=\"off\" matInput type=\"text\" [required]=\"required()\">\r\n <button (click)=\"clear(trigger)\" *ngIf=\"!loading() && component?.value\" [disabled]=\"disabledButton()\"\r\n aria-label=\"Clear\" mat-icon-button matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button *ngIf=\"loading()\" aria-label=\"search\" mat-icon-button matSuffix>\r\n <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\r\n </button>\r\n <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\" (onSelectionChange)=\"onSelectElement(option)\">\r\n\r\n <ng-container *ngIf=\"!displayOptions && !detailsTemplate\">\r\n {{ option?.name | i18nField: translateService.currentLang }}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!detailsTemplate\">\r\n <div class=\"display-options\">\r\n <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\r\n {{option | resolvePropertyPath:displayOptions.firthLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n <span *ngIf=\"displayOptions?.secondLabel\" class=\"mat-caption\">\r\n {{option | resolvePropertyPath: displayOptions.secondLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"detailsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-error *ngIf=\"component.invalid\">\r\n {{'Este campo es requerido.' | translate}}\r\n </mat-error>\r\n</mat-form-field>\r\n", styles: [".w-100{width:100%}.display-options{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}\n"], dependencies: [{ 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: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { 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: ReactiveFormsModule }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: I18nFieldPipe, name: "i18nField" }, { kind: "pipe", type: ResolvePropertyPath, name: "resolvePropertyPath" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
836
+ ], viewQueries: [{ propertyName: "inputText", first: true, predicate: ["inputText"], descendants: true, static: true }], ngImport: i0, template: "<mat-form-field [floatLabel]=\"floatLabel\" [ngClass]=\"{'without-padding-bottom': withoutPaddingBottom}\" class=\"w-100\"\r\n [appearance]=\"appearance\" [color]=\"color\">\r\n\r\n <mat-label *ngIf=\"showLabel\">{{label | translate}}</mat-label>\r\n <mat-icon matSuffix *ngIf=\"showSuffix\">{{suffixIcon ?? \"search\"}}</mat-icon>\r\n <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\"\r\n [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\r\n autocomplete=\"off\" matInput type=\"text\" [required]=\"required()\">\r\n <button (click)=\"clear(trigger)\" *ngIf=\"!loading() && component?.value\" [disabled]=\"disabledButton()\"\r\n aria-label=\"Clear\" mat-icon-button matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button *ngIf=\"loading()\" aria-label=\"search\" mat-icon-button matSuffix>\r\n <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\r\n </button>\r\n <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\" (onSelectionChange)=\"onSelectElement(option)\">\r\n\r\n <ng-container *ngIf=\"!displayOptions && !detailsTemplate\">\r\n {{ option?.name | i18nField: translateService.currentLang }}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!detailsTemplate\">\r\n <div class=\"display-options\">\r\n <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\r\n {{option | resolvePropertyPath:displayOptions.firthLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n <span *ngIf=\"displayOptions?.secondLabel\" class=\"mat-caption\">\r\n {{option | resolvePropertyPath: displayOptions.secondLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"detailsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-error *ngIf=\"component.hasError('required')\">\r\n {{'Este campo es requerido.' | translate}}\r\n </mat-error>\r\n\r\n <mat-error *ngIf=\"component.hasError('invalidSelection')\">\r\n {{'Debe seleccionar un elemento.' | translate}}\r\n </mat-error>\r\n\r\n <ng-container *ngFor=\"let validator of validators()\">\r\n <mat-error *ngIf=\"component.hasError(validator.key)\">\r\n {{validator.message | translate}}\r\n </mat-error>\r\n </ng-container>\r\n</mat-form-field>\r\n", styles: [".w-100{width:100%}.display-options{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}\n"], dependencies: [{ 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: "directive", type: i3.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i3.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i4.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i5$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i4.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { 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: ReactiveFormsModule }, { kind: "directive", type: i7.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: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i7.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i7.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i8.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i9.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i10.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: PipesModule }, { kind: "pipe", type: I18nFieldPipe, name: "i18nField" }, { kind: "pipe", type: ResolvePropertyPath, name: "resolvePropertyPath" }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
823
837
  }
824
838
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImport: i0, type: GuajiritosGeneralAutocomplete, decorators: [{
825
839
  type: Component,
@@ -844,7 +858,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
844
858
  useExisting: forwardRef(() => GuajiritosGeneralAutocomplete),
845
859
  multi: true,
846
860
  },
847
- ], template: "<mat-form-field [floatLabel]=\"floatLabel\" [ngClass]=\"{'without-padding-bottom': withoutPaddingBottom}\" class=\"w-100\"\r\n [appearance]=\"appearance\" [color]=\"color\">\r\n\r\n <mat-label *ngIf=\"showLabel\">{{label | translate}}</mat-label>\r\n <mat-icon matSuffix *ngIf=\"showSuffix\">{{suffixIcon ?? \"search\"}}</mat-icon>\r\n <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\"\r\n [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\r\n autocomplete=\"off\" matInput type=\"text\" [required]=\"required()\">\r\n <button (click)=\"clear(trigger)\" *ngIf=\"!loading() && component?.value\" [disabled]=\"disabledButton()\"\r\n aria-label=\"Clear\" mat-icon-button matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button *ngIf=\"loading()\" aria-label=\"search\" mat-icon-button matSuffix>\r\n <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\r\n </button>\r\n <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\" (onSelectionChange)=\"onSelectElement(option)\">\r\n\r\n <ng-container *ngIf=\"!displayOptions && !detailsTemplate\">\r\n {{ option?.name | i18nField: translateService.currentLang }}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!detailsTemplate\">\r\n <div class=\"display-options\">\r\n <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\r\n {{option | resolvePropertyPath:displayOptions.firthLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n <span *ngIf=\"displayOptions?.secondLabel\" class=\"mat-caption\">\r\n {{option | resolvePropertyPath: displayOptions.secondLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"detailsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-error *ngIf=\"component.invalid\">\r\n {{'Este campo es requerido.' | translate}}\r\n </mat-error>\r\n</mat-form-field>\r\n", styles: [".w-100{width:100%}.display-options{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}\n"] }]
861
+ ], template: "<mat-form-field [floatLabel]=\"floatLabel\" [ngClass]=\"{'without-padding-bottom': withoutPaddingBottom}\" class=\"w-100\"\r\n [appearance]=\"appearance\" [color]=\"color\">\r\n\r\n <mat-label *ngIf=\"showLabel\">{{label | translate}}</mat-label>\r\n <mat-icon matSuffix *ngIf=\"showSuffix\">{{suffixIcon ?? \"search\"}}</mat-icon>\r\n <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\"\r\n [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\r\n autocomplete=\"off\" matInput type=\"text\" [required]=\"required()\">\r\n <button (click)=\"clear(trigger)\" *ngIf=\"!loading() && component?.value\" [disabled]=\"disabledButton()\"\r\n aria-label=\"Clear\" mat-icon-button matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button *ngIf=\"loading()\" aria-label=\"search\" mat-icon-button matSuffix>\r\n <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\r\n </button>\r\n <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\" (onSelectionChange)=\"onSelectElement(option)\">\r\n\r\n <ng-container *ngIf=\"!displayOptions && !detailsTemplate\">\r\n {{ option?.name | i18nField: translateService.currentLang }}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!detailsTemplate\">\r\n <div class=\"display-options\">\r\n <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\r\n {{option | resolvePropertyPath:displayOptions.firthLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n <span *ngIf=\"displayOptions?.secondLabel\" class=\"mat-caption\">\r\n {{option | resolvePropertyPath: displayOptions.secondLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"detailsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-error *ngIf=\"component.hasError('required')\">\r\n {{'Este campo es requerido.' | translate}}\r\n </mat-error>\r\n\r\n <mat-error *ngIf=\"component.hasError('invalidSelection')\">\r\n {{'Debe seleccionar un elemento.' | translate}}\r\n </mat-error>\r\n\r\n <ng-container *ngFor=\"let validator of validators()\">\r\n <mat-error *ngIf=\"component.hasError(validator.key)\">\r\n {{validator.message | translate}}\r\n </mat-error>\r\n </ng-container>\r\n</mat-form-field>\r\n", styles: [".w-100{width:100%}.display-options{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}\n"] }]
848
862
  }], ctorParameters: function () { return [{ type: AutocompleteService }, { type: i0.NgZone }, { type: i2.TranslateService }]; }, propDecorators: { inputText: [{
849
863
  type: ViewChild,
850
864
  args: ['inputText', { static: true }]
@@ -898,6 +912,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.1", ngImpor
898
912
  type: Input
899
913
  }], doFocus: [{
900
914
  type: Input
915
+ }], customValidators: [{
916
+ type: Input
901
917
  }] } });
902
918
 
903
919
  /*
@@ -1 +1 @@
1
- {"version":3,"file":"guajiritos-general-autocomplete.mjs","sources":["../../../projects/guachos-general-autocomplete/src/utils/interfaces/interfaces.ts","../../../projects/guachos-general-autocomplete/src/utils/constants/contacts.ts","../../../projects/guachos-general-autocomplete/src/utils/services/autocomplete.service.ts","../../../projects/guachos-general-autocomplete/src/utils/services/utils.service.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/duration.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/humanize-duration.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/i18n-field.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/ida-return.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/show-roles.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/show-segments.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/show-transport-types.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/resolve-property-path.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/pipes.module.ts","../../../projects/guachos-general-autocomplete/src/lib/guachos-general-autocomplete.component.ts","../../../projects/guachos-general-autocomplete/src/lib/guachos-general-autocomplete.component.html","../../../projects/guachos-general-autocomplete/src/public-api.ts","../../../projects/guachos-general-autocomplete/src/guajiritos-general-autocomplete.ts"],"sourcesContent":["declare type DisplayOptionItemType = 'divider' | 'path';\r\n\r\nexport enum CustomPipes {\r\n SHOW_SEGMENTS = 'showSegments',\r\n DURATION_TIME = 'durationTime',\r\n HUMANIZE_DURATION = 'humanizeDuration',\r\n SHOW_TRANSPORT_TYPES = 'showTransportTypes',\r\n SHOW_ROLES = 'showRoles',\r\n IDA_RETURN = 'idaReturn',\r\n CURRENCY = 'currency',\r\n UPPERCASE = 'uppercase',\r\n}\r\n\r\nexport interface DisplayOptionItem {\r\n type: DisplayOptionItemType;\r\n customPipe?: string;\r\n divider?: string;\r\n path?: string[];\r\n}\r\n\r\nexport interface DisplayOption {\r\n firthLabel: DisplayOptionItem[];\r\n secondLabel?: DisplayOptionItem[];\r\n filterString?: string[] | string;\r\n applyTranslate?: boolean;\r\n}\r\n\r\nexport interface RestrictionFilter {\r\n filter: string;\r\n value: string | number;\r\n}\r\n\r\nexport interface ApiFormData {\r\n attributes?: string[],\r\n filter?: any;\r\n relations?: any;\r\n}\r\n","import {DisplayOption} from \"../interfaces/interfaces\";\r\n\r\nexport const GENERAL_DISPLAY_OPTIONS: DisplayOption = {\r\n firthLabel: [\r\n {\r\n type: 'path',\r\n path: ['name']\r\n }\r\n ],\r\n applyTranslate: true\r\n};\r\n","import {HttpClient, HttpParams} from '@angular/common/http';\r\nimport {Injectable} from '@angular/core';\r\nimport {map} from 'rxjs/operators';\r\nimport merge from 'lodash.merge';\r\nimport {Observable} from 'rxjs';\r\n\r\nimport {ApiFormData, RestrictionFilter} from '../interfaces/interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AutocompleteService {\r\n constructor(\r\n private _httpClient: HttpClient\r\n ) {\r\n }\r\n\r\n private httpOptions = {};\r\n\r\n private processParams(filters: string[] | string | undefined, value: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(async () => {\r\n let filter = {};\r\n\r\n if (Array.isArray(filters)) {\r\n for (const f of filters) {\r\n await this.processFilterString(f, value).then((resp: any) => {\r\n if (Object.keys(filter)?.length) {\r\n merge(filter, resp);\r\n } else {\r\n filter = {\r\n ...filter,\r\n ...resp\r\n };\r\n }\r\n\r\n if (f === filters[filters?.length - 1]) {\r\n resolve(filter);\r\n }\r\n });\r\n }\r\n } else if (typeof filters === 'string') {\r\n await this.processFilterString(filters, value).then((resp: any) => {\r\n filter = {\r\n ...filter,\r\n ...resp\r\n };\r\n\r\n resolve(filter);\r\n });\r\n } else {\r\n reject(null);\r\n }\r\n }, 100);\r\n });\r\n }\r\n\r\n private async processFilterString(filter: string, value: string): Promise<any> {\r\n let f: any = {};\r\n\r\n const arrayFilters: string[] = filter?.split('[');\r\n\r\n if (arrayFilters?.findIndex((a: string) => a === 'filter') >= 0) {\r\n arrayFilters?.splice(0, 1);\r\n }\r\n\r\n await this.createObjectFilters(arrayFilters, value).then((data: any) => {\r\n f = data;\r\n });\r\n\r\n return f;\r\n }\r\n\r\n private async createObjectFilters(array: string[], value: string): Promise<any> {\r\n for (let filter of array) {\r\n filter = filter?.replace(']', '');\r\n\r\n if (array.length > 1) {\r\n array.splice(0, 1);\r\n return {[filter]: await this.createObjectFilters(array, value)};\r\n } else {\r\n if (filter === '$like') {\r\n return {[filter]: '%' + value + '%'};\r\n } else {\r\n return {[filter]: value};\r\n }\r\n }\r\n }\r\n }\r\n\r\n public async getAutocompleteByText(url: string, text?: string, field?: string[] | string, restrictions?: RestrictionFilter[],\r\n removeProperties?: string[], order?: string, bodyRequest?: ApiFormData): Promise<Observable<any>> {\r\n\r\n let httpParams: HttpParams = new HttpParams().set('offset', '0');\r\n httpParams = httpParams.append('limit', '20');\r\n\r\n if (order) {\r\n httpParams = httpParams.append('order', order);\r\n }\r\n\r\n if (!text) {\r\n text = '';\r\n }\r\n\r\n if (bodyRequest) {\r\n let body: ApiFormData = {};\r\n if (text && text !== '') {\r\n await this.processParams(field, text)\r\n .then((data: any) => {\r\n body = {\r\n ...bodyRequest,\r\n filter: data\r\n };\r\n });\r\n } else {\r\n body = JSON.parse(JSON.stringify(bodyRequest));\r\n }\r\n\r\n if (restrictions?.length) {\r\n for (let r of restrictions) {\r\n await this.processParams(r?.filter, r?.value?.toString())\r\n .then((data: any) => {\r\n let filtersAux = {...body?.filter}\r\n merge(filtersAux, data);\r\n body = {\r\n ...body,\r\n filter: filtersAux\r\n };\r\n httpParams = httpParams.set('form', JSON.stringify(body));\r\n });\r\n }\r\n } else {\r\n httpParams = httpParams.append('form', JSON.stringify(body));\r\n }\r\n } else {\r\n if (text && text !== '') {\r\n if (Array.isArray(field)) {\r\n for (const f of field) {\r\n httpParams = httpParams.append(f, '%' + text + '%');\r\n }\r\n } else {\r\n if (field?.includes('$like')) {\r\n httpParams = httpParams.append(field, '%' + text + '%');\r\n } else if (field) {\r\n httpParams = httpParams.append(field, text);\r\n }\r\n }\r\n }\r\n\r\n restrictions?.forEach((restriction: RestrictionFilter) => {\r\n if (restriction?.value) {\r\n httpParams = httpParams.append(restriction?.filter, restriction.value?.toString());\r\n }\r\n });\r\n }\r\n\r\n this.httpOptions = {params: httpParams};\r\n\r\n return this._httpClient\r\n .get<any>(url, this.httpOptions)\r\n .pipe(\r\n map((result: any) => {\r\n result?.data?.map((item: any) => {\r\n removeProperties?.forEach((property: string) => {\r\n delete item[property];\r\n });\r\n });\r\n return result;\r\n })\r\n );\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilsService {\r\n /**\r\n * Convierte el tiempo pasado por parámetro en horas y minutos\r\n *\r\n * @param time - Tiempo\r\n * @returns Devuelve las horas y minutos\r\n */\r\n private static getTime(time: number | string): { hours: number; minutes: number } {\r\n const hours: number = parseInt(Number(time) / 3600 + '', 10);\r\n time = Number(time) - (hours * 3600);\r\n const minutes: number = parseInt(Number(time) / 60 + '', 10);\r\n\r\n return {hours, minutes}\r\n }\r\n\r\n /**\r\n * Devuelve el tiempo en formato 'hh:mm'\r\n *\r\n * @param time - Tiempo\r\n */\r\n public static getTimePretty(time: number): string {\r\n const {hours, minutes} = UtilsService.getTime(time);\r\n\r\n return (hours < 10 ? '0' + hours : hours) + ':' + (minutes < 10 ? '0' + minutes : minutes);\r\n }\r\n\r\n /**\r\n * Devuelve el tiempo en formato 'hhh : mmm'\r\n *\r\n * @param time - Tiempo\r\n */\r\n public static humanizeDuration(time: number | string): string {\r\n const {hours, minutes} = UtilsService.getTime(time);\r\n\r\n return (hours < 10 ? '0' + hours : hours) + 'h : ' + (minutes < 10 ? '0' + minutes : minutes) + 'm';\r\n }\r\n\r\n public static resolvePropertyByPath(obj: any, path: string[]): any {\r\n return path.reduce((prev, curr: string) => {\r\n return prev ? prev[curr] : null;\r\n }, obj || self);\r\n }\r\n}\r\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\r\n\r\nimport {UtilsService} from '../services/utils.service';\r\n\r\n@Injectable()\r\n@Pipe({name: 'durationTime'})\r\nexport class DurationTimePipe implements PipeTransform {\r\n transform(value: number): string {\r\n return UtilsService.getTimePretty(value);\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\n\r\nimport {UtilsService} from '../services/utils.service';\r\n\r\n@Pipe({\r\n name: 'humanizeDuration'\r\n})\r\nexport class HumanizeDurationPipe implements PipeTransform {\r\n transform(input: string): string {\r\n return UtilsService.humanizeDuration(input);\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Pipe({name: 'i18nField'})\r\nexport class I18nFieldPipe implements PipeTransform {\r\n transform(value: any, lang: string): string {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return value;\r\n }\r\n\r\n const keys = Object.keys(value);\r\n if (!value[lang]) {\r\n let i = 0;\r\n while (i < keys?.length && (value[keys[i]] === null || value[keys[i]] === '')) {\r\n i++;\r\n }\r\n return keys?.length > i ? value[keys[i]] : 'No está definido';\r\n }\r\n\r\n return value[lang] || 'No está definido';\r\n }\r\n}\r\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\r\n\r\nimport {CustomPipes} from \"../interfaces/interfaces\";\r\n\r\n@Injectable()\r\n@Pipe({name: 'idaReturn'})\r\nexport class IdaReturnPipe implements PipeTransform {\r\n transform(value: string): any {\r\n if (value === CustomPipes.IDA_RETURN) {\r\n return 'Ida y Vuelta';\r\n } else {\r\n return 'solo Ida';\r\n }\r\n }\r\n}\r\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Injectable()\r\n@Pipe({name: 'showSegments'})\r\nexport class ShowRolesPipe implements PipeTransform {\r\n transform(value: any[]): any {\r\n\r\n let result = '';\r\n\r\n if (value?.length) {\r\n value.forEach(item => {\r\n result += item?.Rol?.name + ', ';\r\n });\r\n\r\n result = result.substring(0, result?.length - 2);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Injectable()\r\n@Pipe({name: 'showSegments'})\r\nexport class ShowSegmentsPipe implements PipeTransform {\r\n transform(value: any[]): any {\r\n let result = '';\r\n\r\n if (value?.length) {\r\n value.forEach(item => {\r\n result += item?.Segment?.PlaceOrigin?.alpha3 + '-' + item?.Segment?.PlaceDestination?.alpha3 + ', ';\r\n });\r\n\r\n result = result.substring(0, result?.length - 2);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Injectable()\r\n@Pipe({name: 'showTransportTypes'})\r\nexport class ShowTransportTypesPipe implements PipeTransform {\r\n transform(value: any[]): any {\r\n let result = '';\r\n\r\n if (value?.length) {\r\n value.forEach(item => {\r\n result += item?.TransportType?.name['es'] + ', ';\r\n });\r\n\r\n result = result.substring(0, result?.length - 2);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import {CurrencyPipe, UpperCasePipe} from '@angular/common';\r\nimport {Pipe, PipeTransform} from '@angular/core';\r\n\r\nimport {DurationTimePipe} from './duration.pipe';\r\nimport {HumanizeDurationPipe} from './humanize-duration.pipe';\r\nimport {IdaReturnPipe} from './ida-return.pipe';\r\nimport {ShowRolesPipe} from './show-roles.pipe';\r\nimport {ShowSegmentsPipe} from './show-segments.pipe';\r\nimport {ShowTransportTypesPipe} from './show-transport-types.pipe';\r\nimport {CustomPipes, DisplayOptionItem} from \"../interfaces/interfaces\";\r\nimport {UtilsService} from '../services/utils.service';\r\n\r\n@Pipe({name: 'resolvePropertyPath'})\r\nexport class ResolvePropertyPath implements PipeTransform {\r\n\r\n constructor(\r\n private _showSegmentPipe: ShowSegmentsPipe,\r\n private _showRolesPipe: ShowRolesPipe,\r\n private _showTransportTypesPipe: ShowTransportTypesPipe,\r\n private _idaReturnPipe: IdaReturnPipe,\r\n private _currencyPipe: CurrencyPipe,\r\n private _humanizeDurationPipe: HumanizeDurationPipe,\r\n private _upperCasePipe: UpperCasePipe,\r\n private _durationPipe: DurationTimePipe\r\n ) {\r\n }\r\n\r\n transform(obj: any, path: DisplayOptionItem[]): string {\r\n let result: string = '';\r\n\r\n path?.forEach((item: DisplayOptionItem) => {\r\n if (item?.type === 'divider') {\r\n result += item?.divider;\r\n } else {\r\n if (item?.path) {\r\n let value = UtilsService.resolvePropertyByPath(obj, item.path);\r\n\r\n switch (item?.customPipe) {\r\n case CustomPipes.SHOW_SEGMENTS:\r\n value = this._showSegmentPipe.transform(value);\r\n break;\r\n case CustomPipes.DURATION_TIME:\r\n value = this._durationPipe.transform(value);\r\n break;\r\n case CustomPipes.HUMANIZE_DURATION:\r\n value = this._humanizeDurationPipe.transform(value);\r\n break;\r\n case CustomPipes.SHOW_TRANSPORT_TYPES:\r\n value = this._showTransportTypesPipe.transform(value);\r\n break;\r\n case CustomPipes.SHOW_ROLES:\r\n value = this._showRolesPipe.transform(value);\r\n break;\r\n case CustomPipes.IDA_RETURN:\r\n value = this._idaReturnPipe.transform(value);\r\n break;\r\n case CustomPipes.CURRENCY:\r\n value = this._currencyPipe.transform(value);\r\n break;\r\n case CustomPipes.UPPERCASE:\r\n value = this._upperCasePipe.transform(value);\r\n break;\r\n default:\r\n break;\r\n }\r\n result += value;\r\n }\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CurrencyPipe, UpperCasePipe} from \"@angular/common\";\r\n\r\nimport {DurationTimePipe} from \"./duration.pipe\";\r\nimport {HumanizeDurationPipe} from \"./humanize-duration.pipe\";\r\nimport {I18nFieldPipe} from \"./i18n-field.pipe\";\r\nimport {IdaReturnPipe} from \"./ida-return.pipe\";\r\nimport {ResolvePropertyPath} from \"./resolve-property-path.pipe\";\r\nimport {ShowRolesPipe} from \"./show-roles.pipe\";\r\nimport {ShowSegmentsPipe} from \"./show-segments.pipe\";\r\nimport {ShowTransportTypesPipe} from \"./show-transport-types.pipe\";\r\n\r\n@NgModule({\r\n declarations: [\r\n DurationTimePipe,\r\n HumanizeDurationPipe,\r\n I18nFieldPipe,\r\n IdaReturnPipe,\r\n ResolvePropertyPath,\r\n ShowRolesPipe,\r\n ShowSegmentsPipe,\r\n ShowTransportTypesPipe,\r\n ],\r\n imports: [\r\n CurrencyPipe,\r\n UpperCasePipe\r\n ],\r\n exports: [\r\n DurationTimePipe,\r\n HumanizeDurationPipe,\r\n I18nFieldPipe,\r\n IdaReturnPipe,\r\n ResolvePropertyPath,\r\n ShowRolesPipe,\r\n ShowSegmentsPipe,\r\n ShowTransportTypesPipe\r\n ],\r\n providers: [\r\n DurationTimePipe,\r\n HumanizeDurationPipe,\r\n I18nFieldPipe,\r\n IdaReturnPipe,\r\n ResolvePropertyPath,\r\n ShowRolesPipe,\r\n ShowSegmentsPipe,\r\n ShowTransportTypesPipe,\r\n CurrencyPipe,\r\n UpperCasePipe\r\n ]\r\n})\r\nexport class PipesModule {\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Output,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALUE_ACCESSOR,\r\n ReactiveFormsModule,\r\n UntypedFormControl,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport {MatAutocompleteModule, MatAutocompleteTrigger} from '@angular/material/autocomplete';\r\nimport {FloatLabelType, MatFormFieldAppearance, MatFormFieldModule} from '@angular/material/form-field';\r\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\r\nimport {debounceTime, Observable, Subject, takeUntil} from 'rxjs';\r\nimport {NgClass, NgForOf, NgIf, NgStyle, NgTemplateOutlet} from '@angular/common';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\nimport {ThemePalette} from '@angular/material/core';\r\n\r\nimport {GENERAL_DISPLAY_OPTIONS} from '../utils/constants/contacts';\r\nimport {AutocompleteService} from '../utils/services/autocomplete.service';\r\nimport {UtilsService} from '../utils/services/utils.service';\r\nimport {ApiFormData, DisplayOption, RestrictionFilter} from '../utils/interfaces/interfaces';\r\nimport {PipesModule} from '../utils/pipes/pipes.module';\r\n\r\n@Component({\r\n selector: 'guajiritos-general-autocomplete',\r\n templateUrl: './guachos-general-autocomplete.component.html',\r\n styleUrls: ['./guachos-general-autocomplete.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatFormFieldModule,\r\n NgClass,\r\n TranslateModule,\r\n MatAutocompleteModule,\r\n MatInputModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n NgIf,\r\n NgForOf,\r\n NgStyle,\r\n PipesModule,\r\n NgTemplateOutlet,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => GuajiritosGeneralAutocomplete),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class GuajiritosGeneralAutocomplete implements OnInit, OnDestroy, ControlValueAccessor {\r\n\r\n constructor(\r\n private _autocompleteService: AutocompleteService,\r\n private _zone: NgZone,\r\n public translateService: TranslateService,\r\n ) {\r\n }\r\n\r\n private wasSelected: WritableSignal<boolean> = signal(false);\r\n private firstCall: WritableSignal<boolean> = signal(true);\r\n private clearData$: Subject<void>;\r\n private unsubscribeAll$: Subject<void> = new Subject<void>();\r\n private doFocusSubject$: Subject<void>;\r\n private selectedElement: WritableSignal<any> = signal(null);\r\n private _url: WritableSignal<string> = signal(null);\r\n private restrictionsFilters: WritableSignal<RestrictionFilter[]> = signal([]);\r\n\r\n public disabledButton: WritableSignal<boolean> = signal(false);\r\n public loading: WritableSignal<boolean> = signal(false);\r\n public required: WritableSignal<boolean> = signal(false);\r\n public filteredOptions: WritableSignal<any[]> = signal([]);\r\n public component: UntypedFormControl = new UntypedFormControl({value: null, disabled: false});\r\n\r\n @ViewChild('inputText', {static: true}) inputText: ElementRef;\r\n /**\r\n * Possible values 'never', 'auto' or 'always'\r\n */\r\n @Input() floatLabel: FloatLabelType = 'auto';\r\n @Input() bodyRequest: ApiFormData;\r\n @Input() debounceTimeValue: number = 300;\r\n @Input() detailsTemplate: TemplateRef<any>;\r\n @Input() label: string = 'Seleccione';\r\n @Input() showLabel: boolean = true;\r\n @Input() appearance: MatFormFieldAppearance = 'outline';\r\n @Input() color: ThemePalette = 'accent';\r\n @Input() placeholder: string = 'Seleccione un elemento';\r\n @Input() field: string[] = ['name'];\r\n @Input() filterString: string = 'filter[$and][name][$like]';\r\n @Input() displayOptions: DisplayOption = GENERAL_DISPLAY_OPTIONS;\r\n @Input() withoutPaddingBottom: boolean = true;\r\n @Input() valueId: boolean = false;\r\n @Input() showSuffix: boolean = false;\r\n @Input() order!: string;\r\n @Input() suffixIcon: string = 'search';\r\n @Input() removeProperties: string[] = [];\r\n @Output() SelectElement: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @Input() set url(data: string) {\r\n if (data) {\r\n this._url.set(data);\r\n this.subscribeComponentChanges();\r\n }\r\n }\r\n\r\n @Input() set clearData(value: Subject<void>) {\r\n this.clearData$ = value;\r\n if (this.clearData$) {\r\n this.clearData$\r\n .pipe(takeUntil(this.unsubscribeAll$))\r\n .subscribe({\r\n next: (): void => {\r\n this.component.setValue(null, {emitEvent: false});\r\n this.selectedElement.set(null);\r\n this.SelectElement.emit(null);\r\n this.filteredOptions.set([]);\r\n this.propagateChange(null);\r\n },\r\n });\r\n }\r\n }\r\n\r\n @Input() set initialValue(value: any) {\r\n this.component.setValue(value);\r\n }\r\n\r\n /**\r\n * Añade o elimina restricciones para la búsqueda\r\n *\r\n * @param restrictions - Restricciones para la búsqueda\r\n */\r\n @Input() set restrictions(restrictions: RestrictionFilter[]) {\r\n if (restrictions) {\r\n this.restrictionsFilters.set(restrictions);\r\n } else {\r\n this.restrictionsFilters.set([]);\r\n }\r\n }\r\n\r\n /**\r\n * Añade o elimina la validación de que el campo sea requerido\r\n *\r\n * @param required - Define si es requerido o no\r\n */\r\n @Input() set isRequired(required: boolean) {\r\n this.required.set(required);\r\n\r\n if (required) {\r\n this.component.setValidators([Validators.required, GuajiritosGeneralAutocomplete.autocompleteValidator]);\r\n } else {\r\n this.component.clearValidators();\r\n }\r\n\r\n this.component.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * Define si vamos a realizar una búsqueda al elemento estar en el focus de la aplicación\r\n *\r\n * @param focusSubject - Observable para la subscripción al evento Focus\r\n */\r\n @Input() set doFocus(focusSubject: Subject<void>) {\r\n this.doFocusSubject$ = focusSubject;\r\n\r\n if (this.doFocusSubject$) {\r\n this.doFocusSubject$\r\n .pipe(takeUntil(this.unsubscribeAll$))\r\n .subscribe({\r\n next: (): void => {\r\n this._zone.run((): void => {\r\n setTimeout((): void => {\r\n this.inputText?.nativeElement?.focus();\r\n }, 500);\r\n });\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Validación customizada para la selección de elementos\r\n */\r\n private static autocompleteValidator(): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n if (control?.value?.constructor !== Object || !control?.value?.id) {\r\n return {invalidSelection: true};\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n /**\r\n * Subscripción a los cambios del input de búsqueda\r\n */\r\n private subscribeComponentChanges(): void {\r\n this.component?.valueChanges\r\n ?.pipe(debounceTime(this.debounceTimeValue), takeUntil(this.unsubscribeAll$))\r\n ?.subscribe({\r\n next: (): void => {\r\n if (!this.firstCall() && !this.wasSelected()) {\r\n this.getAutocompleteByTextHandler(this.getAutocompleteSearchText());\r\n } else {\r\n this.firstCall.set(false);\r\n }\r\n\r\n this.wasSelected.set(false);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Búsqueda de los elementos a mostrar en el componente de autocompletamiento\r\n *\r\n * @param text - Texto a buscar\r\n */\r\n private getAutocompleteByTextHandler(text?: string): void {\r\n this._autocompleteService\r\n .getAutocompleteByText(this._url(), text, this.filterString, this.restrictionsFilters(),\r\n this.removeProperties, this.order, this.bodyRequest)\r\n .then((resp: Observable<any>): void => {\r\n resp?.subscribe({\r\n next: (result: any): void => {\r\n this.filteredOptions.set(result?.payload?.data ?? result?.data);\r\n this.loading.set(false);\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Define el texto por el que se va a realizar la búsqueda\r\n *\r\n * @return {string} Texto de la búsqueda\r\n */\r\n private getAutocompleteSearchText(): string {\r\n this.loading.set(true);\r\n\r\n let text: string = '';\r\n\r\n if (this.component?.value) {\r\n if (typeof this.component.value === 'object') {\r\n const componentValue = this.component?.value[this.field[0]];\r\n if (typeof componentValue === 'object') {\r\n let lang: string = 'es';\r\n if (this.field[1]) {\r\n lang = this.field[1];\r\n }\r\n\r\n text = componentValue[lang];\r\n }\r\n } else if (typeof this.component?.value === 'string') {\r\n text = this.component.value;\r\n }\r\n }\r\n\r\n return text;\r\n }\r\n\r\n propagateChange = (_: any): void => {\r\n };\r\n\r\n registerOnChange(fn: (_: any) => void): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(): void {\r\n }\r\n\r\n /**\r\n * Recibe el valor del FormControl\r\n *\r\n * @param value - Valor entrado por FormControl\r\n */\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.component.setValue(value, {emitEvent: false});\r\n\r\n if (typeof value === 'object' && this.valueId) {\r\n this.selectedElement.set(value?.id);\r\n } else {\r\n this.selectedElement.set(value);\r\n }\r\n } else {\r\n this.selectedElement.set(null);\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean) {\r\n this.disabledButton.set(isDisabled);\r\n if (isDisabled) {\r\n this.component.disable();\r\n } else {\r\n this.component.enable();\r\n }\r\n }\r\n\r\n /**\r\n * Función para mostrar los elementos a seleccionar\r\n *\r\n * @param value - Valor a mostrar\r\n */\r\n public displayFn = (value: any): string => {\r\n if (value) {\r\n if (typeof value === 'string') {\r\n return value;\r\n }\r\n\r\n let displayText: string = '';\r\n if (!this.displayOptions) {\r\n this.displayOptions = GENERAL_DISPLAY_OPTIONS;\r\n }\r\n\r\n this.displayOptions?.firthLabel?.forEach((field: any): void => {\r\n if (field?.type === 'path') {\r\n displayText += UtilsService.resolvePropertyByPath(value, field?.path);\r\n } else {\r\n displayText += field?.divider;\r\n }\r\n });\r\n\r\n return displayText;\r\n }\r\n };\r\n\r\n /**\r\n * Acción al limpiar el valor del input\r\n *\r\n * @param trigger\r\n */\r\n public clear(trigger: MatAutocompleteTrigger): void {\r\n this.component.setValue(null);\r\n this.selectedElement.set(null);\r\n this.SelectElement.emit(null);\r\n this.propagateChange(null);\r\n\r\n this._zone.run((): void => {\r\n setTimeout((): void => {\r\n trigger.openPanel();\r\n }, 100);\r\n });\r\n }\r\n\r\n /**\r\n * Acción en el Focus del elemento\r\n */\r\n public onFocus(): void {\r\n if (!this.selectedElement()) {\r\n this.getAutocompleteByTextHandler(this.getAutocompleteSearchText());\r\n }\r\n }\r\n\r\n /**\r\n * Acción al seleccionar un elemento\r\n *\r\n * @param item - Elemento seleccionado\r\n */\r\n public onSelectElement(item: any): void {\r\n this.wasSelected.set(true);\r\n this.selectedElement.set(item);\r\n this.SelectElement.emit(item);\r\n\r\n if (this.valueId) {\r\n this.propagateChange(typeof item === 'object' ? item?.id : item);\r\n } else {\r\n this.propagateChange(item);\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n // this.component.markAllAsTouched();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribeAll$.next();\r\n this.unsubscribeAll$.complete();\r\n }\r\n}\r\n","<mat-form-field [floatLabel]=\"floatLabel\" [ngClass]=\"{'without-padding-bottom': withoutPaddingBottom}\" class=\"w-100\"\r\n [appearance]=\"appearance\" [color]=\"color\">\r\n\r\n <mat-label *ngIf=\"showLabel\">{{label | translate}}</mat-label>\r\n <mat-icon matSuffix *ngIf=\"showSuffix\">{{suffixIcon ?? \"search\"}}</mat-icon>\r\n <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\"\r\n [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\r\n autocomplete=\"off\" matInput type=\"text\" [required]=\"required()\">\r\n <button (click)=\"clear(trigger)\" *ngIf=\"!loading() && component?.value\" [disabled]=\"disabledButton()\"\r\n aria-label=\"Clear\" mat-icon-button matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button *ngIf=\"loading()\" aria-label=\"search\" mat-icon-button matSuffix>\r\n <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\r\n </button>\r\n <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\" (onSelectionChange)=\"onSelectElement(option)\">\r\n\r\n <ng-container *ngIf=\"!displayOptions && !detailsTemplate\">\r\n {{ option?.name | i18nField: translateService.currentLang }}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!detailsTemplate\">\r\n <div class=\"display-options\">\r\n <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\r\n {{option | resolvePropertyPath:displayOptions.firthLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n <span *ngIf=\"displayOptions?.secondLabel\" class=\"mat-caption\">\r\n {{option | resolvePropertyPath: displayOptions.secondLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"detailsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-error *ngIf=\"component.invalid\">\r\n {{'Este campo es requerido.' | translate}}\r\n </mat-error>\r\n</mat-form-field>\r\n","/*\r\n * Public API Surface of guachos-general-autocomplete\r\n */\r\n\r\nexport * from './utils/interfaces/interfaces';\r\nexport * from './utils/constants/contacts';\r\nexport * from './lib/guachos-general-autocomplete.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ShowSegmentsPipe","i2.ShowRolesPipe","i3.ShowTransportTypesPipe","i4.IdaReturnPipe","i6.HumanizeDurationPipe","i7.DurationTimePipe","i1.AutocompleteService","i5","i11.I18nFieldPipe","i12.ResolvePropertyPath"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;IAEY,YASX;AATD,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,WAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,WAAA,CAAA,mBAAA,CAAA,GAAA,kBAAsC,CAAA;AACtC,IAAA,WAAA,CAAA,sBAAA,CAAA,GAAA,oBAA2C,CAAA;AAC3C,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,WAAwB,CAAA;AACxB,IAAA,WAAA,CAAA,YAAA,CAAA,GAAA,WAAwB,CAAA;AACxB,IAAA,WAAA,CAAA,UAAA,CAAA,GAAA,UAAqB,CAAA;AACrB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AAC3B,CAAC,EATW,WAAW,KAAX,WAAW,GAStB,EAAA,CAAA,CAAA;;ACTY,MAAA,uBAAuB,GAAkB;AAClD,IAAA,UAAU,EAAE;AACR,QAAA;AACI,YAAA,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,CAAC,MAAM,CAAC;AACjB,SAAA;AACJ,KAAA;AACD,IAAA,cAAc,EAAE,IAAI;;;MCEX,mBAAmB,CAAA;AAC5B,IAAA,WAAA,CACY,WAAuB,EAAA;QAAvB,IAAW,CAAA,WAAA,GAAX,WAAW,CAAY;QAI3B,IAAW,CAAA,WAAA,GAAG,EAAE,CAAC;KAFxB;IAIO,aAAa,CAAC,OAAsC,EAAE,KAAa,EAAA;QACvE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;YACnC,UAAU,CAAC,YAAW;gBAClB,IAAI,MAAM,GAAG,EAAE,CAAC;AAEhB,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACxB,oBAAA,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE;AACrB,wBAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,KAAI;4BACxD,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE;AAC7B,gCAAA,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACvB,6BAAA;AAAM,iCAAA;AACH,gCAAA,MAAM,GAAG;AACL,oCAAA,GAAG,MAAM;AACT,oCAAA,GAAG,IAAI;iCACV,CAAC;AACL,6BAAA;4BAED,IAAI,CAAC,KAAK,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE;gCACpC,OAAO,CAAC,MAAM,CAAC,CAAC;AACnB,6BAAA;AACL,yBAAC,CAAC,CAAC;AACN,qBAAA;AACJ,iBAAA;AAAM,qBAAA,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACpC,oBAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,KAAI;AAC9D,wBAAA,MAAM,GAAG;AACL,4BAAA,GAAG,MAAM;AACT,4BAAA,GAAG,IAAI;yBACV,CAAC;wBAEF,OAAO,CAAC,MAAM,CAAC,CAAC;AACpB,qBAAC,CAAC,CAAC;AACN,iBAAA;AAAM,qBAAA;oBACH,MAAM,CAAC,IAAI,CAAC,CAAC;AAChB,iBAAA;aACJ,EAAE,GAAG,CAAC,CAAC;AACZ,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,MAAM,mBAAmB,CAAC,MAAc,EAAE,KAAa,EAAA;QAC3D,IAAI,CAAC,GAAQ,EAAE,CAAC;QAEhB,MAAM,YAAY,GAAa,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AAElD,QAAA,IAAI,YAAY,EAAE,SAAS,CAAC,CAAC,CAAS,KAAK,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC7D,YAAA,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,SAAA;AAED,QAAA,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAS,KAAI;YACnE,CAAC,GAAG,IAAI,CAAC;AACb,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,CAAC,CAAC;KACZ;AAEO,IAAA,MAAM,mBAAmB,CAAC,KAAe,EAAE,KAAa,EAAA;AAC5D,QAAA,KAAK,IAAI,MAAM,IAAI,KAAK,EAAE;YACtB,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;AAElC,YAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;AAClB,gBAAA,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACnB,gBAAA,OAAO,EAAC,CAAC,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAC,CAAC;AACnE,aAAA;AAAM,iBAAA;gBACH,IAAI,MAAM,KAAK,OAAO,EAAE;oBACpB,OAAO,EAAC,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,EAAC,CAAC;AACxC,iBAAA;AAAM,qBAAA;AACH,oBAAA,OAAO,EAAC,CAAC,MAAM,GAAG,KAAK,EAAC,CAAC;AAC5B,iBAAA;AACJ,aAAA;AACJ,SAAA;KACJ;AAEM,IAAA,MAAM,qBAAqB,CAAC,GAAW,EAAE,IAAa,EAAE,KAAyB,EAAE,YAAkC,EACzF,gBAA2B,EAAE,KAAc,EAAE,WAAyB,EAAA;AAErG,QAAA,IAAI,UAAU,GAAe,IAAI,UAAU,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACjE,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAE9C,QAAA,IAAI,KAAK,EAAE;YACP,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AAClD,SAAA;QAED,IAAI,CAAC,IAAI,EAAE;YACP,IAAI,GAAG,EAAE,CAAC;AACb,SAAA;AAED,QAAA,IAAI,WAAW,EAAE;YACb,IAAI,IAAI,GAAgB,EAAE,CAAC;AAC3B,YAAA,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;AACrB,gBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC;AAChC,qBAAA,IAAI,CAAC,CAAC,IAAS,KAAI;AAChB,oBAAA,IAAI,GAAG;AACH,wBAAA,GAAG,WAAW;AACd,wBAAA,MAAM,EAAE,IAAI;qBACf,CAAC;AACN,iBAAC,CAAC,CAAC;AACV,aAAA;AAAM,iBAAA;AACH,gBAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;AAClD,aAAA;YAED,IAAI,YAAY,EAAE,MAAM,EAAE;AACtB,gBAAA,KAAK,IAAI,CAAC,IAAI,YAAY,EAAE;AACxB,oBAAA,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AACpD,yBAAA,IAAI,CAAC,CAAC,IAAS,KAAI;wBAChB,IAAI,UAAU,GAAG,EAAC,GAAG,IAAI,EAAE,MAAM,EAAC,CAAA;AAClC,wBAAA,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AACxB,wBAAA,IAAI,GAAG;AACH,4BAAA,GAAG,IAAI;AACP,4BAAA,MAAM,EAAE,UAAU;yBACrB,CAAC;AACF,wBAAA,UAAU,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAC9D,qBAAC,CAAC,CAAC;AACV,iBAAA;AACJ,aAAA;AAAM,iBAAA;AACH,gBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;AAChE,aAAA;AACJ,SAAA;AAAM,aAAA;AACH,YAAA,IAAI,IAAI,IAAI,IAAI,KAAK,EAAE,EAAE;AACrB,gBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACtB,oBAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;AACnB,wBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;AACvD,qBAAA;AACJ,iBAAA;AAAM,qBAAA;AACH,oBAAA,IAAI,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE;AAC1B,wBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC;AAC3D,qBAAA;AAAM,yBAAA,IAAI,KAAK,EAAE;wBACd,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/C,qBAAA;AACJ,iBAAA;AACJ,aAAA;AAED,YAAA,YAAY,EAAE,OAAO,CAAC,CAAC,WAA8B,KAAI;gBACrD,IAAI,WAAW,EAAE,KAAK,EAAE;AACpB,oBAAA,UAAU,GAAG,UAAU,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;AACtF,iBAAA;AACL,aAAC,CAAC,CAAC;AACN,SAAA;QAED,IAAI,CAAC,WAAW,GAAG,EAAC,MAAM,EAAE,UAAU,EAAC,CAAC;QAExC,OAAO,IAAI,CAAC,WAAW;AAClB,aAAA,GAAG,CAAM,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC;AAC/B,aAAA,IAAI,CACD,GAAG,CAAC,CAAC,MAAW,KAAI;YAChB,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC,IAAS,KAAI;AAC5B,gBAAA,gBAAgB,EAAE,OAAO,CAAC,CAAC,QAAgB,KAAI;AAC3C,oBAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,iBAAC,CAAC,CAAC;AACP,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,MAAM,CAAC;SACjB,CAAC,CACL,CAAC;KACT;8GA/JQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cAFhB,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAET,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAH/B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;;MCLY,YAAY,CAAA;AACrB;;;;;AAKG;IACK,OAAO,OAAO,CAAC,IAAqB,EAAA;AACxC,QAAA,MAAM,KAAK,GAAW,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7D,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC;AACrC,QAAA,MAAM,OAAO,GAAW,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;AAE7D,QAAA,OAAO,EAAC,KAAK,EAAE,OAAO,EAAC,CAAA;KAC1B;AAED;;;;AAIG;IACI,OAAO,aAAa,CAAC,IAAY,EAAA;AACpC,QAAA,MAAM,EAAC,KAAK,EAAE,OAAO,EAAC,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpD,QAAA,OAAO,CAAC,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,IAAI,GAAG,IAAI,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,CAAC;KAC9F;AAED;;;;AAIG;IACI,OAAO,gBAAgB,CAAC,IAAqB,EAAA;AAChD,QAAA,MAAM,EAAC,KAAK,EAAE,OAAO,EAAC,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAEpD,QAAA,OAAO,CAAC,KAAK,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,KAAK,IAAI,MAAM,IAAI,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,CAAC;KACvG;AAEM,IAAA,OAAO,qBAAqB,CAAC,GAAQ,EAAE,IAAc,EAAA;QACxD,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAY,KAAI;AACtC,YAAA,OAAO,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACpC,SAAC,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;KACnB;8GAzCQ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cAFT,MAAM,EAAA,CAAA,CAAA,EAAA;;2FAET,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,UAAU,EAAE,MAAM;AACrB,iBAAA,CAAA;;;MCEY,gBAAgB,CAAA;AACzB,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,OAAO,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC5C;8GAHQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAhB,gBAAgB,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA,EAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAF5B,UAAU;;kBACV,IAAI;mBAAC,EAAC,IAAI,EAAE,cAAc,EAAC,CAAA;;;MCEf,oBAAoB,CAAA;AAC7B,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,OAAO,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;KAC/C;8GAHQ,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAApB,oBAAoB,EAAA,IAAA,EAAA,kBAAA,EAAA,CAAA,CAAA,EAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBAHhC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,kBAAkB;AAC3B,iBAAA,CAAA;;;MCHY,aAAa,CAAA;IACtB,SAAS,CAAC,KAAU,EAAE,IAAY,EAAA;QAC9B,IAAI,CAAC,KAAK,EAAE;AACR,YAAA,OAAO,EAAE,CAAC;AACb,SAAA;AAED,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC3B,YAAA,OAAO,KAAK,CAAC;AAChB,SAAA;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YACd,IAAI,CAAC,GAAG,CAAC,CAAC;YACV,OAAO,CAAC,GAAG,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE;AAC3E,gBAAA,CAAC,EAAE,CAAC;AACP,aAAA;AACD,YAAA,OAAO,IAAI,EAAE,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;AACjE,SAAA;AAED,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC;KAC5C;8GApBQ,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA,EAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,IAAI;mBAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAA;;;MCIZ,aAAa,CAAA;AACtB,IAAA,SAAS,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,KAAK,KAAK,WAAW,CAAC,UAAU,EAAE;AAClC,YAAA,OAAO,cAAc,CAAC;AACzB,SAAA;AAAM,aAAA;AACH,YAAA,OAAO,UAAU,CAAC;AACrB,SAAA;KACJ;8GAPQ,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAb,aAAa,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,CAAA,EAAA;kHAAb,aAAa,EAAA,CAAA,CAAA,EAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAFzB,UAAU;;kBACV,IAAI;mBAAC,EAAC,IAAI,EAAE,WAAW,EAAC,CAAA;;;MCDZ,aAAa,CAAA;AACtB,IAAA,SAAS,CAAC,KAAY,EAAA;QAElB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,KAAK,EAAE,MAAM,EAAE;AACf,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;gBACjB,MAAM,IAAI,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI,CAAC;AACrC,aAAC,CAAC,CAAC;AAEH,YAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AACpD,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;8GAdQ,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAb,aAAa,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA,EAAA;kHAAb,aAAa,EAAA,CAAA,CAAA,EAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAFzB,UAAU;;kBACV,IAAI;mBAAC,EAAC,IAAI,EAAE,cAAc,EAAC,CAAA;;;MCCf,gBAAgB,CAAA;AACzB,IAAA,SAAS,CAAC,KAAY,EAAA;QAClB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,KAAK,EAAE,MAAM,EAAE;AACf,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;gBACjB,MAAM,IAAI,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;AACxG,aAAC,CAAC,CAAC;AAEH,YAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AACpD,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;8GAbQ,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAhB,gBAAgB,EAAA,IAAA,EAAA,cAAA,EAAA,CAAA,CAAA,EAAA;kHAAhB,gBAAgB,EAAA,CAAA,CAAA,EAAA;;2FAAhB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAF5B,UAAU;;kBACV,IAAI;mBAAC,EAAC,IAAI,EAAE,cAAc,EAAC,CAAA;;;MCCf,sBAAsB,CAAA;AAC/B,IAAA,SAAS,CAAC,KAAY,EAAA;QAClB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,IAAI,KAAK,EAAE,MAAM,EAAE;AACf,YAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;gBACjB,MAAM,IAAI,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACrD,aAAC,CAAC,CAAC;AAEH,YAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;AACpD,SAAA;AAED,QAAA,OAAO,MAAM,CAAC;KACjB;8GAbQ,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAtB,sBAAsB,EAAA,IAAA,EAAA,oBAAA,EAAA,CAAA,CAAA,EAAA;kHAAtB,sBAAsB,EAAA,CAAA,CAAA,EAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAFlC,UAAU;;kBACV,IAAI;mBAAC,EAAC,IAAI,EAAE,oBAAoB,EAAC,CAAA;;;MCUrB,mBAAmB,CAAA;AAE5B,IAAA,WAAA,CACY,gBAAkC,EAClC,cAA6B,EAC7B,uBAA+C,EAC/C,cAA6B,EAC7B,aAA2B,EAC3B,qBAA2C,EAC3C,cAA6B,EAC7B,aAA+B,EAAA;QAP/B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAClC,IAAc,CAAA,cAAA,GAAd,cAAc,CAAe;QAC7B,IAAuB,CAAA,uBAAA,GAAvB,uBAAuB,CAAwB;QAC/C,IAAc,CAAA,cAAA,GAAd,cAAc,CAAe;QAC7B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAc;QAC3B,IAAqB,CAAA,qBAAA,GAArB,qBAAqB,CAAsB;QAC3C,IAAc,CAAA,cAAA,GAAd,cAAc,CAAe;QAC7B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAkB;KAE1C;IAED,SAAS,CAAC,GAAQ,EAAE,IAAyB,EAAA;QACzC,IAAI,MAAM,GAAW,EAAE,CAAC;AAExB,QAAA,IAAI,EAAE,OAAO,CAAC,CAAC,IAAuB,KAAI;AACtC,YAAA,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE;AAC1B,gBAAA,MAAM,IAAI,IAAI,EAAE,OAAO,CAAC;AAC3B,aAAA;AAAM,iBAAA;gBACH,IAAI,IAAI,EAAE,IAAI,EAAE;AACZ,oBAAA,IAAI,KAAK,GAAG,YAAY,CAAC,qBAAqB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;oBAE/D,QAAQ,IAAI,EAAE,UAAU;wBACpB,KAAK,WAAW,CAAC,aAAa;4BAC1B,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BAC/C,MAAM;wBACV,KAAK,WAAW,CAAC,aAAa;4BAC1B,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BAC5C,MAAM;wBACV,KAAK,WAAW,CAAC,iBAAiB;4BAC9B,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BACpD,MAAM;wBACV,KAAK,WAAW,CAAC,oBAAoB;4BACjC,KAAK,GAAG,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BACtD,MAAM;wBACV,KAAK,WAAW,CAAC,UAAU;4BACvB,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BAC7C,MAAM;wBACV,KAAK,WAAW,CAAC,UAAU;4BACvB,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BAC7C,MAAM;wBACV,KAAK,WAAW,CAAC,QAAQ;4BACrB,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BAC5C,MAAM;wBACV,KAAK,WAAW,CAAC,SAAS;4BACtB,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;4BAC7C,MAAM;AACV,wBAAA;4BACI,MAAM;AACb,qBAAA;oBACD,MAAM,IAAI,KAAK,CAAC;AACnB,iBAAA;AACJ,aAAA;AACL,SAAC,CAAC,CAAC;AAEH,QAAA,OAAO,MAAM,CAAC;KACjB;8GA1DQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,sBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,oBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA,EAAA;4GAAnB,mBAAmB,EAAA,IAAA,EAAA,qBAAA,EAAA,CAAA,CAAA,EAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,IAAI;mBAAC,EAAC,IAAI,EAAE,qBAAqB,EAAC,CAAA;;;MCsCtB,WAAW,CAAA;8GAAX,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;AAAX,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,iBApCpB,gBAAgB;YAChB,oBAAoB;YACpB,aAAa;YACb,aAAa;YACb,mBAAmB;YACnB,aAAa;YACb,gBAAgB;AAChB,YAAA,sBAAsB,aAGtB,YAAY;AACZ,YAAA,aAAa,aAGb,gBAAgB;YAChB,oBAAoB;YACpB,aAAa;YACb,aAAa;YACb,mBAAmB;YACnB,aAAa;YACb,gBAAgB;YAChB,sBAAsB,CAAA,EAAA,CAAA,CAAA,EAAA;AAeb,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,EAbX,SAAA,EAAA;YACT,gBAAgB;YAChB,oBAAoB;YACpB,aAAa;YACb,aAAa;YACb,mBAAmB;YACnB,aAAa;YACb,gBAAgB;YAChB,sBAAsB;YACtB,YAAY;YACZ,aAAa;AACd,SAAA,EAAA,CAAA,CAAA,EAAA;;2FAEU,WAAW,EAAA,UAAA,EAAA,CAAA;kBAtCvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,gBAAgB;wBAChB,oBAAoB;wBACpB,aAAa;wBACb,aAAa;wBACb,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,sBAAsB;AACvB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;wBACZ,aAAa;AACd,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,gBAAgB;wBAChB,oBAAoB;wBACpB,aAAa;wBACb,aAAa;wBACb,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,sBAAsB;AACvB,qBAAA;AACD,oBAAA,SAAS,EAAE;wBACT,gBAAgB;wBAChB,oBAAoB;wBACpB,aAAa;wBACb,aAAa;wBACb,mBAAmB;wBACnB,aAAa;wBACb,gBAAgB;wBAChB,sBAAsB;wBACtB,YAAY;wBACZ,aAAa;AACd,qBAAA;AACF,iBAAA,CAAA;;;MCuBY,6BAA6B,CAAA;AAExC,IAAA,WAAA,CACU,oBAAyC,EACzC,KAAa,EACd,gBAAkC,EAAA;QAFjC,IAAoB,CAAA,oBAAA,GAApB,oBAAoB,CAAqB;QACzC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAQ;QACd,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;AAInC,QAAA,IAAA,CAAA,WAAW,GAA4B,MAAM,CAAC,KAAK,CAAC,CAAC;AACrD,QAAA,IAAA,CAAA,SAAS,GAA4B,MAAM,CAAC,IAAI,CAAC,CAAC;AAElD,QAAA,IAAA,CAAA,eAAe,GAAkB,IAAI,OAAO,EAAQ,CAAC;AAErD,QAAA,IAAA,CAAA,eAAe,GAAwB,MAAM,CAAC,IAAI,CAAC,CAAC;AACpD,QAAA,IAAA,CAAA,IAAI,GAA2B,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,QAAA,IAAA,CAAA,mBAAmB,GAAwC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEvE,QAAA,IAAA,CAAA,cAAc,GAA4B,MAAM,CAAC,KAAK,CAAC,CAAC;AACxD,QAAA,IAAA,CAAA,OAAO,GAA4B,MAAM,CAAC,KAAK,CAAC,CAAC;AACjD,QAAA,IAAA,CAAA,QAAQ,GAA4B,MAAM,CAAC,KAAK,CAAC,CAAC;AAClD,QAAA,IAAA,CAAA,eAAe,GAA0B,MAAM,CAAC,EAAE,CAAC,CAAC;AACpD,QAAA,IAAA,CAAA,SAAS,GAAuB,IAAI,kBAAkB,CAAC,EAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAC,CAAC,CAAC;AAG9F;;AAEG;QACM,IAAU,CAAA,UAAA,GAAmB,MAAM,CAAC;QAEpC,IAAiB,CAAA,iBAAA,GAAW,GAAG,CAAC;QAEhC,IAAK,CAAA,KAAA,GAAW,YAAY,CAAC;QAC7B,IAAS,CAAA,SAAA,GAAY,IAAI,CAAC;QAC1B,IAAU,CAAA,UAAA,GAA2B,SAAS,CAAC;QAC/C,IAAK,CAAA,KAAA,GAAiB,QAAQ,CAAC;QAC/B,IAAW,CAAA,WAAA,GAAW,wBAAwB,CAAC;AAC/C,QAAA,IAAA,CAAA,KAAK,GAAa,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAY,CAAA,YAAA,GAAW,2BAA2B,CAAC;QACnD,IAAc,CAAA,cAAA,GAAkB,uBAAuB,CAAC;QACxD,IAAoB,CAAA,oBAAA,GAAY,IAAI,CAAC;QACrC,IAAO,CAAA,OAAA,GAAY,KAAK,CAAC;QACzB,IAAU,CAAA,UAAA,GAAY,KAAK,CAAC;QAE5B,IAAU,CAAA,UAAA,GAAW,QAAQ,CAAC;QAC9B,IAAgB,CAAA,gBAAA,GAAa,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,aAAa,GAAsB,IAAI,YAAY,EAAO,CAAC;AAkKrE,QAAA,IAAA,CAAA,eAAe,GAAG,CAAC,CAAM,KAAU;AACnC,SAAC,CAAC;AAqCF;;;;AAIG;AACI,QAAA,IAAA,CAAA,SAAS,GAAG,CAAC,KAAU,KAAY;AACxC,YAAA,IAAI,KAAK,EAAE;AACT,gBAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,oBAAA,OAAO,KAAK,CAAC;AACd,iBAAA;gBAED,IAAI,WAAW,GAAW,EAAE,CAAC;AAC7B,gBAAA,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;AACxB,oBAAA,IAAI,CAAC,cAAc,GAAG,uBAAuB,CAAC;AAC/C,iBAAA;gBAED,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,KAAU,KAAU;AAC5D,oBAAA,IAAI,KAAK,EAAE,IAAI,KAAK,MAAM,EAAE;wBAC1B,WAAW,IAAI,YAAY,CAAC,qBAAqB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AACvE,qBAAA;AAAM,yBAAA;AACL,wBAAA,WAAW,IAAI,KAAK,EAAE,OAAO,CAAC;AAC/B,qBAAA;AACH,iBAAC,CAAC,CAAC;AAEH,gBAAA,OAAO,WAAW,CAAC;AACpB,aAAA;AACH,SAAC,CAAC;KAzQD;IAyCD,IAAa,GAAG,CAAC,IAAY,EAAA;AAC3B,QAAA,IAAI,IAAI,EAAE;AACR,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACpB,IAAI,CAAC,yBAAyB,EAAE,CAAC;AAClC,SAAA;KACF;IAED,IAAa,SAAS,CAAC,KAAoB,EAAA;AACzC,QAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QACxB,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU;AACZ,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrC,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,MAAW;AACf,oBAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;AAClD,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,oBAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAC7B,oBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;iBAC5B;AACF,aAAA,CAAC,CAAC;AACN,SAAA;KACF;IAED,IAAa,YAAY,CAAC,KAAU,EAAA;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KAChC;AAED;;;;AAIG;IACH,IAAa,YAAY,CAAC,YAAiC,EAAA;AACzD,QAAA,IAAI,YAAY,EAAE;AAChB,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;AAC5C,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClC,SAAA;KACF;AAED;;;;AAIG;IACH,IAAa,UAAU,CAAC,QAAiB,EAAA;AACvC,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAE5B,QAAA,IAAI,QAAQ,EAAE;AACZ,YAAA,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,6BAA6B,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC1G,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,eAAe,EAAE,CAAC;AAClC,SAAA;AAED,QAAA,IAAI,CAAC,SAAS,CAAC,sBAAsB,EAAE,CAAC;KACzC;AAED;;;;AAIG;IACH,IAAa,OAAO,CAAC,YAA2B,EAAA;AAC9C,QAAA,IAAI,CAAC,eAAe,GAAG,YAAY,CAAC;QAEpC,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,IAAI,CAAC,eAAe;AACjB,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AACrC,iBAAA,SAAS,CAAC;gBACT,IAAI,EAAE,MAAW;AACf,oBAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAW;wBACxB,UAAU,CAAC,MAAW;AACpB,4BAAA,IAAI,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;yBACxC,EAAE,GAAG,CAAC,CAAC;AACV,qBAAC,CAAC,CAAC;iBACJ;AACF,aAAA,CAAC,CAAC;AACN,SAAA;KACF;AAED;;AAEG;AACK,IAAA,OAAO,qBAAqB,GAAA;QAClC,OAAO,CAAC,OAAwB,KAAmC;AACjE,YAAA,IAAI,OAAO,EAAE,KAAK,EAAE,WAAW,KAAK,MAAM,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;AACjE,gBAAA,OAAO,EAAC,gBAAgB,EAAE,IAAI,EAAC,CAAC;AACjC,aAAA;AACD,YAAA,OAAO,IAAI,CAAC;AACd,SAAC,CAAC;KACH;AAED;;AAEG;IACK,yBAAyB,GAAA;QAC/B,IAAI,CAAC,SAAS,EAAE,YAAY;AAC1B,cAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;AAC7E,cAAE,SAAS,CAAC;YACV,IAAI,EAAE,MAAW;gBACf,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;oBAC5C,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;AACrE,iBAAA;AAAM,qBAAA;AACL,oBAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3B,iBAAA;AAED,gBAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;aAC7B;AACF,SAAA,CAAC,CAAC;KACN;AAED;;;;AAIG;AACK,IAAA,4BAA4B,CAAC,IAAa,EAAA;AAChD,QAAA,IAAI,CAAC,oBAAoB;AACtB,aAAA,qBAAqB,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,mBAAmB,EAAE,EACrF,IAAI,CAAC,gBAAgB,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;AACrD,aAAA,IAAI,CAAC,CAAC,IAAqB,KAAU;YACpC,IAAI,EAAE,SAAS,CAAC;AACd,gBAAA,IAAI,EAAE,CAAC,MAAW,KAAU;AAC1B,oBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,IAAI,CAAC,CAAC;AAChE,oBAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;iBACzB;AACF,aAAA,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACN;AAED;;;;AAIG;IACK,yBAAyB,GAAA;AAC/B,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEvB,IAAI,IAAI,GAAW,EAAE,CAAC;AAEtB,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE;YACzB,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,KAAK,QAAQ,EAAE;AAC5C,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,gBAAA,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE;oBACtC,IAAI,IAAI,GAAW,IAAI,CAAC;AACxB,oBAAA,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACjB,wBAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,qBAAA;AAED,oBAAA,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;AAC7B,iBAAA;AACF,aAAA;iBAAM,IAAI,OAAO,IAAI,CAAC,SAAS,EAAE,KAAK,KAAK,QAAQ,EAAE;AACpD,gBAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;AAC7B,aAAA;AACF,SAAA;AAED,QAAA,OAAO,IAAI,CAAC;KACb;AAKD,IAAA,gBAAgB,CAAC,EAAoB,EAAA;AACnC,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;KAC3B;IAED,iBAAiB,GAAA;KAChB;AAED;;;;AAIG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;AACnB,QAAA,IAAI,KAAK,EAAE;AACT,YAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAC,SAAS,EAAE,KAAK,EAAC,CAAC,CAAC;YAEnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,OAAO,EAAE;gBAC7C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACrC,aAAA;AAAM,iBAAA;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjC,aAAA;AACF,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChC,SAAA;KACF;AAED,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACpC,QAAA,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;AAC1B,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;AACzB,SAAA;KACF;AA8BD;;;;AAIG;AACI,IAAA,KAAK,CAAC,OAA+B,EAAA;AAC1C,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAE3B,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAW;YACxB,UAAU,CAAC,MAAW;gBACpB,OAAO,CAAC,SAAS,EAAE,CAAC;aACrB,EAAE,GAAG,CAAC,CAAC;AACV,SAAC,CAAC,CAAC;KACJ;AAED;;AAEG;IACI,OAAO,GAAA;AACZ,QAAA,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE;YAC3B,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;AACrE,SAAA;KACF;AAED;;;;AAIG;AACI,IAAA,eAAe,CAAC,IAAS,EAAA;AAC9B,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,eAAe,CAAC,OAAO,IAAI,KAAK,QAAQ,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;AAClE,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AAC5B,SAAA;KACF;IAED,QAAQ,GAAA;;KAEP;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;AAC5B,QAAA,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;KACjC;8GArUU,6BAA6B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAR7B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,WAAA,EAAA,aAAA,EAAA,iBAAA,EAAA,mBAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,OAAA,EAAA,SAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,WAAA,EAAA,aAAA,EAAA,KAAA,EAAA,OAAA,EAAA,YAAA,EAAA,cAAA,EAAA,cAAA,EAAA,gBAAA,EAAA,oBAAA,EAAA,sBAAA,EAAA,OAAA,EAAA,SAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,OAAA,EAAA,UAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,GAAA,EAAA,KAAA,EAAA,SAAA,EAAA,WAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,eAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,6BAA6B,CAAC;AAC5D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,WAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,WAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECtEH,82EA2CA,EAAA,MAAA,EAAA,CAAA,4HAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDMI,kBAAkB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,YAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,oBAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,WAAA,CAAA,EAAA,QAAA,EAAA,CAAA,cAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,CAAA,IAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,SAAA,EAAA,QAAA,EAAA,+CAAA,EAAA,MAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAClB,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,qBAAqB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,8BAAA,CAAA,EAAA,QAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAC,IAAA,CAAA,SAAA,EAAA,QAAA,EAAA,YAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,sBAAA,EAAA,QAAA,EAAA,mDAAA,EAAA,QAAA,EAAA,CAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACrB,cAAc,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,QAAA,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACd,mBAAmB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,QAAA,EAAA,wIAAA,EAAA,MAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACnB,eAAe,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,yBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,OAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACf,aAAa,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,SAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACb,wBAAwB,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,GAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,mCAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACxB,IAAI,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACJ,OAAO,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACP,OAAO,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EACP,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,aAAA,EAAA,IAAA,EAAA,WAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAAC,mBAAA,EAAA,IAAA,EAAA,qBAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EACX,gBAAgB,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAUP,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBA9BzC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,iCAAiC,mBAG1B,uBAAuB,CAAC,MAAM,EAAA,UAAA,EACnC,IAAI,EACP,OAAA,EAAA;wBACP,kBAAkB;wBAClB,OAAO;wBACP,eAAe;wBACf,qBAAqB;wBACrB,cAAc;wBACd,mBAAmB;wBACnB,eAAe;wBACf,aAAa;wBACb,wBAAwB;wBACxB,IAAI;wBACJ,OAAO;wBACP,OAAO;wBACP,WAAW;wBACX,gBAAgB;qBACjB,EACU,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAE,UAAU,CAAC,mCAAmC,CAAC;AAC5D,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,82EAAA,EAAA,MAAA,EAAA,CAAA,4HAAA,CAAA,EAAA,CAAA;2JA0BuC,SAAS,EAAA,CAAA;sBAAhD,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,WAAW,EAAE,EAAC,MAAM,EAAE,IAAI,EAAC,CAAA;gBAI7B,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,iBAAiB,EAAA,CAAA;sBAAzB,KAAK;gBACG,eAAe,EAAA,CAAA;sBAAvB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,SAAS,EAAA,CAAA;sBAAjB,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,WAAW,EAAA,CAAA;sBAAnB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBACG,oBAAoB,EAAA,CAAA;sBAA5B,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,gBAAgB,EAAA,CAAA;sBAAxB,KAAK;gBACI,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBAEM,GAAG,EAAA,CAAA;sBAAf,KAAK;gBAOO,SAAS,EAAA,CAAA;sBAArB,KAAK;gBAiBO,YAAY,EAAA,CAAA;sBAAxB,KAAK;gBASO,YAAY,EAAA,CAAA;sBAAxB,KAAK;gBAaO,UAAU,EAAA,CAAA;sBAAtB,KAAK;gBAiBO,OAAO,EAAA,CAAA;sBAAnB,KAAK;;;AEvLR;;AAEG;;ACFH;;AAEG;;;;"}
1
+ {"version":3,"file":"guajiritos-general-autocomplete.mjs","sources":["../../../projects/guachos-general-autocomplete/src/utils/interfaces/interfaces.ts","../../../projects/guachos-general-autocomplete/src/utils/constants/contacts.ts","../../../projects/guachos-general-autocomplete/src/utils/services/autocomplete.service.ts","../../../projects/guachos-general-autocomplete/src/utils/services/utils.service.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/duration.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/humanize-duration.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/i18n-field.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/ida-return.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/show-roles.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/show-segments.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/show-transport-types.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/resolve-property-path.pipe.ts","../../../projects/guachos-general-autocomplete/src/utils/pipes/pipes.module.ts","../../../projects/guachos-general-autocomplete/src/lib/guachos-general-autocomplete.component.ts","../../../projects/guachos-general-autocomplete/src/lib/guachos-general-autocomplete.component.html","../../../projects/guachos-general-autocomplete/src/public-api.ts","../../../projects/guachos-general-autocomplete/src/guajiritos-general-autocomplete.ts"],"sourcesContent":["import {ValidatorFn} from '@angular/forms';\r\n\r\ndeclare type DisplayOptionItemType = 'divider' | 'path';\r\n\r\nexport enum CustomPipes {\r\n SHOW_SEGMENTS = 'showSegments',\r\n DURATION_TIME = 'durationTime',\r\n HUMANIZE_DURATION = 'humanizeDuration',\r\n SHOW_TRANSPORT_TYPES = 'showTransportTypes',\r\n SHOW_ROLES = 'showRoles',\r\n IDA_RETURN = 'idaReturn',\r\n CURRENCY = 'currency',\r\n UPPERCASE = 'uppercase',\r\n}\r\n\r\nexport interface DisplayOptionItem {\r\n type: DisplayOptionItemType;\r\n customPipe?: string;\r\n divider?: string;\r\n path?: string[];\r\n}\r\n\r\nexport interface DisplayOption {\r\n firthLabel: DisplayOptionItem[];\r\n secondLabel?: DisplayOptionItem[];\r\n filterString?: string[] | string;\r\n applyTranslate?: boolean;\r\n}\r\n\r\nexport interface RestrictionFilter {\r\n filter: string;\r\n value: string | number;\r\n}\r\n\r\nexport interface ApiFormData {\r\n attributes?: string[],\r\n filter?: any;\r\n relations?: any;\r\n}\r\n\r\nexport interface CustomValidator {\r\n key: string;\r\n message: string;\r\n validator: ValidatorFn;\r\n}\r\n","import {DisplayOption} from \"../interfaces/interfaces\";\r\n\r\nexport const GENERAL_DISPLAY_OPTIONS: DisplayOption = {\r\n firthLabel: [\r\n {\r\n type: 'path',\r\n path: ['name']\r\n }\r\n ],\r\n applyTranslate: true\r\n};\r\n","import {HttpClient, HttpParams} from '@angular/common/http';\r\nimport {Injectable} from '@angular/core';\r\nimport {map} from 'rxjs/operators';\r\nimport merge from 'lodash.merge';\r\nimport {Observable} from 'rxjs';\r\n\r\nimport {ApiFormData, RestrictionFilter} from '../interfaces/interfaces';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class AutocompleteService {\r\n constructor(\r\n private _httpClient: HttpClient\r\n ) {\r\n }\r\n\r\n private httpOptions = {};\r\n\r\n private processParams(filters: string[] | string | undefined, value: string): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n setTimeout(async () => {\r\n let filter = {};\r\n\r\n if (Array.isArray(filters)) {\r\n for (const f of filters) {\r\n await this.processFilterString(f, value).then((resp: any) => {\r\n if (Object.keys(filter)?.length) {\r\n merge(filter, resp);\r\n } else {\r\n filter = {\r\n ...filter,\r\n ...resp\r\n };\r\n }\r\n\r\n if (f === filters[filters?.length - 1]) {\r\n resolve(filter);\r\n }\r\n });\r\n }\r\n } else if (typeof filters === 'string') {\r\n await this.processFilterString(filters, value).then((resp: any) => {\r\n filter = {\r\n ...filter,\r\n ...resp\r\n };\r\n\r\n resolve(filter);\r\n });\r\n } else {\r\n reject(null);\r\n }\r\n }, 100);\r\n });\r\n }\r\n\r\n private async processFilterString(filter: string, value: string): Promise<any> {\r\n let f: any = {};\r\n\r\n const arrayFilters: string[] = filter?.split('[');\r\n\r\n if (arrayFilters?.findIndex((a: string) => a === 'filter') >= 0) {\r\n arrayFilters?.splice(0, 1);\r\n }\r\n\r\n await this.createObjectFilters(arrayFilters, value).then((data: any) => {\r\n f = data;\r\n });\r\n\r\n return f;\r\n }\r\n\r\n private async createObjectFilters(array: string[], value: string): Promise<any> {\r\n for (let filter of array) {\r\n filter = filter?.replace(']', '');\r\n\r\n if (array.length > 1) {\r\n array.splice(0, 1);\r\n return {[filter]: await this.createObjectFilters(array, value)};\r\n } else {\r\n if (filter === '$like') {\r\n return {[filter]: '%' + value + '%'};\r\n } else {\r\n return {[filter]: value};\r\n }\r\n }\r\n }\r\n }\r\n\r\n public async getAutocompleteByText(url: string, text?: string, field?: string[] | string, restrictions?: RestrictionFilter[],\r\n removeProperties?: string[], order?: string, bodyRequest?: ApiFormData): Promise<Observable<any>> {\r\n\r\n let httpParams: HttpParams = new HttpParams().set('offset', '0');\r\n httpParams = httpParams.append('limit', '20');\r\n\r\n if (order) {\r\n httpParams = httpParams.append('order', order);\r\n }\r\n\r\n if (!text) {\r\n text = '';\r\n }\r\n\r\n if (bodyRequest) {\r\n let body: ApiFormData = {};\r\n if (text && text !== '') {\r\n await this.processParams(field, text)\r\n .then((data: any) => {\r\n body = {\r\n ...bodyRequest,\r\n filter: data\r\n };\r\n });\r\n } else {\r\n body = JSON.parse(JSON.stringify(bodyRequest));\r\n }\r\n\r\n if (restrictions?.length) {\r\n for (let r of restrictions) {\r\n await this.processParams(r?.filter, r?.value?.toString())\r\n .then((data: any) => {\r\n let filtersAux = {...body?.filter}\r\n merge(filtersAux, data);\r\n body = {\r\n ...body,\r\n filter: filtersAux\r\n };\r\n httpParams = httpParams.set('form', JSON.stringify(body));\r\n });\r\n }\r\n } else {\r\n httpParams = httpParams.append('form', JSON.stringify(body));\r\n }\r\n } else {\r\n if (text && text !== '') {\r\n if (Array.isArray(field)) {\r\n for (const f of field) {\r\n httpParams = httpParams.append(f, '%' + text + '%');\r\n }\r\n } else {\r\n if (field?.includes('$like')) {\r\n httpParams = httpParams.append(field, '%' + text + '%');\r\n } else if (field) {\r\n httpParams = httpParams.append(field, text);\r\n }\r\n }\r\n }\r\n\r\n restrictions?.forEach((restriction: RestrictionFilter) => {\r\n if (restriction?.value) {\r\n httpParams = httpParams.append(restriction?.filter, restriction.value?.toString());\r\n }\r\n });\r\n }\r\n\r\n this.httpOptions = {params: httpParams};\r\n\r\n return this._httpClient\r\n .get<any>(url, this.httpOptions)\r\n .pipe(\r\n map((result: any) => {\r\n result?.data?.map((item: any) => {\r\n removeProperties?.forEach((property: string) => {\r\n delete item[property];\r\n });\r\n });\r\n return result;\r\n })\r\n );\r\n }\r\n}\r\n","import {Injectable} from '@angular/core';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UtilsService {\r\n /**\r\n * Convierte el tiempo pasado por parámetro en horas y minutos\r\n *\r\n * @param time - Tiempo\r\n * @returns Devuelve las horas y minutos\r\n */\r\n private static getTime(time: number | string): { hours: number; minutes: number } {\r\n const hours: number = parseInt(Number(time) / 3600 + '', 10);\r\n time = Number(time) - (hours * 3600);\r\n const minutes: number = parseInt(Number(time) / 60 + '', 10);\r\n\r\n return {hours, minutes}\r\n }\r\n\r\n /**\r\n * Devuelve el tiempo en formato 'hh:mm'\r\n *\r\n * @param time - Tiempo\r\n */\r\n public static getTimePretty(time: number): string {\r\n const {hours, minutes} = UtilsService.getTime(time);\r\n\r\n return (hours < 10 ? '0' + hours : hours) + ':' + (minutes < 10 ? '0' + minutes : minutes);\r\n }\r\n\r\n /**\r\n * Devuelve el tiempo en formato 'hhh : mmm'\r\n *\r\n * @param time - Tiempo\r\n */\r\n public static humanizeDuration(time: number | string): string {\r\n const {hours, minutes} = UtilsService.getTime(time);\r\n\r\n return (hours < 10 ? '0' + hours : hours) + 'h : ' + (minutes < 10 ? '0' + minutes : minutes) + 'm';\r\n }\r\n\r\n public static resolvePropertyByPath(obj: any, path: string[]): any {\r\n return path.reduce((prev, curr: string) => {\r\n return prev ? prev[curr] : null;\r\n }, obj || self);\r\n }\r\n}\r\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\r\n\r\nimport {UtilsService} from '../services/utils.service';\r\n\r\n@Injectable()\r\n@Pipe({name: 'durationTime'})\r\nexport class DurationTimePipe implements PipeTransform {\r\n transform(value: number): string {\r\n return UtilsService.getTimePretty(value);\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\n\r\nimport {UtilsService} from '../services/utils.service';\r\n\r\n@Pipe({\r\n name: 'humanizeDuration'\r\n})\r\nexport class HumanizeDurationPipe implements PipeTransform {\r\n transform(input: string): string {\r\n return UtilsService.humanizeDuration(input);\r\n }\r\n}\r\n","import {Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Pipe({name: 'i18nField'})\r\nexport class I18nFieldPipe implements PipeTransform {\r\n transform(value: any, lang: string): string {\r\n if (!value) {\r\n return '';\r\n }\r\n\r\n if (typeof value === 'string') {\r\n return value;\r\n }\r\n\r\n const keys = Object.keys(value);\r\n if (!value[lang]) {\r\n let i = 0;\r\n while (i < keys?.length && (value[keys[i]] === null || value[keys[i]] === '')) {\r\n i++;\r\n }\r\n return keys?.length > i ? value[keys[i]] : 'No está definido';\r\n }\r\n\r\n return value[lang] || 'No está definido';\r\n }\r\n}\r\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\r\n\r\nimport {CustomPipes} from \"../interfaces/interfaces\";\r\n\r\n@Injectable()\r\n@Pipe({name: 'idaReturn'})\r\nexport class IdaReturnPipe implements PipeTransform {\r\n transform(value: string): any {\r\n if (value === CustomPipes.IDA_RETURN) {\r\n return 'Ida y Vuelta';\r\n } else {\r\n return 'solo Ida';\r\n }\r\n }\r\n}\r\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Injectable()\r\n@Pipe({name: 'showSegments'})\r\nexport class ShowRolesPipe implements PipeTransform {\r\n transform(value: any[]): any {\r\n\r\n let result = '';\r\n\r\n if (value?.length) {\r\n value.forEach(item => {\r\n result += item?.Rol?.name + ', ';\r\n });\r\n\r\n result = result.substring(0, result?.length - 2);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Injectable()\r\n@Pipe({name: 'showSegments'})\r\nexport class ShowSegmentsPipe implements PipeTransform {\r\n transform(value: any[]): any {\r\n let result = '';\r\n\r\n if (value?.length) {\r\n value.forEach(item => {\r\n result += item?.Segment?.PlaceOrigin?.alpha3 + '-' + item?.Segment?.PlaceDestination?.alpha3 + ', ';\r\n });\r\n\r\n result = result.substring(0, result?.length - 2);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import {Injectable, Pipe, PipeTransform} from '@angular/core';\r\n\r\n@Injectable()\r\n@Pipe({name: 'showTransportTypes'})\r\nexport class ShowTransportTypesPipe implements PipeTransform {\r\n transform(value: any[]): any {\r\n let result = '';\r\n\r\n if (value?.length) {\r\n value.forEach(item => {\r\n result += item?.TransportType?.name['es'] + ', ';\r\n });\r\n\r\n result = result.substring(0, result?.length - 2);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n","import {CurrencyPipe, UpperCasePipe} from '@angular/common';\r\nimport {Pipe, PipeTransform} from '@angular/core';\r\n\r\nimport {DurationTimePipe} from './duration.pipe';\r\nimport {HumanizeDurationPipe} from './humanize-duration.pipe';\r\nimport {IdaReturnPipe} from './ida-return.pipe';\r\nimport {ShowRolesPipe} from './show-roles.pipe';\r\nimport {ShowSegmentsPipe} from './show-segments.pipe';\r\nimport {ShowTransportTypesPipe} from './show-transport-types.pipe';\r\nimport {CustomPipes, DisplayOptionItem} from \"../interfaces/interfaces\";\r\nimport {UtilsService} from '../services/utils.service';\r\n\r\n@Pipe({name: 'resolvePropertyPath'})\r\nexport class ResolvePropertyPath implements PipeTransform {\r\n\r\n constructor(\r\n private _showSegmentPipe: ShowSegmentsPipe,\r\n private _showRolesPipe: ShowRolesPipe,\r\n private _showTransportTypesPipe: ShowTransportTypesPipe,\r\n private _idaReturnPipe: IdaReturnPipe,\r\n private _currencyPipe: CurrencyPipe,\r\n private _humanizeDurationPipe: HumanizeDurationPipe,\r\n private _upperCasePipe: UpperCasePipe,\r\n private _durationPipe: DurationTimePipe\r\n ) {\r\n }\r\n\r\n transform(obj: any, path: DisplayOptionItem[]): string {\r\n let result: string = '';\r\n\r\n path?.forEach((item: DisplayOptionItem) => {\r\n if (item?.type === 'divider') {\r\n result += item?.divider;\r\n } else {\r\n if (item?.path) {\r\n let value = UtilsService.resolvePropertyByPath(obj, item.path);\r\n\r\n switch (item?.customPipe) {\r\n case CustomPipes.SHOW_SEGMENTS:\r\n value = this._showSegmentPipe.transform(value);\r\n break;\r\n case CustomPipes.DURATION_TIME:\r\n value = this._durationPipe.transform(value);\r\n break;\r\n case CustomPipes.HUMANIZE_DURATION:\r\n value = this._humanizeDurationPipe.transform(value);\r\n break;\r\n case CustomPipes.SHOW_TRANSPORT_TYPES:\r\n value = this._showTransportTypesPipe.transform(value);\r\n break;\r\n case CustomPipes.SHOW_ROLES:\r\n value = this._showRolesPipe.transform(value);\r\n break;\r\n case CustomPipes.IDA_RETURN:\r\n value = this._idaReturnPipe.transform(value);\r\n break;\r\n case CustomPipes.CURRENCY:\r\n value = this._currencyPipe.transform(value);\r\n break;\r\n case CustomPipes.UPPERCASE:\r\n value = this._upperCasePipe.transform(value);\r\n break;\r\n default:\r\n break;\r\n }\r\n result += value;\r\n }\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n}\r\n","import {NgModule} from '@angular/core';\r\nimport {CurrencyPipe, UpperCasePipe} from \"@angular/common\";\r\n\r\nimport {DurationTimePipe} from \"./duration.pipe\";\r\nimport {HumanizeDurationPipe} from \"./humanize-duration.pipe\";\r\nimport {I18nFieldPipe} from \"./i18n-field.pipe\";\r\nimport {IdaReturnPipe} from \"./ida-return.pipe\";\r\nimport {ResolvePropertyPath} from \"./resolve-property-path.pipe\";\r\nimport {ShowRolesPipe} from \"./show-roles.pipe\";\r\nimport {ShowSegmentsPipe} from \"./show-segments.pipe\";\r\nimport {ShowTransportTypesPipe} from \"./show-transport-types.pipe\";\r\n\r\n@NgModule({\r\n declarations: [\r\n DurationTimePipe,\r\n HumanizeDurationPipe,\r\n I18nFieldPipe,\r\n IdaReturnPipe,\r\n ResolvePropertyPath,\r\n ShowRolesPipe,\r\n ShowSegmentsPipe,\r\n ShowTransportTypesPipe,\r\n ],\r\n imports: [\r\n CurrencyPipe,\r\n UpperCasePipe\r\n ],\r\n exports: [\r\n DurationTimePipe,\r\n HumanizeDurationPipe,\r\n I18nFieldPipe,\r\n IdaReturnPipe,\r\n ResolvePropertyPath,\r\n ShowRolesPipe,\r\n ShowSegmentsPipe,\r\n ShowTransportTypesPipe\r\n ],\r\n providers: [\r\n DurationTimePipe,\r\n HumanizeDurationPipe,\r\n I18nFieldPipe,\r\n IdaReturnPipe,\r\n ResolvePropertyPath,\r\n ShowRolesPipe,\r\n ShowSegmentsPipe,\r\n ShowTransportTypesPipe,\r\n CurrencyPipe,\r\n UpperCasePipe\r\n ]\r\n})\r\nexport class PipesModule {\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n ElementRef,\r\n EventEmitter,\r\n forwardRef,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n Output,\r\n signal,\r\n TemplateRef,\r\n ViewChild,\r\n WritableSignal,\r\n} from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n ControlValueAccessor,\r\n NG_VALUE_ACCESSOR,\r\n ReactiveFormsModule,\r\n UntypedFormControl,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport {MatAutocompleteModule, MatAutocompleteTrigger} from '@angular/material/autocomplete';\r\nimport {FloatLabelType, MatFormFieldAppearance, MatFormFieldModule} from '@angular/material/form-field';\r\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\r\nimport {debounceTime, Observable, Subject, takeUntil} from 'rxjs';\r\nimport {NgClass, NgForOf, NgIf, NgStyle, NgTemplateOutlet} from '@angular/common';\r\nimport {MatInputModule} from '@angular/material/input';\r\nimport {MatButtonModule} from '@angular/material/button';\r\nimport {MatIconModule} from '@angular/material/icon';\r\nimport {MatProgressSpinnerModule} from '@angular/material/progress-spinner';\r\nimport {ThemePalette} from '@angular/material/core';\r\n\r\nimport {GENERAL_DISPLAY_OPTIONS} from '../utils/constants/contacts';\r\nimport {AutocompleteService} from '../utils/services/autocomplete.service';\r\nimport {UtilsService} from '../utils/services/utils.service';\r\nimport {ApiFormData, CustomValidator, DisplayOption, RestrictionFilter} from '../utils/interfaces/interfaces';\r\nimport {PipesModule} from '../utils/pipes/pipes.module';\r\n\r\n@Component({\r\n selector: 'guajiritos-general-autocomplete',\r\n templateUrl: './guachos-general-autocomplete.component.html',\r\n styleUrls: ['./guachos-general-autocomplete.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatFormFieldModule,\r\n NgClass,\r\n TranslateModule,\r\n MatAutocompleteModule,\r\n MatInputModule,\r\n ReactiveFormsModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatProgressSpinnerModule,\r\n NgIf,\r\n NgForOf,\r\n NgStyle,\r\n PipesModule,\r\n NgTemplateOutlet,\r\n ],\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => GuajiritosGeneralAutocomplete),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class GuajiritosGeneralAutocomplete implements OnDestroy, ControlValueAccessor {\r\n\r\n constructor(\r\n private _autocompleteService: AutocompleteService,\r\n private _zone: NgZone,\r\n public translateService: TranslateService,\r\n ) {\r\n }\r\n\r\n private wasSelected: WritableSignal<boolean> = signal(false);\r\n private firstCall: WritableSignal<boolean> = signal(true);\r\n private clearData$: Subject<void>;\r\n private unsubscribeAll$: Subject<void> = new Subject<void>();\r\n private doFocusSubject$: Subject<void>;\r\n private selectedElement: WritableSignal<any> = signal(null);\r\n private _url: WritableSignal<string> = signal(null);\r\n private restrictionsFilters: WritableSignal<RestrictionFilter[]> = signal([]);\r\n\r\n public validators: WritableSignal<CustomValidator[]> = signal([]);\r\n public disabledButton: WritableSignal<boolean> = signal(false);\r\n public loading: WritableSignal<boolean> = signal(false);\r\n public required: WritableSignal<boolean> = signal(false);\r\n public filteredOptions: WritableSignal<any[]> = signal([]);\r\n public component: UntypedFormControl = new UntypedFormControl({value: null, disabled: false});\r\n\r\n @ViewChild('inputText', {static: true}) inputText: ElementRef;\r\n /**\r\n * Possible values 'never', 'auto' or 'always'\r\n */\r\n @Input() floatLabel: FloatLabelType = 'auto';\r\n @Input() bodyRequest: ApiFormData;\r\n @Input() debounceTimeValue: number = 300;\r\n @Input() detailsTemplate: TemplateRef<any>;\r\n @Input() label: string = 'Seleccione';\r\n @Input() showLabel: boolean = true;\r\n @Input() appearance: MatFormFieldAppearance = 'outline';\r\n @Input() color: ThemePalette = 'accent';\r\n @Input() placeholder: string = 'Seleccione un elemento';\r\n @Input() field: string[] = ['name'];\r\n @Input() filterString: string = 'filter[$and][name][$like]';\r\n @Input() displayOptions: DisplayOption = GENERAL_DISPLAY_OPTIONS;\r\n @Input() withoutPaddingBottom: boolean = true;\r\n @Input() valueId: boolean = false;\r\n @Input() showSuffix: boolean = false;\r\n @Input() order!: string;\r\n @Input() suffixIcon: string = 'search';\r\n @Input() removeProperties: string[] = [];\r\n @Output() SelectElement: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n @Input() set url(data: string) {\r\n if (data) {\r\n this._url.set(data);\r\n this.subscribeComponentChanges();\r\n }\r\n }\r\n\r\n @Input() set clearData(value: Subject<void>) {\r\n this.clearData$ = value;\r\n if (this.clearData$) {\r\n this.clearData$\r\n .pipe(takeUntil(this.unsubscribeAll$))\r\n .subscribe({\r\n next: (): void => {\r\n this.component.setValue(null, {emitEvent: false});\r\n this.selectedElement.set(null);\r\n this.SelectElement.emit(null);\r\n this.filteredOptions.set([]);\r\n this.propagateChange(null);\r\n },\r\n });\r\n }\r\n }\r\n\r\n @Input() set initialValue(value: any) {\r\n this.component.setValue(value);\r\n }\r\n\r\n /**\r\n * Añade o elimina restricciones para la búsqueda\r\n *\r\n * @param restrictions - Restricciones para la búsqueda\r\n */\r\n @Input() set restrictions(restrictions: RestrictionFilter[]) {\r\n if (restrictions) {\r\n this.restrictionsFilters.set(restrictions);\r\n } else {\r\n this.restrictionsFilters.set([]);\r\n }\r\n }\r\n\r\n /**\r\n * Añade o elimina la validación de que el campo sea requerido\r\n *\r\n * @param required - Define si es requerido o no\r\n */\r\n @Input() set isRequired(required: boolean) {\r\n this.required.set(required);\r\n\r\n if (required) {\r\n this.component.setValidators([Validators.required, GuajiritosGeneralAutocomplete.autocompleteValidator]);\r\n } else {\r\n this.component.clearValidators();\r\n }\r\n\r\n this.component.updateValueAndValidity();\r\n }\r\n\r\n /**\r\n * Define si vamos a realizar una búsqueda al elemento estar en el focus de la aplicación\r\n *\r\n * @param focusSubject - Observable para la subscripción al evento Focus\r\n */\r\n @Input() set doFocus(focusSubject: Subject<void>) {\r\n this.doFocusSubject$ = focusSubject;\r\n\r\n if (this.doFocusSubject$) {\r\n this.doFocusSubject$\r\n .pipe(takeUntil(this.unsubscribeAll$))\r\n .subscribe({\r\n next: (): void => {\r\n this._zone.run((): void => {\r\n setTimeout((): void => {\r\n this.inputText?.nativeElement?.focus();\r\n }, 500);\r\n });\r\n },\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Set custom validators for autocomplete\r\n *\r\n * @param validators - A list of customs validators\r\n */\r\n @Input() set customValidators(validators: CustomValidator[]) {\r\n if (validators?.length) {\r\n validators.forEach((validator: CustomValidator): void => {\r\n this.component.addValidators(validator.validator);\r\n });\r\n this.validators.set(validators);\r\n } else {\r\n this.validators.set([]);\r\n }\r\n }\r\n\r\n /**\r\n * Validación customizada para la selección de elementos\r\n */\r\n private static autocompleteValidator(): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n if (control?.value?.constructor !== Object || !control?.value?.id) {\r\n return {invalidSelection: true};\r\n }\r\n return null;\r\n };\r\n }\r\n\r\n /**\r\n * Subscripción a los cambios del input de búsqueda\r\n */\r\n private subscribeComponentChanges(): void {\r\n this.component?.valueChanges\r\n ?.pipe(debounceTime(this.debounceTimeValue), takeUntil(this.unsubscribeAll$))\r\n ?.subscribe({\r\n next: (): void => {\r\n if (!this.firstCall() && !this.wasSelected()) {\r\n this.getAutocompleteByTextHandler(this.getAutocompleteSearchText());\r\n } else {\r\n this.firstCall.set(false);\r\n }\r\n\r\n this.wasSelected.set(false);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Búsqueda de los elementos a mostrar en el componente de autocompletamiento\r\n *\r\n * @param text - Texto a buscar\r\n */\r\n private getAutocompleteByTextHandler(text?: string): void {\r\n this._autocompleteService\r\n .getAutocompleteByText(this._url(), text, this.filterString, this.restrictionsFilters(),\r\n this.removeProperties, this.order, this.bodyRequest)\r\n .then((resp: Observable<any>): void => {\r\n resp?.subscribe({\r\n next: (result: any): void => {\r\n this.filteredOptions.set(result?.payload?.data ?? result?.data);\r\n this.loading.set(false);\r\n },\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Define el texto por el que se va a realizar la búsqueda\r\n *\r\n * @return {string} Texto de la búsqueda\r\n */\r\n private getAutocompleteSearchText(): string {\r\n this.loading.set(true);\r\n\r\n let text: string = '';\r\n\r\n if (this.component?.value) {\r\n if (typeof this.component.value === 'object') {\r\n const componentValue = this.component?.value[this.field[0]];\r\n if (typeof componentValue === 'object') {\r\n let lang: string = 'es';\r\n if (this.field[1]) {\r\n lang = this.field[1];\r\n }\r\n\r\n text = componentValue[lang];\r\n }\r\n } else if (typeof this.component?.value === 'string') {\r\n text = this.component.value;\r\n }\r\n }\r\n\r\n return text;\r\n }\r\n\r\n propagateChange = (_: any): void => {\r\n };\r\n\r\n registerOnChange(fn: (_: any) => void): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(): void {\r\n }\r\n\r\n /**\r\n * Recibe el valor del FormControl\r\n *\r\n * @param value - Valor entrado por FormControl\r\n */\r\n writeValue(value: any): void {\r\n if (value) {\r\n this.component.setValue(value, {emitEvent: false});\r\n\r\n if (typeof value === 'object' && this.valueId) {\r\n this.selectedElement.set(value?.id);\r\n } else {\r\n this.selectedElement.set(value);\r\n }\r\n } else {\r\n this.selectedElement.set(null);\r\n }\r\n }\r\n\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabledButton.set(isDisabled);\r\n if (isDisabled) {\r\n this.component.disable();\r\n } else {\r\n this.component.enable();\r\n }\r\n }\r\n\r\n /**\r\n * Función para mostrar los elementos a seleccionar\r\n *\r\n * @param value - Valor a mostrar\r\n */\r\n public displayFn = (value: any): string => {\r\n if (value) {\r\n if (typeof value === 'string') {\r\n return value;\r\n }\r\n\r\n let displayText: string = '';\r\n if (!this.displayOptions) {\r\n this.displayOptions = GENERAL_DISPLAY_OPTIONS;\r\n }\r\n\r\n this.displayOptions?.firthLabel?.forEach((field: any): void => {\r\n if (field?.type === 'path') {\r\n displayText += UtilsService.resolvePropertyByPath(value, field?.path);\r\n } else {\r\n displayText += field?.divider;\r\n }\r\n });\r\n\r\n return displayText;\r\n }\r\n };\r\n\r\n /**\r\n * Acción al limpiar el valor del input\r\n *\r\n * @param trigger\r\n */\r\n public clear(trigger: MatAutocompleteTrigger): void {\r\n this.component.setValue(null);\r\n this.selectedElement.set(null);\r\n this.SelectElement.emit(null);\r\n this.propagateChange(null);\r\n\r\n this._zone.run((): void => {\r\n setTimeout((): void => {\r\n trigger.openPanel();\r\n }, 100);\r\n });\r\n }\r\n\r\n /**\r\n * Acción en el Focus del elemento\r\n */\r\n public onFocus(): void {\r\n if (!this.selectedElement()) {\r\n this.getAutocompleteByTextHandler(this.getAutocompleteSearchText());\r\n }\r\n }\r\n\r\n /**\r\n * Acción al seleccionar un elemento\r\n *\r\n * @param item - Elemento seleccionado\r\n */\r\n public onSelectElement(item: any): void {\r\n this.wasSelected.set(true);\r\n this.selectedElement.set(item);\r\n this.SelectElement.emit(item);\r\n\r\n if (this.valueId) {\r\n this.propagateChange(typeof item === 'object' ? item?.id : item);\r\n } else {\r\n this.propagateChange(item);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribeAll$.next();\r\n this.unsubscribeAll$.complete();\r\n }\r\n}\r\n","<mat-form-field [floatLabel]=\"floatLabel\" [ngClass]=\"{'without-padding-bottom': withoutPaddingBottom}\" class=\"w-100\"\r\n [appearance]=\"appearance\" [color]=\"color\">\r\n\r\n <mat-label *ngIf=\"showLabel\">{{label | translate}}</mat-label>\r\n <mat-icon matSuffix *ngIf=\"showSuffix\">{{suffixIcon ?? \"search\"}}</mat-icon>\r\n <input #inputText #trigger=\"matAutocompleteTrigger\" (focus)=\"onFocus()\" [formControl]=\"component\"\r\n [matAutocomplete]=\"autocomplete\" [placeholder]=\"placeholder | translate\" aria-label=\"autocomplete\"\r\n autocomplete=\"off\" matInput type=\"text\" [required]=\"required()\">\r\n <button (click)=\"clear(trigger)\" *ngIf=\"!loading() && component?.value\" [disabled]=\"disabledButton()\"\r\n aria-label=\"Clear\" mat-icon-button matSuffix>\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n <button *ngIf=\"loading()\" aria-label=\"search\" mat-icon-button matSuffix>\r\n <mat-spinner [value]=\"90\" color=\"accent\" diameter=\"25\"></mat-spinner>\r\n </button>\r\n <mat-autocomplete #autocomplete=\"matAutocomplete\" [displayWith]=\"displayFn\">\r\n <mat-option *ngFor=\"let option of filteredOptions()\" [value]=\"option\" (onSelectionChange)=\"onSelectElement(option)\">\r\n\r\n <ng-container *ngIf=\"!displayOptions && !detailsTemplate\">\r\n {{ option?.name | i18nField: translateService.currentLang }}\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!detailsTemplate\">\r\n <div class=\"display-options\">\r\n <span [ngStyle]=\"{'line-height': displayOptions?.secondLabel ? '16px' : ''}\">\r\n {{option | resolvePropertyPath:displayOptions.firthLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n <span *ngIf=\"displayOptions?.secondLabel\" class=\"mat-caption\">\r\n {{option | resolvePropertyPath: displayOptions.secondLabel | i18nField: translateService.currentLang}}\r\n </span>\r\n </div>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"detailsTemplate\">\r\n <ng-container *ngTemplateOutlet=\"detailsTemplate;context:{$implicit: option }\"></ng-container>\r\n </ng-container>\r\n </mat-option>\r\n </mat-autocomplete>\r\n\r\n <mat-error *ngIf=\"component.hasError('required')\">\r\n {{'Este campo es requerido.' | translate}}\r\n </mat-error>\r\n\r\n <mat-error *ngIf=\"component.hasError('invalidSelection')\">\r\n {{'Debe seleccionar un elemento.' | translate}}\r\n </mat-error>\r\n\r\n <ng-container *ngFor=\"let validator of validators()\">\r\n <mat-error *ngIf=\"component.hasError(validator.key)\">\r\n {{validator.message | translate}}\r\n </mat-error>\r\n </ng-container>\r\n</mat-form-field>\r\n","/*\r\n * Public API Surface of guachos-general-autocomplete\r\n */\r\n\r\nexport * from './utils/interfaces/interfaces';\r\nexport * from './utils/constants/contacts';\r\nexport * from './lib/guachos-general-autocomplete.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ShowSegmentsPipe","i2.ShowRolesPipe","i3.ShowTransportTypesPipe","i4.IdaReturnPipe","i6.HumanizeDurationPipe","i7.DurationTimePipe","i1.AutocompleteService","i5","i11.I18nFieldPipe","i12.ResolvePropertyPath"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { ElementRef, EventEmitter, NgZone, OnDestroy, OnInit, TemplateRef, WritableSignal } from '@angular/core';
1
+ import { ElementRef, EventEmitter, NgZone, OnDestroy, TemplateRef, WritableSignal } from '@angular/core';
2
2
  import { ControlValueAccessor, UntypedFormControl } from '@angular/forms';
3
3
  import { MatAutocompleteTrigger } from '@angular/material/autocomplete';
4
4
  import { FloatLabelType, MatFormFieldAppearance } from '@angular/material/form-field';
@@ -6,9 +6,9 @@ import { TranslateService } from '@ngx-translate/core';
6
6
  import { Subject } from 'rxjs';
7
7
  import { ThemePalette } from '@angular/material/core';
8
8
  import { AutocompleteService } from '../utils/services/autocomplete.service';
9
- import { ApiFormData, DisplayOption, RestrictionFilter } from '../utils/interfaces/interfaces';
9
+ import { ApiFormData, CustomValidator, DisplayOption, RestrictionFilter } from '../utils/interfaces/interfaces';
10
10
  import * as i0 from "@angular/core";
11
- export declare class GuajiritosGeneralAutocomplete implements OnInit, OnDestroy, ControlValueAccessor {
11
+ export declare class GuajiritosGeneralAutocomplete implements OnDestroy, ControlValueAccessor {
12
12
  private _autocompleteService;
13
13
  private _zone;
14
14
  translateService: TranslateService;
@@ -21,6 +21,7 @@ export declare class GuajiritosGeneralAutocomplete implements OnInit, OnDestroy,
21
21
  private selectedElement;
22
22
  private _url;
23
23
  private restrictionsFilters;
24
+ validators: WritableSignal<CustomValidator[]>;
24
25
  disabledButton: WritableSignal<boolean>;
25
26
  loading: WritableSignal<boolean>;
26
27
  required: WritableSignal<boolean>;
@@ -70,6 +71,12 @@ export declare class GuajiritosGeneralAutocomplete implements OnInit, OnDestroy,
70
71
  * @param focusSubject - Observable para la subscripción al evento Focus
71
72
  */
72
73
  set doFocus(focusSubject: Subject<void>);
74
+ /**
75
+ * Set custom validators for autocomplete
76
+ *
77
+ * @param validators - A list of customs validators
78
+ */
79
+ set customValidators(validators: CustomValidator[]);
73
80
  /**
74
81
  * Validación customizada para la selección de elementos
75
82
  */
@@ -122,8 +129,7 @@ export declare class GuajiritosGeneralAutocomplete implements OnInit, OnDestroy,
122
129
  * @param item - Elemento seleccionado
123
130
  */
124
131
  onSelectElement(item: any): void;
125
- ngOnInit(): void;
126
132
  ngOnDestroy(): void;
127
133
  static ɵfac: i0.ɵɵFactoryDeclaration<GuajiritosGeneralAutocomplete, never>;
128
- static ɵcmp: i0.ɵɵComponentDeclaration<GuajiritosGeneralAutocomplete, "guajiritos-general-autocomplete", never, { "floatLabel": { "alias": "floatLabel"; "required": false; }; "bodyRequest": { "alias": "bodyRequest"; "required": false; }; "debounceTimeValue": { "alias": "debounceTimeValue"; "required": false; }; "detailsTemplate": { "alias": "detailsTemplate"; "required": false; }; "label": { "alias": "label"; "required": false; }; "showLabel": { "alias": "showLabel"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "color": { "alias": "color"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "field": { "alias": "field"; "required": false; }; "filterString": { "alias": "filterString"; "required": false; }; "displayOptions": { "alias": "displayOptions"; "required": false; }; "withoutPaddingBottom": { "alias": "withoutPaddingBottom"; "required": false; }; "valueId": { "alias": "valueId"; "required": false; }; "showSuffix": { "alias": "showSuffix"; "required": false; }; "order": { "alias": "order"; "required": false; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "removeProperties": { "alias": "removeProperties"; "required": false; }; "url": { "alias": "url"; "required": false; }; "clearData": { "alias": "clearData"; "required": false; }; "initialValue": { "alias": "initialValue"; "required": false; }; "restrictions": { "alias": "restrictions"; "required": false; }; "isRequired": { "alias": "isRequired"; "required": false; }; "doFocus": { "alias": "doFocus"; "required": false; }; }, { "SelectElement": "SelectElement"; }, never, never, true, never>;
134
+ static ɵcmp: i0.ɵɵComponentDeclaration<GuajiritosGeneralAutocomplete, "guajiritos-general-autocomplete", never, { "floatLabel": { "alias": "floatLabel"; "required": false; }; "bodyRequest": { "alias": "bodyRequest"; "required": false; }; "debounceTimeValue": { "alias": "debounceTimeValue"; "required": false; }; "detailsTemplate": { "alias": "detailsTemplate"; "required": false; }; "label": { "alias": "label"; "required": false; }; "showLabel": { "alias": "showLabel"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "color": { "alias": "color"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "field": { "alias": "field"; "required": false; }; "filterString": { "alias": "filterString"; "required": false; }; "displayOptions": { "alias": "displayOptions"; "required": false; }; "withoutPaddingBottom": { "alias": "withoutPaddingBottom"; "required": false; }; "valueId": { "alias": "valueId"; "required": false; }; "showSuffix": { "alias": "showSuffix"; "required": false; }; "order": { "alias": "order"; "required": false; }; "suffixIcon": { "alias": "suffixIcon"; "required": false; }; "removeProperties": { "alias": "removeProperties"; "required": false; }; "url": { "alias": "url"; "required": false; }; "clearData": { "alias": "clearData"; "required": false; }; "initialValue": { "alias": "initialValue"; "required": false; }; "restrictions": { "alias": "restrictions"; "required": false; }; "isRequired": { "alias": "isRequired"; "required": false; }; "doFocus": { "alias": "doFocus"; "required": false; }; "customValidators": { "alias": "customValidators"; "required": false; }; }, { "SelectElement": "SelectElement"; }, never, never, true, never>;
129
135
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@guajiritos/general-autocomplete",
3
- "version": "0.1.7",
3
+ "version": "0.1.8",
4
4
  "peerDependencies": {
5
5
  "@angular/cdk": "^16.0.0 || >=16.0.0",
6
6
  "@angular/common": "^16.0.0 || >=16.0.0",
@@ -1,3 +1,4 @@
1
+ import { ValidatorFn } from '@angular/forms';
1
2
  declare type DisplayOptionItemType = 'divider' | 'path';
2
3
  export declare enum CustomPipes {
3
4
  SHOW_SEGMENTS = "showSegments",
@@ -30,4 +31,9 @@ export interface ApiFormData {
30
31
  filter?: any;
31
32
  relations?: any;
32
33
  }
34
+ export interface CustomValidator {
35
+ key: string;
36
+ message: string;
37
+ validator: ValidatorFn;
38
+ }
33
39
  export {};