ngx-vector-components 4.4.0 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,11 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.6.0] (06/07/2022)
4
+
5
+ ### Features
6
+
7
+ - Added `goBackHidden` parameter to hidden goBackButton in `vector-crud-footer`.
8
+ ## [4.5.1] (30/06/2022)
9
+
10
+ ### Bugfixes
11
+
12
+ - `menu` changed admin menu to show only fintech admin.
13
+
14
+ ## [4.5.0] (29/06/2022)
15
+
16
+ ### Features
17
+
18
+ - `vector-filters` changed to read the url queryParams to set default values.
19
+
3
20
  ## [4.4.0] (28/06/2022)
4
21
 
5
22
  ### Features
6
23
 
7
24
  - Added `isExternalUrl` in `http-interceptor.ts`;
8
- - Added `Height` input in `data-table`;
9
25
 
10
26
  ## [4.3.0] (27/06/2022)
11
27
 
@@ -6,23 +6,26 @@ export class CrudFooterComponent {
6
6
  constructor() {
7
7
  this.submitDisabled = false;
8
8
  this.submitHidden = false;
9
+ this.goBackHidden = false;
9
10
  this.onGoBack = new EventEmitter();
10
11
  this.onSubmit = new EventEmitter();
11
12
  }
12
13
  ngOnInit() { }
13
14
  }
14
15
  CrudFooterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CrudFooterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15
- CrudFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: CrudFooterComponent, selector: "vector-crud-footer", inputs: { submitDisabled: "submitDisabled", submitHidden: "submitHidden" }, outputs: { onGoBack: "onGoBack", onSubmit: "onSubmit" }, ngImport: i0, template: "<div class=\"footer-container shadow-3\">\r\n <div class=\"button\">\r\n <vector-button label=\"Voltar\" (onClick)=\"onGoBack.emit()\"></vector-button>\r\n </div>\r\n <div class=\"button\" *ngIf=\"!submitHidden\">\r\n <vector-button\r\n label=\"Salvar\"\r\n type=\"success\"\r\n (onClick)=\"onSubmit.emit()\"\r\n [disabled]=\"submitDisabled\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".footer-container{position:fixed;bottom:0px;left:0px;background-color:#f5f5f5;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;width:100%;height:60px}.footer-container .button{margin-right:10px}\n"], components: [{ type: i1.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
16
+ CrudFooterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: CrudFooterComponent, selector: "vector-crud-footer", inputs: { submitDisabled: "submitDisabled", submitHidden: "submitHidden", goBackHidden: "goBackHidden" }, outputs: { onGoBack: "onGoBack", onSubmit: "onSubmit" }, ngImport: i0, template: "<div class=\"footer-container shadow-3\">\r\n <div class=\"button\" *ngIf=\"!goBackHidden\">\r\n <vector-button label=\"Voltar\" (onClick)=\"onGoBack.emit()\"></vector-button>\r\n </div>\r\n <div class=\"button\" *ngIf=\"!submitHidden\">\r\n <vector-button\r\n label=\"Salvar\"\r\n type=\"success\"\r\n (onClick)=\"onSubmit.emit()\"\r\n [disabled]=\"submitDisabled\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".footer-container{position:fixed;bottom:0px;left:0px;background-color:#f5f5f5;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;width:100%;height:60px}.footer-container .button{margin-right:10px}\n"], components: [{ type: i1.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }], directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
16
17
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: CrudFooterComponent, decorators: [{
17
18
  type: Component,
18
- args: [{ selector: 'vector-crud-footer', template: "<div class=\"footer-container shadow-3\">\r\n <div class=\"button\">\r\n <vector-button label=\"Voltar\" (onClick)=\"onGoBack.emit()\"></vector-button>\r\n </div>\r\n <div class=\"button\" *ngIf=\"!submitHidden\">\r\n <vector-button\r\n label=\"Salvar\"\r\n type=\"success\"\r\n (onClick)=\"onSubmit.emit()\"\r\n [disabled]=\"submitDisabled\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".footer-container{position:fixed;bottom:0px;left:0px;background-color:#f5f5f5;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;width:100%;height:60px}.footer-container .button{margin-right:10px}\n"] }]
19
+ args: [{ selector: 'vector-crud-footer', template: "<div class=\"footer-container shadow-3\">\r\n <div class=\"button\" *ngIf=\"!goBackHidden\">\r\n <vector-button label=\"Voltar\" (onClick)=\"onGoBack.emit()\"></vector-button>\r\n </div>\r\n <div class=\"button\" *ngIf=\"!submitHidden\">\r\n <vector-button\r\n label=\"Salvar\"\r\n type=\"success\"\r\n (onClick)=\"onSubmit.emit()\"\r\n [disabled]=\"submitDisabled\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".footer-container{position:fixed;bottom:0px;left:0px;background-color:#f5f5f5;display:flex;flex-direction:row;justify-content:flex-end;align-items:center;width:100%;height:60px}.footer-container .button{margin-right:10px}\n"] }]
19
20
  }], ctorParameters: function () { return []; }, propDecorators: { submitDisabled: [{
20
21
  type: Input
21
22
  }], submitHidden: [{
22
23
  type: Input
24
+ }], goBackHidden: [{
25
+ type: Input
23
26
  }], onGoBack: [{
24
27
  type: Output
25
28
  }], onSubmit: [{
26
29
  type: Output
27
30
  }] } });
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb290ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvb3Rlci9jcnVkLWZvb3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NydWQtZm9vdGVyL2NydWQtZm9vdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFPL0UsTUFBTSxPQUFPLG1CQUFtQjtJQVU5QjtRQVJPLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXJCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXBDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRTVCLENBQUM7SUFFaEIsUUFBUSxLQUFVLENBQUM7O2dIQVpSLG1CQUFtQjtvR0FBbkIsbUJBQW1CLCtMQ1BoQyx3YUFhQTsyRkROYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0Usb0JBQW9COzBFQU12QixjQUFjO3NCQURwQixLQUFLO2dCQUdDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBR0MsUUFBUTtzQkFEZCxNQUFNO2dCQUdBLFFBQVE7c0JBRGQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndmVjdG9yLWNydWQtZm9vdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3J1ZC1mb290ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NydWQtZm9vdGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcnVkRm9vdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzdWJtaXREaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHN1Ym1pdEhpZGRlbiA9IGZhbHNlO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvbkdvQmFjayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7fVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJmb290ZXItY29udGFpbmVyIHNoYWRvdy0zXCI+XHJcbiAgPGRpdiBjbGFzcz1cImJ1dHRvblwiPlxyXG4gICAgPHZlY3Rvci1idXR0b24gbGFiZWw9XCJWb2x0YXJcIiAob25DbGljayk9XCJvbkdvQmFjay5lbWl0KClcIj48L3ZlY3Rvci1idXR0b24+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiBjbGFzcz1cImJ1dHRvblwiICpuZ0lmPVwiIXN1Ym1pdEhpZGRlblwiPlxyXG4gICAgPHZlY3Rvci1idXR0b25cclxuICAgICAgbGFiZWw9XCJTYWx2YXJcIlxyXG4gICAgICB0eXBlPVwic3VjY2Vzc1wiXHJcbiAgICAgIChvbkNsaWNrKT1cIm9uU3VibWl0LmVtaXQoKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCJzdWJtaXREaXNhYmxlZFwiXHJcbiAgICA+PC92ZWN0b3ItYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J1ZC1mb290ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9jcnVkLWZvb3Rlci9jcnVkLWZvb3Rlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2NydWQtZm9vdGVyL2NydWQtZm9vdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7Ozs7QUFPL0UsTUFBTSxPQUFPLG1CQUFtQjtJQVk5QjtRQVZPLG1CQUFjLEdBQUcsS0FBSyxDQUFDO1FBRXZCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXJCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBRXJCLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXBDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRTVCLENBQUM7SUFFaEIsUUFBUSxLQUFVLENBQUM7O2dIQWRSLG1CQUFtQjtvR0FBbkIsbUJBQW1CLDZOQ1BoQyxnY0FhQTsyRkROYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0Usb0JBQW9COzBFQU12QixjQUFjO3NCQURwQixLQUFLO2dCQUdDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBR0MsWUFBWTtzQkFEbEIsS0FBSztnQkFHQyxRQUFRO3NCQURkLE1BQU07Z0JBR0EsUUFBUTtzQkFEZCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd2ZWN0b3ItY3J1ZC1mb290ZXInLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jcnVkLWZvb3Rlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3J1ZC1mb290ZXIuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIENydWRGb290ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHN1Ym1pdERpc2FibGVkID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc3VibWl0SGlkZGVuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgZ29CYWNrSGlkZGVuID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpXHJcbiAgcHVibGljIG9uR29CYWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvblN1Ym1pdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImZvb3Rlci1jb250YWluZXIgc2hhZG93LTNcIj5cclxuICA8ZGl2IGNsYXNzPVwiYnV0dG9uXCIgKm5nSWY9XCIhZ29CYWNrSGlkZGVuXCI+XHJcbiAgICA8dmVjdG9yLWJ1dHRvbiBsYWJlbD1cIlZvbHRhclwiIChvbkNsaWNrKT1cIm9uR29CYWNrLmVtaXQoKVwiPjwvdmVjdG9yLWJ1dHRvbj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiYnV0dG9uXCIgKm5nSWY9XCIhc3VibWl0SGlkZGVuXCI+XHJcbiAgICA8dmVjdG9yLWJ1dHRvblxyXG4gICAgICBsYWJlbD1cIlNhbHZhclwiXHJcbiAgICAgIHR5cGU9XCJzdWNjZXNzXCJcclxuICAgICAgKG9uQ2xpY2spPVwib25TdWJtaXQuZW1pdCgpXCJcclxuICAgICAgW2Rpc2FibGVkXT1cInN1Ym1pdERpc2FibGVkXCJcclxuICAgID48L3ZlY3Rvci1idXR0b24+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
@@ -3,15 +3,16 @@ import { FormControl, FormGroup, Validators } from '@angular/forms';
3
3
  import { Subscription } from 'rxjs';
4
4
  import { ObjectUtil } from '../../../utils';
5
5
  import * as i0 from "@angular/core";
6
- import * as i1 from "../text-field/text-field.component";
7
- import * as i2 from "../dropdown-field/dropdown-field.component";
8
- import * as i3 from "../currency-field/currency-field.component";
9
- import * as i4 from "../calendar-field/calendar-field.component";
10
- import * as i5 from "../select-button-field/select-button-field.component";
11
- import * as i6 from "../button/button.component";
12
- import * as i7 from "@angular/common";
13
- import * as i8 from "@angular/forms";
14
- import * as i9 from "../../../pipes/not-hidden.pipe";
6
+ import * as i1 from "@angular/router";
7
+ import * as i2 from "../text-field/text-field.component";
8
+ import * as i3 from "../dropdown-field/dropdown-field.component";
9
+ import * as i4 from "../currency-field/currency-field.component";
10
+ import * as i5 from "../calendar-field/calendar-field.component";
11
+ import * as i6 from "../select-button-field/select-button-field.component";
12
+ import * as i7 from "../button/button.component";
13
+ import * as i8 from "@angular/common";
14
+ import * as i9 from "@angular/forms";
15
+ import * as i10 from "../../../pipes/not-hidden.pipe";
15
16
  export var FieldType;
16
17
  (function (FieldType) {
17
18
  FieldType[FieldType["DROPDOWN"] = 0] = "DROPDOWN";
@@ -23,26 +24,32 @@ export var FieldType;
23
24
  FieldType[FieldType["SELECT_BUTTON"] = 6] = "SELECT_BUTTON";
24
25
  })(FieldType || (FieldType = {}));
25
26
  export class FiltersComponent {
26
- constructor() {
27
+ constructor(activatedRoute) {
28
+ this.activatedRoute = activatedRoute;
27
29
  this.onSearch = new EventEmitter();
28
30
  this.formBuilded = new EventEmitter();
29
31
  this.fieldTypes = FieldType;
30
32
  this.formGroup = new FormGroup({});
31
- this.filterValue = {};
32
33
  this._fields = [];
33
- this.subscription = new Subscription();
34
+ this.fieldsSubscription = new Subscription();
34
35
  }
35
36
  set fields(_fields) {
36
37
  this._fields = _fields;
37
38
  this.formGroup = new FormGroup({});
39
+ this.fieldsSubscription.unsubscribe();
40
+ this.fieldsSubscription = new Subscription();
38
41
  this.fields?.forEach((field) => {
39
42
  this.formGroup.addControl(field.name, new FormControl({ value: field.defaultValue, disabled: field.readonly }, this.buildValidators(field)));
40
43
  });
44
+ const queryParams = this.activatedRoute.snapshot.queryParams;
45
+ if (Object.keys(queryParams).length) {
46
+ this.formGroup.patchValue(queryParams);
47
+ }
41
48
  this.fields
42
49
  ?.filter((field) => field.dependencies)
43
50
  .forEach((field) => {
44
51
  field.dependencies?.forEach((dependency) => {
45
- this.subscription.add(this.formGroup.get(dependency)?.valueChanges.subscribe((value) => {
52
+ this.fieldsSubscription.add(this.formGroup.get(dependency)?.valueChanges.subscribe((value) => {
46
53
  this.formGroup.get(field.name)?.reset();
47
54
  }));
48
55
  });
@@ -51,6 +58,11 @@ export class FiltersComponent {
51
58
  this.search();
52
59
  }
53
60
  this.formBuilded.emit();
61
+ this.fieldsSubscription.add(this.activatedRoute.queryParams.subscribe((queryParams) => {
62
+ if (Object.keys(queryParams).length) {
63
+ this.formGroup.patchValue(queryParams);
64
+ }
65
+ }));
54
66
  }
55
67
  get fields() {
56
68
  return this._fields;
@@ -60,20 +72,20 @@ export class FiltersComponent {
60
72
  }
61
73
  ngOnInit() { }
62
74
  ngOnDestroy() {
63
- this.subscription.unsubscribe();
75
+ this.fieldsSubscription.unsubscribe();
64
76
  }
65
77
  search() {
66
- this.filterValue = this.formGroup.getRawValue();
67
- Object.keys(this.filterValue).forEach((key) => {
68
- if (this.filterValue[key]?.hasOwnProperty('code')) {
69
- this.filterValue[key] = this.filterValue[key].code;
78
+ const filterValue = this.formGroup.getRawValue();
79
+ Object.keys(filterValue).forEach((key) => {
80
+ if (filterValue[key]?.hasOwnProperty('code')) {
81
+ filterValue[key] = filterValue[key].code;
70
82
  }
71
- if (!ObjectUtil.isValid(this.filterValue[key])) {
83
+ if (!ObjectUtil.isValid(filterValue[key])) {
72
84
  const fieldType = this.fields.find((field) => field.name === key)?.type || FieldType.TEXT;
73
- this.filterValue[key] = [FieldType.DROPDOWN, FieldType.NUMBER].includes(fieldType) ? -1 : '';
85
+ filterValue[key] = [FieldType.DROPDOWN, FieldType.NUMBER].includes(fieldType) ? -1 : '';
74
86
  }
75
87
  });
76
- this.onSearch.emit(this.filterValue);
88
+ this.onSearch.emit(filterValue);
77
89
  }
78
90
  isTextFieldType(field) {
79
91
  return [FieldType.TEXT, FieldType.NUMBER].includes(field.type);
@@ -129,16 +141,16 @@ export class FiltersComponent {
129
141
  return validators;
130
142
  }
131
143
  }
132
- FiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: FiltersComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
133
- FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: FiltersComponent, selector: "vector-filters", inputs: { fields: "fields" }, outputs: { onSearch: "onSearch", formBuilded: "formBuilded" }, ngImport: i0, template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"field.type === fieldTypes.DROPDOWN || field.type === fieldTypes.DYNAMIC_DROPDOWN\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n >\r\n </vector-select-button-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.display-none{display:none!important}\n"], components: [{ type: i1.TextFieldComponent, selector: "vector-text-field", inputs: ["isRequired", "label", "maxlength", "isPassword", "numeric", "decimal", "onlyText", "alphaNumeric", "mask", "autoClear", "rightIcon", "centered", "enableDocumentTypeChoice", "hiddenErrorMessage", "control"], outputs: ["blurEvent", "enterKeyPress", "focusEvent", "onDocumentTypeChange"] }, { type: i2.DropdownFieldComponent, selector: "vector-dropdown-field", inputs: ["options", "isRequired", "control", "label", "service", "paged", "buttonAction", "dependencies", "hiddenErrorMessage", "dynamicFilters", "minLengthToService", "initialLoad"], outputs: ["onFocus"] }, { type: i3.CurrencyFieldComponent, selector: "vector-currency-field", inputs: ["minValue", "maxValue", "placeholder", "control", "outlined", "rounded", "label", "isBankingField", "inputClassName"] }, { type: i4.CalendarComponent, selector: "vector-calendar-field", inputs: ["isRequired", "control", "label", "showCalendarOnFocus", "min", "max", "disabledDates", "disabled", "defaultDate", "hiddenErrorMessage"] }, { type: i5.SelectButtonFieldComponent, selector: "vector-select-button-field", inputs: ["options", "control"] }, { type: i6.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }], directives: [{ type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i8.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i8.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "notHidden": i9.NotHiddenPipe } });
144
+ FiltersComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: FiltersComponent, deps: [{ token: i1.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component });
145
+ FiltersComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.1.3", type: FiltersComponent, selector: "vector-filters", inputs: { fields: "fields" }, outputs: { onSearch: "onSearch", formBuilded: "formBuilded" }, ngImport: i0, template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"field.type === fieldTypes.DROPDOWN || field.type === fieldTypes.DYNAMIC_DROPDOWN\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n >\r\n </vector-select-button-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.display-none{display:none!important}\n"], components: [{ type: i2.TextFieldComponent, selector: "vector-text-field", inputs: ["isRequired", "label", "maxlength", "isPassword", "numeric", "decimal", "onlyText", "alphaNumeric", "mask", "autoClear", "rightIcon", "centered", "enableDocumentTypeChoice", "hiddenErrorMessage", "control"], outputs: ["blurEvent", "enterKeyPress", "focusEvent", "onDocumentTypeChange"] }, { type: i3.DropdownFieldComponent, selector: "vector-dropdown-field", inputs: ["options", "isRequired", "control", "label", "service", "paged", "buttonAction", "dependencies", "hiddenErrorMessage", "dynamicFilters", "minLengthToService", "initialLoad"], outputs: ["onFocus"] }, { type: i4.CurrencyFieldComponent, selector: "vector-currency-field", inputs: ["minValue", "maxValue", "placeholder", "control", "outlined", "rounded", "label", "isBankingField", "inputClassName"] }, { type: i5.CalendarComponent, selector: "vector-calendar-field", inputs: ["isRequired", "control", "label", "showCalendarOnFocus", "min", "max", "disabledDates", "disabled", "defaultDate", "hiddenErrorMessage"] }, { type: i6.SelectButtonFieldComponent, selector: "vector-select-button-field", inputs: ["options", "control"] }, { type: i7.ButtonComponent, selector: "vector-button", inputs: ["disabled", "label", "type", "leftIcon", "rightIcon", "noShadow", "style"], outputs: ["onClick"] }], directives: [{ type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i9.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "notHidden": i10.NotHiddenPipe } });
134
146
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.1.3", ngImport: i0, type: FiltersComponent, decorators: [{
135
147
  type: Component,
136
148
  args: [{ selector: 'vector-filters', template: "<div class=\"grid filter-container\" [ngClass]=\"{ 'display-none': hideFilters }\" [formGroup]=\"formGroup\">\r\n <div *ngFor=\"let field of fields | notHidden\" class=\"field col-12 sm:col-8 {{ getGridClass(field) }}\">\r\n <label>{{ field.label }}</label>\r\n <vector-text-field\r\n *ngIf=\"isTextFieldType(field)\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [mask]=\"field.mask\"\r\n [label]=\"field.placeholder\"\r\n [isRequired]=\"field.required\"\r\n [numeric]=\"field.type === fieldTypes.NUMBER\"\r\n ></vector-text-field>\r\n <vector-dropdown-field\r\n *ngIf=\"field.type === fieldTypes.DROPDOWN || field.type === fieldTypes.DYNAMIC_DROPDOWN\"\r\n [dynamicFilters]=\"field.filterTypes\"\r\n [options]=\"field.options || []\"\r\n [service]=\"field.service\"\r\n [isRequired]=\"field.required\"\r\n [minLengthToService]=\"field.minLengthToService || 0\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [paged]=\"false\"\r\n [dependencies]=\"getFieldDependencies(field)\"\r\n [initialLoad]=\"!!field.defaultValue\"\r\n ></vector-dropdown-field>\r\n <vector-currency-field\r\n *ngIf=\"field.type === fieldTypes.CURRENCY\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [outlined]=\"true\"\r\n ></vector-currency-field>\r\n <vector-calendar-field\r\n *ngIf=\"field.type === fieldTypes.DATE\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [isRequired]=\"field.required\"\r\n [label]=\"field.placeholder || ''\"\r\n ></vector-calendar-field>\r\n <vector-select-button-field\r\n *ngIf=\"field.type === fieldTypes.SELECT_BUTTON\"\r\n [control]=\"formGroup.get(field.name)\"\r\n [options]=\"field.options\"\r\n >\r\n </vector-select-button-field>\r\n </div>\r\n <div class=\"search-button sm:col-4\">\r\n <vector-button\r\n label=\"Pesquisar\"\r\n (click)=\"search()\"\r\n [disabled]=\"!formGroup.valid\"\r\n style=\"float: right; width: 150px\"\r\n ></vector-button>\r\n </div>\r\n</div>\r\n", styles: [".filter-container{align-items:center}.filter-container .field{display:flex;flex-direction:column}.filter-container .search-button{flex:1;padding-right:7px}@media (min-width: 768px){.filter-container .search-button{padding-top:36px}}.display-none{display:none!important}\n"] }]
137
- }], ctorParameters: function () { return []; }, propDecorators: { fields: [{
149
+ }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }]; }, propDecorators: { fields: [{
138
150
  type: Input
139
151
  }], onSearch: [{
140
152
  type: Output
141
153
  }], formBuilded: [{
142
154
  type: Output
143
155
  }] } });
144
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkcy9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHMvZmlsdGVycy9maWx0ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7OztBQUU1QyxNQUFNLENBQU4sSUFBWSxTQVFYO0FBUkQsV0FBWSxTQUFTO0lBQ25CLGlEQUFRLENBQUE7SUFDUix5Q0FBSSxDQUFBO0lBQ0oseUNBQUksQ0FBQTtJQUNKLDZDQUFNLENBQUE7SUFDTixpREFBUSxDQUFBO0lBQ1IsaUVBQWdCLENBQUE7SUFDaEIsMkRBQWEsQ0FBQTtBQUNmLENBQUMsRUFSVyxTQUFTLEtBQVQsU0FBUyxRQVFwQjtBQTZCRCxNQUFNLE9BQU8sZ0JBQWdCO0lBK0MzQjtRQWxCTyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVuQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFNdkMsZUFBVSxHQUFHLFNBQVMsQ0FBQztRQUN2QixjQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsRUFBRSxD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QU8sVUFBVSxDQUFDO0lBQ3BCLENBQUM7OzZHQTVIVSxnQkFBZ0I7aUdBQWhCLGdCQUFnQixtSkM1QzdCLGdqRUFrREE7MkZETmEsZ0JBQWdCO2tCQUw1QixTQUFTOytCQUNFLGdCQUFnQjswRUFNZixNQUFNO3NCQURoQixLQUFLO2dCQTRCQyxRQUFRO3NCQURkLE1BQU07Z0JBR0EsV0FBVztzQkFEakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQmFzZURyb3Bkb3duIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBPYmplY3RVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xyXG5cclxuZXhwb3J0IGVudW0gRmllbGRUeXBlIHtcclxuICBEUk9QRE9XTixcclxuICBURVhULFxyXG4gIERBVEUsXHJcbiAgTlVNQkVSLFxyXG4gIENVUlJFTkNZLFxyXG4gIERZTkFNSUNfRFJPUERPV04sXHJcbiAgU0VMRUNUX0JVVFRPTixcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IEZpZWxkVHlwZTtcclxuICBtaW5MZW5ndGg/OiBudW1iZXI7XHJcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG4gIG1pbj86IG51bWJlcjtcclxuICBtYXg/OiBudW1iZXI7XHJcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBtYXNrPzogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiBMaXN0SXRlbVtdO1xyXG4gIGZpbHRlclR5cGVzPzogTGlzdEl0ZW1bXTtcclxuICBzZXJ2aWNlPzogQmFzZURyb3Bkb3duO1xyXG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICBoaWRkZW4/OiBib29sZWFuO1xyXG4gIGRlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xyXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnIHwgJ2xhcmdlc3QnIHwgJ2Z1bGwnO1xyXG4gIG1pbkxlbmd0aFRvU2VydmljZT86IG51bWJlcjtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndmVjdG9yLWZpbHRlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBmaWVsZHMoX2ZpZWxkczogRmlsdGVyRmllbGRbXSkge1xyXG4gICAgdGhpcy5fZmllbGRzID0gX2ZpZWxkcztcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gICAgdGhpcy5maWVsZHM/LmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLmFkZENvbnRyb2woXHJcbiAgICAgICAgZmllbGQubmFtZSxcclxuICAgICAgICBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogZmllbGQuZGVmYXVsdFZhbHVlLCBkaXNhYmxlZDogZmllbGQucmVhZG9ubHkgfSwgdGhpcy5idWlsZFZhbGlkYXRvcnMoZmllbGQpKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZpZWxkc1xyXG4gICAgICA/LmZpbHRlcigoZmllbGQpID0+IGZpZWxkLmRlcGVuZGVuY2llcylcclxuICAgICAgLmZvckVhY2goKGZpZWxkKSA9PiB7XHJcbiAgICAgICAgZmllbGQuZGVwZW5kZW5jaWVzPy5mb3JFYWNoKChkZXBlbmRlbmN5KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChkZXBlbmRlbmN5KT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSk/LnJlc2V0KCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIGlmICh0aGlzLl9maWVsZHM/Lmxlbmd0aCAmJiB0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xyXG4gICAgICB0aGlzLnNlYXJjaCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5mb3JtQnVpbGRlZC5lbWl0KCk7XHJcbiAgfVxyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBvblNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gIEBPdXRwdXQoKVxyXG4gIHB1YmxpYyBmb3JtQnVpbGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgcHVibGljIGdldCBmaWVsZHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZmllbGRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZpZWxkVHlwZXMgPSBGaWVsZFR5cGU7XHJcbiAgcHVibGljIGZvcm1Hcm91cCA9IG5ldyBGb3JtR3JvdXAoe30pO1xyXG4gIHB1YmxpYyBmaWx0ZXJWYWx1ZTogYW55ID0ge307XHJcbiAgcHJpdmF0ZSBfZmllbGRzOiBGaWx0ZXJGaWVsZFtdID0gW107XHJcbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XHJcblxyXG4gIGdldCBoaWRlRmlsdGVycygpIHtcclxuICAgIHJldHVybiAhdGhpcy5maWVsZHM/LmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaGlkZGVuKS5sZW5ndGg7XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge31cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNlYXJjaCgpIHtcclxuICAgIHRoaXMuZmlsdGVyVmFsdWUgPSB0aGlzLmZvcm1Hcm91cC5nZXRSYXdWYWx1ZSgpO1xyXG4gICAgT2JqZWN0LmtleXModGhpcy5maWx0ZXJWYWx1ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmZpbHRlclZhbHVlW2tleV0/Lmhhc093blByb3BlcnR5KCdjb2RlJykpIHtcclxuICAgICAgICB0aGlzLmZpbHRlclZhbHVlW2tleV0gPSB0aGlzLmZpbHRlclZhbHVlW2tleV0uY29kZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIU9iamVjdFV0aWwuaXNWYWxpZCh0aGlzLmZpbHRlclZhbHVlW2tleV0pKSB7XHJcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gdGhpcy5maWVsZHMuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT09IGtleSk/LnR5cGUgfHwgRmllbGRUeXBlLlRFWFQ7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJWYWx1ZVtrZXldID0gW0ZpZWxkVHlwZS5EUk9QRE9XTiwgRmllbGRUeXBlLk5VTUJFUl0uaW5jbHVkZXMoZmllbGRUeXBlKSA/IC0xIDogJyc7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5vblNlYXJjaC5lbWl0KHRoaXMuZmlsdGVyVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVGV4dEZpZWxkVHlwZShmaWVsZDogRmlsdGVyRmllbGQpIHtcclxuICAgIHJldHVybiBbRmllbGRUeXBlLlRFWFQsIEZpZWxkVHlwZS5OVU1CRVJdLmluY2x1ZGVzKGZpZWxkLnR5cGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZpZWxkRGVwZW5kZW5jaWVzKGZpZWxkOiBGaWx0ZXJGaWVsZCkge1xyXG4gICAgaWYgKCFmaWVsZC5kZXBlbmRlbmNpZXMpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWVsZC5kZXBlbmRlbmNpZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgIGxldCBkZXBWYWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChjdXJyKT8udmFsdWU/LmNvZGU7XHJcbiAgICAgIGlmICghT2JqZWN0VXRpbC5pc1ZhbGlkKGRlcFZhbHVlKSkge1xyXG4gICAgICAgIGRlcFZhbHVlID0gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5wcmV2LFxyXG4gICAgICAgIFtjdXJyXTogZGVwVmFsdWUsXHJcbiAgICAgIH07XHJcbiAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0R3JpZENsYXNzKGZpZWxkOiBGaWx0ZXJGaWVsZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZC5zaXplKSB7XHJcbiAgICAgIGNhc2UgJ3NtYWxsJzpcclxuICAgICAgICByZXR1cm4gJ21kOmNvbC0xJztcclxuICAgICAgY2FzZSAnbWVkaXVtJzpcclxuICAgICAgICByZXR1cm4gJ21kOmNvbC0zJztcclxuICAgICAgY2FzZSAnbGFyZ2UnOlxyXG4gICAgICAgIHJldHVybiAnbWQ6Y29sLTQnO1xyXG4gICAgICBjYXNlICdsYXJnZXN0JzpcclxuICAgICAgICByZXR1cm4gJ21kOmNvbC04JztcclxuICAgICAgY2FzZSAnZnVsbCc6XHJcbiAgICAgICAgcmV0dXJuICdtZDpjb2wtMTInO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnbWQ6Y29sLTQnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFZhbGlkYXRvcnMoZmllbGQ6IEZpbHRlckZpZWxkKTogVmFsaWRhdG9yRm5bXSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XHJcbiAgICBpZiAoZmllbGQucmVxdWlyZWQpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpZWxkLm1pbkxlbmd0aCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoZmllbGQubWluTGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZmllbGQubWF4TGVuZ3RoKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChmaWVsZC5tYXhMZW5ndGgpKTtcclxuICAgIH1cclxuICAgIGlmIChmaWVsZC5taW4pIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKGZpZWxkLm1pbikpO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpZWxkLm1heCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXgoZmllbGQubWF4KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdyaWQgZmlsdGVyLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsgJ2Rpc3BsYXktbm9uZSc6IGhpZGVGaWx0ZXJzIH1cIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkcyB8IG5vdEhpZGRlblwiIGNsYXNzPVwiZmllbGQgY29sLTEyIHNtOmNvbC04IHt7IGdldEdyaWRDbGFzcyhmaWVsZCkgfX1cIj5cclxuICAgIDxsYWJlbD57eyBmaWVsZC5sYWJlbCB9fTwvbGFiZWw+XHJcbiAgICA8dmVjdG9yLXRleHQtZmllbGRcclxuICAgICAgKm5nSWY9XCJpc1RleHRGaWVsZFR5cGUoZmllbGQpXCJcclxuICAgICAgW2NvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKVwiXHJcbiAgICAgIFttYXNrXT1cImZpZWxkLm1hc2tcIlxyXG4gICAgICBbbGFiZWxdPVwiZmllbGQucGxhY2Vob2xkZXJcIlxyXG4gICAgICBbaXNSZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiXHJcbiAgICAgIFtudW1lcmljXT1cImZpZWxkLnR5cGUgPT09IGZpZWxkVHlwZXMuTlVNQkVSXCJcclxuICAgID48L3ZlY3Rvci10ZXh0LWZpZWxkPlxyXG4gICAgPHZlY3Rvci1kcm9wZG93bi1maWVsZFxyXG4gICAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09IGZpZWxkVHlwZXMuRFJPUERPV04gfHwgZmllbGQudHlwZSA9PT0gZmllbGRUeXBlcy5EWU5BTUlDX0RST1BET1dOXCJcclxuICAgICAgW2R5bmFtaWNGaWx0ZXJzXT1cImZpZWxkLmZpbHRlclR5cGVzXCJcclxuICAgICAgW29wdGlvbnNdPVwiZmllbGQub3B0aW9ucyB8fCBbXVwiXHJcbiAgICAgIFtzZXJ2aWNlXT1cImZpZWxkLnNlcnZpY2VcIlxyXG4gICAgICBbaXNSZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiXHJcbiAgICAgIFttaW5MZW5ndGhUb1NlcnZpY2VdPVwiZmllbGQubWluTGVuZ3RoVG9TZXJ2aWNlIHx8IDBcIlxyXG4gICAgICBbY29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpXCJcclxuICAgICAgW3BhZ2VkXT1cImZhbHNlXCJcclxuICAgICAgW2RlcGVuZGVuY2llc109XCJnZXRGaWVsZERlcGVuZGVuY2llcyhmaWVsZClcIlxyXG4gICAgICBbaW5pdGlhbExvYWRdPVwiISFmaWVsZC5kZWZhdWx0VmFsdWVcIlxyXG4gICAgPjwvdmVjdG9yLWRyb3Bkb3duLWZpZWxkPlxyXG4gICAgPHZlY3Rvci1jdXJyZW5jeS1maWVsZFxyXG4gICAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09IGZpZWxkVHlwZXMuQ1VSUkVOQ1lcIlxyXG4gICAgICBbY29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpXCJcclxuICAgICAgW291dGxpbmVkXT1cInRydWVcIlxyXG4gICAgPjwvdmVjdG9yLWN1cnJlbmN5LWZpZWxkPlxyXG4gICAgPHZlY3Rvci1jYWxlbmRhci1maWVsZFxyXG4gICAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09IGZpZWxkVHlwZXMuREFURVwiXHJcbiAgICAgIFtjb250cm9sXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSlcIlxyXG4gICAgICBbaXNSZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiXHJcbiAgICAgIFtsYWJlbF09XCJmaWVsZC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICA+PC92ZWN0b3ItY2FsZW5kYXItZmllbGQ+XHJcbiAgICA8dmVjdG9yLXNlbGVjdC1idXR0b24tZmllbGRcclxuICAgICAgKm5nSWY9XCJmaWVsZC50eXBlID09PSBmaWVsZFR5cGVzLlNFTEVDVF9CVVRUT05cIlxyXG4gICAgICBbY29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpXCJcclxuICAgICAgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXHJcbiAgICA+XHJcbiAgICA8L3ZlY3Rvci1zZWxlY3QtYnV0dG9uLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtYnV0dG9uIHNtOmNvbC00XCI+XHJcbiAgICA8dmVjdG9yLWJ1dHRvblxyXG4gICAgICBsYWJlbD1cIlBlc3F1aXNhclwiXHJcbiAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhZm9ybUdyb3VwLnZhbGlkXCJcclxuICAgICAgc3R5bGU9XCJmbG9hdDogcmlnaHQ7IHdpZHRoOiAxNTBweFwiXHJcbiAgICA+PC92ZWN0b3ItYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtdmVjdG9yLWNvbXBvbmVudHMvc3JjL2xpYi9jb21wb25lbnRzL2ZpZWxkcy9maWx0ZXJzL2ZpbHRlcnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXZlY3Rvci1jb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9maWVsZHMvZmlsdGVycy9maWx0ZXJzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFGLE9BQU8sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFlLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWpGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFFNUMsTUFBTSxDQUFOLElBQVksU0FRWDtBQVJELFdBQVksU0FBUztJQUNuQixpREFBUSxDQUFBO0lBQ1IseUNBQUksQ0FBQTtJQUNKLHlDQUFJLENBQUE7SUFDSiw2Q0FBTSxDQUFBO0lBQ04saURBQVEsQ0FBQTtJQUNSLGlFQUFnQixDQUFBO0lBQ2hCLDJEQUFhLENBQUE7QUFDZixDQUFDLEVBUlcsU0FBUyxLQUFULFNBQVMsUUFRcEI7QUE2QkQsTUFBTSxPQUFPLGdCQUFnQjtJQStEM0IsWUFBb0IsY0FBOEI7UUFBOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBakIzQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVuQyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFNdkMsZUFBVSxHQUFHLFNBQVMs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SSxLQUFLLENBQUMsU0FBUyxFQUFFO1lBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztTQUN4RDtRQUNELElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDeEQ7UUFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDYixVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDYixVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLFVBQVUsQ0FBQztJQUNwQixDQUFDOzs2R0E1SVUsZ0JBQWdCO2lHQUFoQixnQkFBZ0IsbUpDN0M3QixnakVBa0RBOzJGRExhLGdCQUFnQjtrQkFMNUIsU0FBUzsrQkFDRSxnQkFBZ0I7cUdBTWYsTUFBTTtzQkFEaEIsS0FBSztnQkE2Q0MsUUFBUTtzQkFEZCxNQUFNO2dCQUdBLFdBQVc7c0JBRGpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgQmFzZURyb3Bkb3duIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xyXG5pbXBvcnQgeyBPYmplY3RVdGlsIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMnO1xyXG5cclxuZXhwb3J0IGVudW0gRmllbGRUeXBlIHtcclxuICBEUk9QRE9XTixcclxuICBURVhULFxyXG4gIERBVEUsXHJcbiAgTlVNQkVSLFxyXG4gIENVUlJFTkNZLFxyXG4gIERZTkFNSUNfRFJPUERPV04sXHJcbiAgU0VMRUNUX0JVVFRPTixcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgRmlsdGVyRmllbGQgPSB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHR5cGU6IEZpZWxkVHlwZTtcclxuICBtaW5MZW5ndGg/OiBudW1iZXI7XHJcbiAgbWF4TGVuZ3RoPzogbnVtYmVyO1xyXG4gIG1pbj86IG51bWJlcjtcclxuICBtYXg/OiBudW1iZXI7XHJcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xyXG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcclxuICBsYWJlbD86IHN0cmluZztcclxuICBtYXNrPzogc3RyaW5nO1xyXG4gIG9wdGlvbnM/OiBMaXN0SXRlbVtdO1xyXG4gIGZpbHRlclR5cGVzPzogTGlzdEl0ZW1bXTtcclxuICBzZXJ2aWNlPzogQmFzZURyb3Bkb3duO1xyXG4gIGRlZmF1bHRWYWx1ZT86IGFueTtcclxuICBwbGFjZWhvbGRlcj86IHN0cmluZztcclxuICBoaWRkZW4/OiBib29sZWFuO1xyXG4gIGRlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xyXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnIHwgJ2xhcmdlc3QnIHwgJ2Z1bGwnO1xyXG4gIG1pbkxlbmd0aFRvU2VydmljZT86IG51bWJlcjtcclxufTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAndmVjdG9yLWZpbHRlcnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9maWx0ZXJzLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9maWx0ZXJzLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIHNldCBmaWVsZHMoX2ZpZWxkczogRmlsdGVyRmllbGRbXSkge1xyXG4gICAgdGhpcy5fZmllbGRzID0gX2ZpZWxkcztcclxuICAgIHRoaXMuZm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7fSk7XHJcblxyXG4gICAgdGhpcy5maWVsZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZmllbGRzU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG5cclxuICAgIHRoaXMuZmllbGRzPy5mb3JFYWNoKChmaWVsZCkgPT4ge1xyXG4gICAgICB0aGlzLmZvcm1Hcm91cC5hZGRDb250cm9sKFxyXG4gICAgICAgIGZpZWxkLm5hbWUsXHJcbiAgICAgICAgbmV3IEZvcm1Db250cm9sKHsgdmFsdWU6IGZpZWxkLmRlZmF1bHRWYWx1ZSwgZGlzYWJsZWQ6IGZpZWxkLnJlYWRvbmx5IH0sIHRoaXMuYnVpbGRWYWxpZGF0b3JzKGZpZWxkKSlcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcztcclxuICAgIGlmIChPYmplY3Qua2V5cyhxdWVyeVBhcmFtcykubGVuZ3RoKSB7XHJcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnBhdGNoVmFsdWUocXVlcnlQYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZmllbGRzXHJcbiAgICAgID8uZmlsdGVyKChmaWVsZCkgPT4gZmllbGQuZGVwZW5kZW5jaWVzKVxyXG4gICAgICAuZm9yRWFjaCgoZmllbGQpID0+IHtcclxuICAgICAgICBmaWVsZC5kZXBlbmRlbmNpZXM/LmZvckVhY2goKGRlcGVuZGVuY3kpID0+IHtcclxuICAgICAgICAgIHRoaXMuZmllbGRzU3Vic2NyaXB0aW9uLmFkZChcclxuICAgICAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KGRlcGVuZGVuY3kpPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKT8ucmVzZXQoKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgaWYgKHRoaXMuX2ZpZWxkcz8ubGVuZ3RoICYmIHRoaXMuZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmZvcm1CdWlsZGVkLmVtaXQoKTtcclxuXHJcbiAgICB0aGlzLmZpZWxkc1N1YnNjcmlwdGlvbi5hZGQoXHJcbiAgICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMuc3Vic2NyaWJlKChxdWVyeVBhcmFtcykgPT4ge1xyXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhxdWVyeVBhcmFtcykubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHF1ZXJ5UGFyYW1zKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgb25TZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KClcclxuICBwdWJsaWMgZm9ybUJ1aWxkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIHB1YmxpYyBnZXQgZmllbGRzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmaWVsZFR5cGVzID0gRmllbGRUeXBlO1xyXG4gIHB1YmxpYyBmb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwKHt9KTtcclxuICBwcml2YXRlIF9maWVsZHM6IEZpbHRlckZpZWxkW10gPSBbXTtcclxuICBwcml2YXRlIGZpZWxkc1N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuXHJcbiAgZ2V0IGhpZGVGaWx0ZXJzKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLmZpZWxkcz8uZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5oaWRkZW4pLmxlbmd0aDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5maWVsZHNTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZWFyY2goKSB7XHJcbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldFJhd1ZhbHVlKCk7XHJcbiAgICBPYmplY3Qua2V5cyhmaWx0ZXJWYWx1ZSkuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgIGlmIChmaWx0ZXJWYWx1ZVtrZXldPy5oYXNPd25Qcm9wZXJ0eSgnY29kZScpKSB7XHJcbiAgICAgICAgZmlsdGVyVmFsdWVba2V5XSA9IGZpbHRlclZhbHVlW2tleV0uY29kZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIU9iamVjdFV0aWwuaXNWYWxpZChmaWx0ZXJWYWx1ZVtrZXldKSkge1xyXG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IHRoaXMuZmllbGRzLmZpbmQoKGZpZWxkKSA9PiBmaWVsZC5uYW1lID09PSBrZXkpPy50eXBlIHx8IEZpZWxkVHlwZS5URVhUO1xyXG4gICAgICAgIGZpbHRlclZhbHVlW2tleV0gPSBbRmllbGRUeXBlLkRST1BET1dOLCBGaWVsZFR5cGUuTlVNQkVSXS5pbmNsdWRlcyhmaWVsZFR5cGUpID8gLTEgOiAnJztcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm9uU2VhcmNoLmVtaXQoZmlsdGVyVmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGlzVGV4dEZpZWxkVHlwZShmaWVsZDogRmlsdGVyRmllbGQpIHtcclxuICAgIHJldHVybiBbRmllbGRUeXBlLlRFWFQsIEZpZWxkVHlwZS5OVU1CRVJdLmluY2x1ZGVzKGZpZWxkLnR5cGUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZpZWxkRGVwZW5kZW5jaWVzKGZpZWxkOiBGaWx0ZXJGaWVsZCkge1xyXG4gICAgaWYgKCFmaWVsZC5kZXBlbmRlbmNpZXMpIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIHJldHVybiBmaWVsZC5kZXBlbmRlbmNpZXMucmVkdWNlKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgIGxldCBkZXBWYWx1ZSA9IHRoaXMuZm9ybUdyb3VwLmdldChjdXJyKT8udmFsdWU/LmNvZGU7XHJcbiAgICAgIGlmICghT2JqZWN0VXRpbC5pc1ZhbGlkKGRlcFZhbHVlKSkge1xyXG4gICAgICAgIGRlcFZhbHVlID0gLTE7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5wcmV2LFxyXG4gICAgICAgIFtjdXJyXTogZGVwVmFsdWUsXHJcbiAgICAgIH07XHJcbiAgICB9LCB7fSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0R3JpZENsYXNzKGZpZWxkOiBGaWx0ZXJGaWVsZCkge1xyXG4gICAgc3dpdGNoIChmaWVsZC5zaXplKSB7XHJcbiAgICAgIGNhc2UgJ3NtYWxsJzpcclxuICAgICAgICByZXR1cm4gJ21kOmNvbC0xJztcclxuICAgICAgY2FzZSAnbWVkaXVtJzpcclxuICAgICAgICByZXR1cm4gJ21kOmNvbC0zJztcclxuICAgICAgY2FzZSAnbGFyZ2UnOlxyXG4gICAgICAgIHJldHVybiAnbWQ6Y29sLTQnO1xyXG4gICAgICBjYXNlICdsYXJnZXN0JzpcclxuICAgICAgICByZXR1cm4gJ21kOmNvbC04JztcclxuICAgICAgY2FzZSAnZnVsbCc6XHJcbiAgICAgICAgcmV0dXJuICdtZDpjb2wtMTInO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiAnbWQ6Y29sLTQnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBidWlsZFZhbGlkYXRvcnMoZmllbGQ6IEZpbHRlckZpZWxkKTogVmFsaWRhdG9yRm5bXSB7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzID0gW107XHJcbiAgICBpZiAoZmllbGQucmVxdWlyZWQpIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpZWxkLm1pbkxlbmd0aCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5taW5MZW5ndGgoZmllbGQubWluTGVuZ3RoKSk7XHJcbiAgICB9XHJcbiAgICBpZiAoZmllbGQubWF4TGVuZ3RoKSB7XHJcbiAgICAgIHZhbGlkYXRvcnMucHVzaChWYWxpZGF0b3JzLm1heExlbmd0aChmaWVsZC5tYXhMZW5ndGgpKTtcclxuICAgIH1cclxuICAgIGlmIChmaWVsZC5taW4pIHtcclxuICAgICAgdmFsaWRhdG9ycy5wdXNoKFZhbGlkYXRvcnMubWluKGZpZWxkLm1pbikpO1xyXG4gICAgfVxyXG4gICAgaWYgKGZpZWxkLm1heCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5tYXgoZmllbGQubWF4KSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsaWRhdG9ycztcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImdyaWQgZmlsdGVyLWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cInsgJ2Rpc3BsYXktbm9uZSc6IGhpZGVGaWx0ZXJzIH1cIiBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiPlxyXG4gIDxkaXYgKm5nRm9yPVwibGV0IGZpZWxkIG9mIGZpZWxkcyB8IG5vdEhpZGRlblwiIGNsYXNzPVwiZmllbGQgY29sLTEyIHNtOmNvbC04IHt7IGdldEdyaWRDbGFzcyhmaWVsZCkgfX1cIj5cclxuICAgIDxsYWJlbD57eyBmaWVsZC5sYWJlbCB9fTwvbGFiZWw+XHJcbiAgICA8dmVjdG9yLXRleHQtZmllbGRcclxuICAgICAgKm5nSWY9XCJpc1RleHRGaWVsZFR5cGUoZmllbGQpXCJcclxuICAgICAgW2NvbnRyb2xdPVwiZm9ybUdyb3VwLmdldChmaWVsZC5uYW1lKVwiXHJcbiAgICAgIFttYXNrXT1cImZpZWxkLm1hc2tcIlxyXG4gICAgICBbbGFiZWxdPVwiZmllbGQucGxhY2Vob2xkZXJcIlxyXG4gICAgICBbaXNSZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiXHJcbiAgICAgIFtudW1lcmljXT1cImZpZWxkLnR5cGUgPT09IGZpZWxkVHlwZXMuTlVNQkVSXCJcclxuICAgID48L3ZlY3Rvci10ZXh0LWZpZWxkPlxyXG4gICAgPHZlY3Rvci1kcm9wZG93bi1maWVsZFxyXG4gICAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09IGZpZWxkVHlwZXMuRFJPUERPV04gfHwgZmllbGQudHlwZSA9PT0gZmllbGRUeXBlcy5EWU5BTUlDX0RST1BET1dOXCJcclxuICAgICAgW2R5bmFtaWNGaWx0ZXJzXT1cImZpZWxkLmZpbHRlclR5cGVzXCJcclxuICAgICAgW29wdGlvbnNdPVwiZmllbGQub3B0aW9ucyB8fCBbXVwiXHJcbiAgICAgIFtzZXJ2aWNlXT1cImZpZWxkLnNlcnZpY2VcIlxyXG4gICAgICBbaXNSZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiXHJcbiAgICAgIFttaW5MZW5ndGhUb1NlcnZpY2VdPVwiZmllbGQubWluTGVuZ3RoVG9TZXJ2aWNlIHx8IDBcIlxyXG4gICAgICBbY29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpXCJcclxuICAgICAgW3BhZ2VkXT1cImZhbHNlXCJcclxuICAgICAgW2RlcGVuZGVuY2llc109XCJnZXRGaWVsZERlcGVuZGVuY2llcyhmaWVsZClcIlxyXG4gICAgICBbaW5pdGlhbExvYWRdPVwiISFmaWVsZC5kZWZhdWx0VmFsdWVcIlxyXG4gICAgPjwvdmVjdG9yLWRyb3Bkb3duLWZpZWxkPlxyXG4gICAgPHZlY3Rvci1jdXJyZW5jeS1maWVsZFxyXG4gICAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09IGZpZWxkVHlwZXMuQ1VSUkVOQ1lcIlxyXG4gICAgICBbY29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpXCJcclxuICAgICAgW291dGxpbmVkXT1cInRydWVcIlxyXG4gICAgPjwvdmVjdG9yLWN1cnJlbmN5LWZpZWxkPlxyXG4gICAgPHZlY3Rvci1jYWxlbmRhci1maWVsZFxyXG4gICAgICAqbmdJZj1cImZpZWxkLnR5cGUgPT09IGZpZWxkVHlwZXMuREFURVwiXHJcbiAgICAgIFtjb250cm9sXT1cImZvcm1Hcm91cC5nZXQoZmllbGQubmFtZSlcIlxyXG4gICAgICBbaXNSZXF1aXJlZF09XCJmaWVsZC5yZXF1aXJlZFwiXHJcbiAgICAgIFtsYWJlbF09XCJmaWVsZC5wbGFjZWhvbGRlciB8fCAnJ1wiXHJcbiAgICA+PC92ZWN0b3ItY2FsZW5kYXItZmllbGQ+XHJcbiAgICA8dmVjdG9yLXNlbGVjdC1idXR0b24tZmllbGRcclxuICAgICAgKm5nSWY9XCJmaWVsZC50eXBlID09PSBmaWVsZFR5cGVzLlNFTEVDVF9CVVRUT05cIlxyXG4gICAgICBbY29udHJvbF09XCJmb3JtR3JvdXAuZ2V0KGZpZWxkLm5hbWUpXCJcclxuICAgICAgW29wdGlvbnNdPVwiZmllbGQub3B0aW9uc1wiXHJcbiAgICA+XHJcbiAgICA8L3ZlY3Rvci1zZWxlY3QtYnV0dG9uLWZpZWxkPlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzZWFyY2gtYnV0dG9uIHNtOmNvbC00XCI+XHJcbiAgICA8dmVjdG9yLWJ1dHRvblxyXG4gICAgICBsYWJlbD1cIlBlc3F1aXNhclwiXHJcbiAgICAgIChjbGljayk9XCJzZWFyY2goKVwiXHJcbiAgICAgIFtkaXNhYmxlZF09XCIhZm9ybUdyb3VwLnZhbGlkXCJcclxuICAgICAgc3R5bGU9XCJmbG9hdDogcmlnaHQ7IHdpZHRoOiAxNTBweFwiXHJcbiAgICA+PC92ZWN0b3ItYnV0dG9uPlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuIl19