@radix-ng/primitives 0.20.1 → 0.21.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/avatar/src/avatar-fallback.directive.d.ts +1 -1
- package/avatar/src/avatar-image.directive.d.ts +3 -3
- package/compodoc/documentation.json +6022 -1655
- package/core/index.d.ts +1 -0
- package/core/src/id-generator.d.ts +12 -0
- package/esm2022/avatar/src/avatar-fallback.directive.mjs +6 -8
- package/esm2022/avatar/src/avatar-image.directive.mjs +4 -3
- package/esm2022/core/index.mjs +2 -1
- package/esm2022/core/src/create-inject-context/index.mjs +2 -2
- package/esm2022/core/src/id-generator.mjs +43 -0
- package/esm2022/popover/index.mjs +14 -4
- package/esm2022/popover/src/popover-anchor.directive.mjs +70 -0
- package/esm2022/popover/src/popover-anchor.token.mjs +3 -0
- package/esm2022/popover/src/popover-arrow.directive.mjs +12 -7
- package/esm2022/popover/src/popover-close.directive.mjs +17 -5
- package/esm2022/popover/src/popover-close.token.mjs +3 -0
- package/esm2022/popover/src/popover-content-attributes.component.mjs +70 -0
- package/esm2022/popover/src/popover-content-attributes.token.mjs +3 -0
- package/esm2022/popover/src/popover-content.directive.mjs +120 -92
- package/esm2022/popover/src/popover-root.directive.mjs +234 -61
- package/esm2022/popover/src/popover-root.inject.mjs +4 -4
- package/esm2022/popover/src/popover-trigger.directive.mjs +10 -11
- package/esm2022/popover/src/popover.constants.mjs +2 -2
- package/esm2022/popover/src/popover.types.mjs +18 -1
- package/esm2022/popover/src/popover.utils.mjs +4 -6
- package/esm2022/switch/src/switch-input.directive.mjs +16 -7
- package/esm2022/switch/src/switch-root.directive.mjs +59 -14
- package/esm2022/switch/src/switch-thumb.directive.mjs +3 -3
- package/esm2022/toggle/index.mjs +2 -2
- package/esm2022/toggle/src/toggle-visually-hidden-input.directive.mjs +31 -0
- package/esm2022/toggle/src/toggle.directive.mjs +37 -8
- package/fesm2022/radix-ng-primitives-avatar.mjs +8 -9
- package/fesm2022/radix-ng-primitives-avatar.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-core.mjs +44 -3
- package/fesm2022/radix-ng-primitives-core.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-popover.mjs +679 -312
- package/fesm2022/radix-ng-primitives-popover.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-switch.mjs +76 -22
- package/fesm2022/radix-ng-primitives-switch.mjs.map +1 -1
- package/fesm2022/radix-ng-primitives-toggle.mjs +45 -15
- package/fesm2022/radix-ng-primitives-toggle.mjs.map +1 -1
- package/package.json +1 -1
- package/popover/index.d.ts +5 -1
- package/popover/src/popover-anchor.directive.d.ts +28 -0
- package/popover/src/popover-anchor.token.d.ts +3 -0
- package/popover/src/popover-arrow.directive.d.ts +8 -5
- package/popover/src/popover-close.directive.d.ts +2 -2
- package/popover/src/popover-close.token.d.ts +3 -0
- package/popover/src/popover-content-attributes.component.d.ts +17 -0
- package/popover/src/popover-content-attributes.token.d.ts +3 -0
- package/popover/src/popover-content.directive.d.ts +35 -24
- package/popover/src/popover-root.directive.d.ts +91 -18
- package/popover/src/popover-root.inject.d.ts +2 -1
- package/popover/src/popover-trigger.directive.d.ts +5 -5
- package/popover/src/popover.constants.d.ts +1 -1
- package/popover/src/popover.types.d.ts +14 -3
- package/switch/src/switch-input.directive.d.ts +2 -0
- package/switch/src/switch-root.directive.d.ts +33 -5
- package/toggle/index.d.ts +2 -2
- package/toggle/src/toggle-visually-hidden-input.directive.d.ts +6 -0
- package/toggle/src/toggle.directive.d.ts +19 -2
- package/esm2022/popover/src/popover-root.token.mjs +0 -3
- package/esm2022/toggle/src/toggle-input.directive.mjs +0 -30
- package/popover/src/popover-root.token.d.ts +0 -3
- package/toggle/src/toggle-input.directive.d.ts +0 -6
@@ -0,0 +1,3 @@
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
2
|
+
export const RdxPopoverCloseToken = new InjectionToken('RdxPopoverCloseToken');
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jbG9zZS50b2tlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci1jbG9zZS50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLElBQUksY0FBYyxDQUEyQixzQkFBc0IsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJkeFBvcG92ZXJDbG9zZURpcmVjdGl2ZSB9IGZyb20gJy4vcG9wb3Zlci1jbG9zZS5kaXJlY3RpdmUnO1xuXG5leHBvcnQgY29uc3QgUmR4UG9wb3ZlckNsb3NlVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48UmR4UG9wb3ZlckNsb3NlRGlyZWN0aXZlPignUmR4UG9wb3ZlckNsb3NlVG9rZW4nKTtcbiJdfQ==
|
@@ -0,0 +1,70 @@
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, forwardRef } from '@angular/core';
|
2
|
+
import { RdxPopoverContentAttributesToken } from './popover-content-attributes.token';
|
3
|
+
import { injectPopoverRoot } from './popover-root.inject';
|
4
|
+
import { RdxPopoverAnimationStatus, RdxPopoverState } from './popover.types';
|
5
|
+
import * as i0 from "@angular/core";
|
6
|
+
export class RdxPopoverContentAttributesComponent {
|
7
|
+
constructor() {
|
8
|
+
/** @ignore */
|
9
|
+
this.popoverRoot = injectPopoverRoot();
|
10
|
+
/** @ignore */
|
11
|
+
this.name = computed(() => `rdx-popover-content-attributes-${this.popoverRoot.uniqueId()}`);
|
12
|
+
/** @ignore */
|
13
|
+
this.disableAnimation = computed(() => !this.canAnimate());
|
14
|
+
}
|
15
|
+
/** @ignore */
|
16
|
+
onAnimationStart(_) {
|
17
|
+
this.popoverRoot.cssAnimationStatus.set(this.popoverRoot.state() === RdxPopoverState.OPEN
|
18
|
+
? RdxPopoverAnimationStatus.OPEN_STARTED
|
19
|
+
: RdxPopoverAnimationStatus.CLOSED_STARTED);
|
20
|
+
}
|
21
|
+
/** @ignore */
|
22
|
+
onAnimationEnd(_) {
|
23
|
+
this.popoverRoot.cssAnimationStatus.set(this.popoverRoot.state() === RdxPopoverState.OPEN
|
24
|
+
? RdxPopoverAnimationStatus.OPEN_ENDED
|
25
|
+
: RdxPopoverAnimationStatus.CLOSED_ENDED);
|
26
|
+
}
|
27
|
+
/** @ignore */
|
28
|
+
canAnimate() {
|
29
|
+
return (this.popoverRoot.cssAnimation() &&
|
30
|
+
((this.popoverRoot.cssOpeningAnimation() && this.popoverRoot.state() === RdxPopoverState.OPEN) ||
|
31
|
+
(this.popoverRoot.cssClosingAnimation() && this.popoverRoot.state() === RdxPopoverState.CLOSED)));
|
32
|
+
}
|
33
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverContentAttributesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
34
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.11", type: RdxPopoverContentAttributesComponent, isStandalone: true, selector: "[rdxPopoverContentAttributes]", host: { listeners: { "animationstart": "onAnimationStart($event)", "animationend": "onAnimationEnd($event)" }, properties: { "attr.role": "\"dialog\"", "attr.id": "name()", "attr.data-state": "popoverRoot.state()", "attr.data-side": "popoverRoot.popoverContentDirective().side()", "attr.data-align": "popoverRoot.popoverContentDirective().align()", "style": "disableAnimation() ? {animation: \"none !important\"} : null" } }, providers: [
|
35
|
+
{
|
36
|
+
provide: RdxPopoverContentAttributesToken,
|
37
|
+
useExisting: forwardRef(() => RdxPopoverContentAttributesComponent)
|
38
|
+
}
|
39
|
+
], ngImport: i0, template: `
|
40
|
+
<ng-content />
|
41
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
42
|
+
}
|
43
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverContentAttributesComponent, decorators: [{
|
44
|
+
type: Component,
|
45
|
+
args: [{
|
46
|
+
selector: '[rdxPopoverContentAttributes]',
|
47
|
+
standalone: true,
|
48
|
+
template: `
|
49
|
+
<ng-content />
|
50
|
+
`,
|
51
|
+
host: {
|
52
|
+
'[attr.role]': '"dialog"',
|
53
|
+
'[attr.id]': 'name()',
|
54
|
+
'[attr.data-state]': 'popoverRoot.state()',
|
55
|
+
'[attr.data-side]': 'popoverRoot.popoverContentDirective().side()',
|
56
|
+
'[attr.data-align]': 'popoverRoot.popoverContentDirective().align()',
|
57
|
+
'[style]': 'disableAnimation() ? {animation: "none !important"} : null',
|
58
|
+
'(animationstart)': 'onAnimationStart($event)',
|
59
|
+
'(animationend)': 'onAnimationEnd($event)'
|
60
|
+
},
|
61
|
+
providers: [
|
62
|
+
{
|
63
|
+
provide: RdxPopoverContentAttributesToken,
|
64
|
+
useExisting: forwardRef(() => RdxPopoverContentAttributesComponent)
|
65
|
+
}
|
66
|
+
],
|
67
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
68
|
+
}]
|
69
|
+
}] });
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LWF0dHJpYnV0ZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvcHJpbWl0aXZlcy9wb3BvdmVyL3NyYy9wb3BvdmVyLWNvbnRlbnQtYXR0cmlidXRlcy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUEwQjdFLE1BQU0sT0FBTyxvQ0FBb0M7SUF4QmpEO1FBeUJJLGNBQWM7UUFDSyxnQkFBVyxHQUFHLGlCQUFpQixFQUFFLENBQUM7UUFFckQsY0FBYztRQUNMLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsa0NBQWtDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWhHLGNBQWM7UUFDTCxxQkFBZ0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztLQTRCbEU7SUExQkcsY0FBYztJQUNKLGdCQUFnQixDQUFDLENBQWlCO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUNuQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLGVBQWUsQ0FBQyxJQUFJO1lBQzdDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxZQUFZO1lBQ3hDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxjQUFjLENBQ2pELENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNKLGNBQWMsQ0FBQyxDQUFpQjtRQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxlQUFlLENBQUMsSUFBSTtZQUM3QyxDQUFDLENBQUMseUJBQXlCLENBQUMsVUFBVTtZQUN0QyxDQUFDLENBQUMseUJBQXlCLENBQUMsWUFBWSxDQUMvQyxDQUFDO0lBQ04sQ0FBQztJQUVELGNBQWM7SUFDTixVQUFVO1FBQ2QsT0FBTyxDQUNILElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFO1lBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixFQUFFLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxlQUFlLENBQUMsSUFBSSxDQUFDO2dCQUMxRixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxLQUFLLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUN2RyxDQUFDO0lBQ04sQ0FBQzsrR0FuQ1Esb0NBQW9DO21HQUFwQyxvQ0FBb0Msc2ZBUmxDO1lBQ1A7Z0JBQ0ksT0FBTyxFQUFFLGdDQUFnQztnQkFDekMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQzthQUN0RTtTQUNKLDBCQWxCUzs7S0FFVDs7NEZBbUJRLG9DQUFvQztrQkF4QmhELFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLCtCQUErQjtvQkFDekMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7S0FFVDtvQkFDRCxJQUFJLEVBQUU7d0JBQ0YsYUFBYSxFQUFFLFVBQVU7d0JBQ3pCLFdBQVcsRUFBRSxRQUFRO3dCQUNyQixtQkFBbUIsRUFBRSxxQkFBcUI7d0JBQzFDLGtCQUFrQixFQUFFLDhDQUE4Qzt3QkFDbEUsbUJBQW1CLEVBQUUsK0NBQStDO3dCQUNwRSxTQUFTLEVBQUUsNERBQTREO3dCQUN2RSxrQkFBa0IsRUFBRSwwQkFBMEI7d0JBQzlDLGdCQUFnQixFQUFFLHdCQUF3QjtxQkFDN0M7b0JBQ0QsU0FBUyxFQUFFO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxnQ0FBZ0M7NEJBQ3pDLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHFDQUFxQyxDQUFDO3lCQUN0RTtxQkFDSjtvQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckNvbnRlbnRBdHRyaWJ1dGVzVG9rZW4gfSBmcm9tICcuL3BvcG92ZXItY29udGVudC1hdHRyaWJ1dGVzLnRva2VuJztcbmltcG9ydCB7IGluamVjdFBvcG92ZXJSb290IH0gZnJvbSAnLi9wb3BvdmVyLXJvb3QuaW5qZWN0JztcbmltcG9ydCB7IFJkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMsIFJkeFBvcG92ZXJTdGF0ZSB9IGZyb20gJy4vcG9wb3Zlci50eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnW3JkeFBvcG92ZXJDb250ZW50QXR0cmlidXRlc10nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLWNvbnRlbnQgLz5cbiAgICBgLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1thdHRyLnJvbGVdJzogJ1wiZGlhbG9nXCInLFxuICAgICAgICAnW2F0dHIuaWRdJzogJ25hbWUoKScsXG4gICAgICAgICdbYXR0ci5kYXRhLXN0YXRlXSc6ICdwb3BvdmVyUm9vdC5zdGF0ZSgpJyxcbiAgICAgICAgJ1thdHRyLmRhdGEtc2lkZV0nOiAncG9wb3ZlclJvb3QucG9wb3ZlckNvbnRlbnREaXJlY3RpdmUoKS5zaWRlKCknLFxuICAgICAgICAnW2F0dHIuZGF0YS1hbGlnbl0nOiAncG9wb3ZlclJvb3QucG9wb3ZlckNvbnRlbnREaXJlY3RpdmUoKS5hbGlnbigpJyxcbiAgICAgICAgJ1tzdHlsZV0nOiAnZGlzYWJsZUFuaW1hdGlvbigpID8ge2FuaW1hdGlvbjogXCJub25lICFpbXBvcnRhbnRcIn0gOiBudWxsJyxcbiAgICAgICAgJyhhbmltYXRpb25zdGFydCknOiAnb25BbmltYXRpb25TdGFydCgkZXZlbnQpJyxcbiAgICAgICAgJyhhbmltYXRpb25lbmQpJzogJ29uQW5pbWF0aW9uRW5kKCRldmVudCknXG4gICAgfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogUmR4UG9wb3ZlckNvbnRlbnRBdHRyaWJ1dGVzVG9rZW4sXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBSZHhQb3BvdmVyQ29udGVudEF0dHJpYnV0ZXNDb21wb25lbnQpXG4gICAgICAgIH1cbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFJkeFBvcG92ZXJDb250ZW50QXR0cmlidXRlc0NvbXBvbmVudCB7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcG9wb3ZlclJvb3QgPSBpbmplY3RQb3BvdmVyUm9vdCgpO1xuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBuYW1lID0gY29tcHV0ZWQoKCkgPT4gYHJkeC1wb3BvdmVyLWNvbnRlbnQtYXR0cmlidXRlcy0ke3RoaXMucG9wb3ZlclJvb3QudW5pcXVlSWQoKX1gKTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgZGlzYWJsZUFuaW1hdGlvbiA9IGNvbXB1dGVkKCgpID0+ICF0aGlzLmNhbkFuaW1hdGUoKSk7XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByb3RlY3RlZCBvbkFuaW1hdGlvblN0YXJ0KF86IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgICAgIHRoaXMucG9wb3ZlclJvb3QuY3NzQW5pbWF0aW9uU3RhdHVzLnNldChcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlclJvb3Quc3RhdGUoKSA9PT0gUmR4UG9wb3ZlclN0YXRlLk9QRU5cbiAgICAgICAgICAgICAgICA/IFJkeFBvcG92ZXJBbmltYXRpb25TdGF0dXMuT1BFTl9TVEFSVEVEXG4gICAgICAgICAgICAgICAgOiBSZHhQb3BvdmVyQW5pbWF0aW9uU3RhdHVzLkNMT1NFRF9TVEFSVEVEXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcm90ZWN0ZWQgb25BbmltYXRpb25FbmQoXzogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICAgICAgdGhpcy5wb3BvdmVyUm9vdC5jc3NBbmltYXRpb25TdGF0dXMuc2V0KFxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUm9vdC5zdGF0ZSgpID09PSBSZHhQb3BvdmVyU3RhdGUuT1BFTlxuICAgICAgICAgICAgICAgID8gUmR4UG9wb3ZlckFuaW1hdGlvblN0YXR1cy5PUEVOX0VOREVEXG4gICAgICAgICAgICAgICAgOiBSZHhQb3BvdmVyQW5pbWF0aW9uU3RhdHVzLkNMT1NFRF9FTkRFRFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBjYW5BbmltYXRlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUm9vdC5jc3NBbmltYXRpb24oKSAmJlxuICAgICAgICAgICAgKCh0aGlzLnBvcG92ZXJSb290LmNzc09wZW5pbmdBbmltYXRpb24oKSAmJiB0aGlzLnBvcG92ZXJSb290LnN0YXRlKCkgPT09IFJkeFBvcG92ZXJTdGF0ZS5PUEVOKSB8fFxuICAgICAgICAgICAgICAgICh0aGlzLnBvcG92ZXJSb290LmNzc0Nsb3NpbmdBbmltYXRpb24oKSAmJiB0aGlzLnBvcG92ZXJSb290LnN0YXRlKCkgPT09IFJkeFBvcG92ZXJTdGF0ZS5DTE9TRUQpKVxuICAgICAgICApO1xuICAgIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,3 @@
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
2
|
+
export const RdxPopoverContentAttributesToken = new InjectionToken('RdxPopoverContentAttributesToken');
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LWF0dHJpYnV0ZXMudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9wcmltaXRpdmVzL3BvcG92ZXIvc3JjL3BvcG92ZXItY29udGVudC1hdHRyaWJ1dGVzLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0MsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsSUFBSSxjQUFjLENBQzlELGtDQUFrQyxDQUNyQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJkeFBvcG92ZXJDb250ZW50QXR0cmlidXRlc0NvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci1jb250ZW50LWF0dHJpYnV0ZXMuY29tcG9uZW50JztcblxuZXhwb3J0IGNvbnN0IFJkeFBvcG92ZXJDb250ZW50QXR0cmlidXRlc1Rva2VuID0gbmV3IEluamVjdGlvblRva2VuPFJkeFBvcG92ZXJDb250ZW50QXR0cmlidXRlc0NvbXBvbmVudD4oXG4gICAgJ1JkeFBvcG92ZXJDb250ZW50QXR0cmlidXRlc1Rva2VuJ1xuKTtcbiJdfQ==
|
@@ -4,7 +4,7 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
4
4
|
import { filter, tap } from 'rxjs';
|
5
5
|
import { injectPopoverRoot } from './popover-root.inject';
|
6
6
|
import { DEFAULTS } from './popover.constants';
|
7
|
-
import { RdxPopoverAlign, RdxPopoverSide } from './popover.types';
|
7
|
+
import { RdxPopoverAlign, RdxPopoverAttachDetachEvent, RdxPopoverSide } from './popover.types';
|
8
8
|
import { getAllPossibleConnectedPositions, getContentPosition } from './popover.utils';
|
9
9
|
import * as i0 from "@angular/core";
|
10
10
|
import * as i1 from "@angular/cdk/overlay";
|
@@ -20,103 +20,80 @@ export class RdxPopoverContentDirective {
|
|
20
20
|
this.destroyRef = inject(DestroyRef);
|
21
21
|
/** @ignore */
|
22
22
|
this.connectedOverlay = inject(CdkConnectedOverlay);
|
23
|
+
/** @ignore */
|
24
|
+
this.name = computed(() => `rdx-popover-trigger-${this.popoverRoot.uniqueId()}`);
|
23
25
|
/**
|
24
|
-
* The preferred side of the trigger to render against when open. Will be reversed when collisions occur and avoidCollisions is enabled.
|
26
|
+
* @description The preferred side of the trigger to render against when open. Will be reversed when collisions occur and avoidCollisions is enabled.
|
27
|
+
* @default top
|
25
28
|
*/
|
26
29
|
this.side = input(RdxPopoverSide.Top);
|
27
30
|
/**
|
28
|
-
* The distance in pixels from the trigger.
|
31
|
+
* @description The distance in pixels from the trigger.
|
32
|
+
* @default undefined
|
29
33
|
*/
|
30
34
|
this.sideOffset = input(void 0);
|
31
35
|
/**
|
32
|
-
* The preferred alignment against the trigger. May change when collisions occur.
|
36
|
+
* @description The preferred alignment against the trigger. May change when collisions occur.
|
37
|
+
* @default center
|
33
38
|
*/
|
34
39
|
this.align = input(RdxPopoverAlign.Center);
|
35
40
|
/**
|
36
|
-
* An offset in pixels from the "start" or "end" alignment options.
|
41
|
+
* @description An offset in pixels from the "start" or "end" alignment options.
|
42
|
+
* @default undefined
|
37
43
|
*/
|
38
44
|
this.alignOffset = input(void 0);
|
39
45
|
/**
|
40
|
-
* Whether to add some alternate positions of the content.
|
46
|
+
* @description Whether to add some alternate positions of the content.
|
47
|
+
* @default false
|
41
48
|
*/
|
42
49
|
this.disableAlternatePositions = input(false);
|
43
|
-
/** @ingore */
|
44
|
-
this.positions = computed(() => {
|
45
|
-
const greatestDimensionFromTheArrow = Math.max(this.popoverRoot.popoverArrowDirective()?.width() ?? 0, this.popoverRoot.popoverArrowDirective()?.height() ?? 0);
|
46
|
-
const offsets = {
|
47
|
-
sideOffset: this.sideOffset() ?? (greatestDimensionFromTheArrow || DEFAULTS.offsets.side),
|
48
|
-
alignOffset: this.alignOffset() ?? (greatestDimensionFromTheArrow || DEFAULTS.offsets.align)
|
49
|
-
};
|
50
|
-
const basePosition = getContentPosition({
|
51
|
-
side: this.side(),
|
52
|
-
align: this.align(),
|
53
|
-
sideOffset: offsets.sideOffset,
|
54
|
-
alignOffset: offsets.alignOffset
|
55
|
-
});
|
56
|
-
const positions = [basePosition];
|
57
|
-
if (!this.disableAlternatePositions()) {
|
58
|
-
/**
|
59
|
-
* Alternate positions for better user experience along the X/Y axis (e.g. vertical/horizontal scrolling)
|
60
|
-
*/
|
61
|
-
const allPossibleConnectedPositions = getAllPossibleConnectedPositions();
|
62
|
-
allPossibleConnectedPositions.forEach((value, key) => {
|
63
|
-
const sideAndAlignArray = key.split('|');
|
64
|
-
if (sideAndAlignArray[0] !== this.side() ||
|
65
|
-
sideAndAlignArray[1] !== this.align()) {
|
66
|
-
positions.push(getContentPosition({
|
67
|
-
side: sideAndAlignArray[0],
|
68
|
-
align: sideAndAlignArray[1],
|
69
|
-
sideOffset: offsets.sideOffset,
|
70
|
-
alignOffset: offsets.alignOffset
|
71
|
-
}));
|
72
|
-
}
|
73
|
-
});
|
74
|
-
}
|
75
|
-
return positions;
|
76
|
-
});
|
77
50
|
/**
|
78
|
-
* Event handler called when the escape key is down. It can be prevented by calling event.preventDefault.
|
51
|
+
* @description Event handler called when the escape key is down. It can be prevented by calling event.preventDefault.
|
79
52
|
*/
|
80
53
|
this.onEscapeKeyDown = output();
|
81
54
|
/**
|
82
|
-
* Event handler called when a pointer event occurs outside the bounds of the component. It can be prevented by calling event.preventDefault.
|
55
|
+
* @description Event handler called when a pointer event occurs outside the bounds of the component. It can be prevented by calling event.preventDefault.
|
83
56
|
*/
|
84
|
-
this.
|
57
|
+
this.onOutsideClick = output();
|
85
58
|
/**
|
86
|
-
* Event handler called
|
59
|
+
* @description Event handler called after the overlay is open
|
87
60
|
*/
|
88
|
-
this.
|
61
|
+
this.onOpen = output();
|
89
62
|
/**
|
90
|
-
* Event handler called
|
63
|
+
* @description Event handler called after the overlay is closed
|
91
64
|
*/
|
92
|
-
this.
|
65
|
+
this.onClosed = output();
|
66
|
+
/** @ingore */
|
67
|
+
this.positions = computed(() => this.computePositions());
|
68
|
+
this.onOriginChangeEffect();
|
93
69
|
this.onPositionChangeEffect();
|
94
|
-
this.onControlledExternallyChangeEffect();
|
95
70
|
}
|
96
71
|
/** @ignore */
|
97
72
|
ngOnInit() {
|
98
|
-
this.setOrigin();
|
99
73
|
this.setScrollStrategy();
|
74
|
+
this.setDisableClose();
|
100
75
|
this.onAttach();
|
101
76
|
this.onDetach();
|
102
77
|
this.connectKeydownEscape();
|
103
78
|
this.connectOutsideClick();
|
104
79
|
}
|
105
80
|
/** @ignore */
|
106
|
-
|
81
|
+
open() {
|
82
|
+
if (this.connectedOverlay.open) {
|
83
|
+
return;
|
84
|
+
}
|
107
85
|
const prevOpen = this.connectedOverlay.open;
|
108
86
|
this.connectedOverlay.open = true;
|
109
|
-
|
110
|
-
this.connectedOverlay.ngOnChanges({ open: new SimpleChange(prevOpen, true, false) });
|
111
|
-
}
|
87
|
+
this.fireOverlayNgOnChanges('open', this.connectedOverlay.open, prevOpen);
|
112
88
|
}
|
113
89
|
/** @ignore */
|
114
|
-
|
90
|
+
close() {
|
91
|
+
if (!this.connectedOverlay.open) {
|
92
|
+
return;
|
93
|
+
}
|
115
94
|
const prevOpen = this.connectedOverlay.open;
|
116
95
|
this.connectedOverlay.open = false;
|
117
|
-
|
118
|
-
this.connectedOverlay.ngOnChanges({ open: new SimpleChange(prevOpen, false, false) });
|
119
|
-
}
|
96
|
+
this.fireOverlayNgOnChanges('open', this.connectedOverlay.open, prevOpen);
|
120
97
|
}
|
121
98
|
/** @ignore */
|
122
99
|
positionChange() {
|
@@ -128,9 +105,8 @@ export class RdxPopoverContentDirective {
|
|
128
105
|
.asObservable()
|
129
106
|
.pipe(filter((event) => event.key === 'Escape'), tap((event) => {
|
130
107
|
this.onEscapeKeyDown.emit(event);
|
131
|
-
|
132
|
-
|
133
|
-
}
|
108
|
+
}), filter((event) => !event.defaultPrevented && !this.popoverRoot.firstDefaultOpen()), tap(() => {
|
109
|
+
this.popoverRoot.handleClose();
|
134
110
|
}), takeUntilDestroyed(this.destroyRef))
|
135
111
|
.subscribe();
|
136
112
|
}
|
@@ -138,8 +114,20 @@ export class RdxPopoverContentDirective {
|
|
138
114
|
connectOutsideClick() {
|
139
115
|
this.connectedOverlay.overlayOutsideClick
|
140
116
|
.asObservable()
|
141
|
-
.pipe(
|
142
|
-
|
117
|
+
.pipe(
|
118
|
+
/**
|
119
|
+
* Handle the situation when an anchor is added and the anchor becomes the origin of the overlay
|
120
|
+
* hence the trigger will be considered the outside element
|
121
|
+
*/
|
122
|
+
filter((event) => {
|
123
|
+
return (!this.popoverRoot.popoverAnchorDirective() ||
|
124
|
+
!this.popoverRoot
|
125
|
+
.popoverTriggerDirective()
|
126
|
+
.elementRef.nativeElement.contains(event.target));
|
127
|
+
}), tap((event) => {
|
128
|
+
this.onOutsideClick.emit(event);
|
129
|
+
}), filter((event) => !event.defaultPrevented && !this.popoverRoot.firstDefaultOpen()), tap(() => {
|
130
|
+
this.popoverRoot.handleClose();
|
143
131
|
}), takeUntilDestroyed(this.destroyRef))
|
144
132
|
.subscribe();
|
145
133
|
}
|
@@ -148,7 +136,10 @@ export class RdxPopoverContentDirective {
|
|
148
136
|
this.connectedOverlay.attach
|
149
137
|
.asObservable()
|
150
138
|
.pipe(tap(() => {
|
151
|
-
|
139
|
+
/**
|
140
|
+
* `this.onOpen.emit();` is being delegated to the root directive due to the opening animation
|
141
|
+
*/
|
142
|
+
this.popoverRoot.attachDetachEvent.set(RdxPopoverAttachDetachEvent.ATTACH);
|
152
143
|
}), takeUntilDestroyed(this.destroyRef))
|
153
144
|
.subscribe();
|
154
145
|
}
|
@@ -157,7 +148,10 @@ export class RdxPopoverContentDirective {
|
|
157
148
|
this.connectedOverlay.detach
|
158
149
|
.asObservable()
|
159
150
|
.pipe(tap(() => {
|
160
|
-
|
151
|
+
/**
|
152
|
+
* `this.onClosed.emit();` is being delegated to the root directive due to the closing animation
|
153
|
+
*/
|
154
|
+
this.popoverRoot.attachDetachEvent.set(RdxPopoverAttachDetachEvent.DETACH);
|
161
155
|
}), takeUntilDestroyed(this.destroyRef))
|
162
156
|
.subscribe();
|
163
157
|
}
|
@@ -165,24 +159,68 @@ export class RdxPopoverContentDirective {
|
|
165
159
|
setScrollStrategy() {
|
166
160
|
const prevScrollStrategy = this.connectedOverlay.scrollStrategy;
|
167
161
|
this.connectedOverlay.scrollStrategy = this.overlay.scrollStrategies.reposition();
|
168
|
-
this.connectedOverlay.
|
169
|
-
scrollStrategy: new SimpleChange(prevScrollStrategy, this.connectedOverlay.scrollStrategy, false)
|
170
|
-
});
|
162
|
+
this.fireOverlayNgOnChanges('scrollStrategy', this.connectedOverlay.scrollStrategy, prevScrollStrategy);
|
171
163
|
}
|
172
164
|
/** @ignore */
|
173
165
|
setDisableClose() {
|
174
166
|
const prevDisableClose = this.connectedOverlay.disableClose;
|
175
|
-
this.connectedOverlay.disableClose =
|
176
|
-
this.connectedOverlay.
|
177
|
-
disableClose: new SimpleChange(prevDisableClose, this.connectedOverlay.disableClose, false)
|
178
|
-
});
|
167
|
+
this.connectedOverlay.disableClose = true;
|
168
|
+
this.fireOverlayNgOnChanges('disableClose', this.connectedOverlay.disableClose, prevDisableClose);
|
179
169
|
}
|
180
170
|
/** @ignore */
|
181
|
-
setOrigin() {
|
171
|
+
setOrigin(origin) {
|
182
172
|
const prevOrigin = this.connectedOverlay.origin;
|
183
|
-
this.connectedOverlay.origin =
|
184
|
-
this.connectedOverlay.
|
185
|
-
|
173
|
+
this.connectedOverlay.origin = origin;
|
174
|
+
this.fireOverlayNgOnChanges('origin', this.connectedOverlay.origin, prevOrigin);
|
175
|
+
}
|
176
|
+
/** @ignore */
|
177
|
+
setPositions(positions) {
|
178
|
+
const prevPositions = this.connectedOverlay.positions;
|
179
|
+
this.connectedOverlay.positions = positions;
|
180
|
+
this.fireOverlayNgOnChanges('positions', this.connectedOverlay.positions, prevPositions);
|
181
|
+
this.connectedOverlay.overlayRef?.updatePosition();
|
182
|
+
}
|
183
|
+
/** @ignore */
|
184
|
+
computePositions() {
|
185
|
+
const greatestDimensionFromTheArrow = Math.max(this.popoverRoot.popoverArrowDirective()?.width() ?? 0, this.popoverRoot.popoverArrowDirective()?.height() ?? 0);
|
186
|
+
const offsets = {
|
187
|
+
sideOffset: this.sideOffset() ?? (greatestDimensionFromTheArrow || DEFAULTS.offsets.side),
|
188
|
+
alignOffset: this.alignOffset() ?? DEFAULTS.offsets.align
|
189
|
+
};
|
190
|
+
const basePosition = getContentPosition({
|
191
|
+
side: this.side(),
|
192
|
+
align: this.align(),
|
193
|
+
sideOffset: offsets.sideOffset,
|
194
|
+
alignOffset: offsets.alignOffset
|
195
|
+
});
|
196
|
+
const positions = [basePosition];
|
197
|
+
if (!this.disableAlternatePositions()) {
|
198
|
+
/**
|
199
|
+
* Alternate positions for better user experience along the X/Y axis (e.g. vertical/horizontal scrolling)
|
200
|
+
*/
|
201
|
+
const allPossibleConnectedPositions = getAllPossibleConnectedPositions();
|
202
|
+
allPossibleConnectedPositions.forEach((_, key) => {
|
203
|
+
const sideAndAlignArray = key.split('|');
|
204
|
+
if (sideAndAlignArray[0] !== this.side() ||
|
205
|
+
sideAndAlignArray[1] !== this.align()) {
|
206
|
+
positions.push(getContentPosition({
|
207
|
+
side: sideAndAlignArray[0],
|
208
|
+
align: sideAndAlignArray[1],
|
209
|
+
sideOffset: offsets.sideOffset,
|
210
|
+
alignOffset: offsets.alignOffset
|
211
|
+
}));
|
212
|
+
}
|
213
|
+
});
|
214
|
+
}
|
215
|
+
return positions;
|
216
|
+
}
|
217
|
+
onOriginChangeEffect() {
|
218
|
+
effect(() => {
|
219
|
+
const origin = (this.popoverRoot.popoverAnchorDirective() ?? this.popoverRoot.popoverTriggerDirective())
|
220
|
+
.overlayOrigin;
|
221
|
+
untracked(() => {
|
222
|
+
this.setOrigin(origin);
|
223
|
+
});
|
186
224
|
});
|
187
225
|
}
|
188
226
|
/** @ignore */
|
@@ -191,26 +229,18 @@ export class RdxPopoverContentDirective {
|
|
191
229
|
const positions = this.positions();
|
192
230
|
this.disableAlternatePositions();
|
193
231
|
untracked(() => {
|
194
|
-
|
195
|
-
this.connectedOverlay.positions = positions;
|
196
|
-
this.connectedOverlay.ngOnChanges({
|
197
|
-
positions: new SimpleChange(prevPositions, this.connectedOverlay.positions, false)
|
198
|
-
});
|
199
|
-
this.connectedOverlay.overlayRef?.updatePosition();
|
232
|
+
this.setPositions(positions);
|
200
233
|
});
|
201
234
|
});
|
202
235
|
}
|
203
236
|
/** @ignore */
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
untracked(() => {
|
208
|
-
this.setDisableClose();
|
209
|
-
});
|
237
|
+
fireOverlayNgOnChanges(input, currentValue, previousValue, firstChange = false) {
|
238
|
+
this.connectedOverlay.ngOnChanges({
|
239
|
+
[input]: new SimpleChange(previousValue, currentValue, firstChange)
|
210
240
|
});
|
211
241
|
}
|
212
242
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverContentDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
213
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxPopoverContentDirective, isStandalone: true, selector: "[rdxPopoverContent]", inputs: { side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, alignOffset: { classPropertyName: "alignOffset", publicName: "alignOffset", isSignal: true, isRequired: false, transformFunction: null }, disableAlternatePositions: { classPropertyName: "disableAlternatePositions", publicName: "disableAlternatePositions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onEscapeKeyDown: "onEscapeKeyDown",
|
243
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: RdxPopoverContentDirective, isStandalone: true, selector: "[rdxPopoverContent]", inputs: { side: { classPropertyName: "side", publicName: "side", isSignal: true, isRequired: false, transformFunction: null }, sideOffset: { classPropertyName: "sideOffset", publicName: "sideOffset", isSignal: true, isRequired: false, transformFunction: null }, align: { classPropertyName: "align", publicName: "align", isSignal: true, isRequired: false, transformFunction: null }, alignOffset: { classPropertyName: "alignOffset", publicName: "alignOffset", isSignal: true, isRequired: false, transformFunction: null }, disableAlternatePositions: { classPropertyName: "disableAlternatePositions", publicName: "disableAlternatePositions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onEscapeKeyDown: "onEscapeKeyDown", onOutsideClick: "onOutsideClick", onOpen: "onOpen", onClosed: "onClosed" }, hostDirectives: [{ directive: i1.CdkConnectedOverlay }], ngImport: i0 }); }
|
214
244
|
}
|
215
245
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: RdxPopoverContentDirective, decorators: [{
|
216
246
|
type: Directive,
|
@@ -218,10 +248,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
|
|
218
248
|
selector: '[rdxPopoverContent]',
|
219
249
|
standalone: true,
|
220
250
|
hostDirectives: [
|
221
|
-
|
222
|
-
directive: CdkConnectedOverlay
|
223
|
-
}
|
251
|
+
CdkConnectedOverlay
|
224
252
|
]
|
225
253
|
}]
|
226
254
|
}], ctorParameters: () => [] });
|
227
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUNILFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDMUYsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVd2RixNQUFNLE9BQU8sMEJBQTBCO0lBZ0duQztRQS9GQSxjQUFjO1FBQ0wsZ0JBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNDLGNBQWM7UUFDTCxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzQyxjQUFjO1FBQ0wsWUFBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxjQUFjO1FBQ0wsZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QyxjQUFj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RSxFQUFFLENBQUM7WUFDMUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7K0dBalBRLDBCQUEwQjttR0FBMUIsMEJBQTBCOzs0RkFBMUIsMEJBQTBCO2tCQVR0QyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFVBQVUsRUFBRSxJQUFJO29CQUNoQixjQUFjLEVBQUU7d0JBQ1o7NEJBQ0ksU0FBUyxFQUFFLG1CQUFtQjt5QkFDakM7cUJBQ0o7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtDb25uZWN0ZWRPdmVybGF5LCBPdmVybGF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgICBjb21wdXRlZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIE9uSW5pdCxcbiAgICBvdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIHVudHJhY2tlZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RQb3BvdmVyUm9vdCB9IGZyb20gJy4vcG9wb3Zlci1yb290LmluamVjdCc7XG5pbXBvcnQgeyBERUZBVUxUUyB9IGZyb20gJy4vcG9wb3Zlci5jb25zdGFudHMnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckFsaWduLCBSZHhQb3BvdmVyU2lkZSwgUmR4U2lkZUFuZEFsaWduT2Zmc2V0cyB9IGZyb20gJy4vcG9wb3Zlci50eXBlcyc7XG5pbXBvcnQgeyBnZXRBbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucywgZ2V0Q29udGVudFBvc2l0aW9uIH0gZnJvbSAnLi9wb3BvdmVyLnV0aWxzJztcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcmR4UG9wb3ZlckNvbnRlbnRdJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRpcmVjdGl2ZTogQ2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBSZHhQb3BvdmVyQ29udGVudERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBwb3BvdmVyUm9vdCA9IGluamVjdFBvcG92ZXJSb290KCk7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZik7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICByZWFkb25seSBvdmVybGF5ID0gaW5qZWN0KE92ZXJsYXkpO1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGVkT3ZlcmxheSA9IGluamVjdChDZGtDb25uZWN0ZWRPdmVybGF5KTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBwcmVmZXJyZWQgc2lkZSBvZiB0aGUgdHJpZ2dlciB0byByZW5kZXIgYWdhaW5zdCB3aGVuIG9wZW4uIFdpbGwgYmUgcmV2ZXJzZWQgd2hlbiBjb2xsaXNpb25zIG9jY3VyIGFuZCBhdm9pZENvbGxpc2lvbnMgaXMgZW5hYmxlZC5cbiAgICAgKi9cbiAgICByZWFkb25seSBzaWRlID0gaW5wdXQ8UmR4UG9wb3ZlclNpZGU+KFJkeFBvcG92ZXJTaWRlLlRvcCk7XG4gICAgLyoqXG4gICAgICogVGhlIGRpc3RhbmNlIGluIHBpeGVscyBmcm9tIHRoZSB0cmlnZ2VyLlxuICAgICAqL1xuICAgIHJlYWRvbmx5IHNpZGVPZmZzZXQgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KHZvaWQgMCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgcHJlZmVycmVkIGFsaWdubWVudCBhZ2FpbnN0IHRoZSB0cmlnZ2VyLiBNYXkgY2hhbmdlIHdoZW4gY29sbGlzaW9ucyBvY2N1ci5cbiAgICAgKi9cbiAgICByZWFkb25seSBhbGlnbiA9IGlucHV0PFJkeFBvcG92ZXJBbGlnbj4oUmR4UG9wb3ZlckFsaWduLkNlbnRlcik7XG4gICAgLyoqXG4gICAgICogQW4gb2Zmc2V0IGluIHBpeGVscyBmcm9tIHRoZSBcInN0YXJ0XCIgb3IgXCJlbmRcIiBhbGlnbm1lbnQgb3B0aW9ucy5cbiAgICAgKi9cbiAgICByZWFkb25seSBhbGlnbk9mZnNldCA9IGlucHV0PG51bWJlciB8IHVuZGVmaW5lZD4odm9pZCAwKTtcblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgdG8gYWRkIHNvbWUgYWx0ZXJuYXRlIHBvc2l0aW9ucyBvZiB0aGUgY29udGVudC5cbiAgICAgKi9cbiAgICByZWFkb25seSBkaXNhYmxlQWx0ZXJuYXRlUG9zaXRpb25zID0gaW5wdXQoZmFsc2UpO1xuXG4gICAgLyoqIEBpbmdvcmUgKi9cbiAgICByZWFkb25seSBwb3NpdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdyZWF0ZXN0RGltZW5zaW9uRnJvbVRoZUFycm93ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LnBvcG92ZXJBcnJvd0RpcmVjdGl2ZSgpPy53aWR0aCgpID8/IDAsXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LnBvcG92ZXJBcnJvd0RpcmVjdGl2ZSgpPy5oZWlnaHQoKSA/PyAwXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9mZnNldHM6IFJkeFNpZGVBbmRBbGlnbk9mZnNldHMgPSB7XG4gICAgICAgICAgICBzaWRlT2Zmc2V0OiB0aGlzLnNpZGVPZmZzZXQoKSA/PyAoZ3JlYXRlc3REaW1lbnNpb25Gcm9tVGhlQXJyb3cgfHwgREVGQVVMVFMub2Zmc2V0cy5zaWRlKSxcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0OiB0aGlzLmFsaWduT2Zmc2V0KCkgPz8gKGdyZWF0ZXN0RGltZW5zaW9uRnJvbVRoZUFycm93IHx8IERFRkFVTFRTLm9mZnNldHMuYWxpZ24pXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJhc2VQb3NpdGlvbiA9IGdldENvbnRlbnRQb3NpdGlvbih7XG4gICAgICAgICAgICBzaWRlOiB0aGlzLnNpZGUoKSxcbiAgICAgICAgICAgIGFsaWduOiB0aGlzLmFsaWduKCksXG4gICAgICAgICAgICBzaWRlT2Zmc2V0OiBvZmZzZXRzLnNpZGVPZmZzZXQsXG4gICAgICAgICAgICBhbGlnbk9mZnNldDogb2Zmc2V0cy5hbGlnbk9mZnNldFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25zID0gW2Jhc2VQb3NpdGlvbl07XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlQWx0ZXJuYXRlUG9zaXRpb25zKCkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWx0ZXJuYXRlIHBvc2l0aW9ucyBmb3IgYmV0dGVyIHVzZXIgZXhwZXJpZW5jZSBhbG9uZyB0aGUgWC9ZIGF4aXMgKGUuZy4gdmVydGljYWwvaG9yaXpvbnRhbCBzY3JvbGxpbmcpXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvbnN0IGFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zID0gZ2V0QWxsUG9zc2libGVDb25uZWN0ZWRQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgIGFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRlQW5kQWxpZ25BcnJheSA9IGtleS5zcGxpdCgnfCcpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKHNpZGVBbmRBbGlnbkFycmF5WzBdIGFzIFJkeFBvcG92ZXJTaWRlKSAhPT0gdGhpcy5zaWRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHNpZGVBbmRBbGlnbkFycmF5WzFdIGFzIFJkeFBvcG92ZXJBbGlnbikgIT09IHRoaXMuYWxpZ24oKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRlbnRQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZTogc2lkZUFuZEFsaWduQXJyYXlbMF0gYXMgUmR4UG9wb3ZlclNpZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246IHNpZGVBbmRBbGlnbkFycmF5WzFdIGFzIFJkeFBvcG92ZXJBbGlnbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlT2Zmc2V0OiBvZmZzZXRzLnNpZGVPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25PZmZzZXQ6IG9mZnNldHMuYWxpZ25PZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9ucztcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIGVzY2FwZSBrZXkgaXMgZG93bi4gSXQgY2FuIGJlIHByZXZlbnRlZCBieSBjYWxsaW5nIGV2ZW50LnByZXZlbnREZWZhdWx0LlxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9uRXNjYXBlS2V5RG93biA9IG91dHB1dDxLZXlib2FyZEV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaGFuZGxlciBjYWxsZWQgd2hlbiBhIHBvaW50ZXIgZXZlbnQgb2NjdXJzIG91dHNpZGUgdGhlIGJvdW5kcyBvZiB0aGUgY29tcG9uZW50LiBJdCBjYW4gYmUgcHJldmVudGVkIGJ5IGNhbGxpbmcgZXZlbnQucHJldmVudERlZmF1bHQuXG4gICAgICovXG4gICAgcmVhZG9ubHkgb25Qb2ludGVyRG93bk91dHNpZGUgPSBvdXRwdXQ8TW91c2VFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIG92ZXJsYXkgaXMgYXRhY2hlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9uU2hvdyA9IG91dHB1dDx2b2lkPigpO1xuICAgIC8qKlxuICAgICAqIEV2ZW50IGhhbmRsZXIgY2FsbGVkIHdoZW4gdGhlIG92ZXJsYXkgaXMgZGV0YWNoZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBvbkhpZGUgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm9uUG9zaXRpb25DaGFuZ2VFZmZlY3QoKTtcbiAgICAgICAgdGhpcy5vbkNvbnRyb2xsZWRFeHRlcm5hbGx5Q2hhbmdlRWZmZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRPcmlnaW4oKTtcbiAgICAgICAgdGhpcy5zZXRTY3JvbGxTdHJhdGVneSgpO1xuICAgICAgICB0aGlzLm9uQXR0YWNoKCk7XG4gICAgICAgIHRoaXMub25EZXRhY2goKTtcbiAgICAgICAgdGhpcy5jb25uZWN0S2V5ZG93bkVzY2FwZSgpO1xuICAgICAgICB0aGlzLmNvbm5lY3RPdXRzaWRlQ2xpY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHNob3coKSB7XG4gICAgICAgIGNvbnN0IHByZXZPcGVuID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW47XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFwcmV2T3Blbikge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm5nT25DaGFuZ2VzKHsgb3BlbjogbmV3IFNpbXBsZUNoYW5nZShwcmV2T3BlbiwgdHJ1ZSwgZmFsc2UpIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBoaWRlKCkge1xuICAgICAgICBjb25zdCBwcmV2T3BlbiA9IHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3BlbiA9IGZhbHNlO1xuICAgICAgICBpZiAocHJldk9wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5uZ09uQ2hhbmdlcyh7IG9wZW46IG5ldyBTaW1wbGVDaGFuZ2UocHJldk9wZW4sIGZhbHNlLCBmYWxzZSkgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHBvc2l0aW9uQ2hhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9uQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBjb25uZWN0S2V5ZG93bkVzY2FwZSgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlLZXlkb3duXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpLFxuICAgICAgICAgICAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVzY2FwZUtleURvd24uZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUm9vdC5oYW5kbGVDbG9zZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgY29ubmVjdE91dHNpZGVDbGljaygpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlPdXRzaWRlQ2xpY2tcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25PdXRzaWRlLmVtaXQoZXZlbnQpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uQXR0YWNoKCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuYXR0YWNoXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25TaG93LmVtaXQoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBvbkRldGFjaCgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRldGFjaFxuICAgICAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uSGlkZS5lbWl0KCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgc2V0U2Nyb2xsU3RyYXRlZ3koKSB7XG4gICAgICAgIGNvbnN0IHByZXZTY3JvbGxTdHJhdGVneSA9IHRoaXMuY29ubmVjdGVkT3ZlcmxheS5zY3JvbGxTdHJhdGVneTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LnNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkubmdPbkNoYW5nZXMoe1xuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IG5ldyBTaW1wbGVDaGFuZ2UocHJldlNjcm9sbFN0cmF0ZWd5LCB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuc2Nyb2xsU3RyYXRlZ3ksIGZhbHNlKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgc2V0RGlzYWJsZUNsb3NlKCkge1xuICAgICAgICBjb25zdCBwcmV2RGlzYWJsZUNsb3NlID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRpc2FibGVDbG9zZTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRpc2FibGVDbG9zZSA9IHRoaXMucG9wb3ZlclJvb3QuY29udHJvbGxlZEV4dGVybmFsbHkoKSgpO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkubmdPbkNoYW5nZXMoe1xuICAgICAgICAgICAgZGlzYWJsZUNsb3NlOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZEaXNhYmxlQ2xvc2UsIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5kaXNhYmxlQ2xvc2UsIGZhbHNlKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgc2V0T3JpZ2luKCkge1xuICAgICAgICBjb25zdCBwcmV2T3JpZ2luID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9yaWdpbjtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9yaWdpbiA9IHRoaXMucG9wb3ZlclJvb3QucG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUoKS5vdmVybGF5T3JpZ2luO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkubmdPbkNoYW5nZXMoe1xuICAgICAgICAgICAgb3JpZ2luOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZPcmlnaW4sIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcmlnaW4sIGZhbHNlKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb25Qb3NpdGlvbkNoYW5nZUVmZmVjdCgpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVBbHRlcm5hdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldlBvc2l0aW9ucyA9IHRoaXMuY29ubmVjdGVkT3ZlcmxheS5wb3NpdGlvbnM7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICAgICAgICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkubmdPbkNoYW5nZXMoe1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnM6IG5ldyBTaW1wbGVDaGFuZ2UocHJldlBvc2l0aW9ucywgdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9ucywgZmFsc2UpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uQ29udHJvbGxlZEV4dGVybmFsbHlDaGFuZ2VFZmZlY3QoKSB7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LmNvbnRyb2xsZWRFeHRlcm5hbGx5KCkoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREaXNhYmxlQ2xvc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3ByaW1pdGl2ZXMvcG9wb3Zlci9zcmMvcG9wb3Zlci1jb250ZW50LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEUsT0FBTyxFQUNILFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGVBQWUsRUFBRSwyQkFBMkIsRUFBRSxjQUFjLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQVN2RixNQUFNLE9BQU8sMEJBQTBCO0lBZ0VuQztRQS9EQSxjQUFjO1FBQ0csZ0JBQVcsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQ25ELGNBQWM7UUFDRyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNuRCxjQUFjO1FBQ0csWUFBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQyxjQUFjO1FBQ0csZUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxjQUFjO1FBQ0cscUJBQWdCLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFaEUsY0FBYztRQUNMLFNBQUksR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRXJGOzs7V0FHRztRQUNNLFNBQUksR0FBRyxLQUFLLENBQWlCLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMxRDs7O1dBR0c7UUFDTSxlQUFVLEdBQUcsS0FBSyxDQUFxQixLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3hEOzs7V0FHRztRQUNNLFVBQUssR0FBRyxLQUFLLENBQWtCLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRTs7O1dBR0c7UUFDTSxnQkFBVyxHQUFHLEtBQUssQ0FBcUIsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV6RDs7O1dBR0c7UUFDTSw4QkFBeUIsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFbEQ7O1dBRUc7UUFDTSxvQkFBZSxHQUFHLE1BQU0sRUFBaUIsQ0FBQztRQUVuRDs7V0FFRztRQUNNLG1CQUFjLEdBQUcsTUFBTSxFQUFjLENBQUM7UUFFL0M7O1dBRUc7UUFDTSxXQUFNLEdBQUcsTUFBTSxFQUFRLENBQUM7UUFDakM7O1dBRUc7UUFDTSxhQUFRLEdBQUcsTUFBTSxFQUFRLENBQUM7UUFFbkMsY0FBYztRQUNMLGNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUd6RCxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsY0FBYztJQUNkLFFBQVE7UUFDSixJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsY0FBYztJQUNkLElBQUk7UUFDQSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QixPQUFPO1FBQ1gsQ0FBQztRQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDbEMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxjQUFjO0lBQ2QsS0FBSztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDOUIsT0FBTztRQUNYLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO1FBQzVDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUM5RSxDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWM7UUFDVixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDL0QsQ0FBQztJQUVELGNBQWM7SUFDTixvQkFBb0I7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWM7YUFDL0IsWUFBWSxFQUFFO2FBQ2QsSUFBSSxDQUNELE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsRUFDekMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDVixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLEVBQ2xGLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDTCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25DLENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsY0FBYztJQUNOLG1CQUFtQjtRQUN2QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CO2FBQ3BDLFlBQVksRUFBRTthQUNkLElBQUk7UUFDRDs7O1dBR0c7UUFDSCxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNiLE9BQU8sQ0FDSCxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUU7Z0JBQzFDLENBQUMsSUFBSSxDQUFDLFdBQVc7cUJBQ1osdUJBQXVCLEVBQUU7cUJBQ3pCLFVBQVUsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFpQixDQUFDLENBQ2xFLENBQUM7UUFDTixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNWLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUMsRUFDbEYsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkMsQ0FBQyxDQUFDLEVBQ0Ysa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUN0QzthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFRCxjQUFjO0lBQ04sUUFBUTtRQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNO2FBQ3ZCLFlBQVksRUFBRTthQUNkLElBQUksQ0FDRCxHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ0w7O2VBRUc7WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvRSxDQUFDLENBQUMsRUFDRixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQ3RDO2FBQ0EsU0FBUyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELGNBQWM7SUFDTixRQUFRO1FBQ1osSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU07YUFDdkIsWUFBWSxFQUFFO2FBQ2QsSUFBSSxDQUNELEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDTDs7ZUFFRztZQUNILElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9FLENBQUMsQ0FBQyxFQUNGLGtCQUFrQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FDdEM7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsY0FBYztJQUNOLGlCQUFpQjtRQUNyQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUM7UUFDaEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xGLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLGtCQUFrQixDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVELGNBQWM7SUFDTixlQUFlO1FBQ25CLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQztRQUM1RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUMxQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztJQUN0RyxDQUFDO0lBRUQsY0FBYztJQUNOLFNBQVMsQ0FBQyxNQUFxQztRQUNuRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1FBQ2hELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3RDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsY0FBYztJQUNOLFlBQVksQ0FBQyxTQUEyQztRQUM1RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDO1FBQ3RELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBQzVDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN6RixJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLGNBQWMsRUFBRSxDQUFDO0lBQ3ZELENBQUM7SUFFRCxjQUFjO0lBQ04sZ0JBQWdCO1FBQ3BCLE1BQU0sNkJBQTZCLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FDMUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsRUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FDMUQsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUEyQjtZQUNwQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsNkJBQTZCLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDekYsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUs7U0FDNUQsQ0FBQztRQUNGLE1BQU0sWUFBWSxHQUFHLGtCQUFrQixDQUFDO1lBQ3BDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ2pCLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ25CLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtZQUM5QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7U0FDbkMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLEVBQUUsQ0FBQztZQUNwQzs7ZUFFRztZQUNILE1BQU0sNkJBQTZCLEdBQUcsZ0NBQWdDLEVBQUUsQ0FBQztZQUN6RSw2QkFBNkIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQzdDLE1BQU0saUJBQWlCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDekMsSUFDSyxpQkFBaUIsQ0FBQyxDQUFDLENBQW9CLEtBQUssSUFBSSxDQUFDLElBQUksRUFBRTtvQkFDdkQsaUJBQWlCLENBQUMsQ0FBQyxDQUFxQixLQUFLLElBQUksQ0FBQyxLQUFLLEVBQUUsRUFDNUQsQ0FBQztvQkFDQyxTQUFTLENBQUMsSUFBSSxDQUNWLGtCQUFrQixDQUFDO3dCQUNmLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQW1CO3dCQUM1QyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFvQjt3QkFDOUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO3dCQUM5QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7cUJBQ25DLENBQUMsQ0FDTCxDQUFDO2dCQUNOLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsc0JBQXNCLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUM7aUJBQ25HLGFBQWEsQ0FBQztZQUNuQixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNYLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxjQUFjO0lBQ04sc0JBQXNCO1FBQzFCLE1BQU0sQ0FBQyxHQUFHLEVBQUU7WUFDUixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDbkMsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7WUFDakMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDWCxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztJQUNOLHNCQUFzQixDQUMxQixLQUFRLEVBQ1IsWUFBZSxFQUNmLGFBQWdCLEVBQ2hCLFdBQVcsR0FBRyxLQUFLO1FBRW5CLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUM7WUFDOUIsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLFlBQVksQ0FBQyxhQUFhLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQztTQUN0RSxDQUFDLENBQUM7SUFDUCxDQUFDOytHQTdSUSwwQkFBMEI7bUdBQTFCLDBCQUEwQjs7NEZBQTFCLDBCQUEwQjtrQkFQdEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixVQUFVLEVBQUUsSUFBSTtvQkFDaEIsY0FBYyxFQUFFO3dCQUNaLG1CQUFtQjtxQkFDdEI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtDb25uZWN0ZWRPdmVybGF5LCBPdmVybGF5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHtcbiAgICBjb21wdXRlZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIE9uSW5pdCxcbiAgICBvdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIHVudHJhY2tlZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IGZpbHRlciwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBpbmplY3RQb3BvdmVyUm9vdCB9IGZyb20gJy4vcG9wb3Zlci1yb290LmluamVjdCc7XG5pbXBvcnQgeyBERUZBVUxUUyB9IGZyb20gJy4vcG9wb3Zlci5jb25zdGFudHMnO1xuaW1wb3J0IHsgUmR4UG9wb3ZlckFsaWduLCBSZHhQb3BvdmVyQXR0YWNoRGV0YWNoRXZlbnQsIFJkeFBvcG92ZXJTaWRlLCBSZHhTaWRlQW5kQWxpZ25PZmZzZXRzIH0gZnJvbSAnLi9wb3BvdmVyLnR5cGVzJztcbmltcG9ydCB7IGdldEFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zLCBnZXRDb250ZW50UG9zaXRpb24gfSBmcm9tICcuL3BvcG92ZXIudXRpbHMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tyZHhQb3BvdmVyQ29udGVudF0nLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAgQ2RrQ29ubmVjdGVkT3ZlcmxheVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgUmR4UG9wb3ZlckNvbnRlbnREaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBwb3BvdmVyUm9vdCA9IGluamVjdFBvcG92ZXJSb290KCk7XG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgb3ZlcmxheSA9IGluamVjdChPdmVybGF5KTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY29ubmVjdGVkT3ZlcmxheSA9IGluamVjdChDZGtDb25uZWN0ZWRPdmVybGF5KTtcblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgbmFtZSA9IGNvbXB1dGVkKCgpID0+IGByZHgtcG9wb3Zlci10cmlnZ2VyLSR7dGhpcy5wb3BvdmVyUm9vdC51bmlxdWVJZCgpfWApO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBwcmVmZXJyZWQgc2lkZSBvZiB0aGUgdHJpZ2dlciB0byByZW5kZXIgYWdhaW5zdCB3aGVuIG9wZW4uIFdpbGwgYmUgcmV2ZXJzZWQgd2hlbiBjb2xsaXNpb25zIG9jY3VyIGFuZCBhdm9pZENvbGxpc2lvbnMgaXMgZW5hYmxlZC5cbiAgICAgKiBAZGVmYXVsdCB0b3BcbiAgICAgKi9cbiAgICByZWFkb25seSBzaWRlID0gaW5wdXQ8UmR4UG9wb3ZlclNpZGU+KFJkeFBvcG92ZXJTaWRlLlRvcCk7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRoZSBkaXN0YW5jZSBpbiBwaXhlbHMgZnJvbSB0aGUgdHJpZ2dlci5cbiAgICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICAgKi9cbiAgICByZWFkb25seSBzaWRlT2Zmc2V0ID0gaW5wdXQ8bnVtYmVyIHwgdW5kZWZpbmVkPih2b2lkIDApO1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUaGUgcHJlZmVycmVkIGFsaWdubWVudCBhZ2FpbnN0IHRoZSB0cmlnZ2VyLiBNYXkgY2hhbmdlIHdoZW4gY29sbGlzaW9ucyBvY2N1ci5cbiAgICAgKiBAZGVmYXVsdCBjZW50ZXJcbiAgICAgKi9cbiAgICByZWFkb25seSBhbGlnbiA9IGlucHV0PFJkeFBvcG92ZXJBbGlnbj4oUmR4UG9wb3ZlckFsaWduLkNlbnRlcik7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEFuIG9mZnNldCBpbiBwaXhlbHMgZnJvbSB0aGUgXCJzdGFydFwiIG9yIFwiZW5kXCIgYWxpZ25tZW50IG9wdGlvbnMuXG4gICAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgYWxpZ25PZmZzZXQgPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQ+KHZvaWQgMCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gV2hldGhlciB0byBhZGQgc29tZSBhbHRlcm5hdGUgcG9zaXRpb25zIG9mIHRoZSBjb250ZW50LlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcmVhZG9ubHkgZGlzYWJsZUFsdGVybmF0ZVBvc2l0aW9ucyA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCBoYW5kbGVyIGNhbGxlZCB3aGVuIHRoZSBlc2NhcGUga2V5IGlzIGRvd24uIEl0IGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZyBldmVudC5wcmV2ZW50RGVmYXVsdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBvbkVzY2FwZUtleURvd24gPSBvdXRwdXQ8S2V5Ym9hcmRFdmVudD4oKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFdmVudCBoYW5kbGVyIGNhbGxlZCB3aGVuIGEgcG9pbnRlciBldmVudCBvY2N1cnMgb3V0c2lkZSB0aGUgYm91bmRzIG9mIHRoZSBjb21wb25lbnQuIEl0IGNhbiBiZSBwcmV2ZW50ZWQgYnkgY2FsbGluZyBldmVudC5wcmV2ZW50RGVmYXVsdC5cbiAgICAgKi9cbiAgICByZWFkb25seSBvbk91dHNpZGVDbGljayA9IG91dHB1dDxNb3VzZUV2ZW50PigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIEV2ZW50IGhhbmRsZXIgY2FsbGVkIGFmdGVyIHRoZSBvdmVybGF5IGlzIG9wZW5cbiAgICAgKi9cbiAgICByZWFkb25seSBvbk9wZW4gPSBvdXRwdXQ8dm9pZD4oKTtcbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRXZlbnQgaGFuZGxlciBjYWxsZWQgYWZ0ZXIgdGhlIG92ZXJsYXkgaXMgY2xvc2VkXG4gICAgICovXG4gICAgcmVhZG9ubHkgb25DbG9zZWQgPSBvdXRwdXQ8dm9pZD4oKTtcblxuICAgIC8qKiBAaW5nb3JlICovXG4gICAgcmVhZG9ubHkgcG9zaXRpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb21wdXRlUG9zaXRpb25zKCkpO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMub25PcmlnaW5DaGFuZ2VFZmZlY3QoKTtcbiAgICAgICAgdGhpcy5vblBvc2l0aW9uQ2hhbmdlRWZmZWN0KCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXRTY3JvbGxTdHJhdGVneSgpO1xuICAgICAgICB0aGlzLnNldERpc2FibGVDbG9zZSgpO1xuICAgICAgICB0aGlzLm9uQXR0YWNoKCk7XG4gICAgICAgIHRoaXMub25EZXRhY2goKTtcbiAgICAgICAgdGhpcy5jb25uZWN0S2V5ZG93bkVzY2FwZSgpO1xuICAgICAgICB0aGlzLmNvbm5lY3RPdXRzaWRlQ2xpY2soKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG9wZW4oKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3Blbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByZXZPcGVuID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW47XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5maXJlT3ZlcmxheU5nT25DaGFuZ2VzKCdvcGVuJywgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW4sIHByZXZPcGVuKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAoIXRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcGVuKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJldk9wZW4gPSB0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3BlbjtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW4gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5maXJlT3ZlcmxheU5nT25DaGFuZ2VzKCdvcGVuJywgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm9wZW4sIHByZXZPcGVuKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHBvc2l0aW9uQ2hhbmdlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9uQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBjb25uZWN0S2V5ZG93bkVzY2FwZSgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlLZXlkb3duXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpLFxuICAgICAgICAgICAgICAgIHRhcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkVzY2FwZUtleURvd24uZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgIXRoaXMucG9wb3ZlclJvb3QuZmlyc3REZWZhdWx0T3BlbigpKSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LmhhbmRsZUNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgY29ubmVjdE91dHNpZGVDbGljaygpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlPdXRzaWRlQ2xpY2tcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSGFuZGxlIHRoZSBzaXR1YXRpb24gd2hlbiBhbiBhbmNob3IgaXMgYWRkZWQgYW5kIHRoZSBhbmNob3IgYmVjb21lcyB0aGUgb3JpZ2luIG9mIHRoZSBvdmVybGF5XG4gICAgICAgICAgICAgICAgICogaGVuY2UgIHRoZSB0cmlnZ2VyIHdpbGwgYmUgY29uc2lkZXJlZCB0aGUgb3V0c2lkZSBlbGVtZW50XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMucG9wb3ZlclJvb3QucG9wb3ZlckFuY2hvckRpcmVjdGl2ZSgpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAhdGhpcy5wb3BvdmVyUm9vdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5wb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQgYXMgRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25PdXRzaWRlQ2xpY2suZW1pdChldmVudCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gIWV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgJiYgIXRoaXMucG9wb3ZlclJvb3QuZmlyc3REZWZhdWx0T3BlbigpKSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LmhhbmRsZUNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb25BdHRhY2goKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5hdHRhY2hcbiAgICAgICAgICAgIC5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIGB0aGlzLm9uT3Blbi5lbWl0KCk7YCBpcyBiZWluZyBkZWxlZ2F0ZWQgdG8gdGhlIHJvb3QgZGlyZWN0aXZlIGR1ZSB0byB0aGUgb3BlbmluZyBhbmltYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJvb3QuYXR0YWNoRGV0YWNoRXZlbnQuc2V0KFJkeFBvcG92ZXJBdHRhY2hEZXRhY2hFdmVudC5BVFRBQ0gpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIG9uRGV0YWNoKCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuZGV0YWNoXG4gICAgICAgICAgICAuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBgdGhpcy5vbkNsb3NlZC5lbWl0KCk7YCBpcyBiZWluZyBkZWxlZ2F0ZWQgdG8gdGhlIHJvb3QgZGlyZWN0aXZlIGR1ZSB0byB0aGUgY2xvc2luZyBhbmltYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJvb3QuYXR0YWNoRGV0YWNoRXZlbnQuc2V0KFJkeFBvcG92ZXJBdHRhY2hEZXRhY2hFdmVudC5ERVRBQ0gpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHNldFNjcm9sbFN0cmF0ZWd5KCkge1xuICAgICAgICBjb25zdCBwcmV2U2Nyb2xsU3RyYXRlZ3kgPSB0aGlzLmNvbm5lY3RlZE92ZXJsYXkuc2Nyb2xsU3RyYXRlZ3k7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5zY3JvbGxTdHJhdGVneSA9IHRoaXMub3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKTtcbiAgICAgICAgdGhpcy5maXJlT3ZlcmxheU5nT25DaGFuZ2VzKCdzY3JvbGxTdHJhdGVneScsIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5zY3JvbGxTdHJhdGVneSwgcHJldlNjcm9sbFN0cmF0ZWd5KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgc2V0RGlzYWJsZUNsb3NlKCkge1xuICAgICAgICBjb25zdCBwcmV2RGlzYWJsZUNsb3NlID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRpc2FibGVDbG9zZTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRpc2FibGVDbG9zZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZmlyZU92ZXJsYXlOZ09uQ2hhbmdlcygnZGlzYWJsZUNsb3NlJywgdGhpcy5jb25uZWN0ZWRPdmVybGF5LmRpc2FibGVDbG9zZSwgcHJldkRpc2FibGVDbG9zZSk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIHNldE9yaWdpbihvcmlnaW46IENka0Nvbm5lY3RlZE92ZXJsYXlbJ29yaWdpbiddKSB7XG4gICAgICAgIGNvbnN0IHByZXZPcmlnaW4gPSB0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3JpZ2luO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZE92ZXJsYXkub3JpZ2luID0gb3JpZ2luO1xuICAgICAgICB0aGlzLmZpcmVPdmVybGF5TmdPbkNoYW5nZXMoJ29yaWdpbicsIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5vcmlnaW4sIHByZXZPcmlnaW4pO1xuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgcHJpdmF0ZSBzZXRQb3NpdGlvbnMocG9zaXRpb25zOiBDZGtDb25uZWN0ZWRPdmVybGF5Wydwb3NpdGlvbnMnXSkge1xuICAgICAgICBjb25zdCBwcmV2UG9zaXRpb25zID0gdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9ucztcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5LnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcbiAgICAgICAgdGhpcy5maXJlT3ZlcmxheU5nT25DaGFuZ2VzKCdwb3NpdGlvbnMnLCB0aGlzLmNvbm5lY3RlZE92ZXJsYXkucG9zaXRpb25zLCBwcmV2UG9zaXRpb25zKTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRPdmVybGF5Lm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBpZ25vcmUgKi9cbiAgICBwcml2YXRlIGNvbXB1dGVQb3NpdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IGdyZWF0ZXN0RGltZW5zaW9uRnJvbVRoZUFycm93ID0gTWF0aC5tYXgoXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LnBvcG92ZXJBcnJvd0RpcmVjdGl2ZSgpPy53aWR0aCgpID8/IDAsXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSb290LnBvcG92ZXJBcnJvd0RpcmVjdGl2ZSgpPy5oZWlnaHQoKSA/PyAwXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG9mZnNldHM6IFJkeFNpZGVBbmRBbGlnbk9mZnNldHMgPSB7XG4gICAgICAgICAgICBzaWRlT2Zmc2V0OiB0aGlzLnNpZGVPZmZzZXQoKSA/PyAoZ3JlYXRlc3REaW1lbnNpb25Gcm9tVGhlQXJyb3cgfHwgREVGQVVMVFMub2Zmc2V0cy5zaWRlKSxcbiAgICAgICAgICAgIGFsaWduT2Zmc2V0OiB0aGlzLmFsaWduT2Zmc2V0KCkgPz8gREVGQVVMVFMub2Zmc2V0cy5hbGlnblxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBiYXNlUG9zaXRpb24gPSBnZXRDb250ZW50UG9zaXRpb24oe1xuICAgICAgICAgICAgc2lkZTogdGhpcy5zaWRlKCksXG4gICAgICAgICAgICBhbGlnbjogdGhpcy5hbGlnbigpLFxuICAgICAgICAgICAgc2lkZU9mZnNldDogb2Zmc2V0cy5zaWRlT2Zmc2V0LFxuICAgICAgICAgICAgYWxpZ25PZmZzZXQ6IG9mZnNldHMuYWxpZ25PZmZzZXRcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtiYXNlUG9zaXRpb25dO1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUFsdGVybmF0ZVBvc2l0aW9ucygpKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFsdGVybmF0ZSBwb3NpdGlvbnMgZm9yIGJldHRlciB1c2VyIGV4cGVyaWVuY2UgYWxvbmcgdGhlIFgvWSBheGlzIChlLmcuIHZlcnRpY2FsL2hvcml6b250YWwgc2Nyb2xsaW5nKVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb25zdCBhbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucyA9IGdldEFsbFBvc3NpYmxlQ29ubmVjdGVkUG9zaXRpb25zKCk7XG4gICAgICAgICAgICBhbGxQb3NzaWJsZUNvbm5lY3RlZFBvc2l0aW9ucy5mb3JFYWNoKChfLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzaWRlQW5kQWxpZ25BcnJheSA9IGtleS5zcGxpdCgnfCcpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgKHNpZGVBbmRBbGlnbkFycmF5WzBdIGFzIFJkeFBvcG92ZXJTaWRlKSAhPT0gdGhpcy5zaWRlKCkgfHxcbiAgICAgICAgICAgICAgICAgICAgKHNpZGVBbmRBbGlnbkFycmF5WzFdIGFzIFJkeFBvcG92ZXJBbGlnbikgIT09IHRoaXMuYWxpZ24oKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbnRlbnRQb3NpdGlvbih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2lkZTogc2lkZUFuZEFsaWduQXJyYXlbMF0gYXMgUmR4UG9wb3ZlclNpZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246IHNpZGVBbmRBbGlnbkFycmF5WzFdIGFzIFJkeFBvcG92ZXJBbGlnbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWRlT2Zmc2V0OiBvZmZzZXRzLnNpZGVPZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25PZmZzZXQ6IG9mZnNldHMuYWxpZ25PZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvc2l0aW9ucztcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uT3JpZ2luQ2hhbmdlRWZmZWN0KCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ2luID0gKHRoaXMucG9wb3ZlclJvb3QucG9wb3ZlckFuY2hvckRpcmVjdGl2ZSgpID8/IHRoaXMucG9wb3ZlclJvb3QucG9wb3ZlclRyaWdnZXJEaXJlY3RpdmUoKSlcbiAgICAgICAgICAgICAgICAub3ZlcmxheU9yaWdpbjtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRPcmlnaW4ob3JpZ2luKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgb25Qb3NpdGlvbkNoYW5nZUVmZmVjdCgpIHtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9ucyA9IHRoaXMucG9zaXRpb25zKCk7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVBbHRlcm5hdGVQb3NpdGlvbnMoKTtcbiAgICAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRQb3NpdGlvbnMocG9zaXRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIHByaXZhdGUgZmlyZU92ZXJsYXlOZ09uQ2hhbmdlczxLIGV4dGVuZHMga2V5b2YgQ2RrQ29ubmVjdGVkT3ZlcmxheSwgViBleHRlbmRzIENka0Nvbm5lY3RlZE92ZXJsYXlbS10+KFxuICAgICAgICBpbnB1dDogSyxcbiAgICAgICAgY3VycmVudFZhbHVlOiBWLFxuICAgICAgICBwcmV2aW91c1ZhbHVlOiBWLFxuICAgICAgICBmaXJzdENoYW5nZSA9IGZhbHNlXG4gICAgKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGVkT3ZlcmxheS5uZ09uQ2hhbmdlcyh7XG4gICAgICAgICAgICBbaW5wdXRdOiBuZXcgU2ltcGxlQ2hhbmdlKHByZXZpb3VzVmFsdWUsIGN1cnJlbnRWYWx1ZSwgZmlyc3RDaGFuZ2UpXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
|