@seniorsistemas/angular-components 19.7.4 → 19.7.6

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.
Files changed (65) hide show
  1. package/alert/lib/alert/alert.component.d.ts +8 -1
  2. package/chips/README.md +3 -2
  3. package/chips/lib/chips/chip-item/chip-item.component.d.ts +2 -0
  4. package/chips/lib/chips/chips/chips.component.d.ts +2 -1
  5. package/datepicker/README.md +15 -2
  6. package/datepicker/lib/datepicker/date-segment-input.d.ts +82 -0
  7. package/datepicker/lib/datepicker/date.utils.d.ts +3 -7
  8. package/datepicker/lib/datepicker/datepicker.component.d.ts +101 -8
  9. package/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.d.ts +7 -1
  10. package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +1 -1
  11. package/dynamic-form/public-api.d.ts +1 -1
  12. package/esm2022/alert/lib/alert/alert.component.mjs +12 -6
  13. package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +15 -4
  14. package/esm2022/chips/lib/chips/chips/chips.component.mjs +26 -14
  15. package/esm2022/datepicker/lib/datepicker/date-segment-input.mjs +418 -0
  16. package/esm2022/datepicker/lib/datepicker/date.utils.mjs +7 -79
  17. package/esm2022/datepicker/lib/datepicker/datepicker.component.mjs +451 -41
  18. package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +2 -2
  19. package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.mjs +1 -1
  20. package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
  21. package/esm2022/dynamic-form/public-api.mjs +1 -1
  22. package/esm2022/panel/lib/panel/panel.component.mjs +3 -3
  23. package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +8 -6
  24. package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +3 -3
  25. package/fesm2022/seniorsistemas-angular-components-alert.mjs +12 -6
  26. package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
  27. package/fesm2022/seniorsistemas-angular-components-chips.mjs +39 -16
  28. package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
  29. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs +873 -118
  30. package/fesm2022/seniorsistemas-angular-components-datepicker.mjs.map +1 -1
  31. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +1 -1
  32. package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
  33. package/fesm2022/seniorsistemas-angular-components-panel.mjs +2 -2
  34. package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
  35. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +7 -5
  36. package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
  37. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +2 -2
  38. package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
  39. package/package.json +13 -13
  40. package/schematics/migrations/migrate-steps-to-stepper/index.d.ts +2 -0
  41. package/schematics/migrations/migrate-steps-to-stepper/index.js +104 -0
  42. package/schematics/migrations/migrate-steps-to-stepper/index.js.map +1 -0
  43. package/schematics/migrations.json +5 -0
  44. package/schematics/utils/ast-utils.d.ts +13 -0
  45. package/schematics/utils/ast-utils.js +76 -0
  46. package/schematics/utils/ast-utils.js.map +1 -1
  47. package/sidebar/lib/sidebar/sidebar.component.d.ts +3 -1
  48. package/schematics/migrations/migrate-dynamic-form-v19/index.test.d.ts +0 -1
  49. package/schematics/migrations/migrate-dynamic-form-v19/index.test.js +0 -888
  50. package/schematics/migrations/migrate-dynamic-form-v19/index.test.js.map +0 -1
  51. package/schematics/migrations/migrate-p-datepicker/index.test.d.ts +0 -1
  52. package/schematics/migrations/migrate-p-datepicker/index.test.js +0 -392
  53. package/schematics/migrations/migrate-p-datepicker/index.test.js.map +0 -1
  54. package/schematics/migrations/migrate-p-editor/index.test.d.ts +0 -1
  55. package/schematics/migrations/migrate-p-editor/index.test.js +0 -393
  56. package/schematics/migrations/migrate-p-editor/index.test.js.map +0 -1
  57. package/schematics/migrations/migrate-s-chips-outputs/index.test.d.ts +0 -1
  58. package/schematics/migrations/migrate-s-chips-outputs/index.test.js +0 -125
  59. package/schematics/migrations/migrate-s-chips-outputs/index.test.js.map +0 -1
  60. package/schematics/utils/ast-utils.test.d.ts +0 -1
  61. package/schematics/utils/ast-utils.test.js +0 -138
  62. package/schematics/utils/ast-utils.test.js.map +0 -1
  63. package/schematics/utils/workspace-utils.test.d.ts +0 -1
  64. package/schematics/utils/workspace-utils.test.js +0 -152
  65. package/schematics/utils/workspace-utils.test.js.map +0 -1
@@ -1,9 +1,11 @@
1
1
  import { __decorate } from "tslib";
2
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
+ import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
3
3
  import { CheckDisabled } from '@seniorsistemas/angular-components/shared';
4
4
  import { TooltipDirective } from '@seniorsistemas/angular-components/tooltip';
5
5
  import { NgClass, NgTemplateOutlet } from '@angular/common';
6
+ import { TranslateModule } from '@ngx-translate/core';
6
7
  import * as i0 from "@angular/core";
8
+ import * as i1 from "@ngx-translate/core";
7
9
  /**
8
10
  * @description Componente interno de item individual de chip, utilizado pelo {@link ChipsComponent}.
9
11
  * Responsável pela renderização do texto, tooltip e botão de remoção de cada chip.
@@ -29,12 +31,18 @@ export class ChipItemComponent {
29
31
  clickRemove = new EventEmitter();
30
32
  /** @description Emitido ao clicar sobre o chip (fora do botão de remoção). */
31
33
  chipClicked = new EventEmitter();
34
+ chipElement;
32
35
  clickedRemove($event) {
36
+ $event.preventDefault();
33
37
  this.clickRemove.emit({ itemIndex: this.itemIndex, event: $event });
34
38
  }
35
39
  onChipClicked($event) {
40
+ $event.preventDefault();
36
41
  this.chipClicked.emit({ event: $event, data: this.dataRender });
37
42
  }
43
+ focus() {
44
+ this.chipElement?.nativeElement.focus();
45
+ }
38
46
  get _text() {
39
47
  const _text = this._rawText;
40
48
  return (_text.substring(0, _text.length > this.maxLengthRenderWithoutTooltip ? this.maxLengthRenderWithoutTooltip : _text.length) + (_text.length > this.maxLengthRenderWithoutTooltip ? '...' : ''));
@@ -43,7 +51,7 @@ export class ChipItemComponent {
43
51
  return this.objectField ? this.dataRender[this.objectField] || '' : this.dataRender || '';
44
52
  }
45
53
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChipItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
46
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChipItemComponent, isStandalone: true, selector: "s-chip-item", inputs: { dataRender: "dataRender", objectField: "objectField", disabled: "disabled", templateRef: "templateRef", itemIndex: "itemIndex", showTooltip: "showTooltip", maxLengthRenderWithoutTooltip: "maxLengthRenderWithoutTooltip" }, outputs: { clickRemove: "clickRemove", chipClicked: "chipClicked" }, ngImport: i0, template: "<ng-template #itemRender>\n <div\n class=\"rounded-medium border border-grayscale-50 bg-grayscale-10 break-words text-xs text-center flex items-center gap-2 px-1.5\"\n [ngClass]=\"{ 'hover:bg-grayscale-30': !disabled, 'opacity-50': disabled }\"\n (click)=\"onChipClicked($event)\" \n [sTooltip]=\"_rawText\"\n [showDelay]=\"0\"\n [visible]=\"showTooltip ? _rawText.length > maxLengthRenderWithoutTooltip : false\">\n @if(templateRef) {\n <ng-container\n *ngTemplateOutlet=\"templateRef; context: { $implicit: dataRender, text: _text }\">\n </ng-container>\n } @else {\n {{ _text }}\n }\n <i class=\"fas fa-times\" [ngClass]=\"{ 'cursor-pointer': !disabled, 'cursor-default': disabled }\" (click)=\"clickedRemove($event)\"></i>\n </div>\n</ng-template>\n\n\n@if(objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(!objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender\"></ng-container>\n}\n", dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
54
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChipItemComponent, isStandalone: true, selector: "s-chip-item", inputs: { dataRender: "dataRender", objectField: "objectField", disabled: "disabled", templateRef: "templateRef", itemIndex: "itemIndex", showTooltip: "showTooltip", maxLengthRenderWithoutTooltip: "maxLengthRenderWithoutTooltip" }, outputs: { clickRemove: "clickRemove", chipClicked: "chipClicked" }, viewQueries: [{ propertyName: "chipElement", first: true, predicate: ["chipElement"], descendants: true }], ngImport: i0, template: "<ng-template #itemRender>\n <div\n #chipElement\n class=\"rounded-medium border border-grayscale-50 bg-grayscale-10 break-words text-xs text-center flex items-center gap-2 px-1.5 focus:outline focus:outline-2 focus:outline-criticality-blue\"\n [ngClass]=\"{ 'hover:bg-grayscale-30': !disabled, 'opacity-50': disabled }\"\n role=\"button\"\n [attr.aria-label]=\"_rawText + ', ' + ('platform.angular_components.remove' | translate)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n (click)=\"onChipClicked($event)\"\n (keydown.enter)=\"onChipClicked($event)\"\n (keydown.space)=\"onChipClicked($event)\"\n (keydown.backspace)=\"clickedRemove($event)\"\n (keydown.delete)=\"clickedRemove($event)\"\n [sTooltip]=\"_rawText\"\n [showDelay]=\"0\"\n [visible]=\"showTooltip ? _rawText.length > maxLengthRenderWithoutTooltip : false\">\n @if(templateRef) {\n <ng-container\n *ngTemplateOutlet=\"templateRef; context: { $implicit: dataRender, text: _text }\">\n </ng-container>\n } @else {\n {{ _text }}\n }\n <i class=\"fas fa-times\" aria-hidden=\"true\" [ngClass]=\"{ 'cursor-pointer': !disabled, 'cursor-default': disabled }\" (click)=\"clickedRemove($event)\"></i>\n </div>\n</ng-template>\n\n\n@if(objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(!objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender\"></ng-container>\n}\n", dependencies: [{ kind: "directive", type: TooltipDirective, selector: "[sTooltip]", inputs: ["sTooltip", "tooltipPosition", "showDelay", "displayTime", "tooltipEvent", "escape", "visible", "mobileBehavior", "focusedInputRef", "checkTruncatedText"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i1.TranslatePipe, name: "translate" }] });
47
55
  }
48
56
  __decorate([
49
57
  CheckDisabled()
@@ -53,7 +61,7 @@ __decorate([
53
61
  ], ChipItemComponent.prototype, "onChipClicked", null);
54
62
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChipItemComponent, decorators: [{
55
63
  type: Component,
56
- args: [{ selector: 's-chip-item', standalone: true, imports: [TooltipDirective, NgTemplateOutlet, NgClass], template: "<ng-template #itemRender>\n <div\n class=\"rounded-medium border border-grayscale-50 bg-grayscale-10 break-words text-xs text-center flex items-center gap-2 px-1.5\"\n [ngClass]=\"{ 'hover:bg-grayscale-30': !disabled, 'opacity-50': disabled }\"\n (click)=\"onChipClicked($event)\" \n [sTooltip]=\"_rawText\"\n [showDelay]=\"0\"\n [visible]=\"showTooltip ? _rawText.length > maxLengthRenderWithoutTooltip : false\">\n @if(templateRef) {\n <ng-container\n *ngTemplateOutlet=\"templateRef; context: { $implicit: dataRender, text: _text }\">\n </ng-container>\n } @else {\n {{ _text }}\n }\n <i class=\"fas fa-times\" [ngClass]=\"{ 'cursor-pointer': !disabled, 'cursor-default': disabled }\" (click)=\"clickedRemove($event)\"></i>\n </div>\n</ng-template>\n\n\n@if(objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(!objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender\"></ng-container>\n}\n" }]
64
+ args: [{ selector: 's-chip-item', standalone: true, imports: [TooltipDirective, NgTemplateOutlet, NgClass, TranslateModule], template: "<ng-template #itemRender>\n <div\n #chipElement\n class=\"rounded-medium border border-grayscale-50 bg-grayscale-10 break-words text-xs text-center flex items-center gap-2 px-1.5 focus:outline focus:outline-2 focus:outline-criticality-blue\"\n [ngClass]=\"{ 'hover:bg-grayscale-30': !disabled, 'opacity-50': disabled }\"\n role=\"button\"\n [attr.aria-label]=\"_rawText + ', ' + ('platform.angular_components.remove' | translate)\"\n [attr.tabindex]=\"disabled ? -1 : 0\"\n (click)=\"onChipClicked($event)\"\n (keydown.enter)=\"onChipClicked($event)\"\n (keydown.space)=\"onChipClicked($event)\"\n (keydown.backspace)=\"clickedRemove($event)\"\n (keydown.delete)=\"clickedRemove($event)\"\n [sTooltip]=\"_rawText\"\n [showDelay]=\"0\"\n [visible]=\"showTooltip ? _rawText.length > maxLengthRenderWithoutTooltip : false\">\n @if(templateRef) {\n <ng-container\n *ngTemplateOutlet=\"templateRef; context: { $implicit: dataRender, text: _text }\">\n </ng-container>\n } @else {\n {{ _text }}\n }\n <i class=\"fas fa-times\" aria-hidden=\"true\" [ngClass]=\"{ 'cursor-pointer': !disabled, 'cursor-default': disabled }\" (click)=\"clickedRemove($event)\"></i>\n </div>\n</ng-template>\n\n\n@if(objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(!objectField && !templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender;\"></ng-container>\n}\n\n@if(templateRef) {\n <ng-container *ngTemplateOutlet=\"itemRender\"></ng-container>\n}\n" }]
57
65
  }], propDecorators: { dataRender: [{
58
66
  type: Input,
59
67
  args: [{ required: true }]
@@ -78,5 +86,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
78
86
  type: Output
79
87
  }], chipClicked: [{
80
88
  type: Output
89
+ }], chipElement: [{
90
+ type: ViewChild,
91
+ args: ['chipElement']
81
92
  }], clickedRemove: [], onChipClicked: [] } });
82
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9jaGlwcy9zcmMvbGliL2NoaXBzL2NoaXAtaXRlbS9jaGlwLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoaXBzL3NyYy9saWIvY2hpcHMvY2hpcC1pdGVtL2NoaXAtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUNwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDMUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDOUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDOztBQUM1RDs7Ozs7R0FLRztBQU9ILE1BQU0sT0FBTyxpQkFBaUI7SUFDMUIseUZBQXlGO0lBQzlELFVBQVUsQ0FBbUI7SUFDeEQsNkdBQTZHO0lBQ2xGLFdBQVcsQ0FBVTtJQUNoRCwrRUFBK0U7SUFDcEQsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUM1Qyw2RUFBNkU7SUFDcEUsV0FBVyxDQUFnQztJQUNwRCxvR0FBb0c7SUFDekUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFDLHdGQUF3RjtJQUM3RCxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzlDLHNHQUFzRztJQUMzRSw2QkFBNkIsR0FBRyxFQUFFLENBQUM7SUFFOUQsa0VBQWtFO0lBQ3hELFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBdUMsQ0FBQztJQUNoRiw4RUFBOEU7SUFDcEUsV0FBVyxHQUFHLElBQUksWUFBWSxFQUEyQyxDQUFDO0lBR3BGLGFBQWEsQ0FBQyxNQUFhO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFhO1FBQ3ZCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDNUIsT0FBTyxDQUNILEtBQUssQ0FBQyxTQUFTLENBQ1gsQ0FBQyxFQUNELEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3hHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDdkUsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxVQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQ3ZHLENBQUM7d0dBMUNRLGlCQUFpQjs0RkFBakIsaUJBQWlCLG9YQ2hCOUIsMnNDQStCQSw0Q0RqQmMsZ0JBQWdCLDROQUFFLGdCQUFnQixvSkFBRSxPQUFPOztBQXdCckQ7SUFEQyxhQUFhLEVBQUU7c0RBR2Y7QUFFRDtJQURDLGFBQWEsRUFBRTtzREFHZjs0RkE1QlEsaUJBQWlCO2tCQU43QixTQUFTOytCQUNJLGFBQWEsY0FFWCxJQUFJLFdBQ1AsQ0FBQyxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxPQUFPLENBQUM7OEJBSTNCLFVBQVU7c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUVFLFdBQVc7c0JBQXJDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUVFLFFBQVE7c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUVoQixXQUFXO3NCQUFuQixLQUFLO2dCQUVxQixTQUFTO3NCQUFuQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFFRSxXQUFXO3NCQUFyQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFFRSw2QkFBNkI7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUdmLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFHUCxhQUFhLE1BSWIsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDaGVja0Rpc2FibGVkIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9zaGFyZWQnO1xyXG5pbXBvcnQgeyBUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90b29sdGlwJztcclxuaW1wb3J0IHsgTmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbi8qKlxyXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBpbnRlcm5vIGRlIGl0ZW0gaW5kaXZpZHVhbCBkZSBjaGlwLCB1dGlsaXphZG8gcGVsbyB7QGxpbmsgQ2hpcHNDb21wb25lbnR9LlxyXG4gKiBSZXNwb25zw6F2ZWwgcGVsYSByZW5kZXJpemHDp8OjbyBkbyB0ZXh0bywgdG9vbHRpcCBlIGJvdMOjbyBkZSByZW1vw6fDo28gZGUgY2FkYSBjaGlwLlxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1jaGlwLWl0ZW0nLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NoaXAtaXRlbS5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW1Rvb2x0aXBEaXJlY3RpdmUsIE5nVGVtcGxhdGVPdXRsZXQsIE5nQ2xhc3NdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hpcEl0ZW1Db21wb25lbnQge1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBDb250ZcO6ZG8gYSBzZXIgZXhpYmlkbyBubyBjaGlwIChzdHJpbmcgb3Ugb2JqZXRvKS4gQ2FtcG8gb2JyaWdhdMOzcmlvLiAqL1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgZGF0YVJlbmRlciE6IHN0cmluZyB8IE9iamVjdDtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gQ2hhdmUgZG8gb2JqZXRvIHVzYWRhIHBhcmEgZXhpYmnDp8OjbyBxdWFuZG8gYGRhdGFSZW5kZXJgIGZvciB1bSBvYmpldG8uIENhbXBvIG9icmlnYXTDs3Jpby4gKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG9iamVjdEZpZWxkITogc3RyaW5nO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBEZXNhYmlsaXRhIG9zIGV2ZW50b3MgZGUgY2xpcXVlIGRvIGNoaXAuIENhbXBvIG9icmlnYXTDs3Jpby4gKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIFRlbXBsYXRlIHBlcnNvbmFsaXphZG8gcGFyYSByZW5kZXJpemHDp8OjbyBpbnRlcm5hIGRvIGNoaXAuICovXHJcbiAgICBASW5wdXQoKSB0ZW1wbGF0ZVJlZiE6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQ7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIMONbmRpY2UgZG8gY2hpcCBuYSBsaXN0YSwgdXNhZG8gYW8gZW1pdGlyIG8gZXZlbnRvIGRlIHJlbW/Dp8Ojby4gQ2FtcG8gb2JyaWdhdMOzcmlvLiAqL1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgaXRlbUluZGV4ID0gLTE7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIEhhYmlsaXRhIG8gdG9vbHRpcCBwYXJhIGNoaXBzIGNvbSB0ZXh0byB0cnVuY2Fkby4gQ2FtcG8gb2JyaWdhdMOzcmlvLiAqL1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgc2hvd1Rvb2x0aXAgPSB0cnVlO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBMaW1pdGUgZGUgY2FyYWN0ZXJlcyBleGliaWRvcyBhbnRlcyBkZSB0cnVuY2FyIG8gdGV4dG8gZG8gY2hpcC4gQ2FtcG8gb2JyaWdhdMOzcmlvLiAqL1xyXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgbWF4TGVuZ3RoUmVuZGVyV2l0aG91dFRvb2x0aXAgPSAyMDtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gYW8gY2xpY2FyIG5vIGJvdMOjbyBkZSByZW1vw6fDo28gZG8gY2hpcC4gKi9cclxuICAgIEBPdXRwdXQoKSBjbGlja1JlbW92ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpdGVtSW5kZXg6IG51bWJlcjsgZXZlbnQ6IEV2ZW50IH0+KCk7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gYW8gY2xpY2FyIHNvYnJlIG8gY2hpcCAoZm9yYSBkbyBib3TDo28gZGUgcmVtb8Onw6NvKS4gKi9cclxuICAgIEBPdXRwdXQoKSBjaGlwQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogRXZlbnQ7IGRhdGE6IHN0cmluZyB8IE9iamVjdCB9PigpO1xyXG5cclxuICAgIEBDaGVja0Rpc2FibGVkKClcclxuICAgIGNsaWNrZWRSZW1vdmUoJGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgIHRoaXMuY2xpY2tSZW1vdmUuZW1pdCh7IGl0ZW1JbmRleDogdGhpcy5pdGVtSW5kZXgsIGV2ZW50OiAkZXZlbnQgfSk7XHJcbiAgICB9XHJcbiAgICBAQ2hlY2tEaXNhYmxlZCgpXHJcbiAgICBvbkNoaXBDbGlja2VkKCRldmVudDogRXZlbnQpIHtcclxuICAgICAgICB0aGlzLmNoaXBDbGlja2VkLmVtaXQoeyBldmVudDogJGV2ZW50LCBkYXRhOiB0aGlzLmRhdGFSZW5kZXIgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF90ZXh0KCkge1xyXG4gICAgICAgIGNvbnN0IF90ZXh0ID0gdGhpcy5fcmF3VGV4dDtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICBfdGV4dC5zdWJzdHJpbmcoXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgX3RleHQubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGhSZW5kZXJXaXRob3V0VG9vbHRpcCA/IHRoaXMubWF4TGVuZ3RoUmVuZGVyV2l0aG91dFRvb2x0aXAgOiBfdGV4dC5sZW5ndGgsXHJcbiAgICAgICAgICAgICkgKyAoX3RleHQubGVuZ3RoID4gdGhpcy5tYXhMZW5ndGhSZW5kZXJXaXRob3V0VG9vbHRpcCA/ICcuLi4nIDogJycpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgX3Jhd1RleHQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0RmllbGQgPyAodGhpcy5kYXRhUmVuZGVyIGFzIGFueSlbdGhpcy5vYmplY3RGaWVsZF0gfHwgJycgOiB0aGlzLmRhdGFSZW5kZXIgfHwgJyc7XHJcbiAgICB9XHJcbn1cclxuIiwiPG5nLXRlbXBsYXRlICNpdGVtUmVuZGVyPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJyb3VuZGVkLW1lZGl1bSBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS01MCBiZy1ncmF5c2NhbGUtMTAgYnJlYWstd29yZHMgdGV4dC14cyB0ZXh0LWNlbnRlciBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBweC0xLjVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdob3ZlcjpiZy1ncmF5c2NhbGUtMzAnOiAhZGlzYWJsZWQsICdvcGFjaXR5LTUwJzogZGlzYWJsZWQgfVwiXG4gICAgICAgIChjbGljayk9XCJvbkNoaXBDbGlja2VkKCRldmVudClcIiBcbiAgICAgICAgW3NUb29sdGlwXT1cIl9yYXdUZXh0XCJcbiAgICAgICAgW3Nob3dEZWxheV09XCIwXCJcbiAgICAgICAgW3Zpc2libGVdPVwic2hvd1Rvb2x0aXAgPyBfcmF3VGV4dC5sZW5ndGggPiBtYXhMZW5ndGhSZW5kZXJXaXRob3V0VG9vbHRpcCA6IGZhbHNlXCI+XG4gICAgICAgICAgICBAaWYodGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGVtcGxhdGVSZWY7IGNvbnRleHQ6IHsgJGltcGxpY2l0OiBkYXRhUmVuZGVyLCB0ZXh0OiBfdGV4dCB9XCI+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICB7eyBfdGV4dCB9fVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIiBbbmdDbGFzc109XCJ7ICdjdXJzb3ItcG9pbnRlcic6ICFkaXNhYmxlZCwgJ2N1cnNvci1kZWZhdWx0JzogZGlzYWJsZWQgfVwiIChjbGljayk9XCJjbGlja2VkUmVtb3ZlKCRldmVudClcIj48L2k+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuXG5cbkBpZihvYmplY3RGaWVsZCAmJiAhdGVtcGxhdGVSZWYpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVJlbmRlcjtcIj48L25nLWNvbnRhaW5lcj5cbn1cblxuQGlmKCFvYmplY3RGaWVsZCAmJiAhdGVtcGxhdGVSZWYpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVJlbmRlcjtcIj48L25nLWNvbnRhaW5lcj5cbn1cblxuQGlmKHRlbXBsYXRlUmVmKSB7XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1SZW5kZXJcIj48L25nLWNvbnRhaW5lcj5cbn1cbiJdfQ==
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9jaGlwcy9zcmMvbGliL2NoaXBzL2NoaXAtaXRlbS9jaGlwLWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoaXBzL3NyYy9saWIvY2hpcHMvY2hpcC1pdGVtL2NoaXAtaXRlbS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUN0RDs7Ozs7R0FLRztBQU9ILE1BQU0sT0FBTyxpQkFBaUI7SUFDMUIseUZBQXlGO0lBQzlELFVBQVUsQ0FBbUI7SUFDeEQsNkdBQTZHO0lBQ2xGLFdBQVcsQ0FBVTtJQUNoRCwrRUFBK0U7SUFDcEQsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUM1Qyw2RUFBNkU7SUFDcEUsV0FBVyxDQUFnQztJQUNwRCxvR0FBb0c7SUFDekUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzFDLHdGQUF3RjtJQUM3RCxXQUFXLEdBQUcsSUFBSSxDQUFDO0lBQzlDLHNHQUFzRztJQUMzRSw2QkFBNkIsR0FBRyxFQUFFLENBQUM7SUFFOUQsa0VBQWtFO0lBQ3hELFdBQVcsR0FBRyxJQUFJLFlBQVksRUFBdUMsQ0FBQztJQUNoRiw4RUFBOEU7SUFDcEUsV0FBVyxHQUFHLElBQUksWUFBWSxFQUEyQyxDQUFDO0lBR25FLFdBQVcsQ0FBMkI7SUFHdkQsYUFBYSxDQUFDLE1BQWE7UUFDdkIsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFhO1FBQ3ZCLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFTSxLQUFLO1FBQ1IsSUFBSSxDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksS0FBSztRQUNMLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDNUIsT0FBTyxDQUNILEtBQUssQ0FBQyxTQUFTLENBQ1gsQ0FBQyxFQUNELEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3hHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDdkUsQ0FBQztJQUNOLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFFLElBQUksQ0FBQyxVQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDO0lBQ3ZHLENBQUM7d0dBbkRRLGlCQUFpQjs0RkFBakIsaUJBQWlCLGdlQ2pCOUIsK3FEQXVDQSw0Q0R4QmMsZ0JBQWdCLDROQUFFLGdCQUFnQixvSkFBRSxPQUFPLG1GQUFFLGVBQWU7O0FBMkJ0RTtJQURDLGFBQWEsRUFBRTtzREFJZjtBQUVEO0lBREMsYUFBYSxFQUFFO3NEQUlmOzRGQWpDUSxpQkFBaUI7a0JBTjdCLFNBQVM7K0JBQ0ksYUFBYSxjQUVYLElBQUksV0FDUCxDQUFDLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxlQUFlLENBQUM7OEJBSTVDLFVBQVU7c0JBQXBDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUVFLFdBQVc7c0JBQXJDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUVFLFFBQVE7c0JBQWxDLEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUVoQixXQUFXO3NCQUFuQixLQUFLO2dCQUVxQixTQUFTO3NCQUFuQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFFRSxXQUFXO3NCQUFyQyxLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFFRSw2QkFBNkI7c0JBQXZELEtBQUs7dUJBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFO2dCQUdmLFdBQVc7c0JBQXBCLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTTtnQkFHVSxXQUFXO3NCQUQzQixTQUFTO3VCQUFDLGFBQWE7Z0JBSXhCLGFBQWEsTUFLYixhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ2hlY2tEaXNhYmxlZCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvc2hhcmVkJztcclxuaW1wb3J0IHsgVG9vbHRpcERpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdG9vbHRpcCc7XHJcbmltcG9ydCB7IE5nQ2xhc3MsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGludGVybm8gZGUgaXRlbSBpbmRpdmlkdWFsIGRlIGNoaXAsIHV0aWxpemFkbyBwZWxvIHtAbGluayBDaGlwc0NvbXBvbmVudH0uXHJcbiAqIFJlc3BvbnPDoXZlbCBwZWxhIHJlbmRlcml6YcOnw6NvIGRvIHRleHRvLCB0b29sdGlwIGUgYm90w6NvIGRlIHJlbW/Dp8OjbyBkZSBjYWRhIGNoaXAuXHJcbiAqXHJcbiAqIEBjYXRlZ29yeSBJbnB1dHNcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzLWNoaXAtaXRlbScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hpcC1pdGVtLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbVG9vbHRpcERpcmVjdGl2ZSwgTmdUZW1wbGF0ZU91dGxldCwgTmdDbGFzcywgVHJhbnNsYXRlTW9kdWxlXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENoaXBJdGVtQ29tcG9uZW50IHtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gQ29udGXDumRvIGEgc2VyIGV4aWJpZG8gbm8gY2hpcCAoc3RyaW5nIG91IG9iamV0bykuIENhbXBvIG9icmlnYXTDs3Jpby4gKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGRhdGFSZW5kZXIhOiBzdHJpbmcgfCBPYmplY3Q7XHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIENoYXZlIGRvIG9iamV0byB1c2FkYSBwYXJhIGV4aWJpw6fDo28gcXVhbmRvIGBkYXRhUmVuZGVyYCBmb3IgdW0gb2JqZXRvLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBvYmplY3RGaWVsZCE6IHN0cmluZztcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRGVzYWJpbGl0YSBvcyBldmVudG9zIGRlIGNsaXF1ZSBkbyBjaGlwLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXHJcbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBkaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBUZW1wbGF0ZSBwZXJzb25hbGl6YWRvIHBhcmEgcmVuZGVyaXphw6fDo28gaW50ZXJuYSBkbyBjaGlwLiAqL1xyXG4gICAgQElucHV0KCkgdGVtcGxhdGVSZWYhOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiDDjW5kaWNlIGRvIGNoaXAgbmEgbGlzdGEsIHVzYWRvIGFvIGVtaXRpciBvIGV2ZW50byBkZSByZW1vw6fDo28uIENhbXBvIG9icmlnYXTDs3Jpby4gKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIGl0ZW1JbmRleCA9IC0xO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBIYWJpbGl0YSBvIHRvb2x0aXAgcGFyYSBjaGlwcyBjb20gdGV4dG8gdHJ1bmNhZG8uIENhbXBvIG9icmlnYXTDs3Jpby4gKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIHNob3dUb29sdGlwID0gdHJ1ZTtcclxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGltaXRlIGRlIGNhcmFjdGVyZXMgZXhpYmlkb3MgYW50ZXMgZGUgdHJ1bmNhciBvIHRleHRvIGRvIGNoaXAuIENhbXBvIG9icmlnYXTDs3Jpby4gKi9cclxuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pIG1heExlbmd0aFJlbmRlcldpdGhvdXRUb29sdGlwID0gMjA7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIGFvIGNsaWNhciBubyBib3TDo28gZGUgcmVtb8Onw6NvIGRvIGNoaXAuICovXHJcbiAgICBAT3V0cHV0KCkgY2xpY2tSZW1vdmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaXRlbUluZGV4OiBudW1iZXI7IGV2ZW50OiBFdmVudCB9PigpO1xyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIGFvIGNsaWNhciBzb2JyZSBvIGNoaXAgKGZvcmEgZG8gYm90w6NvIGRlIHJlbW/Dp8OjbykuICovXHJcbiAgICBAT3V0cHV0KCkgY2hpcENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IEV2ZW50OyBkYXRhOiBzdHJpbmcgfCBPYmplY3QgfT4oKTtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdjaGlwRWxlbWVudCcpXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoaXBFbGVtZW50PzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XHJcblxyXG4gICAgQENoZWNrRGlzYWJsZWQoKVxyXG4gICAgY2xpY2tlZFJlbW92ZSgkZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgdGhpcy5jbGlja1JlbW92ZS5lbWl0KHsgaXRlbUluZGV4OiB0aGlzLml0ZW1JbmRleCwgZXZlbnQ6ICRldmVudCB9KTtcclxuICAgIH1cclxuICAgIEBDaGVja0Rpc2FibGVkKClcclxuICAgIG9uQ2hpcENsaWNrZWQoJGV2ZW50OiBFdmVudCkge1xyXG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIHRoaXMuY2hpcENsaWNrZWQuZW1pdCh7IGV2ZW50OiAkZXZlbnQsIGRhdGE6IHRoaXMuZGF0YVJlbmRlciB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9jdXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5jaGlwRWxlbWVudD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBfdGV4dCgpIHtcclxuICAgICAgICBjb25zdCBfdGV4dCA9IHRoaXMuX3Jhd1RleHQ7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgX3RleHQuc3Vic3RyaW5nKFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIF90ZXh0Lmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoUmVuZGVyV2l0aG91dFRvb2x0aXAgPyB0aGlzLm1heExlbmd0aFJlbmRlcldpdGhvdXRUb29sdGlwIDogX3RleHQubGVuZ3RoLFxyXG4gICAgICAgICAgICApICsgKF90ZXh0Lmxlbmd0aCA+IHRoaXMubWF4TGVuZ3RoUmVuZGVyV2l0aG91dFRvb2x0aXAgPyAnLi4uJyA6ICcnKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IF9yYXdUZXh0KCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm9iamVjdEZpZWxkID8gKHRoaXMuZGF0YVJlbmRlciBhcyBhbnkpW3RoaXMub2JqZWN0RmllbGRdIHx8ICcnIDogdGhpcy5kYXRhUmVuZGVyIHx8ICcnO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSAjaXRlbVJlbmRlcj5cbiAgICA8ZGl2XG4gICAgICAgICNjaGlwRWxlbWVudFxuICAgICAgICBjbGFzcz1cInJvdW5kZWQtbWVkaXVtIGJvcmRlciBib3JkZXItZ3JheXNjYWxlLTUwIGJnLWdyYXlzY2FsZS0xMCBicmVhay13b3JkcyB0ZXh0LXhzIHRleHQtY2VudGVyIGZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHB4LTEuNSBmb2N1czpvdXRsaW5lIGZvY3VzOm91dGxpbmUtMiBmb2N1czpvdXRsaW5lLWNyaXRpY2FsaXR5LWJsdWVcIlxuICAgICAgICBbbmdDbGFzc109XCJ7ICdob3ZlcjpiZy1ncmF5c2NhbGUtMzAnOiAhZGlzYWJsZWQsICdvcGFjaXR5LTUwJzogZGlzYWJsZWQgfVwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIl9yYXdUZXh0ICsgJywgJyArICgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScgfCB0cmFuc2xhdGUpXCJcbiAgICAgICAgW2F0dHIudGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgICAoY2xpY2spPVwib25DaGlwQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25DaGlwQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uc3BhY2UpPVwib25DaGlwQ2xpY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgKGtleWRvd24uYmFja3NwYWNlKT1cImNsaWNrZWRSZW1vdmUoJGV2ZW50KVwiXG4gICAgICAgIChrZXlkb3duLmRlbGV0ZSk9XCJjbGlja2VkUmVtb3ZlKCRldmVudClcIlxuICAgICAgICBbc1Rvb2x0aXBdPVwiX3Jhd1RleHRcIlxuICAgICAgICBbc2hvd0RlbGF5XT1cIjBcIlxuICAgICAgICBbdmlzaWJsZV09XCJzaG93VG9vbHRpcCA/IF9yYXdUZXh0Lmxlbmd0aCA+IG1heExlbmd0aFJlbmRlcldpdGhvdXRUb29sdGlwIDogZmFsc2VcIj5cbiAgICAgICAgICAgIEBpZih0ZW1wbGF0ZVJlZikge1xuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZVJlZjsgY29udGV4dDogeyAkaW1wbGljaXQ6IGRhdGFSZW5kZXIsIHRleHQ6IF90ZXh0IH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIHt7IF90ZXh0IH19XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA8aSBjbGFzcz1cImZhcyBmYS10aW1lc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFtuZ0NsYXNzXT1cInsgJ2N1cnNvci1wb2ludGVyJzogIWRpc2FibGVkLCAnY3Vyc29yLWRlZmF1bHQnOiBkaXNhYmxlZCB9XCIgKGNsaWNrKT1cImNsaWNrZWRSZW1vdmUoJGV2ZW50KVwiPjwvaT5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cblxuQGlmKG9iamVjdEZpZWxkICYmICF0ZW1wbGF0ZVJlZikge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtUmVuZGVyO1wiPjwvbmctY29udGFpbmVyPlxufVxuXG5AaWYoIW9iamVjdEZpZWxkICYmICF0ZW1wbGF0ZVJlZikge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtUmVuZGVyO1wiPjwvbmctY29udGFpbmVyPlxufVxuXG5AaWYodGVtcGxhdGVSZWYpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiaXRlbVJlbmRlclwiPjwvbmctY29udGFpbmVyPlxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from "tslib";
2
- import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, forwardRef, HostListener, Input, Output, ViewChild, inject, } from '@angular/core';
2
+ import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, forwardRef, Input, Output, ViewChild, ViewChildren, inject, } from '@angular/core';
3
3
  import { NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';
4
4
  import { KeyFilter } from 'primeng/keyfilter';
5
5
  import { TemplateDirective } from '@seniorsistemas/angular-components/template';
@@ -78,7 +78,7 @@ export class ChipsComponent {
78
78
  valueChange = new EventEmitter();
79
79
  templates = null;
80
80
  input = null;
81
- isFocused = false;
81
+ chipItems = null;
82
82
  onChange = () => { };
83
83
  onTouched = () => { };
84
84
  isTabEventActive = false;
@@ -116,19 +116,20 @@ export class ChipsComponent {
116
116
  setTimeout(() => {
117
117
  this.isTabEventActive = false;
118
118
  }, tabTimeoutTime);
119
+ if (this.addOnTab) {
120
+ this.addItem();
121
+ }
122
+ return;
119
123
  }
120
- const isTab = this.addOnTab && eventKeyIsTab;
121
- if (isEnter || isSeparator || isTab) {
124
+ if (isEnter || isSeparator) {
122
125
  $event.preventDefault();
123
126
  this.addItem();
124
127
  }
125
128
  }
126
129
  onInputFocus($event) {
127
130
  this.focused.emit($event);
128
- this.isFocused = true;
129
131
  }
130
132
  onInputLostFocus($event) {
131
- this.isFocused = false;
132
133
  if (!this.addOnBlur || this.isTabEventActive) {
133
134
  return;
134
135
  }
@@ -139,6 +140,8 @@ export class ChipsComponent {
139
140
  const _removedItem = this.value[itemIndex];
140
141
  this.value.splice(itemIndex, 1);
141
142
  this.removed.emit({ value: _removedItem, originalEvent: event });
143
+ this.cdr.detectChanges();
144
+ this.restoreFocusAfterRemove(itemIndex);
142
145
  }
143
146
  onChipClicked({ event, data }) {
144
147
  this.chipClicked.emit({ value: data, originalEvent: event });
@@ -188,6 +191,15 @@ export class ChipsComponent {
188
191
  }
189
192
  });
190
193
  }
194
+ restoreFocusAfterRemove(removedIndex) {
195
+ const items = this.chipItems?.toArray() ?? [];
196
+ if (items.length) {
197
+ items[Math.min(removedIndex, items.length - 1)].focus();
198
+ }
199
+ else {
200
+ this.input?.nativeElement.focus();
201
+ }
202
+ }
191
203
  storeValue(value) {
192
204
  this.value = [...this.value, value];
193
205
  this.added.emit({ value });
@@ -197,13 +209,13 @@ export class ChipsComponent {
197
209
  this.onTouched(this.value);
198
210
  }
199
211
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ChipsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
200
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChipsComponent, isStandalone: true, selector: "s-chips", inputs: { disabled: "disabled", field: "field", value: "value", placeholder: "placeholder", max: "max", maxLength: "maxLength", inputId: "inputId", allowDuplicated: "allowDuplicated", caseSensitiveDuplication: "caseSensitiveDuplication", addOnTab: "addOnTab", addOnBlur: "addOnBlur", separator: "separator", autofocus: "autofocus", infoLabel: "infoLabel", keyFilter: "keyFilter", showTooltip: "showTooltip", maxLengthRenderWithoutTooltip: "maxLengthRenderWithoutTooltip" }, outputs: { added: "added", removed: "removed", focused: "focused", focusLost: "focusLost", chipClicked: "chipClicked", valueChange: "valueChange" }, host: { listeners: { "document:keydown": "onKeydown($event)" } }, providers: [
212
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ChipsComponent, isStandalone: true, selector: "s-chips", inputs: { disabled: "disabled", field: "field", value: "value", placeholder: "placeholder", max: "max", maxLength: "maxLength", inputId: "inputId", allowDuplicated: "allowDuplicated", caseSensitiveDuplication: "caseSensitiveDuplication", addOnTab: "addOnTab", addOnBlur: "addOnBlur", separator: "separator", autofocus: "autofocus", infoLabel: "infoLabel", keyFilter: "keyFilter", showTooltip: "showTooltip", maxLengthRenderWithoutTooltip: "maxLengthRenderWithoutTooltip" }, outputs: { added: "added", removed: "removed", focused: "focused", focusLost: "focusLost", chipClicked: "chipClicked", valueChange: "valueChange" }, providers: [
201
213
  {
202
214
  provide: NG_VALUE_ACCESSOR,
203
215
  useExisting: forwardRef(() => ChipsComponent),
204
216
  multi: true,
205
217
  },
206
- ], queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ul\n class=\"chips-container w-full p-1.5 flex flex-wrap items-center rounded-small border border-grayscale-30 bg-grayscale-0 list-none gap-2 min-h-[35px]\"\n [class.outline]=\"isFocused\"\n [class.outline-2]=\"isFocused\"\n [class.outline-criticality-blue]=\"isFocused\">\n @for(item of value; track $index) {\n <li>\n <s-chip-item\n [templateRef]=\"chipTemplate\"\n [dataRender]=\"item\"\n [objectField]=\"field\"\n [itemIndex]=\"$index\"\n [disabled]=\"disabled\"\n [showTooltip]=\"showTooltip\"\n [maxLengthRenderWithoutTooltip]=\"maxLengthRenderWithoutTooltip\"\n (clickRemove)=\"removeItem($event)\"\n (chipClicked)=\"onChipClicked($event)\">\n </s-chip-item>\n </li>\n }\n\n @if(keyFilter) {\n <input\n #input\n class=\"bg-grayscale-0 w-full border-none flex-1 focus-visible:outline-none\"\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n [pKeyFilter]=\"keyFilter\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\">\n }@else {\n <input\n #input\n class=\"bg-grayscale-0 w-full border-none flex-1 focus-visible:outline-none\"\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\">\n }\n</ul>\n@if(infoLabel) {\n <span class=\"text-grayscale-50 text-xs\">\n {{ infoLabel }}\n </span>\n}\n", styles: [":host.ng-invalid.ng-dirty .chips-container{--tw-border-opacity: 1;border-color:rgb(193 48 24 / var(--tw-border-opacity, 1))}\n"], dependencies: [{ kind: "component", type: ChipItemComponent, selector: "s-chip-item", inputs: ["dataRender", "objectField", "disabled", "templateRef", "itemIndex", "showTooltip", "maxLengthRenderWithoutTooltip"], outputs: ["clickRemove", "chipClicked"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: KeyFilter, selector: "[pKeyFilter]", inputs: ["pValidateOnly", "pKeyFilter"], outputs: ["ngModelChange"] }] });
218
+ ], queries: [{ propertyName: "templates", predicate: TemplateDirective }], viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true, read: ElementRef }, { propertyName: "chipItems", predicate: ChipItemComponent, descendants: true }], ngImport: i0, template: "<ul\n role=\"list\"\n class=\"chips-container w-full p-1.5 flex flex-wrap items-center rounded-small border border-grayscale-30 bg-grayscale-0 list-none gap-2 min-h-[35px] focus-within:outline focus-within:outline-2 focus-within:outline-criticality-blue\">\n @for(item of value; track $index) {\n <li role=\"listitem\">\n <s-chip-item\n [templateRef]=\"chipTemplate\"\n [dataRender]=\"item\"\n [objectField]=\"field\"\n [itemIndex]=\"$index\"\n [disabled]=\"disabled\"\n [showTooltip]=\"showTooltip\"\n [maxLengthRenderWithoutTooltip]=\"maxLengthRenderWithoutTooltip\"\n (clickRemove)=\"removeItem($event)\"\n (chipClicked)=\"onChipClicked($event)\">\n </s-chip-item>\n </li>\n }\n\n @if(keyFilter) {\n <input\n #input\n class=\"bg-grayscale-0 w-full border-none flex-1 focus-visible:outline-none\"\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n [pKeyFilter]=\"keyFilter\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\"\n (keydown)=\"onKeydown($event)\">\n }@else {\n <input\n #input\n class=\"bg-grayscale-0 w-full border-none flex-1 focus-visible:outline-none\"\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\"\n (keydown)=\"onKeydown($event)\">\n }\n</ul>\n@if(infoLabel) {\n <span class=\"text-grayscale-50 text-xs\">\n {{ infoLabel }}\n </span>\n}\n", styles: [":host.ng-invalid.ng-dirty .chips-container{--tw-border-opacity: 1;border-color:rgb(193 48 24 / var(--tw-border-opacity, 1))}\n"], dependencies: [{ kind: "component", type: ChipItemComponent, selector: "s-chip-item", inputs: ["dataRender", "objectField", "disabled", "templateRef", "itemIndex", "showTooltip", "maxLengthRenderWithoutTooltip"], outputs: ["clickRemove", "chipClicked"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: KeyFilter, selector: "[pKeyFilter]", inputs: ["pValidateOnly", "pKeyFilter"], outputs: ["ngModelChange"] }] });
207
219
  }
