@ngneat/helipopper 10.0.0-alpha.0 → 10.0.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/defaults.mjs +6 -6
- package/esm2022/lib/intersection-observer.mjs +3 -2
- package/esm2022/lib/tippy.directive.mjs +58 -53
- package/esm2022/lib/tippy.service.mjs +21 -20
- package/esm2022/lib/tippy.types.mjs +1 -1
- package/esm2022/lib/utils.mjs +3 -2
- package/fesm2022/ngneat-helipopper.mjs +84 -76
- package/fesm2022/ngneat-helipopper.mjs.map +1 -1
- package/lib/defaults.d.ts +2 -2
- package/lib/tippy.directive.d.ts +20 -20
- package/lib/tippy.types.d.ts +3 -17
- package/lib/utils.d.ts +1 -1
- package/package.json +1 -1
package/esm2022/lib/defaults.mjs
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
export const tooltipVariation = {
|
|
2
|
-
theme:
|
|
2
|
+
theme: undefined,
|
|
3
3
|
arrow: false,
|
|
4
4
|
animation: 'scale',
|
|
5
5
|
trigger: 'mouseenter',
|
|
6
|
-
offset: [0, 5]
|
|
6
|
+
offset: [0, 5],
|
|
7
7
|
};
|
|
8
8
|
export const popperVariation = {
|
|
9
9
|
theme: 'light',
|
|
10
10
|
arrow: true,
|
|
11
11
|
offset: [0, 10],
|
|
12
|
-
animation:
|
|
12
|
+
animation: undefined,
|
|
13
13
|
trigger: 'click',
|
|
14
|
-
interactive: true
|
|
14
|
+
interactive: true,
|
|
15
15
|
};
|
|
16
16
|
export function withContextMenuVariation(baseVariation) {
|
|
17
17
|
return {
|
|
@@ -19,7 +19,7 @@ export function withContextMenuVariation(baseVariation) {
|
|
|
19
19
|
placement: 'right-start',
|
|
20
20
|
trigger: 'manual',
|
|
21
21
|
arrow: false,
|
|
22
|
-
offset: [0, 0]
|
|
22
|
+
offset: [0, 0],
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ25lYXQvaGVsaXBvcHBlci9zcmMvbGliL2RlZmF1bHRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFjO0lBQ3pDLEtBQUssRUFBRSxTQUFTO0lBQ2hCLEtBQUssRUFBRSxLQUFLO0lBQ1osU0FBUyxFQUFFLE9BQU87SUFDbEIsT0FBTyxFQUFFLFlBQVk7SUFDckIsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztDQUNmLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxlQUFlLEdBQWM7SUFDeEMsS0FBSyxFQUFFLE9BQU87SUFDZCxLQUFLLEVBQUUsSUFBSTtJQUNYLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7SUFDZixTQUFTLEVBQUUsU0FBUztJQUNwQixPQUFPLEVBQUUsT0FBTztJQUNoQixXQUFXLEVBQUUsSUFBSTtDQUNsQixDQUFDO0FBRUYsTUFBTSxVQUFVLHdCQUF3QixDQUFDLGFBQXdCO0lBQy9ELE9BQU87UUFDTCxHQUFHLGFBQWE7UUFDaEIsU0FBUyxFQUFFLGFBQWE7UUFDeEIsT0FBTyxFQUFFLFFBQVE7UUFDakIsS0FBSyxFQUFFLEtBQUs7UUFDWixNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ2YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFRpcHB5UHJvcHMgfSBmcm9tICcuL3RpcHB5LnR5cGVzJztcblxudHlwZSBWYXJpYXRpb24gPSBQYXJ0aWFsPFRpcHB5UHJvcHM+O1xuXG5leHBvcnQgY29uc3QgdG9vbHRpcFZhcmlhdGlvbjogVmFyaWF0aW9uID0ge1xuICB0aGVtZTogdW5kZWZpbmVkLFxuICBhcnJvdzogZmFsc2UsXG4gIGFuaW1hdGlvbjogJ3NjYWxlJyxcbiAgdHJpZ2dlcjogJ21vdXNlZW50ZXInLFxuICBvZmZzZXQ6IFswLCA1XSxcbn07XG5cbmV4cG9ydCBjb25zdCBwb3BwZXJWYXJpYXRpb246IFZhcmlhdGlvbiA9IHtcbiAgdGhlbWU6ICdsaWdodCcsXG4gIGFycm93OiB0cnVlLFxuICBvZmZzZXQ6IFswLCAxMF0sXG4gIGFuaW1hdGlvbjogdW5kZWZpbmVkLFxuICB0cmlnZ2VyOiAnY2xpY2snLFxuICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB3aXRoQ29udGV4dE1lbnVWYXJpYXRpb24oYmFzZVZhcmlhdGlvbjogVmFyaWF0aW9uKTogVmFyaWF0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlVmFyaWF0aW9uLFxuICAgIHBsYWNlbWVudDogJ3JpZ2h0LXN0YXJ0JyxcbiAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICBhcnJvdzogZmFsc2UsXG4gICAgb2Zmc2V0OiBbMCwgMF0sXG4gIH07XG59XG4iXX0=
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
// we fall back to the native implementation. Accessing the native implementation
|
|
6
6
|
// allows us to remove `runOutsideAngular` calls and reduce indentation,
|
|
7
7
|
// making the code a bit more readable.
|
|
8
|
-
export const IntersectionObserver = globalThis['__zone_symbol__IntersectionObserver'] ||
|
|
9
|
-
|
|
8
|
+
export const IntersectionObserver = globalThis['__zone_symbol__IntersectionObserver'] ||
|
|
9
|
+
globalThis.IntersectionObserver;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJzZWN0aW9uLW9ic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmduZWF0L2hlbGlwb3BwZXIvc3JjL2xpYi9pbnRlcnNlY3Rpb24tb2JzZXJ2ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsNEVBQTRFO0FBQzVFLGdGQUFnRjtBQUNoRixnREFBZ0Q7QUFDaEQsMkZBQTJGO0FBQzNGLGlGQUFpRjtBQUNqRix3RUFBd0U7QUFDeEUsdUNBQXVDO0FBQ3ZDLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUM5QixVQUFrQixDQUFDLHFDQUFxQyxDQUFDO0lBQzFELFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIExldCdzIHJldHJpZXZlIHRoZSBuYXRpdmUgYEludGVyc2VjdGlvbk9ic2VydmVyYCBpbXBsZW1lbnRhdGlvbiBoaWRkZW4gYnlcbi8vIGBfX3pvbmVfc3ltYm9sX19JbnRlcnNlY3Rpb25PYnNlcnZlcmAuIFRoaXMgd291bGQgYmUgdGhlIHVucGF0Y2hlZCB2ZXJzaW9uIG9mXG4vLyB0aGUgb2JzZXJ2ZXIgcHJlc2VudCBpbiB6b25lLmpzIGVudmlyb25tZW50cy5cbi8vIE90aGVyd2lzZSwgaWYgdGhlIHVzZXIgaXMgdXNpbmcgem9uZWxlc3MgY2hhbmdlIGRldGVjdGlvbiAoYW5kIHpvbmUuanMgaXMgbm90IGluY2x1ZGVkKSxcbi8vIHdlIGZhbGwgYmFjayB0byB0aGUgbmF0aXZlIGltcGxlbWVudGF0aW9uLiBBY2Nlc3NpbmcgdGhlIG5hdGl2ZSBpbXBsZW1lbnRhdGlvblxuLy8gYWxsb3dzIHVzIHRvIHJlbW92ZSBgcnVuT3V0c2lkZUFuZ3VsYXJgIGNhbGxzIGFuZCByZWR1Y2UgaW5kZW50YXRpb24sXG4vLyBtYWtpbmcgdGhlIGNvZGUgYSBiaXQgbW9yZSByZWFkYWJsZS5cbmV4cG9ydCBjb25zdCBJbnRlcnNlY3Rpb25PYnNlcnZlcjogdHlwZW9mIGdsb2JhbFRoaXMuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPVxuICAoZ2xvYmFsVGhpcyBhcyBhbnkpWydfX3pvbmVfc3ltYm9sX19JbnRlcnNlY3Rpb25PYnNlcnZlciddIHx8XG4gIGdsb2JhbFRoaXMuSW50ZXJzZWN0aW9uT2JzZXJ2ZXI7XG4iXX0=
|
|
@@ -10,6 +10,21 @@ import { TippyFactory } from './tippy.factory';
|
|
|
10
10
|
import { coerceBooleanAttribute } from './coercion';
|
|
11
11
|
import * as i0 from "@angular/core";
|
|
12
12
|
import * as i1 from "@ngneat/overview";
|
|
13
|
+
// These are the default values used by `tippy.js`.
|
|
14
|
+
// We are providing them as default input values.
|
|
15
|
+
// The `tippy.js` repository has been archived and is unlikely to
|
|
16
|
+
// change in the future, so it is safe to use these values as defaults.
|
|
17
|
+
const defaultAppendTo = () => document.body;
|
|
18
|
+
const defaultDelay = 0;
|
|
19
|
+
const defaultDuration = [300, 250];
|
|
20
|
+
const defaultInteractiveBorder = 2;
|
|
21
|
+
const defaultMaxWidth = 350;
|
|
22
|
+
const defaultOffset = [0, 10];
|
|
23
|
+
const defaultPlacement = 'top';
|
|
24
|
+
const defaultTrigger = 'mouseenter focus';
|
|
25
|
+
const defaultTriggerTarget = null;
|
|
26
|
+
const defaultZIndex = 9999;
|
|
27
|
+
const defaultAnimation = 'fade';
|
|
13
28
|
export class TippyDirective {
|
|
14
29
|
// It should be a getter because computations are cached until
|
|
15
30
|
// any of the producers change.
|
|
@@ -23,41 +38,52 @@ export class TippyDirective {
|
|
|
23
38
|
this.vcr = vcr;
|
|
24
39
|
this.ngZone = ngZone;
|
|
25
40
|
this.hostRef = hostRef;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this.
|
|
41
|
+
this.appendTo = input(defaultAppendTo, {
|
|
42
|
+
alias: 'tpAppendTo',
|
|
43
|
+
});
|
|
44
|
+
this.content = input('', { alias: 'tp' });
|
|
45
|
+
this.delay = input(defaultDelay, {
|
|
46
|
+
alias: 'tpDelay',
|
|
47
|
+
});
|
|
48
|
+
this.duration = input(defaultDuration, {
|
|
49
|
+
alias: 'tpDuration',
|
|
50
|
+
});
|
|
51
|
+
this.hideOnClick = input(true, {
|
|
34
52
|
alias: 'tpHideOnClick',
|
|
35
53
|
});
|
|
36
|
-
this.interactive = input(
|
|
54
|
+
this.interactive = input(false, {
|
|
37
55
|
alias: 'tpInteractive',
|
|
38
56
|
});
|
|
39
|
-
this.interactiveBorder = input(
|
|
57
|
+
this.interactiveBorder = input(defaultInteractiveBorder, {
|
|
40
58
|
alias: 'tpInteractiveBorder',
|
|
41
59
|
});
|
|
42
|
-
this.maxWidth = input(
|
|
60
|
+
this.maxWidth = input(defaultMaxWidth, {
|
|
61
|
+
alias: 'tpMaxWidth',
|
|
62
|
+
});
|
|
43
63
|
// Note that some of the input signal types are declared explicitly because the compiler
|
|
44
64
|
// also uses types from `@popperjs/core` and requires a type annotation.
|
|
45
|
-
this.offset = input(
|
|
46
|
-
|
|
65
|
+
this.offset = input(defaultOffset, {
|
|
66
|
+
alias: 'tpOffset',
|
|
67
|
+
});
|
|
68
|
+
this.placement = input(defaultPlacement, {
|
|
47
69
|
alias: 'tpPlacement',
|
|
48
70
|
});
|
|
49
|
-
this.popperOptions = input(
|
|
71
|
+
this.popperOptions = input({}, {
|
|
50
72
|
alias: 'tpPopperOptions',
|
|
51
73
|
});
|
|
52
|
-
this.showOnCreate = input(
|
|
74
|
+
this.showOnCreate = input(false, {
|
|
53
75
|
alias: 'tpShowOnCreate',
|
|
54
76
|
});
|
|
55
|
-
this.trigger = input(
|
|
56
|
-
|
|
77
|
+
this.trigger = input(defaultTrigger, {
|
|
78
|
+
alias: 'tpTrigger',
|
|
79
|
+
});
|
|
80
|
+
this.triggerTarget = input(defaultTriggerTarget, {
|
|
57
81
|
alias: 'tpTriggerTarget',
|
|
58
82
|
});
|
|
59
|
-
this.zIndex = input(
|
|
60
|
-
|
|
83
|
+
this.zIndex = input(defaultZIndex, {
|
|
84
|
+
alias: 'tpZIndex',
|
|
85
|
+
});
|
|
86
|
+
this.animation = input(defaultAnimation, {
|
|
61
87
|
alias: 'tpAnimation',
|
|
62
88
|
});
|
|
63
89
|
this.useTextContent = input(false, {
|
|
@@ -89,11 +115,15 @@ export class TippyDirective {
|
|
|
89
115
|
alias: 'tpHideOnEscape',
|
|
90
116
|
});
|
|
91
117
|
this.detectChangesComponent = input(true, { alias: 'tpDetectChangesComponent' });
|
|
92
|
-
this.popperWidth = input(undefined, {
|
|
118
|
+
this.popperWidth = input(undefined, {
|
|
119
|
+
alias: 'tpPopperWidth',
|
|
120
|
+
});
|
|
93
121
|
this.customHost = input(undefined, { alias: 'tpHost' });
|
|
94
122
|
this.isVisible = model(false, { alias: 'tpIsVisible' });
|
|
95
123
|
this.visible = new EventEmitter();
|
|
124
|
+
this.viewRef = null;
|
|
96
125
|
this.variationDefined = false;
|
|
126
|
+
this.viewOptions$ = null;
|
|
97
127
|
/**
|
|
98
128
|
* We had use `visible` event emitter previously as a `takeUntil` subscriber in multiple places
|
|
99
129
|
* within the directive.
|
|
@@ -102,6 +132,7 @@ export class TippyDirective {
|
|
|
102
132
|
* in the template (`<button [tippy]="..." (visible)="..."></button>`).
|
|
103
133
|
*/
|
|
104
134
|
this.visibleInternal = new Subject();
|
|
135
|
+
this.visibilityObserverCleanup = null;
|
|
105
136
|
this.contentChanged = new Subject();
|
|
106
137
|
this.host = computed(() => this.customHost() || this.hostRef.nativeElement);
|
|
107
138
|
this.destroyRef = inject(DestroyRef);
|
|
@@ -119,31 +150,12 @@ export class TippyDirective {
|
|
|
119
150
|
ngOnChanges(changes) {
|
|
120
151
|
if (this.isServer)
|
|
121
152
|
return;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
return acc;
|
|
129
|
-
acc[change] = changes[change].currentValue;
|
|
130
|
-
return acc;
|
|
131
|
-
}, {});
|
|
132
|
-
let variation;
|
|
133
|
-
if (isChanged('variation', changes)) {
|
|
134
|
-
variation = changes.variation.currentValue;
|
|
135
|
-
this.variationDefined = true;
|
|
136
|
-
}
|
|
137
|
-
else if (!this.variationDefined) {
|
|
138
|
-
variation = this.globalConfig.defaultVariation;
|
|
139
|
-
this.variationDefined = true;
|
|
140
|
-
}
|
|
141
|
-
if (variation) {
|
|
142
|
-
props = {
|
|
143
|
-
...this.globalConfig.variations[variation],
|
|
144
|
-
...props,
|
|
145
|
-
};
|
|
146
|
-
}
|
|
153
|
+
const variation = this.variation() || this.globalConfig.defaultVariation || '';
|
|
154
|
+
const props = Object.keys(changes)
|
|
155
|
+
// `isVisible` is not required as a prop since we update it manually
|
|
156
|
+
// in an effect-like manner.
|
|
157
|
+
.filter((key) => key !== 'isVisible')
|
|
158
|
+
.reduce((accumulator, key) => ({ ...accumulator, [key]: changes[key].currentValue }), { ...this.globalConfig.variations?.[variation] });
|
|
147
159
|
this.updateProps(props);
|
|
148
160
|
}
|
|
149
161
|
ngOnInit() {
|
|
@@ -438,10 +450,6 @@ export class TippyDirective {
|
|
|
438
450
|
return merge(...notifiers$);
|
|
439
451
|
}
|
|
440
452
|
setupListeners() {
|
|
441
|
-
effect(() => {
|
|
442
|
-
const appendTo = this.appendTo();
|
|
443
|
-
this.updateProps({ appendTo });
|
|
444
|
-
});
|
|
445
453
|
effect(() => {
|
|
446
454
|
// Capture signal read to track its changes.
|
|
447
455
|
this.content();
|
|
@@ -471,7 +479,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
471
479
|
type: Output,
|
|
472
480
|
args: ['tpVisible']
|
|
473
481
|
}] } });
|
|
474
|
-
function isChanged(key, changes) {
|
|
475
|
-
return key in changes;
|
|
476
|
-
}
|
|
477
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmduZWF0L2hlbGlwb3BwZXIvc3JjL2xpYi90aXBweS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFFTixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUVMLEtBQUssRUFJTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBRUwsV0FBVyxFQUNYLFFBQVEsRUFDUixhQUFhLEdBSWQsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGVBQWUsR0FDaEIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUVMLFlBQVksRUFDWixTQUFTLEdBSVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBUXBELE1BQU0sT0FB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LEVBQUUsTUFBTTtvQkFDaEIsUUFBUSxFQUFFLE9BQU87b0JBQ2pCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs7MEJBK0lJLE1BQU07MkJBQUMsWUFBWTt1S0FsQ0QsT0FBTztzQkFBM0IsTUFBTTt1QkFBQyxXQUFXOztBQWtjckIsU0FBUyxTQUFTLENBQ2hCLEdBQW9DLEVBQ3BDLE9BQWtDO0lBRWxDLE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgY29tcHV0ZWQsXG4gIERlc3Ryb3lSZWYsXG4gIERpcmVjdGl2ZSxcbiAgZWZmZWN0LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGluamVjdCxcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgaW5wdXQsXG4gIElucHV0U2lnbmFsLFxuICBtb2RlbCxcbiAgTmdab25lLFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgdW50cmFja2VkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzUGxhdGZvcm1TZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHR5cGUgeyBJbnN0YW5jZSB9IGZyb20gJ3RpcHB5LmpzJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIENvbnRlbnQsXG4gIGlzQ29tcG9uZW50LFxuICBpc1N0cmluZyxcbiAgaXNUZW1wbGF0ZVJlZixcbiAgVmlld09wdGlvbnMsXG4gIFZpZXdSZWYsXG4gIFZpZXdTZXJ2aWNlLFxufSBmcm9tICdAbmduZWF0L292ZXJ2aWV3JztcblxuaW1wb3J0IHtcbiAgY29lcmNlQ3NzUGl4ZWxWYWx1ZSxcbiAgZGltZW5zaW9uc0NoYW5nZXMsXG4gIGluVmlldyxcbiAgaXNFbGVtZW50T3ZlcmZsb3csXG4gIG5vcm1hbGl6ZUNsYXNzTmFtZSxcbiAgb2JzZXJ2ZVZpc2liaWxpdHksXG4gIG9ubHlUaXBweVByb3BzLFxuICBvdmVyZmxvd0NoYW5nZXMsXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHtcbiAgTmdDaGFuZ2VzLFxuICBUSVBQWV9DT05GSUcsXG4gIFRJUFBZX1JFRixcbiAgVGlwcHlDb25maWcsXG4gIFRpcHB5SW5zdGFuY2UsXG4gIFRpcHB5UHJvcHMsXG59IGZyb20gJy4vdGlwcHkudHlwZXMnO1xuaW1wb3J0IHsgVGlwcHlGYWN0b3J5IH0gZnJvbSAnLi90aXBweS5mYWN0b3J5JztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5BdHRyaWJ1dGUgfSBmcm9tICcuL2NvZXJjaW9uJztcblxuQERpcmVjdGl2ZSh7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLXNlbGVjdG9yXG4gIHNlbGVjdG9yOiAnW3RwXScsXG4gIGV4cG9ydEFzOiAndGlwcHknLFxuICBzdGFuZGFsb25lOiB0cnVlLFxufSlcbmV4cG9ydCBjbGFzcyBUaXBweURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25Jbml0IHtcbiAgLy8gTm90ZSB0aGF0IGRlZmF1bHQgdmFsdWVzIGFyZSBub3QgcHJvdmlkZWQgZm9yIHRoZXNlIGJpbmRpbmdzIGJlY2F1c2UgYHRpcHB5LmpzYFxuICAvLyBoYXMgaXRzIG93biBkZWZhdWx0IHZhbHVlcyBhbmQgY2hlY2tzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHByb3BzIGFyZSBgdW5kZWZpbmVkYC5cbiAgLy8gV2Ugc2hvdWxkIGtlZXAgYHVuZGVmaW5lZGAgYXMgdGhlIGRlZmF1bHQgdmFsdWUuXG5cbiAgcmVhZG9ubHkgYXBwZW5kVG8gPSBpbnB1dDxUaXBweVByb3BzWydhcHBlbmRUbyddPih1bmRlZmluZWQsIHsgYWxpYXM6ICd0cEFwcGVuZFRvJyB9KTtcblxuICByZWFkb25seSBjb250ZW50ID0gaW5wdXQ8Q29udGVudCB8IHVuZGVmaW5lZCB8IG51bGw+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RwJyB9KTtcblxuICByZWFkb25seSBkZWxheSA9IGlucHV0PFRpcHB5UHJvcHNbJ2RlbGF5J10+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RwRGVsYXknIH0pO1xuXG4gIHJlYWRvbmx5IGR1cmF0aW9uID0gaW5wdXQ8VGlwcHlQcm9wc1snZHVyYXRpb24nXT4odW5kZWZpbmVkLCB7IGFsaWFzOiAndHBEdXJhdGlvbicgfSk7XG5cbiAgcmVhZG9ubHkgaGlkZU9uQ2xpY2sgPSBpbnB1dDxUaXBweVByb3BzWydoaWRlT25DbGljayddPih1bmRlZmluZWQsIHtcbiAgICBhbGlhczogJ3RwSGlkZU9uQ2xpY2snLFxuICB9KTtcblxuICByZWFkb25seSBpbnRlcmFjdGl2ZSA9IGlucHV0PFRpcHB5UHJvcHNbJ2ludGVyYWN0aXZlJ10+KHVuZGVmaW5lZCwge1xuICAgIGFsaWFzOiAndHBJbnRlcmFjdGl2ZScsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGludGVyYWN0aXZlQm9yZGVyID0gaW5wdXQ8VGlwcHlQcm9wc1snaW50ZXJhY3RpdmVCb3JkZXInXT4odW5kZWZpbmVkLCB7XG4gICAgYWxpYXM6ICd0cEludGVyYWN0aXZlQm9yZGVyJyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWF4V2lkdGggPSBpbnB1dDxUaXBweVByb3BzWydtYXhXaWR0aCddPih1bmRlZmluZWQsIHsgYWxpYXM6ICd0cE1heFdpZHRoJyB9KTtcblxuICAvLyBOb3RlIHRoYXQgc29tZSBvZiB0aGUgaW5wdXQgc2lnbmFsIHR5cGVzIGFyZSBkZWNsYXJlZCBleHBsaWNpdGx5IGJlY2F1c2UgdGhlIGNvbXBpbGVyXG4gIC8vIGFsc28gdXNlcyB0eXBlcyBmcm9tIGBAcG9wcGVyanMvY29yZWAgYW5kIHJlcXVpcmVzIGEgdHlwZSBhbm5vdGF0aW9uLlxuICByZWFkb25seSBvZmZzZXQ6IElucHV0U2lnbmFsPFRpcHB5UHJvcHNbJ29mZnNldCddPiA9IGlucHV0PFRpcHB5UHJvcHNbJ29mZnNldCddPihcbiAgICB1bmRlZmluZWQsXG4gICAgeyBhbGlhczogJ3RwT2Zmc2V0JyB9XG4gICk7XG5cbiAgcmVhZG9ubHkgcGxhY2VtZW50OiBJbnB1dFNpZ25hbDxUaXBweVByb3BzWydwbGFjZW1lbnQnXT4gPSBpbnB1dDxcbiAgICBUaXBweVByb3BzWydwbGFjZW1lbnQnXVxuICA+KHVuZGVmaW5lZCwge1xuICAgIGFsaWFzOiAndHBQbGFjZW1lbnQnLFxuICB9KTtcblxuICByZWFkb25seSBwb3BwZXJPcHRpb25zOiBJbnB1dFNpZ25hbDxUaXBweVByb3BzWydwb3BwZXJPcHRpb25zJ10+ID0gaW5wdXQ8XG4gICAgVGlwcHlQcm9wc1sncG9wcGVyT3B0aW9ucyddXG4gID4odW5kZWZpbmVkLCB7XG4gICAgYWxpYXM6ICd0cFBvcHBlck9wdGlvbnMnLFxuICB9KTtcblxuICByZWFkb25seSBzaG93T25DcmVhdGUgPSBpbnB1dDxUaXBweVByb3BzWydzaG93T25DcmVhdGUnXT4odW5kZWZpbmVkLCB7XG4gICAgYWxpYXM6ICd0cFNob3dPbkNyZWF0ZScsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRyaWdnZXIgPSBpbnB1dDxUaXBweVByb3BzWyd0cmlnZ2VyJ10+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RwVHJpZ2dlcicgfSk7XG5cbiAgcmVhZG9ubHkgdHJpZ2dlclRhcmdldCA9IGlucHV0PFRpcHB5UHJvcHNbJ3RyaWdnZXJUYXJnZXQnXT4odW5kZWZpbmVkLCB7XG4gICAgYWxpYXM6ICd0cFRyaWdnZXJUYXJnZXQnLFxuICB9KTtcblxuICByZWFkb25seSB6SW5kZXggPSBpbnB1dDxUaXBweVByb3BzWyd6SW5kZXgnXT4odW5kZWZpbmVkLCB7IGFsaWFzOiAndHBaSW5kZXgnIH0pO1xuXG4gIHJlYWRvbmx5IGFuaW1hdGlvbiA9IGlucHV0PFRpcHB5UHJvcHNbJ2FuaW1hdGlvbiddPih1bmRlZmluZWQsIHtcbiAgICBhbGlhczogJ3RwQW5pbWF0aW9uJyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdXNlVGV4dENvbnRlbnQgPSBpbnB1dChmYWxzZSwge1xuICAgIHRyYW5zZm9ybTogY29lcmNlQm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBhbGlhczogJ3RwVXNlVGV4dENvbnRlbnQnLFxuICB9KTtcblxuICByZWFkb25seSBpc0xhenkgPSBpbnB1dChmYWxzZSwge1xuICAgIHRyYW5zZm9ybTogY29lcmNlQm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBhbGlhczogJ3RwSXNMYXp5JyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdmFyaWF0aW9uID0gaW5wdXQ8c3RyaW5nPih1bmRlZmluZWQsIHsgYWxpYXM6ICd0cFZhcmlhdGlvbicgfSk7XG5cbiAgcmVhZG9ubHkgaXNFbmFibGVkID0gaW5wdXQodHJ1ZSwgeyBhbGlhczogJ3RwSXNFbmFibGVkJyB9KTtcblxuICByZWFkb25seSBjbGFzc05hbWUgPSBpbnB1dDxzdHJpbmcgfCBzdHJpbmdbXT4oJycsIHsgYWxpYXM6ICd0cENsYXNzTmFtZScgfSk7XG5cbiAgcmVhZG9ubHkgb25seVRleHRPdmVyZmxvdyA9IGlucHV0KGZhbHNlLCB7XG4gICAgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuQXR0cmlidXRlLFxuICAgIGFsaWFzOiAndHBPbmx5VGV4dE92ZXJmbG93JyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc3RhdGljV2lkdGhIb3N0ID0gaW5wdXQoZmFsc2UsIHtcbiAgICB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgYWxpYXM6ICd0cFN0YXRpY1dpZHRoSG9zdCcsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGRhdGEgPSBpbnB1dDxhbnk+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RwRGF0YScgfSk7XG5cbiAgcmVhZG9ubHkgdXNlSG9zdFdpZHRoID0gaW5wdXQoZmFsc2UsIHtcbiAgICB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgYWxpYXM6ICd0cFVzZUhvc3RXaWR0aCcsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhpZGVPbkVzY2FwZSA9IGlucHV0KGZhbHNlLCB7XG4gICAgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuQXR0cmlidXRlLFxuICAgIGFsaWFzOiAndHBIaWRlT25Fc2NhcGUnLFxuICB9KTtcblxuICByZWFkb25seSBkZXRlY3RDaGFuZ2VzQ29tcG9uZW50ID0gaW5wdXQodHJ1ZSwgeyBhbGlhczogJ3RwRGV0ZWN0Q2hhbmdlc0NvbXBvbmVudCcgfSk7XG5cbiAgcmVhZG9ubHkgcG9wcGVyV2lkdGggPSBpbnB1dDxudW1iZXIgfCBzdHJpbmc+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RwUG9wcGVyV2lkdGgnIH0pO1xuXG4gIHJlYWRvbmx5IGN1c3RvbUhvc3QgPSBpbnB1dDxIVE1MRWxlbWVudD4odW5kZWZpbmVkLCB7IGFsaWFzOiAndHBIb3N0JyB9KTtcblxuICByZWFkb25seSBpc1Zpc2libGUgPSBtb2RlbChmYWxzZSwgeyBhbGlhczogJ3RwSXNWaXNpYmxlJyB9KTtcblxuICBAT3V0cHV0KCd0cFZpc2libGUnKSB2aXNpYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHByb3RlY3RlZCBpbnN0YW5jZTogVGlwcHlJbnN0YW5jZTtcbiAgcHJvdGVjdGVkIHZpZXdSZWY6IFZpZXdSZWY7XG4gIHByb3RlY3RlZCBwcm9wczogUGFydGlhbDxUaXBweUNvbmZpZz47XG4gIHByb3RlY3RlZCB2YXJpYXRpb25EZWZpbmVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCB2aWV3T3B0aW9ucyQ6IFZpZXdPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXZSBoYWQgdXNlIGB2aXNpYmxlYCBldmVudCBlbWl0dGVyIHByZXZpb3VzbHkgYXMgYSBgdGFrZVVudGlsYCBzdWJzY3JpYmVyIGluIG11bHRpcGxlIHBsYWNlc1xuICAgKiB3aXRoaW4gdGhlIGRpcmVjdGl2ZS5cbiAgICogVGhpcyBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHk7IHRodXMgd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGggdGhlIGB2aXNpYmxlYCBldmVudCBlbWl0dGVyXG4gICAqIGFuZCB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25zIG9ubHkgd2hlbiB0aGUgYHZpc2libGVgIGV2ZW50IGlzIGJlaW5nIGxpc3RlbmVkIG91dHNpZGVcbiAgICogaW4gdGhlIHRlbXBsYXRlIChgPGJ1dHRvbiBbdGlwcHldPVwiLi4uXCIgKHZpc2libGUpPVwiLi4uXCI+PC9idXR0b24+YCkuXG4gICAqL1xuICBwcm90ZWN0ZWQgdmlzaWJsZUludGVybmFsID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSB2aXNpYmlsaXR5T2JzZXJ2ZXJDbGVhbnVwOiAoKSA9PiB2b2lkIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGNvbnRlbnRDaGFuZ2VkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIGhvc3QgPSBjb21wdXRlZDxIVE1MRWxlbWVudD4oXG4gICAgKCkgPT4gdGhpcy5jdXN0b21Ib3N0KCkgfHwgdGhpcy5ob3N0UmVmLm5hdGl2ZUVsZW1lbnRcbiAgKTtcblxuICAvLyBJdCBzaG91bGQgYmUgYSBnZXR0ZXIgYmVjYXVzZSBjb21wdXRhdGlvbnMgYXJlIGNhY2hlZCB1bnRpbFxuICAvLyBhbnkgb2YgdGhlIHByb2R1Y2VycyBjaGFuZ2UuXG4gIHByaXZhdGUgZ2V0IGhvc3RXaWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5ob3N0KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gIHByaXZhdGUgaXNTZXJ2ZXIgPSBpc1BsYXRmb3JtU2VydmVyKGluamVjdChQTEFURk9STV9JRCkpO1xuICBwcml2YXRlIHRpcHB5RmFjdG9yeSA9IGluamVjdChUaXBweUZhY3RvcnkpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVElQUFlfQ09ORklHKSBwcm90ZWN0ZWQgZ2xvYmFsQ29uZmlnOiBUaXBweUNvbmZpZyxcbiAgICBwcm90ZWN0ZWQgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByb3RlY3RlZCB2aWV3U2VydmljZTogVmlld1NlcnZpY2UsXG4gICAgcHJvdGVjdGVkIHZjcjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcm90ZWN0ZWQgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJvdGVjdGVkIGhvc3RSZWY6IEVsZW1lbnRSZWZcbiAgKSB7XG4gICAgaWYgKHRoaXMuaXNTZXJ2ZXIpIHJldHVybjtcblxuICAgIHRoaXMuc2V0dXBMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgdGhpcy5pbnN0YW5jZT8uZGVzdHJveSgpO1xuICAgICAgdGhpcy5kZXN0cm95VmlldygpO1xuICAgICAgdGhpcy52aXNpYmlsaXR5T2JzZXJ2ZXJDbGVhbnVwPy4oKTtcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IE5nQ2hhbmdlczxUaXBweURpcmVjdGl2ZT4pIHtcbiAgICBpZiAodGhpcy5pc1NlcnZlcikgcmV0dXJuO1xuXG4gICAgLy8gVE9ETzogd2UgY2FuIHVwZGF0ZSBpdCBsYXRlci5cbiAgICAvLyBXZSBuZWVkIHRvIGdvIG92ZXIgY2xhc3MgcHJvcGVydGllcywgY2hlY2sgd2hldGhlciBpdCdzIGEgc2lnbmFsIChgaXNTaWduYWwocHJvcClgKVxuICAgIC8vIGFuZCBjb25zdHJ1Y3QgYSByZWNvcmQgd2hlcmUgYFJlY29yZDxzdHJpbmcsIFNpZ25hbD5gLlxuICAgIC8vIEZvbGxvdy11cCBjaGFuZ2VzIHdvdWxkIGJlIHRvIGhhdmUgYSBjb21wdXRhdGlvbiBhbmQgYW4gZWZmZWN0LlxuICAgIGxldCBwcm9wczogUGFydGlhbDxUaXBweUNvbmZpZz4gPSBPYmplY3Qua2V5cyhjaGFuZ2VzKS5yZWR1Y2UoKGFjYywgY2hhbmdlKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlID09PSAnaXNWaXNpYmxlJykgcmV0dXJuIGFjYztcblxuICAgICAgYWNjW2NoYW5nZV0gPSBjaGFuZ2VzW2NoYW5nZV0uY3VycmVudFZhbHVlO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGxldCB2YXJpYXRpb246IHN0cmluZztcblxuICAgIGlmIChpc0NoYW5nZWQoJ3ZhcmlhdGlvbicsIGNoYW5nZXMpKSB7XG4gICAgICB2YXJpYXRpb24gPSBjaGFuZ2VzLnZhcmlhdGlvbi5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnZhcmlhdGlvbkRlZmluZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFyaWF0aW9uRGVmaW5lZCkge1xuICAgICAgdmFyaWF0aW9uID0gdGhpcy5nbG9iYWxDb25maWcuZGVmYXVsdFZhcmlhdGlvbjtcbiAgICAgIHRoaXMudmFyaWF0aW9uRGVmaW5lZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhdGlvbikge1xuICAgICAgcHJvcHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZ2xvYmFsQ29uZmlnLnZhcmlhdGlvbnNbdmFyaWF0aW9uXSxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlUHJvcHMocHJvcHMpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMudXNlSG9zdFdpZHRoKCkpIHtcbiAgICAgIHRoaXMucHJvcHMubWF4V2lkdGggPSB0aGlzLmhvc3RXaWR0aDtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaXNTZXJ2ZXIpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmlzTGF6eSgpKSB7XG4gICAgICBjb25zdCBob3N0SW5WaWV3JCA9IGluVmlldyh0aGlzLmhvc3QoKSk7XG5cbiAgICAgIGlmICh0aGlzLm9ubHlUZXh0T3ZlcmZsb3coKSkge1xuICAgICAgICBob3N0SW5WaWV3JFxuICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuaXNPdmVyZmxvd2luZyQoKSksXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgIClcbiAgICAgICAgICAuc3Vic2NyaWJlKChpc0VsZW1lbnRPdmVyZmxvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5jaGVja092ZXJmbG93KGlzRWxlbWVudE92ZXJmbG93KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhvc3RJblZpZXckLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5jcmVhdGVJbnN0YW5jZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub25seVRleHRPdmVyZmxvdygpKSB7XG4gICAgICB0aGlzLmlzT3ZlcmZsb3dpbmckKClcbiAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgIC5zdWJzY3JpYmUoKGlzRWxlbWVudE92ZXJmbG93KSA9PiB7XG4gICAgICAgICAgdGhpcy5jaGVja092ZXJmbG93KGlzRWxlbWVudE92ZXJmbG93KTtcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlSW5zdGFuY2UoKTtcbiAgICB9XG4gIH1cblxuICBkZXN0cm95VmlldygpIHtcbiAgICB0aGlzLnZpZXdPcHRpb25zJCA9IG51bGw7XG4gICAgdGhpcy52aWV3UmVmPy5kZXN0cm95KCk7XG4gICAgdGhpcy52aWV3UmVmID0gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBpcyB1c2VmdWwgd2hlbiB5b3UgYXBwZW5kIHRvIGFuIGVsZW1lbnQgdGhhdCB5b3UgbWlnaHQgcmVtb3ZlIGZyb20gdGhlIERPTS5cbiAgICogSW4gc3VjaCBjYXNlcyB3ZSB3YW50IHRvIGhpZGUgdGhlIHRvb2x0aXAgYW5kIGxldCBpdCBnbyB0aHJvdWdoIHRoZSBkZXN0cm95IGxpZmVjeWNsZS5cbiAgICogRm9yIGV4YW1wbGUsIGlmIHlvdSBoYXZlIGEgZ3JpZCByb3cgd2l0aCBhbiBlbGVtZW50IHRoYXQgeW91IHRvZ2dsZSB1c2luZyB0aGUgZGlzcGxheSBDU1MgcHJvcGVydHkgb24gaG92ZXIuXG4gICAqL1xuICBvYnNlcnZlSG9zdFZpc2liaWxpdHkoKSB7XG4gICAgaWYgKHRoaXMuaXNTZXJ2ZXIpIHJldHVybjtcbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIG9ic2VydmUgdGhlIGhvc3QgdmlzaWJpbGl0eSBpZiB3ZSBhcmUgYXBwZW5kaW5nIHRvIHRoZSBib2R5LlxuICAgIGlmICh0aGlzLnByb3BzLmFwcGVuZFRvICYmIHRoaXMucHJvcHMuYXBwZW5kVG8gIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHRoaXMudmlzaWJpbGl0eU9ic2VydmVyQ2xlYW51cD8uKCk7XG4gICAgICByZXR1cm4gdGhpcy52aXNpYmxlSW50ZXJuYWxcbiAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgIC5zdWJzY3JpYmUoKGlzVmlzaWJsZSkgPT4ge1xuICAgICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eU9ic2VydmVyQ2xlYW51cCA9IG9ic2VydmVWaXNpYmlsaXR5KFxuICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlLnJlZmVyZW5jZSxcbiAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2UgaGF2ZSBhbmltYXRpb24gb24gdGhlIHBvcHBlciBpdCBkb2Vzbid0IGNsb3NlIGltbWVkaWF0ZWx5IGRvZXNuJ3QgdHJpZ2dlciB0aGUgYHRwVmlzaWJsZWAgZXZlbnQuXG4gICAgICAgICAgICAgICAgLy8gVGlwcHkgaXMgcmVseWluZyBvbiB0aGUgdHJhbnNpdGlvbmVuZCBldmVudCB0byB0cmlnZ2VyIHRoZSBgb25IaWRkZW5gIGNhbGxiYWNrLlxuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hdG9taWtzL3RpcHB5anMvYmxvYi9tYXN0ZXIvc3JjL2RvbS11dGlscy50cyNMMTE3XG4gICAgICAgICAgICAgICAgLy8gVGhpcyBldmVudCBuZXZlciBmaXJlcyBiZWNhdXNlIHRoZSBwb3BwZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBET00gYmVmb3JlIHRoZSB0cmFuc2l0aW9uIGVuZHMuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMuYW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLm9uSGlkZGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlPYnNlcnZlckNsZWFudXA/LigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICB0aGlzLmluc3RhbmNlPy5zaG93KCk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMuaW5zdGFuY2U/LmhpZGUoKTtcbiAgfVxuXG4gIGVuYWJsZSgpIHtcbiAgICB0aGlzLmluc3RhbmNlPy5lbmFibGUoKTtcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5pbnN0YW5jZT8uZGlzYWJsZSgpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVByb3BzKHByb3BzOiBQYXJ0aWFsPFRpcHB5Q29uZmlnPikge1xuICAgIHRoaXMuc2V0UHJvcHMoeyAuLi50aGlzLnByb3BzLCAuLi5wcm9wcyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRQcm9wcyhwcm9wczogUGFydGlhbDxUaXBweUNvbmZpZz4pIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5pbnN0YW5jZT8uc2V0UHJvcHMob25seVRpcHB5UHJvcHMocHJvcHMpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBzZXRTdGF0dXMoaXNFbmFibGVkOiBib29sZWFuKSB7XG4gICAgaXNFbmFibGVkID8gdGhpcy5pbnN0YW5jZT8uZW5hYmxlKCkgOiB0aGlzLmluc3RhbmNlPy5kaXNhYmxlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY3JlYXRlSW5zdGFuY2UoKSB7XG4gICAgaWYgKCF0aGlzLmNvbnRlbnQoKSAmJiAhdGhpcy51c2VUZXh0Q29udGVudCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50aXBweUZhY3RvcnlcbiAgICAgIC5jcmVhdGUodGhpcy5ob3N0KCksIHtcbiAgICAgICAgYWxsb3dIVE1MOiB0cnVlLFxuICAgICAgICBhcHBlbmRUbzogZG9jdW1lbnQuYm9keSxcbiAgICAgICAgLi4uKHRoaXMuZ2xvYmFsQ29uZmlnLnpJbmRleEdldHRlclxuICAgICAgICAgID8geyB6SW5kZXg6IHRoaXMuZ2xvYmFsQ29uZmlnLnpJbmRleEdldHRlcigpIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4ub25seVRpcHB5UHJvcHModGhpcy5nbG9iYWxDb25maWcpLFxuICAgICAgICAuLi5vbmx5VGlwcHlQcm9wcyh0aGlzLnByb3BzKSxcbiAgICAgICAgb25Nb3VudDogKGluc3RhbmNlKSA9PiB7XG4gICAgICAgICAgY29uc3QgaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzVmlzaWJsZS5zZXQoaXNWaXNpYmxlKTtcbiAgICAgICAgICB0aGlzLnZpc2libGVJbnRlcm5hbC5uZXh0KGlzVmlzaWJsZSk7XG4gICAgICAgICAgaWYgKHRoaXMudmlzaWJsZS5vYnNlcnZlZCkge1xuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMudmlzaWJsZS5uZXh0KGlzVmlzaWJsZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVzZUhvc3RXaWR0aCgpICYmIHRoaXMubGlzdGVuVG9Ib3N0UmVzaXplKCk7XG4gICAgICAgICAgdGhpcy5nbG9iYWxDb25maWcub25Nb3VudD8uKGluc3RhbmNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25DcmVhdGU6IChpbnN0YW5jZSkgPT4ge1xuICAgICAgICAgIGluc3RhbmNlLnBvcHBlci5jbGFzc0xpc3QuYWRkKFxuICAgICAgICAgICAgYHRpcHB5LXZhcmlhdGlvbi0ke3RoaXMudmFyaWF0aW9uKCkgfHwgdGhpcy5nbG9iYWxDb25maWcuZGVmYXVsdFZhcmlhdGlvbn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUoKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBub3JtYWxpemVDbGFzc05hbWUodGhpcy5jbGFzc05hbWUoKSkpIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2UucG9wcGVyLmNsYXNzTGlzdC5hZGQoa2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmdsb2JhbENvbmZpZy5vbkNyZWF0ZT8uKGluc3RhbmNlKTtcbiAgICAgICAgICBpZiAodGhpcy5pc1Zpc2libGUoKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaW5zdGFuY2Uuc2hvdygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25TaG93OiAoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICBpbnN0YW5jZS5yZWZlcmVuY2Uuc2V0QXR0cmlidXRlKCdkYXRhLXRpcHB5LW9wZW4nLCAnJyk7XG5cbiAgICAgICAgICAvLyBXZSdyZSByZS1lbnRlcmluZyBiZWNhdXNlIHdlIG1pZ2h0IGNyZWF0ZSBhbiBBbmd1bGFyIGNvbXBvbmVudCxcbiAgICAgICAgICAvLyB3aGljaCBzaG91bGQgYmUgZG9uZSB3aXRoaW4gdGhlIHpvbmUuXG4gICAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnJlc29sdmVDb250ZW50KGluc3RhbmNlKSk7XG5cbiAgICAgICAgICBpZiAoaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLnNldFByb3BzKHsgYWxsb3dIVE1MOiBmYWxzZSB9KTtcblxuICAgICAgICAgICAgaWYgKCFjb250ZW50Py50cmltKCkpIHtcbiAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLmVuYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGluc3RhbmNlLnNldENvbnRlbnQoY29udGVudCk7XG4gICAgICAgICAgdGhpcy5oaWRlT25Fc2NhcGUoKSAmJiB0aGlzLmhhbmRsZUVzY2FwZUJ1dHRvbigpO1xuXG4gICAgICAgICAgaWYgKHRoaXMudXNlSG9zdFdpZHRoKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5zdGFuY2VXaWR0aChpbnN0YW5jZSwgdGhpcy5ob3N0V2lkdGgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3BwZXJXaWR0aCgpKSB7XG4gICAgICAgICAgICB0aGlzLnNldEluc3RhbmNlV2lkdGgoaW5zdGFuY2UsIHRoaXMucG9wcGVyV2lkdGgoKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLm9uU2hvdz8uKGluc3RhbmNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25IaWRlKGluc3RhbmNlKSB7XG4gICAgICAgICAgaW5zdGFuY2UucmVmZXJlbmNlLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10aXBweS1vcGVuJyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSGlkZGVuOiAoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICB0aGlzLm9uSGlkZGVuKGluc3RhbmNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKGluc3RhbmNlKSA9PiB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgICAgICB0aGlzLnNldFN0YXR1cyh0aGlzLmlzRW5hYmxlZCgpKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wcyh0aGlzLnByb3BzKTtcblxuICAgICAgICB0aGlzLnZhcmlhdGlvbigpID09PSAnY29udGV4dE1lbnUnICYmIHRoaXMuaGFuZGxlQ29udGV4dE1lbnUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVDb250ZW50KGluc3RhbmNlOiBUaXBweUluc3RhbmNlKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudCgpO1xuXG4gICAgaWYgKCF0aGlzLnZpZXdPcHRpb25zJCAmJiAhaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVElQUFlfUkVGLFxuICAgICAgICAgICAgdXNlVmFsdWU6IHRoaXMuaW5zdGFuY2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEoKTtcblxuICAgICAgaWYgKGlzQ29tcG9uZW50KGNvbnRlbnQpKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZGF0YSA9IGRhdGE7XG5cbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyQgPSB7XG4gICAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGlzVGVtcGxhdGVSZWYoY29udGVudCkpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyQgPSB7XG4gICAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICRpbXBsaWNpdDogdGhpcy5oaWRlLmJpbmQodGhpcyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZpZXdSZWYgPSB0aGlzLnZpZXdTZXJ2aWNlLmNyZWF0ZVZpZXcoY29udGVudCwge1xuICAgICAgdmNyOiB0aGlzLnZjcixcbiAgICAgIC4uLnRoaXMudmlld09wdGlvbnMkLFxuICAgIH0pO1xuXG4gICAgLy8gV2UgbmVlZCB0byBjYWxsIGRldGVjdENoYW5nZXMgZm9yIG9uUHVzaCBjb21wb25lbnRzIHRvIHVwZGF0ZSB0aGUgY29udGVudFxuICAgIGlmICh0aGlzLmRldGVjdENoYW5nZXNDb21wb25lbnQoKSAmJiBpc0NvbXBvbmVudChjb250ZW50KSkge1xuICAgICAgdGhpcy52aWV3UmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBsZXQgbmV3Q29udGVudCA9IHRoaXMudmlld1JlZi5nZXRFbGVtZW50KCk7XG5cbiAgICBpZiAodGhpcy51c2VUZXh0Q29udGVudCgpKSB7XG4gICAgICBuZXdDb250ZW50ID0gaW5zdGFuY2UucmVmZXJlbmNlLnRleHRDb250ZW50O1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhuZXdDb250ZW50KSAmJiB0aGlzLmdsb2JhbENvbmZpZy5iZWZvcmVSZW5kZXIpIHtcbiAgICAgIG5ld0NvbnRlbnQgPSB0aGlzLmdsb2JhbENvbmZpZy5iZWZvcmVSZW5kZXIobmV3Q29udGVudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ld0NvbnRlbnQ7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlQ29udGV4dE1lbnUoKSB7XG4gICAgZnJvbUV2ZW50KHRoaXMuaG9zdCgpLCAnY29udGV4dG1lbnUnKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2Uuc2V0UHJvcHMoe1xuICAgICAgICAgIGdldFJlZmVyZW5jZUNsaWVudFJlY3Q6ICgpID0+XG4gICAgICAgICAgICAoe1xuICAgICAgICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICB0b3A6IGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICAgIGJvdHRvbTogZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgbGVmdDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICAgICAgcmlnaHQ6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICB9IGFzIERPTVJlY3RSZWFkT25seSksXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuaW5zdGFuY2Uuc2hvdygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFuZGxlRXNjYXBlQnV0dG9uKCk6IHZvaWQge1xuICAgIGZyb21FdmVudChkb2N1bWVudC5ib2R5LCAna2V5ZG93bicpXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKCh7IGNvZGUgfTogS2V5Ym9hcmRFdmVudCkgPT4gY29kZSA9PT0gJ0VzY2FwZScpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy52aXNpYmxlSW50ZXJuYWwucGlwZShmaWx0ZXIoKHYpID0+ICF2KSkpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLmhpZGUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgY2hlY2tPdmVyZmxvdyhpc0VsZW1lbnRPdmVyZmxvdzogYm9vbGVhbikge1xuICAgIGlmIChpc0VsZW1lbnRPdmVyZmxvdykge1xuICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlSW5zdGFuY2UoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZW5hYmxlKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5zdGFuY2U/LmRpc2FibGUoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgbGlzdGVuVG9Ib3N0UmVzaXplKCkge1xuICAgIGRpbWVuc2lvbnNDaGFuZ2VzKHRoaXMuaG9zdCgpKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMudmlzaWJsZUludGVybmFsKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRJbnN0YW5jZVdpZHRoKHRoaXMuaW5zdGFuY2UsIHRoaXMuaG9zdFdpZHRoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEluc3RhbmNlV2lkdGgoaW5zdGFuY2U6IEluc3RhbmNlLCB3aWR0aDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgY29uc3QgaW5QaXhlbHMgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHdpZHRoKTtcbiAgICBpbnN0YW5jZS5wb3BwZXIuc3R5bGUud2lkdGggPSBpblBpeGVscztcbiAgICBpbnN0YW5jZS5wb3BwZXIuc3R5bGUubWF4V2lkdGggPSBpblBpeGVscztcbiAgICAoaW5zdGFuY2UucG9wcGVyLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5tYXhXaWR0aCA9IGluUGl4ZWxzO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkhpZGRlbihpbnN0YW5jZTogVGlwcHlJbnN0YW5jZSA9IHRoaXMuaW5zdGFuY2UpIHtcbiAgICB0aGlzLmRlc3Ryb3lWaWV3KCk7XG4gICAgY29uc3QgaXNWaXNpYmxlID0gZmFsc2U7XG4gICAgdGhpcy5pc1Zpc2libGUuc2V0KGlzVmlzaWJsZSk7XG4gICAgdGhpcy52aXNpYmxlSW50ZXJuYWwubmV4dChpc1Zpc2libGUpO1xuICAgIGlmICh0aGlzLnZpc2libGUub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB0aGlzLnZpc2libGUubmV4dChpc1Zpc2libGUpKTtcbiAgICB9XG4gICAgdGhpcy5nbG9iYWxDb25maWcub25IaWRkZW4/LihpbnN0YW5jZSk7XG4gIH1cblxuICBwcml2YXRlIGlzT3ZlcmZsb3dpbmckKCkge1xuICAgIGNvbnN0IGhvc3QgPSB0aGlzLmhvc3QoKTtcbiAgICBjb25zdCBub3RpZmllcnMkID0gW292ZXJmbG93Q2hhbmdlcyhob3N0KV07XG5cbiAgICAvLyBXZSBuZWVkIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgaG9zdCBoYXMgYSBzdGF0aWMgd2lkdGggYnV0IHRoZSBjb250ZW50IG1pZ2h0IGNoYW5nZVxuICAgIGlmICh0aGlzLnN0YXRpY1dpZHRoSG9zdCgpKSB7XG4gICAgICBub3RpZmllcnMkLnB1c2goXG4gICAgICAgIHRoaXMuY29udGVudENoYW5nZWQucGlwZShcbiAgICAgICAgICAvLyBXZSBuZWVkIHRvIHdhaXQgZm9yIHRoZSBjb250ZW50IHRvIGJlIHJlbmRlcmVkIGJlZm9yZSB3ZSBjYW4gY2hlY2sgaWYgaXQncyBvdmVyZmxvd2luZy5cbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGlkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KCk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICByZXR1cm4gKCkgPT4gY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSksXG4gICAgICAgICAgbWFwKCgpID0+IGlzRWxlbWVudE92ZXJmbG93KGhvc3QpKVxuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZSguLi5ub3RpZmllcnMkKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGFwcGVuZFRvID0gdGhpcy5hcHBlbmRUbygpO1xuICAgICAgdGhpcy51cGRhdGVQcm9wcyh7IGFwcGVuZFRvIH0pO1xuICAgIH0pO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIC8vIENhcHR1cmUgc2lnbmFsIHJlYWQgdG8gdHJhY2sgaXRzIGNoYW5nZXMuXG4gICAgICB0aGlzLmNvbnRlbnQoKTtcbiAgICAgIHVudHJhY2tlZCgoKSA9PiB0aGlzLmNvbnRlbnRDaGFuZ2VkLm5leHQoKSk7XG4gICAgfSk7XG5cbiAgICBlZmZlY3QoKCkgPT4gdGhpcy5zZXRTdGF0dXModGhpcy5pc0VuYWJsZWQoKSkpO1xuXG4gICAgZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGlzVmlzaWJsZSA9IHRoaXMuaXNWaXNpYmxlKCk7XG4gICAgICBpc1Zpc2libGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzQ2hhbmdlZChcbiAga2V5OiBrZXlvZiBOZ0NoYW5nZXM8VGlwcHlEaXJlY3RpdmU+LFxuICBjaGFuZ2VzOiBOZ0NoYW5nZXM8VGlwcHlEaXJlY3RpdmU+XG4pIHtcbiAgcmV0dXJuIGtleSBpbiBjaGFuZ2VzO1xufVxuIl19
|
|
482
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmduZWF0L2hlbGlwb3BwZXIvc3JjL2xpYi90aXBweS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFFBQVEsRUFDUixVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFFTixZQUFZLEVBQ1osTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsS0FBSyxFQUVMLEtBQUssRUFJTCxNQUFNLEVBQ04sV0FBVyxFQUVYLFNBQVMsR0FFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRSxPQUFPLEVBRUwsV0FBVyxFQUNYLFFBQVEsRUFDUixhQUFhLEdBSWQsTUFBTSxrQkFBa0IsQ0FBQztBQUUxQixPQUFPLEVBQ0wsbUJBQW1CLEVBQ25CLGlCQUFpQixFQUNqQixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGVBQWUsR0FDaEIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUNMLFlBQVksRUFDWixTQUFTLEdBSVYsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLFlBQVksQ0FBQzs7O0FBRXBELG1EQUFtRDtB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YyxrQkFzSmYsWUFBWTtrR0F0SlgsY0FBYzs7MkZBQWQsY0FBYztrQkFOMUIsU0FBUzttQkFBQztvQkFDVCw4REFBOEQ7b0JBQzlELFFBQVEsRUFBRSxNQUFNO29CQUNoQixRQUFRLEVBQUUsT0FBTztvQkFDakIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkF1SkksTUFBTTsyQkFBQyxZQUFZO3VLQWxDRCxPQUFPO3NCQUEzQixNQUFNO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBjb21wdXRlZCxcbiAgRGVzdHJveVJlZixcbiAgRGlyZWN0aXZlLFxuICBlZmZlY3QsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgaW5qZWN0LFxuICBJbmplY3QsXG4gIEluamVjdG9yLFxuICBpbnB1dCxcbiAgSW5wdXRTaWduYWwsXG4gIG1vZGVsLFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFBMQVRGT1JNX0lELFxuICBTaW1wbGVDaGFuZ2VzLFxuICB1bnRyYWNrZWQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNQbGF0Zm9ybVNlcnZlciB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgdHlwZSB7IEluc3RhbmNlIH0gZnJvbSAndGlwcHkuanMnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgQ29udGVudCxcbiAgaXNDb21wb25lbnQsXG4gIGlzU3RyaW5nLFxuICBpc1RlbXBsYXRlUmVmLFxuICBWaWV3T3B0aW9ucyxcbiAgVmlld1JlZixcbiAgVmlld1NlcnZpY2UsXG59IGZyb20gJ0BuZ25lYXQvb3ZlcnZpZXcnO1xuXG5pbXBvcnQge1xuICBjb2VyY2VDc3NQaXhlbFZhbHVlLFxuICBkaW1lbnNpb25zQ2hhbmdlcyxcbiAgaW5WaWV3LFxuICBpc0VsZW1lbnRPdmVyZmxvdyxcbiAgbm9ybWFsaXplQ2xhc3NOYW1lLFxuICBvYnNlcnZlVmlzaWJpbGl0eSxcbiAgb25seVRpcHB5UHJvcHMsXG4gIG92ZXJmbG93Q2hhbmdlcyxcbn0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQge1xuICBUSVBQWV9DT05GSUcsXG4gIFRJUFBZX1JFRixcbiAgVGlwcHlDb25maWcsXG4gIFRpcHB5SW5zdGFuY2UsXG4gIFRpcHB5UHJvcHMsXG59IGZyb20gJy4vdGlwcHkudHlwZXMnO1xuaW1wb3J0IHsgVGlwcHlGYWN0b3J5IH0gZnJvbSAnLi90aXBweS5mYWN0b3J5JztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5BdHRyaWJ1dGUgfSBmcm9tICcuL2NvZXJjaW9uJztcblxuLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0IHZhbHVlcyB1c2VkIGJ5IGB0aXBweS5qc2AuXG4vLyBXZSBhcmUgcHJvdmlkaW5nIHRoZW0gYXMgZGVmYXVsdCBpbnB1dCB2YWx1ZXMuXG4vLyBUaGUgYHRpcHB5LmpzYCByZXBvc2l0b3J5IGhhcyBiZWVuIGFyY2hpdmVkIGFuZCBpcyB1bmxpa2VseSB0b1xuLy8gY2hhbmdlIGluIHRoZSBmdXR1cmUsIHNvIGl0IGlzIHNhZmUgdG8gdXNlIHRoZXNlIHZhbHVlcyBhcyBkZWZhdWx0cy5cbmNvbnN0IGRlZmF1bHRBcHBlbmRUbzogVGlwcHlQcm9wc1snYXBwZW5kVG8nXSA9ICgpID0+IGRvY3VtZW50LmJvZHk7XG5jb25zdCBkZWZhdWx0RGVsYXk6IFRpcHB5UHJvcHNbJ2RlbGF5J10gPSAwO1xuY29uc3QgZGVmYXVsdER1cmF0aW9uOiBUaXBweVByb3BzWydkdXJhdGlvbiddID0gWzMwMCwgMjUwXTtcbmNvbnN0IGRlZmF1bHRJbnRlcmFjdGl2ZUJvcmRlcjogVGlwcHlQcm9wc1snaW50ZXJhY3RpdmVCb3JkZXInXSA9IDI7XG5jb25zdCBkZWZhdWx0TWF4V2lkdGg6IFRpcHB5UHJvcHNbJ21heFdpZHRoJ10gPSAzNTA7XG5jb25zdCBkZWZhdWx0T2Zmc2V0OiBUaXBweVByb3BzWydvZmZzZXQnXSA9IFswLCAxMF07XG5jb25zdCBkZWZhdWx0UGxhY2VtZW50OiBUaXBweVByb3BzWydwbGFjZW1lbnQnXSA9ICd0b3AnO1xuY29uc3QgZGVmYXVsdFRyaWdnZXI6IFRpcHB5UHJvcHNbJ3RyaWdnZXInXSA9ICdtb3VzZWVudGVyIGZvY3VzJztcbmNvbnN0IGRlZmF1bHRUcmlnZ2VyVGFyZ2V0OiBUaXBweVByb3BzWyd0cmlnZ2VyVGFyZ2V0J10gPSBudWxsO1xuY29uc3QgZGVmYXVsdFpJbmRleDogVGlwcHlQcm9wc1snekluZGV4J10gPSA5OTk5O1xuY29uc3QgZGVmYXVsdEFuaW1hdGlvbjogVGlwcHlQcm9wc1snYW5pbWF0aW9uJ10gPSAnZmFkZSc7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1t0cF0nLFxuICBleHBvcnRBczogJ3RpcHB5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVGlwcHlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uSW5pdCB7XG4gIHJlYWRvbmx5IGFwcGVuZFRvID0gaW5wdXQoZGVmYXVsdEFwcGVuZFRvLCB7XG4gICAgYWxpYXM6ICd0cEFwcGVuZFRvJyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29udGVudCA9IGlucHV0PENvbnRlbnQgfCB1bmRlZmluZWQgfCBudWxsPignJywgeyBhbGlhczogJ3RwJyB9KTtcblxuICByZWFkb25seSBkZWxheSA9IGlucHV0KGRlZmF1bHREZWxheSwge1xuICAgIGFsaWFzOiAndHBEZWxheScsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGR1cmF0aW9uID0gaW5wdXQoZGVmYXVsdER1cmF0aW9uLCB7XG4gICAgYWxpYXM6ICd0cER1cmF0aW9uJyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGlkZU9uQ2xpY2sgPSBpbnB1dCh0cnVlLCB7XG4gICAgYWxpYXM6ICd0cEhpZGVPbkNsaWNrJyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaW50ZXJhY3RpdmUgPSBpbnB1dChmYWxzZSwge1xuICAgIGFsaWFzOiAndHBJbnRlcmFjdGl2ZScsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGludGVyYWN0aXZlQm9yZGVyID0gaW5wdXQoZGVmYXVsdEludGVyYWN0aXZlQm9yZGVyLCB7XG4gICAgYWxpYXM6ICd0cEludGVyYWN0aXZlQm9yZGVyJyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgbWF4V2lkdGggPSBpbnB1dChkZWZhdWx0TWF4V2lkdGgsIHtcbiAgICBhbGlhczogJ3RwTWF4V2lkdGgnLFxuICB9KTtcblxuICAvLyBOb3RlIHRoYXQgc29tZSBvZiB0aGUgaW5wdXQgc2lnbmFsIHR5cGVzIGFyZSBkZWNsYXJlZCBleHBsaWNpdGx5IGJlY2F1c2UgdGhlIGNvbXBpbGVyXG4gIC8vIGFsc28gdXNlcyB0eXBlcyBmcm9tIGBAcG9wcGVyanMvY29yZWAgYW5kIHJlcXVpcmVzIGEgdHlwZSBhbm5vdGF0aW9uLlxuICByZWFkb25seSBvZmZzZXQ6IElucHV0U2lnbmFsPFRpcHB5UHJvcHNbJ29mZnNldCddPiA9IGlucHV0KGRlZmF1bHRPZmZzZXQsIHtcbiAgICBhbGlhczogJ3RwT2Zmc2V0JyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcGxhY2VtZW50OiBJbnB1dFNpZ25hbDxUaXBweVByb3BzWydwbGFjZW1lbnQnXT4gPSBpbnB1dChkZWZhdWx0UGxhY2VtZW50LCB7XG4gICAgYWxpYXM6ICd0cFBsYWNlbWVudCcsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBvcHBlck9wdGlvbnM6IElucHV0U2lnbmFsPFRpcHB5UHJvcHNbJ3BvcHBlck9wdGlvbnMnXT4gPSBpbnB1dChcbiAgICB7fSxcbiAgICB7XG4gICAgICBhbGlhczogJ3RwUG9wcGVyT3B0aW9ucycsXG4gICAgfVxuICApO1xuXG4gIHJlYWRvbmx5IHNob3dPbkNyZWF0ZSA9IGlucHV0KGZhbHNlLCB7XG4gICAgYWxpYXM6ICd0cFNob3dPbkNyZWF0ZScsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRyaWdnZXIgPSBpbnB1dChkZWZhdWx0VHJpZ2dlciwge1xuICAgIGFsaWFzOiAndHBUcmlnZ2VyJyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdHJpZ2dlclRhcmdldCA9IGlucHV0KGRlZmF1bHRUcmlnZ2VyVGFyZ2V0LCB7XG4gICAgYWxpYXM6ICd0cFRyaWdnZXJUYXJnZXQnLFxuICB9KTtcblxuICByZWFkb25seSB6SW5kZXggPSBpbnB1dChkZWZhdWx0WkluZGV4LCB7XG4gICAgYWxpYXM6ICd0cFpJbmRleCcsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGFuaW1hdGlvbiA9IGlucHV0KGRlZmF1bHRBbmltYXRpb24sIHtcbiAgICBhbGlhczogJ3RwQW5pbWF0aW9uJyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdXNlVGV4dENvbnRlbnQgPSBpbnB1dChmYWxzZSwge1xuICAgIHRyYW5zZm9ybTogY29lcmNlQm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBhbGlhczogJ3RwVXNlVGV4dENvbnRlbnQnLFxuICB9KTtcblxuICByZWFkb25seSBpc0xhenkgPSBpbnB1dChmYWxzZSwge1xuICAgIHRyYW5zZm9ybTogY29lcmNlQm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBhbGlhczogJ3RwSXNMYXp5JyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgdmFyaWF0aW9uID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPih1bmRlZmluZWQsIHsgYWxpYXM6ICd0cFZhcmlhdGlvbicgfSk7XG5cbiAgcmVhZG9ubHkgaXNFbmFibGVkID0gaW5wdXQodHJ1ZSwgeyBhbGlhczogJ3RwSXNFbmFibGVkJyB9KTtcblxuICByZWFkb25seSBjbGFzc05hbWUgPSBpbnB1dDxzdHJpbmcgfCBzdHJpbmdbXT4oJycsIHsgYWxpYXM6ICd0cENsYXNzTmFtZScgfSk7XG5cbiAgcmVhZG9ubHkgb25seVRleHRPdmVyZmxvdyA9IGlucHV0KGZhbHNlLCB7XG4gICAgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuQXR0cmlidXRlLFxuICAgIGFsaWFzOiAndHBPbmx5VGV4dE92ZXJmbG93JyxcbiAgfSk7XG5cbiAgcmVhZG9ubHkgc3RhdGljV2lkdGhIb3N0ID0gaW5wdXQoZmFsc2UsIHtcbiAgICB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgYWxpYXM6ICd0cFN0YXRpY1dpZHRoSG9zdCcsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGRhdGEgPSBpbnB1dDxhbnk+KHVuZGVmaW5lZCwgeyBhbGlhczogJ3RwRGF0YScgfSk7XG5cbiAgcmVhZG9ubHkgdXNlSG9zdFdpZHRoID0gaW5wdXQoZmFsc2UsIHtcbiAgICB0cmFuc2Zvcm06IGNvZXJjZUJvb2xlYW5BdHRyaWJ1dGUsXG4gICAgYWxpYXM6ICd0cFVzZUhvc3RXaWR0aCcsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhpZGVPbkVzY2FwZSA9IGlucHV0KGZhbHNlLCB7XG4gICAgdHJhbnNmb3JtOiBjb2VyY2VCb29sZWFuQXR0cmlidXRlLFxuICAgIGFsaWFzOiAndHBIaWRlT25Fc2NhcGUnLFxuICB9KTtcblxuICByZWFkb25seSBkZXRlY3RDaGFuZ2VzQ29tcG9uZW50ID0gaW5wdXQodHJ1ZSwgeyBhbGlhczogJ3RwRGV0ZWN0Q2hhbmdlc0NvbXBvbmVudCcgfSk7XG5cbiAgcmVhZG9ubHkgcG9wcGVyV2lkdGggPSBpbnB1dDxudW1iZXIgfCBzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwge1xuICAgIGFsaWFzOiAndHBQb3BwZXJXaWR0aCcsXG4gIH0pO1xuXG4gIHJlYWRvbmx5IGN1c3RvbUhvc3QgPSBpbnB1dDxIVE1MRWxlbWVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkLCB7IGFsaWFzOiAndHBIb3N0JyB9KTtcblxuICByZWFkb25seSBpc1Zpc2libGUgPSBtb2RlbChmYWxzZSwgeyBhbGlhczogJ3RwSXNWaXNpYmxlJyB9KTtcblxuICBAT3V0cHV0KCd0cFZpc2libGUnKSB2aXNpYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHByb3RlY3RlZCBpbnN0YW5jZSE6IFRpcHB5SW5zdGFuY2U7XG4gIHByb3RlY3RlZCB2aWV3UmVmOiBWaWV3UmVmIHwgbnVsbCA9IG51bGw7XG4gIHByb3RlY3RlZCBwcm9wcyE6IFBhcnRpYWw8VGlwcHlDb25maWc+O1xuICBwcm90ZWN0ZWQgdmFyaWF0aW9uRGVmaW5lZCA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgdmlld09wdGlvbnMkOiBWaWV3T3B0aW9ucyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBXZSBoYWQgdXNlIGB2aXNpYmxlYCBldmVudCBlbWl0dGVyIHByZXZpb3VzbHkgYXMgYSBgdGFrZVVudGlsYCBzdWJzY3JpYmVyIGluIG11bHRpcGxlIHBsYWNlc1xuICAgKiB3aXRoaW4gdGhlIGRpcmVjdGl2ZS5cbiAgICogVGhpcyBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHk7IHRodXMgd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGggdGhlIGB2aXNpYmxlYCBldmVudCBlbWl0dGVyXG4gICAqIGFuZCB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25zIG9ubHkgd2hlbiB0aGUgYHZpc2libGVgIGV2ZW50IGlzIGJlaW5nIGxpc3RlbmVkIG91dHNpZGVcbiAgICogaW4gdGhlIHRlbXBsYXRlIChgPGJ1dHRvbiBbdGlwcHldPVwiLi4uXCIgKHZpc2libGUpPVwiLi4uXCI+PC9idXR0b24+YCkuXG4gICAqL1xuICBwcm90ZWN0ZWQgdmlzaWJsZUludGVybmFsID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSB2aXNpYmlsaXR5T2JzZXJ2ZXJDbGVhbnVwOiBWb2lkRnVuY3Rpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBjb250ZW50Q2hhbmdlZCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBob3N0ID0gY29tcHV0ZWQ8SFRNTEVsZW1lbnQ+KFxuICAgICgpID0+IHRoaXMuY3VzdG9tSG9zdCgpIHx8IHRoaXMuaG9zdFJlZi5uYXRpdmVFbGVtZW50XG4gICk7XG5cbiAgLy8gSXQgc2hvdWxkIGJlIGEgZ2V0dGVyIGJlY2F1c2UgY29tcHV0YXRpb25zIGFyZSBjYWNoZWQgdW50aWxcbiAgLy8gYW55IG9mIHRoZSBwcm9kdWNlcnMgY2hhbmdlLlxuICBwcml2YXRlIGdldCBob3N0V2lkdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICBwcml2YXRlIGlzU2VydmVyID0gaXNQbGF0Zm9ybVNlcnZlcihpbmplY3QoUExBVEZPUk1fSUQpKTtcbiAgcHJpdmF0ZSB0aXBweUZhY3RvcnkgPSBpbmplY3QoVGlwcHlGYWN0b3J5KTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFRJUFBZX0NPTkZJRykgcHJvdGVjdGVkIGdsb2JhbENvbmZpZzogVGlwcHlDb25maWcsXG4gICAgcHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcm90ZWN0ZWQgdmlld1NlcnZpY2U6IFZpZXdTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCB2Y3I6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHJvdGVjdGVkIG5nWm9uZTogTmdab25lLFxuICAgIHByb3RlY3RlZCBob3N0UmVmOiBFbGVtZW50UmVmXG4gICkge1xuICAgIGlmICh0aGlzLmlzU2VydmVyKSByZXR1cm47XG5cbiAgICB0aGlzLnNldHVwTGlzdGVuZXJzKCk7XG5cbiAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgIHRoaXMuaW5zdGFuY2U/LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuZGVzdHJveVZpZXcoKTtcbiAgICAgIHRoaXMudmlzaWJpbGl0eU9ic2VydmVyQ2xlYW51cD8uKCk7XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKHRoaXMuaXNTZXJ2ZXIpIHJldHVybjtcblxuICAgIGNvbnN0IHZhcmlhdGlvbiA9IHRoaXMudmFyaWF0aW9uKCkgfHwgdGhpcy5nbG9iYWxDb25maWcuZGVmYXVsdFZhcmlhdGlvbiB8fCAnJztcbiAgICBjb25zdCBwcm9wcyA9IE9iamVjdC5rZXlzKGNoYW5nZXMpXG4gICAgICAvLyBgaXNWaXNpYmxlYCBpcyBub3QgcmVxdWlyZWQgYXMgYSBwcm9wIHNpbmNlIHdlIHVwZGF0ZSBpdCBtYW51YWxseVxuICAgICAgLy8gaW4gYW4gZWZmZWN0LWxpa2UgbWFubmVyLlxuICAgICAgLmZpbHRlcigoa2V5KSA9PiBrZXkgIT09ICdpc1Zpc2libGUnKVxuICAgICAgLnJlZHVjZShcbiAgICAgICAgKGFjY3VtdWxhdG9yLCBrZXkpID0+ICh7IC4uLmFjY3VtdWxhdG9yLCBba2V5XTogY2hhbmdlc1trZXldLmN1cnJlbnRWYWx1ZSB9KSxcbiAgICAgICAgeyAuLi50aGlzLmdsb2JhbENvbmZpZy52YXJpYXRpb25zPy5bdmFyaWF0aW9uXSB9XG4gICAgICApO1xuXG4gICAgdGhpcy51cGRhdGVQcm9wcyhwcm9wcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy51c2VIb3N0V2lkdGgoKSkge1xuICAgICAgdGhpcy5wcm9wcy5tYXhXaWR0aCA9IHRoaXMuaG9zdFdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5pc1NlcnZlcikgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuaXNMYXp5KCkpIHtcbiAgICAgIGNvbnN0IGhvc3RJblZpZXckID0gaW5WaWV3KHRoaXMuaG9zdCgpKTtcblxuICAgICAgaWYgKHRoaXMub25seVRleHRPdmVyZmxvdygpKSB7XG4gICAgICAgIGhvc3RJblZpZXckXG4gICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5pc092ZXJmbG93aW5nJCgpKSxcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGlzRWxlbWVudE92ZXJmbG93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrT3ZlcmZsb3coaXNFbGVtZW50T3ZlcmZsb3cpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaG9zdEluVmlldyQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZUluc3RhbmNlKCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5vbmx5VGV4dE92ZXJmbG93KCkpIHtcbiAgICAgIHRoaXMuaXNPdmVyZmxvd2luZyQoKVxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgLnN1YnNjcmliZSgoaXNFbGVtZW50T3ZlcmZsb3cpID0+IHtcbiAgICAgICAgICB0aGlzLmNoZWNrT3ZlcmZsb3coaXNFbGVtZW50T3ZlcmZsb3cpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jcmVhdGVJbnN0YW5jZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3lWaWV3KCkge1xuICAgIHRoaXMudmlld09wdGlvbnMkID0gbnVsbDtcbiAgICB0aGlzLnZpZXdSZWY/LmRlc3Ryb3koKTtcbiAgICB0aGlzLnZpZXdSZWYgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuIHlvdSBhcHBlbmQgdG8gYW4gZWxlbWVudCB0aGF0IHlvdSBtaWdodCByZW1vdmUgZnJvbSB0aGUgRE9NLlxuICAgKiBJbiBzdWNoIGNhc2VzIHdlIHdhbnQgdG8gaGlkZSB0aGUgdG9vbHRpcCBhbmQgbGV0IGl0IGdvIHRocm91Z2ggdGhlIGRlc3Ryb3kgbGlmZWN5Y2xlLlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBncmlkIHJvdyB3aXRoIGFuIGVsZW1lbnQgdGhhdCB5b3UgdG9nZ2xlIHVzaW5nIHRoZSBkaXNwbGF5IENTUyBwcm9wZXJ0eSBvbiBob3Zlci5cbiAgICovXG4gIG9ic2VydmVIb3N0VmlzaWJpbGl0eSgpIHtcbiAgICBpZiAodGhpcy5pc1NlcnZlcikgcmV0dXJuO1xuICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gb2JzZXJ2ZSB0aGUgaG9zdCB2aXNpYmlsaXR5IGlmIHdlIGFyZSBhcHBlbmRpbmcgdG8gdGhlIGJvZHkuXG4gICAgaWYgKHRoaXMucHJvcHMuYXBwZW5kVG8gJiYgdGhpcy5wcm9wcy5hcHBlbmRUbyAhPT0gZG9jdW1lbnQuYm9keSkge1xuICAgICAgdGhpcy52aXNpYmlsaXR5T2JzZXJ2ZXJDbGVhbnVwPy4oKTtcbiAgICAgIHJldHVybiB0aGlzLnZpc2libGVJbnRlcm5hbFxuICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgLnN1YnNjcmliZSgoaXNWaXNpYmxlKSA9PiB7XG4gICAgICAgICAgaWYgKGlzVmlzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5T2JzZXJ2ZXJDbGVhbnVwID0gb2JzZXJ2ZVZpc2liaWxpdHkoXG4gICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UucmVmZXJlbmNlLFxuICAgICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgLy8gQmVjYXVzZSB3ZSBoYXZlIGFuaW1hdGlvbiBvbiB0aGUgcG9wcGVyIGl0IGRvZXNuJ3QgY2xvc2UgaW1tZWRpYXRlbHkgZG9lc24ndCB0cmlnZ2VyIHRoZSBgdHBWaXNpYmxlYCBldmVudC5cbiAgICAgICAgICAgICAgICAvLyBUaXBweSBpcyByZWx5aW5nIG9uIHRoZSB0cmFuc2l0aW9uZW5kIGV2ZW50IHRvIHRyaWdnZXIgdGhlIGBvbkhpZGRlbmAgY2FsbGJhY2suXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F0b21pa3MvdGlwcHlqcy9ibG9iL21hc3Rlci9zcmMvZG9tLXV0aWxzLnRzI0wxMTdcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGV2ZW50IG5ldmVyIGZpcmVzIGJlY2F1c2UgdGhlIHBvcHBlciBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBiZWZvcmUgdGhlIHRyYW5zaXRpb24gZW5kcy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25IaWRkZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eU9ic2VydmVyQ2xlYW51cD8uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMuaW5zdGFuY2U/LnNob3coKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5pbnN0YW5jZT8uaGlkZSgpO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuaW5zdGFuY2U/LmVuYWJsZSgpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLmluc3RhbmNlPy5kaXNhYmxlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlUHJvcHMocHJvcHM6IFBhcnRpYWw8VGlwcHlDb25maWc+KSB7XG4gICAgdGhpcy5zZXRQcm9wcyh7IC4uLnRoaXMucHJvcHMsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFByb3BzKHByb3BzOiBQYXJ0aWFsPFRpcHB5Q29uZmlnPikge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmluc3RhbmNlPy5zZXRQcm9wcyhvbmx5VGlwcHlQcm9wcyhwcm9wcykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFN0YXR1cyhpc0VuYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBpc0VuYWJsZWQgPyB0aGlzLmluc3RhbmNlPy5lbmFibGUoKSA6IHRoaXMuaW5zdGFuY2U/LmRpc2FibGUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVJbnN0YW5jZSgpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudCgpICYmICF0aGlzLnVzZVRleHRDb250ZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnRpcHB5RmFjdG9yeVxuICAgICAgLmNyZWF0ZSh0aGlzLmhvc3QoKSwge1xuICAgICAgICBhbGxvd0hUTUw6IHRydWUsXG4gICAgICAgIGFwcGVuZFRvOiBkb2N1bWVudC5ib2R5LFxuICAgICAgICAuLi4odGhpcy5nbG9iYWxDb25maWcuekluZGV4R2V0dGVyXG4gICAgICAgICAgPyB7IHpJbmRleDogdGhpcy5nbG9iYWxDb25maWcuekluZGV4R2V0dGVyKCkgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi5vbmx5VGlwcHlQcm9wcyh0aGlzLmdsb2JhbENvbmZpZyksXG4gICAgICAgIC4uLm9ubHlUaXBweVByb3BzKHRoaXMucHJvcHMpLFxuICAgICAgICBvbk1vdW50OiAoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICBjb25zdCBpc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNWaXNpYmxlLnNldChpc1Zpc2libGUpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZUludGVybmFsLm5leHQoaXNWaXNpYmxlKTtcbiAgICAgICAgICBpZiAodGhpcy52aXNpYmxlLm9ic2VydmVkKSB7XG4gICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gdGhpcy52aXNpYmxlLm5leHQoaXNWaXNpYmxlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMudXNlSG9zdFdpZHRoKCkgJiYgdGhpcy5saXN0ZW5Ub0hvc3RSZXNpemUoKTtcbiAgICAgICAgICB0aGlzLmdsb2JhbENvbmZpZy5vbk1vdW50Py4oaW5zdGFuY2UpO1xuICAgICAgICB9LFxuICAgICAgICBvbkNyZWF0ZTogKGluc3RhbmNlKSA9PiB7XG4gICAgICAgICAgaW5zdGFuY2UucG9wcGVyLmNsYXNzTGlzdC5hZGQoXG4gICAgICAgICAgICBgdGlwcHktdmFyaWF0aW9uLSR7dGhpcy52YXJpYXRpb24oKSB8fCB0aGlzLmdsb2JhbENvbmZpZy5kZWZhdWx0VmFyaWF0aW9ufWBcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLmNsYXNzTmFtZSgpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtsYXNzIG9mIG5vcm1hbGl6ZUNsYXNzTmFtZSh0aGlzLmNsYXNzTmFtZSgpKSkge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5wb3BwZXIuY2xhc3NMaXN0LmFkZChrbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLm9uQ3JlYXRlPy4oaW5zdGFuY2UpO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlzaWJsZSgpID09PSB0cnVlKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zaG93KCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvblNob3c6IChpbnN0YW5jZSkgPT4ge1xuICAgICAgICAgIGluc3RhbmNlLnJlZmVyZW5jZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtdGlwcHktb3BlbicsICcnKTtcblxuICAgICAgICAgIC8vIFdlJ3JlIHJlLWVudGVyaW5nIGJlY2F1c2Ugd2UgbWlnaHQgY3JlYXRlIGFuIEFuZ3VsYXIgY29tcG9uZW50LFxuICAgICAgICAgIC8vIHdoaWNoIHNob3VsZCBiZSBkb25lIHdpdGhpbiB0aGUgem9uZS5cbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMucmVzb2x2ZUNvbnRlbnQoaW5zdGFuY2UpKTtcblxuICAgICAgICAgIGlmIChpc1N0cmluZyhjb250ZW50KSkge1xuICAgICAgICAgICAgaW5zdGFuY2Uuc2V0UHJvcHMoeyBhbGxvd0hUTUw6IGZhbHNlIH0pO1xuXG4gICAgICAgICAgICBpZiAoIWNvbnRlbnQ/LnRyaW0oKSkge1xuICAgICAgICAgICAgICB0aGlzLmRpc2FibGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMuZW5hYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaW5zdGFuY2Uuc2V0Q29udGVudChjb250ZW50KTtcbiAgICAgICAgICB0aGlzLmhpZGVPbkVzY2FwZSgpICYmIHRoaXMuaGFuZGxlRXNjYXBlQnV0dG9uKCk7XG5cbiAgICAgICAgICBpZiAodGhpcy51c2VIb3N0V2lkdGgoKSkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnN0YW5jZVdpZHRoKGluc3RhbmNlLCB0aGlzLmhvc3RXaWR0aCk7XG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBvcHBlcldpZHRoKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5zdGFuY2VXaWR0aChpbnN0YW5jZSwgdGhpcy5wb3BwZXJXaWR0aCgpISk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLm9uU2hvdz8uKGluc3RhbmNlKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25IaWRlKGluc3RhbmNlKSB7XG4gICAgICAgICAgaW5zdGFuY2UucmVmZXJlbmNlLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10aXBweS1vcGVuJyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uSGlkZGVuOiAoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICB0aGlzLm9uSGlkZGVuKGluc3RhbmNlKTtcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKGluc3RhbmNlKSA9PiB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UgPSBpbnN0YW5jZTtcblxuICAgICAgICB0aGlzLnNldFN0YXR1cyh0aGlzLmlzRW5hYmxlZCgpKTtcbiAgICAgICAgdGhpcy5zZXRQcm9wcyh0aGlzLnByb3BzKTtcblxuICAgICAgICB0aGlzLnZhcmlhdGlvbigpID09PSAnY29udGV4dE1lbnUnICYmIHRoaXMuaGFuZGxlQ29udGV4dE1lbnUoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlc29sdmVDb250ZW50KGluc3RhbmNlOiBUaXBweUluc3RhbmNlKSB7XG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudCgpO1xuXG4gICAgaWYgKCF0aGlzLnZpZXdPcHRpb25zJCAmJiAhaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgIGNvbnN0IGluamVjdG9yID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVElQUFlfUkVGLFxuICAgICAgICAgICAgdXNlVmFsdWU6IHRoaXMuaW5zdGFuY2UsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGEoKTtcblxuICAgICAgaWYgKGlzQ29tcG9uZW50KGNvbnRlbnQpKSB7XG4gICAgICAgIHRoaXMuaW5zdGFuY2UuZGF0YSA9IGRhdGE7XG5cbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyQgPSB7XG4gICAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgIH07XG4gICAgICB9IGVsc2UgaWYgKGlzVGVtcGxhdGVSZWYoY29udGVudCkpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyQgPSB7XG4gICAgICAgICAgaW5qZWN0b3IsXG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICRpbXBsaWNpdDogdGhpcy5oaWRlLmJpbmQodGhpcyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZpZXdSZWYgPSB0aGlzLnZpZXdTZXJ2aWNlLmNyZWF0ZVZpZXcoY29udGVudCEsIHtcbiAgICAgIHZjcjogdGhpcy52Y3IsXG4gICAgICAuLi50aGlzLnZpZXdPcHRpb25zJCxcbiAgICB9KTtcblxuICAgIC8vIFdlIG5lZWQgdG8gY2FsbCBkZXRlY3RDaGFuZ2VzIGZvciBvblB1c2ggY29tcG9uZW50cyB0byB1cGRhdGUgdGhlIGNvbnRlbnRcbiAgICBpZiAodGhpcy5kZXRlY3RDaGFuZ2VzQ29tcG9uZW50KCkgJiYgaXNDb21wb25lbnQoY29udGVudCkpIHtcbiAgICAgIHRoaXMudmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbGV0IG5ld0NvbnRlbnQgPSB0aGlzLnZpZXdSZWYuZ2V0RWxlbWVudCgpO1xuXG4gICAgaWYgKHRoaXMudXNlVGV4dENvbnRlbnQoKSkge1xuICAgICAgbmV3Q29udGVudCA9IGluc3RhbmNlLnJlZmVyZW5jZS50ZXh0Q29udGVudCE7XG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKG5ld0NvbnRlbnQpICYmIHRoaXMuZ2xvYmFsQ29uZmlnLmJlZm9yZVJlbmRlcikge1xuICAgICAgbmV3Q29udGVudCA9IHRoaXMuZ2xvYmFsQ29uZmlnLmJlZm9yZVJlbmRlcihuZXdDb250ZW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3Q29udGVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVDb250ZXh0TWVudSgpIHtcbiAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4odGhpcy5ob3N0KCksICdjb250ZXh0bWVudScpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgdGhpcy5pbnN0YW5jZS5zZXRQcm9wcyh7XG4gICAgICAgICAgZ2V0UmVmZXJlbmNlQ2xpZW50UmVjdDogKCkgPT5cbiAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgIHRvcDogZXZlbnQuY2xpZW50WSxcbiAgICAgICAgICAgICAgYm90dG9tOiBldmVudC5jbGllbnRZLFxuICAgICAgICAgICAgICBsZWZ0OiBldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgICByaWdodDogZXZlbnQuY2xpZW50WCxcbiAgICAgICAgICAgIH0gYXMgRE9NUmVjdFJlYWRPbmx5KSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pbnN0YW5jZS5zaG93KCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBoYW5kbGVFc2NhcGVCdXR0b24oKTogdm9pZCB7XG4gICAgZnJvbUV2ZW50PEtleWJvYXJkRXZlbnQ+KGRvY3VtZW50LmJvZHksICdrZXlkb3duJylcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoKHsgY29kZSB9OiBLZXlib2FyZEV2ZW50KSA9PiBjb2RlID09PSAnRXNjYXBlJyksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLnZpc2libGVJbnRlcm5hbC5waXBlKGZpbHRlcigodikgPT4gIXYpKSksXG4gICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuaGlkZSgpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBjaGVja092ZXJmbG93KGlzRWxlbWVudE92ZXJmbG93OiBib29sZWFuKSB7XG4gICAgaWYgKGlzRWxlbWVudE92ZXJmbG93KSB7XG4gICAgICBpZiAoIXRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVJbnN0YW5jZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pbnN0YW5jZS5lbmFibGUoKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pbnN0YW5jZT8uZGlzYWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBsaXN0ZW5Ub0hvc3RSZXNpemUoKSB7XG4gICAgZGltZW5zaW9uc0NoYW5nZXModGhpcy5ob3N0KCkpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy52aXNpYmxlSW50ZXJuYWwpLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnNldEluc3RhbmNlV2lkdGgodGhpcy5pbnN0YW5jZSwgdGhpcy5ob3N0V2lkdGgpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgc2V0SW5zdGFuY2VXaWR0aChpbnN0YW5jZTogSW5zdGFuY2UsIHdpZHRoOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICBjb25zdCBpblBpeGVscyA9IGNvZXJjZUNzc1BpeGVsVmFsdWUod2lkdGgpO1xuICAgIGluc3RhbmNlLnBvcHBlci5zdHlsZS53aWR0aCA9IGluUGl4ZWxzO1xuICAgIGluc3RhbmNlLnBvcHBlci5zdHlsZS5tYXhXaWR0aCA9IGluUGl4ZWxzO1xuICAgIChpbnN0YW5jZS5wb3BwZXIuZmlyc3RFbGVtZW50Q2hpbGQgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLm1heFdpZHRoID0gaW5QaXhlbHM7XG4gIH1cblxuICBwcml2YXRlIG9uSGlkZGVuKGluc3RhbmNlOiBUaXBweUluc3RhbmNlID0gdGhpcy5pbnN0YW5jZSkge1xuICAgIHRoaXMuZGVzdHJveVZpZXcoKTtcbiAgICBjb25zdCBpc1Zpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmlzVmlzaWJsZS5zZXQoaXNWaXNpYmxlKTtcbiAgICB0aGlzLnZpc2libGVJbnRlcm5hbC5uZXh0KGlzVmlzaWJsZSk7XG4gICAgaWYgKHRoaXMudmlzaWJsZS5vYnNlcnZlZCkge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHRoaXMudmlzaWJsZS5uZXh0KGlzVmlzaWJsZSkpO1xuICAgIH1cbiAgICB0aGlzLmdsb2JhbENvbmZpZy5vbkhpZGRlbj8uKGluc3RhbmNlKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNPdmVyZmxvd2luZyQoKSB7XG4gICAgY29uc3QgaG9zdCA9IHRoaXMuaG9zdCgpO1xuICAgIGNvbnN0IG5vdGlmaWVycyQgPSBbb3ZlcmZsb3dDaGFuZ2VzKGhvc3QpXTtcblxuICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBob3N0IGhhcyBhIHN0YXRpYyB3aWR0aCBidXQgdGhlIGNvbnRlbnQgbWlnaHQgY2hhbmdlXG4gICAgaWYgKHRoaXMuc3RhdGljV2lkdGhIb3N0KCkpIHtcbiAgICAgIG5vdGlmaWVycyQucHVzaChcbiAgICAgICAgdGhpcy5jb250ZW50Q2hhbmdlZC5waXBlKFxuICAgICAgICAgIC8vIFdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIGNvbnRlbnQgdG8gYmUgcmVuZGVyZWQgYmVmb3JlIHdlIGNhbiBjaGVjayBpZiBpdCdzIG92ZXJmbG93aW5nLlxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXIpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaWQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHJldHVybiAoKSA9PiBjYW5jZWxBbmltYXRpb25GcmFtZShpZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBtYXAoKCkgPT4gaXNFbGVtZW50T3ZlcmZsb3coaG9zdCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlKC4uLm5vdGlmaWVycyQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cExpc3RlbmVycygpOiB2b2lkIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgLy8gQ2FwdHVyZSBzaWduYWwgcmVhZCB0byB0cmFjayBpdHMgY2hhbmdlcy5cbiAgICAgIHRoaXMuY29udGVudCgpO1xuICAgICAgdW50cmFja2VkKCgpID0+IHRoaXMuY29udGVudENoYW5nZWQubmV4dCgpKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB0aGlzLnNldFN0YXR1cyh0aGlzLmlzRW5hYmxlZCgpKSk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgaXNWaXNpYmxlID0gdGhpcy5pc1Zpc2libGUoKTtcbiAgICAgIGlzVmlzaWJsZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { inject, Inject, Injectable, Injector } from '@angular/core';
|
|
2
|
-
import { isComponent, isTemplateRef } from '@ngneat/overview';
|
|
3
|
-
import { TIPPY_CONFIG, TIPPY_REF } from './tippy.types';
|
|
2
|
+
import { isComponent, isTemplateRef, } from '@ngneat/overview';
|
|
3
|
+
import { TIPPY_CONFIG, TIPPY_REF, } from './tippy.types';
|
|
4
4
|
import { normalizeClassName, onlyTippyProps } from './utils';
|
|
5
5
|
import { TippyFactory } from './tippy.factory';
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
@@ -13,22 +13,22 @@ export class TippyService {
|
|
|
13
13
|
this._tippyFactory = inject(TippyFactory);
|
|
14
14
|
}
|
|
15
15
|
create(host, content, options = {}) {
|
|
16
|
-
const variation = options.variation || this.globalConfig.defaultVariation;
|
|
16
|
+
const variation = options.variation || this.globalConfig.defaultVariation || '';
|
|
17
17
|
const config = {
|
|
18
18
|
onShow: (instance) => {
|
|
19
19
|
host.setAttribute('data-tippy-open', '');
|
|
20
20
|
if (!instance.$viewOptions) {
|
|
21
|
-
instance.$viewOptions = {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
21
|
+
instance.$viewOptions = {
|
|
22
|
+
injector: Injector.create({
|
|
23
|
+
providers: [
|
|
24
|
+
{
|
|
25
|
+
provide: TIPPY_REF,
|
|
26
|
+
useValue: instance,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
parent: options.injector || this.injector,
|
|
30
|
+
}),
|
|
31
|
+
};
|
|
32
32
|
if (isTemplateRef(content)) {
|
|
33
33
|
instance.$viewOptions.context = {
|
|
34
34
|
$implicit: instance.hide.bind(instance),
|
|
@@ -40,22 +40,23 @@ export class TippyService {
|
|
|
40
40
|
instance.data = options.data;
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
instance.view ||= this.view.createView(content, {
|
|
44
|
+
...options,
|
|
45
|
+
...instance.$viewOptions,
|
|
46
|
+
});
|
|
46
47
|
instance.setContent(instance.view.getElement());
|
|
47
48
|
options?.onShow?.(instance);
|
|
48
49
|
},
|
|
49
50
|
onHidden: (instance) => {
|
|
50
51
|
host.removeAttribute('data-tippy-open');
|
|
51
52
|
if (!options.preserveView) {
|
|
52
|
-
instance.view
|
|
53
|
+
instance.view?.destroy();
|
|
53
54
|
instance.view = null;
|
|
54
55
|
}
|
|
55
56
|
options?.onHidden?.(instance);
|
|
56
57
|
},
|
|
57
58
|
...onlyTippyProps(this.globalConfig),
|
|
58
|
-
...this.globalConfig.variations[variation],
|
|
59
|
+
...this.globalConfig.variations?.[variation],
|
|
59
60
|
...onlyTippyProps(options),
|
|
60
61
|
onCreate: (instance) => {
|
|
61
62
|
instance.popper.classList.add(`tippy-variation-${variation}`);
|
|
@@ -80,4 +81,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
80
81
|
type: Inject,
|
|
81
82
|
args: [TIPPY_CONFIG]
|
|
82
83
|
}] }, { type: i1.ViewService }, { type: i0.Injector }] });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nbmVhdC9oZWxpcG9wcGVyL3NyYy9saWIvdGlwcHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JFLE9BQU8sRUFDTCxXQUFXLEVBQ1gsYUFBYSxHQUdkLE1BQU0sa0JBQWtCLENBQUM7QUFJMUIsT0FBTyxFQUdMLFlBQVksRUFDWixTQUFTLEdBR1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQUcvQyxNQUFNLE9BQU8sWUFBWTtJQUd2QixZQUNnQyxZQUF5QixFQUMvQyxJQUFpQixFQUNqQixRQUFrQjtRQUZJLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQy9DLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUxYLGtCQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBTW5ELENBQUM7SUFFSixNQUFNLENBQ0osSUFBaUIsRUFDakIsT0FBVSxFQUNWLFVBQWtDLEVBQUU7UUFFcEMsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixJQUFJLEVBQUUsQ0FBQztRQUNoRixNQUFNLE1BQU0sR0FBRztZQUNiLE1BQU0sRUFBRSxDQUFDLFFBQWtDLEVBQUUsRUFBRTtnQkFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDekMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVB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QUFVLEVBQUUsTUFBTSxFQUFFOzswQkFLN0IsTUFBTTsyQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBpc0NvbXBvbmVudCxcbiAgaXNUZW1wbGF0ZVJlZixcbiAgUmVzb2x2ZVZpZXdSZWYsXG4gIFZpZXdTZXJ2aWNlLFxufSBmcm9tICdAbmduZWF0L292ZXJ2aWV3JztcbmltcG9ydCB7IENvbnRlbnQgfSBmcm9tICdAbmduZWF0L292ZXJ2aWV3JztcbmltcG9ydCB0eXBlIHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBDcmVhdGVPcHRpb25zLFxuICBFeHRlbmRlZFRpcHB5SW5zdGFuY2UsXG4gIFRJUFBZX0NPTkZJRyxcbiAgVElQUFlfUkVGLFxuICBUaXBweUNvbmZpZyxcbiAgVGlwcHlJbnN0YW5jZSxcbn0gZnJvbSAnLi90aXBweS50eXBlcyc7XG5pbXBvcnQgeyBub3JtYWxpemVDbGFzc05hbWUsIG9ubHlUaXBweVByb3BzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBUaXBweUZhY3RvcnkgfSBmcm9tICcuL3RpcHB5LmZhY3RvcnknO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFRpcHB5U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpcHB5RmFjdG9yeSA9IGluamVjdChUaXBweUZhY3RvcnkpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoVElQUFlfQ09ORklHKSBwcml2YXRlIGdsb2JhbENvbmZpZzogVGlwcHlDb25maWcsXG4gICAgcHJpdmF0ZSB2aWV3OiBWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvclxuICApIHt9XG5cbiAgY3JlYXRlPFQgZXh0ZW5kcyBDb250ZW50PihcbiAgICBob3N0OiBIVE1MRWxlbWVudCxcbiAgICBjb250ZW50OiBULFxuICAgIG9wdGlvbnM6IFBhcnRpYWw8Q3JlYXRlT3B0aW9ucz4gPSB7fVxuICApOiBPYnNlcnZhYmxlPEV4dGVuZGVkVGlwcHlJbnN0YW5jZTxUPj4ge1xuICAgIGNvbnN0IHZhcmlhdGlvbiA9IG9wdGlvbnMudmFyaWF0aW9uIHx8IHRoaXMuZ2xvYmFsQ29uZmlnLmRlZmF1bHRWYXJpYXRpb24gfHwgJyc7XG4gICAgY29uc3QgY29uZmlnID0ge1xuICAgICAgb25TaG93OiAoaW5zdGFuY2U6IEV4dGVuZGVkVGlwcHlJbnN0YW5jZTxUPikgPT4ge1xuICAgICAgICBob3N0LnNldEF0dHJpYnV0ZSgnZGF0YS10aXBweS1vcGVuJywgJycpO1xuICAgICAgICBpZiAoIWluc3RhbmNlLiR2aWV3T3B0aW9ucykge1xuICAgICAgICAgIGluc3RhbmNlLiR2aWV3T3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGluamVjdG9yOiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBwcm92aWRlOiBUSVBQWV9SRUYsXG4gICAgICAgICAgICAgICAgICB1c2VWYWx1ZTogaW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcGFyZW50OiBvcHRpb25zLmluamVjdG9yIHx8IHRoaXMuaW5qZWN0b3IsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKGlzVGVtcGxhdGVSZWYoY29udGVudCkpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLiR2aWV3T3B0aW9ucy5jb250ZXh0ID0ge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IGluc3RhbmNlLmhpZGUuYmluZChpbnN0YW5jZSksXG4gICAgICAgICAgICAgIC4uLm9wdGlvbnMuY29udGV4dCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0NvbXBvbmVudChjb250ZW50KSkge1xuICAgICAgICAgICAgaW5zdGFuY2UuY29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcbiAgICAgICAgICAgIGluc3RhbmNlLmRhdGEgPSBvcHRpb25zLmRhdGE7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5zdGFuY2UudmlldyB8fD0gdGhpcy52aWV3LmNyZWF0ZVZpZXcoY29udGVudCwge1xuICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgLi4uaW5zdGFuY2UuJHZpZXdPcHRpb25zLFxuICAgICAgICB9KSBhcyBSZXNvbHZlVmlld1JlZjxUPjtcblxuICAgICAgICBpbnN0YW5jZS5zZXRDb250ZW50KGluc3RhbmNlLnZpZXcuZ2V0RWxlbWVudCgpKTtcbiAgICAgICAgb3B0aW9ucz8ub25TaG93Py4oaW5zdGFuY2UpO1xuICAgICAgfSxcbiAgICAgIG9uSGlkZGVuOiAoaW5zdGFuY2U6IEV4dGVuZGVkVGlwcHlJbnN0YW5jZTxUPikgPT4ge1xuICAgICAgICBob3N0LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10aXBweS1vcGVuJyk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnByZXNlcnZlVmlldykge1xuICAgICAgICAgIGluc3RhbmNlLnZpZXc/LmRlc3Ryb3koKTtcbiAgICAgICAgICBpbnN0YW5jZS52aWV3ID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zPy5vbkhpZGRlbj8uKGluc3RhbmNlKTtcbiAgICAgIH0sXG4gICAgICAuLi5vbmx5VGlwcHlQcm9wcyh0aGlzLmdsb2JhbENvbmZpZyksXG4gICAgICAuLi50aGlzLmdsb2JhbENvbmZpZy52YXJpYXRpb25zPy5bdmFyaWF0aW9uXSxcbiAgICAgIC4uLm9ubHlUaXBweVByb3BzKG9wdGlvbnMpLFxuICAgICAgb25DcmVhdGU6IChpbnN0YW5jZTogVGlwcHlJbnN0YW5jZSkgPT4ge1xuICAgICAgICBpbnN0YW5jZS5wb3BwZXIuY2xhc3NMaXN0LmFkZChgdGlwcHktdmFyaWF0aW9uLSR7dmFyaWF0aW9ufWApO1xuICAgICAgICBpZiAob3B0aW9ucy5jbGFzc05hbWUpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGtsYXNzIG9mIG5vcm1hbGl6ZUNsYXNzTmFtZShvcHRpb25zLmNsYXNzTmFtZSkpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLnBvcHBlci5jbGFzc0xpc3QuYWRkKGtsYXNzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nbG9iYWxDb25maWcub25DcmVhdGU/LihpbnN0YW5jZSk7XG4gICAgICAgIG9wdGlvbnMub25DcmVhdGU/LihpbnN0YW5jZSk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5fdGlwcHlGYWN0b3J5LmNyZWF0ZShob3N0LCBjb25maWcpIGFzIE9ic2VydmFibGU8XG4gICAgICBFeHRlbmRlZFRpcHB5SW5zdGFuY2U8VD5cbiAgICA+O1xuICB9XG59XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
2
|
export const TIPPY_REF = new InjectionToken('TIPPY_REF');
|
|
3
3
|
export const TIPPY_CONFIG = new InjectionToken('Tippy config');
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcHkudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ25lYXQvaGVsaXBvcHBlci9zcmMvbGliL3RpcHB5LnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBYyxjQUFjLEVBQW9CLE1BQU0sZUFBZSxDQUFDO0FBVTdFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxJQUFJLGNBQWMsQ0FBZ0IsV0FBVyxDQUFDLENBQUM7QUEyQnhFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FBYyxjQUFjLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHRpcHB5IGZyb20gJ3RpcHB5LmpzJztcbmltcG9ydCB0eXBlIHsgSW5zdGFuY2UsIFByb3BzIH0gZnJvbSAndGlwcHkuanMnO1xuaW1wb3J0IHsgRWxlbWVudFJlZiwgSW5qZWN0aW9uVG9rZW4sIHR5cGUgSW5wdXRTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHsgUmVzb2x2ZVZpZXdSZWYsIFZpZXdPcHRpb25zIH0gZnJvbSAnQG5nbmVhdC9vdmVydmlldyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlT3B0aW9ucyBleHRlbmRzIFBhcnRpYWw8VGlwcHlQcm9wcz4sIFZpZXdPcHRpb25zIHtcbiAgdmFyaWF0aW9uOiBzdHJpbmc7XG4gIHByZXNlcnZlVmlldzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgZGF0YTogYW55O1xufVxuXG5leHBvcnQgY29uc3QgVElQUFlfUkVGID0gbmV3IEluamVjdGlvblRva2VuPFRpcHB5SW5zdGFuY2U+KCdUSVBQWV9SRUYnKTtcblxuZXhwb3J0IGludGVyZmFjZSBUaXBweUluc3RhbmNlIGV4dGVuZHMgSW5zdGFuY2Uge1xuICBkYXRhPzogYW55O1xufVxuXG5leHBvcnQgdHlwZSBUaXBweVByb3BzID0gUHJvcHM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRUaXBweVByb3BzIGV4dGVuZHMgVGlwcHlQcm9wcyB7XG4gIHZhcmlhdGlvbnM6IFJlY29yZDxzdHJpbmcsIFBhcnRpYWw8VGlwcHlQcm9wcz4+O1xuICBkZWZhdWx0VmFyaWF0aW9uOiBrZXlvZiBFeHRlbmRlZFRpcHB5UHJvcHNbJ3ZhcmlhdGlvbnMnXTtcbiAgYmVmb3JlUmVuZGVyPzogKHRleHQ6IHN0cmluZykgPT4gc3RyaW5nO1xuICB6SW5kZXhHZXR0ZXI/KCk6IG51bWJlcjtcbn1cblxuZXhwb3J0IHR5cGUgVGlwcHlFbGVtZW50ID0gRWxlbWVudFJlZiB8IEVsZW1lbnQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXh0ZW5kZWRUaXBweUluc3RhbmNlPFQ+IGV4dGVuZHMgVGlwcHlJbnN0YW5jZSB7XG4gIHZpZXc6IFJlc29sdmVWaWV3UmVmPFQ+IHwgbnVsbDtcbiAgJHZpZXdPcHRpb25zOiBWaWV3T3B0aW9ucztcbiAgY29udGV4dD86IFZpZXdPcHRpb25zWydjb250ZXh0J107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGlwcHlDb25maWcgZXh0ZW5kcyBQYXJ0aWFsPEV4dGVuZGVkVGlwcHlQcm9wcz4ge1xuICBsb2FkZXI6ICgpID0+IHR5cGVvZiB0aXBweSB8IFByb21pc2U8eyBkZWZhdWx0OiB0eXBlb2YgdGlwcHkgfT47XG59XG5cbmV4cG9ydCBjb25zdCBUSVBQWV9DT05GSUcgPSBuZXcgSW5qZWN0aW9uVG9rZW48VGlwcHlDb25maWc+KCdUaXBweSBjb25maWcnKTtcbiJdfQ==
|