@fundamental-ngx/core 0.43.6 → 0.43.7
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/esm2020/combobox/combobox.component.mjs +1 -1
- package/esm2020/multi-combobox/multi-combobox.component.mjs +1 -1
- package/esm2020/multi-input/multi-input.component.mjs +67 -35
- package/esm2020/popover/index.mjs +12 -12
- package/esm2020/popover/popover-body/popover-body-directives/popover-body-footer.directive.mjs +4 -3
- package/esm2020/popover/popover-body/popover-body-directives/popover-body-header.directive.mjs +4 -3
- package/esm2020/popover/popover-body/popover-body.component.mjs +8 -11
- package/esm2020/popover/popover-body.directive.mjs +20 -0
- package/esm2020/popover/popover-container/popover-container.directive.mjs +4 -3
- package/esm2020/popover/popover-control/popover-control.component.mjs +3 -3
- package/esm2020/popover/popover-mobile/popover-mobile.component.mjs +10 -7
- package/esm2020/popover/popover-mobile/popover-mobile.module.mjs +4 -5
- package/esm2020/popover/popover-service/popover.service.mjs +20 -14
- package/esm2020/popover/popover-trigger.directive.mjs +4 -3
- package/esm2020/popover/popover.component.mjs +29 -16
- package/esm2020/popover/popover.module.mjs +20 -18
- package/fesm2015/fundamental-ngx-core-combobox.mjs +1 -1
- package/fesm2015/fundamental-ngx-core-combobox.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-multi-combobox.mjs +1 -1
- package/fesm2015/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-multi-input.mjs +67 -35
- package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-core-popover.mjs +440 -399
- package/fesm2015/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-combobox.mjs +1 -1
- package/fesm2020/fundamental-ngx-core-combobox.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-multi-combobox.mjs +1 -1
- package/fesm2020/fundamental-ngx-core-multi-combobox.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-multi-input.mjs +66 -34
- package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-core-popover.mjs +449 -408
- package/fesm2020/fundamental-ngx-core-popover.mjs.map +1 -1
- package/fundamental-ngx-core-v0.43.7.tgz +0 -0
- package/multi-input/multi-input.component.d.ts +39 -32
- package/package.json +3 -3
- package/popover/index.d.ts +11 -11
- package/popover/popover-body/popover-body-directives/popover-body-footer.directive.d.ts +1 -1
- package/popover/popover-body/popover-body-directives/popover-body-header.directive.d.ts +1 -1
- package/popover/popover-body/popover-body.component.d.ts +1 -1
- package/popover/popover-body.directive.d.ts +10 -0
- package/popover/popover-container/popover-container.directive.d.ts +1 -1
- package/popover/popover-control/popover-control.component.d.ts +1 -1
- package/popover/popover-mobile/popover-mobile.component.d.ts +3 -3
- package/popover/popover-mobile/popover-mobile.module.d.ts +5 -5
- package/popover/popover-service/popover.service.d.ts +6 -4
- package/popover/popover-trigger.directive.d.ts +1 -1
- package/popover/popover.component.d.ts +9 -2
- package/popover/popover.module.d.ts +2 -5
- package/schematics/add-dependencies/index.js +4 -4
- package/fundamental-ngx-core-v0.43.6.tgz +0 -0
|
@@ -8,15 +8,14 @@ import * as i0 from "@angular/core";
|
|
|
8
8
|
export class PopoverMobileModule {
|
|
9
9
|
}
|
|
10
10
|
PopoverMobileModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PopoverMobileModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
11
|
-
PopoverMobileModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: PopoverMobileModule,
|
|
12
|
-
PopoverMobileModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PopoverMobileModule, providers: [DynamicComponentService], imports: [CommonModule, DialogModule, ButtonModule] });
|
|
11
|
+
PopoverMobileModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: PopoverMobileModule, imports: [CommonModule, DialogModule, ButtonModule, PopoverMobileComponent], exports: [PopoverMobileComponent] });
|
|
12
|
+
PopoverMobileModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PopoverMobileModule, providers: [DynamicComponentService], imports: [CommonModule, DialogModule, ButtonModule, PopoverMobileComponent] });
|
|
13
13
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PopoverMobileModule, decorators: [{
|
|
14
14
|
type: NgModule,
|
|
15
15
|
args: [{
|
|
16
|
-
|
|
17
|
-
imports: [CommonModule, DialogModule, ButtonModule],
|
|
16
|
+
imports: [CommonModule, DialogModule, ButtonModule, PopoverMobileComponent],
|
|
18
17
|
exports: [PopoverMobileComponent],
|
|
19
18
|
providers: [DynamicComponentService]
|
|
20
19
|
}]
|
|
21
20
|
}] });
|
|
22
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1tb2JpbGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcG9wb3Zlci9wb3BvdmVyLW1vYmlsZS9wb3BvdmVyLW1vYmlsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNyRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQzs7QUFPcEUsTUFBTSxPQUFPLG1CQUFtQjs7Z0hBQW5CLG1CQUFtQjtpSEFBbkIsbUJBQW1CLFlBSmxCLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixhQUNoRSxzQkFBc0I7aUhBR3ZCLG1CQUFtQixhQUZqQixDQUFDLHVCQUF1QixDQUFDLFlBRjFCLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLHNCQUFzQjsyRkFJakUsbUJBQW1CO2tCQUwvQixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLHNCQUFzQixDQUFDO29CQUMzRSxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsU0FBUyxFQUFFLENBQUMsdUJBQXVCLENBQUM7aUJBQ3ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvYnV0dG9uJztcbmltcG9ydCB7IERpYWxvZ01vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9kaWFsb2cnO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBQb3BvdmVyTW9iaWxlQ29tcG9uZW50IH0gZnJvbSAnLi9wb3BvdmVyLW1vYmlsZS5jb21wb25lbnQnO1xuXG5ATmdNb2R1bGUoe1xuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIERpYWxvZ01vZHVsZSwgQnV0dG9uTW9kdWxlLCBQb3BvdmVyTW9iaWxlQ29tcG9uZW50XSxcbiAgICBleHBvcnRzOiBbUG9wb3Zlck1vYmlsZUNvbXBvbmVudF0sXG4gICAgcHJvdmlkZXJzOiBbRHluYW1pY0NvbXBvbmVudFNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJNb2JpbGVNb2R1bGUge31cbiJdfQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { ElementRef, Injectable, Injector, Optional, Renderer2 } from '@angular/core';
|
|
2
|
-
import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
|
|
3
1
|
import { Overlay, OverlayConfig, ViewportRuler } from '@angular/cdk/overlay';
|
|
4
|
-
import {
|
|
2
|
+
import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';
|
|
3
|
+
import { ElementRef, Injectable, Injector, Optional, Renderer2, TemplateRef } from '@angular/core';
|
|
4
|
+
import { Subject, merge } from 'rxjs';
|
|
5
5
|
import { distinctUntilChanged, filter, startWith, takeUntil } from 'rxjs/operators';
|
|
6
6
|
import { RtlService, isOdd } from '@fundamental-ngx/cdk/utils';
|
|
7
7
|
import { GetDefaultPosition, PopoverPosition } from '@fundamental-ngx/core/shared';
|
|
@@ -30,6 +30,8 @@ export class PopoverService extends BasePopoverClass {
|
|
|
30
30
|
/** @hidden */
|
|
31
31
|
this._eventRef = [];
|
|
32
32
|
/** @hidden */
|
|
33
|
+
this._stopCloseListening$ = new Subject();
|
|
34
|
+
/** @hidden */
|
|
33
35
|
this._placementRefresh$ = new Subject();
|
|
34
36
|
/** An RxJS Subject that will kill the data stream upon component’s destruction (for unsubscribing) */
|
|
35
37
|
this._onDestroy$ = new Subject();
|
|
@@ -46,7 +48,12 @@ export class PopoverService extends BasePopoverClass {
|
|
|
46
48
|
* PopoverComponent and PopoverComponent instance
|
|
47
49
|
*/
|
|
48
50
|
initialise(triggerElement, config, templateData) {
|
|
49
|
-
|
|
51
|
+
if (templateData instanceof TemplateRef) {
|
|
52
|
+
this.templateContent = templateData;
|
|
53
|
+
}
|
|
54
|
+
else {
|
|
55
|
+
this._templateData = templateData;
|
|
56
|
+
}
|
|
50
57
|
this._triggerElement = triggerElement;
|
|
51
58
|
if (config) {
|
|
52
59
|
this.refreshConfiguration(config);
|
|
@@ -62,7 +69,7 @@ export class PopoverService extends BasePopoverClass {
|
|
|
62
69
|
}
|
|
63
70
|
/** Closes the popover. */
|
|
64
71
|
close(focusActiveElement = true) {
|
|
65
|
-
if (this._overlayRef) {
|
|
72
|
+
if (this._overlayRef && this._overlayRef.hasAttached()) {
|
|
66
73
|
this._overlayRef.dispose();
|
|
67
74
|
const prevState = this.isOpen;
|
|
68
75
|
this.isOpen = false;
|
|
@@ -89,6 +96,7 @@ export class PopoverService extends BasePopoverClass {
|
|
|
89
96
|
else {
|
|
90
97
|
this._attachBodyComponent();
|
|
91
98
|
}
|
|
99
|
+
this._stopCloseListening$.next();
|
|
92
100
|
this._listenForPositionChange(position.positionChanges);
|
|
93
101
|
if (this.fillControlMode) {
|
|
94
102
|
this._listenOnResize();
|
|
@@ -100,7 +108,6 @@ export class PopoverService extends BasePopoverClass {
|
|
|
100
108
|
}
|
|
101
109
|
this._detectChanges();
|
|
102
110
|
this._listenOnClose();
|
|
103
|
-
this._listenOnOutClicks();
|
|
104
111
|
this._focusFirstTabbableElement();
|
|
105
112
|
this._onLoad.next(this._getPopoverBody()._elementRef);
|
|
106
113
|
this._overlayRef.updatePosition();
|
|
@@ -145,6 +152,7 @@ export class PopoverService extends BasePopoverClass {
|
|
|
145
152
|
this._removeTriggerListeners();
|
|
146
153
|
if (this._overlayRef) {
|
|
147
154
|
this._overlayRef.detach();
|
|
155
|
+
this._overlayRef.dispose();
|
|
148
156
|
}
|
|
149
157
|
}
|
|
150
158
|
/**
|
|
@@ -286,15 +294,13 @@ export class PopoverService extends BasePopoverClass {
|
|
|
286
294
|
}
|
|
287
295
|
/** Subscribe to close events from CDK Overlay, to throw proper events, change values */
|
|
288
296
|
_listenOnClose() {
|
|
289
|
-
const closeEvents$ = merge(this._overlayRef.detachments(), this._getPopoverBody().onClose);
|
|
290
|
-
|
|
297
|
+
const closeEvents$ = merge(this._overlayRef.detachments(), this._getPopoverBody().onClose, this._outsideClicks$());
|
|
298
|
+
const finalizer$ = merge(this._stopCloseListening$, this._refresh$);
|
|
299
|
+
closeEvents$.pipe(takeUntil(finalizer$)).subscribe(() => this.close());
|
|
291
300
|
}
|
|
292
301
|
/** Listener for click events */
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
closeEvents$
|
|
296
|
-
.pipe(filter((event) => this._shouldClose(event)), takeUntil(this._refresh$))
|
|
297
|
-
.subscribe(() => this.close());
|
|
302
|
+
_outsideClicks$() {
|
|
303
|
+
return merge(this._overlayRef.backdropClick(), this._overlayRef._outsidePointerEvents).pipe(filter((event) => this._shouldClose(event)));
|
|
298
304
|
}
|
|
299
305
|
/** @hidden */
|
|
300
306
|
_shouldClose(event) {
|
|
@@ -403,4 +409,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
403
409
|
}] }, { type: i3.PopoverContainerDirective, decorators: [{
|
|
404
410
|
type: Optional
|
|
405
411
|
}] }]; } });
|
|
406
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcG9wb3Zlci9wb3BvdmVyLXNlcnZpY2UvcG9wb3Zlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFpQyxNQUFNLGVBQWUsQ0FBQztBQUNySCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFHSCxPQUFPLEVBQ1AsYUFBYSxFQUViLGFBQWEsRUFFaEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsS0FBSyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVwRixPQUFPLEVBQUUsVUFBVSxFQUFZLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVuRixPQUFPLEVBQUUsZ0JBQWdCLEVBQWlCLE1BQU0sNEJBQTRCLENBQUM7QUFDN0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sa0RBQWtELENBQUM7Ozs7O0FBRTdGLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQztBQVMvQixNQUFNLE9BQU8sY0FBZSxTQUFRLGdCQUFnQjtJQTJDaEQsY0FBYztJQUNkLFlBQ1ksUUFBaUIsRUFDakIsU0FBb0IsRUFDcEIsY0FBNkIsRUFDN0IsU0FBbUIsRUFDUCxXQUF1QixFQUNkLGlCQUE0QztRQUV6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SUFBSTtRQUN0RCxJQUFJLGdCQUFnQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUMzQyxJQUFJLENBQUMsa0JBQWtCLEdBQWdCLFFBQVEsQ0FBQyxhQUFhLENBQUM7WUFDOUQsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLDBCQUEwQixFQUFFLENBQUM7U0FDeEQ7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLGlDQUFpQyxDQUFDLGdCQUFnQixHQUFHLElBQUk7UUFDN0QsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3RFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNuQztJQUNMLENBQUM7OzJHQXhlUSxjQUFjOytHQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFEMUIsVUFBVTs7MEJBa0RGLFFBQVE7OzBCQUNSLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlLCBJbmplY3RvciwgT3B0aW9uYWwsIFJlbmRlcmVyMiwgVGVtcGxhdGVSZWYsIFZpZXdDb250YWluZXJSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7XG4gICAgQ29ubmVjdGVkUG9zaXRpb24sXG4gICAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICAgIE92ZXJsYXksXG4gICAgT3ZlcmxheUNvbmZpZyxcbiAgICBPdmVybGF5UmVmLFxuICAgIFZpZXdwb3J0UnVsZXIsXG4gICAgQ29ubmVjdGVkT3ZlcmxheVBvc2l0aW9uQ2hhbmdlXG59IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IG1lcmdlLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUnRsU2VydmljZSwgTnVsbGFibGUsIGlzT2RkIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgR2V0RGVmYXVsdFBvc2l0aW9uLCBQb3BvdmVyUG9zaXRpb24gfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcblxuaW1wb3J0IHsgQmFzZVBvcG92ZXJDbGFzcywgVHJpZ2dlckNvbmZpZyB9IGZyb20gJy4uL2Jhc2UvYmFzZS1wb3BvdmVyLmNsYXNzJztcbmltcG9ydCB7IFBvcG92ZXJCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi4vcG9wb3Zlci1ib2R5L3BvcG92ZXItYm9keS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRhaW5lckRpcmVjdGl2ZSB9IGZyb20gJy4uL3BvcG92ZXItY29udGFpbmVyL3BvcG92ZXItY29udGFpbmVyLmRpcmVjdGl2ZSc7XG5cbmNvbnN0IE1BWF9CT0RZX1NJWkUgPSA5OTk5OTk5OTtcblxuZXhwb3J0IGludGVyZmFjZSBQb3BvdmVyVGVtcGxhdGUge1xuICAgIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcbiAgICBwb3BvdmVyQm9keTogUG9wb3ZlckJvZHlDb21wb25lbnQ7XG4gICAgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQb3BvdmVyU2VydmljZSBleHRlbmRzIEJhc2VQb3BvdmVyQ2xhc3Mge1xuICAgIC8qKiBTdHJpbmcgY29udGVudCBkaXNwbGF5ZWQgaW5zaWRlIHBvcG92ZXIgYm9keSAqL1xuICAgIHN0cmluZ0NvbnRlbnQ6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogVGVtcGxhdGUgY29udGVudCBkaXNwbGF5ZWQgaW5zaWRlIHBvcG92ZXIgYm9keSAqL1xuICAgIHRlbXBsYXRlQ29udGVudDogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkxvYWQgPSBuZXcgU3ViamVjdDxFbGVtZW50UmVmPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2V2ZW50UmVmOiAoKCkgPT4gdm9pZClbXSA9IFtdO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9vdmVybGF5UmVmOiBPdmVybGF5UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZWZyZXNoJDogT2JzZXJ2YWJsZTxib29sZWFuIHwgdm9pZD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BsYWNlbWVudFJlZnJlc2gkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcG9wb3ZlckJvZHk6IFBvcG92ZXJCb2R5Q29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90cmlnZ2VyRWxlbWVudDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfbGFzdEFjdGl2ZUVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90ZW1wbGF0ZURhdGE6IE51bGxhYmxlPFBvcG92ZXJUZW1wbGF0ZT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3BsYWNlbWVudENvbnRhaW5lcjogQmFzZVBvcG92ZXJDbGFzc1sncGxhY2VtZW50Q29udGFpbmVyJ107XG5cbiAgICAvKiogQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgX3ZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXIsXG4gICAgICAgIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBfcnRsU2VydmljZTogUnRsU2VydmljZSxcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcG9wb3ZlckNvbnRhaW5lcjogUG9wb3ZlckNvbnRhaW5lckRpcmVjdGl2ZVxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuXG4gICAgICAgIC8qKiBNZXJnZSBvYnNlcnZhYmxlcyAtIGNsb3NlIG9yIGRlc3Ryb3kgKi9cbiAgICAgICAgdGhpcy5fcmVmcmVzaCQgPSBtZXJnZSh0aGlzLmlzT3BlbkNoYW5nZSwgdGhpcy5fb25EZXN0cm95JCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGluaXRpYWxpc2luZyB0aGUgcG9wb3ZlciBzZXJ2aWNlIC0gc2hvdWxkIGJlIGNhbGxlZCwgYWZ0ZXIgdmlldyBpcyBpbml0aWFsaXNlZCwgcGFyYW1zOlxuICAgICAqIC0gdHJpZ2dlckVsZW1lbnQgLSBlbGVtZW50LCB3aGljaCBpcyBlcXVpdmFsZW50IGZvciBjZGtPdmVybGF5T3JpZ2luLCBvciBmZC1wb3BvdmVyLWNvbnRyb2wsXG4gICAgICogICBieSBkZWZhdWx0IHRvIHRoaXMgZWxlbWVudCB0aGUgcG9wb3ZlciBib2R5IHdpbGwgbGJlIGFwcGVuZGVkIGFuZCBldmVudHMgb24gdGhpcyBlbGVtZW50IHdpbGwgdHJpZ2dlclxuICAgICAqICAgcG9wb3ZlcidzICB0b2dnbGVcbiAgICAgKiAtIGNvbmZpZyAtIGNvbmZpZ3VyYXRpb24gb2JqZWN0IC0gaW4gdGhpcyBjYXNlIHRoZSBpbnRlbnRpb24gaXMgdG8gdXNlIGluaGVyaXRhbmNlIG9mIEJhc2VQb3BvdmVyQ2xhc3MgaW4gY29tcG9uZW50XG4gICAgICogLSB0ZW1wbGF0ZURhdGEgLSBpbiBjYXNlIG9mIGhhdmluZyBhbHJlYWR5IFBvcG92ZXJCb2R5Q29tcG9uZW50LCB0aGVyZSBpcyB3YXkgdG8gcGFzcyBjb250YWluZXIsIHRlbXBsYXRlIGNvbnRhaW5pbmdcbiAgICAgKiAgIFBvcG92ZXJDb21wb25lbnQgYW5kIFBvcG92ZXJDb21wb25lbnQgaW5zdGFuY2VcbiAgICAgKi9cbiAgICBpbml0aWFsaXNlKHRyaWdnZXJFbGVtZW50OiBFbGVtZW50UmVmLCBjb25maWc/OiBCYXNlUG9wb3ZlckNsYXNzLCB0ZW1wbGF0ZURhdGE/OiBQb3BvdmVyVGVtcGxhdGUgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RlbXBsYXRlRGF0YSA9IHRlbXBsYXRlRGF0YTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSB0cmlnZ2VyRWxlbWVudDtcblxuICAgICAgICBpZiAoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hDb25maWd1cmF0aW9uKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9yZWZyZXNoVHJpZ2dlckxpc3RlbmVycygpO1xuXG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiB3cmFwcGVyIGNvbnRhaW5lciBoZWlnaHQgY2hhbmdlcyBvdXRzaWRlLCByZWZyZXNoIHBvcG92ZXIgcG9zaXRpb24uXG4gICAgICAgIHRoaXMuX3BvcG92ZXJDb250YWluZXI/LnJlZnJlc2hQb3NpdGlvbiQucGlwZSh0YWtlVW50aWwodGhpcy5fcmVmcmVzaCQpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoUG9zaXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqIENsb3NlcyB0aGUgcG9wb3Zlci4gKi9cbiAgICBjbG9zZShmb2N1c0FjdGl2ZUVsZW1lbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5pc09wZW47XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZm9jdXNMYXN0QWN0aXZlRWxlbWVudEJlZm9yZU9wZW4oZm9jdXNBY3RpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBPcGVucyB0aGUgcG9wb3Zlci4gKi9cbiAgICBvcGVuKCk6IHZvaWQge1xuICAgICAgICBpZiAoKCF0aGlzLl9vdmVybGF5UmVmIHx8ICF0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpICYmICF0aGlzLmRpc2FibGVkICYmIHRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuX2dldFBvc2l0aW9uU3RyYXRlZ3koKTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKHBvc2l0aW9uKSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9wbGFjZW1lbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnRFbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGxhY2VtZW50Q29udGFpbmVyIGluc3RhbmNlb2YgRWxlbWVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9wbGFjZW1lbnRDb250YWluZXIubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9wbGFjZW1lbnRDb250YWluZXI7XG5cbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRFbGVtZW50LmFwcGVuZCh0aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlRGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFjaFRlbXBsYXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFjaEJvZHlDb21wb25lbnQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fbGlzdGVuRm9yUG9zaXRpb25DaGFuZ2UocG9zaXRpb24ucG9zaXRpb25DaGFuZ2VzKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuZmlsbENvbnRyb2xNb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGlzdGVuT25SZXNpemUoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5pc09wZW47XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICAgICAgICBpZiAocHJldlN0YXRlICE9PSB0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNPcGVuQ2hhbmdlLmVtaXQodGhpcy5pc09wZW4pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2xpc3Rlbk9uQ2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMuX2xpc3Rlbk9uT3V0Q2xpY2tzKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCk7XG4gICAgICAgICAgICB0aGlzLl9vbkxvYWQubmV4dCh0aGlzLl9nZXRQb3BvdmVyQm9keSgpLl9lbGVtZW50UmVmKTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBtZXRob2QgdXBkYXRpbmcgdGVtcGxhdGUgb3IgdGV4dCBpbnNpZGUgcmVuZGVyZWQgUG9wb3ZlckJvZHkgKi9cbiAgICB1cGRhdGVDb250ZW50KHN0cmluZ0NvbnRlbnQ6IE51bGxhYmxlPHN0cmluZz4sIHRlbXBsYXRlQ29udGVudDogTnVsbGFibGU8VGVtcGxhdGVSZWY8YW55Pj4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdHJpbmdDb250ZW50ID0gc3RyaW5nQ29udGVudDtcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUNvbnRlbnQgPSB0ZW1wbGF0ZUNvbnRlbnQ7XG4gICAgICAgIGlmICh0aGlzLl9nZXRQb3BvdmVyQm9keSgpKSB7XG4gICAgICAgICAgICB0aGlzLl9wYXNzVmFyaWFibGVzVG9Cb2R5KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVG9nZ2xlcyB0aGUgcG9wb3ZlciBvcGVuIHN0YXRlICovXG4gICAgdG9nZ2xlKG9wZW5BY3Rpb24gPSB0cnVlLCBjbG9zZUFjdGlvbiA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICBjbG9zZUFjdGlvbiAmJiB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcGVuQWN0aW9uICYmIHRoaXMub3BlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGNhbGxlZCB0byBjaGFuZ2UgcG9zaXRpb24gb2YgcG9wb3ZlcixcbiAgICAgKiByZWNvbW1lbmRlZCB0byBiZSB1c2VkIG9ubHkgd2hlbiBwb3BvdmVyIGlzIG9wZW5lZCwgb3RoZXJ3aXNlIGNoYW5nZSBwb3NpdGlvbiBvciBjZGtQbGFjZW1lbnRcbiAgICAgKi9cbiAgICBhcHBseU5ld1Bvc2l0aW9uKHBvc2l0aW9uczogQ29ubmVjdGVkUG9zaXRpb25bXSk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWZQb3NpdGlvbiA9IHRoaXMuX2dldFBvc2l0aW9uU3RyYXRlZ3kocG9zaXRpb25zKTtcbiAgICAgICAgdGhpcy5fbGlzdGVuRm9yUG9zaXRpb25DaGFuZ2UocmVmUG9zaXRpb24ucG9zaXRpb25DaGFuZ2VzKTtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHJlZlBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGNhbGxlZCB0byByZWZyZXNoIHBvc2l0aW9uIG9mIG9wZW5lZCBwb3BvdmVyICovXG4gICAgcmVmcmVzaFBvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi51cGRhdGVQb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEVxdWl2YWxlbnQgZm9yIG5nT25EZXN0cm95IG1ldGhvZCwgd2hldGhlciBjb21wb25lbnQgaXMgZGVzdHJveWVkLCB0aGlzIG1ldGhvZCBzaG91bGQgYmUgY2FsbGVkICovXG4gICAgb25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLl9yZW1vdmVUcmlnZ2VyTGlzdGVuZXJzKCk7XG4gICAgICAgIGlmICh0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgc2V0cyBjb25maWd1cmF0aW9uL29wdGlvbnMsIGl0IGRldGVjdHMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIGNoYW5nZWQgYW5kIG92ZXJ3cml0ZXMgdGhlbVxuICAgICAqL1xuICAgIHJlZnJlc2hDb25maWd1cmF0aW9uKGNvbmZpZzogQmFzZVBvcG92ZXJDbGFzcyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wbGFjZW1lbnRDb250YWluZXIgPSBjb25maWcucGxhY2VtZW50Q29udGFpbmVyO1xuICAgICAgICBjb25zdCBvbmx5Q2hhbmdlZCA9IE9iamVjdC5rZXlzKG5ldyBCYXNlUG9wb3ZlckNsYXNzKCkpLmZpbHRlcigoa2V5KSA9PiB0aGlzW2tleV0gIT09IGNvbmZpZ1trZXldKTtcblxuICAgICAgICBpZiAob25seUNoYW5nZWQuaW5jbHVkZXMoJ2lzT3BlbicpKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmlzT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob25seUNoYW5nZWQuaW5jbHVkZXMoJ3BsYWNlbWVudENvbnRhaW5lcicpKSB7XG4gICAgICAgICAgICB0aGlzLl9wbGFjZW1lbnRDb250YWluZXIgPSBjb25maWcucGxhY2VtZW50Q29udGFpbmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFRPRE9cbiAgICAgICAgICogVGhpcyBvdmVycmlkaW5nIGlzIGRhbmdlcm91cyB0aGluZyBhbmQgbGVhZHMgdG8gdW5leHBlY3RlZCBiZWhhdmlvclxuICAgICAgICAgKiBXZSBoYXZlIHRvIGF2b2lkIHRoaXMuXG4gICAgICAgICAqL1xuICAgICAgICBvbmx5Q2hhbmdlZC5mb3JFYWNoKChrZXkpID0+ICh0aGlzW2tleV0gPSBjb25maWdba2V5XSkpO1xuXG4gICAgICAgIGlmIChvbmx5Q2hhbmdlZC5pbmNsdWRlcygndHJpZ2dlcnMnKSkge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFRyaWdnZXJMaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBpbiBvcmRlclxuICAgICAqIHRvIHBvc3Rwb25lIHRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgYnV0IGJlIGFibGVcbiAgICAgKiB0byBlbmFibGUgaXQgYmFjayBpbiB0aGUgZnV0dXJlIGJ5IGluaXRpYWxpc2UoKVxuICAgICAqL1xuICAgIGRlYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbW92ZVRyaWdnZXJMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICAvKiogUmVmcmVzaCBsaXN0ZW5lcnMgb24gdHJpZ2dlciBlbGVtZW50IGV2ZW50cyAqL1xuICAgIF9yZWZyZXNoVHJpZ2dlckxpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVtb3ZlVHJpZ2dlckxpc3RlbmVycygpO1xuXG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX25vcm1hbGl6ZVRyaWdnZXJzKCkuZm9yRWFjaCgodHJpZ2dlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50UmVmLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLl90cmlnZ2VyRWxlbWVudC5uYXRpdmVFbGVtZW50LCB0cmlnZ2VyLnRyaWdnZXIsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb3NlQWN0aW9uID0gISF0cmlnZ2VyLmNsb3NlQWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlbkFjdGlvbiA9ICEhdHJpZ2dlci5vcGVuQWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUob3BlbkFjdGlvbiwgY2xvc2VBY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJpZ2dlci5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRyaWdnZXIgZWxlbWVudCBhbmQgcmVmcmVzaGVzIHRoZSBsaXN0ZW5lcnMuXG4gICAgICogQHBhcmFtIHRyaWdnZXIgVHJpZ2dlciBlbGVtZW50IHJlZi5cbiAgICAgKi9cbiAgICB1cGRhdGVUcmlnZ2VyRWxlbWVudCh0cmlnZ2VyOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gdHJpZ2dlcjtcbiAgICAgICAgdGhpcy5fcmVmcmVzaFRyaWdnZXJMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX25vcm1hbGl6ZVRyaWdnZXJzKCk6IFRyaWdnZXJDb25maWdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJzLm1hcCgodHJpZ2dlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdHJpZ2dlciA9PT0gJ29iamVjdCcgJiYgdHJpZ2dlci50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyaWdnZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9kZE51bWJlciA9IGlzT2RkKGluZGV4ICsgMSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgICAgICAgICBvcGVuQWN0aW9uOiB0aGlzLnRyaWdnZXJzLmxlbmd0aCA9PT0gMSB8fCBvZGROdW1iZXIsXG4gICAgICAgICAgICAgICAgY2xvc2VBY3Rpb246IHRoaXMudHJpZ2dlcnMubGVuZ3RoID09PSAxIHx8ICFvZGROdW1iZXIsXG4gICAgICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmYWxzZVxuICAgICAgICAgICAgfSBhcyBUcmlnZ2VyQ29uZmlnO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE92ZXJsYXlDb25maWcocG9zaXRpb246IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSk6IE92ZXJsYXlDb25maWcge1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLl9nZXREaXJlY3Rpb24oKTtcblxuICAgICAgICByZXR1cm4gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdGhpcy5jbG9zZU9uTmF2aWdhdGlvbixcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHBvc2l0aW9uLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuc2Nyb2xsU3RyYXRlZ3kgfHwgdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92aWV3cG9ydFJ1bGVyXG4gICAgICAgICAgICAuY2hhbmdlKDE1KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3JlZnJlc2gkKSwgc3RhcnRXaXRoKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9hcHBseVdpZHRoT3ZlcmxheSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldERpcmVjdGlvbigpOiAncnRsJyB8ICdsdHInIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ydGxTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2x0cic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZS5ydGwuZ2V0VmFsdWUoKSA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRQb3NpdGlvblN0cmF0ZWd5KGZvcmNlZFBvc2l0aW9ucz86IENvbm5lY3RlZFBvc2l0aW9uW10pOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgICAgICBsZXQgcmVzdWx0UG9zaXRpb24gPSBmb3JjZWRQb3NpdGlvbnMgPyBmb3JjZWRQb3NpdGlvbnMgOiB0aGlzLl9nZXRQb3NpdGlvbnMoKTtcblxuICAgICAgICBpZiAoIXRoaXMuZml4ZWRQb3NpdGlvbikge1xuICAgICAgICAgICAgcmVzdWx0UG9zaXRpb24gPSByZXN1bHRQb3NpdGlvbi5jb25jYXQoR2V0RGVmYXVsdFBvc2l0aW9uKHJlc3VsdFBvc2l0aW9uKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuYXBwZW5kVG8gfHwgdGhpcy5fdHJpZ2dlckVsZW1lbnQpXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9ucyhyZXN1bHRQb3NpdGlvbilcbiAgICAgICAgICAgIC53aXRoUHVzaChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIHJlbW92ZSBsaXN0ZW5lcnMgZnJvbSB0cmlnZ2VyIGVsZW1lbnQgZXZlbnRzICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlVHJpZ2dlckxpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXZlbnRSZWYuZm9yRWFjaCgoZXZlbnQpID0+IGV2ZW50KCkpO1xuICAgICAgICB0aGlzLl9ldmVudFJlZiA9IFtdO1xuICAgIH1cblxuICAgIC8qKiBBdHRhY2ggdGVtcGxhdGUgY29udGFpbmluZyBwb3BvdmVyIGJvZHkgdG8gb3ZlcmxheSAqL1xuICAgIHByaXZhdGUgX2F0dGFjaFRlbXBsYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wYXNzVmFyaWFibGVzVG9Cb2R5KCk7XG4gICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZURhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLl90ZW1wbGF0ZURhdGEudGVtcGxhdGUsIHRoaXMuX3RlbXBsYXRlRGF0YS5jb250YWluZXIpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgUG9wb3ZlckJvZHlDb21wb25lbnQgYW5kIGF0dGFjaCBpdCBpbnRvIG92ZXJsYXkgKi9cbiAgICBwcml2YXRlIF9hdHRhY2hCb2R5Q29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5fb3ZlcmxheVJlZi5hdHRhY2gobmV3IENvbXBvbmVudFBvcnRhbChQb3BvdmVyQm9keUNvbXBvbmVudCwgbnVsbCwgdGhpcy5faW5qZWN0b3IpKTtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckJvZHkgPSBvdmVybGF5Lmluc3RhbmNlO1xuICAgICAgICB0aGlzLl9wYXNzVmFyaWFibGVzVG9Cb2R5KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Gb3JQb3NpdGlvbkNoYW5nZShwb3NpdGlvbkNoYW5nZTogT2JzZXJ2YWJsZTxDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2U+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BsYWNlbWVudFJlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgcG9zaXRpb25DaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9wbGFjZW1lbnRSZWZyZXNoJCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5ub0Fycm93ICYmICEhdGhpcy5fZ2V0UG9wb3ZlckJvZHkoKSksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBwcmV2aW91cy5jb25uZWN0aW9uUGFpciA9PT0gY3VycmVudC5jb25uZWN0aW9uUGFpcilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLl9nZXRQb3BvdmVyQm9keSgpLl9zZXRBcnJvd1N0eWxlcyhldmVudC5jb25uZWN0aW9uUGFpciwgdGhpcy5fZ2V0RGlyZWN0aW9uKCkpKTtcbiAgICB9XG5cbiAgICAvKiogU3Vic2NyaWJlIHRvIGNsb3NlIGV2ZW50cyBmcm9tIENESyBPdmVybGF5LCB0byB0aHJvdyBwcm9wZXIgZXZlbnRzLCBjaGFuZ2UgdmFsdWVzICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25DbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xvc2VFdmVudHMkID0gbWVyZ2UodGhpcy5fb3ZlcmxheVJlZi5kZXRhY2htZW50cygpLCB0aGlzLl9nZXRQb3BvdmVyQm9keSgpLm9uQ2xvc2UpO1xuXG4gICAgICAgIGNsb3NlRXZlbnRzJC5waXBlKHRha2VVbnRpbCh0aGlzLl9yZWZyZXNoJCkpLnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlKCkpO1xuICAgIH1cblxuICAgIC8qKiBMaXN0ZW5lciBmb3IgY2xpY2sgZXZlbnRzICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25PdXRDbGlja3MoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNsb3NlRXZlbnRzJCA9IG1lcmdlKHRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLCB0aGlzLl9vdmVybGF5UmVmLl9vdXRzaWRlUG9pbnRlckV2ZW50cyk7XG5cbiAgICAgICAgY2xvc2VFdmVudHMkXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGV2ZW50KSA9PiB0aGlzLl9zaG91bGRDbG9zZShldmVudCkpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9yZWZyZXNoJClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZENsb3NlKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlzT3BlbiAmJlxuICAgICAgICAgICAgdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrICYmXG4gICAgICAgICAgICAhdGhpcy5fdHJpZ2dlckNvbnRhaW5zVGFyZ2V0KGV2ZW50KSAmJlxuICAgICAgICAgICAgIXRoaXMuX3RhcmdldElzUG9wb3Zlck1vYmlsZURpYWxvZyhldmVudClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RhcmdldElzUG9wb3Zlck1vYmlsZURpYWxvZyhldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgICAgICBsZXQgZWwgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgd2hpbGUgKGVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb2JpbGUtcG9wb3ZlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRFdmVudFRhcmdldChldmVudDogRXZlbnQpOiBFdmVudFRhcmdldCB8IG51bGwge1xuICAgICAgICByZXR1cm4gZXZlbnQuY29tcG9zZWRQYXRoID8gZXZlbnQuY29tcG9zZWRQYXRoKClbMF0gOiBldmVudC50YXJnZXQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90cmlnZ2VyQ29udGFpbnNUYXJnZXQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJFbGVtZW50ID0gdGhpcy5fdHJpZ2dlckVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJFbGVtZW50LmNvbnRhaW5zKHRoaXMuX2dldEV2ZW50VGFyZ2V0KGV2ZW50KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRQb3NpdGlvbnMoKTogQ29ubmVjdGVkUG9zaXRpb25bXSB7XG4gICAgICAgIGlmICh0aGlzLmNka1Bvc2l0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2RrUG9zaXRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGxhY2VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW1BvcG92ZXJQb3NpdGlvbi5nZXRDZGtQbGFjZW1lbnQodGhpcy5wbGFjZW1lbnQsIHRoaXMuX2dldERpcmVjdGlvbigpKV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hcHBseVdpZHRoT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWF4V2lkdGhMaW1pdCA9IHRoaXMubWF4V2lkdGggPyB0aGlzLm1heFdpZHRoIDogTUFYX0JPRFlfU0laRTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbih0aGlzLl9nZXRUcmlnZ2VyV2lkdGgoKSwgbWF4V2lkdGhMaW1pdCk7XG4gICAgICAgIGlmICh0aGlzLmZpbGxDb250cm9sTW9kZSA9PT0gJ2F0LWxlYXN0Jykge1xuICAgICAgICAgICAgdGhpcy5fZ2V0UG9wb3ZlckJvZHkoKS5fcG9wb3ZlckJvZHlNaW5XaWR0aCA9IHdpZHRoO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsbENvbnRyb2xNb2RlID09PSAnZXF1YWwnKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRQb3BvdmVyQm9keSgpLl9wb3BvdmVyQm9keVdpZHRoID0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcGFzc1ZhcmlhYmxlc1RvQm9keSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuX2dldFBvcG92ZXJCb2R5KCk7XG4gICAgICAgIGJvZHkudGV4dCA9IHRoaXMuc3RyaW5nQ29udGVudDtcbiAgICAgICAgYm9keS5fYWRkaXRpb25hbEJvZHlDbGFzcyA9IHRoaXMuYWRkaXRpb25hbEJvZHlDbGFzcztcbiAgICAgICAgYm9keS5fZm9jdXNUcmFwcGVkID0gdGhpcy5mb2N1c1RyYXBwZWQ7XG4gICAgICAgIGJvZHkuX21heFdpZHRoID0gdGhpcy5tYXhXaWR0aDtcbiAgICAgICAgYm9keS5fbm9BcnJvdyA9IHRoaXMubm9BcnJvdztcbiAgICAgICAgYm9keS5fZm9jdXNBdXRvQ2FwdHVyZSA9IHRoaXMuZm9jdXNBdXRvQ2FwdHVyZTtcbiAgICAgICAgYm9keS5fZGlzYWJsZVNjcm9sbGJhciA9IHRoaXMuZGlzYWJsZVNjcm9sbGJhcjtcbiAgICAgICAgYm9keS5fdGFiYmFibGVTY3JvbGxiYXIgPSB0aGlzLnRhYmJhYmxlU2Nyb2xsYmFyO1xuICAgICAgICBib2R5Ll90ZW1wbGF0ZVRvRGlzcGxheSA9IHRoaXMudGVtcGxhdGVDb250ZW50ITtcbiAgICAgICAgYm9keS5fY2xvc2VPbkVzY2FwZUtleSA9IHRoaXMuY2xvc2VPbkVzY2FwZUtleTtcbiAgICAgICAgYm9keS5fYm9keVJvbGUgPSB0aGlzLl9ib2R5Um9sZTtcbiAgICAgICAgYm9keS5fYm9keUlkID0gdGhpcy5fYm9keUlkO1xuICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRUcmlnZ2VyV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRQb3BvdmVyQm9keSgpOiBQb3BvdmVyQm9keUNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZURhdGE/LnBvcG92ZXJCb2R5IHx8IHRoaXMuX3BvcG92ZXJCb2R5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2dldFBvcG92ZXJCb2R5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldFBvcG92ZXJCb2R5KCkuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGZvY3VzTGFzdEVsZW1lbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmIChmb2N1c0xhc3RFbGVtZW50ICYmIHRoaXMuZm9jdXNBdXRvQ2FwdHVyZSkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdEFjdGl2ZUVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuX2dldFBvcG92ZXJCb2R5KCk/Ll9mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzTGFzdEFjdGl2ZUVsZW1lbnRCZWZvcmVPcGVuKGZvY3VzTGFzdEVsZW1lbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmIChmb2N1c0xhc3RFbGVtZW50ICYmIHRoaXMuZm9jdXNBdXRvQ2FwdHVyZSAmJiB0aGlzLl9sYXN0QWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdEFjdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
412
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcG9wb3Zlci9wb3BvdmVyLXNlcnZpY2UvcG9wb3Zlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFJSCxPQUFPLEVBQ1AsYUFBYSxFQUViLGFBQWEsRUFDaEIsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFDckgsT0FBTyxFQUFjLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEYsT0FBTyxFQUFZLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFbkYsT0FBTyxFQUFFLGdCQUFnQixFQUFpQixNQUFNLDRCQUE0QixDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQzlFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7OztBQUU3RixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUM7QUFTL0IsTUFBTSxPQUFPLGNBQWUsU0FBUSxnQkFBZ0I7SUE4Q2hELGNBQWM7SUFDZCxZQUNZLFFBQWlCLEVBQ2pCLFNBQW9CLEVBQ3BCLGNBQTZCLEVBQzdCLFNBQW1CLEVBQ1AsV0FBdUIsRUFDZCxp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YSxFQUFFLFdBQVcsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQ2hFLENBQUM7SUFFRCxjQUFjO0lBQ04sY0FBYztRQUNsQixJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7U0FDMUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNOLDBCQUEwQixDQUFDLGdCQUFnQixHQUFHLElBQUk7UUFDdEQsSUFBSSxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDM0MsSUFBSSxDQUFDLGtCQUFrQixHQUFnQixRQUFRLENBQUMsYUFBYSxDQUFDO1lBQzlELElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSwwQkFBMEIsRUFBRSxDQUFDO1NBQ3hEO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTixpQ0FBaUMsQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJO1FBQzdELElBQUksZ0JBQWdCLElBQUksSUFBSSxDQUFDLGdCQUFnQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRTtZQUN0RSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbkM7SUFDTCxDQUFDOzsyR0FuZlEsY0FBYzsrR0FBZCxjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQXFERixRQUFROzswQkFDUixRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UsXG4gICAgQ29ubmVjdGVkUG9zaXRpb24sXG4gICAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICAgIE92ZXJsYXksXG4gICAgT3ZlcmxheUNvbmZpZyxcbiAgICBPdmVybGF5UmVmLFxuICAgIFZpZXdwb3J0UnVsZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgQ29tcG9uZW50UG9ydGFsLCBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9wdGlvbmFsLCBSZW5kZXJlcjIsIFRlbXBsYXRlUmVmLCBWaWV3Q29udGFpbmVyUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IE51bGxhYmxlLCBSdGxTZXJ2aWNlLCBpc09kZCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY2RrL3V0aWxzJztcbmltcG9ydCB7IEdldERlZmF1bHRQb3NpdGlvbiwgUG9wb3ZlclBvc2l0aW9uIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5cbmltcG9ydCB7IEJhc2VQb3BvdmVyQ2xhc3MsIFRyaWdnZXJDb25maWcgfSBmcm9tICcuLi9iYXNlL2Jhc2UtcG9wb3Zlci5jbGFzcyc7XG5pbXBvcnQgeyBQb3BvdmVyQm9keUNvbXBvbmVudCB9IGZyb20gJy4uL3BvcG92ZXItYm9keS9wb3BvdmVyLWJvZHkuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJDb250YWluZXJEaXJlY3RpdmUgfSBmcm9tICcuLi9wb3BvdmVyLWNvbnRhaW5lci9wb3BvdmVyLWNvbnRhaW5lci5kaXJlY3RpdmUnO1xuXG5jb25zdCBNQVhfQk9EWV9TSVpFID0gOTk5OTk5OTk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUG9wb3ZlclRlbXBsYXRlIHtcbiAgICBjb250YWluZXI6IFZpZXdDb250YWluZXJSZWY7XG4gICAgcG9wb3ZlckJvZHk6IFBvcG92ZXJCb2R5Q29tcG9uZW50O1xuICAgIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgUG9wb3ZlclNlcnZpY2UgZXh0ZW5kcyBCYXNlUG9wb3ZlckNsYXNzIHtcbiAgICAvKiogU3RyaW5nIGNvbnRlbnQgZGlzcGxheWVkIGluc2lkZSBwb3BvdmVyIGJvZHkgKi9cbiAgICBzdHJpbmdDb250ZW50OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIFRlbXBsYXRlIGNvbnRlbnQgZGlzcGxheWVkIGluc2lkZSBwb3BvdmVyIGJvZHkgKi9cbiAgICB0ZW1wbGF0ZUNvbnRlbnQ6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Mb2FkID0gbmV3IFN1YmplY3Q8RWxlbWVudFJlZj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX21vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9ldmVudFJlZjogKCgpID0+IHZvaWQpW10gPSBbXTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfb3ZlcmxheVJlZjogT3ZlcmxheVJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVmcmVzaCQ6IE9ic2VydmFibGU8Ym9vbGVhbiB8IHZvaWQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zdG9wQ2xvc2VMaXN0ZW5pbmckID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfcGxhY2VtZW50UmVmcmVzaCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wb3BvdmVyQm9keTogUG9wb3ZlckJvZHlDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9sYXN0QWN0aXZlRWxlbWVudDogSFRNTEVsZW1lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RlbXBsYXRlRGF0YTogTnVsbGFibGU8UG9wb3ZlclRlbXBsYXRlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcGxhY2VtZW50Q29udGFpbmVyOiBCYXNlUG9wb3ZlckNsYXNzWydwbGFjZW1lbnRDb250YWluZXInXTtcblxuICAgIC8qKiBBbiBSeEpTIFN1YmplY3QgdGhhdCB3aWxsIGtpbGwgdGhlIGRhdGEgc3RyZWFtIHVwb24gY29tcG9uZW504oCZcyBkZXN0cnVjdGlvbiAoZm9yIHVuc3Vic2NyaWJpbmcpICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBfb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBfdmlld3BvcnRSdWxlcjogVmlld3BvcnRSdWxlcixcbiAgICAgICAgcHJpdmF0ZSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIF9ydGxTZXJ2aWNlOiBSdGxTZXJ2aWNlLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9wb3BvdmVyQ29udGFpbmVyOiBQb3BvdmVyQ29udGFpbmVyRGlyZWN0aXZlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG5cbiAgICAgICAgLyoqIE1lcmdlIG9ic2VydmFibGVzIC0gY2xvc2Ugb3IgZGVzdHJveSAqL1xuICAgICAgICB0aGlzLl9yZWZyZXNoJCA9IG1lcmdlKHRoaXMuaXNPcGVuQ2hhbmdlLCB0aGlzLl9vbkRlc3Ryb3kkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgaW5pdGlhbGlzaW5nIHRoZSBwb3BvdmVyIHNlcnZpY2UgLSBzaG91bGQgYmUgY2FsbGVkLCBhZnRlciB2aWV3IGlzIGluaXRpYWxpc2VkLCBwYXJhbXM6XG4gICAgICogLSB0cmlnZ2VyRWxlbWVudCAtIGVsZW1lbnQsIHdoaWNoIGlzIGVxdWl2YWxlbnQgZm9yIGNka092ZXJsYXlPcmlnaW4sIG9yIGZkLXBvcG92ZXItY29udHJvbCxcbiAgICAgKiAgIGJ5IGRlZmF1bHQgdG8gdGhpcyBlbGVtZW50IHRoZSBwb3BvdmVyIGJvZHkgd2lsbCBsYmUgYXBwZW5kZWQgYW5kIGV2ZW50cyBvbiB0aGlzIGVsZW1lbnQgd2lsbCB0cmlnZ2VyXG4gICAgICogICBwb3BvdmVyJ3MgIHRvZ2dsZVxuICAgICAqIC0gY29uZmlnIC0gY29uZmlndXJhdGlvbiBvYmplY3QgLSBpbiB0aGlzIGNhc2UgdGhlIGludGVudGlvbiBpcyB0byB1c2UgaW5oZXJpdGFuY2Ugb2YgQmFzZVBvcG92ZXJDbGFzcyBpbiBjb21wb25lbnRcbiAgICAgKiAtIHRlbXBsYXRlRGF0YSAtIGluIGNhc2Ugb2YgaGF2aW5nIGFscmVhZHkgUG9wb3ZlckJvZHlDb21wb25lbnQsIHRoZXJlIGlzIHdheSB0byBwYXNzIGNvbnRhaW5lciwgdGVtcGxhdGUgY29udGFpbmluZ1xuICAgICAqICAgUG9wb3ZlckNvbXBvbmVudCBhbmQgUG9wb3ZlckNvbXBvbmVudCBpbnN0YW5jZVxuICAgICAqL1xuICAgIGluaXRpYWxpc2UoXG4gICAgICAgIHRyaWdnZXJFbGVtZW50OiBFbGVtZW50UmVmLFxuICAgICAgICBjb25maWc/OiBCYXNlUG9wb3ZlckNsYXNzLFxuICAgICAgICB0ZW1wbGF0ZURhdGE/OiBQb3BvdmVyVGVtcGxhdGUgfCBUZW1wbGF0ZVJlZjx2b2lkPiB8IG51bGxcbiAgICApOiB2b2lkIHtcbiAgICAgICAgaWYgKHRlbXBsYXRlRGF0YSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlQ29udGVudCA9IHRlbXBsYXRlRGF0YTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3RlbXBsYXRlRGF0YSA9IHRlbXBsYXRlRGF0YTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHRyaWdnZXJFbGVtZW50O1xuXG4gICAgICAgIGlmIChjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaENvbmZpZ3VyYXRpb24oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3JlZnJlc2hUcmlnZ2VyTGlzdGVuZXJzKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdyYXBwZXIgY29udGFpbmVyIGhlaWdodCBjaGFuZ2VzIG91dHNpZGUsIHJlZnJlc2ggcG9wb3ZlciBwb3NpdGlvbi5cbiAgICAgICAgdGhpcy5fcG9wb3ZlckNvbnRhaW5lcj8ucmVmcmVzaFBvc2l0aW9uJC5waXBlKHRha2VVbnRpbCh0aGlzLl9yZWZyZXNoJCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2hQb3NpdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQ2xvc2VzIHRoZSBwb3BvdmVyLiAqL1xuICAgIGNsb3NlKGZvY3VzQWN0aXZlRWxlbWVudCA9IHRydWUpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlSZWYgJiYgdGhpcy5fb3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmRpc3Bvc2UoKTtcblxuICAgICAgICAgICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5pc09wZW47XG4gICAgICAgICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHByZXZTdGF0ZSAhPT0gdGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzT3BlbkNoYW5nZS5lbWl0KHRoaXMuaXNPcGVuKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fZm9jdXNMYXN0QWN0aXZlRWxlbWVudEJlZm9yZU9wZW4oZm9jdXNBY3RpdmVFbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBPcGVucyB0aGUgcG9wb3Zlci4gKi9cbiAgICBvcGVuKCk6IHZvaWQge1xuICAgICAgICBpZiAoKCF0aGlzLl9vdmVybGF5UmVmIHx8ICF0aGlzLl9vdmVybGF5UmVmLmhhc0F0dGFjaGVkKCkpICYmICF0aGlzLmRpc2FibGVkICYmIHRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoaXMuX2dldFBvc2l0aW9uU3RyYXRlZ3koKTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLl9vdmVybGF5LmNyZWF0ZSh0aGlzLl9nZXRPdmVybGF5Q29uZmlnKHBvc2l0aW9uKSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLl9wbGFjZW1lbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwbGFjZW1lbnRFbGVtZW50ID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGxhY2VtZW50Q29udGFpbmVyIGluc3RhbmNlb2YgRWxlbWVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9wbGFjZW1lbnRDb250YWluZXIubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9wbGFjZW1lbnRDb250YWluZXI7XG5cbiAgICAgICAgICAgICAgICBwbGFjZW1lbnRFbGVtZW50LmFwcGVuZCh0aGlzLl9vdmVybGF5UmVmLmhvc3RFbGVtZW50KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX3RlbXBsYXRlRGF0YSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFjaFRlbXBsYXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2F0dGFjaEJvZHlDb21wb25lbnQoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5fc3RvcENsb3NlTGlzdGVuaW5nJC5uZXh0KCk7XG4gICAgICAgICAgICB0aGlzLl9saXN0ZW5Gb3JQb3NpdGlvbkNoYW5nZShwb3NpdGlvbi5wb3NpdGlvbkNoYW5nZXMpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5maWxsQ29udHJvbE1vZGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9saXN0ZW5PblJlc2l6ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcmV2U3RhdGUgPSB0aGlzLmlzT3BlbjtcbiAgICAgICAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChwcmV2U3RhdGUgIT09IHRoaXMuaXNPcGVuKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc09wZW5DaGFuZ2UuZW1pdCh0aGlzLmlzT3Blbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2RldGVjdENoYW5nZXMoKTtcblxuICAgICAgICAgICAgdGhpcy5fbGlzdGVuT25DbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy5fZm9jdXNGaXJzdFRhYmJhYmxlRWxlbWVudCgpO1xuICAgICAgICAgICAgdGhpcy5fb25Mb2FkLm5leHQodGhpcy5fZ2V0UG9wb3ZlckJvZHkoKS5fZWxlbWVudFJlZik7XG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLnVwZGF0ZVBvc2l0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogbWV0aG9kIHVwZGF0aW5nIHRlbXBsYXRlIG9yIHRleHQgaW5zaWRlIHJlbmRlcmVkIFBvcG92ZXJCb2R5ICovXG4gICAgdXBkYXRlQ29udGVudChzdHJpbmdDb250ZW50OiBOdWxsYWJsZTxzdHJpbmc+LCB0ZW1wbGF0ZUNvbnRlbnQ6IE51bGxhYmxlPFRlbXBsYXRlUmVmPGFueT4+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuc3RyaW5nQ29udGVudCA9IHN0cmluZ0NvbnRlbnQ7XG4gICAgICAgIHRoaXMudGVtcGxhdGVDb250ZW50ID0gdGVtcGxhdGVDb250ZW50O1xuICAgICAgICBpZiAodGhpcy5fZ2V0UG9wb3ZlckJvZHkoKSkge1xuICAgICAgICAgICAgdGhpcy5fcGFzc1ZhcmlhYmxlc1RvQm9keSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRvZ2dsZXMgdGhlIHBvcG92ZXIgb3BlbiBzdGF0ZSAqL1xuICAgIHRvZ2dsZShvcGVuQWN0aW9uID0gdHJ1ZSwgY2xvc2VBY3Rpb24gPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgY2xvc2VBY3Rpb24gJiYgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3BlbkFjdGlvbiAmJiB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1ldGhvZCBjYWxsZWQgdG8gY2hhbmdlIHBvc2l0aW9uIG9mIHBvcG92ZXIsXG4gICAgICogcmVjb21tZW5kZWQgdG8gYmUgdXNlZCBvbmx5IHdoZW4gcG9wb3ZlciBpcyBvcGVuZWQsIG90aGVyd2lzZSBjaGFuZ2UgcG9zaXRpb24gb3IgY2RrUGxhY2VtZW50XG4gICAgICovXG4gICAgYXBwbHlOZXdQb3NpdGlvbihwb3NpdGlvbnM6IENvbm5lY3RlZFBvc2l0aW9uW10pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcmVmUG9zaXRpb24gPSB0aGlzLl9nZXRQb3NpdGlvblN0cmF0ZWd5KHBvc2l0aW9ucyk7XG4gICAgICAgIHRoaXMuX2xpc3RlbkZvclBvc2l0aW9uQ2hhbmdlKHJlZlBvc2l0aW9uLnBvc2l0aW9uQ2hhbmdlcyk7XG4gICAgICAgIHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb25TdHJhdGVneShyZWZQb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBjYWxsZWQgdG8gcmVmcmVzaCBwb3NpdGlvbiBvZiBvcGVuZWQgcG9wb3ZlciAqL1xuICAgIHJlZnJlc2hQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYudXBkYXRlUG9zaXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBFcXVpdmFsZW50IGZvciBuZ09uRGVzdHJveSBtZXRob2QsIHdoZXRoZXIgY29tcG9uZW50IGlzIGRlc3Ryb3llZCwgdGhpcyBtZXRob2Qgc2hvdWxkIGJlIGNhbGxlZCAqL1xuICAgIG9uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5fcmVtb3ZlVHJpZ2dlckxpc3RlbmVycygpO1xuICAgICAgICBpZiAodGhpcy5fb3ZlcmxheVJlZikge1xuICAgICAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHRoYXQgc2V0cyBjb25maWd1cmF0aW9uL29wdGlvbnMsIGl0IGRldGVjdHMgaWYgdGhlcmUgaXMgc29tZXRoaW5nIGNoYW5nZWQgYW5kIG92ZXJ3cml0ZXMgdGhlbVxuICAgICAqL1xuICAgIHJlZnJlc2hDb25maWd1cmF0aW9uKGNvbmZpZzogQmFzZVBvcG92ZXJDbGFzcyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wbGFjZW1lbnRDb250YWluZXIgPSBjb25maWcucGxhY2VtZW50Q29udGFpbmVyO1xuICAgICAgICBjb25zdCBvbmx5Q2hhbmdlZCA9IE9iamVjdC5rZXlzKG5ldyBCYXNlUG9wb3ZlckNsYXNzKCkpLmZpbHRlcigoa2V5KSA9PiB0aGlzW2tleV0gIT09IGNvbmZpZ1trZXldKTtcblxuICAgICAgICBpZiAob25seUNoYW5nZWQuaW5jbHVkZXMoJ2lzT3BlbicpKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmlzT3Blbikge1xuICAgICAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob25seUNoYW5nZWQuaW5jbHVkZXMoJ3BsYWNlbWVudENvbnRhaW5lcicpKSB7XG4gICAgICAgICAgICB0aGlzLl9wbGFjZW1lbnRDb250YWluZXIgPSBjb25maWcucGxhY2VtZW50Q29udGFpbmVyO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIFRPRE9cbiAgICAgICAgICogVGhpcyBvdmVycmlkaW5nIGlzIGRhbmdlcm91cyB0aGluZyBhbmQgbGVhZHMgdG8gdW5leHBlY3RlZCBiZWhhdmlvclxuICAgICAgICAgKiBXZSBoYXZlIHRvIGF2b2lkIHRoaXMuXG4gICAgICAgICAqL1xuICAgICAgICBvbmx5Q2hhbmdlZC5mb3JFYWNoKChrZXkpID0+ICh0aGlzW2tleV0gPSBjb25maWdba2V5XSkpO1xuXG4gICAgICAgIGlmIChvbmx5Q2hhbmdlZC5pbmNsdWRlcygndHJpZ2dlcnMnKSkge1xuICAgICAgICAgICAgdGhpcy5fcmVmcmVzaFRyaWdnZXJMaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBpbiBvcmRlclxuICAgICAqIHRvIHBvc3Rwb25lIHRoZSBtYWluIGZ1bmN0aW9uYWxpdHkgYnV0IGJlIGFibGVcbiAgICAgKiB0byBlbmFibGUgaXQgYmFjayBpbiB0aGUgZnV0dXJlIGJ5IGluaXRpYWxpc2UoKVxuICAgICAqL1xuICAgIGRlYWN0aXZhdGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3JlbW92ZVRyaWdnZXJMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICAvKiogUmVmcmVzaCBsaXN0ZW5lcnMgb24gdHJpZ2dlciBlbGVtZW50IGV2ZW50cyAqL1xuICAgIF9yZWZyZXNoVHJpZ2dlckxpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcmVtb3ZlVHJpZ2dlckxpc3RlbmVycygpO1xuXG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuX25vcm1hbGl6ZVRyaWdnZXJzKCkuZm9yRWFjaCgodHJpZ2dlcikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50UmVmLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbmRlcmVyLmxpc3Rlbih0aGlzLl90cmlnZ2VyRWxlbWVudC5uYXRpdmVFbGVtZW50LCB0cmlnZ2VyLnRyaWdnZXIsIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsb3NlQWN0aW9uID0gISF0cmlnZ2VyLmNsb3NlQWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BlbkFjdGlvbiA9ICEhdHJpZ2dlci5vcGVuQWN0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGUob3BlbkFjdGlvbiwgY2xvc2VBY3Rpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHJpZ2dlci5zdG9wUHJvcGFnYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRyaWdnZXIgZWxlbWVudCBhbmQgcmVmcmVzaGVzIHRoZSBsaXN0ZW5lcnMuXG4gICAgICogQHBhcmFtIHRyaWdnZXIgVHJpZ2dlciBlbGVtZW50IHJlZi5cbiAgICAgKi9cbiAgICB1cGRhdGVUcmlnZ2VyRWxlbWVudCh0cmlnZ2VyOiBFbGVtZW50UmVmKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50ID0gdHJpZ2dlcjtcbiAgICAgICAgdGhpcy5fcmVmcmVzaFRyaWdnZXJMaXN0ZW5lcnMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX25vcm1hbGl6ZVRyaWdnZXJzKCk6IFRyaWdnZXJDb25maWdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyaWdnZXJzLm1hcCgodHJpZ2dlciwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdHJpZ2dlciA9PT0gJ29iamVjdCcgJiYgdHJpZ2dlci50cmlnZ2VyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyaWdnZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG9kZE51bWJlciA9IGlzT2RkKGluZGV4ICsgMSk7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlcixcbiAgICAgICAgICAgICAgICBvcGVuQWN0aW9uOiB0aGlzLnRyaWdnZXJzLmxlbmd0aCA9PT0gMSB8fCBvZGROdW1iZXIsXG4gICAgICAgICAgICAgICAgY2xvc2VBY3Rpb246IHRoaXMudHJpZ2dlcnMubGVuZ3RoID09PSAxIHx8ICFvZGROdW1iZXIsXG4gICAgICAgICAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiBmYWxzZVxuICAgICAgICAgICAgfSBhcyBUcmlnZ2VyQ29uZmlnO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldE92ZXJsYXlDb25maWcocG9zaXRpb246IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSk6IE92ZXJsYXlDb25maWcge1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLl9nZXREaXJlY3Rpb24oKTtcblxuICAgICAgICByZXR1cm4gbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdGhpcy5jbG9zZU9uTmF2aWdhdGlvbixcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHBvc2l0aW9uLFxuICAgICAgICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHRoaXMuc2Nyb2xsU3RyYXRlZ3kgfHwgdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uUmVzaXplKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl92aWV3cG9ydFJ1bGVyXG4gICAgICAgICAgICAuY2hhbmdlKDE1KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX3JlZnJlc2gkKSwgc3RhcnRXaXRoKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9hcHBseVdpZHRoT3ZlcmxheSgpKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2dldERpcmVjdGlvbigpOiAncnRsJyB8ICdsdHInIHtcbiAgICAgICAgaWYgKCF0aGlzLl9ydGxTZXJ2aWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2x0cic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fcnRsU2VydmljZS5ydGwuZ2V0VmFsdWUoKSA/ICdydGwnIDogJ2x0cic7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRQb3NpdGlvblN0cmF0ZWd5KGZvcmNlZFBvc2l0aW9ucz86IENvbm5lY3RlZFBvc2l0aW9uW10pOiBGbGV4aWJsZUNvbm5lY3RlZFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgICAgICBsZXQgcmVzdWx0UG9zaXRpb24gPSBmb3JjZWRQb3NpdGlvbnMgPyBmb3JjZWRQb3NpdGlvbnMgOiB0aGlzLl9nZXRQb3NpdGlvbnMoKTtcblxuICAgICAgICBpZiAoIXRoaXMuZml4ZWRQb3NpdGlvbikge1xuICAgICAgICAgICAgcmVzdWx0UG9zaXRpb24gPSByZXN1bHRQb3NpdGlvbi5jb25jYXQoR2V0RGVmYXVsdFBvc2l0aW9uKHJlc3VsdFBvc2l0aW9uKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fb3ZlcmxheVxuICAgICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAgIC5mbGV4aWJsZUNvbm5lY3RlZFRvKHRoaXMuYXBwZW5kVG8gfHwgdGhpcy5fdHJpZ2dlckVsZW1lbnQpXG4gICAgICAgICAgICAud2l0aFBvc2l0aW9ucyhyZXN1bHRQb3NpdGlvbilcbiAgICAgICAgICAgIC53aXRoUHVzaChmYWxzZSk7XG4gICAgfVxuXG4gICAgLyoqIHJlbW92ZSBsaXN0ZW5lcnMgZnJvbSB0cmlnZ2VyIGVsZW1lbnQgZXZlbnRzICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlVHJpZ2dlckxpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZXZlbnRSZWYuZm9yRWFjaCgoZXZlbnQpID0+IGV2ZW50KCkpO1xuICAgICAgICB0aGlzLl9ldmVudFJlZiA9IFtdO1xuICAgIH1cblxuICAgIC8qKiBBdHRhY2ggdGVtcGxhdGUgY29udGFpbmluZyBwb3BvdmVyIGJvZHkgdG8gb3ZlcmxheSAqL1xuICAgIHByaXZhdGUgX2F0dGFjaFRlbXBsYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wYXNzVmFyaWFibGVzVG9Cb2R5KCk7XG4gICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZURhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX292ZXJsYXlSZWYuYXR0YWNoKG5ldyBUZW1wbGF0ZVBvcnRhbCh0aGlzLl90ZW1wbGF0ZURhdGEudGVtcGxhdGUsIHRoaXMuX3RlbXBsYXRlRGF0YS5jb250YWluZXIpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBDcmVhdGUgUG9wb3ZlckJvZHlDb21wb25lbnQgYW5kIGF0dGFjaCBpdCBpbnRvIG92ZXJsYXkgKi9cbiAgICBwcml2YXRlIF9hdHRhY2hCb2R5Q29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5fb3ZlcmxheVJlZi5hdHRhY2gobmV3IENvbXBvbmVudFBvcnRhbChQb3BvdmVyQm9keUNvbXBvbmVudCwgbnVsbCwgdGhpcy5faW5qZWN0b3IpKTtcbiAgICAgICAgdGhpcy5fcG9wb3ZlckJvZHkgPSBvdmVybGF5Lmluc3RhbmNlO1xuICAgICAgICB0aGlzLl9wYXNzVmFyaWFibGVzVG9Cb2R5KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5Gb3JQb3NpdGlvbkNoYW5nZShwb3NpdGlvbkNoYW5nZTogT2JzZXJ2YWJsZTxDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2U+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BsYWNlbWVudFJlZnJlc2gkLm5leHQoKTtcbiAgICAgICAgcG9zaXRpb25DaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9wbGFjZW1lbnRSZWZyZXNoJCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5ub0Fycm93ICYmICEhdGhpcy5fZ2V0UG9wb3ZlckJvZHkoKSksXG4gICAgICAgICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBwcmV2aW91cy5jb25uZWN0aW9uUGFpciA9PT0gY3VycmVudC5jb25uZWN0aW9uUGFpcilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB0aGlzLl9nZXRQb3BvdmVyQm9keSgpLl9zZXRBcnJvd1N0eWxlcyhldmVudC5jb25uZWN0aW9uUGFpciwgdGhpcy5fZ2V0RGlyZWN0aW9uKCkpKTtcbiAgICB9XG5cbiAgICAvKiogU3Vic2NyaWJlIHRvIGNsb3NlIGV2ZW50cyBmcm9tIENESyBPdmVybGF5LCB0byB0aHJvdyBwcm9wZXIgZXZlbnRzLCBjaGFuZ2UgdmFsdWVzICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25DbG9zZSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2xvc2VFdmVudHMkID0gbWVyZ2UoXG4gICAgICAgICAgICB0aGlzLl9vdmVybGF5UmVmLmRldGFjaG1lbnRzKCksXG4gICAgICAgICAgICB0aGlzLl9nZXRQb3BvdmVyQm9keSgpLm9uQ2xvc2UsXG4gICAgICAgICAgICB0aGlzLl9vdXRzaWRlQ2xpY2tzJCgpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGZpbmFsaXplciQgPSBtZXJnZSh0aGlzLl9zdG9wQ2xvc2VMaXN0ZW5pbmckLCB0aGlzLl9yZWZyZXNoJCk7XG4gICAgICAgIGNsb3NlRXZlbnRzJC5waXBlKHRha2VVbnRpbChmaW5hbGl6ZXIkKSkuc3Vic2NyaWJlKCgpID0+IHRoaXMuY2xvc2UoKSk7XG4gICAgfVxuXG4gICAgLyoqIExpc3RlbmVyIGZvciBjbGljayBldmVudHMgKi9cbiAgICBwcml2YXRlIF9vdXRzaWRlQ2xpY2tzJCgpOiBPYnNlcnZhYmxlPE1vdXNlRXZlbnQ+IHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKHRoaXMuX292ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLCB0aGlzLl9vdmVybGF5UmVmLl9vdXRzaWRlUG9pbnRlckV2ZW50cykucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IHRoaXMuX3Nob3VsZENsb3NlKGV2ZW50KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Nob3VsZENsb3NlKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLmlzT3BlbiAmJlxuICAgICAgICAgICAgdGhpcy5jbG9zZU9uT3V0c2lkZUNsaWNrICYmXG4gICAgICAgICAgICAhdGhpcy5fdHJpZ2dlckNvbnRhaW5zVGFyZ2V0KGV2ZW50KSAmJlxuICAgICAgICAgICAgIXRoaXMuX3RhcmdldElzUG9wb3Zlck1vYmlsZURpYWxvZyhldmVudClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RhcmdldElzUG9wb3Zlck1vYmlsZURpYWxvZyhldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5fbW9iaWxlKSB7XG4gICAgICAgICAgICBsZXQgZWwgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5wYXJlbnRFbGVtZW50O1xuICAgICAgICAgICAgd2hpbGUgKGVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsLmhhc0F0dHJpYnV0ZSgnZGF0YS1tb2JpbGUtcG9wb3ZlcicpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVsID0gZWwucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRFdmVudFRhcmdldChldmVudDogRXZlbnQpOiBFdmVudFRhcmdldCB8IG51bGwge1xuICAgICAgICByZXR1cm4gZXZlbnQuY29tcG9zZWRQYXRoID8gZXZlbnQuY29tcG9zZWRQYXRoKClbMF0gOiBldmVudC50YXJnZXQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90cmlnZ2VyQ29udGFpbnNUYXJnZXQoZXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJFbGVtZW50ID0gdGhpcy5fdHJpZ2dlckVsZW1lbnQubmF0aXZlRWxlbWVudDtcbiAgICAgICAgcmV0dXJuIHRyaWdnZXJFbGVtZW50LmNvbnRhaW5zKHRoaXMuX2dldEV2ZW50VGFyZ2V0KGV2ZW50KSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRQb3NpdGlvbnMoKTogQ29ubmVjdGVkUG9zaXRpb25bXSB7XG4gICAgICAgIGlmICh0aGlzLmNka1Bvc2l0aW9ucykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2RrUG9zaXRpb25zO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMucGxhY2VtZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gW1BvcG92ZXJQb3NpdGlvbi5nZXRDZGtQbGFjZW1lbnQodGhpcy5wbGFjZW1lbnQsIHRoaXMuX2dldERpcmVjdGlvbigpKV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9hcHBseVdpZHRoT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgbWF4V2lkdGhMaW1pdCA9IHRoaXMubWF4V2lkdGggPyB0aGlzLm1heFdpZHRoIDogTUFYX0JPRFlfU0laRTtcbiAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1pbih0aGlzLl9nZXRUcmlnZ2VyV2lkdGgoKSwgbWF4V2lkdGhMaW1pdCk7XG4gICAgICAgIGlmICh0aGlzLmZpbGxDb250cm9sTW9kZSA9PT0gJ2F0LWxlYXN0Jykge1xuICAgICAgICAgICAgdGhpcy5fZ2V0UG9wb3ZlckJvZHkoKS5fcG9wb3ZlckJvZHlNaW5XaWR0aCA9IHdpZHRoO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZmlsbENvbnRyb2xNb2RlID09PSAnZXF1YWwnKSB7XG4gICAgICAgICAgICB0aGlzLl9nZXRQb3BvdmVyQm9keSgpLl9wb3BvdmVyQm9keVdpZHRoID0gd2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcGFzc1ZhcmlhYmxlc1RvQm9keSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuX2dldFBvcG92ZXJCb2R5KCk7XG4gICAgICAgIGJvZHkudGV4dCA9IHRoaXMuc3RyaW5nQ29udGVudDtcbiAgICAgICAgYm9keS5fYWRkaXRpb25hbEJvZHlDbGFzcyA9IHRoaXMuYWRkaXRpb25hbEJvZHlDbGFzcztcbiAgICAgICAgYm9keS5fZm9jdXNUcmFwcGVkID0gdGhpcy5mb2N1c1RyYXBwZWQ7XG4gICAgICAgIGJvZHkuX21heFdpZHRoID0gdGhpcy5tYXhXaWR0aDtcbiAgICAgICAgYm9keS5fbm9BcnJvdyA9IHRoaXMubm9BcnJvdztcbiAgICAgICAgYm9keS5fZm9jdXNBdXRvQ2FwdHVyZSA9IHRoaXMuZm9jdXNBdXRvQ2FwdHVyZTtcbiAgICAgICAgYm9keS5fZGlzYWJsZVNjcm9sbGJhciA9IHRoaXMuZGlzYWJsZVNjcm9sbGJhcjtcbiAgICAgICAgYm9keS5fdGFiYmFibGVTY3JvbGxiYXIgPSB0aGlzLnRhYmJhYmxlU2Nyb2xsYmFyO1xuICAgICAgICBib2R5Ll90ZW1wbGF0ZVRvRGlzcGxheSA9IHRoaXMudGVtcGxhdGVDb250ZW50ITtcbiAgICAgICAgYm9keS5fY2xvc2VPbkVzY2FwZUtleSA9IHRoaXMuY2xvc2VPbkVzY2FwZUtleTtcbiAgICAgICAgYm9keS5fYm9keVJvbGUgPSB0aGlzLl9ib2R5Um9sZTtcbiAgICAgICAgYm9keS5fYm9keUlkID0gdGhpcy5fYm9keUlkO1xuICAgICAgICB0aGlzLl9kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRUcmlnZ2VyV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9nZXRQb3BvdmVyQm9keSgpOiBQb3BvdmVyQm9keUNvbXBvbmVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZURhdGE/LnBvcG92ZXJCb2R5IHx8IHRoaXMuX3BvcG92ZXJCb2R5O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGV0ZWN0Q2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2dldFBvcG92ZXJCb2R5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2dldFBvcG92ZXJCb2R5KCkuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KGZvY3VzTGFzdEVsZW1lbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmIChmb2N1c0xhc3RFbGVtZW50ICYmIHRoaXMuZm9jdXNBdXRvQ2FwdHVyZSkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdEFjdGl2ZUVsZW1lbnQgPSA8SFRNTEVsZW1lbnQ+ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuX2dldFBvcG92ZXJCb2R5KCk/Ll9mb2N1c0ZpcnN0VGFiYmFibGVFbGVtZW50KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZvY3VzTGFzdEFjdGl2ZUVsZW1lbnRCZWZvcmVPcGVuKGZvY3VzTGFzdEVsZW1lbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIGlmIChmb2N1c0xhc3RFbGVtZW50ICYmIHRoaXMuZm9jdXNBdXRvQ2FwdHVyZSAmJiB0aGlzLl9sYXN0QWN0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgdGhpcy5fbGFzdEFjdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -40,11 +40,12 @@ export class PopoverTriggerDirective {
|
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
PopoverTriggerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PopoverTriggerDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
43
|
-
PopoverTriggerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: PopoverTriggerDirective, selector: "[fdPopoverTrigger], [fd-popover-trigger]", inputs: { popover: ["fdPopoverTrigger", "popover"] }, host: { properties: { "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-controls": "this.ariaControls", "attr.aria-expanded": "this.ariaExpanded" } }, ngImport: i0 });
|
|
43
|
+
PopoverTriggerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.9", type: PopoverTriggerDirective, isStandalone: true, selector: "[fdPopoverTrigger], [fd-popover-trigger]", inputs: { popover: ["fdPopoverTrigger", "popover"] }, host: { properties: { "attr.aria-haspopup": "this.ariaHasPopup", "attr.aria-controls": "this.ariaControls", "attr.aria-expanded": "this.ariaExpanded" } }, ngImport: i0 });
|
|
44
44
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PopoverTriggerDirective, decorators: [{
|
|
45
45
|
type: Directive,
|
|
46
46
|
args: [{
|
|
47
|
-
selector: '[fdPopoverTrigger], [fd-popover-trigger]'
|
|
47
|
+
selector: '[fdPopoverTrigger], [fd-popover-trigger]',
|
|
48
|
+
standalone: true
|
|
48
49
|
}]
|
|
49
50
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { popover: [{
|
|
50
51
|
type: Input,
|
|
@@ -59,4 +60,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
59
60
|
type: HostBinding,
|
|
60
61
|
args: ['attr.aria-expanded']
|
|
61
62
|
}] } });
|
|
62
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci10cmlnZ2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3BvcG92ZXIvcG9wb3Zlci10cmlnZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXJGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFRM0MsTUFBTSxPQUFPLHVCQUF1QjtJQUNoQyx5Q0FBeUM7SUFDekMsSUFDSSxPQUFPLENBQUMsT0FBbUM7UUFDM0MsSUFBSSxPQUFPLEVBQUU7WUFDVCxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDbkMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ25DO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFpQkQsY0FBYztJQUNkLFlBQW9CLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO0lBQUcsQ0FBQztJQUUvQyxjQUFjO0lBQ2QsV0FBVztRQUNQLElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxjQUFjO0lBQ04saUJBQWlCLENBQUMsT0FBeUI7UUFDL0MsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDcEMsSUFBSSxPQUFPLEVBQUU7WUFDVCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxDQUFDLFlBQVk7aUJBQzlDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2lCQUMvQixTQUFTLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO1NBQzVEO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTixrQkFBa0IsQ0FBQyxPQUFtQztRQUMxRCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNwRCxDQUFDO0lBRUQsY0FBYztJQUNOLDRCQUE0QjtRQUNoQyxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUM5QixJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDOUM7SUFDTCxDQUFDOztvSEF2RFEsdUJBQXVCO3dHQUF2Qix1QkFBdUI7MkZBQXZCLHVCQUF1QjtrQkFKbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMENBQTBDO29CQUNwRCxVQUFVLEVBQUUsSUFBSTtpQkFDbkI7aUdBSU8sT0FBTztzQkFEVixLQUFLO3VCQUFDLGtCQUFrQjtnQkFXekIsWUFBWTtzQkFEWCxXQUFXO3VCQUFDLG9CQUFvQjtnQkFLakMsWUFBWTtzQkFEWCxXQUFXO3VCQUFDLG9CQUFvQjtnQkFLakMsWUFBWTtzQkFEWCxXQUFXO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgc3RhcnRXaXRoIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnLi9wb3BvdmVyLmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnW2ZkUG9wb3ZlclRyaWdnZXJdLCBbZmQtcG9wb3Zlci10cmlnZ2VyXScsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZVxufSlcbmV4cG9ydCBjbGFzcyBQb3BvdmVyVHJpZ2dlckRpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgLyoqIFNldCByZWZlcmVuY2UgdG8gUG9wb3ZlciBDb21wb25lbnQgKi9cbiAgICBASW5wdXQoJ2ZkUG9wb3ZlclRyaWdnZXInKVxuICAgIHNldCBwb3BvdmVyKHBvcG92ZXI6IE51bGxhYmxlPFBvcG92ZXJDb21wb25lbnQ+KSB7XG4gICAgICAgIGlmIChwb3BvdmVyKSB7XG4gICAgICAgICAgICBwb3BvdmVyLnRyaWdnZXIgPSB0aGlzLl9lbGVtZW50UmVmO1xuICAgICAgICAgICAgdGhpcy5fbGlzdGVuT25FeHBhbmRlZChwb3BvdmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRBcmlhQXR0cmlidXRlcyhwb3BvdmVyKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWhhc3BvcHVwJylcbiAgICBhcmlhSGFzUG9wdXA6IE51bGxhYmxlPGJvb2xlYW4+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1jb250cm9scycpXG4gICAgYXJpYUNvbnRyb2xzOiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuYXJpYS1leHBhbmRlZCcpXG4gICAgYXJpYUV4cGFuZGVkOiBOdWxsYWJsZTxib29sZWFuPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNFeHBhbmRlZFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVFeHBhbmRlZExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5PbkV4cGFuZGVkKHBvcG92ZXI6IFBvcG92ZXJDb21wb25lbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVFeHBhbmRlZExpc3RlbmVyKCk7XG4gICAgICAgIGlmIChwb3BvdmVyKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0V4cGFuZGVkU3Vic2NyaXB0aW9uID0gcG9wb3Zlci5pc09wZW5DaGFuZ2VcbiAgICAgICAgICAgICAgICAucGlwZShzdGFydFdpdGgocG9wb3Zlci5pc09wZW4pKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGlzT3BlbikgPT4gKHRoaXMuYXJpYUV4cGFuZGVkID0gaXNPcGVuKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldEFyaWFBdHRyaWJ1dGVzKHBvcG92ZXI6IE51bGxhYmxlPFBvcG92ZXJDb21wb25lbnQ+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuYXJpYUhhc1BvcHVwID0gISFwb3BvdmVyO1xuICAgICAgICB0aGlzLmFyaWFDb250cm9scyA9IHBvcG92ZXIgPyBwb3BvdmVyLmlkIDogbnVsbDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Vuc3Vic2NyaWJlRXhwYW5kZWRMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRXhwYW5kZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRXhwYW5kZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, HostListener, Injector, Input, Optional, Renderer2, TemplateRef, ViewChild, ViewContainerRef, ViewEncapsulation } from '@angular/core';
|
|
2
|
-
import { CdkOverlayOrigin } from '@angular/cdk/overlay';
|
|
3
2
|
import { DOWN_ARROW, ENTER, SPACE } from '@angular/cdk/keycodes';
|
|
3
|
+
import { CdkOverlayOrigin } from '@angular/cdk/overlay';
|
|
4
|
+
import { NgIf, NgTemplateOutlet } from '@angular/common';
|
|
4
5
|
import { DynamicComponentService, KeyUtil } from '@fundamental-ngx/cdk/utils';
|
|
5
6
|
import { contentDensityObserverProviders } from '@fundamental-ngx/core/content-density';
|
|
6
7
|
import equal from 'fast-deep-equal';
|
|
7
8
|
import { BasePopoverClass } from './base/base-popover.class';
|
|
9
|
+
import { PopoverBodyDirective } from './popover-body.directive';
|
|
8
10
|
import { PopoverBodyComponent } from './popover-body/popover-body.component';
|
|
9
|
-
import { PopoverService } from './popover-service/popover.service';
|
|
10
11
|
import { PopoverControlComponent } from './popover-control/popover-control.component';
|
|
11
|
-
import { POPOVER_COMPONENT } from './popover.interface';
|
|
12
12
|
import { PopoverMobileComponent } from './popover-mobile/popover-mobile.component';
|
|
13
13
|
import { PopoverMobileModule } from './popover-mobile/popover-mobile.module';
|
|
14
|
+
import { PopoverService } from './popover-service/popover.service';
|
|
15
|
+
import { POPOVER_COMPONENT } from './popover.interface';
|
|
14
16
|
import { FD_POPOVER_COMPONENT } from './tokens';
|
|
15
17
|
import * as i0 from "@angular/core";
|
|
16
18
|
import * as i1 from "./popover-service/popover.service";
|
|
17
19
|
import * as i2 from "@fundamental-ngx/cdk/utils";
|
|
18
|
-
import * as i3 from "@angular/common";
|
|
19
|
-
import * as i4 from "@angular/cdk/overlay";
|
|
20
20
|
export const SELECT_CLASS_NAMES = {
|
|
21
21
|
selectControl: 'fd-select__control'
|
|
22
22
|
};
|
|
@@ -146,19 +146,29 @@ export class PopoverComponent extends BasePopoverClass {
|
|
|
146
146
|
if (!this.popoverBody) {
|
|
147
147
|
this._popoverService.templateContent = this.templateRef;
|
|
148
148
|
}
|
|
149
|
-
this._popoverService.initialise(this.trigger || this.triggerOrigin.elementRef, this, this.
|
|
150
|
-
? {
|
|
151
|
-
template: this.templateRef,
|
|
152
|
-
container: this.container,
|
|
153
|
-
popoverBody: this.popoverBody
|
|
154
|
-
}
|
|
155
|
-
: null);
|
|
149
|
+
this._popoverService.initialise(this.trigger || this.triggerOrigin.elementRef, this, this._getPopoverBodyContent());
|
|
156
150
|
}
|
|
157
151
|
else {
|
|
158
152
|
this._setupMobileMode();
|
|
159
153
|
}
|
|
160
154
|
this._cdr.detectChanges();
|
|
161
155
|
}
|
|
156
|
+
/**
|
|
157
|
+
* Depending on a used popover body type, returns a popover body content
|
|
158
|
+
**/
|
|
159
|
+
_getPopoverBodyContent() {
|
|
160
|
+
if (this.popoverBody) {
|
|
161
|
+
return {
|
|
162
|
+
template: this.templateRef,
|
|
163
|
+
container: this.container,
|
|
164
|
+
popoverBody: this.popoverBody
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
if (this.popoverBodyDirective) {
|
|
168
|
+
return this.popoverBodyDirective.templateRef;
|
|
169
|
+
}
|
|
170
|
+
return null;
|
|
171
|
+
}
|
|
162
172
|
/** @hidden Open Popover in mobile mode */
|
|
163
173
|
async _setupMobileMode() {
|
|
164
174
|
const injector = Injector.create({
|
|
@@ -197,14 +207,14 @@ export class PopoverComponent extends BasePopoverClass {
|
|
|
197
207
|
}
|
|
198
208
|
}
|
|
199
209
|
PopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PopoverComponent, deps: [{ token: i1.PopoverService }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i0.ViewContainerRef }, { token: i0.Injector }, { token: i2.DynamicComponentService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
200
|
-
PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: PopoverComponent, selector: "fd-popover", inputs: { title: "title", trigger: "trigger", fixedPosition: "fixedPosition", id: "id", mobile: "mobile", mobileConfig: "mobileConfig" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "class.fd-popover-custom--mobile": "mobile", "attr.id": "id" }, classAttribute: "fd-popover-custom" }, providers: [
|
|
210
|
+
PopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: PopoverComponent, isStandalone: true, selector: "fd-popover", inputs: { title: "title", trigger: "trigger", fixedPosition: "fixedPosition", id: "id", mobile: "mobile", mobileConfig: "mobileConfig" }, host: { listeners: { "keydown": "onKeyDown($event)" }, properties: { "class.fd-popover-custom--mobile": "mobile", "attr.id": "id" }, classAttribute: "fd-popover-custom" }, providers: [
|
|
201
211
|
PopoverService,
|
|
202
212
|
{
|
|
203
213
|
provide: FD_POPOVER_COMPONENT,
|
|
204
214
|
useExisting: PopoverComponent
|
|
205
215
|
},
|
|
206
216
|
contentDensityObserverProviders()
|
|
207
|
-
], queries: [{ propertyName: "popoverBody", first: true, predicate: PopoverBodyComponent, descendants: true }, { propertyName: "popoverControl", first: true, predicate: PopoverControlComponent, descendants: true }, { propertyName: "popoverBodyContentTemplate", first: true, predicate: ["popoverBodyContent"], descendants: true }, { propertyName: "popoverFooterContentTemplate", first: true, predicate: ["popoverFooterContent"], descendants: true }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["templateRef"], descendants: true, read: TemplateRef }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }, { propertyName: "triggerOrigin", first: true, predicate: CdkOverlayOrigin, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"!trigger\"\n cdkOverlayOrigin\n class=\"fd-popover__control\"\n [class]=\"additionalTriggerClass\"\n (keydown)=\"triggerKeyDownHandler($event)\"\n>\n <ng-content select=\"fd-popover-control\"></ng-content>\n</div>\n\n<ng-template #templateRef>\n <ng-content select=\"fd-popover-body\"></ng-content>\n\n <ng-content></ng-content>\n</ng-template>\n\n<ng-container #container></ng-container>\n", dependencies: [{ kind: "directive", type:
|
|
217
|
+
], queries: [{ propertyName: "popoverBody", first: true, predicate: PopoverBodyComponent, descendants: true }, { propertyName: "popoverBodyDirective", first: true, predicate: PopoverBodyDirective, descendants: true }, { propertyName: "popoverControl", first: true, predicate: PopoverControlComponent, descendants: true }, { propertyName: "popoverBodyContentTemplate", first: true, predicate: ["popoverBodyContent"], descendants: true }, { propertyName: "popoverFooterContentTemplate", first: true, predicate: ["popoverFooterContent"], descendants: true }], viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["templateRef"], descendants: true, read: TemplateRef }, { propertyName: "container", first: true, predicate: ["container"], descendants: true, read: ViewContainerRef }, { propertyName: "triggerOrigin", first: true, predicate: CdkOverlayOrigin, descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"!trigger\"\n cdkOverlayOrigin\n class=\"fd-popover__control\"\n [class]=\"additionalTriggerClass\"\n (keydown)=\"triggerKeyDownHandler($event)\"\n>\n <ng-content select=\"fd-popover-control\"></ng-content>\n</div>\n\n<ng-template #templateRef>\n <ng-content select=\"fd-popover-body\"></ng-content>\n\n <ng-content></ng-content>\n</ng-template>\n\n<ng-container #container></ng-container>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
208
218
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: PopoverComponent, decorators: [{
|
|
209
219
|
type: Component,
|
|
210
220
|
args: [{ selector: 'fd-popover', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
@@ -218,7 +228,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
218
228
|
class: 'fd-popover-custom',
|
|
219
229
|
'[class.fd-popover-custom--mobile]': 'mobile',
|
|
220
230
|
'[attr.id]': 'id'
|
|
221
|
-
}, template: "<div\n *ngIf=\"!trigger\"\n cdkOverlayOrigin\n class=\"fd-popover__control\"\n [class]=\"additionalTriggerClass\"\n (keydown)=\"triggerKeyDownHandler($event)\"\n>\n <ng-content select=\"fd-popover-control\"></ng-content>\n</div>\n\n<ng-template #templateRef>\n <ng-content select=\"fd-popover-body\"></ng-content>\n\n <ng-content></ng-content>\n</ng-template>\n\n<ng-container #container></ng-container>\n" }]
|
|
231
|
+
}, standalone: true, imports: [NgIf, CdkOverlayOrigin, NgTemplateOutlet], template: "<div\n *ngIf=\"!trigger\"\n cdkOverlayOrigin\n class=\"fd-popover__control\"\n [class]=\"additionalTriggerClass\"\n (keydown)=\"triggerKeyDownHandler($event)\"\n>\n <ng-content select=\"fd-popover-control\"></ng-content>\n</div>\n\n<ng-template #templateRef>\n <ng-content select=\"fd-popover-body\"></ng-content>\n\n <ng-content></ng-content>\n</ng-template>\n\n<ng-container #container></ng-container>\n" }]
|
|
222
232
|
}], ctorParameters: function () { return [{ type: i1.PopoverService }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i0.ViewContainerRef }, { type: i0.Injector }, { type: i2.DynamicComponentService, decorators: [{
|
|
223
233
|
type: Optional
|
|
224
234
|
}] }]; }, propDecorators: { title: [{
|
|
@@ -245,6 +255,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
245
255
|
}], popoverBody: [{
|
|
246
256
|
type: ContentChild,
|
|
247
257
|
args: [PopoverBodyComponent]
|
|
258
|
+
}], popoverBodyDirective: [{
|
|
259
|
+
type: ContentChild,
|
|
260
|
+
args: [PopoverBodyDirective]
|
|
248
261
|
}], popoverControl: [{
|
|
249
262
|
type: ContentChild,
|
|
250
263
|
args: [PopoverControlComponent]
|
|
@@ -258,4 +271,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
258
271
|
type: HostListener,
|
|
259
272
|
args: ['keydown', ['$event']]
|
|
260
273
|
}] } });
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUdMLFFBQVEsRUFDUixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUMzRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVqRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUUsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEYsT0FBTyxLQUFLLE1BQU0saUJBQWlCLENBQUM7QUFDcEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDN0UsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxN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QUFvQjtnQkFLbEMsY0FBYztzQkFEYixZQUFZO3VCQUFDLHVCQUF1QjtnQkFLckMsMEJBQTBCO3NCQUR6QixZQUFZO3VCQUFDLG9CQUFvQjtnQkFLbEMsNEJBQTRCO3NCQUQzQixZQUFZO3VCQUFDLHNCQUFzQjtnQkF3RHBDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDZGtPdmVybGF5T3JpZ2luLCBDb25uZWN0ZWRQb3NpdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IERPV05fQVJST1csIEVOVEVSLCBTUEFDRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5cbmltcG9ydCB7IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlLCBLZXlVdGlsIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jZGsvdXRpbHMnO1xuaW1wb3J0IHsgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jb250ZW50LWRlbnNpdHknO1xuaW1wb3J0IHsgTW9iaWxlTW9kZUNvbmZpZyB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9tb2JpbGUtbW9kZSc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsJztcbmltcG9ydCB7IEJhc2VQb3BvdmVyQ2xhc3MgfSBmcm9tICcuL2Jhc2UvYmFzZS1wb3BvdmVyLmNsYXNzJztcbmltcG9ydCB7IFBvcG92ZXJCb2R5Q29tcG9uZW50IH0gZnJvbSAnLi9wb3BvdmVyLWJvZHkvcG9wb3Zlci1ib2R5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb3BvdmVyU2VydmljZSB9IGZyb20gJy4vcG9wb3Zlci1zZXJ2aWNlL3BvcG92ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQb3BvdmVyQ29udHJvbENvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci1jb250cm9sL3BvcG92ZXItY29udHJvbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUE9QT1ZFUl9DT01QT05FTlQgfSBmcm9tICcuL3BvcG92ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvcG92ZXJNb2JpbGVDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXItbW9iaWxlL3BvcG92ZXItbW9iaWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb3BvdmVyTW9iaWxlTW9kdWxlIH0gZnJvbSAnLi9wb3BvdmVyLW1vYmlsZS9wb3BvdmVyLW1vYmlsZS5tb2R1bGUnO1xuaW1wb3J0IHsgUG9wb3ZlckNoaWxkQ29udGVudCB9IGZyb20gJy4vcG9wb3Zlci1jaGlsZC1jb250ZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBGRF9QT1BPVkVSX0NPTVBPTkVOVCB9IGZyb20gJy4vdG9rZW5zJztcblxuZXhwb3J0IGNvbnN0IFNFTEVDVF9DTEFTU19OQU1FUyA9IHtcbiAgICBzZWxlY3RDb250cm9sOiAnZmQtc2VsZWN0X19jb250cm9sJ1xufTtcblxubGV0IGNka1BvcG92ZXJVbmlxdWVJZCA9IDA7XG5cbi8qKlxuICogVGhlIHBvcG92ZXIgaXMgYSB3cmFwcGluZyBjb21wb25lbnQgdGhhdCBhY2NlcHRzIGEgKmNvbnRyb2wqIGFzIHdlbGwgYXMgYSAqYm9keSouXG4gKiBUaGUgY29udHJvbCBpcyB3aGF0IHdpbGwgdHJpZ2dlciB0aGUgb3BlbmluZyBvZiB0aGUgYWN0dWFsIHBvcG92ZXIsIHdoaWNoIGlzIGNhbGxlZCB0aGUgYm9keS5cbiAqIEJ5IGRlZmF1bHQsIHBvcG92ZXJzIGFyZSB0cmlnZ2VyZWQgYnkgY2xpY2suIFRoaXMgY2FuIGJlIGN1c3RvbWl6ZWQgdGhyb3VnaCB0aGUgKnRyaWdnZXJzKiBpbnB1dC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1wb3BvdmVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcG9wb3Zlci5jb21wb25lbnQuaHRtbCcsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgUG9wb3ZlclNlcnZpY2UsXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEZEX1BPUE9WRVJfQ09NUE9ORU5ULFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IFBvcG92ZXJDb21wb25lbnRcbiAgICAgICAgfSxcbiAgICAgICAgY29udGVudERlbnNpdHlPYnNlcnZlclByb3ZpZGVycygpXG4gICAgXSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtcG9wb3Zlci1jdXN0b20nLFxuICAgICAgICAnW2NsYXNzLmZkLXBvcG92ZXItY3VzdG9tLS1tb2JpbGVdJzogJ21vYmlsZScsXG4gICAgICAgICdbYXR0ci5pZF0nOiAnaWQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBQb3BvdmVyQ29tcG9uZW50XG4gICAgZXh0ZW5kcyBCYXNlUG9wb3ZlckNsYXNzXG4gICAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBBZnRlckNvbnRlbnRJbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlc1xue1xuICAgIC8qKiBUb29sdGlwIGZvciBwb3BvdmVyICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIFJlZmVyZW5jZSB0byBwb3BvdmVyIHRyaWdnZXIgZWxlbWVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHRyaWdnZXIodHJpZ2dlcjogRWxlbWVudFJlZikge1xuICAgICAgICBpZiAoZXF1YWwodHJpZ2dlciwgdGhpcy5fdHJpZ2dlcikpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmlnZ2VyID0gdHJpZ2dlcjtcbiAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2UudXBkYXRlVHJpZ2dlckVsZW1lbnQodGhpcy5fdHJpZ2dlcik7XG4gICAgfVxuXG4gICAgZ2V0IHRyaWdnZXIoKTogRWxlbWVudFJlZiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90cmlnZ2VyO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHJpZ2dlcjogRWxlbWVudFJlZjtcblxuICAgIC8qKiBXaGV0aGVyIHBvc2l0aW9uIHNob3VsZG4ndCBjaGFuZ2UsIHdoZW4gcG9wb3ZlciBhcHByb2FjaCB0aGUgY29ybmVyIG9mIHBhZ2UgKi9cbiAgICBASW5wdXQoKVxuICAgIGZpeGVkUG9zaXRpb24gPSBmYWxzZTtcblxuICAgIC8qKiBJZCBvZiB0aGUgcG9wb3Zlci4gSWYgbm9uZSBpcyBwcm92aWRlZCwgb25lIHdpbGwgYmUgZ2VuZXJhdGVkLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQ6IHN0cmluZyA9ICdmZC1wb3BvdmVyLScgKyBjZGtQb3BvdmVyVW5pcXVlSWQrKztcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBwb3BvdmVyIGNvbXBvbmVudCBzaG91bGQgYmUgZGlzcGxheWVkIGluIG1vYmlsZSBtb2RlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlID0gZmFsc2U7XG5cbiAgICAvKiogQ29uZmlnIGZvciB0aGUgcG9wb3ZlciBpbiBtb2JpbGUgbW9kZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW9iaWxlQ29uZmlnOiBNb2JpbGVNb2RlQ29uZmlnID0geyBoYXNDbG9zZUJ1dHRvbjogdHJ1ZSB9O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcbiAgICB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyByZWFkOiBWaWV3Q29udGFpbmVyUmVmIH0pXG4gICAgY29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkKENka092ZXJsYXlPcmlnaW4pXG4gICAgdHJpZ2dlck9yaWdpbjogQ2RrT3ZlcmxheU9yaWdpbjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChQb3BvdmVyQm9keUNvbXBvbmVudClcbiAgICBwb3BvdmVyQm9keTogUG9wb3ZlckJvZHlDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoUG9wb3ZlckNvbnRyb2xDb21wb25lbnQpXG4gICAgcG9wb3ZlckNvbnRyb2w6IFBvcG92ZXJDb250cm9sQ29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gLSB0ZW1wbGF0ZSBmb3IgRGlhbG9nIGJvZHkgY29udGVudCAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3BvcG92ZXJCb2R5Q29udGVudCcpXG4gICAgcG9wb3ZlckJvZHlDb250ZW50VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAtIHRlbXBsYXRlIGZvciBEaWFsb2cgZm9vdGVyIGNvbnRlbnQgKi9cbiAgICBAQ29udGVudENoaWxkKCdwb3BvdmVyRm9vdGVyQ29udGVudCcpXG4gICAgcG9wb3ZlckZvb3RlckNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAZGVwcmVjYXRlZFxuICAgICAqIExlZnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgKi9cbiAgICBkaXJlY3RpdmVSZWY6IGFueTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2xpY2tFdmVudExpc3RlbmVyOiBudWxsIHwgKCgpID0+IHZvaWQpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9tb2JpbGVNb2RlQ29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8UG9wb3Zlck1vYmlsZUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9wb3BvdmVyU2VydmljZTogUG9wb3ZlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3JlbmRlcmVkOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfZHluYW1pY0NvbXBvbmVudFNlcnZpY2U6IER5bmFtaWNDb21wb25lbnRTZXJ2aWNlXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3NldHVwVmlldygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5wb3BvdmVyQ29udHJvbCAmJiB0aGlzLnRyaWdnZXJzLmluY2x1ZGVzKCdjbGljaycpKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJDb250cm9sLl90YWJiYWJsZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2UucmVmcmVzaENvbmZpZ3VyYXRpb24odGhpcyk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXMuZGlzYWJsZVNjcm9sbGJhciAmJiB0aGlzLnBvcG92ZXJCb2R5ICYmIHRoaXMucG9wb3ZlckJvZHkuX3Njcm9sbGJhcikge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyQm9keS5fc2Nyb2xsYmFyLl9pblBvcG92ZXIgPSBjaGFuZ2VzLmRpc2FibGVTY3JvbGxiYXIuY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGVzdHJveU1vYmlsZUNvbXBvbmVudCgpO1xuICAgICAgICB0aGlzLl9kZXN0cm95RXZlbnRMaXN0ZW5lcnMoKTtcbiAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2Uub25EZXN0cm95KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgICBvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIHBvcG92ZXJDb250cm9sIHdpbGwgYmUgdW5kZWZpbmVkIHdoZW4gcG9wb3ZlciBpcyB1c2VkIGZyb20gXCJmZFBvcG92ZXJUcmlnZ2VyXCJcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlckNvbnRyb2w/LmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bMF0gPT09IGFjdGl2ZUVsZW1lbnQgJiZcbiAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQ/LnRhZ05hbWUgIT09ICdJTlBVVCcgJiZcbiAgICAgICAgICAgIGFjdGl2ZUVsZW1lbnQ/LnRhZ05hbWUgIT09ICdURVhUQVJFQScgJiZcbiAgICAgICAgICAgICFhY3RpdmVFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoU0VMRUNUX0NMQVNTX05BTUVTLnNlbGVjdENvbnRyb2wpXG4gICAgICAgICkge1xuICAgICAgICAgICAgaWYgKEtleVV0aWwuaXNLZXlDb2RlKGV2ZW50LCBbU1BBQ0UsIEVOVEVSXSkpIHtcbiAgICAgICAgICAgICAgICAvLyBwcmV2ZW50IHBhZ2Ugc2Nyb2xsaW5nIG9uIFNwYWNlIGtleWRvd25cbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLnRvZ2dsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFRvZ2dsZXMgbWVudSBvcGVuL2Nsb3NlIHN0YXRlICovXG4gICAgdG9nZ2xlKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIE9wZW5zIHRoZSBwb3BvdmVyLiAqL1xuICAgIG9wZW4oKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLm9wZW4oKTtcbiAgICAgICAgdGhpcy5fY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cblxuICAgIC8qKiBDbG9zZXMgdGhlIHBvcG92ZXIuICovXG4gICAgY2xvc2UoZm9jdXNBY3RpdmVFbGVtZW50ID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5jbG9zZShmb2N1c0FjdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGNhbGxlZCB0byBjaGFuZ2UgcG9zaXRpb24gb2YgcG9wb3ZlcixcbiAgICAgKiByZWNvbW1lbmRlZCB0byBiZSB1c2VkIG9ubHkgd2hlbiBwb3BvdmVyIGlzIG9wZW5lZCwgb3RoZXJ3aXNlIGNoYW5nZSBwb3NpdGlvbiBvciBjZGtQbGFjZW1lbnRcbiAgICAgKi9cbiAgICBhcHBseU5ld1Bvc2l0aW9uKHBvc2l0aW9uczogQ29ubmVjdGVkUG9zaXRpb25bXSk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5hcHBseU5ld1Bvc2l0aW9uKHBvc2l0aW9ucyk7XG4gICAgfVxuXG4gICAgLyoqIEBkZXByZWNhdGVkXG4gICAgICogTGVmdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAqL1xuICAgIHVwZGF0ZVBvcG92ZXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVmcmVzaFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIE1ldGhvZCBjYWxsZWQgdG8gcmVmcmVzaCBwb3NpdGlvbiBvZiBvcGVuZWQgcG9wb3ZlciAqL1xuICAgIHJlZnJlc2hQb3NpdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2UucmVmcmVzaFBvc2l0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZXIgZm9yIGFsdCArIGFycm93IGRvd24ga2V5ZG93biAqL1xuICAgIHRyaWdnZXJLZXlEb3duSGFuZGxlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIERPV05fQVJST1cpICYmIGV2ZW50LmFsdEtleSAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBTZWxlY3QgYW5kIGluc3RhbnRpYXRlIHBvcG92ZXIgdmlldyBtb2RlICovXG4gICAgcHJpdmF0ZSBfc2V0dXBWaWV3KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5fbW9iaWxlID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wb3ZlckJvZHkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS50ZW1wbGF0ZUNvbnRlbnQgPSB0aGlzLnRlbXBsYXRlUmVmO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2UuaW5pdGlhbGlzZShcbiAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXIgfHwgdGhpcy50cmlnZ2VyT3JpZ2luLmVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJCb2R5XG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogdGhpcy50ZW1wbGF0ZVJlZixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3ZlckJvZHk6IHRoaXMucG9wb3ZlckJvZHlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3NldHVwTW9iaWxlTW9kZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBPcGVuIFBvcG92ZXIgaW4gbW9iaWxlIG1vZGUgKi9cbiAgICBwcml2YXRlIGFzeW5jIF9zZXR1cE1vYmlsZU1vZGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogUE9QT1ZFUl9DT01QT05FTlQsIHVzZVZhbHVlOiB0aGlzIH1dLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvclxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5fbW9iaWxlID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLl9tb2JpbGVNb2RlQ29tcG9uZW50UmVmID0gYXdhaXQgdGhpcy5fZHluYW1pY0NvbXBvbmVudFNlcnZpY2UuY3JlYXRlRHluYW1pY01vZHVsZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwb3BvdmVyQm9keUNvbnRlbnRUZW1wbGF0ZTogdGhpcy5wb3BvdmVyQm9keUNvbnRlbnRUZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICBwb3BvdmVyRm9vdGVyQ29udGVudFRlbXBsYXRlOiB0aGlzLnBvcG92ZXJGb290ZXJDb250ZW50VGVtcGxhdGVcbiAgICAgICAgICAgIH0gYXMgUG9wb3ZlckNoaWxkQ29udGVudCxcbiAgICAgICAgICAgIFBvcG92ZXJNb2JpbGVNb2R1bGUsXG4gICAgICAgICAgICBQb3BvdmVyTW9iaWxlQ29tcG9uZW50LFxuICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgIGluamVjdG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fbGlzdGVuT25UcmlnZ2VyUmVmQ2xpY2tzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gLSBMaXN0ZW4gb24gcG9wb3ZlciB0cmlnZ2VyIHJlZiBjbGlja3MgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5PblRyaWdnZXJSZWZDbGlja3MoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudExpc3RlbmVycygpO1xuXG4gICAgICAgIGlmICh0aGlzLnRyaWdnZXIgJiYgdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsaWNrRXZlbnRMaXN0ZW5lciA9IHRoaXMuX3JlbmRlcmVkLmxpc3Rlbih0aGlzLnRyaWdnZXIubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKCkgPT4gdGhpcy50b2dnbGUoKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICogVGhpcyBpcyBnb2luZyB0byBiZSByZW1vdmVkIGluIGZlYXR1cmUsIG9uIGRpYWxvZyBhbmQgZHluYW1pYyBzZXJ2aWNlIGNvbXBvbmVudCByZWZhY3RvclxuICAgICAqL1xuICAgIHByaXZhdGUgX2Rlc3Ryb3lFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2NsaWNrRXZlbnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5fY2xpY2tFdmVudExpc3RlbmVyKCk7XG4gICAgICAgICAgICB0aGlzLl9jbGlja0V2ZW50TGlzdGVuZXIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9kZXN0cm95TW9iaWxlQ29tcG9uZW50KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5fbW9iaWxlTW9kZUNvbXBvbmVudFJlZikge1xuICAgICAgICAgICAgdGhpcy5fbW9iaWxlTW9kZUNvbXBvbmVudFJlZi5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgKm5nSWY9XCIhdHJpZ2dlclwiXG4gICAgY2RrT3ZlcmxheU9yaWdpblxuICAgIGNsYXNzPVwiZmQtcG9wb3Zlcl9fY29udHJvbFwiXG4gICAgW2NsYXNzXT1cImFkZGl0aW9uYWxUcmlnZ2VyQ2xhc3NcIlxuICAgIChrZXlkb3duKT1cInRyaWdnZXJLZXlEb3duSGFuZGxlcigkZXZlbnQpXCJcbj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJmZC1wb3BvdmVyLWNvbnRyb2xcIj48L25nLWNvbnRlbnQ+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVJlZj5cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJmZC1wb3BvdmVyLWJvZHlcIj48L25nLWNvbnRlbnQ+XG5cbiAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuXG48bmctY29udGFpbmVyICNjb250YWluZXI+PC9uZy1jb250YWluZXI+XG4iXX0=
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFlBQVksRUFDWixRQUFRLEVBQ1IsS0FBSyxFQUdMLFFBQVEsRUFDUixTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBcUIsTUFBTSxzQkFBc0IsQ0FBQztBQUUzRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE9BQU8sRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzlFLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRXhGLE9BQU8sS0FBSyxNQUFNLGlCQUFpQixDQUFDO0FBQ3BDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRTdFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxz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QixDQUFDOzswQkE2RjlDLFFBQVE7NENBckZiLEtBQUs7c0JBREosS0FBSztnQkFLRixPQUFPO3NCQURWLEtBQUs7Z0JBa0JOLGFBQWE7c0JBRFosS0FBSztnQkFLTixFQUFFO3NCQURELEtBQUs7Z0JBS04sTUFBTTtzQkFETCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFLTixXQUFXO3NCQURWLFNBQVM7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFLL0MsU0FBUztzQkFEUixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRTtnQkFLbEQsYUFBYTtzQkFEWixTQUFTO3VCQUFDLGdCQUFnQjtnQkFLM0IsV0FBVztzQkFEVixZQUFZO3VCQUFDLG9CQUFvQjtnQkFLbEMsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLG9CQUFvQjtnQkFLbEMsY0FBYztzQkFEYixZQUFZO3VCQUFDLHVCQUF1QjtnQkFLckMsMEJBQTBCO3NCQUR6QixZQUFZO3VCQUFDLG9CQUFvQjtnQkFLbEMsNEJBQTRCO3NCQUQzQixZQUFZO3VCQUFDLHNCQUFzQjtnQkF3RHBDLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkNoYW5nZXMsXG4gICAgT25EZXN0cm95LFxuICAgIE9wdGlvbmFsLFxuICAgIFJlbmRlcmVyMixcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBET1dOX0FSUk9XLCBFTlRFUiwgU1BBQ0UgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQ2RrT3ZlcmxheU9yaWdpbiwgQ29ubmVjdGVkUG9zaXRpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5cbmltcG9ydCB7IE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgRHluYW1pY0NvbXBvbmVudFNlcnZpY2UsIEtleVV0aWwgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2Nkay91dGlscyc7XG5pbXBvcnQgeyBjb250ZW50RGVuc2l0eU9ic2VydmVyUHJvdmlkZXJzIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL2NvbnRlbnQtZGVuc2l0eSc7XG5pbXBvcnQgeyBNb2JpbGVNb2RlQ29uZmlnIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL21vYmlsZS1tb2RlJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwnO1xuaW1wb3J0IHsgQmFzZVBvcG92ZXJDbGFzcyB9IGZyb20gJy4vYmFzZS9iYXNlLXBvcG92ZXIuY2xhc3MnO1xuaW1wb3J0IHsgUG9wb3ZlckJvZHlEaXJlY3RpdmUgfSBmcm9tICcuL3BvcG92ZXItYm9keS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9wb3ZlckJvZHlDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXItYm9keS9wb3BvdmVyLWJvZHkuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJDaGlsZENvbnRlbnQgfSBmcm9tICcuL3BvcG92ZXItY2hpbGQtY29udGVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9wb3ZlckNvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXItY29udHJvbC9wb3BvdmVyLWNvbnRyb2wuY29tcG9uZW50JztcbmltcG9ydCB7IFBvcG92ZXJNb2JpbGVDb21wb25lbnQgfSBmcm9tICcuL3BvcG92ZXItbW9iaWxlL3BvcG92ZXItbW9iaWxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb3BvdmVyTW9iaWxlTW9kdWxlIH0gZnJvbSAnLi9wb3BvdmVyLW1vYmlsZS9wb3BvdmVyLW1vYmlsZS5tb2R1bGUnO1xuaW1wb3J0IHsgUG9wb3ZlclNlcnZpY2UsIFBvcG92ZXJUZW1wbGF0ZSB9IGZyb20gJy4vcG9wb3Zlci1zZXJ2aWNlL3BvcG92ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQT1BPVkVSX0NPTVBPTkVOVCB9IGZyb20gJy4vcG9wb3Zlci5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRkRfUE9QT1ZFUl9DT01QT05FTlQgfSBmcm9tICcuL3Rva2Vucyc7XG5cbmV4cG9ydCBjb25zdCBTRUxFQ1RfQ0xBU1NfTkFNRVMgPSB7XG4gICAgc2VsZWN0Q29udHJvbDogJ2ZkLXNlbGVjdF9fY29udHJvbCdcbn07XG5cbmxldCBjZGtQb3BvdmVyVW5pcXVlSWQgPSAwO1xuXG4vKipcbiAqIFRoZSBwb3BvdmVyIGlzIGEgd3JhcHBpbmcgY29tcG9uZW50IHRoYXQgYWNjZXB0cyBhICpjb250cm9sKiBhcyB3ZWxsIGFzIGEgKmJvZHkqLlxuICogVGhlIGNvbnRyb2wgaXMgd2hhdCB3aWxsIHRyaWdnZXIgdGhlIG9wZW5pbmcgb2YgdGhlIGFjdHVhbCBwb3BvdmVyLCB3aGljaCBpcyBjYWxsZWQgdGhlIGJvZHkuXG4gKiBCeSBkZWZhdWx0LCBwb3BvdmVycyBhcmUgdHJpZ2dlcmVkIGJ5IGNsaWNrLiBUaGlzIGNhbiBiZSBjdXN0b21pemVkIHRocm91Z2ggdGhlICp0cmlnZ2VycyogaW5wdXQuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtcG9wb3ZlcicsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BvcG92ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFBvcG92ZXJTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBGRF9QT1BPVkVSX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBQb3BvdmVyQ29tcG9uZW50XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRlbnREZW5zaXR5T2JzZXJ2ZXJQcm92aWRlcnMoKVxuICAgIF0sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLXBvcG92ZXItY3VzdG9tJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1wb3BvdmVyLWN1c3RvbS0tbW9iaWxlXSc6ICdtb2JpbGUnLFxuICAgICAgICAnW2F0dHIuaWRdJzogJ2lkJ1xuICAgIH0sXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbTmdJZiwgQ2RrT3ZlcmxheU9yaWdpbiwgTmdUZW1wbGF0ZU91dGxldF1cbn0pXG5leHBvcnQgY2xhc3MgUG9wb3ZlckNvbXBvbmVudFxuICAgIGV4dGVuZHMgQmFzZVBvcG92ZXJDbGFzc1xuICAgIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXNcbntcbiAgICAvKiogVG9vbHRpcCBmb3IgcG9wb3ZlciAqL1xuICAgIEBJbnB1dCgpXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIC8qKiBSZWZlcmVuY2UgdG8gcG9wb3ZlciB0cmlnZ2VyIGVsZW1lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0cmlnZ2VyKHRyaWdnZXI6IEVsZW1lbnRSZWYpIHtcbiAgICAgICAgaWYgKGVxdWFsKHRyaWdnZXIsIHRoaXMuX3RyaWdnZXIpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdHJpZ2dlciA9IHRyaWdnZXI7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLnVwZGF0ZVRyaWdnZXJFbGVtZW50KHRoaXMuX3RyaWdnZXIpO1xuICAgIH1cblxuICAgIGdldCB0cmlnZ2VyKCk6IEVsZW1lbnRSZWYge1xuICAgICAgICByZXR1cm4gdGhpcy5fdHJpZ2dlcjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3RyaWdnZXI6IEVsZW1lbnRSZWY7XG5cbiAgICAvKiogV2hldGhlciBwb3NpdGlvbiBzaG91bGRuJ3QgY2hhbmdlLCB3aGVuIHBvcG92ZXIgYXBwcm9hY2ggdGhlIGNvcm5lciBvZiBwYWdlICovXG4gICAgQElucHV0KClcbiAgICBmaXhlZFBvc2l0aW9uID0gZmFsc2U7XG5cbiAgICAvKiogSWQgb2YgdGhlIHBvcG92ZXIuIElmIG5vbmUgaXMgcHJvdmlkZWQsIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmcgPSAnZmQtcG9wb3Zlci0nICsgY2RrUG9wb3ZlclVuaXF1ZUlkKys7XG5cbiAgICAvKiogV2hldGhlciB0aGUgcG9wb3ZlciBjb21wb25lbnQgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBtb2JpbGUgbW9kZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZSA9IGZhbHNlO1xuXG4gICAgLyoqIENvbmZpZyBmb3IgdGhlIHBvcG92ZXIgaW4gbW9iaWxlIG1vZGUgKi9cbiAgICBASW5wdXQoKVxuICAgIG1vYmlsZUNvbmZpZzogTW9iaWxlTW9kZUNvbmZpZyA9IHsgaGFzQ2xvc2VCdXR0b246IHRydWUgfTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gICAgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiB9KVxuICAgIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZChDZGtPdmVybGF5T3JpZ2luKVxuICAgIHRyaWdnZXJPcmlnaW46IENka092ZXJsYXlPcmlnaW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoUG9wb3ZlckJvZHlDb21wb25lbnQpXG4gICAgcG9wb3ZlckJvZHk6IFBvcG92ZXJCb2R5Q29tcG9uZW50O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkKFBvcG92ZXJCb2R5RGlyZWN0aXZlKVxuICAgIHBvcG92ZXJCb2R5RGlyZWN0aXZlOiBQb3BvdmVyQm9keURpcmVjdGl2ZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChQb3BvdmVyQ29udHJvbENvbXBvbmVudClcbiAgICBwb3BvdmVyQ29udHJvbDogUG9wb3ZlckNvbnRyb2xDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAtIHRlbXBsYXRlIGZvciBEaWFsb2cgYm9keSBjb250ZW50ICovXG4gICAgQENvbnRlbnRDaGlsZCgncG9wb3ZlckJvZHlDb250ZW50JylcbiAgICBwb3BvdmVyQm9keUNvbnRlbnRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuIC0gdGVtcGxhdGUgZm9yIERpYWxvZyBmb290ZXIgY29udGVudCAqL1xuICAgIEBDb250ZW50Q2hpbGQoJ3BvcG92ZXJGb290ZXJDb250ZW50JylcbiAgICBwb3BvdmVyRm9vdGVyQ29udGVudFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgLyoqIEBkZXByZWNhdGVkXG4gICAgICogTGVmdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAqL1xuICAgIGRpcmVjdGl2ZVJlZjogYW55O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9jbGlja0V2ZW50TGlzdGVuZXI6IG51bGwgfCAoKCkgPT4gdm9pZCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX21vYmlsZU1vZGVDb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxQb3BvdmVyTW9iaWxlQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX3BvcG92ZXJTZXJ2aWNlOiBQb3BvdmVyU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyZWQ6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHJlYWRvbmx5IF9keW5hbWljQ29tcG9uZW50U2VydmljZTogRHluYW1pY0NvbXBvbmVudFNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0dXBWaWV3KCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXJDb250cm9sICYmIHRoaXMudHJpZ2dlcnMuaW5jbHVkZXMoJ2NsaWNrJykpIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlckNvbnRyb2wuX3RhYmJhYmxlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5yZWZyZXNoQ29uZmlndXJhdGlvbih0aGlzKTtcblxuICAgICAgICBpZiAoY2hhbmdlcy5kaXNhYmxlU2Nyb2xsYmFyICYmIHRoaXMucG9wb3ZlckJvZHkgJiYgdGhpcy5wb3BvdmVyQm9keS5fc2Nyb2xsYmFyKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJCb2R5Ll9zY3JvbGxiYXIuX2luUG9wb3ZlciA9IGNoYW5nZXMuZGlzYWJsZVNjcm9sbGJhci5jdXJyZW50VmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZXN0cm95TW9iaWxlQ29tcG9uZW50KCk7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudExpc3RlbmVycygpO1xuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5vbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgLy8gcG9wb3ZlckNvbnRyb2wgd2lsbCBiZSB1bmRlZmluZWQgd2hlbiBwb3BvdmVyIGlzIHVzZWQgZnJvbSBcImZkUG9wb3ZlclRyaWdnZXJcIlxuICAgICAgICAgICAgdGhpcy5wb3BvdmVyQ29udHJvbD8uZWxSZWYubmF0aXZlRWxlbWVudC5jaGlsZHJlblswXSA9PT0gYWN0aXZlRWxlbWVudCAmJlxuICAgICAgICAgICAgYWN0aXZlRWxlbWVudD8udGFnTmFtZSAhPT0gJ0lOUFVUJyAmJlxuICAgICAgICAgICAgYWN0aXZlRWxlbWVudD8udGFnTmFtZSAhPT0gJ1RFWFRBUkVBJyAmJlxuICAgICAgICAgICAgIWFjdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucyhTRUxFQ1RfQ0xBU1NfTkFNRVMuc2VsZWN0Q29udHJvbClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtTUEFDRSwgRU5URVJdKSkge1xuICAgICAgICAgICAgICAgIC8vIHByZXZlbnQgcGFnZSBzY3JvbGxpbmcgb24gU3BhY2Uga2V5ZG93blxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2UudG9nZ2xlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogVG9nZ2xlcyBtZW51IG9wZW4vY2xvc2Ugc3RhdGUgKi9cbiAgICB0b2dnbGUoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzT3Blbikge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogT3BlbnMgdGhlIHBvcG92ZXIuICovXG4gICAgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2Uub3BlbigpO1xuICAgICAgICB0aGlzLl9jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLyoqIENsb3NlcyB0aGUgcG9wb3Zlci4gKi9cbiAgICBjbG9zZShmb2N1c0FjdGl2ZUVsZW1lbnQgPSB0cnVlKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLmNsb3NlKGZvY3VzQWN0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX2Nkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgY2FsbGVkIHRvIGNoYW5nZSBwb3NpdGlvbiBvZiBwb3BvdmVyLFxuICAgICAqIHJlY29tbWVuZGVkIHRvIGJlIHVzZWQgb25seSB3aGVuIHBvcG92ZXIgaXMgb3BlbmVkLCBvdGhlcndpc2UgY2hhbmdlIHBvc2l0aW9uIG9yIGNka1BsYWNlbWVudFxuICAgICAqL1xuICAgIGFwcGx5TmV3UG9zaXRpb24ocG9zaXRpb25zOiBDb25uZWN0ZWRQb3NpdGlvbltdKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLmFwcGx5TmV3UG9zaXRpb24ocG9zaXRpb25zKTtcbiAgICB9XG5cbiAgICAvKiogQGRlcHJlY2F0ZWRcbiAgICAgKiBMZWZ0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICovXG4gICAgdXBkYXRlUG9wb3ZlcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5yZWZyZXNoUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogTWV0aG9kIGNhbGxlZCB0byByZWZyZXNoIHBvc2l0aW9uIG9mIG9wZW5lZCBwb3BvdmVyICovXG4gICAgcmVmcmVzaFBvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5yZWZyZXNoUG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlciBmb3IgYWx0ICsgYXJyb3cgZG93biBrZXlkb3duICovXG4gICAgdHJpZ2dlcktleURvd25IYW5kbGVyKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgRE9XTl9BUlJPVykgJiYgZXZlbnQuYWx0S2V5ICYmICF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFNlbGVjdCBhbmQgaW5zdGFudGlhdGUgcG9wb3ZlciB2aWV3IG1vZGUgKi9cbiAgICBwcml2YXRlIF9zZXR1cFZpZXcoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5tb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLl9tb2JpbGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BvdmVyQm9keSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3BvcG92ZXJTZXJ2aWNlLnRlbXBsYXRlQ29udGVudCA9IHRoaXMudGVtcGxhdGVSZWY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9wb3BvdmVyU2VydmljZS5pbml0aWFsaXNlKFxuICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlciB8fCB0aGlzLnRyaWdnZXJPcmlnaW4uZWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIHRoaXMuX2dldFBvcG92ZXJCb2R5Q29udGVudCgpXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fc2V0dXBNb2JpbGVNb2RlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERlcGVuZGluZyBvbiBhIHVzZWQgcG9wb3ZlciBib2R5IHR5cGUsIHJldHVybnMgYSBwb3BvdmVyIGJvZHkgY29udGVudFxuICAgICAqKi9cbiAgICBwcml2YXRlIF9nZXRQb3BvdmVyQm9keUNvbnRlbnQoKTogUG9wb3ZlclRlbXBsYXRlIHwgVGVtcGxhdGVSZWY8dm9pZD4gfCBudWxsIHtcbiAgICAgICAgaWYgKHRoaXMucG9wb3ZlckJvZHkpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgdGVtcGxhdGU6IHRoaXMudGVtcGxhdGVSZWYsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcbiAgICAgICAgICAgICAgICBwb3BvdmVyQm9keTogdGhpcy5wb3BvdmVyQm9keVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wb3BvdmVyQm9keURpcmVjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9wb3ZlckJvZHlEaXJlY3RpdmUudGVtcGxhdGVSZWY7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gT3BlbiBQb3BvdmVyIGluIG1vYmlsZSBtb2RlICovXG4gICAgcHJpdmF0ZSBhc3luYyBfc2V0dXBNb2JpbGVNb2RlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IFBPUE9WRVJfQ09NUE9ORU5ULCB1c2VWYWx1ZTogdGhpcyB9XSxcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5faW5qZWN0b3JcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fcG9wb3ZlclNlcnZpY2UuX21vYmlsZSA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5fbW9iaWxlTW9kZUNvbXBvbmVudFJlZiA9IGF3YWl0IHRoaXMuX2R5bmFtaWNDb21wb25lbnRTZXJ2aWNlLmNyZWF0ZUR5bmFtaWNNb2R1bGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcG9wb3ZlckJvZHlDb250ZW50VGVtcGxhdGU6IHRoaXMucG9wb3ZlckJvZHlDb250ZW50VGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgcG9wb3ZlckZvb3RlckNvbnRlbnRUZW1wbGF0ZTogdGhpcy5wb3BvdmVyRm9vdGVyQ29udGVudFRlbXBsYXRlXG4gICAgICAgICAgICB9IGFzIFBvcG92ZXJDaGlsZENvbnRlbnQsXG4gICAgICAgICAgICBQb3BvdmVyTW9iaWxlTW9kdWxlLFxuICAgICAgICAgICAgUG9wb3Zlck1vYmlsZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHRoaXMuX3ZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICBpbmplY3RvclxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uVHJpZ2dlclJlZkNsaWNrcygpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIC0gTGlzdGVuIG9uIHBvcG92ZXIgdHJpZ2dlciByZWYgY2xpY2tzICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25UcmlnZ2VyUmVmQ2xpY2tzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kZXN0cm95RXZlbnRMaXN0ZW5lcnMoKTtcblxuICAgICAgICBpZiAodGhpcy50cmlnZ2VyICYmIHRoaXMubW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGlja0V2ZW50TGlzdGVuZXIgPSB0aGlzLl9yZW5kZXJlZC5saXN0ZW4odGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQsICdjbGljaycsICgpID0+IHRoaXMudG9nZ2xlKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIFRoaXMgaXMgZ29pbmcgdG8gYmUgcmVtb3ZlZCBpbiBmZWF0dXJlLCBvbiBkaWFsb2cgYW5kIGR5bmFtaWMgc2VydmljZSBjb21wb25lbnQgcmVmYWN0b3JcbiAgICAgKi9cbiAgICBwcml2YXRlIF9kZXN0cm95RXZlbnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9jbGlja0V2ZW50TGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuX2NsaWNrRXZlbnRMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5fY2xpY2tFdmVudExpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZGVzdHJveU1vYmlsZUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX21vYmlsZU1vZGVDb21wb25lbnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuX21vYmlsZU1vZGVDb21wb25lbnRSZWYuZGVzdHJveSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdlxuICAgICpuZ0lmPVwiIXRyaWdnZXJcIlxuICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICBjbGFzcz1cImZkLXBvcG92ZXJfX2NvbnRyb2xcIlxuICAgIFtjbGFzc109XCJhZGRpdGlvbmFsVHJpZ2dlckNsYXNzXCJcbiAgICAoa2V5ZG93bik9XCJ0cmlnZ2VyS2V5RG93bkhhbmRsZXIoJGV2ZW50KVwiXG4+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmQtcG9wb3Zlci1jb250cm9sXCI+PC9uZy1jb250ZW50PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+XG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiZmQtcG9wb3Zlci1ib2R5XCI+PC9uZy1jb250ZW50PlxuXG4gICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLWNvbnRhaW5lciAjY29udGFpbmVyPjwvbmctY29udGFpbmVyPlxuIl19
|