208
220
  __decorate([
209
221
  CheckDisabled()
@@ -219,7 +231,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
219
231
  useExisting: forwardRef(() => ChipsComponent),
220
232
  multi: true,
221
233
  },
222
- ], standalone: true, imports: [ChipItemComponent, FormsModule, KeyFilter], template: "<ul\n class=\"chips-container w-full p-1.5 flex flex-wrap items-center rounded-small border border-grayscale-30 bg-grayscale-0 list-none gap-2 min-h-[35px]\"\n [class.outline]=\"isFocused\"\n [class.outline-2]=\"isFocused\"\n [class.outline-criticality-blue]=\"isFocused\">\n @for(item of value; track $index) {\n <li>\n <s-chip-item\n [templateRef]=\"chipTemplate\"\n [dataRender]=\"item\"\n [objectField]=\"field\"\n [itemIndex]=\"$index\"\n [disabled]=\"disabled\"\n [showTooltip]=\"showTooltip\"\n [maxLengthRenderWithoutTooltip]=\"maxLengthRenderWithoutTooltip\"\n (clickRemove)=\"removeItem($event)\"\n (chipClicked)=\"onChipClicked($event)\">\n </s-chip-item>\n </li>\n }\n\n @if(keyFilter) {\n <input\n #input\n class=\"bg-grayscale-0 w-full border-none flex-1 focus-visible:outline-none\"\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n [pKeyFilter]=\"keyFilter\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\">\n }@else {\n <input\n #input\n class=\"bg-grayscale-0 w-full border-none flex-1 focus-visible:outline-none\"\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\">\n }\n</ul>\n@if(infoLabel) {\n <span class=\"text-grayscale-50 text-xs\">\n {{ infoLabel }}\n </span>\n}\n", styles: [":host.ng-invalid.ng-dirty .chips-container{--tw-border-opacity: 1;border-color:rgb(193 48 24 / var(--tw-border-opacity, 1))}\n"] }]
234
+ ], standalone: true, imports: [ChipItemComponent, FormsModule, KeyFilter], template: "<ul\n role=\"list\"\n class=\"chips-container w-full p-1.5 flex flex-wrap items-center rounded-small border border-grayscale-30 bg-grayscale-0 list-none gap-2 min-h-[35px] focus-within:outline focus-within:outline-2 focus-within:outline-criticality-blue\">\n @for(item of value; track $index) {\n <li role=\"listitem\">\n <s-chip-item\n [templateRef]=\"chipTemplate\"\n [dataRender]=\"item\"\n [objectField]=\"field\"\n [itemIndex]=\"$index\"\n [disabled]=\"disabled\"\n [showTooltip]=\"showTooltip\"\n [maxLengthRenderWithoutTooltip]=\"maxLengthRenderWithoutTooltip\"\n (clickRemove)=\"removeItem($event)\"\n (chipClicked)=\"onChipClicked($event)\">\n </s-chip-item>\n </li>\n }\n\n @if(keyFilter) {\n <input\n #input\n class=\"bg-grayscale-0 w-full border-none flex-1 focus-visible:outline-none\"\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n [pKeyFilter]=\"keyFilter\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\"\n (keydown)=\"onKeydown($event)\">\n }@else {\n <input\n #input\n class=\"bg-grayscale-0 w-full border-none flex-1 focus-visible:outline-none\"\n [disabled]=\"disabled || max === value.length\"\n [placeholder]=\"placeholder || ''\"\n [maxlength]=\"maxLength\"\n [id]=\"inputId\"\n [(ngModel)]=\"newItem\"\n (focus)=\"onInputFocus($event)\"\n (blur)=\"onInputLostFocus($event)\"\n (keydown)=\"onKeydown($event)\">\n }\n</ul>\n@if(infoLabel) {\n <span class=\"text-grayscale-50 text-xs\">\n {{ infoLabel }}\n </span>\n}\n", styles: [":host.ng-invalid.ng-dirty .chips-container{--tw-border-opacity: 1;border-color:rgb(193 48 24 / var(--tw-border-opacity, 1))}\n"] }]
223
235
  }], propDecorators: { disabled: [{
224
236
  type: Input
225
237
  }], field: [{
@@ -272,8 +284,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
272
284
  }], input: [{
273
285
  type: ViewChild,
274
286
  args: ['input', { read: ElementRef }]
275
- }], onKeydown: [{
276
- type: HostListener,
277
- args: ['document:keydown', ['$event']]
278
- }], onInputLostFocus: [] } });
279
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoaXBzL3NyYy9saWIvY2hpcHMvY2hpcHMvY2hpcHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoaXBzL3NyYy9saWIvY2hpcHMvY2hpcHMvY2hpcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFHTixTQUFTLEVBQ1QsTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEYsT0FBTyxFQUFvQixTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7QUFFckU7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBZUgsTUFBTSxPQUFPLGNBQWM7SUFDTixHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFMUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNiLFlBQVksQ0FBb0I7SUFFdkMsMkVBQTJFO0lBRXBFLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFeEIsMEdBQTBHO0lB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QkFDSixjQUNXLElBQUksV0FDUCxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUM7OEJBVTdDLFFBQVE7c0JBRGQsS0FBSztnQkFLQyxLQUFLO3NCQURYLEtBQUs7Z0JBS0MsS0FBSztzQkFEWCxLQUFLO2dCQUtDLFdBQVc7c0JBRGpCLEtBQUs7Z0JBS0MsR0FBRztzQkFEVCxLQUFLO2dCQUtDLFNBQVM7c0JBRGYsS0FBSztnQkFLQyxPQUFPO3NCQURiLEtBQUs7Z0JBS0MsZUFBZTtzQkFEckIsS0FBSztnQkFLQyx3QkFBd0I7c0JBRDlCLEtBQUs7Z0JBS0MsUUFBUTtzQkFEZCxLQUFLO2dCQUtDLFNBQVM7c0JBRGYsS0FBSztnQkFLQyxTQUFTO3NCQURmLEtBQUs7Z0JBS0MsU0FBUztzQkFEZixLQUFLO2dCQUtDLFNBQVM7c0JBRGYsS0FBSztnQkFLQyxTQUFTO3NCQURmLEtBQUs7Z0JBS0MsV0FBVztzQkFEakIsS0FBSztnQkFLQyw2QkFBNkI7c0JBRG5DLEtBQUs7Z0JBS0MsS0FBSztzQkFEWCxNQUFNO2dCQUtBLE9BQU87c0JBRGIsTUFBTTtnQkFLQSxPQUFPO3NCQURiLE1BQU07Z0JBS0EsU0FBUztzQkFEZixNQUFNO2dCQUtBLFdBQVc7c0JBRGpCLE1BQU07Z0JBS0EsV0FBVztzQkFEakIsTUFBTTtnQkFJVSxTQUFTO3NCQUR6QixlQUFlO3VCQUFDLGlCQUFpQjtnQkFJakIsS0FBSztzQkFEckIsU0FBUzt1QkFBQyxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQXdDakMsU0FBUztzQkFGZixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQTBCckMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIENvbXBvbmVudCxcclxuICAgIENvbnRlbnRDaGlsZHJlbixcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBmb3J3YXJkUmVmLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBUZW1wbGF0ZVJlZixcclxuICAgIFZpZXdDaGlsZCxcclxuICAgIGluamVjdCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SLCBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmltcG9ydCB7IEtleUZpbHRlclBhdHRlcm4sIEtleUZpbHRlciB9IGZyb20gJ3ByaW1lbmcva2V5ZmlsdGVyJztcclxuXHJcbmltcG9ydCB7IENoaXBBZGRFdmVudCwgQ2hpcENsaWNrRXZlbnQsIENoaXBSZW1vdmVFdmVudCB9IGZyb20gJy4uL21vZGVscy9jaGlwLW1vZGVscyc7XHJcbmltcG9ydCB7IFRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90ZW1wbGF0ZSc7XHJcbmltcG9ydCB7IGlzTnVsbE9yVW5kZWZpbmVkLCByYW5kb21IYXNoIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XHJcbmltcG9ydCB7IENoZWNrRGlzYWJsZWQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3NoYXJlZCc7XHJcbmltcG9ydCB7IENoaXBJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY2hpcC1pdGVtL2NoaXAtaXRlbS5jb21wb25lbnQnO1xyXG5cclxuLyoqXHJcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGRlIGVudHJhZGEgZGUgdGFncy9jaGlwcyBxdWUgcGVybWl0ZSBhZGljaW9uYXIgZSByZW1vdmVyXHJcbiAqIGl0ZW5zIGRlIHRleHRvIGxpdnJlbWVudGUgb3UgYSBwYXJ0aXIgZGUgdW1hIGxpc3RhLiBTdXBvcnRhIHRlbXBsYXRlcyBwZXJzb25hbGl6YWRvc1xyXG4gKiBwYXJhIHJlbmRlcml6YcOnw6NvIGRlIGNhZGEgY2hpcCwgZmlsdHJvIGRlIHRlY2xhcywgbGltaXRlIGRlIGl0ZW5zIGUgZHVwbGljYcOnw6NvIGNvbmZpZ3Vyw6F2ZWwuXHJcbiAqIEltcGxlbWVudGEge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfSBwYXJhIHVzbyBlbSBmb3JtdWzDoXJpb3MgQW5ndWxhci5cclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8cy1jaGlwc1xyXG4gKiAgIGZvcm1Db250cm9sTmFtZT1cInRhZ3NcIlxyXG4gKiAgIHBsYWNlaG9sZGVyPVwiQWRpY2lvbmFyIHRhZy4uLlwiXHJcbiAqICAgW21heF09XCIxMFwiXHJcbiAqICAgW2FsbG93RHVwbGljYXRlZF09XCJmYWxzZVwiXHJcbiAqICAgKGFkZGVkKT1cIm9uQWRkZWQoJGV2ZW50KVwiIC8+XHJcbiAqIGBgYFxyXG4gKlxyXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAncy1jaGlwcycsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2hpcHMuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vY2hpcHMuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIHByb3ZpZGVyczogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IENoaXBzQ29tcG9uZW50KSxcclxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgICAgfSxcclxuICAgIF0sXHJcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gICAgaW1wb3J0czogW0NoaXBJdGVtQ29tcG9uZW50LCBGb3Jtc01vZHVsZSwgS2V5RmlsdGVyXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENoaXBzQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG5cclxuICAgIHB1YmxpYyBuZXdJdGVtID0gJyc7XHJcbiAgICBwdWJsaWMgY2hpcFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIERlc2FiaWxpdGEgYSBpbnRlcmHDp8OjbyBjb20gbyBjb21wb25lbnRlLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gQ2hhdmUgZG8gb2JqZXRvIHVzYWRhIHBhcmEgZXhpYmnDp8OjbyBxdWFuZG8gb3MgaXRlbnMgc8OjbyBvYmpldG9zIGNvbXBsZXhvcy4gQGRlZmF1bHQgJycgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZmllbGQgPSAnJztcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGNoaXBzIGF0dWFsbWVudGUgZXhpYmlkb3MuIEBkZWZhdWx0IFtdICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHZhbHVlOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gVGV4dG8gZGUgcGxhY2Vob2xkZXIgZXhpYmlkbyBubyBjYW1wbyBkZSBlbnRyYWRhIHF1YW5kbyB2YXppby4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIE7Dum1lcm8gbcOheGltbyBkZSBjaGlwcyBwZXJtaXRpZG9zLiBAZGVmYXVsdCBJbmZpbml0eSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtYXggPSBJbmZpbml0eTtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIENvbXByaW1lbnRvIG3DoXhpbW8gZG8gdGV4dG8gZGUgY2FkYSBjaGlwLiBAZGVmYXVsdCBJbmZpbml0eSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtYXhMZW5ndGggPSBJbmZpbml0eTtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIElkZW50aWZpY2Fkb3IgZG8gZWxlbWVudG8gYDxpbnB1dD5gIGludGVybm8uIEdlcmFkbyBhdXRvbWF0aWNhbWVudGUgc2UgbsOjbyBpbmZvcm1hZG8uICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGlucHV0SWQgPSBgY2hpcHMtJHtyYW5kb21IYXNoKCl9YDtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIFBlcm1pdGUgYSBhZGnDp8OjbyBkZSBjaGlwcyBjb20gdmFsb3IgZHVwbGljYWRvLiBAZGVmYXVsdCB0cnVlICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGFsbG93RHVwbGljYXRlZCA9IHRydWU7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBRdWFuZG8gYGZhbHNlYCwgYSBjb21wYXJhw6fDo28gZGUgZHVwbGljYXRhcyDDqSBjYXNlLWluc2Vuc2l0aXZlLiBAZGVmYXVsdCBmYWxzZSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjYXNlU2Vuc2l0aXZlRHVwbGljYXRpb24gPSBmYWxzZTtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIEFkaWNpb25hIG8gY2hpcCBhbyBwcmVzc2lvbmFyIFRhYi4gQGRlZmF1bHQgdHJ1ZSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhZGRPblRhYiA9IHRydWU7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBBZGljaW9uYSBvIGNoaXAgYW8gcGVyZGVyIG8gZm9jbyAoYmx1cikuIEBkZWZhdWx0IHRydWUgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWRkT25CbHVyID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIENhcmFjdGVyZSBzZXBhcmFkb3IgcXVlLCBxdWFuZG8gZGlnaXRhZG8sIGNvbmZpcm1hIGEgYWRpw6fDo28gZGUgdW0gbm92byBjaGlwLiBAZGVmYXVsdCAnJyAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXBhcmF0b3IgPSAnJztcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIENvbG9jYSBvIGZvY28gYXV0b21hdGljYW1lbnRlIG5vIGNhbXBvIGRlIGVudHJhZGEgYW8gcmVuZGVyaXphciBvIGNvbXBvbmVudGUuIEBkZWZhdWx0IGZhbHNlICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGF1dG9mb2N1cyA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gVGV4dG8gaW5mb3JtYXRpdm8gZXhpYmlkbyBhYmFpeG8gZG8gY2FtcG8gZGUgZW50cmFkYS4gQGRlZmF1bHQgJycgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaW5mb0xhYmVsID0gJyc7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFeHByZXNzw6NvIHJlZ3VsYXIgb3UgcGFkcsOjbyBwcmVkZWZpbmlkbyAoUHJpbWVORyBLZXlGaWx0ZXJQYXR0ZXJuKSBwYXJhIGZpbHRyYXIgdGVjbGFzIGFjZWl0YXMuICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGtleUZpbHRlcj86IFJlZ0V4cCB8IEtleUZpbHRlclBhdHRlcm47XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFeGliZSB0b29sdGlwIGFvIHBhc3NhciBvIG1vdXNlIHNvYnJlIGNoaXBzIGNvbSB0ZXh0byB0cnVuY2Fkby4gQGRlZmF1bHQgdHJ1ZSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzaG93VG9vbHRpcCA9IHRydWU7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBOw7ptZXJvIG3DoXhpbW8gZGUgY2FyYWN0ZXJlcyBleGliaWRvcyBkaXJldGFtZW50ZSBubyBjaGlwIHNlbSBhcGxpY2FyIHRydW5jYW1lbnRvLiBAZGVmYXVsdCAyMCAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBtYXhMZW5ndGhSZW5kZXJXaXRob3V0VG9vbHRpcCA9IDIwO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gdW0gbm92byBjaGlwIMOpIGFkaWNpb25hZG8gY29tIHN1Y2Vzc28uICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBhZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hpcEFkZEV2ZW50PigpO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gdW0gY2hpcCDDqSByZW1vdmlkbyBwZWxvIHVzdcOhcmlvLiAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgcmVtb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hpcFJlbW92ZUV2ZW50PigpO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBjYW1wbyBkZSBlbnRyYWRhIHJlY2ViZSBmb2NvLiAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgZm9jdXNlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gY2FtcG8gZGUgZW50cmFkYSBwZXJkZSBvIGZvY28uICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBmb2N1c0xvc3QgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIHVzdcOhcmlvIGNsaWNhIGVtIHVtIGNoaXAgZXhpc3RlbnRlLiAqL1xyXG4gICAgQE91dHB1dCgpXHJcbiAgICBwdWJsaWMgY2hpcENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENoaXBDbGlja0V2ZW50PigpO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBzZW1wcmUgcXVlIGEgbGlzdGEgZGUgY2hpcHMgw6kgYWx0ZXJhZGEgKGFkacOnw6NvIG91IHJlbW/Dp8OjbykuICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10gfCBhbnlbXT4oKTtcclxuXHJcbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKVxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZURpcmVjdGl2ZT4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KVxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbnB1dDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgaXNGb2N1c2VkID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgb25DaGFuZ2U6ICh2YWx1ZTogc3RyaW5nW10gfCBhbnlbXSkgPT4gdm9pZCA9ICgpID0+IHt9O1xyXG4gICAgcHVibGljIG9uVG91Y2hlZDogKHZhbHVlOiBzdHJpbmdbXSB8IGFueVtdKSA9PiB2b2lkID0gKCkgPT4ge307XHJcblxyXG4gICAgcHJpdmF0ZSBpc1RhYkV2ZW50QWN0aXZlID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5hdXRvZm9jdXMgJiYgdGhpcy5pbnB1dCkge1xyXG4gICAgICAgICAgICB0aGlzLmlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hpcFRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMuZmluZCgoeCkgPT4geC50eXBlID09PSAnY2hpcC1jb250YWluZXInKT8udGVtcGxhdGU7XHJcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHdyaXRlVmFsdWUob2JqOiBzdHJpbmdbXSB8IGFueVtdKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGlzTnVsbE9yVW5kZWZpbmVkKG9iaikpIHtcclxuICAgICAgICAgICAgb2JqID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nW10gfCBhbnlbXSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSlcclxuICAgIEBDaGVja0Rpc2FibGVkKClcclxuICAgIHB1YmxpYyBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgaXNFbnRlciA9ICRldmVudC5rZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTZXBhcmF0b3IgPSB0aGlzLnNlcGFyYXRvciAmJiAkZXZlbnQua2V5ID09PSB0aGlzLnNlcGFyYXRvcjtcclxuICAgICAgICBjb25zdCBldmVudEtleUlzVGFiID0gJGV2ZW50LmtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgaWYgKGV2ZW50S2V5SXNUYWIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFiVGltZW91dFRpbWUgPSA1MDtcclxuICAgICAgICAgICAgdGhpcy5pc1RhYkV2ZW50QWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGFiRXZlbnRBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgdGFiVGltZW91dFRpbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBpc1RhYiA9IHRoaXMuYWRkT25UYWIgJiYgZXZlbnRLZXlJc1RhYjtcclxuICAgICAgICBpZiAoaXNFbnRlciB8fCBpc1NlcGFyYXRvciB8fCBpc1RhYikge1xyXG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5hZGRJdGVtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbklucHV0Rm9jdXMoJGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c2VkLmVtaXQoJGV2ZW50KTtcclxuICAgICAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgQENoZWNrRGlzYWJsZWQoKVxyXG4gICAgcHVibGljIG9uSW5wdXRMb3N0Rm9jdXMoJGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5pc0ZvY3VzZWQgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIXRoaXMuYWRkT25CbHVyIHx8IHRoaXMuaXNUYWJFdmVudEFjdGl2ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkSXRlbSgpO1xyXG4gICAgICAgIHRoaXMuZm9jdXNMb3N0LmVtaXQoJGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbSh7IGl0ZW1JbmRleCwgZXZlbnQgfTogeyBpdGVtSW5kZXg6IG51bWJlcjsgZXZlbnQ6IEV2ZW50IH0pIHtcclxuICAgICAgICBjb25zdCBfcmVtb3ZlZEl0ZW0gPSB0aGlzLnZhbHVlW2l0ZW1JbmRleF07XHJcbiAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaXRlbUluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJlbW92ZWQuZW1pdCh7IHZhbHVlOiBfcmVtb3ZlZEl0ZW0sIG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNoaXBDbGlja2VkKHsgZXZlbnQsIGRhdGEgfTogeyBldmVudDogRXZlbnQ7IGRhdGE6IHN0cmluZyB8IE9iamVjdCB9KSB7XHJcbiAgICAgICAgdGhpcy5jaGlwQ2xpY2tlZC5lbWl0KHsgdmFsdWU6IGRhdGEsIG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWRkSXRlbSgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzVmFsdWVUb0FkZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaXNNYXhSZWFjaGVkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZEl0ZW1MZW5ndGgoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHZhbHVlVG9BZGQgPSB0aGlzLmdldFZhbHVlVG9BZGQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuaGFzRHVwbGljYXRlZEl0ZW0oKSkge1xyXG4gICAgICAgICAgICB0aGlzLnN0b3JlVmFsdWUodmFsdWVUb0FkZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubmV3SXRlbSA9ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFzVmFsdWVUb0FkZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLm5ld0l0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc01heFJlYWNoZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhKHRoaXMubWF4ICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSB0aGlzLm1heCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpc1ZhbGlkSXRlbUxlbmd0aCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXhMZW5ndGggPyB0aGlzLm5ld0l0ZW0ubGVuZ3RoIDw9IHRoaXMubWF4TGVuZ3RoIDogdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldE1hcHBlZFZhbHVlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQgPyB0aGlzLnZhbHVlLm1hcCgoeCkgPT4geFt0aGlzLmZpZWxkXSkgOiB0aGlzLnZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VmFsdWVUb0FkZCgpOiBhbnkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZpZWxkID8geyBbdGhpcy5maWVsZF06IHRoaXMubmV3SXRlbSB9IDogdGhpcy5uZXdJdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaGFzRHVwbGljYXRlZEl0ZW0oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuYWxsb3dEdXBsaWNhdGVkKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbWFwcGVkVmFsdWVzID0gdGhpcy5nZXRNYXBwZWRWYWx1ZXMoKTtcclxuICAgICAgICByZXR1cm4gISFtYXBwZWRWYWx1ZXMuZmluZCgoeCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jYXNlU2Vuc2l0aXZlRHVwbGljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4ID09PSB0aGlzLm5ld0l0ZW07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geC50b0xvd2VyQ2FzZSgpID09PSB0aGlzLm5ld0l0ZW0udG9Mb3dlckNhc2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RvcmVWYWx1ZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IFsuLi50aGlzLnZhbHVlLCB2YWx1ZV07XHJcbiAgICAgICAgdGhpcy5hZGRlZC5lbWl0KHsgdmFsdWUgfSk7XHJcbiAgICAgICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMudmFsdWUpO1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkKHRoaXMudmFsdWUpO1xyXG4gICAgfVxyXG59XHJcbiIsIjx1bFxuICAgIGNsYXNzPVwiY2hpcHMtY29udGFpbmVyIHctZnVsbCBwLTEuNSBmbGV4IGZsZXgtd3JhcCBpdGVtcy1jZW50ZXIgcm91bmRlZC1zbWFsbCBib3JkZXIgYm9yZGVyLWdyYXlzY2FsZS0zMCBiZy1ncmF5c2NhbGUtMCBsaXN0LW5vbmUgZ2FwLTIgbWluLWgtWzM1cHhdXCJcbiAgICBbY2xhc3Mub3V0bGluZV09XCJpc0ZvY3VzZWRcIlxuICAgIFtjbGFzcy5vdXRsaW5lLTJdPVwiaXNGb2N1c2VkXCJcbiAgICBbY2xhc3Mub3V0bGluZS1jcml0aWNhbGl0eS1ibHVlXT1cImlzRm9jdXNlZFwiPlxuICAgIEBmb3IoaXRlbSBvZiB2YWx1ZTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgIDxsaT5cbiAgICAgICAgICAgIDxzLWNoaXAtaXRlbVxuICAgICAgICAgICAgICAgIFt0ZW1wbGF0ZVJlZl09XCJjaGlwVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtkYXRhUmVuZGVyXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgIFtvYmplY3RGaWVsZF09XCJmaWVsZFwiXG4gICAgICAgICAgICAgICAgW2l0ZW1JbmRleF09XCIkaW5kZXhcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgW3Nob3dUb29sdGlwXT1cInNob3dUb29sdGlwXCJcbiAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoUmVuZGVyV2l0aG91dFRvb2x0aXBdPVwibWF4TGVuZ3RoUmVuZGVyV2l0aG91dFRvb2x0aXBcIlxuICAgICAgICAgICAgICAgIChjbGlja1JlbW92ZSk9XCJyZW1vdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGlwQ2xpY2tlZCk9XCJvbkNoaXBDbGlja2VkKCRldmVudClcIj5cbiAgICAgICAgICAgIDwvcy1jaGlwLWl0ZW0+XG4gICAgICAgIDwvbGk+XG4gICAgfVxuXG4gICAgQGlmKGtleUZpbHRlcikge1xuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJiZy1ncmF5c2NhbGUtMCB3LWZ1bGwgYm9yZGVyLW5vbmUgZmxleC0xIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBtYXggPT09IHZhbHVlLmxlbmd0aFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgW21heGxlbmd0aF09XCJtYXhMZW5ndGhcIlxuICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdJdGVtXCJcbiAgICAgICAgICAgIFtwS2V5RmlsdGVyXT1cImtleUZpbHRlclwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25JbnB1dExvc3RGb2N1cygkZXZlbnQpXCI+XG4gICAgfUBlbHNlIHtcbiAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIGNsYXNzPVwiYmctZ3JheXNjYWxlLTAgdy1mdWxsIGJvcmRlci1ub25lIGZsZXgtMSBmb2N1cy12aXNpYmxlOm91dGxpbmUtbm9uZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQgfHwgbWF4ID09PSB2YWx1ZS5sZW5ndGhcIlxuICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyIHx8ICcnXCJcbiAgICAgICAgICAgIFttYXhsZW5ndGhdPVwibWF4TGVuZ3RoXCJcbiAgICAgICAgICAgIFtpZF09XCJpbnB1dElkXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwibmV3SXRlbVwiXG4gICAgICAgICAgICAoZm9jdXMpPVwib25JbnB1dEZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgKGJsdXIpPVwib25JbnB1dExvc3RGb2N1cygkZXZlbnQpXCI+XG4gICAgfVxuPC91bD5cbkBpZihpbmZvTGFiZWwpIHtcbiAgICA8c3BhbiBjbGFzcz1cInRleHQtZ3JheXNjYWxlLTUwIHRleHQteHNcIj5cbiAgICAgICAge3sgaW5mb0xhYmVsIH19XG4gICAgPC9zcGFuPlxufVxuIl19
287
+ }], chipItems: [{
288
+ type: ViewChildren,
289
+ args: [ChipItemComponent]
290
+ }], onKeydown: [], onInputLostFocus: [] } });
291
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoaXBzL3NyYy9saWIvY2hpcHMvY2hpcHMvY2hpcHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL2NoaXBzL3NyYy9saWIvY2hpcHMvY2hpcHMvY2hpcHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUdOLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdEYsT0FBTyxFQUFvQixTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUdoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNoRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQzFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7QUFFckU7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBZUgsTUFBTSxPQUFPLGNBQWM7SUFDTixHQUFHLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFFMUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUNiLFlBQVksQ0FBb0I7SUFFdkMsMkVBQTJFO0lBRXBFLFFBQVEsR0FBRyxLQUFLLENBQUM7SUFFeEIsMEdBQTBHO0lB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Z0JBS0EsV0FBVztzQkFEakIsTUFBTTtnQkFLQSxXQUFXO3NCQURqQixNQUFNO2dCQUlVLFNBQVM7c0JBRHpCLGVBQWU7dUJBQUMsaUJBQWlCO2dCQUlqQixLQUFLO3NCQURyQixTQUFTO3VCQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSXZCLFNBQVM7c0JBRHpCLFlBQVk7dUJBQUMsaUJBQWlCO2dCQXNDeEIsU0FBUyxNQTBCVCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgQ29udGVudENoaWxkcmVuLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGZvcndhcmRSZWYsXHJcbiAgICBJbnB1dCxcclxuICAgIE91dHB1dCxcclxuICAgIFF1ZXJ5TGlzdCxcclxuICAgIFRlbXBsYXRlUmVmLFxyXG4gICAgVmlld0NoaWxkLFxyXG4gICAgVmlld0NoaWxkcmVuLFxyXG4gICAgaW5qZWN0LFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IsIEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuaW1wb3J0IHsgS2V5RmlsdGVyUGF0dGVybiwgS2V5RmlsdGVyIH0gZnJvbSAncHJpbWVuZy9rZXlmaWx0ZXInO1xyXG5cclxuaW1wb3J0IHsgQ2hpcEFkZEV2ZW50LCBDaGlwQ2xpY2tFdmVudCwgQ2hpcFJlbW92ZUV2ZW50IH0gZnJvbSAnLi4vbW9kZWxzL2NoaXAtbW9kZWxzJztcclxuaW1wb3J0IHsgVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3RlbXBsYXRlJztcclxuaW1wb3J0IHsgaXNOdWxsT3JVbmRlZmluZWQsIHJhbmRvbUhhc2ggfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3V0aWxzJztcclxuaW1wb3J0IHsgQ2hlY2tEaXNhYmxlZCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvc2hhcmVkJztcclxuaW1wb3J0IHsgQ2hpcEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9jaGlwLWl0ZW0vY2hpcC1pdGVtLmNvbXBvbmVudCc7XHJcblxyXG4vKipcclxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgZW50cmFkYSBkZSB0YWdzL2NoaXBzIHF1ZSBwZXJtaXRlIGFkaWNpb25hciBlIHJlbW92ZXJcclxuICogaXRlbnMgZGUgdGV4dG8gbGl2cmVtZW50ZSBvdSBhIHBhcnRpciBkZSB1bWEgbGlzdGEuIFN1cG9ydGEgdGVtcGxhdGVzIHBlcnNvbmFsaXphZG9zXHJcbiAqIHBhcmEgcmVuZGVyaXphw6fDo28gZGUgY2FkYSBjaGlwLCBmaWx0cm8gZGUgdGVjbGFzLCBsaW1pdGUgZGUgaXRlbnMgZSBkdXBsaWNhw6fDo28gY29uZmlndXLDoXZlbC5cclxuICogSW1wbGVtZW50YSB7QGxpbmsgQ29udHJvbFZhbHVlQWNjZXNzb3J9IHBhcmEgdXNvIGVtIGZvcm11bMOhcmlvcyBBbmd1bGFyLlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBgYGBodG1sXHJcbiAqIDxzLWNoaXBzXHJcbiAqICAgZm9ybUNvbnRyb2xOYW1lPVwidGFnc1wiXHJcbiAqICAgcGxhY2Vob2xkZXI9XCJBZGljaW9uYXIgdGFnLi4uXCJcclxuICogICBbbWF4XT1cIjEwXCJcclxuICogICBbYWxsb3dEdXBsaWNhdGVkXT1cImZhbHNlXCJcclxuICogICAoYWRkZWQpPVwib25BZGRlZCgkZXZlbnQpXCIgLz5cclxuICogYGBgXHJcbiAqXHJcbiAqIEBjYXRlZ29yeSBJbnB1dHNcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzLWNoaXBzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jaGlwcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jaGlwcy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQ2hpcHNDb21wb25lbnQpLFxyXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZSxcclxuICAgICAgICB9LFxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgICBpbXBvcnRzOiBbQ2hpcEl0ZW1Db21wb25lbnQsIEZvcm1zTW9kdWxlLCBLZXlGaWx0ZXJdLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2hpcHNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcblxyXG4gICAgcHVibGljIG5ld0l0ZW0gPSAnJztcclxuICAgIHB1YmxpYyBjaGlwVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRGVzYWJpbGl0YSBhIGludGVyYcOnw6NvIGNvbSBvIGNvbXBvbmVudGUuIEBkZWZhdWx0IGZhbHNlICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBDaGF2ZSBkbyBvYmpldG8gdXNhZGEgcGFyYSBleGliacOnw6NvIHF1YW5kbyBvcyBpdGVucyBzw6NvIG9iamV0b3MgY29tcGxleG9zLiBAZGVmYXVsdCAnJyAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmaWVsZCA9ICcnO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgY2hpcHMgYXR1YWxtZW50ZSBleGliaWRvcy4gQGRlZmF1bHQgW10gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdmFsdWU6IGFueVtdID0gW107XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBUZXh0byBkZSBwbGFjZWhvbGRlciBleGliaWRvIG5vIGNhbXBvIGRlIGVudHJhZGEgcXVhbmRvIHZhemlvLiAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gTsO6bWVybyBtw6F4aW1vIGRlIGNoaXBzIHBlcm1pdGlkb3MuIEBkZWZhdWx0IEluZmluaXR5ICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1heCA9IEluZmluaXR5O1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gQ29tcHJpbWVudG8gbcOheGltbyBkbyB0ZXh0byBkZSBjYWRhIGNoaXAuIEBkZWZhdWx0IEluZmluaXR5ICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1heExlbmd0aCA9IEluZmluaXR5O1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gSWRlbnRpZmljYWRvciBkbyBlbGVtZW50byBgPGlucHV0PmAgaW50ZXJuby4gR2VyYWRvIGF1dG9tYXRpY2FtZW50ZSBzZSBuw6NvIGluZm9ybWFkby4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaW5wdXRJZCA9IGBjaGlwcy0ke3JhbmRvbUhhc2goKX1gO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gUGVybWl0ZSBhIGFkacOnw6NvIGRlIGNoaXBzIGNvbSB2YWxvciBkdXBsaWNhZG8uIEBkZWZhdWx0IHRydWUgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYWxsb3dEdXBsaWNhdGVkID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIFF1YW5kbyBgZmFsc2VgLCBhIGNvbXBhcmHDp8OjbyBkZSBkdXBsaWNhdGFzIMOpIGNhc2UtaW5zZW5zaXRpdmUuIEBkZWZhdWx0IGZhbHNlICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGNhc2VTZW5zaXRpdmVEdXBsaWNhdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gQWRpY2lvbmEgbyBjaGlwIGFvIHByZXNzaW9uYXIgVGFiLiBAZGVmYXVsdCB0cnVlICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGFkZE9uVGFiID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIEFkaWNpb25hIG8gY2hpcCBhbyBwZXJkZXIgbyBmb2NvIChibHVyKS4gQGRlZmF1bHQgdHJ1ZSAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBhZGRPbkJsdXIgPSB0cnVlO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gQ2FyYWN0ZXJlIHNlcGFyYWRvciBxdWUsIHF1YW5kbyBkaWdpdGFkbywgY29uZmlybWEgYSBhZGnDp8OjbyBkZSB1bSBub3ZvIGNoaXAuIEBkZWZhdWx0ICcnICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNlcGFyYXRvciA9ICcnO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gQ29sb2NhIG8gZm9jbyBhdXRvbWF0aWNhbWVudGUgbm8gY2FtcG8gZGUgZW50cmFkYSBhbyByZW5kZXJpemFyIG8gY29tcG9uZW50ZS4gQGRlZmF1bHQgZmFsc2UgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXV0b2ZvY3VzID0gZmFsc2U7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBUZXh0byBpbmZvcm1hdGl2byBleGliaWRvIGFiYWl4byBkbyBjYW1wbyBkZSBlbnRyYWRhLiBAZGVmYXVsdCAnJyAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBpbmZvTGFiZWwgPSAnJztcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4cHJlc3PDo28gcmVndWxhciBvdSBwYWRyw6NvIHByZWRlZmluaWRvIChQcmltZU5HIEtleUZpbHRlclBhdHRlcm4pIHBhcmEgZmlsdHJhciB0ZWNsYXMgYWNlaXRhcy4gKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMga2V5RmlsdGVyPzogUmVnRXhwIHwgS2V5RmlsdGVyUGF0dGVybjtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIHRvb2x0aXAgYW8gcGFzc2FyIG8gbW91c2Ugc29icmUgY2hpcHMgY29tIHRleHRvIHRydW5jYWRvLiBAZGVmYXVsdCB0cnVlICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNob3dUb29sdGlwID0gdHJ1ZTtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIE7Dum1lcm8gbcOheGltbyBkZSBjYXJhY3RlcmVzIGV4aWJpZG9zIGRpcmV0YW1lbnRlIG5vIGNoaXAgc2VtIGFwbGljYXIgdHJ1bmNhbWVudG8uIEBkZWZhdWx0IDIwICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG1heExlbmd0aFJlbmRlcldpdGhvdXRUb29sdGlwID0gMjA7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyB1bSBub3ZvIGNoaXAgw6kgYWRpY2lvbmFkbyBjb20gc3VjZXNzby4gKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxDaGlwQWRkRXZlbnQ+KCk7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyB1bSBjaGlwIMOpIHJlbW92aWRvIHBlbG8gdXN1w6FyaW8uICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZW1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxDaGlwUmVtb3ZlRXZlbnQ+KCk7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBvIGNhbXBvIGRlIGVudHJhZGEgcmVjZWJlIGZvY28uICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBmb2N1c2VkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2N1c0V2ZW50PigpO1xyXG5cclxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gbyBjYW1wbyBkZSBlbnRyYWRhIHBlcmRlIG8gZm9jby4gKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGZvY3VzTG9zdCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcclxuXHJcbiAgICAvKiogQGRlc2NyaXB0aW9uIEVtaXRpZG8gcXVhbmRvIG8gdXN1w6FyaW8gY2xpY2EgZW0gdW0gY2hpcCBleGlzdGVudGUuICovXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyBjaGlwQ2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Q2hpcENsaWNrRXZlbnQ+KCk7XHJcblxyXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHNlbXByZSBxdWUgYSBsaXN0YSBkZSBjaGlwcyDDqSBhbHRlcmFkYSAoYWRpw6fDo28gb3UgcmVtb8Onw6NvKS4gKi9cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXSB8IGFueVtdPigpO1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlRGlyZWN0aXZlPiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2lucHV0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGlucHV0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIEBWaWV3Q2hpbGRyZW4oQ2hpcEl0ZW1Db21wb25lbnQpXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoaXBJdGVtczogUXVlcnlMaXN0PENoaXBJdGVtQ29tcG9uZW50PiB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIHB1YmxpYyBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmdbXSB8IGFueVtdKSA9PiB2b2lkID0gKCkgPT4ge307XHJcbiAgICBwdWJsaWMgb25Ub3VjaGVkOiAodmFsdWU6IHN0cmluZ1tdIHwgYW55W10pID0+IHZvaWQgPSAoKSA9PiB7fTtcclxuXHJcbiAgICBwcml2YXRlIGlzVGFiRXZlbnRBY3RpdmUgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmF1dG9mb2N1cyAmJiB0aGlzLmlucHV0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50ZW1wbGF0ZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5jaGlwVGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcy5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICdjaGlwLWNvbnRhaW5lcicpPy50ZW1wbGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgd3JpdGVWYWx1ZShvYmo6IHN0cmluZ1tdIHwgYW55W10pOiB2b2lkIHtcclxuICAgICAgICBpZiAoaXNOdWxsT3JVbmRlZmluZWQob2JqKSkge1xyXG4gICAgICAgICAgICBvYmogPSBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IG9iajtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmdbXSB8IGFueVtdKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IGZuO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIEBDaGVja0Rpc2FibGVkKClcclxuICAgIHB1YmxpYyBvbktleWRvd24oJGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgaXNFbnRlciA9ICRldmVudC5rZXkgPT09ICdFbnRlcic7XHJcbiAgICAgICAgY29uc3QgaXNTZXBhcmF0b3IgPSB0aGlzLnNlcGFyYXRvciAmJiAkZXZlbnQua2V5ID09PSB0aGlzLnNlcGFyYXRvcjtcclxuICAgICAgICBjb25zdCBldmVudEtleUlzVGFiID0gJGV2ZW50LmtleSA9PT0gJ1RhYic7XHJcbiAgICAgICAgaWYgKGV2ZW50S2V5SXNUYWIpIHtcclxuICAgICAgICAgICAgY29uc3QgdGFiVGltZW91dFRpbWUgPSA1MDtcclxuICAgICAgICAgICAgdGhpcy5pc1RhYkV2ZW50QWN0aXZlID0gdHJ1ZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzVGFiRXZlbnRBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSwgdGFiVGltZW91dFRpbWUpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hZGRPblRhYikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRJdGVtKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaXNFbnRlciB8fCBpc1NlcGFyYXRvcikge1xyXG4gICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5hZGRJdGVtKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbklucHV0Rm9jdXMoJGV2ZW50OiBGb2N1c0V2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5mb2N1c2VkLmVtaXQoJGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBAQ2hlY2tEaXNhYmxlZCgpXHJcbiAgICBwdWJsaWMgb25JbnB1dExvc3RGb2N1cygkZXZlbnQ6IEZvY3VzRXZlbnQpIHtcclxuICAgICAgICBpZiAoIXRoaXMuYWRkT25CbHVyIHx8IHRoaXMuaXNUYWJFdmVudEFjdGl2ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuYWRkSXRlbSgpO1xyXG4gICAgICAgIHRoaXMuZm9jdXNMb3N0LmVtaXQoJGV2ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVtb3ZlSXRlbSh7IGl0ZW1JbmRleCwgZXZlbnQgfTogeyBpdGVtSW5kZXg6IG51bWJlcjsgZXZlbnQ6IEV2ZW50IH0pIHtcclxuICAgICAgICBjb25zdCBfcmVtb3ZlZEl0ZW0gPSB0aGlzLnZhbHVlW2l0ZW1JbmRleF07XHJcbiAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaXRlbUluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnJlbW92ZWQuZW1pdCh7IHZhbHVlOiBfcmVtb3ZlZEl0ZW0sIG9yaWdpbmFsRXZlbnQ6IGV2ZW50IH0pO1xyXG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB0aGlzLnJlc3RvcmVGb2N1c0FmdGVyUmVtb3ZlKGl0ZW1JbmRleCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2hpcENsaWNrZWQoeyBldmVudCwgZGF0YSB9OiB7IGV2ZW50OiBFdmVudDsgZGF0YTogc3RyaW5nIHwgT2JqZWN0IH0pIHtcclxuICAgICAgICB0aGlzLmNoaXBDbGlja2VkLmVtaXQoeyB2YWx1ZTogZGF0YSwgb3JpZ2luYWxFdmVudDogZXZlbnQgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRJdGVtKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZVRvQWRkKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5pc01heFJlYWNoZWQoKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkSXRlbUxlbmd0aCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdmFsdWVUb0FkZCA9IHRoaXMuZ2V0VmFsdWVUb0FkZCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNEdXBsaWNhdGVkSXRlbSgpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RvcmVWYWx1ZSh2YWx1ZVRvQWRkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5uZXdJdGVtID0gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNWYWx1ZVRvQWRkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAhIXRoaXMubmV3SXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzTWF4UmVhY2hlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISEodGhpcy5tYXggJiYgdGhpcy52YWx1ZS5sZW5ndGggPT09IHRoaXMubWF4KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGlzVmFsaWRJdGVtTGVuZ3RoKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1heExlbmd0aCA/IHRoaXMubmV3SXRlbS5sZW5ndGggPD0gdGhpcy5tYXhMZW5ndGggOiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0TWFwcGVkVmFsdWVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5maWVsZCA/IHRoaXMudmFsdWUubWFwKCh4KSA9PiB4W3RoaXMuZmllbGRdKSA6IHRoaXMudmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZVRvQWRkKCk6IGFueSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZmllbGQgPyB7IFt0aGlzLmZpZWxkXTogdGhpcy5uZXdJdGVtIH0gOiB0aGlzLm5ld0l0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBoYXNEdXBsaWNhdGVkSXRlbSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5hbGxvd0R1cGxpY2F0ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBtYXBwZWRWYWx1ZXMgPSB0aGlzLmdldE1hcHBlZFZhbHVlcygpO1xyXG4gICAgICAgIHJldHVybiAhIW1hcHBlZFZhbHVlcy5maW5kKCh4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNhc2VTZW5zaXRpdmVEdXBsaWNhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHggPT09IHRoaXMubmV3SXRlbTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4LnRvTG93ZXJDYXNlKCkgPT09IHRoaXMubmV3SXRlbS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXN0b3JlRm9jdXNBZnRlclJlbW92ZShyZW1vdmVkSW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5jaGlwSXRlbXM/LnRvQXJyYXkoKSA/PyBbXTtcclxuICAgICAgICBpZiAoaXRlbXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGl0ZW1zW01hdGgubWluKHJlbW92ZWRJbmRleCwgaXRlbXMubGVuZ3RoIC0gMSldLmZvY3VzKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5pbnB1dD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHN0b3JlVmFsdWUodmFsdWU6IGFueSkge1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdmFsdWVdO1xyXG4gICAgICAgIHRoaXMuYWRkZWQuZW1pdCh7IHZhbHVlIH0pO1xyXG4gICAgICAgIHRoaXMudmFsdWVDaGFuZ2UuZW1pdCh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLndyaXRlVmFsdWUodGhpcy52YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLnZhbHVlKTtcclxuICAgICAgICB0aGlzLm9uVG91Y2hlZCh0aGlzLnZhbHVlKTtcclxuICAgIH1cclxufVxyXG4iLCI8dWxcbiAgICByb2xlPVwibGlzdFwiXG4gICAgY2xhc3M9XCJjaGlwcy1jb250YWluZXIgdy1mdWxsIHAtMS41IGZsZXggZmxleC13cmFwIGl0ZW1zLWNlbnRlciByb3VuZGVkLXNtYWxsIGJvcmRlciBib3JkZXItZ3JheXNjYWxlLTMwIGJnLWdyYXlzY2FsZS0wIGxpc3Qtbm9uZSBnYXAtMiBtaW4taC1bMzVweF0gZm9jdXMtd2l0aGluOm91dGxpbmUgZm9jdXMtd2l0aGluOm91dGxpbmUtMiBmb2N1cy13aXRoaW46b3V0bGluZS1jcml0aWNhbGl0eS1ibHVlXCI+XG4gICAgQGZvcihpdGVtIG9mIHZhbHVlOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgPGxpIHJvbGU9XCJsaXN0aXRlbVwiPlxuICAgICAgICAgICAgPHMtY2hpcC1pdGVtXG4gICAgICAgICAgICAgICAgW3RlbXBsYXRlUmVmXT1cImNoaXBUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2RhdGFSZW5kZXJdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW29iamVjdEZpZWxkXT1cImZpZWxkXCJcbiAgICAgICAgICAgICAgICBbaXRlbUluZGV4XT1cIiRpbmRleFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Rvb2x0aXBdPVwic2hvd1Rvb2x0aXBcIlxuICAgICAgICAgICAgICAgIFttYXhMZW5ndGhSZW5kZXJXaXRob3V0VG9vbHRpcF09XCJtYXhMZW5ndGhSZW5kZXJXaXRob3V0VG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrUmVtb3ZlKT1cInJlbW92ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNoaXBDbGlja2VkKT1cIm9uQ2hpcENsaWNrZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPC9zLWNoaXAtaXRlbT5cbiAgICAgICAgPC9saT5cbiAgICB9XG5cbiAgICBAaWYoa2V5RmlsdGVyKSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgI2lucHV0XG4gICAgICAgICAgICBjbGFzcz1cImJnLWdyYXlzY2FsZS0wIHctZnVsbCBib3JkZXItbm9uZSBmbGV4LTEgZm9jdXMtdmlzaWJsZTpvdXRsaW5lLW5vbmVcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkIHx8IG1heCA9PT0gdmFsdWUubGVuZ3RoXCJcbiAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlciB8fCAnJ1wiXG4gICAgICAgICAgICBbbWF4bGVuZ3RoXT1cIm1heExlbmd0aFwiXG4gICAgICAgICAgICBbaWRdPVwiaW5wdXRJZFwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cIm5ld0l0ZW1cIlxuICAgICAgICAgICAgW3BLZXlGaWx0ZXJdPVwia2V5RmlsdGVyXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAoYmx1cik9XCJvbklucHV0TG9zdEZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIj5cbiAgICB9QGVsc2Uge1xuICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJiZy1ncmF5c2NhbGUtMCB3LWZ1bGwgYm9yZGVyLW5vbmUgZmxleC0xIGZvY3VzLXZpc2libGU6b3V0bGluZS1ub25lXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlZCB8fCBtYXggPT09IHZhbHVlLmxlbmd0aFwiXG4gICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwicGxhY2Vob2xkZXIgfHwgJydcIlxuICAgICAgICAgICAgW21heGxlbmd0aF09XCJtYXhMZW5ndGhcIlxuICAgICAgICAgICAgW2lkXT1cImlucHV0SWRcIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJuZXdJdGVtXCJcbiAgICAgICAgICAgIChmb2N1cyk9XCJvbklucHV0Rm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAoYmx1cik9XCJvbklucHV0TG9zdEZvY3VzKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudClcIj5cbiAgICB9XG48L3VsPlxuQGlmKGluZm9MYWJlbCkge1xuICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5c2NhbGUtNTAgdGV4dC14c1wiPlxuICAgICAgICB7eyBpbmZvTGFiZWwgfX1cbiAgICA8L3NwYW4+XG59XG4iXX0=