@ecodev/natural 61.0.1 → 61.0.2
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/esm2022/lib/classes/abstract-detail.mjs +36 -33
- package/esm2022/lib/classes/abstract-editable-list.mjs +8 -6
- package/esm2022/lib/classes/abstract-list.mjs +74 -55
- package/esm2022/lib/classes/abstract-navigable-list.mjs +9 -9
- package/esm2022/lib/classes/cumulative-changes.mjs +3 -5
- package/esm2022/lib/classes/data-source.mjs +3 -2
- package/esm2022/lib/classes/query-variable-manager.mjs +3 -3
- package/esm2022/lib/directives/http-prefix.directive.mjs +4 -6
- package/esm2022/lib/modules/alert/alert.service.mjs +5 -7
- package/esm2022/lib/modules/alert/confirm.component.mjs +4 -6
- package/esm2022/lib/modules/avatar/component/avatar.component.mjs +21 -19
- package/esm2022/lib/modules/avatar/service/avatar.service.mjs +22 -24
- package/esm2022/lib/modules/avatar/sources/source.mjs +2 -1
- package/esm2022/lib/modules/columns-picker/columns-picker.component.mjs +17 -18
- package/esm2022/lib/modules/common/directives/background-density.directive.mjs +4 -6
- package/esm2022/lib/modules/common/directives/linkable-tab.directive.mjs +12 -12
- package/esm2022/lib/modules/common/directives/src-density.directive.mjs +4 -6
- package/esm2022/lib/modules/common/pipes/capitalize.pipe.mjs +3 -3
- package/esm2022/lib/modules/common/pipes/ellipsis.pipe.mjs +3 -3
- package/esm2022/lib/modules/common/pipes/enum.pipe.mjs +4 -6
- package/esm2022/lib/modules/common/pipes/time-ago.pipe.mjs +4 -3
- package/esm2022/lib/modules/common/services/memory-storage.mjs +4 -6
- package/esm2022/lib/modules/common/services/seo.service.mjs +12 -11
- package/esm2022/lib/modules/detail-header/detail-header.component.mjs +38 -33
- package/esm2022/lib/modules/dialog-trigger/dialog-trigger.component.mjs +8 -6
- package/esm2022/lib/modules/dropdown-components/abstract-association-select-component.directive.mjs +13 -12
- package/esm2022/lib/modules/dropdown-components/type-boolean/type-boolean.component.mjs +3 -3
- package/esm2022/lib/modules/dropdown-components/type-date/type-date.component.mjs +20 -19
- package/esm2022/lib/modules/dropdown-components/type-date-range/type-date-range.component.mjs +18 -17
- package/esm2022/lib/modules/dropdown-components/type-hierarchic-selector/type-hierarchic-selector.component.mjs +3 -3
- package/esm2022/lib/modules/dropdown-components/type-natural-select/type-natural-select.component.mjs +3 -3
- package/esm2022/lib/modules/dropdown-components/type-number/type-number.component.mjs +19 -18
- package/esm2022/lib/modules/dropdown-components/type-options/type-options.component.mjs +11 -9
- package/esm2022/lib/modules/dropdown-components/type-select/type-select.component.mjs +21 -19
- package/esm2022/lib/modules/dropdown-components/type-text/type-text.component.mjs +7 -7
- package/esm2022/lib/modules/file/abstract-file.mjs +51 -47
- package/esm2022/lib/modules/file/component/file.component.mjs +44 -31
- package/esm2022/lib/modules/file/file-drop.directive.mjs +10 -13
- package/esm2022/lib/modules/file/file-select.directive.mjs +9 -12
- package/esm2022/lib/modules/file/file.service.mjs +13 -15
- package/esm2022/lib/modules/fixed-button/fixed-button.component.mjs +7 -8
- package/esm2022/lib/modules/fixed-button-detail/fixed-button-detail.component.mjs +9 -7
- package/esm2022/lib/modules/hierarchic-selector/classes/flat-node.mjs +8 -2
- package/esm2022/lib/modules/hierarchic-selector/classes/model-node.mjs +4 -2
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.component.mjs +63 -46
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector/hierarchic-selector.service.mjs +16 -18
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.component.mjs +12 -4
- package/esm2022/lib/modules/hierarchic-selector/hierarchic-selector-dialog/hierarchic-selector-dialog.service.mjs +4 -6
- package/esm2022/lib/modules/icon/icon.directive.mjs +9 -9
- package/esm2022/lib/modules/logger/error-handler.mjs +7 -7
- package/esm2022/lib/modules/matomo/matomo.service.mjs +10 -9
- package/esm2022/lib/modules/panels/abstract-panel.mjs +23 -19
- package/esm2022/lib/modules/panels/panels.component.mjs +4 -4
- package/esm2022/lib/modules/panels/panels.service.mjs +49 -41
- package/esm2022/lib/modules/relations/relations.component.mjs +64 -35
- package/esm2022/lib/modules/search/dropdown-container/dropdown-container.component.mjs +15 -13
- package/esm2022/lib/modules/search/dropdown-container/dropdown-ref.mjs +4 -2
- package/esm2022/lib/modules/search/dropdown-container/dropdown.service.mjs +5 -7
- package/esm2022/lib/modules/search/facet-selector/facet-selector.component.mjs +9 -11
- package/esm2022/lib/modules/search/group/group.component.mjs +12 -11
- package/esm2022/lib/modules/search/input/input.component.mjs +77 -63
- package/esm2022/lib/modules/search/search/search.component.mjs +29 -31
- package/esm2022/lib/modules/select/abstract-select.component.mjs +66 -39
- package/esm2022/lib/modules/select/select/select.component.mjs +51 -48
- package/esm2022/lib/modules/select/select-enum/select-enum.component.mjs +21 -8
- package/esm2022/lib/modules/select/select-hierarchic/select-hierarchic.component.mjs +27 -19
- package/esm2022/lib/modules/sidenav/sidenav/sidenav.component.mjs +3 -3
- package/esm2022/lib/modules/sidenav/sidenav-container/sidenav-container.component.mjs +30 -24
- package/esm2022/lib/modules/sidenav/sidenav-content/sidenav-content.component.mjs +3 -3
- package/esm2022/lib/modules/sidenav/sidenav-stack.service.mjs +13 -15
- package/esm2022/lib/modules/sidenav/sidenav.service.mjs +42 -44
- package/esm2022/lib/modules/stamp/stamp.component.mjs +4 -3
- package/esm2022/lib/modules/table-button/table-button.component.mjs +16 -13
- package/esm2022/lib/services/abstract-model.service.mjs +17 -7
- package/esm2022/lib/services/debounce.service.mjs +7 -9
- package/esm2022/lib/services/enum.service.mjs +4 -6
- package/esm2022/lib/services/link-mutation.service.mjs +8 -6
- package/esm2022/lib/services/persistence.service.mjs +6 -8
- package/esm2022/lib/services/swiss-parsing-date-adapter.service.mjs +3 -3
- package/fesm2022/ecodev-natural.mjs +1234 -1051
- package/fesm2022/ecodev-natural.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -7,13 +7,12 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
import * as i1 from "@angular/material/button";
|
|
8
8
|
import * as i2 from "@angular/material/icon";
|
|
9
9
|
export class NaturalFixedButtonComponent {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
static
|
|
16
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.3", type: NaturalFixedButtonComponent, isStandalone: true, selector: "natural-fixed-button", inputs: { icon: "icon", link: "link", color: "color", disabled: "disabled" }, ngImport: i0, template: "<button [color]=\"color\" [disabled]=\"disabled\" [routerLink]=\"link\" mat-fab>\n <mat-icon [naturalIcon]=\"icon\" />\n</button>\n", styles: [":host{position:fixed!important;right:32px;bottom:32px;z-index:999}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatFabButton, selector: "button[mat-fab]", inputs: ["extended"], exportAs: ["matButton"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }] }); }
|
|
10
|
+
icon;
|
|
11
|
+
link = [];
|
|
12
|
+
color = 'accent';
|
|
13
|
+
disabled = false;
|
|
14
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalFixedButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
15
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.3", type: NaturalFixedButtonComponent, isStandalone: true, selector: "natural-fixed-button", inputs: { icon: "icon", link: "link", color: "color", disabled: "disabled" }, ngImport: i0, template: "<button [color]=\"color\" [disabled]=\"disabled\" [routerLink]=\"link\" mat-fab>\n <mat-icon [naturalIcon]=\"icon\" />\n</button>\n", styles: [":host{position:fixed!important;right:32px;bottom:32px;z-index:999}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i1.MatFabButton, selector: "button[mat-fab]", inputs: ["extended"], exportAs: ["matButton"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }] });
|
|
17
16
|
}
|
|
18
17
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalFixedButtonComponent, decorators: [{
|
|
19
18
|
type: Component,
|
|
@@ -28,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
|
|
|
28
27
|
}], disabled: [{
|
|
29
28
|
type: Input
|
|
30
29
|
}] } });
|
|
31
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2ZpeGVkLWJ1dHRvbi9maXhlZC1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvZml4ZWQtYnV0dG9uL2ZpeGVkLWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUUvQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3JELE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQzs7OztBQVN6RCxNQUFNLE9BQU8sMkJBQTJCO0lBQ0osSUFBSSxDQUFVO0lBQzlCLElBQUksR0FBNkIsRUFBRSxDQUFDO0lBQ3BDLEtBQUssR0FBaUIsUUFBUSxDQUFDO0lBQy9CLFFBQVEsR0FBRyxLQUFLLENBQUM7dUdBSnhCLDJCQUEyQjsyRkFBM0IsMkJBQTJCLDhKQ2R4Qyx3SUFHQSw2SERTYyxlQUFlLHlKQUFFLFVBQVUsbU9BQUUsYUFBYSxvTEFBRSxvQkFBb0I7OzJGQUVqRSwyQkFBMkI7a0JBUHZDLFNBQVM7K0JBQ0ksc0JBQXNCLGNBR3BCLElBQUksV0FDUCxDQUFDLGVBQWUsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLG9CQUFvQixDQUFDOzhCQUczQyxJQUFJO3NCQUFuQyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFDUCxJQUFJO3NCQUFuQixLQUFLO2dCQUNVLEtBQUs7c0JBQXBCLEtBQUs7Z0JBQ1UsUUFBUTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1RoZW1lUGFsZXR0ZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge1JvdXRlckxpbmt9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge01hdEJ1dHRvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWZpeGVkLWJ1dHRvbicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpeGVkLWJ1dHRvbi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmw6ICcuL2ZpeGVkLWJ1dHRvbi5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTWF0QnV0dG9uTW9kdWxlLCBSb3V0ZXJMaW5rLCBNYXRJY29uTW9kdWxlLCBOYXR1cmFsSWNvbkRpcmVjdGl2ZV0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxGaXhlZEJ1dHRvbkNvbXBvbmVudCB7XG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pIHB1YmxpYyBpY29uITogc3RyaW5nO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsaW5rOiBSb3V0ZXJMaW5rWydyb3V0ZXJMaW5rJ10gPSBbXTtcbiAgICBASW5wdXQoKSBwdWJsaWMgY29sb3I6IFRoZW1lUGFsZXR0ZSA9ICdhY2NlbnQnO1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZCA9IGZhbHNlO1xufVxuIiwiPGJ1dHRvbiBbY29sb3JdPVwiY29sb3JcIiBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcm91dGVyTGlua109XCJsaW5rXCIgbWF0LWZhYj5cbiAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cImljb25cIiAvPlxuPC9idXR0b24+XG4iXX0=
|
|
@@ -6,6 +6,8 @@ import { NaturalFixedButtonComponent } from '../fixed-button/fixed-button.compon
|
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
import * as i1 from "@angular/material/tooltip";
|
|
8
8
|
export class NaturalFixedButtonDetailComponent {
|
|
9
|
+
canChange = true;
|
|
10
|
+
isCreation = false;
|
|
9
11
|
get model() {
|
|
10
12
|
return this._model;
|
|
11
13
|
}
|
|
@@ -16,11 +18,11 @@ export class NaturalFixedButtonDetailComponent {
|
|
|
16
18
|
this.canChange = false;
|
|
17
19
|
}
|
|
18
20
|
}
|
|
21
|
+
_model;
|
|
22
|
+
form;
|
|
23
|
+
create = new EventEmitter();
|
|
24
|
+
delete = new EventEmitter();
|
|
19
25
|
constructor() {
|
|
20
|
-
this.canChange = true;
|
|
21
|
-
this.isCreation = false;
|
|
22
|
-
this.create = new EventEmitter();
|
|
23
|
-
this.delete = new EventEmitter();
|
|
24
26
|
const route = inject(ActivatedRoute);
|
|
25
27
|
route.params.pipe(takeUntilDestroyed()).subscribe(() => (this.canChange = true));
|
|
26
28
|
}
|
|
@@ -34,8 +36,8 @@ export class NaturalFixedButtonDetailComponent {
|
|
|
34
36
|
this.delete.emit();
|
|
35
37
|
}
|
|
36
38
|
}
|
|
37
|
-
static
|
|
38
|
-
static
|
|
39
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalFixedButtonDetailComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
40
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: NaturalFixedButtonDetailComponent, isStandalone: true, selector: "natural-fixed-button-detail", inputs: { model: "model", form: "form" }, outputs: { create: "create", delete: "delete" }, ngImport: i0, template: "@if (isCreation) {\n <natural-fixed-button\n (click)=\"clickCreate()\"\n [disabled]=\"form.disabled\"\n [color]=\"form.valid ? 'accent' : 'warn'\"\n class=\"detail-speed-dial\"\n icon=\"save\"\n />\n}\n\n@if (!isCreation && (!model.permissions || model.permissions.delete)) {\n <natural-fixed-button\n (click)=\"clickDelete()\"\n [disabled]=\"form.disabled\"\n class=\"detail-speed-dial\"\n color=\"warn\"\n icon=\"delete_forever\"\n i18n-matTooltip\n matTooltip=\"Supprimer d\u00E9finitivement\"\n matTooltipPosition=\"left\"\n />\n}\n", styles: [""], dependencies: [{ kind: "component", type: NaturalFixedButtonComponent, selector: "natural-fixed-button", inputs: ["icon", "link", "color", "disabled"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }] });
|
|
39
41
|
}
|
|
40
42
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalFixedButtonDetailComponent, decorators: [{
|
|
41
43
|
type: Component,
|
|
@@ -51,4 +53,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
|
|
|
51
53
|
}], delete: [{
|
|
52
54
|
type: Output
|
|
53
55
|
}] } });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWQtYnV0dG9uLWRldGFpbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9maXhlZC1idXR0b24tZGV0YWlsL2ZpeGVkLWJ1dHRvbi1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvZml4ZWQtYnV0dG9uLWRldGFpbC9maXhlZC1idXR0b24tZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRTdFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUMsa0JBQWtCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSx3Q0FBd0MsQ0FBQzs7O0FBZ0JuRixNQUFNLE9BQU8saUNBQWlDO0lBQ2xDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDbEIsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUUxQixJQUFXLEtBQUs7UUFDWixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQ1csS0FBSyxDQUFDLEtBQVk7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCLENBQUM7SUFDTCxDQUFDO0lBRU8sTUFBTSxDQUFTO0lBRVMsSUFBSSxDQUFhO0lBRXZCLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBQ2xDLE1BQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBRTVEO1FBQ0ksTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRXJDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQztJQUVNLFdBQVc7UUFDZCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixDQUFDO0lBQ0wsQ0FBQzt1R0F4Q1EsaUNBQWlDOzJGQUFqQyxpQ0FBaUMsa0xDckI5Qyxpb0JBc0JBLDBEREhjLDJCQUEyQiwrR0FBRSxnQkFBZ0I7OzJGQUU5QyxpQ0FBaUM7a0JBUDdDLFNBQVM7K0JBQ0ksNkJBQTZCLGNBRzNCLElBQUksV0FDUCxDQUFDLDJCQUEyQixFQUFFLGdCQUFnQixDQUFDO3dEQVc3QyxLQUFLO3NCQURmLEtBQUs7dUJBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDO2dCQVdTLElBQUk7c0JBQW5DLEtBQUs7dUJBQUMsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDO2dCQUVHLE1BQU07c0JBQS9CLE1BQU07Z0JBQ21CLE1BQU07c0JBQS9CLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtGb3JtR3JvdXB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtNYXRUb29sdGlwTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcbmltcG9ydCB7TmF0dXJhbEZpeGVkQnV0dG9uQ29tcG9uZW50fSBmcm9tICcuLi9maXhlZC1idXR0b24vZml4ZWQtYnV0dG9uLmNvbXBvbmVudCc7XG5cbnR5cGUgTW9kZWwgPSB7XG4gICAgaWQ/OiBzdHJpbmc7XG4gICAgcGVybWlzc2lvbnM/OiB7XG4gICAgICAgIGRlbGV0ZTogYm9vbGVhbjtcbiAgICB9O1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWZpeGVkLWJ1dHRvbi1kZXRhaWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9maXhlZC1idXR0b24tZGV0YWlsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vZml4ZWQtYnV0dG9uLWRldGFpbC5jb21wb25lbnQuc2NzcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmF0dXJhbEZpeGVkQnV0dG9uQ29tcG9uZW50LCBNYXRUb29sdGlwTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEZpeGVkQnV0dG9uRGV0YWlsQ29tcG9uZW50IHtcbiAgICBwcml2YXRlIGNhbkNoYW5nZSA9IHRydWU7XG4gICAgcHVibGljIGlzQ3JlYXRpb24gPSBmYWxzZTtcblxuICAgIHB1YmxpYyBnZXQgbW9kZWwoKTogTW9kZWwge1xuICAgICAgICByZXR1cm4gdGhpcy5fbW9kZWw7XG4gICAgfVxuXG4gICAgQElucHV0KHtyZXF1aXJlZDogdHJ1ZX0pXG4gICAgcHVibGljIHNldCBtb2RlbCh2YWx1ZTogTW9kZWwpIHtcbiAgICAgICAgdGhpcy5fbW9kZWwgPSB2YWx1ZTtcbiAgICAgICAgaWYgKHRoaXMuY2FuQ2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmlzQ3JlYXRpb24gPSAhdGhpcy5fbW9kZWwuaWQ7XG4gICAgICAgICAgICB0aGlzLmNhbkNoYW5nZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfbW9kZWwhOiBNb2RlbDtcblxuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KSBwdWJsaWMgZm9ybSE6IEZvcm1Hcm91cDtcblxuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgY3JlYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG5cbiAgICAgICAgcm91dGUucGFyYW1zLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpLnN1YnNjcmliZSgoKSA9PiAodGhpcy5jYW5DaGFuZ2UgPSB0cnVlKSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNsaWNrQ3JlYXRlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb3JtLmVuYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlLmVtaXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbGlja0RlbGV0ZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZm9ybS5lbmFibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGV0ZS5lbWl0KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJAaWYgKGlzQ3JlYXRpb24pIHtcbiAgICA8bmF0dXJhbC1maXhlZC1idXR0b25cbiAgICAgICAgKGNsaWNrKT1cImNsaWNrQ3JlYXRlKClcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5kaXNhYmxlZFwiXG4gICAgICAgIFtjb2xvcl09XCJmb3JtLnZhbGlkID8gJ2FjY2VudCcgOiAnd2FybidcIlxuICAgICAgICBjbGFzcz1cImRldGFpbC1zcGVlZC1kaWFsXCJcbiAgICAgICAgaWNvbj1cInNhdmVcIlxuICAgIC8+XG59XG5cbkBpZiAoIWlzQ3JlYXRpb24gJiYgKCFtb2RlbC5wZXJtaXNzaW9ucyB8fCBtb2RlbC5wZXJtaXNzaW9ucy5kZWxldGUpKSB7XG4gICAgPG5hdHVyYWwtZml4ZWQtYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJjbGlja0RlbGV0ZSgpXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZvcm0uZGlzYWJsZWRcIlxuICAgICAgICBjbGFzcz1cImRldGFpbC1zcGVlZC1kaWFsXCJcbiAgICAgICAgY29sb3I9XCJ3YXJuXCJcbiAgICAgICAgaWNvbj1cImRlbGV0ZV9mb3JldmVyXCJcbiAgICAgICAgaTE4bi1tYXRUb29sdGlwXG4gICAgICAgIG1hdFRvb2x0aXA9XCJTdXBwcmltZXIgZMOpZmluaXRpdmVtZW50XCJcbiAgICAgICAgbWF0VG9vbHRpcFBvc2l0aW9uPVwibGVmdFwiXG4gICAgLz5cbn1cbiJdfQ==
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
export class HierarchicFlatNode {
|
|
2
|
+
node;
|
|
3
|
+
name;
|
|
4
|
+
level;
|
|
5
|
+
expandable;
|
|
6
|
+
selectable;
|
|
7
|
+
deselectable;
|
|
8
|
+
loading = false;
|
|
2
9
|
constructor(node, name, level = 0, expandable = false, selectable = true, deselectable = true) {
|
|
3
10
|
this.node = node;
|
|
4
11
|
this.name = name;
|
|
@@ -6,7 +13,6 @@ export class HierarchicFlatNode {
|
|
|
6
13
|
this.expandable = expandable;
|
|
7
14
|
this.selectable = selectable;
|
|
8
15
|
this.deselectable = deselectable;
|
|
9
|
-
this.loading = false;
|
|
10
16
|
}
|
|
11
17
|
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdC1ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmF0dXJhbC9zcmMvbGliL21vZHVsZXMvaGllcmFyY2hpYy1zZWxlY3Rvci9jbGFzc2VzL2ZsYXQtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLE9BQU8sa0JBQWtCO0lBSVA7SUFDQTtJQUNBO0lBQ1Q7SUFDUztJQUNUO0lBUkosT0FBTyxHQUFHLEtBQUssQ0FBQztJQUV2QixZQUNvQixJQUF5QixFQUN6QixJQUFZLEVBQ1osUUFBUSxDQUFDLEVBQ2xCLGFBQWEsS0FBSyxFQUNULGFBQWEsSUFBSSxFQUMxQixlQUFlLElBQUk7UUFMVixTQUFJLEdBQUosSUFBSSxDQUFxQjtRQUN6QixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osVUFBSyxHQUFMLEtBQUssQ0FBSTtRQUNsQixlQUFVLEdBQVYsVUFBVSxDQUFRO1FBQ1QsZUFBVSxHQUFWLFVBQVUsQ0FBTztRQUMxQixpQkFBWSxHQUFaLFlBQVksQ0FBTztJQUMzQixDQUFDO0NBQ1AiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0hpZXJhcmNoaWNNb2RlbE5vZGV9IGZyb20gJy4vbW9kZWwtbm9kZSc7XG5cbmV4cG9ydCBjbGFzcyBIaWVyYXJjaGljRmxhdE5vZGUge1xuICAgIHB1YmxpYyBsb2FkaW5nID0gZmFsc2U7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgbGV2ZWwgPSAwLFxuICAgICAgICBwdWJsaWMgZXhwYW5kYWJsZSA9IGZhbHNlLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0YWJsZSA9IHRydWUsXG4gICAgICAgIHB1YmxpYyBkZXNlbGVjdGFibGUgPSB0cnVlLFxuICAgICkge31cbn1cbiJdfQ==
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
import { BehaviorSubject } from 'rxjs';
|
|
2
2
|
export class HierarchicModelNode {
|
|
3
|
+
model;
|
|
4
|
+
config;
|
|
5
|
+
childrenChange = new BehaviorSubject([]);
|
|
3
6
|
constructor(model, config) {
|
|
4
7
|
this.model = model;
|
|
5
8
|
this.config = config;
|
|
6
|
-
this.childrenChange = new BehaviorSubject([]);
|
|
7
9
|
}
|
|
8
10
|
get children() {
|
|
9
11
|
return this.childrenChange.value;
|
|
10
12
|
}
|
|
11
13
|
}
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWwtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25hdHVyYWwvc3JjL2xpYi9tb2R1bGVzL2hpZXJhcmNoaWMtc2VsZWN0b3IvY2xhc3Nlcy9tb2RlbC1ub2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFNckMsTUFBTSxPQUFPLG1CQUFtQjtJQUlSO0lBQ0E7SUFKYixjQUFjLEdBQTJDLElBQUksZUFBZSxDQUF3QixFQUFFLENBQUMsQ0FBQztJQUUvRyxZQUNvQixLQUFzQixFQUN0QixNQUFzQztRQUR0QyxVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUN0QixXQUFNLEdBQU4sTUFBTSxDQUFnQztJQUN2RCxDQUFDO0lBRUosSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQztJQUNyQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0JlaGF2aW9yU3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge05hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbn0gZnJvbSAnLi9oaWVyYXJjaGljLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtOYW1lT3JGdWxsTmFtZX0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuXG5leHBvcnQgdHlwZSBIaWVyYXJjaGljTW9kZWwgPSB7X190eXBlbmFtZTogc3RyaW5nfSAmIE5hbWVPckZ1bGxOYW1lO1xuXG5leHBvcnQgY2xhc3MgSGllcmFyY2hpY01vZGVsTm9kZSB7XG4gICAgcHVibGljIGNoaWxkcmVuQ2hhbmdlOiBCZWhhdmlvclN1YmplY3Q8SGllcmFyY2hpY01vZGVsTm9kZVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SGllcmFyY2hpY01vZGVsTm9kZVtdPihbXSk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBtb2RlbDogSGllcmFyY2hpY01vZGVsLFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnOiBOYXR1cmFsSGllcmFyY2hpY0NvbmZpZ3VyYXRpb24sXG4gICAgKSB7fVxuXG4gICAgcHVibGljIGdldCBjaGlsZHJlbigpOiBIaWVyYXJjaGljTW9kZWxOb2RlW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbkNoYW5nZS52YWx1ZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -25,49 +25,66 @@ import * as i5 from "@angular/material/icon";
|
|
|
25
25
|
import * as i6 from "@angular/material/checkbox";
|
|
26
26
|
import * as i7 from "@angular/material/chips";
|
|
27
27
|
export class NaturalHierarchicSelectorComponent {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
28
|
+
destroyRef = inject(DestroyRef);
|
|
29
|
+
hierarchicSelectorService = inject(NaturalHierarchicSelectorService);
|
|
30
|
+
/**
|
|
31
|
+
* Function that receives a model and returns a string for display value
|
|
32
|
+
*/
|
|
33
|
+
displayWith;
|
|
34
|
+
/**
|
|
35
|
+
* Config for items and relations arrangement
|
|
36
|
+
*/
|
|
37
|
+
config;
|
|
38
|
+
/**
|
|
39
|
+
* If multiple or single item selection
|
|
40
|
+
*/
|
|
41
|
+
multiple = false;
|
|
42
|
+
/**
|
|
43
|
+
* Selected items
|
|
44
|
+
* Organized by key, containing each an array of selected items of same type
|
|
45
|
+
*/
|
|
46
|
+
selected = {};
|
|
47
|
+
/**
|
|
48
|
+
* Whether selectable elements can be unselected
|
|
49
|
+
*/
|
|
50
|
+
allowUnselect = true;
|
|
51
|
+
/**
|
|
52
|
+
* Filters that apply to each query
|
|
53
|
+
*/
|
|
54
|
+
filters;
|
|
55
|
+
/**
|
|
56
|
+
* Search facets
|
|
57
|
+
*/
|
|
58
|
+
searchFacets = [];
|
|
59
|
+
/**
|
|
60
|
+
* Selections to apply on natural-search on component initialisation
|
|
61
|
+
*/
|
|
62
|
+
searchSelections = [];
|
|
63
|
+
/**
|
|
64
|
+
* Emits when natural-search selections change
|
|
65
|
+
*/
|
|
66
|
+
searchSelectionChange = new EventEmitter();
|
|
67
|
+
/**
|
|
68
|
+
* Inner representation of selected @Input() to allow flat listing as mat-chip.
|
|
69
|
+
*/
|
|
70
|
+
selectedNodes = [];
|
|
71
|
+
/**
|
|
72
|
+
* Emits selection change
|
|
73
|
+
* Returns a Literal where selected models are organized by key
|
|
74
|
+
*/
|
|
75
|
+
selectionChange = new EventEmitter();
|
|
76
|
+
/**
|
|
77
|
+
* Controller for nodes selection
|
|
78
|
+
*/
|
|
79
|
+
flatNodesSelection;
|
|
80
|
+
treeControl;
|
|
81
|
+
treeFlattener;
|
|
82
|
+
dataSource;
|
|
83
|
+
loading = false;
|
|
84
|
+
/**
|
|
85
|
+
* Cache for transformed nodes
|
|
86
|
+
*/
|
|
87
|
+
flatNodeMap = new Map();
|
|
71
88
|
/**
|
|
72
89
|
* Angular OnChange implementation
|
|
73
90
|
*/
|
|
@@ -340,8 +357,8 @@ export class NaturalHierarchicSelectorComponent {
|
|
|
340
357
|
getMapKey(model) {
|
|
341
358
|
return model.__typename + '-' + model.id;
|
|
342
359
|
}
|
|
343
|
-
static
|
|
344
|
-
static
|
|
360
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalHierarchicSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
361
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.3", type: NaturalHierarchicSelectorComponent, isStandalone: true, selector: "natural-hierarchic-selector", inputs: { displayWith: "displayWith", config: "config", multiple: "multiple", selected: "selected", allowUnselect: "allowUnselect", filters: "filters", searchFacets: "searchFacets", searchSelections: "searchSelections" }, outputs: { searchSelectionChange: "searchSelectionChange", selectionChange: "selectionChange" }, providers: [NaturalHierarchicSelectorService], usesOnChanges: true, ngImport: i0, template: "<div [style.margin-bottom.px]=\"20\">\n <natural-search (selectionChange)=\"search($event)\" [facets]=\"searchFacets\" [selections]=\"searchSelections\" />\n</div>\n\n<div class=\"body\">\n @if (loading) {\n <mat-progress-spinner [diameter]=\"36\" mode=\"indeterminate\" style=\"margin: 10px\" />\n }\n\n <mat-tree [dataSource]=\"dataSource\" [treeControl]=\"treeControl\">\n <mat-tree-node *matTreeNodeDef=\"let node\" [ngClass]=\"{leaf: !node.expandable}\" matTreeNodePadding>\n @if (node.expandable) {\n <button\n (click)=\"loadChildren(node)\"\n [attr.aria-label]=\"'toggle ' + node.name\"\n mat-icon-button\n matTreeNodeToggle\n >\n @if (node.loading) {\n <mat-progress-spinner [diameter]=\"24\" [strokeWidth]=\"5\" mode=\"indeterminate\" />\n }\n @if (!node.loading) {\n <mat-icon [naturalIcon]=\"treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'\" />\n }\n </button>\n }\n\n <mat-checkbox\n (change)=\"toggleFlatNode(node)\"\n [checked]=\"flatNodesSelection.isSelected(node)\"\n [disabled]=\"!isNodeTogglable(node)\"\n style=\"margin-right: 10px\"\n >\n @if (node.node.config.icon) {\n <mat-icon [naturalIcon]=\"node.node.config.icon\" style=\"margin-right: 10px\" />\n }\n <span>{{ node.name }}</span>\n </mat-checkbox>\n </mat-tree-node>\n </mat-tree>\n\n <mat-chip-listbox aria-orientation=\"vertical\" class=\"mat-mdc-chip-set-stacked\">\n @for (node of selectedNodes; track node.model.id) {\n <mat-chip-option (removed)=\"unselectModelNode(node)\" [removable]=\"true\" [selectable]=\"false\">\n @if (node.config.icon) {\n <mat-icon [naturalIcon]=\"node.config.icon\" />\n }\n <div class=\"mat-body chip-label\">{{ node.model.name || node.model.fullName }}</div>\n <button matChipRemove>\n <mat-icon naturalIcon=\"cancel\" />\n </button>\n </mat-chip-option>\n }\n </mat-chip-listbox>\n</div>\n\n@if (!loading && !dataSource.data.length) {\n <div i18n>Aucun r\u00E9sultat</div>\n}\n", styles: [":host{display:block}:host ul,:host li{-webkit-margin-before:0;-webkit-margin-after:0;list-style-type:none}:host mat-icon{width:18px;height:18px;font-size:18px}:host .mat-tree-node.leaf{margin-left:48px}:host .body{display:flex;flex-direction:row;justify-content:space-between}:host .body mat-tree{flex:66}:host .body mat-chip-listbox{flex:33}:host mat-tree{flex-shrink:0}:host mat-chip-listbox{margin-left:10px}\n"], dependencies: [{ kind: "component", type: NaturalSearchComponent, selector: "natural-search", inputs: ["placeholder", "facets", "multipleGroups", "dropdownTitle", "selections"], outputs: ["selectionChange"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: MatProgressSpinnerModule }, { kind: "component", type: i2.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i3.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i3.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i3.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i3.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i3.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NaturalIconDirective, selector: "mat-icon[naturalIcon]", inputs: ["naturalIcon", "size"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i6.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "ngmodule", type: MatChipsModule }, { kind: "component", type: i7.MatChipListbox, selector: "mat-chip-listbox", inputs: ["multiple", "aria-orientation", "selectable", "compareWith", "required", "hideSingleSelectionIndicator", "value"], outputs: ["change"] }, { kind: "component", type: i7.MatChipOption, selector: "mat-basic-chip-option, [mat-basic-chip-option], mat-chip-option, [mat-chip-option]", inputs: ["selectable", "selected"], outputs: ["selectionChange"] }, { kind: "directive", type: i7.MatChipRemove, selector: "[matChipRemove]" }] });
|
|
345
362
|
}
|
|
346
363
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImport: i0, type: NaturalHierarchicSelectorComponent, decorators: [{
|
|
347
364
|
type: Component,
|
|
@@ -378,4 +395,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.3", ngImpor
|
|
|
378
395
|
}], selectionChange: [{
|
|
379
396
|
type: Output
|
|
380
397
|
}] } });
|
|
381
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFOUYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRzlFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBSXhELE9BQU8sRUFBQyxnQ0FBZ0MsRUFBMEIsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGlCQUFpQixF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QUFZO3NCQUEzQixLQUFLO2dCQUtVLGdCQUFnQjtzQkFBL0IsS0FBSztnQkFLb0IscUJBQXFCO3NCQUE5QyxNQUFNO2dCQVdtQixlQUFlO3NCQUF4QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZWxlY3Rpb25Nb2RlbH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7RmxhdFRyZWVDb250cm9sfSBmcm9tICdAYW5ndWxhci9jZGsvdHJlZSc7XG5pbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBEZXN0cm95UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5wdXQsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdFRyZWVGbGF0RGF0YVNvdXJjZSwgTWF0VHJlZUZsYXR0ZW5lciwgTWF0VHJlZU1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvdHJlZSc7XG5pbXBvcnQge09ic2VydmFibGV9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtmaW5hbGl6ZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtRdWVyeVZhcmlhYmxlc30gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy9xdWVyeS12YXJpYWJsZS1tYW5hZ2VyJztcbmltcG9ydCB7TGl0ZXJhbH0gZnJvbSAnLi4vLi4vLi4vdHlwZXMvdHlwZXMnO1xuaW1wb3J0IHt0b0dyYXBoUUxEb2N0cmluZUZpbHRlcn0gZnJvbSAnLi4vLi4vc2VhcmNoL2NsYXNzZXMvZ3JhcGhxbC1kb2N0cmluZSc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hGYWNldHN9IGZyb20gJy4uLy4uL3NlYXJjaC90eXBlcy9mYWNldCc7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hTZWxlY3Rpb25zfSBmcm9tICcuLi8uLi9zZWFyY2gvdHlwZXMvdmFsdWVzJztcbmltcG9ydCB7SGllcmFyY2hpY0ZsYXROb2RlfSBmcm9tICcuLi9jbGFzc2VzL2ZsYXQtbm9kZSc7XG5pbXBvcnQge05hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb259IGZyb20gJy4uL2NsYXNzZXMvaGllcmFyY2hpYy1maWx0ZXJzLWNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IHtIaWVyYXJjaGljTW9kZWxOb2RlfSBmcm9tICcuLi9jbGFzc2VzL21vZGVsLW5vZGUnO1xuaW1wb3J0IHtOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSwgT3JnYW5pemVkTW9kZWxTZWxlY3Rpb259IGZyb20gJy4vaGllcmFyY2hpYy1zZWxlY3Rvci5zZXJ2aWNlJztcbmltcG9ydCB7cmVwbGFjZU9iamVjdEtlZXBpbmdSZWZlcmVuY2V9IGZyb20gJy4uLy4uLy4uL2NsYXNzZXMvdXRpbGl0eSc7XG5pbXBvcnQge01hdENoaXBzTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGlwcyc7XG5pbXBvcnQge01hdENoZWNrYm94TW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQge05hdHVyYWxJY29uRGlyZWN0aXZlfSBmcm9tICcuLi8uLi9pY29uL2ljb24uZGlyZWN0aXZlJztcbmltcG9ydCB7TWF0SWNvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQge01hdEJ1dHRvbk1vZHVsZX0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcbmltcG9ydCB7TWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9wcm9ncmVzcy1zcGlubmVyJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOYXR1cmFsU2VhcmNoQ29tcG9uZW50fSBmcm9tICcuLi8uLi9zZWFyY2gvc2VhcmNoL3NlYXJjaC5jb21wb25lbnQnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduYXR1cmFsLWhpZXJhcmNoaWMtc2VsZWN0b3InLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9oaWVyYXJjaGljLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuc2NzcycsXG4gICAgcHJvdmlkZXJzOiBbTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2VdLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOYXR1cmFsU2VhcmNoQ29tcG9uZW50LFxuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIE1hdFByb2dyZXNzU3Bpbm5lck1vZHVsZSxcbiAgICAgICAgTWF0VHJlZU1vZHVsZSxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBOYXR1cmFsSWNvbkRpcmVjdGl2ZSxcbiAgICAgICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgICAgIE1hdENoaXBzTW9kdWxlLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSA9IGluamVjdChOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiBGdW5jdGlvbiB0aGF0IHJlY2VpdmVzIGEgbW9kZWwgYW5kIHJldHVybnMgYSBzdHJpbmcgZm9yIGRpc3BsYXkgdmFsdWVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgZGlzcGxheVdpdGg/OiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDb25maWcgZm9yIGl0ZW1zIGFuZCByZWxhdGlvbnMgYXJyYW5nZW1lbnRcbiAgICAgKi9cbiAgICBASW5wdXQoe3JlcXVpcmVkOiB0cnVlfSkgcHVibGljIGNvbmZpZyE6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbltdO1xuXG4gICAgLyoqXG4gICAgICogSWYgbXVsdGlwbGUgb3Igc2luZ2xlIGl0ZW0gc2VsZWN0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIG11bHRpcGxlID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3RlZCBpdGVtc1xuICAgICAqIE9yZ2FuaXplZCBieSBrZXksIGNvbnRhaW5pbmcgZWFjaCBhbiBhcnJheSBvZiBzZWxlY3RlZCBpdGVtcyBvZiBzYW1lIHR5cGVcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWQ6IE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uID0ge307XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHNlbGVjdGFibGUgZWxlbWVudHMgY2FuIGJlIHVuc2VsZWN0ZWRcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgYWxsb3dVbnNlbGVjdCA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBGaWx0ZXJzIHRoYXQgYXBwbHkgdG8gZWFjaCBxdWVyeVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmaWx0ZXJzPzogSGllcmFyY2hpY0ZpbHRlcnNDb25maWd1cmF0aW9uIHwgbnVsbDtcblxuICAgIC8qKlxuICAgICAqIFNlYXJjaCBmYWNldHNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgc2VhcmNoRmFjZXRzOiBOYXR1cmFsU2VhcmNoRmFjZXRzID0gW107XG5cbiAgICAvKipcbiAgICAgKiBTZWxlY3Rpb25zIHRvIGFwcGx5IG9uIG5hdHVyYWwtc2VhcmNoIG9uIGNvbXBvbmVudCBpbml0aWFsaXNhdGlvblxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hTZWxlY3Rpb25zOiBOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucyA9IFtdO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHMgd2hlbiBuYXR1cmFsLXNlYXJjaCBzZWxlY3Rpb25zIGNoYW5nZVxuICAgICAqL1xuICAgIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgc2VhcmNoU2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxOYXR1cmFsU2VhcmNoU2VsZWN0aW9ucz4oKTtcblxuICAgIC8qKlxuICAgICAqIElubmVyIHJlcHJlc2VudGF0aW9uIG9mIHNlbGVjdGVkIEBJbnB1dCgpIHRvIGFsbG93IGZsYXQgbGlzdGluZyBhcyBtYXQtY2hpcC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWROb2RlczogSGllcmFyY2hpY01vZGVsTm9kZVtdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyBzZWxlY3Rpb24gY2hhbmdlXG4gICAgICogUmV0dXJucyBhIExpdGVyYWwgd2hlcmUgc2VsZWN0ZWQgbW9kZWxzIGFyZSBvcmdhbml6ZWQgYnkga2V5XG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uPigpO1xuXG4gICAgLyoqXG4gICAgICogQ29udHJvbGxlciBmb3Igbm9kZXMgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIGZsYXROb2Rlc1NlbGVjdGlvbiE6IFNlbGVjdGlvbk1vZGVsPEhpZXJhcmNoaWNGbGF0Tm9kZT47XG5cbiAgICBwdWJsaWMgdHJlZUNvbnRyb2whOiBGbGF0VHJlZUNvbnRyb2w8SGllcmFyY2hpY0ZsYXROb2RlPjtcbiAgICBwdWJsaWMgdHJlZUZsYXR0ZW5lciE6IE1hdFRyZWVGbGF0dGVuZXI8SGllcmFyY2hpY01vZGVsTm9kZSwgSGllcmFyY2hpY0ZsYXROb2RlPjtcbiAgICBwdWJsaWMgZGF0YVNvdXJjZSE6IE1hdFRyZWVGbGF0RGF0YVNvdXJjZTxIaWVyYXJjaGljTW9kZWxOb2RlLCBIaWVyYXJjaGljRmxhdE5vZGU+O1xuXG4gICAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIENhY2hlIGZvciB0cmFuc2Zvcm1lZCBub2Rlc1xuICAgICAqL1xuICAgIHByaXZhdGUgZmxhdE5vZGVNYXA6IE1hcDxzdHJpbmcsIEhpZXJhcmNoaWNGbGF0Tm9kZT4gPSBuZXcgTWFwPHN0cmluZywgSGllcmFyY2hpY0ZsYXROb2RlPigpO1xuXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBPbkNoYW5nZSBpbXBsZW1lbnRhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLnNlbGVjdGVkICYmICFjaGFuZ2VzLnNlbGVjdGVkLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlubmVyU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZmlsdGVycyAmJiAhY2hhbmdlcy5maWx0ZXJzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLmxvYWRSb290cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW5ndWxhciBPbkluaXQgaW1wbGVtZW50YXRpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIEluaXQgdHJlZSBjaGVja2JveCBzZWxlY3RvcnNcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24gPSBuZXcgU2VsZWN0aW9uTW9kZWw8YW55Pih0aGlzLm11bHRpcGxlKTtcblxuICAgICAgICAvLyBUcmVlIGNvbnRyb2xsZXJzIGFuZCBtYW5pcHVsYXRvcnNcbiAgICAgICAgdGhpcy50cmVlRmxhdHRlbmVyID0gbmV3IE1hdFRyZWVGbGF0dGVuZXIoXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybWVyKCksXG4gICAgICAgICAgICB0aGlzLmdldExldmVsKCksXG4gICAgICAgICAgICB0aGlzLmlzRXhwYW5kYWJsZSgpLFxuICAgICAgICAgICAgdGhpcy5nZXRDaGlsZHJlbigpLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRyZWVDb250cm9sID0gbmV3IEZsYXRUcmVlQ29udHJvbDxIaWVyYXJjaGljRmxhdE5vZGU+KHRoaXMuZ2V0TGV2ZWwoKSwgdGhpcy5pc0V4cGFuZGFibGUoKSk7XG5cbiAgICAgICAgLy8gVGhlIGRhdGFTb3VyY2UgY29udGFpbnMgYSBuZXN0ZWQgTW9kZWxOb2RlcyBsaXN0LiBFYWNoIE1vZGVsTm9kZSBoYXMgYSBjaGlsZCBhdHRyaWJ1dGUgdGhhdCByZXR1cm5zIGFuIG9ic2VydmFibGUuXG4gICAgICAgIC8vIFRoZSBkYXRhU291cmNlIGNvbnRhaW5zIGEgZmxhdCByZXByZXNlbnRhdGlvbiBvZiB0aGUgbmVzdGVkIE1vZGVsTm9kZXMgdGhhdCBpcyBnZW5lcmF0ZWQgYnkgdGhlIHRyZWVGbGF0dGVuZXIgcmVsYXRlZCBmdW5jdGlvbnNcbiAgICAgICAgdGhpcy5kYXRhU291cmNlID0gbmV3IE1hdFRyZWVGbGF0RGF0YVNvdXJjZSh0aGlzLnRyZWVDb250cm9sLCB0aGlzLnRyZWVGbGF0dGVuZXIpO1xuXG4gICAgICAgIC8vIFVwZGF0ZSBkYXRhU291cmNlIHdoZW4gcmVjZWl2aW5nIG5ldyBsaXN0IC0+IHdlIGFzc2lnbiB0aGUgd2hvbGUgdHJlZVxuICAgICAgICAvLyBUaGUgdHJlZUNvbnRyb2wgYW5kIHRyZWVGbGF0dGVuZXIgd2lsbCBnZW5lcmF0ZSB0aGUgZGlzcGxheWVkIHRyZWVcbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmRhdGFDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZShkYXRhID0+ICh0aGlzLmRhdGFTb3VyY2UuZGF0YSA9IGRhdGEpKTtcblxuICAgICAgICAvLyBQcmV2ZW50IGVtcHR5IHNjcmVlbiBvbiBmaXJzdCBsb2FkIGFuZCBpbml0IE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlIHdpdGggaW5wdXR0ZWQgY29uZmlndXJhdGlvblxuICAgICAgICBsZXQgdmFyaWFibGVzO1xuICAgICAgICBpZiAodGhpcy5zZWFyY2hTZWxlY3Rpb25zLnNvbWUocyA9PiBzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIHZhcmlhYmxlcyA9IHtmaWx0ZXI6IHRvR3JhcGhRTERvY3RyaW5lRmlsdGVyKHRoaXMuc2VhcmNoRmFjZXRzLCB0aGlzLnNlYXJjaFNlbGVjdGlvbnMpfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxvYWRSb290cyh2YXJpYWJsZXMpO1xuXG4gICAgICAgIC8vIE9yZ2FuaXplZFNlbGVjdGlvbiBpbnRvIGxpc3QgdXNhYmxlIGJ5IHRlbXBsYXRlXG4gICAgICAgIHRoaXMudXBkYXRlSW5uZXJTZWxlY3Rpb24odGhpcy5zZWxlY3RlZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVG9nZ2xlIHNlbGVjdGlvbiBvZiBhIEZsYXROb2RlLCBjb25zaWRlcmluZyBpZiBtdWx0aXBsZSBzZWxlY3Rpb24gaXMgYWN0aXZhdGVkIG9yIG5vdFxuICAgICAqL1xuICAgIHB1YmxpYyB0b2dnbGVGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAvLyBJcyBtdWx0aXBsZSBhbGxvd2VkLCBqdXN0IHRvZ2dsZSBlbGVtZW50XG4gICAgICAgICAgICBpZiAodGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChmbGF0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdEZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQoZmxhdE5vZGUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdFNpbmdsZUZsYXROb2RlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIElmIG5vdCBtdWx0aXBsZSwgYW5kIHdlIHdhbnQgdG8gc2VsZWN0IGFuIGVsZW1lbnQsIHVuc2VsZWN0IGV2ZXJ5dGhpbmcgYmVmb3JlIHRvIGtlZXAgYSBzaW5nbGUgc2VsZWN0aW9uXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RTaW5nbGVGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBXaGVuIHVuc2VsZWN0aW5nIGFuIGVsZW1lbnQgZnJvbSB0aGUgbWF0LWNoaXBzLCBpdCBjYW4gYmUgZGVlcCBpbiB0aGUgaGllcmFyY2h5LCBhbmQgdGhlIHRyZWUgZWxlbWVudCBtYXkgbm90IGV4aXN0Li4uXG4gICAgICogLi4uIGJ1dCB3ZSBzdGlsbCBuZWVkIHRvIHJlbW92ZSB0aGUgZWxlbWVudCBmcm9tIHRoZSBtYXQtY2hpcHMgbGlzdC5cbiAgICAgKi9cbiAgICBwdWJsaWMgdW5zZWxlY3RNb2RlbE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUobm9kZSk7XG4gICAgICAgIGlmIChmbGF0Tm9kZSkge1xuICAgICAgICAgICAgdGhpcy51bnNlbGVjdEZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBmcm9tIGNoaXBzIGxpc3Qgb25seSBpZiBubyBmbGF0Tm9kZSwgYmVjYXVzZSB1bnNlbGVjdEZsYXROb2RlKCkgYWxyZWFkeSBkZWFscyB3aXRoIGl0LlxuICAgICAgICAgICAgdGhpcy5yZW1vdmVNb2RlbE5vZGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGlzTm9kZVRvZ2dsYWJsZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKGZsYXROb2RlLm5vZGUpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdE5vZGUuZGVzZWxlY3RhYmxlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZsYXROb2RlLnNlbGVjdGFibGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERpc3BsYXlGbihjb25maWc6IE5hdHVyYWxIaWVyYXJjaGljQ29uZmlndXJhdGlvbik6IChpdGVtOiBhbnkpID0+IHN0cmluZyB7XG4gICAgICAgIGlmIChjb25maWcuZGlzcGxheVdpdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWcuZGlzcGxheVdpdGg7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kaXNwbGF5V2l0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGlzcGxheVdpdGg7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gaXRlbSA9PiAoaXRlbSA/IGl0ZW0uZnVsbE5hbWUgfHwgaXRlbS5uYW1lIDogJycpO1xuICAgIH1cblxuICAgIHB1YmxpYyBsb2FkQ2hpbGRyZW4oZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKGZsYXROb2RlKSkge1xuICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmxvYWRDaGlsZHJlbihmbGF0Tm9kZSwgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZWQgdG8gY29sbGFwc2UgYWxsIGNoaWxkcmVuIHdoZW4gY2xvc2luZyBhIHBhcmVudCwgYnV0IG5vdCBzdXJlIGl0J3MgZ29vZC5cbiAgICAgKi9cbiAgICAvLyBwdWJsaWMgbG9hZENoaWxkcmVuKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpIHtcbiAgICAvLyAgICAgaWYgKHRoaXMudHJlZUNvbnRyb2wuaXNFeHBhbmRlZChmbGF0Tm9kZSkpIHtcbiAgICAvL1xuICAgIC8vICAgICAgICAgY29uc3QgY2FjaGVkRmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKGZsYXROb2RlLm5vZGUpO1xuICAgIC8vICAgICAgICAgaWYgKGNhY2hlZEZsYXROb2RlKSB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmxvYWRDaGlsZHJlbihjYWNoZWRGbGF0Tm9kZSwgdGhpcy5maWx0ZXJzKTtcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgIC8vIENsb3NlIGNoaWxkcmVuXG4gICAgLy8gICAgICAgICAgICAgY2FjaGVkRmxhdE5vZGUubm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShjaGlsZCk7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmIChjaGlsZE5vZGUpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuY29sbGFwc2UoY2hpbGROb2RlKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH0pO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy8gfVxuXG4gICAgcHJpdmF0ZSBnZXRDaGlsZHJlbigpOiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSkgPT4gT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+IHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogT2JzZXJ2YWJsZTxIaWVyYXJjaGljTW9kZWxOb2RlW10+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmNoaWxkcmVuQ2hhbmdlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybXMgYSBIaWVyYXJjaGljTW9kZWxOb2RlIGludG8gYSBGbGF0Tm9kZVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtZXIoKTogKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpID0+IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3JDcmVhdGVGbGF0Tm9kZShub2RlLCBsZXZlbCk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGRlZXAgb2YgdGhlIG5vZGUgaW4gdGhlIHRyZWVcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldExldmVsKCk6IChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IG51bWJlciB7XG4gICAgICAgIHJldHVybiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZS5sZXZlbDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyBhbHdheXMgZXhwYW5kYWJsZSBiZWNhdXNlIHdlIGxvYWQgb24gZGVtYW5kLCB3ZSBkb24ndCBrbm93IGlmIHRoZXJlIGFyZSBjaGlsZHJlbiB5ZXRcbiAgICAgKi9cbiAgICBwcml2YXRlIGlzRXhwYW5kYWJsZSgpOiAobm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKSA9PiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmV4cGFuZGFibGU7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPckNyZWF0ZUZsYXROb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUsIGxldmVsOiBudW1iZXIpOiBIaWVyYXJjaGljRmxhdE5vZGUge1xuICAgICAgICAvLyBSZXR1cm4gRmxhdE5vZGUgaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZsYXROb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdE5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gbmV3IEZsYXROb2RlXG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZUZsYXROb2RlKG5vZGUsIGxldmVsKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2VhcmNoKHNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoU2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0aW9ucyk7XG4gICAgICAgIGlmIChzZWxlY3Rpb25zLnNvbWUocyA9PiBzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhcmlhYmxlcyA9IHtmaWx0ZXI6IHRvR3JhcGhRTERvY3RyaW5lRmlsdGVyKHRoaXMuc2VhcmNoRmFjZXRzLCBzZWxlY3Rpb25zKX07XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2Uuc2VhcmNoKHZhcmlhYmxlcywgdGhpcy5maWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFJvb3RzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRSb290cyhzZWFyY2hWYXJpYWJsZXM/OiBRdWVyeVZhcmlhYmxlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgICB0aGlzLmZsYXROb2RlTWFwID0gbmV3IE1hcDxzdHJpbmcsIEhpZXJhcmNoaWNGbGF0Tm9kZT4oKTtcbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlXG4gICAgICAgICAgICAuaW5pdCh0aGlzLmNvbmZpZywgdGhpcy5maWx0ZXJzLCBzZWFyY2hWYXJpYWJsZXMgfHwgbnVsbClcbiAgICAgICAgICAgIC5waXBlKGZpbmFsaXplKCgpID0+ICh0aGlzLmxvYWRpbmcgPSBmYWxzZSkpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFN5bmMgaW5uZXIgc2VsZWN0aW9uICh0cmVlIGFuZCBtYXQtY2hpcHMpIGFjY29yZGluZyB0byBzZWxlY3RlZCBpbnB1dCBhdHRyaWJ1dGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZUlubmVyU2VsZWN0aW9uKHNlbGVjdGVkOiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbik6IHZvaWQge1xuICAgICAgICAvLyBUcmFuc2Zvcm0gYW4gT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24gaW50byBhIE1vZGVsTm9kZSBsaXN0IHRoYXQgaXMgdXNlZCBpbiB0aGUgc2VsZWN0ZWQgem9uZSBvZiB0aGUgY29tcG9uZW50IChzZWUgdGVtcGxhdGUpXG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5mcm9tT3JnYW5pemVkU2VsZWN0aW9uKHNlbGVjdGVkKTtcblxuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcy5zZWxlY3RlZE5vZGVzKSB7XG4gICAgICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUobm9kZSk7XG4gICAgICAgICAgICBpZiAoZmxhdE5vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVW5zZWxlY3QgYSBub2RlLCBrZWVwaW5nIHRoZSByZXN0IG9mIHRoZSBzZWxlY3RlZCB1bnRvdWNoZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIHVuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSk6IHZvaWQge1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5kZXNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMucmVtb3ZlTW9kZWxOb2RlKGZsYXROb2RlLm5vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZSBhIG5vZGUgZnJvbSBjaGlwIGxpc3RzXG4gICAgICovXG4gICAgcHJpdmF0ZSByZW1vdmVNb2RlbE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldE1hcEtleShub2RlLm1vZGVsKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0aW9uSW5kZXggPSB0aGlzLnNlbGVjdGVkTm9kZXMuZmluZEluZGV4KG4gPT4gdGhpcy5nZXRNYXBLZXkobi5tb2RlbCkgPT09IGtleSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5zcGxpY2Uoc2VsZWN0aW9uSW5kZXgsIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdCBhIG5vZGUsIGtlZXBpbmcgdGggcmVzdCBvZiB0aGUgc2VsZWN0ZWQgdW50b3VjaGVkXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2Rlcy5wdXNoKGZsYXROb2RlLm5vZGUpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBzZWxlY3RlZCBhbmQgc2VsZWN0IHRoZSBnaXZlbiBub2RlXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZWxlY3RTaW5nbGVGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWROb2RlcyA9IFtmbGF0Tm9kZS5ub2RlXTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciBhbGwgc2VsZWN0ZWQgYW5kIHNlbGVjdCB0aGUgZ2l2ZW4gbm9kZVxuICAgICAqL1xuICAgIHByaXZhdGUgdW5zZWxlY3RTaW5nbGVGbGF0Tm9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtIHRoZSBnaXZlbiBlbGVtZW50cyBpbnRvIHRoZSBvcmdhbml6ZWQgc2VsZWN0aW9uIHRoYXQgaXMgZW1pdHRlZCB0byBvdXRwdXRcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbihzZWxlY3RlZDogSGllcmFyY2hpY01vZGVsTm9kZVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbiA9IHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS50b09yZ2FuaXplZFNlbGVjdGlvbihzZWxlY3RlZCk7XG4gICAgICAgIHJlcGxhY2VPYmplY3RLZWVwaW5nUmVmZXJlbmNlKHRoaXMuc2VsZWN0ZWQsIG9yZ2FuaXplZEZsYXROb2Rlc1NlbGVjdGlvbik7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQob3JnYW5pemVkRmxhdE5vZGVzU2VsZWN0aW9uKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTm9kZVNlbGVjdGVkKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBLZXkobm9kZS5tb2RlbCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWROb2Rlcy5zb21lKG4gPT4gdGhpcy5nZXRNYXBLZXkobi5tb2RlbCkgPT09IGtleSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGbGF0Tm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogSGllcmFyY2hpY0ZsYXROb2RlIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICByZXR1cm4gdGhpcy5mbGF0Tm9kZU1hcC5nZXQoa2V5KSB8fCBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlRmxhdE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcik6IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXREaXNwbGF5Rm4obm9kZS5jb25maWcpKG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBleHBhbmRhYmxlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGlzQ3VzdG9tU2VsZWN0YWJsZSA9IG5vZGUuY29uZmlnLmlzU2VsZWN0YWJsZUNhbGxiYWNrXG4gICAgICAgICAgICA/IG5vZGUuY29uZmlnLmlzU2VsZWN0YWJsZUNhbGxiYWNrKG5vZGUubW9kZWwpXG4gICAgICAgICAgICA6IHRydWU7XG4gICAgICAgIGNvbnN0IGlzU2VsZWN0YWJsZSA9ICEhbm9kZS5jb25maWcuc2VsZWN0YWJsZUF0S2V5ICYmIGlzQ3VzdG9tU2VsZWN0YWJsZTtcblxuICAgICAgICBjb25zdCBmbGF0Tm9kZSA9IG5ldyBIaWVyYXJjaGljRmxhdE5vZGUobm9kZSwgbmFtZSwgbGV2ZWwsIGV4cGFuZGFibGUsIGlzU2VsZWN0YWJsZSk7XG5cbiAgICAgICAgdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmNvdW50SXRlbXMoZmxhdE5vZGUsIHRoaXMuZmlsdGVycyk7XG5cbiAgICAgICAgLy8gTWFyayBub2RlIGFzIHNlbGVjdGVkIGlmIG5lZWRlZCAoY2hlY2tzIHRoZSBzZWxlY3RlZCBwcm9jZXNzZWQgaW5wdXQpXG4gICAgICAgIGlmICh0aGlzLmlzTm9kZVNlbGVjdGVkKG5vZGUpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWxsb3dVbnNlbGVjdCkge1xuICAgICAgICAgICAgICAgIGZsYXROb2RlLmRlc2VsZWN0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENhY2hlIEZsYXROb2RlXG4gICAgICAgIHRoaXMuZmxhdE5vZGVNYXAuc2V0KGtleSwgZmxhdE5vZGUpO1xuXG4gICAgICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGlkZW50aWZpZXIga2V5IGZvciBtYXAgY2FjaGVcbiAgICAgKiBBcyBtYW55IG9iamVjdCB0eXBlcyBjYW4gYmUgdXNlZCwgdGhpcyBmdW5jdGlvbiBjb25zaWRlcnMgdHlwZW5hbWUgYW5kIElEIHRvIHJldHVybiBzb21ldGhpbmcgbGlrZSBkb2N1bWVudC0xMjNcbiAgICAgKi9cbiAgICBwcml2YXRlIGdldE1hcEtleShtb2RlbDogTGl0ZXJhbCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiBtb2RlbC5fX3R5cGVuYW1lICsgJy0nICsgbW9kZWwuaWQ7XG4gICAgfVxufVxuIiwiPGRpdiBbc3R5bGUubWFyZ2luLWJvdHRvbS5weF09XCIyMFwiPlxuICAgIDxuYXR1cmFsLXNlYXJjaCAoc2VsZWN0aW9uQ2hhbmdlKT1cInNlYXJjaCgkZXZlbnQpXCIgW2ZhY2V0c109XCJzZWFyY2hGYWNldHNcIiBbc2VsZWN0aW9uc109XCJzZWFyY2hTZWxlY3Rpb25zXCIgLz5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwiYm9keVwiPlxuICAgIEBpZiAobG9hZGluZykge1xuICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW2RpYW1ldGVyXT1cIjM2XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiBzdHlsZT1cIm1hcmdpbjogMTBweFwiIC8+XG4gICAgfVxuXG4gICAgPG1hdC10cmVlIFtkYXRhU291cmNlXT1cImRhdGFTb3VyY2VcIiBbdHJlZUNvbnRyb2xdPVwidHJlZUNvbnRyb2xcIj5cbiAgICAgICAgPG1hdC10cmVlLW5vZGUgKm1hdFRyZWVOb2RlRGVmPVwibGV0IG5vZGVcIiBbbmdDbGFzc109XCJ7bGVhZjogIW5vZGUuZXhwYW5kYWJsZX1cIiBtYXRUcmVlTm9kZVBhZGRpbmc+XG4gICAgICAgICAgICBAaWYgKG5vZGUuZXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImxvYWRDaGlsZHJlbihub2RlKVwiXG4gICAgICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ3RvZ2dsZSAnICsgbm9kZS5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG1hdFRyZWVOb2RlVG9nZ2xlXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKG5vZGUubG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1zcGlubmVyIFtkaWFtZXRlcl09XCIyNFwiIFtzdHJva2VXaWR0aF09XCI1XCIgbW9kZT1cImluZGV0ZXJtaW5hdGVcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIW5vZGUubG9hZGluZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJ0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0J1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlRmxhdE5vZGUobm9kZSlcIlxuICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImZsYXROb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKG5vZGUpXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIWlzTm9kZVRvZ2dsYWJsZShub2RlKVwiXG4gICAgICAgICAgICAgICAgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIEBpZiAobm9kZS5ub2RlLmNvbmZpZy5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwibm9kZS5ub2RlLmNvbmZpZy5pY29uXCIgc3R5bGU9XCJtYXJnaW4tcmlnaHQ6IDEwcHhcIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3Bhbj57eyBub2RlLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1jaGVja2JveD5cbiAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxuICAgIDwvbWF0LXRyZWU+XG5cbiAgICA8bWF0LWNoaXAtbGlzdGJveCBhcmlhLW9yaWVudGF0aW9uPVwidmVydGljYWxcIiBjbGFzcz1cIm1hdC1tZGMtY2hpcC1zZXQtc3RhY2tlZFwiPlxuICAgICAgICBAZm9yIChub2RlIG9mIHNlbGVjdGVkTm9kZXM7IHRyYWNrIG5vZGUubW9kZWwuaWQpIHtcbiAgICAgICAgICAgIDxtYXQtY2hpcC1vcHRpb24gKHJlbW92ZWQpPVwidW5zZWxlY3RNb2RlbE5vZGUobm9kZSlcIiBbcmVtb3ZhYmxlXT1cInRydWVcIiBbc2VsZWN0YWJsZV09XCJmYWxzZVwiPlxuICAgICAgICAgICAgICAgIEBpZiAobm9kZS5jb25maWcuaWNvbikge1xuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cIm5vZGUuY29uZmlnLmljb25cIiAvPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LWJvZHkgY2hpcC1sYWJlbFwiPnt7IG5vZGUubW9kZWwubmFtZSB8fCBub2RlLm1vZGVsLmZ1bGxOYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXRDaGlwUmVtb3ZlPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gbmF0dXJhbEljb249XCJjYW5jZWxcIiAvPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9tYXQtY2hpcC1vcHRpb24+XG4gICAgICAgIH1cbiAgICA8L21hdC1jaGlwLWxpc3Rib3g+XG48L2Rpdj5cblxuQGlmICghbG9hZGluZyAmJiAhZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCkge1xuICAgIDxkaXYgaTE4bj5BdWN1biByw6lzdWx0YXQ8L2Rpdj5cbn1cbiJdfQ==
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uYXR1cmFsL3NyYy9saWIvbW9kdWxlcy9oaWVyYXJjaGljLXNlbGVjdG9yL2hpZXJhcmNoaWMtc2VsZWN0b3IvaGllcmFyY2hpYy1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sMEJBQTBCLENBQUM7QUFDeEQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUdMLE1BQU0sR0FFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMscUJBQXFCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFFOUYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8sRUFBQyx1QkFBdUIsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBRzlFLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBSXhELE9BQU8sRUFBQyxnQ0FBZ0MsRUFBMEIsTUFBTSwrQkFBK0IsQ0FBQztBQUN4RyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDdkQsT0FBTyxFQUFDLGlCQUFpQixF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QUFNO3NCQUFyQyxLQUFLO3VCQUFDLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQztnQkFLUCxRQUFRO3NCQUF2QixLQUFLO2dCQU1VLFFBQVE7c0JBQXZCLEtBQUs7Z0JBS1UsYUFBYTtzQkFBNUIsS0FBSztnQkFLVSxPQUFPO3NCQUF0QixLQUFLO2dCQUtVLFlBQVk7c0JBQTNCLEtBQUs7Z0JBS1UsZ0JBQWdCO3NCQUEvQixLQUFLO2dCQUtvQixxQkFBcUI7c0JBQTlDLE1BQU07Z0JBV21CLGVBQWU7c0JBQXhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NlbGVjdGlvbk1vZGVsfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHtGbGF0VHJlZUNvbnRyb2x9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcbmltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIERlc3Ryb3lSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIGluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWF0VHJlZUZsYXREYXRhU291cmNlLCBNYXRUcmVlRmxhdHRlbmVyLCBNYXRUcmVlTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2ZpbmFsaXplfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1F1ZXJ5VmFyaWFibGVzfSBmcm9tICcuLi8uLi8uLi9jbGFzc2VzL3F1ZXJ5LXZhcmlhYmxlLW1hbmFnZXInO1xuaW1wb3J0IHtMaXRlcmFsfSBmcm9tICcuLi8uLi8uLi90eXBlcy90eXBlcyc7XG5pbXBvcnQge3RvR3JhcGhRTERvY3RyaW5lRmlsdGVyfSBmcm9tICcuLi8uLi9zZWFyY2gvY2xhc3Nlcy9ncmFwaHFsLWRvY3RyaW5lJztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaEZhY2V0c30gZnJvbSAnLi4vLi4vc2VhcmNoL3R5cGVzL2ZhY2V0JztcbmltcG9ydCB7TmF0dXJhbFNlYXJjaFNlbGVjdGlvbnN9IGZyb20gJy4uLy4uL3NlYXJjaC90eXBlcy92YWx1ZXMnO1xuaW1wb3J0IHtIaWVyYXJjaGljRmxhdE5vZGV9IGZyb20gJy4uL2NsYXNzZXMvZmxhdC1ub2RlJztcbmltcG9ydCB7TmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9ufSBmcm9tICcuLi9jbGFzc2VzL2hpZXJhcmNoaWMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0hpZXJhcmNoaWNGaWx0ZXJzQ29uZmlndXJhdGlvbn0gZnJvbSAnLi4vY2xhc3Nlcy9oaWVyYXJjaGljLWZpbHRlcnMtY29uZmlndXJhdGlvbic7XG5pbXBvcnQge0hpZXJhcmNoaWNNb2RlbE5vZGV9IGZyb20gJy4uL2NsYXNzZXMvbW9kZWwtbm9kZSc7XG5pbXBvcnQge05hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLCBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbn0gZnJvbSAnLi9oaWVyYXJjaGljLXNlbGVjdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHtyZXBsYWNlT2JqZWN0S2VlcGluZ1JlZmVyZW5jZX0gZnJvbSAnLi4vLi4vLi4vY2xhc3Nlcy91dGlsaXR5JztcbmltcG9ydCB7TWF0Q2hpcHNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoaXBzJztcbmltcG9ydCB7TWF0Q2hlY2tib3hNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7TmF0dXJhbEljb25EaXJlY3RpdmV9IGZyb20gJy4uLy4uL2ljb24vaWNvbi5kaXJlY3RpdmUnO1xuaW1wb3J0IHtNYXRJY29uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7TWF0QnV0dG9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHtNYXRQcm9ncmVzc1NwaW5uZXJNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLXNwaW5uZXInO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05hdHVyYWxTZWFyY2hDb21wb25lbnR9IGZyb20gJy4uLy4uL3NlYXJjaC9zZWFyY2gvc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25hdHVyYWwtaGllcmFyY2hpYy1zZWxlY3RvcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2hpZXJhcmNoaWMtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9oaWVyYXJjaGljLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJyxcbiAgICBwcm92aWRlcnM6IFtOYXR1cmFsSGllcmFyY2hpY1NlbGVjdG9yU2VydmljZV0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5hdHVyYWxTZWFyY2hDb21wb25lbnQsXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NTcGlubmVyTW9kdWxlLFxuICAgICAgICBNYXRUcmVlTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIE5hdHVyYWxJY29uRGlyZWN0aXZlLFxuICAgICAgICBNYXRDaGVja2JveE1vZHVsZSxcbiAgICAgICAgTWF0Q2hpcHNNb2R1bGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBoaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlID0gaW5qZWN0KE5hdHVyYWxIaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlKTtcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgYSBtb2RlbCBhbmQgcmV0dXJucyBhIHN0cmluZyBmb3IgZGlzcGxheSB2YWx1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNwbGF5V2l0aD86IChpdGVtOiBhbnkpID0+IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIENvbmZpZyBmb3IgaXRlbXMgYW5kIHJlbGF0aW9ucyBhcnJhbmdlbWVudFxuICAgICAqL1xuICAgIEBJbnB1dCh7cmVxdWlyZWQ6IHRydWV9KSBwdWJsaWMgY29uZmlnITogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uW107XG5cbiAgICAvKipcbiAgICAgKiBJZiBtdWx0aXBsZSBvciBzaW5nbGUgaXRlbSBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBASW5wdXQoKSBwdWJsaWMgbXVsdGlwbGUgPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGVkIGl0ZW1zXG4gICAgICogT3JnYW5pemVkIGJ5IGtleSwgY29udGFpbmluZyBlYWNoIGFuIGFycmF5IG9mIHNlbGVjdGVkIGl0ZW1zIG9mIHNhbWUgdHlwZVxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWxlY3RlZDogT3JnYW5pemVkTW9kZWxTZWxlY3Rpb24gPSB7fTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgc2VsZWN0YWJsZSBlbGVtZW50cyBjYW4gYmUgdW5zZWxlY3RlZFxuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBhbGxvd1Vuc2VsZWN0ID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIEZpbHRlcnMgdGhhdCBhcHBseSB0byBlYWNoIHF1ZXJ5XG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIGZpbHRlcnM/OiBIaWVyYXJjaGljRmlsdGVyc0NvbmZpZ3VyYXRpb24gfCBudWxsO1xuXG4gICAgLyoqXG4gICAgICogU2VhcmNoIGZhY2V0c1xuICAgICAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzZWFyY2hGYWNldHM6IE5hdHVyYWxTZWFyY2hGYWNldHMgPSBbXTtcblxuICAgIC8qKlxuICAgICAqIFNlbGVjdGlvbnMgdG8gYXBwbHkgb24gbmF0dXJhbC1zZWFyY2ggb24gY29tcG9uZW50IGluaXRpYWxpc2F0aW9uXG4gICAgICovXG4gICAgQElucHV0KCkgcHVibGljIHNlYXJjaFNlbGVjdGlvbnM6IE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zID0gW107XG5cbiAgICAvKipcbiAgICAgKiBFbWl0cyB3aGVuIG5hdHVyYWwtc2VhcmNoIHNlbGVjdGlvbnMgY2hhbmdlXG4gICAgICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWFyY2hTZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE5hdHVyYWxTZWFyY2hTZWxlY3Rpb25zPigpO1xuXG4gICAgLyoqXG4gICAgICogSW5uZXIgcmVwcmVzZW50YXRpb24gb2Ygc2VsZWN0ZWQgQElucHV0KCkgdG8gYWxsb3cgZmxhdCBsaXN0aW5nIGFzIG1hdC1jaGlwLlxuICAgICAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZE5vZGVzOiBIaWVyYXJjaGljTW9kZWxOb2RlW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEVtaXRzIHNlbGVjdGlvbiBjaGFuZ2VcbiAgICAgKiBSZXR1cm5zIGEgTGl0ZXJhbCB3aGVyZSBzZWxlY3RlZCBtb2RlbHMgYXJlIG9yZ2FuaXplZCBieSBrZXlcbiAgICAgKi9cbiAgICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8T3JnYW5pemVkTW9kZWxTZWxlY3Rpb24+KCk7XG5cbiAgICAvKipcbiAgICAgKiBDb250cm9sbGVyIGZvciBub2RlcyBzZWxlY3Rpb25cbiAgICAgKi9cbiAgICBwdWJsaWMgZmxhdE5vZGVzU2VsZWN0aW9uITogU2VsZWN0aW9uTW9kZWw8SGllcmFyY2hpY0ZsYXROb2RlPjtcblxuICAgIHB1YmxpYyB0cmVlQ29udHJvbCE6IEZsYXRUcmVlQ29udHJvbDxIaWVyYXJjaGljRmxhdE5vZGU+O1xuICAgIHB1YmxpYyB0cmVlRmxhdHRlbmVyITogTWF0VHJlZUZsYXR0ZW5lcjxIaWVyYXJjaGljTW9kZWxOb2RlLCBIaWVyYXJjaGljRmxhdE5vZGU+O1xuICAgIHB1YmxpYyBkYXRhU291cmNlITogTWF0VHJlZUZsYXREYXRhU291cmNlPEhpZXJhcmNoaWNNb2RlbE5vZGUsIEhpZXJhcmNoaWNGbGF0Tm9kZT47XG5cbiAgICBwdWJsaWMgbG9hZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ2FjaGUgZm9yIHRyYW5zZm9ybWVkIG5vZGVzXG4gICAgICovXG4gICAgcHJpdmF0ZSBmbGF0Tm9kZU1hcDogTWFwPHN0cmluZywgSGllcmFyY2hpY0ZsYXROb2RlPiA9IG5ldyBNYXA8c3RyaW5nLCBIaWVyYXJjaGljRmxhdE5vZGU+KCk7XG5cbiAgICAvKipcbiAgICAgKiBBbmd1bGFyIE9uQ2hhbmdlIGltcGxlbWVudGF0aW9uXG4gICAgICovXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuc2VsZWN0ZWQgJiYgIWNoYW5nZXMuc2VsZWN0ZWQuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5uZXJTZWxlY3Rpb24odGhpcy5zZWxlY3RlZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY2hhbmdlcy5maWx0ZXJzICYmICFjaGFuZ2VzLmZpbHRlcnMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFJvb3RzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBbmd1bGFyIE9uSW5pdCBpbXBsZW1lbnRhdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gSW5pdCB0cmVlIGNoZWNrYm94IHNlbGVjdG9yc1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxhbnk+KHRoaXMubXVsdGlwbGUpO1xuXG4gICAgICAgIC8vIFRyZWUgY29udHJvbGxlcnMgYW5kIG1hbmlwdWxhdG9yc1xuICAgICAgICB0aGlzLnRyZWVGbGF0dGVuZXIgPSBuZXcgTWF0VHJlZUZsYXR0ZW5lcihcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtZXIoKSxcbiAgICAgICAgICAgIHRoaXMuZ2V0TGV2ZWwoKSxcbiAgICAgICAgICAgIHRoaXMuaXNFeHBhbmRhYmxlKCksXG4gICAgICAgICAgICB0aGlzLmdldENoaWxkcmVuKCksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEhpZXJhcmNoaWNGbGF0Tm9kZT4odGhpcy5nZXRMZXZlbCgpLCB0aGlzLmlzRXhwYW5kYWJsZSgpKTtcblxuICAgICAgICAvLyBUaGUgZGF0YVNvdXJjZSBjb250YWlucyBhIG5lc3RlZCBNb2RlbE5vZGVzIGxpc3QuIEVhY2ggTW9kZWxOb2RlIGhhcyBhIGNoaWxkIGF0dHJpYnV0ZSB0aGF0IHJldHVybnMgYW4gb2JzZXJ2YWJsZS5cbiAgICAgICAgLy8gVGhlIGRhdGFTb3VyY2UgY29udGFpbnMgYSBmbGF0IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBuZXN0ZWQgTW9kZWxOb2RlcyB0aGF0IGlzIGdlbmVyYXRlZCBieSB0aGUgdHJlZUZsYXR0ZW5lciByZWxhdGVkIGZ1bmN0aW9uc1xuICAgICAgICB0aGlzLmRhdGFTb3VyY2UgPSBuZXcgTWF0VHJlZUZsYXREYXRhU291cmNlKHRoaXMudHJlZUNvbnRyb2wsIHRoaXMudHJlZUZsYXR0ZW5lcik7XG5cbiAgICAgICAgLy8gVXBkYXRlIGRhdGFTb3VyY2Ugd2hlbiByZWNlaXZpbmcgbmV3IGxpc3QgLT4gd2UgYXNzaWduIHRoZSB3aG9sZSB0cmVlXG4gICAgICAgIC8vIFRoZSB0cmVlQ29udHJvbCBhbmQgdHJlZUZsYXR0ZW5lciB3aWxsIGdlbmVyYXRlIHRoZSBkaXNwbGF5ZWQgdHJlZVxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UuZGF0YUNoYW5nZVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGRhdGEgPT4gKHRoaXMuZGF0YVNvdXJjZS5kYXRhID0gZGF0YSkpO1xuXG4gICAgICAgIC8vIFByZXZlbnQgZW1wdHkgc2NyZWVuIG9uIGZpcnN0IGxvYWQgYW5kIGluaXQgTmF0dXJhbEhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2Ugd2l0aCBpbnB1dHRlZCBjb25maWd1cmF0aW9uXG4gICAgICAgIGxldCB2YXJpYWJsZXM7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFNlbGVjdGlvbnMuc29tZShzID0+IHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgdmFyaWFibGVzID0ge2ZpbHRlcjogdG9HcmFwaFFMRG9jdHJpbmVGaWx0ZXIodGhpcy5zZWFyY2hGYWNldHMsIHRoaXMuc2VhcmNoU2VsZWN0aW9ucyl9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubG9hZFJvb3RzKHZhcmlhYmxlcyk7XG5cbiAgICAgICAgLy8gT3JnYW5pemVkU2VsZWN0aW9uIGludG8gbGlzdCB1c2FibGUgYnkgdGVtcGxhdGVcbiAgICAgICAgdGhpcy51cGRhdGVJbm5lclNlbGVjdGlvbih0aGlzLnNlbGVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUb2dnbGUgc2VsZWN0aW9uIG9mIGEgRmxhdE5vZGUsIGNvbnNpZGVyaW5nIGlmIG11bHRpcGxlIHNlbGVjdGlvbiBpcyBhY3RpdmF0ZWQgb3Igbm90XG4gICAgICovXG4gICAgcHVibGljIHRvZ2dsZUZsYXROb2RlKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICAgIC8vIElzIG11bHRpcGxlIGFsbG93ZWQsIGp1c3QgdG9nZ2xlIGVsZW1lbnRcbiAgICAgICAgICAgIGlmICh0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5pc1NlbGVjdGVkKGZsYXROb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uaXNTZWxlY3RlZChmbGF0Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc2VsZWN0U2luZ2xlRmxhdE5vZGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgbm90IG11bHRpcGxlLCBhbmQgd2Ugd2FudCB0byBzZWxlY3QgYW4gZWxlbWVudCwgdW5zZWxlY3QgZXZlcnl0aGluZyBiZWZvcmUgdG8ga2VlcCBhIHNpbmdsZSBzZWxlY3Rpb25cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFNpbmdsZUZsYXROb2RlKGZsYXROb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFdoZW4gdW5zZWxlY3RpbmcgYW4gZWxlbWVudCBmcm9tIHRoZSBtYXQtY2hpcHMsIGl0IGNhbiBiZSBkZWVwIGluIHRoZSBoaWVyYXJjaHksIGFuZCB0aGUgdHJlZSBlbGVtZW50IG1heSBub3QgZXhpc3QuLi5cbiAgICAgKiAuLi4gYnV0IHdlIHN0aWxsIG5lZWQgdG8gcmVtb3ZlIHRoZSBlbGVtZW50IGZyb20gdGhlIG1hdC1jaGlwcyBsaXN0LlxuICAgICAqL1xuICAgIHB1YmxpYyB1bnNlbGVjdE1vZGVsTm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShub2RlKTtcbiAgICAgICAgaWYgKGZsYXROb2RlKSB7XG4gICAgICAgICAgICB0aGlzLnVuc2VsZWN0RmxhdE5vZGUoZmxhdE5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gY2hpcHMgbGlzdCBvbmx5IGlmIG5vIGZsYXROb2RlLCBiZWNhdXNlIHVuc2VsZWN0RmxhdE5vZGUoKSBhbHJlYWR5IGRlYWxzIHdpdGggaXQuXG4gICAgICAgICAgICB0aGlzLnJlbW92ZU1vZGVsTm9kZShub2RlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaXNOb2RlVG9nZ2xhYmxlKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuaXNOb2RlU2VsZWN0ZWQoZmxhdE5vZGUubm9kZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGF0Tm9kZS5kZXNlbGVjdGFibGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhdE5vZGUuc2VsZWN0YWJsZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGlzcGxheUZuKGNvbmZpZzogTmF0dXJhbEhpZXJhcmNoaWNDb25maWd1cmF0aW9uKTogKGl0ZW06IGFueSkgPT4gc3RyaW5nIHtcbiAgICAgICAgaWYgKGNvbmZpZy5kaXNwbGF5V2l0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5kaXNwbGF5V2l0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmRpc3BsYXlXaXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kaXNwbGF5V2l0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpdGVtID0+IChpdGVtID8gaXRlbS5mdWxsTmFtZSB8fCBpdGVtLm5hbWUgOiAnJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGxvYWRDaGlsZHJlbihmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVDb250cm9sLmlzRXhwYW5kZWQoZmxhdE5vZGUpKSB7XG4gICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UubG9hZENoaWxkcmVuKGZsYXROb2RlLCB0aGlzLmZpbHRlcnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlZCB0byBjb2xsYXBzZSBhbGwgY2hpbGRyZW4gd2hlbiBjbG9zaW5nIGEgcGFyZW50LCBidXQgbm90IHN1cmUgaXQncyBnb29kLlxuICAgICAqL1xuICAgIC8vIHB1YmxpYyBsb2FkQ2hpbGRyZW4oZmxhdE5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSkge1xuICAgIC8vICAgICBpZiAodGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkKGZsYXROb2RlKSkge1xuICAgIC8vXG4gICAgLy8gICAgICAgICBjb25zdCBjYWNoZWRGbGF0Tm9kZSA9IHRoaXMuZ2V0RmxhdE5vZGUoZmxhdE5vZGUubm9kZSk7XG4gICAgLy8gICAgICAgICBpZiAoY2FjaGVkRmxhdE5vZGUpIHtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UubG9hZENoaWxkcmVuKGNhY2hlZEZsYXROb2RlLCB0aGlzLmZpbHRlcnMpO1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gQ2xvc2UgY2hpbGRyZW5cbiAgICAvLyAgICAgICAgICAgICBjYWNoZWRGbGF0Tm9kZS5ub2RlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgIC8vICAgICAgICAgICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKGNoaWxkKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTm9kZSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmVlQ29udHJvbC5jb2xsYXBzZShjaGlsZE5vZGUpO1xuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICAgICAgfSk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH1cbiAgICAvLyB9XG5cbiAgICBwcml2YXRlIGdldENoaWxkcmVuKCk6IChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKSA9PiBPYnNlcnZhYmxlPEhpZXJhcmNoaWNNb2RlbE5vZGVbXT4ge1xuICAgICAgICByZXR1cm4gKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiBPYnNlcnZhYmxlPEhpZXJhcmNoaWNNb2RlbE5vZGVbXT4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW5DaGFuZ2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtcyBhIEhpZXJhcmNoaWNNb2RlbE5vZGUgaW50byBhIEZsYXROb2RlXG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1lcigpOiAobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcikgPT4gSGllcmFyY2hpY0ZsYXROb2RlIHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlLCBsZXZlbDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRPckNyZWF0ZUZsYXROb2RlKG5vZGUsIGxldmVsKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gZGVlcCBvZiB0aGUgbm9kZSBpbiB0aGUgdHJlZVxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TGV2ZWwoKTogKG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSkgPT4gbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBub2RlLmxldmVsO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElzIGFsd2F5cyBleHBhbmRhYmxlIGJlY2F1c2Ugd2UgbG9hZCBvbiBkZW1hbmQsIHdlIGRvbid0IGtub3cgaWYgdGhlcmUgYXJlIGNoaWxkcmVuIHlldFxuICAgICAqL1xuICAgIHByaXZhdGUgaXNFeHBhbmRhYmxlKCk6IChub2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpID0+IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKG5vZGU6IEhpZXJhcmNoaWNGbGF0Tm9kZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuZXhwYW5kYWJsZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9yQ3JlYXRlRmxhdE5vZGUobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSwgbGV2ZWw6IG51bWJlcik6IEhpZXJhcmNoaWNGbGF0Tm9kZSB7XG4gICAgICAgIC8vIFJldHVybiBGbGF0Tm9kZSBpZiBleGlzdHNcbiAgICAgICAgY29uc3QgZmxhdE5vZGUgPSB0aGlzLmdldEZsYXROb2RlKG5vZGUpO1xuICAgICAgICBpZiAoZmxhdE5vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGF0Tm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJldHVybiBuZXcgRmxhdE5vZGVcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlRmxhdE5vZGUobm9kZSwgbGV2ZWwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWFyY2goc2VsZWN0aW9uczogTmF0dXJhbFNlYXJjaFNlbGVjdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hTZWxlY3Rpb25DaGFuZ2UuZW1pdChzZWxlY3Rpb25zKTtcbiAgICAgICAgaWYgKHNlbGVjdGlvbnMuc29tZShzID0+IHMubGVuZ3RoKSkge1xuICAgICAgICAgICAgY29uc3QgdmFyaWFibGVzID0ge2ZpbHRlcjogdG9HcmFwaFFMRG9jdHJpbmVGaWx0ZXIodGhpcy5zZWFyY2hGYWNldHMsIHNlbGVjdGlvbnMpfTtcbiAgICAgICAgICAgIHRoaXMuaGllcmFyY2hpY1NlbGVjdG9yU2VydmljZS5zZWFyY2godmFyaWFibGVzLCB0aGlzLmZpbHRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5sb2FkUm9vdHMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFJvb3RzKHNlYXJjaFZhcmlhYmxlcz86IFF1ZXJ5VmFyaWFibGVzKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVNYXAgPSBuZXcgTWFwPHN0cmluZywgSGllcmFyY2hpY0ZsYXROb2RlPigpO1xuICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2VcbiAgICAgICAgICAgIC5pbml0KHRoaXMuY29uZmlnLCB0aGlzLmZpbHRlcnMsIHNlYXJjaFZhcmlhYmxlcyB8fCBudWxsKVxuICAgICAgICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZyA9IGZhbHNlKSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU3luYyBpbm5lciBzZWxlY3Rpb24gKHRyZWUgYW5kIG1hdC1jaGlwcykgYWNjb3JkaW5nIHRvIHNlbGVjdGVkIGlucHV0IGF0dHJpYnV0ZVxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlSW5uZXJTZWxlY3Rpb24oc2VsZWN0ZWQ6IE9yZ2FuaXplZE1vZGVsU2VsZWN0aW9uKTogdm9pZCB7XG4gICAgICAgIC8vIFRyYW5zZm9ybSBhbiBPcmdhbml6ZWRNb2RlbFNlbGVjdGlvbiBpbnRvIGEgTW9kZWxOb2RlIGxpc3QgdGhhdCBpcyB1c2VkIGluIHRoZSBzZWxlY3RlZCB6b25lIG9mIHRoZSBjb21wb25lbnQgKHNlZSB0ZW1wbGF0ZSlcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLmZyb21Pcmdhbml6ZWRTZWxlY3Rpb24oc2VsZWN0ZWQpO1xuXG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmNsZWFyKCk7XG4gICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzLnNlbGVjdGVkTm9kZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZsYXROb2RlID0gdGhpcy5nZXRGbGF0Tm9kZShub2RlKTtcbiAgICAgICAgICAgIGlmIChmbGF0Tm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLnNlbGVjdChmbGF0Tm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVbnNlbGVjdCBhIG5vZGUsIGtlZXBpbmcgdGhlIHJlc3Qgb2YgdGhlIHNlbGVjdGVkIHVudG91Y2hlZFxuICAgICAqL1xuICAgIHByaXZhdGUgdW5zZWxlY3RGbGF0Tm9kZShmbGF0Tm9kZTogSGllcmFyY2hpY0ZsYXROb2RlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZmxhdE5vZGVzU2VsZWN0aW9uLmRlc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgdGhpcy5yZW1vdmVNb2RlbE5vZGUoZmxhdE5vZGUubm9kZSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVtb3ZlIGEgbm9kZSBmcm9tIGNoaXAgbGlzdHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHJlbW92ZU1vZGVsTm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0TWFwS2V5KG5vZGUubW9kZWwpO1xuICAgICAgICBjb25zdCBzZWxlY3Rpb25JbmRleCA9IHRoaXMuc2VsZWN0ZWROb2Rlcy5maW5kSW5kZXgobiA9PiB0aGlzLmdldE1hcEtleShuLm1vZGVsKSA9PT0ga2V5KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzLnNwbGljZShzZWxlY3Rpb25JbmRleCwgMSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0IGEgbm9kZSwga2VlcGluZyB0aCByZXN0IG9mIHRoZSBzZWxlY3RlZCB1bnRvdWNoZWRcbiAgICAgKi9cbiAgICBwcml2YXRlIHNlbGVjdEZsYXROb2RlKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzLnB1c2goZmxhdE5vZGUubm9kZSk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uKHRoaXMuc2VsZWN0ZWROb2Rlcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgYWxsIHNlbGVjdGVkIGFuZCBzZWxlY3QgdGhlIGdpdmVuIG5vZGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHNlbGVjdFNpbmdsZUZsYXROb2RlKGZsYXROb2RlOiBIaWVyYXJjaGljRmxhdE5vZGUpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uY2xlYXIoKTtcbiAgICAgICAgdGhpcy5mbGF0Tm9kZXNTZWxlY3Rpb24uc2VsZWN0KGZsYXROb2RlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE5vZGVzID0gW2ZsYXROb2RlLm5vZGVdO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLnNlbGVjdGVkTm9kZXMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBzZWxlY3RlZCBhbmQgc2VsZWN0IHRoZSBnaXZlbiBub2RlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1bnNlbGVjdFNpbmdsZUZsYXROb2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5jbGVhcigpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTm9kZXMgPSBbXTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb24odGhpcy5zZWxlY3RlZE5vZGVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmFuc2Zvcm0gdGhlIGdpdmVuIGVsZW1lbnRzIGludG8gdGhlIG9yZ2FuaXplZCBzZWxlY3Rpb24gdGhhdCBpcyBlbWl0dGVkIHRvIG91dHB1dFxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlU2VsZWN0aW9uKHNlbGVjdGVkOiBIaWVyYXJjaGljTW9kZWxOb2RlW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgb3JnYW5pemVkRmxhdE5vZGVzU2VsZWN0aW9uID0gdGhpcy5oaWVyYXJjaGljU2VsZWN0b3JTZXJ2aWNlLnRvT3JnYW5pemVkU2VsZWN0aW9uKHNlbGVjdGVkKTtcbiAgICAgICAgcmVwbGFjZU9iamVjdEtlZXBpbmdSZWZlcmVuY2UodGhpcy5zZWxlY3RlZCwgb3JnYW5pemVkRmxhdE5vZGVzU2VsZWN0aW9uKTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChvcmdhbml6ZWRGbGF0Tm9kZXNTZWxlY3Rpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNOb2RlU2VsZWN0ZWQobm9kZTogSGllcmFyY2hpY01vZGVsTm9kZSk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmdldE1hcEtleShub2RlLm1vZGVsKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE5vZGVzLnNvbWUobiA9PiB0aGlzLmdldE1hcEtleShuLm1vZGVsKSA9PT0ga2V5KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZsYXROb2RlKG5vZGU6IEhpZXJhcmNoaWNNb2RlbE5vZGUpOiBIaWVyYXJjaGljRmxhdE5vZGUgfCBudWxsIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBLZXkobm9kZS5tb2RlbCk7XG4gICAgICAgIHJldHVybiB0aGlzLmZsYXROb2RlTWFwLmdldChrZXkpIHx8IG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjcmVhdGVGbGF0Tm9kZShub2RlOiBIaWVyYXJjaGljTW9kZWxOb2RlLCBsZXZlbDogbnVtYmVyKTogSGllcmFyY2hpY0ZsYXROb2RlIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRNYXBLZXkobm9kZS5tb2RlbCk7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldERpc3BsYXlGbihub2RlLmNvbmZpZykobm9kZS5tb2RlbCk7XG4gICAgICAgIGNvbnN0IGV4cGFuZGFibGUgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgaXNDdXN0b21TZWxlY3RhYmxlID0gbm9kZS5jb25maWcuaXNTZWxlY3RhYmxlQ2FsbGJhY2tcbiAgICAgICAgICAgID8gbm9kZS5jb25maWcuaXNTZWxlY3RhYmxlQ2FsbGJhY2sobm9kZS5tb2RlbClcbiAgICAgICAgICAgIDogdHJ1ZTtcbiAgICAgICAgY29uc3QgaXNTZWxlY3RhYmxlID0gISFub2RlLmNvbmZpZy5zZWxlY3RhYmxlQXRLZXkgJiYgaXNDdXN0b21TZWxlY3RhYmxlO1xuXG4gICAgICAgIGNvbnN0IGZsYXROb2RlID0gbmV3IEhpZXJhcmNoaWNGbGF0Tm9kZShub2RlLCBuYW1lLCBsZXZlbCwgZXhwYW5kYWJsZSwgaXNTZWxlY3RhYmxlKTtcblxuICAgICAgICB0aGlzLmhpZXJhcmNoaWNTZWxlY3RvclNlcnZpY2UuY291bnRJdGVtcyhmbGF0Tm9kZSwgdGhpcy5maWx0ZXJzKTtcblxuICAgICAgICAvLyBNYXJrIG5vZGUgYXMgc2VsZWN0ZWQgaWYgbmVlZGVkIChjaGVja3MgdGhlIHNlbGVjdGVkIHByb2Nlc3NlZCBpbnB1dClcbiAgICAgICAgaWYgKHRoaXMuaXNOb2RlU2VsZWN0ZWQobm9kZSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5hbGxvd1Vuc2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgZmxhdE5vZGUuZGVzZWxlY3RhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmZsYXROb2Rlc1NlbGVjdGlvbi5zZWxlY3QoZmxhdE5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FjaGUgRmxhdE5vZGVcbiAgICAgICAgdGhpcy5mbGF0Tm9kZU1hcC5zZXQoa2V5LCBmbGF0Tm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIGZsYXROb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYW4gaWRlbnRpZmllciBrZXkgZm9yIG1hcCBjYWNoZVxuICAgICAqIEFzIG1hbnkgb2JqZWN0IHR5cGVzIGNhbiBiZSB1c2VkLCB0aGlzIGZ1bmN0aW9uIGNvbnNpZGVycyB0eXBlbmFtZSBhbmQgSUQgdG8gcmV0dXJuIHNvbWV0aGluZyBsaWtlIGRvY3VtZW50LTEyM1xuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0TWFwS2V5KG1vZGVsOiBMaXRlcmFsKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIG1vZGVsLl9fdHlwZW5hbWUgKyAnLScgKyBtb2RlbC5pZDtcbiAgICB9XG59XG4iLCI8ZGl2IFtzdHlsZS5tYXJnaW4tYm90dG9tLnB4XT1cIjIwXCI+XG4gICAgPG5hdHVyYWwtc2VhcmNoIChzZWxlY3Rpb25DaGFuZ2UpPVwic2VhcmNoKCRldmVudClcIiBbZmFjZXRzXT1cInNlYXJjaEZhY2V0c1wiIFtzZWxlY3Rpb25zXT1cInNlYXJjaFNlbGVjdGlvbnNcIiAvPlxuPC9kaXY+XG5cbjxkaXYgY2xhc3M9XCJib2R5XCI+XG4gICAgQGlmIChsb2FkaW5nKSB7XG4gICAgICAgIDxtYXQtcHJvZ3Jlc3Mtc3Bpbm5lciBbZGlhbWV0ZXJdPVwiMzZcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIHN0eWxlPVwibWFyZ2luOiAxMHB4XCIgLz5cbiAgICB9XG5cbiAgICA8bWF0LXRyZWUgW2RhdGFTb3VyY2VdPVwiZGF0YVNvdXJjZVwiIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiPlxuICAgICAgICA8bWF0LXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiIFtuZ0NsYXNzXT1cIntsZWFmOiAhbm9kZS5leHBhbmRhYmxlfVwiIG1hdFRyZWVOb2RlUGFkZGluZz5cbiAgICAgICAgICAgIEBpZiAobm9kZS5leHBhbmRhYmxlKSB7XG4gICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwibG9hZENoaWxkcmVuKG5vZGUpXCJcbiAgICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCIndG9nZ2xlICcgKyBub2RlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgbWF0VHJlZU5vZGVUb2dnbGVcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAobm9kZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LXByb2dyZXNzLXNwaW5uZXIgW2RpYW1ldGVyXT1cIjI0XCIgW3N0cm9rZVdpZHRoXT1cIjVcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmICghbm9kZS5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gW25hdHVyYWxJY29uXT1cInRyZWVDb250cm9sLmlzRXhwYW5kZWQobm9kZSkgPyAnZXhwYW5kX21vcmUnIDogJ2NoZXZyb25fcmlnaHQnXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVGbGF0Tm9kZShub2RlKVwiXG4gICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZmxhdE5vZGVzU2VsZWN0aW9uLmlzU2VsZWN0ZWQobm9kZSlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhaXNOb2RlVG9nZ2xhYmxlKG5vZGUpXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQGlmIChub2RlLm5vZGUuY29uZmlnLmljb24pIHtcbiAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIFtuYXR1cmFsSWNvbl09XCJub2RlLm5vZGUuY29uZmlnLmljb25cIiBzdHlsZT1cIm1hcmdpbi1yaWdodDogMTBweFwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxzcGFuPnt7IG5vZGUubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICA8L21hdC10cmVlLW5vZGU+XG4gICAgPC9tYXQtdHJlZT5cblxuICAgIDxtYXQtY2hpcC1saXN0Ym94IGFyaWEtb3JpZW50YXRpb249XCJ2ZXJ0aWNhbFwiIGNsYXNzPVwibWF0LW1kYy1jaGlwLXNldC1zdGFja2VkXCI+XG4gICAgICAgIEBmb3IgKG5vZGUgb2Ygc2VsZWN0ZWROb2RlczsgdHJhY2sgbm9kZS5tb2RlbC5pZCkge1xuICAgICAgICAgICAgPG1hdC1jaGlwLW9wdGlvbiAocmVtb3ZlZCk9XCJ1bnNlbGVjdE1vZGVsTm9kZShub2RlKVwiIFtyZW1vdmFibGVdPVwidHJ1ZVwiIFtzZWxlY3RhYmxlXT1cImZhbHNlXCI+XG4gICAgICAgICAgICAgICAgQGlmIChub2RlLmNvbmZpZy5pY29uKSB7XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBbbmF0dXJhbEljb25dPVwibm9kZS5jb25maWcuaWNvblwiIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtYm9keSBjaGlwLWxhYmVsXCI+e3sgbm9kZS5tb2RlbC5uYW1lIHx8IG5vZGUubW9kZWwuZnVsbE5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdENoaXBSZW1vdmU+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBuYXR1cmFsSWNvbj1cImNhbmNlbFwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L21hdC1jaGlwLW9wdGlvbj5cbiAgICAgICAgfVxuICAgIDwvbWF0LWNoaXAtbGlzdGJveD5cbjwvZGl2PlxuXG5AaWYgKCFsb2FkaW5nICYmICFkYXRhU291cmNlLmRhdGEubGVuZ3RoKSB7XG4gICAgPGRpdiBpMThuPkF1Y3VuIHLDqXN1bHRhdDwvZGl2PlxufVxuIl19
|