@ngneat/helipopper 7.1.1 → 8.0.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.
@@ -0,0 +1,472 @@
1
+ import { Directive, EventEmitter, Inject, Injector, Input, Output, PLATFORM_ID, } from '@angular/core';
2
+ import { isPlatformServer } from '@angular/common';
3
+ import tippy from 'tippy.js';
4
+ import { fromEvent, merge, Subject } from 'rxjs';
5
+ import { filter, switchMap, takeUntil } from 'rxjs/operators';
6
+ import { isComponent, isString, isTemplateRef } from '@ngneat/overview';
7
+ import { coerceCssPixelValue, dimensionsChanges, inView, normalizeClassName, observeVisibility, onlyTippyProps, overflowChanges, } from './utils';
8
+ import { TIPPY_CONFIG, TIPPY_REF } from './tippy.types';
9
+ import * as i0 from "@angular/core";
10
+ import * as i1 from "@ngneat/overview";
11
+ export class TippyDirective {
12
+ set appendTo(appendTo) {
13
+ this.updateProps({ appendTo });
14
+ }
15
+ constructor(platformId, globalConfig, injector, viewService, vcr, zone, hostRef) {
16
+ this.platformId = platformId;
17
+ this.globalConfig = globalConfig;
18
+ this.injector = injector;
19
+ this.viewService = viewService;
20
+ this.vcr = vcr;
21
+ this.zone = zone;
22
+ this.hostRef = hostRef;
23
+ this.onlyTextOverflow = false;
24
+ this.useHostWidth = false;
25
+ this.hideOnEscape = false;
26
+ this.detectChangesComponent = true;
27
+ this.isVisible = false;
28
+ this.visible = new EventEmitter();
29
+ this.destroyed = new Subject();
30
+ this.enabled = true;
31
+ this.variationDefined = false;
32
+ /**
33
+ * We had use `visible` event emitter previously as a `takeUntil` subscriber in multiple places
34
+ * within the directive.
35
+ * This is for internal use only; thus we don't have to deal with the `visible` event emitter
36
+ * and trigger change detections only when the `visible` event is being listened outside
37
+ * in the template (`<button [tippy]="..." (visible)="..."></button>`).
38
+ */
39
+ this.visibleInternal = new Subject();
40
+ }
41
+ ngOnChanges(changes) {
42
+ if (this.isServerSide)
43
+ return;
44
+ let props = Object.keys(changes).reduce((acc, change) => {
45
+ if (change === 'isVisible')
46
+ return acc;
47
+ acc[change] = changes[change].currentValue;
48
+ return acc;
49
+ }, {});
50
+ let variation;
51
+ if (isChanged('variation', changes)) {
52
+ variation = changes.variation.currentValue;
53
+ this.variationDefined = true;
54
+ }
55
+ else if (!this.variationDefined) {
56
+ variation = this.globalConfig.defaultVariation;
57
+ this.variationDefined = true;
58
+ }
59
+ if (variation) {
60
+ props = {
61
+ ...this.globalConfig.variations[variation],
62
+ ...props,
63
+ };
64
+ }
65
+ if (isChanged('isEnabled', changes)) {
66
+ this.enabled = changes.isEnabled.currentValue;
67
+ this.setStatus();
68
+ }
69
+ if (isChanged('isVisible', changes)) {
70
+ this.isVisible ? this.show() : this.hide();
71
+ }
72
+ this.updateProps(props);
73
+ }
74
+ ngOnInit() {
75
+ if (this.useHostWidth) {
76
+ this.props.maxWidth = this.hostWidth;
77
+ }
78
+ }
79
+ ngAfterViewInit() {
80
+ if (this.isServerSide)
81
+ return;
82
+ this.zone.runOutsideAngular(() => {
83
+ if (this.isLazy) {
84
+ if (this.onlyTextOverflow) {
85
+ inView(this.host)
86
+ .pipe(switchMap(() => overflowChanges(this.host)), takeUntil(this.destroyed))
87
+ .subscribe((isElementOverflow) => {
88
+ this.checkOverflow(isElementOverflow);
89
+ });
90
+ }
91
+ else {
92
+ inView(this.host)
93
+ .pipe(takeUntil(this.destroyed))
94
+ .subscribe(() => {
95
+ this.createInstance();
96
+ });
97
+ }
98
+ }
99
+ else if (this.onlyTextOverflow) {
100
+ overflowChanges(this.host)
101
+ .pipe(takeUntil(this.destroyed))
102
+ .subscribe((isElementOverflow) => {
103
+ this.checkOverflow(isElementOverflow);
104
+ });
105
+ }
106
+ else {
107
+ this.createInstance();
108
+ }
109
+ });
110
+ }
111
+ ngOnDestroy() {
112
+ this.destroyed.next();
113
+ this.instance?.destroy();
114
+ this.destroyView();
115
+ this.visibilityObserverCleanup?.();
116
+ }
117
+ destroyView() {
118
+ this.viewOptions$ = null;
119
+ this.viewRef?.destroy();
120
+ this.viewRef = null;
121
+ }
122
+ /**
123
+ * This method is useful when you append to an element that you might remove from the DOM.
124
+ * In such cases we want to hide the tooltip and let it go through the destroy lifecycle.
125
+ * For example, if you have a grid row with an element that you toggle using the display CSS property on hover.
126
+ */
127
+ observeHostVisibility() {
128
+ if (this.isServerSide)
129
+ return;
130
+ // We don't want to observe the host visibility if we are appending to the body.
131
+ if (this.props.appendTo && this.props.appendTo !== document.body) {
132
+ this.visibilityObserverCleanup?.();
133
+ return this.visibleInternal
134
+ .asObservable()
135
+ .pipe(takeUntil(this.destroyed))
136
+ .subscribe((isVisible) => {
137
+ if (isVisible) {
138
+ this.zone.runOutsideAngular(() => {
139
+ this.visibilityObserverCleanup = observeVisibility(this.instance.reference, () => {
140
+ this.hide();
141
+ // Because we have animation on the popper it doesn't close immediately doesn't trigger the `tpVisible` event.
142
+ // Tippy is relying on the transitionend event to trigger the `onHidden` callback.
143
+ // https://github.com/atomiks/tippyjs/blob/master/src/dom-utils.ts#L117
144
+ // This event never fires because the popper is removed from the DOM before the transition ends.
145
+ if (this.props.animation) {
146
+ this.onHidden();
147
+ }
148
+ });
149
+ });
150
+ }
151
+ else {
152
+ this.visibilityObserverCleanup?.();
153
+ }
154
+ });
155
+ }
156
+ }
157
+ show() {
158
+ this.instance?.show();
159
+ }
160
+ hide() {
161
+ this.instance?.hide();
162
+ }
163
+ enable() {
164
+ this.instance?.enable();
165
+ }
166
+ disable() {
167
+ this.instance?.disable();
168
+ }
169
+ updateProps(props) {
170
+ this.setProps({ ...this.props, ...props });
171
+ }
172
+ setProps(props) {
173
+ this.props = props;
174
+ this.instance?.setProps(onlyTippyProps(props));
175
+ }
176
+ setStatus() {
177
+ this.enabled ? this.instance?.enable() : this.instance?.disable();
178
+ }
179
+ get host() {
180
+ return this.customHost || this.hostRef.nativeElement;
181
+ }
182
+ get hostWidth() {
183
+ return this.host.getBoundingClientRect().width;
184
+ }
185
+ createInstance() {
186
+ if (!this.content && !coerceBooleanInput(this.useTextContent)) {
187
+ return;
188
+ }
189
+ this.zone.runOutsideAngular(() => {
190
+ this.instance = tippy(this.host, {
191
+ allowHTML: true,
192
+ appendTo: document.body,
193
+ ...(this.globalConfig.zIndexGetter ? { zIndex: this.globalConfig.zIndexGetter() } : {}),
194
+ ...onlyTippyProps(this.globalConfig),
195
+ ...onlyTippyProps(this.props),
196
+ onMount: (instance) => {
197
+ this.isVisible = true;
198
+ this.visibleInternal.next(this.isVisible);
199
+ if (this.visible.observed) {
200
+ this.zone.run(() => this.visible.next(this.isVisible));
201
+ }
202
+ this.useHostWidth && this.listenToHostResize();
203
+ this.globalConfig.onMount?.(instance);
204
+ },
205
+ onCreate: (instance) => {
206
+ instance.popper.classList.add(`tippy-variation-${this.variation || this.globalConfig.defaultVariation}`);
207
+ if (this.className) {
208
+ for (const klass of normalizeClassName(this.className)) {
209
+ instance.popper.classList.add(klass);
210
+ }
211
+ }
212
+ this.globalConfig.onCreate?.(instance);
213
+ if (this.isVisible === true) {
214
+ instance.show();
215
+ }
216
+ },
217
+ onShow: (instance) => {
218
+ instance.reference.setAttribute('data-tippy-open', '');
219
+ this.zone.run(() => {
220
+ const content = this.resolveContent(instance);
221
+ if (isString(content)) {
222
+ instance.setProps({ allowHTML: false });
223
+ if (!content?.trim()) {
224
+ this.disable();
225
+ }
226
+ else {
227
+ this.enable();
228
+ }
229
+ }
230
+ instance.setContent(content);
231
+ this.hideOnEscape && this.handleEscapeButton();
232
+ });
233
+ if (this.useHostWidth) {
234
+ this.setInstanceWidth(instance, this.hostWidth);
235
+ }
236
+ else if (this.popperWidth) {
237
+ this.setInstanceWidth(instance, this.popperWidth);
238
+ }
239
+ this.globalConfig.onShow?.(instance);
240
+ },
241
+ onHide(instance) {
242
+ instance.reference.removeAttribute('data-tippy-open');
243
+ },
244
+ onHidden: (instance) => {
245
+ this.onHidden(instance);
246
+ },
247
+ });
248
+ this.setStatus();
249
+ this.setProps(this.props);
250
+ this.variation === 'contextMenu' && this.handleContextMenu();
251
+ });
252
+ }
253
+ resolveContent(instance) {
254
+ if (!this.viewOptions$ && !isString(this.content)) {
255
+ if (isComponent(this.content)) {
256
+ this.instance.data = this.data;
257
+ this.viewOptions$ = {
258
+ injector: Injector.create({
259
+ providers: [
260
+ {
261
+ provide: TIPPY_REF,
262
+ useValue: this.instance,
263
+ },
264
+ ],
265
+ parent: this.injector,
266
+ }),
267
+ };
268
+ }
269
+ else if (isTemplateRef(this.content)) {
270
+ this.viewOptions$ = {
271
+ context: {
272
+ $implicit: this.hide.bind(this),
273
+ data: this.data,
274
+ },
275
+ };
276
+ }
277
+ }
278
+ this.viewRef = this.viewService.createView(this.content, {
279
+ vcr: this.vcr,
280
+ ...this.viewOptions$,
281
+ });
282
+ // We need to call detectChanges for onPush components to update the content
283
+ if (this.detectChangesComponent && isComponent(this.content)) {
284
+ this.viewRef.detectChanges();
285
+ }
286
+ let content = this.viewRef.getElement();
287
+ if (coerceBooleanInput(this.useTextContent)) {
288
+ content = instance.reference.textContent;
289
+ }
290
+ if (isString(content) && this.globalConfig.beforeRender) {
291
+ content = this.globalConfig.beforeRender(content);
292
+ }
293
+ return content;
294
+ }
295
+ handleContextMenu() {
296
+ fromEvent(this.host, 'contextmenu')
297
+ .pipe(takeUntil(this.destroyed))
298
+ .subscribe((event) => {
299
+ event.preventDefault();
300
+ this.instance.setProps({
301
+ getReferenceClientRect: () => ({
302
+ width: 0,
303
+ height: 0,
304
+ top: event.clientY,
305
+ bottom: event.clientY,
306
+ left: event.clientX,
307
+ right: event.clientX,
308
+ }),
309
+ });
310
+ this.instance.show();
311
+ });
312
+ }
313
+ handleEscapeButton() {
314
+ this.zone.runOutsideAngular(() => {
315
+ fromEvent(document.body, 'keydown')
316
+ .pipe(filter(({ code }) => code === 'Escape'), takeUntil(merge(this.destroyed, this.visibleInternal.pipe(filter((v) => !v)))))
317
+ .subscribe(() => this.hide());
318
+ });
319
+ }
320
+ checkOverflow(isElementOverflow) {
321
+ if (isElementOverflow) {
322
+ if (!this.instance) {
323
+ this.createInstance();
324
+ }
325
+ else {
326
+ this.instance.enable();
327
+ }
328
+ }
329
+ else {
330
+ this.instance?.disable();
331
+ }
332
+ }
333
+ listenToHostResize() {
334
+ dimensionsChanges(this.host)
335
+ .pipe(takeUntil(merge(this.destroyed, this.visibleInternal)))
336
+ .subscribe(() => {
337
+ this.setInstanceWidth(this.instance, this.hostWidth);
338
+ });
339
+ }
340
+ setInstanceWidth(instance, width) {
341
+ const inPixels = coerceCssPixelValue(width);
342
+ instance.popper.style.width = inPixels;
343
+ instance.popper.style.maxWidth = inPixels;
344
+ instance.popper.firstElementChild.style.maxWidth = inPixels;
345
+ }
346
+ get isServerSide() {
347
+ return isPlatformServer(this.platformId);
348
+ }
349
+ onHidden(instance = this.instance) {
350
+ this.destroyView();
351
+ this.isVisible = false;
352
+ this.visibleInternal.next(this.isVisible);
353
+ if (this.visible.observed) {
354
+ this.zone.run(() => this.visible.next(this.isVisible));
355
+ }
356
+ this.globalConfig.onHidden?.(instance);
357
+ }
358
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TippyDirective, deps: [{ token: PLATFORM_ID }, { token: TIPPY_CONFIG }, { token: i0.Injector }, { token: i1.ViewService }, { token: i0.ViewContainerRef }, { token: i0.NgZone }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
359
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.3", type: TippyDirective, isStandalone: true, selector: "[tp]", inputs: { content: ["tp", "content"], appendTo: ["tpAppendTo", "appendTo"], delay: ["tpDelay", "delay"], duration: ["tpDuration", "duration"], hideOnClick: ["tpHideOnClick", "hideOnClick"], interactive: ["tpInteractive", "interactive"], interactiveBorder: ["tpInteractiveBorder", "interactiveBorder"], maxWidth: ["tpMaxWidth", "maxWidth"], offset: ["tpOffset", "offset"], placement: ["tpPlacement", "placement"], popperOptions: ["tpPopperOptions", "popperOptions"], showOnCreate: ["tpShowOnCreate", "showOnCreate"], trigger: ["tpTrigger", "trigger"], triggerTarget: ["tpTriggerTarget", "triggerTarget"], zIndex: ["tpZIndex", "zIndex"], animation: ["tpAnimation", "animation"], useTextContent: ["tpUseTextContent", "useTextContent"], isLazy: ["tpIsLazy", "isLazy"], variation: ["tpVariation", "variation"], isEnabled: ["tpIsEnabled", "isEnabled"], className: ["tpClassName", "className"], onlyTextOverflow: ["tpOnlyTextOverflow", "onlyTextOverflow"], data: ["tpData", "data"], useHostWidth: ["tpUseHostWidth", "useHostWidth"], hideOnEscape: ["tpHideOnEscape", "hideOnEscape"], detectChangesComponent: ["tpDetectChangesComponent", "detectChangesComponent"], popperWidth: ["tpPopperWidth", "popperWidth"], customHost: ["tpHost", "customHost"], isVisible: ["tpIsVisible", "isVisible"] }, outputs: { visible: "tpVisible" }, exportAs: ["tippy"], usesOnChanges: true, ngImport: i0 }); }
360
+ }
361
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TippyDirective, decorators: [{
362
+ type: Directive,
363
+ args: [{
364
+ // eslint-disable-next-line @angular-eslint/directive-selector
365
+ selector: '[tp]',
366
+ exportAs: 'tippy',
367
+ standalone: true,
368
+ }]
369
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
370
+ type: Inject,
371
+ args: [PLATFORM_ID]
372
+ }] }, { type: undefined, decorators: [{
373
+ type: Inject,
374
+ args: [TIPPY_CONFIG]
375
+ }] }, { type: i0.Injector }, { type: i1.ViewService }, { type: i0.ViewContainerRef }, { type: i0.NgZone }, { type: i0.ElementRef }]; }, propDecorators: { content: [{
376
+ type: Input,
377
+ args: ['tp']
378
+ }], appendTo: [{
379
+ type: Input,
380
+ args: ['tpAppendTo']
381
+ }], delay: [{
382
+ type: Input,
383
+ args: ['tpDelay']
384
+ }], duration: [{
385
+ type: Input,
386
+ args: ['tpDuration']
387
+ }], hideOnClick: [{
388
+ type: Input,
389
+ args: ['tpHideOnClick']
390
+ }], interactive: [{
391
+ type: Input,
392
+ args: ['tpInteractive']
393
+ }], interactiveBorder: [{
394
+ type: Input,
395
+ args: ['tpInteractiveBorder']
396
+ }], maxWidth: [{
397
+ type: Input,
398
+ args: ['tpMaxWidth']
399
+ }], offset: [{
400
+ type: Input,
401
+ args: ['tpOffset']
402
+ }], placement: [{
403
+ type: Input,
404
+ args: ['tpPlacement']
405
+ }], popperOptions: [{
406
+ type: Input,
407
+ args: ['tpPopperOptions']
408
+ }], showOnCreate: [{
409
+ type: Input,
410
+ args: ['tpShowOnCreate']
411
+ }], trigger: [{
412
+ type: Input,
413
+ args: ['tpTrigger']
414
+ }], triggerTarget: [{
415
+ type: Input,
416
+ args: ['tpTriggerTarget']
417
+ }], zIndex: [{
418
+ type: Input,
419
+ args: ['tpZIndex']
420
+ }], animation: [{
421
+ type: Input,
422
+ args: ['tpAnimation']
423
+ }], useTextContent: [{
424
+ type: Input,
425
+ args: ['tpUseTextContent']
426
+ }], isLazy: [{
427
+ type: Input,
428
+ args: ['tpIsLazy']
429
+ }], variation: [{
430
+ type: Input,
431
+ args: ['tpVariation']
432
+ }], isEnabled: [{
433
+ type: Input,
434
+ args: ['tpIsEnabled']
435
+ }], className: [{
436
+ type: Input,
437
+ args: ['tpClassName']
438
+ }], onlyTextOverflow: [{
439
+ type: Input,
440
+ args: ['tpOnlyTextOverflow']
441
+ }], data: [{
442
+ type: Input,
443
+ args: ['tpData']
444
+ }], useHostWidth: [{
445
+ type: Input,
446
+ args: ['tpUseHostWidth']
447
+ }], hideOnEscape: [{
448
+ type: Input,
449
+ args: ['tpHideOnEscape']
450
+ }], detectChangesComponent: [{
451
+ type: Input,
452
+ args: ['tpDetectChangesComponent']
453
+ }], popperWidth: [{
454
+ type: Input,
455
+ args: ['tpPopperWidth']
456
+ }], customHost: [{
457
+ type: Input,
458
+ args: ['tpHost']
459
+ }], isVisible: [{
460
+ type: Input,
461
+ args: ['tpIsVisible']
462
+ }], visible: [{
463
+ type: Output,
464
+ args: ['tpVisible']
465
+ }] } });
466
+ function isChanged(key, changes) {
467
+ return key in changes;
468
+ }
469
+ export function coerceBooleanInput(value) {
470
+ return value != null && `${value}` !== 'false';
471
+ }
472
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmduZWF0L2hlbGlwb3BwZXIvc3JjL2xpYi90aXBweS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBS0wsTUFBTSxFQUNOLFdBQVcsR0FFWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEtBQW1CLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5RCxPQUFPLEVBQVcsV0FBVyxFQUFFLFFBQVEsRUFBRSxhQUFhLEVBQXFDLE1BQU0sa0JBQWtCLENBQUM7QUFFcEgsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixpQkFBaUIsRUFDakIsTUFBTSxFQUNOLGtCQUFrQixFQUNsQixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLGVBQWUsR0FDaEIsTUFBTSxTQUFTLENBQUM7QUFDakIsT0FBTyxFQUFhLFlBQVksRUFBRSxTQUFTLEVBQTBDLE1BQU0sZUFBZSxDQUFDOzs7QUFRM0csTUFBTSxPQUFPLGNBQWM7SUFLekIsSUFBeUIsUUFBUSxDQUFDLFFBQWdDO1FBQ2hFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFrREQsWUFDaUMsVUFBa0IsRUFDakIsWUFBeUIsRUFDL0MsUUFBa0IsRUFDbEIsV0FBd0IsRUFDeEIsR0FBcUIsRUFDckIsSUFBWSxFQUNaLE9BQW1CO1FBTkUs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QW1CLEdBQVksRUFBRSxPQUFVO0lBQzNELE9BQU8sR0FBRyxJQUFJLE9BQU8sQ0FBQztBQUN4QixDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEtBQVU7SUFDM0MsT0FBTyxLQUFLLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLEtBQUssT0FBTyxDQUFDO0FBQ2pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBEaXJlY3RpdmUsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5qZWN0LFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBQTEFURk9STV9JRCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc1BsYXRmb3JtU2VydmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB0aXBweSwgeyBJbnN0YW5jZSB9IGZyb20gJ3RpcHB5LmpzJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb250ZW50LCBpc0NvbXBvbmVudCwgaXNTdHJpbmcsIGlzVGVtcGxhdGVSZWYsIFZpZXdPcHRpb25zLCBWaWV3UmVmLCBWaWV3U2VydmljZSB9IGZyb20gJ0BuZ25lYXQvb3ZlcnZpZXcnO1xuXG5pbXBvcnQge1xuICBjb2VyY2VDc3NQaXhlbFZhbHVlLFxuICBkaW1lbnNpb25zQ2hhbmdlcyxcbiAgaW5WaWV3LFxuICBub3JtYWxpemVDbGFzc05hbWUsXG4gIG9ic2VydmVWaXNpYmlsaXR5LFxuICBvbmx5VGlwcHlQcm9wcyxcbiAgb3ZlcmZsb3dDaGFuZ2VzLFxufSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IE5nQ2hhbmdlcywgVElQUFlfQ09ORklHLCBUSVBQWV9SRUYsIFRpcHB5Q29uZmlnLCBUaXBweUluc3RhbmNlLCBUaXBweVByb3BzIH0gZnJvbSAnLi90aXBweS50eXBlcyc7XG5cbkBEaXJlY3RpdmUoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2RpcmVjdGl2ZS1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1t0cF0nLFxuICBleHBvcnRBczogJ3RpcHB5JyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVGlwcHlEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25Jbml0IHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3VzZVRleHRDb250ZW50OiBib29sZWFuIHwgJyc7XG5cbiAgQElucHV0KCd0cCcpIGNvbnRlbnQ6IENvbnRlbnQgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gIEBJbnB1dCgndHBBcHBlbmRUbycpIHNldCBhcHBlbmRUbyhhcHBlbmRUbzogVGlwcHlQcm9wc1snYXBwZW5kVG8nXSkge1xuICAgIHRoaXMudXBkYXRlUHJvcHMoeyBhcHBlbmRUbyB9KTtcbiAgfVxuXG4gIEBJbnB1dCgndHBEZWxheScpIGRlbGF5OiBUaXBweVByb3BzWydkZWxheSddO1xuICBASW5wdXQoJ3RwRHVyYXRpb24nKSBkdXJhdGlvbjogVGlwcHlQcm9wc1snZHVyYXRpb24nXTtcbiAgQElucHV0KCd0cEhpZGVPbkNsaWNrJykgaGlkZU9uQ2xpY2s6IFRpcHB5UHJvcHNbJ2hpZGVPbkNsaWNrJ107XG4gIEBJbnB1dCgndHBJbnRlcmFjdGl2ZScpIGludGVyYWN0aXZlOiBUaXBweVByb3BzWydpbnRlcmFjdGl2ZSddO1xuICBASW5wdXQoJ3RwSW50ZXJhY3RpdmVCb3JkZXInKSBpbnRlcmFjdGl2ZUJvcmRlcjogVGlwcHlQcm9wc1snaW50ZXJhY3RpdmVCb3JkZXInXTtcbiAgQElucHV0KCd0cE1heFdpZHRoJykgbWF4V2lkdGg6IFRpcHB5UHJvcHNbJ21heFdpZHRoJ107XG4gIEBJbnB1dCgndHBPZmZzZXQnKSBvZmZzZXQ6IFRpcHB5UHJvcHNbJ29mZnNldCddO1xuICBASW5wdXQoJ3RwUGxhY2VtZW50JykgcGxhY2VtZW50OiBUaXBweVByb3BzWydwbGFjZW1lbnQnXTtcbiAgQElucHV0KCd0cFBvcHBlck9wdGlvbnMnKSBwb3BwZXJPcHRpb25zOiBUaXBweVByb3BzWydwb3BwZXJPcHRpb25zJ107XG4gIEBJbnB1dCgndHBTaG93T25DcmVhdGUnKSBzaG93T25DcmVhdGU6IFRpcHB5UHJvcHNbJ3Nob3dPbkNyZWF0ZSddO1xuICBASW5wdXQoJ3RwVHJpZ2dlcicpIHRyaWdnZXI6IFRpcHB5UHJvcHNbJ3RyaWdnZXInXTtcbiAgQElucHV0KCd0cFRyaWdnZXJUYXJnZXQnKSB0cmlnZ2VyVGFyZ2V0OiBUaXBweVByb3BzWyd0cmlnZ2VyVGFyZ2V0J107XG4gIEBJbnB1dCgndHBaSW5kZXgnKSB6SW5kZXg6IFRpcHB5UHJvcHNbJ3pJbmRleCddO1xuICBASW5wdXQoJ3RwQW5pbWF0aW9uJykgYW5pbWF0aW9uOiBUaXBweVByb3BzWydhbmltYXRpb24nXTtcbiAgQElucHV0KCd0cFVzZVRleHRDb250ZW50JykgdXNlVGV4dENvbnRlbnQ6IGJvb2xlYW47XG4gIEBJbnB1dCgndHBJc0xhenknKSBpc0xhenk6IGJvb2xlYW47XG4gIEBJbnB1dCgndHBWYXJpYXRpb24nKSB2YXJpYXRpb246IHN0cmluZztcbiAgQElucHV0KCd0cElzRW5hYmxlZCcpIGlzRW5hYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCd0cENsYXNzTmFtZScpIGNsYXNzTmFtZTogc3RyaW5nIHwgc3RyaW5nW107XG4gIEBJbnB1dCgndHBPbmx5VGV4dE92ZXJmbG93Jykgb25seVRleHRPdmVyZmxvdyA9IGZhbHNlO1xuICBASW5wdXQoJ3RwRGF0YScpIGRhdGE6IGFueTtcbiAgQElucHV0KCd0cFVzZUhvc3RXaWR0aCcpIHVzZUhvc3RXaWR0aCA9IGZhbHNlO1xuICBASW5wdXQoJ3RwSGlkZU9uRXNjYXBlJykgaGlkZU9uRXNjYXBlID0gZmFsc2U7XG4gIEBJbnB1dCgndHBEZXRlY3RDaGFuZ2VzQ29tcG9uZW50JykgZGV0ZWN0Q2hhbmdlc0NvbXBvbmVudCA9IHRydWU7XG4gIEBJbnB1dCgndHBQb3BwZXJXaWR0aCcpIHBvcHBlcldpZHRoOiBudW1iZXIgfCBzdHJpbmc7XG4gIEBJbnB1dCgndHBIb3N0JykgY3VzdG9tSG9zdDogSFRNTEVsZW1lbnQ7XG4gIEBJbnB1dCgndHBJc1Zpc2libGUnKSBpc1Zpc2libGUgPSBmYWxzZTtcblxuICBAT3V0cHV0KCd0cFZpc2libGUnKSB2aXNpYmxlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIHByb3RlY3RlZCBpbnN0YW5jZTogVGlwcHlJbnN0YW5jZTtcbiAgcHJvdGVjdGVkIHZpZXdSZWY6IFZpZXdSZWY7XG4gIHByb3RlY3RlZCBkZXN0cm95ZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcm90ZWN0ZWQgcHJvcHM6IFBhcnRpYWw8VGlwcHlDb25maWc+O1xuICBwcm90ZWN0ZWQgZW5hYmxlZCA9IHRydWU7XG4gIHByb3RlY3RlZCB2YXJpYXRpb25EZWZpbmVkID0gZmFsc2U7XG4gIHByb3RlY3RlZCB2aWV3T3B0aW9ucyQ6IFZpZXdPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXZSBoYWQgdXNlIGB2aXNpYmxlYCBldmVudCBlbWl0dGVyIHByZXZpb3VzbHkgYXMgYSBgdGFrZVVudGlsYCBzdWJzY3JpYmVyIGluIG11bHRpcGxlIHBsYWNlc1xuICAgKiB3aXRoaW4gdGhlIGRpcmVjdGl2ZS5cbiAgICogVGhpcyBpcyBmb3IgaW50ZXJuYWwgdXNlIG9ubHk7IHRodXMgd2UgZG9uJ3QgaGF2ZSB0byBkZWFsIHdpdGggdGhlIGB2aXNpYmxlYCBldmVudCBlbWl0dGVyXG4gICAqIGFuZCB0cmlnZ2VyIGNoYW5nZSBkZXRlY3Rpb25zIG9ubHkgd2hlbiB0aGUgYHZpc2libGVgIGV2ZW50IGlzIGJlaW5nIGxpc3RlbmVkIG91dHNpZGVcbiAgICogaW4gdGhlIHRlbXBsYXRlIChgPGJ1dHRvbiBbdGlwcHldPVwiLi4uXCIgKHZpc2libGUpPVwiLi4uXCI+PC9idXR0b24+YCkuXG4gICAqL1xuICBwcm90ZWN0ZWQgdmlzaWJsZUludGVybmFsID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcbiAgcHJpdmF0ZSB2aXNpYmlsaXR5T2JzZXJ2ZXJDbGVhbnVwOiAoKSA9PiB2b2lkIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoUExBVEZPUk1fSUQpIHByb3RlY3RlZCBwbGF0Zm9ybUlkOiBzdHJpbmcsXG4gICAgQEluamVjdChUSVBQWV9DT05GSUcpIHByb3RlY3RlZCBnbG9iYWxDb25maWc6IFRpcHB5Q29uZmlnLFxuICAgIHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJvdGVjdGVkIHZpZXdTZXJ2aWNlOiBWaWV3U2VydmljZSxcbiAgICBwcm90ZWN0ZWQgdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByb3RlY3RlZCB6b25lOiBOZ1pvbmUsXG4gICAgcHJvdGVjdGVkIGhvc3RSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IE5nQ2hhbmdlczxUaXBweURpcmVjdGl2ZT4pIHtcbiAgICBpZiAodGhpcy5pc1NlcnZlclNpZGUpIHJldHVybjtcblxuICAgIGxldCBwcm9wczogUGFydGlhbDxUaXBweUNvbmZpZz4gPSBPYmplY3Qua2V5cyhjaGFuZ2VzKS5yZWR1Y2UoKGFjYywgY2hhbmdlKSA9PiB7XG4gICAgICBpZiAoY2hhbmdlID09PSAnaXNWaXNpYmxlJykgcmV0dXJuIGFjYztcblxuICAgICAgYWNjW2NoYW5nZV0gPSBjaGFuZ2VzW2NoYW5nZV0uY3VycmVudFZhbHVlO1xuXG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcblxuICAgIGxldCB2YXJpYXRpb246IHN0cmluZztcblxuICAgIGlmIChpc0NoYW5nZWQ8TmdDaGFuZ2VzPFRpcHB5RGlyZWN0aXZlPj4oJ3ZhcmlhdGlvbicsIGNoYW5nZXMpKSB7XG4gICAgICB2YXJpYXRpb24gPSBjaGFuZ2VzLnZhcmlhdGlvbi5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnZhcmlhdGlvbkRlZmluZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoIXRoaXMudmFyaWF0aW9uRGVmaW5lZCkge1xuICAgICAgdmFyaWF0aW9uID0gdGhpcy5nbG9iYWxDb25maWcuZGVmYXVsdFZhcmlhdGlvbjtcbiAgICAgIHRoaXMudmFyaWF0aW9uRGVmaW5lZCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhcmlhdGlvbikge1xuICAgICAgcHJvcHMgPSB7XG4gICAgICAgIC4uLnRoaXMuZ2xvYmFsQ29uZmlnLnZhcmlhdGlvbnNbdmFyaWF0aW9uXSxcbiAgICAgICAgLi4ucHJvcHMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpc0NoYW5nZWQ8TmdDaGFuZ2VzPFRpcHB5RGlyZWN0aXZlPj4oJ2lzRW5hYmxlZCcsIGNoYW5nZXMpKSB7XG4gICAgICB0aGlzLmVuYWJsZWQgPSBjaGFuZ2VzLmlzRW5hYmxlZC5jdXJyZW50VmFsdWU7XG4gICAgICB0aGlzLnNldFN0YXR1cygpO1xuICAgIH1cblxuICAgIGlmIChpc0NoYW5nZWQ8TmdDaGFuZ2VzPFRpcHB5RGlyZWN0aXZlPj4oJ2lzVmlzaWJsZScsIGNoYW5nZXMpKSB7XG4gICAgICB0aGlzLmlzVmlzaWJsZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVQcm9wcyhwcm9wcyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy51c2VIb3N0V2lkdGgpIHtcbiAgICAgIHRoaXMucHJvcHMubWF4V2lkdGggPSB0aGlzLmhvc3RXaWR0aDtcbiAgICB9XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKHRoaXMuaXNTZXJ2ZXJTaWRlKSByZXR1cm47XG5cbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNMYXp5KSB7XG4gICAgICAgIGlmICh0aGlzLm9ubHlUZXh0T3ZlcmZsb3cpIHtcbiAgICAgICAgICBpblZpZXcodGhpcy5ob3N0KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiBvdmVyZmxvd0NoYW5nZXModGhpcy5ob3N0KSksXG4gICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGlzRWxlbWVudE92ZXJmbG93KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tPdmVyZmxvdyhpc0VsZW1lbnRPdmVyZmxvdyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpblZpZXcodGhpcy5ob3N0KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUluc3RhbmNlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLm9ubHlUZXh0T3ZlcmZsb3cpIHtcbiAgICAgICAgb3ZlcmZsb3dDaGFuZ2VzKHRoaXMuaG9zdClcbiAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGlzRWxlbWVudE92ZXJmbG93KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrT3ZlcmZsb3coaXNFbGVtZW50T3ZlcmZsb3cpO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVJbnN0YW5jZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuaW5zdGFuY2U/LmRlc3Ryb3koKTtcbiAgICB0aGlzLmRlc3Ryb3lWaWV3KCk7XG4gICAgdGhpcy52aXNpYmlsaXR5T2JzZXJ2ZXJDbGVhbnVwPy4oKTtcbiAgfVxuXG4gIGRlc3Ryb3lWaWV3KCkge1xuICAgIHRoaXMudmlld09wdGlvbnMkID0gbnVsbDtcbiAgICB0aGlzLnZpZXdSZWY/LmRlc3Ryb3koKTtcbiAgICB0aGlzLnZpZXdSZWYgPSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCB3aGVuIHlvdSBhcHBlbmQgdG8gYW4gZWxlbWVudCB0aGF0IHlvdSBtaWdodCByZW1vdmUgZnJvbSB0aGUgRE9NLlxuICAgKiBJbiBzdWNoIGNhc2VzIHdlIHdhbnQgdG8gaGlkZSB0aGUgdG9vbHRpcCBhbmQgbGV0IGl0IGdvIHRocm91Z2ggdGhlIGRlc3Ryb3kgbGlmZWN5Y2xlLlxuICAgKiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhdmUgYSBncmlkIHJvdyB3aXRoIGFuIGVsZW1lbnQgdGhhdCB5b3UgdG9nZ2xlIHVzaW5nIHRoZSBkaXNwbGF5IENTUyBwcm9wZXJ0eSBvbiBob3Zlci5cbiAgICovXG4gIG9ic2VydmVIb3N0VmlzaWJpbGl0eSgpIHtcbiAgICBpZiAodGhpcy5pc1NlcnZlclNpZGUpIHJldHVybjtcbiAgICAvLyBXZSBkb24ndCB3YW50IHRvIG9ic2VydmUgdGhlIGhvc3QgdmlzaWJpbGl0eSBpZiB3ZSBhcmUgYXBwZW5kaW5nIHRvIHRoZSBib2R5LlxuICAgIGlmICh0aGlzLnByb3BzLmFwcGVuZFRvICYmIHRoaXMucHJvcHMuYXBwZW5kVG8gIT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICAgIHRoaXMudmlzaWJpbGl0eU9ic2VydmVyQ2xlYW51cD8uKCk7XG4gICAgICByZXR1cm4gdGhpcy52aXNpYmxlSW50ZXJuYWxcbiAgICAgICAgLmFzT2JzZXJ2YWJsZSgpXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCkpXG4gICAgICAgIC5zdWJzY3JpYmUoKGlzVmlzaWJsZSkgPT4ge1xuICAgICAgICAgIGlmIChpc1Zpc2libGUpIHtcbiAgICAgICAgICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eU9ic2VydmVyQ2xlYW51cCA9IG9ic2VydmVWaXNpYmlsaXR5KHRoaXMuaW5zdGFuY2UucmVmZXJlbmNlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICAgICAgLy8gQmVjYXVzZSB3ZSBoYXZlIGFuaW1hdGlvbiBvbiB0aGUgcG9wcGVyIGl0IGRvZXNuJ3QgY2xvc2UgaW1tZWRpYXRlbHkgZG9lc24ndCB0cmlnZ2VyIHRoZSBgdHBWaXNpYmxlYCBldmVudC5cbiAgICAgICAgICAgICAgICAvLyBUaXBweSBpcyByZWx5aW5nIG9uIHRoZSB0cmFuc2l0aW9uZW5kIGV2ZW50IHRvIHRyaWdnZXIgdGhlIGBvbkhpZGRlbmAgY2FsbGJhY2suXG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2F0b21pa3MvdGlwcHlqcy9ibG9iL21hc3Rlci9zcmMvZG9tLXV0aWxzLnRzI0wxMTdcbiAgICAgICAgICAgICAgICAvLyBUaGlzIGV2ZW50IG5ldmVyIGZpcmVzIGJlY2F1c2UgdGhlIHBvcHBlciBpcyByZW1vdmVkIGZyb20gdGhlIERPTSBiZWZvcmUgdGhlIHRyYW5zaXRpb24gZW5kcy5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5hbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25IaWRkZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eU9ic2VydmVyQ2xlYW51cD8uKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzaG93KCkge1xuICAgIHRoaXMuaW5zdGFuY2U/LnNob3coKTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5pbnN0YW5jZT8uaGlkZSgpO1xuICB9XG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuaW5zdGFuY2U/LmVuYWJsZSgpO1xuICB9XG5cbiAgZGlzYWJsZSgpIHtcbiAgICB0aGlzLmluc3RhbmNlPy5kaXNhYmxlKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgdXBkYXRlUHJvcHMocHJvcHM6IFBhcnRpYWw8VGlwcHlDb25maWc+KSB7XG4gICAgdGhpcy5zZXRQcm9wcyh7IC4uLnRoaXMucHJvcHMsIC4uLnByb3BzIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFByb3BzKHByb3BzOiBQYXJ0aWFsPFRpcHB5Q29uZmlnPikge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmluc3RhbmNlPy5zZXRQcm9wcyhvbmx5VGlwcHlQcm9wcyhwcm9wcykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFN0YXR1cygpIHtcbiAgICB0aGlzLmVuYWJsZWQgPyB0aGlzLmluc3RhbmNlPy5lbmFibGUoKSA6IHRoaXMuaW5zdGFuY2U/LmRpc2FibGUoKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaG9zdCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuY3VzdG9tSG9zdCB8fCB0aGlzLmhvc3RSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIHByb3RlY3RlZCBnZXQgaG9zdFdpZHRoKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuaG9zdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVJbnN0YW5jZSgpIHtcbiAgICBpZiAoIXRoaXMuY29udGVudCAmJiAhY29lcmNlQm9vbGVhbklucHV0KHRoaXMudXNlVGV4dENvbnRlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMuaW5zdGFuY2UgPSB0aXBweSh0aGlzLmhvc3QsIHtcbiAgICAgICAgYWxsb3dIVE1MOiB0cnVlLFxuICAgICAgICBhcHBlbmRUbzogZG9jdW1lbnQuYm9keSxcbiAgICAgICAgLi4uKHRoaXMuZ2xvYmFsQ29uZmlnLnpJbmRleEdldHRlciA/IHsgekluZGV4OiB0aGlzLmdsb2JhbENvbmZpZy56SW5kZXhHZXR0ZXIoKSB9IDoge30pLFxuICAgICAgICAuLi5vbmx5VGlwcHlQcm9wcyh0aGlzLmdsb2JhbENvbmZpZyksXG4gICAgICAgIC4uLm9ubHlUaXBweVByb3BzKHRoaXMucHJvcHMpLFxuICAgICAgICBvbk1vdW50OiAoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy52aXNpYmxlSW50ZXJuYWwubmV4dCh0aGlzLmlzVmlzaWJsZSk7XG4gICAgICAgICAgaWYgKHRoaXMudmlzaWJsZS5vYnNlcnZlZCkge1xuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB0aGlzLnZpc2libGUubmV4dCh0aGlzLmlzVmlzaWJsZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVzZUhvc3RXaWR0aCAmJiB0aGlzLmxpc3RlblRvSG9zdFJlc2l6ZSgpO1xuICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLm9uTW91bnQ/LihpbnN0YW5jZSk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uQ3JlYXRlOiAoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICBpbnN0YW5jZS5wb3BwZXIuY2xhc3NMaXN0LmFkZChgdGlwcHktdmFyaWF0aW9uLSR7dGhpcy52YXJpYXRpb24gfHwgdGhpcy5nbG9iYWxDb25maWcuZGVmYXVsdFZhcmlhdGlvbn1gKTtcbiAgICAgICAgICBpZiAodGhpcy5jbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2xhc3Mgb2Ygbm9ybWFsaXplQ2xhc3NOYW1lKHRoaXMuY2xhc3NOYW1lKSkge1xuICAgICAgICAgICAgICBpbnN0YW5jZS5wb3BwZXIuY2xhc3NMaXN0LmFkZChrbGFzcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLm9uQ3JlYXRlPy4oaW5zdGFuY2UpO1xuICAgICAgICAgIGlmICh0aGlzLmlzVmlzaWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgaW5zdGFuY2Uuc2hvdygpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25TaG93OiAoaW5zdGFuY2UpID0+IHtcbiAgICAgICAgICBpbnN0YW5jZS5yZWZlcmVuY2Uuc2V0QXR0cmlidXRlKCdkYXRhLXRpcHB5LW9wZW4nLCAnJyk7XG4gICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5yZXNvbHZlQ29udGVudChpbnN0YW5jZSk7XG4gICAgICAgICAgICBpZiAoaXNTdHJpbmcoY29udGVudCkpIHtcbiAgICAgICAgICAgICAgaW5zdGFuY2Uuc2V0UHJvcHMoeyBhbGxvd0hUTUw6IGZhbHNlIH0pO1xuXG4gICAgICAgICAgICAgIGlmICghY29udGVudD8udHJpbSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNhYmxlKCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpbnN0YW5jZS5zZXRDb250ZW50KGNvbnRlbnQpO1xuICAgICAgICAgICAgdGhpcy5oaWRlT25Fc2NhcGUgJiYgdGhpcy5oYW5kbGVFc2NhcGVCdXR0b24oKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBpZiAodGhpcy51c2VIb3N0V2lkdGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5zdGFuY2VXaWR0aChpbnN0YW5jZSwgdGhpcy5ob3N0V2lkdGgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wb3BwZXJXaWR0aCkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnN0YW5jZVdpZHRoKGluc3RhbmNlLCB0aGlzLnBvcHBlcldpZHRoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5nbG9iYWxDb25maWcub25TaG93Py4oaW5zdGFuY2UpO1xuICAgICAgICB9LFxuICAgICAgICBvbkhpZGUoaW5zdGFuY2UpIHtcbiAgICAgICAgICBpbnN0YW5jZS5yZWZlcmVuY2UucmVtb3ZlQXR0cmlidXRlKCdkYXRhLXRpcHB5LW9wZW4nKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25IaWRkZW46IChpbnN0YW5jZSkgPT4ge1xuICAgICAgICAgIHRoaXMub25IaWRkZW4oaW5zdGFuY2UpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc2V0U3RhdHVzKCk7XG4gICAgICB0aGlzLnNldFByb3BzKHRoaXMucHJvcHMpO1xuXG4gICAgICB0aGlzLnZhcmlhdGlvbiA9PT0gJ2NvbnRleHRNZW51JyAmJiB0aGlzLmhhbmRsZUNvbnRleHRNZW51KCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVzb2x2ZUNvbnRlbnQoaW5zdGFuY2U6IFRpcHB5SW5zdGFuY2UpIHtcbiAgICBpZiAoIXRoaXMudmlld09wdGlvbnMkICYmICFpc1N0cmluZyh0aGlzLmNvbnRlbnQpKSB7XG4gICAgICBpZiAoaXNDb21wb25lbnQodGhpcy5jb250ZW50KSkge1xuICAgICAgICB0aGlzLmluc3RhbmNlLmRhdGEgPSB0aGlzLmRhdGE7XG4gICAgICAgIHRoaXMudmlld09wdGlvbnMkID0ge1xuICAgICAgICAgIGluamVjdG9yOiBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBUSVBQWV9SRUYsXG4gICAgICAgICAgICAgICAgdXNlVmFsdWU6IHRoaXMuaW5zdGFuY2UsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgcGFyZW50OiB0aGlzLmluamVjdG9yLFxuICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChpc1RlbXBsYXRlUmVmKHRoaXMuY29udGVudCkpIHtcbiAgICAgICAgdGhpcy52aWV3T3B0aW9ucyQgPSB7XG4gICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgJGltcGxpY2l0OiB0aGlzLmhpZGUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmlld1JlZiA9IHRoaXMudmlld1NlcnZpY2UuY3JlYXRlVmlldyh0aGlzLmNvbnRlbnQsIHtcbiAgICAgIHZjcjogdGhpcy52Y3IsXG4gICAgICAuLi50aGlzLnZpZXdPcHRpb25zJCxcbiAgICB9KTtcblxuICAgIC8vIFdlIG5lZWQgdG8gY2FsbCBkZXRlY3RDaGFuZ2VzIGZvciBvblB1c2ggY29tcG9uZW50cyB0byB1cGRhdGUgdGhlIGNvbnRlbnRcbiAgICBpZiAodGhpcy5kZXRlY3RDaGFuZ2VzQ29tcG9uZW50ICYmIGlzQ29tcG9uZW50KHRoaXMuY29udGVudCkpIHtcbiAgICAgIHRoaXMudmlld1JlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLnZpZXdSZWYuZ2V0RWxlbWVudCgpO1xuXG4gICAgaWYgKGNvZXJjZUJvb2xlYW5JbnB1dCh0aGlzLnVzZVRleHRDb250ZW50KSkge1xuICAgICAgY29udGVudCA9IGluc3RhbmNlLnJlZmVyZW5jZS50ZXh0Q29udGVudDtcbiAgICB9XG5cbiAgICBpZiAoaXNTdHJpbmcoY29udGVudCkgJiYgdGhpcy5nbG9iYWxDb25maWcuYmVmb3JlUmVuZGVyKSB7XG4gICAgICBjb250ZW50ID0gdGhpcy5nbG9iYWxDb25maWcuYmVmb3JlUmVuZGVyKGNvbnRlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUNvbnRleHRNZW51KCkge1xuICAgIGZyb21FdmVudCh0aGlzLmhvc3QsICdjb250ZXh0bWVudScpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpKVxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICB0aGlzLmluc3RhbmNlLnNldFByb3BzKHtcbiAgICAgICAgICBnZXRSZWZlcmVuY2VDbGllbnRSZWN0OiAoKSA9PlxuICAgICAgICAgICAgKHtcbiAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgdG9wOiBldmVudC5jbGllbnRZLFxuICAgICAgICAgICAgICBib3R0b206IGV2ZW50LmNsaWVudFksXG4gICAgICAgICAgICAgIGxlZnQ6IGV2ZW50LmNsaWVudFgsXG4gICAgICAgICAgICAgIHJpZ2h0OiBldmVudC5jbGllbnRYLFxuICAgICAgICAgICAgfSBhcyBET01SZWN0UmVhZE9ubHkpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmluc3RhbmNlLnNob3coKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZUVzY2FwZUJ1dHRvbigpOiB2b2lkIHtcbiAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgZnJvbUV2ZW50KGRvY3VtZW50LmJvZHksICdrZXlkb3duJylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgZmlsdGVyKCh7IGNvZGUgfTogS2V5Ym9hcmRFdmVudCkgPT4gY29kZSA9PT0gJ0VzY2FwZScpLFxuICAgICAgICAgIHRha2VVbnRpbChtZXJnZSh0aGlzLmRlc3Ryb3llZCwgdGhpcy52aXNpYmxlSW50ZXJuYWwucGlwZShmaWx0ZXIoKHYpID0+ICF2KSkpKVxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5oaWRlKCkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNoZWNrT3ZlcmZsb3coaXNFbGVtZW50T3ZlcmZsb3c6IGJvb2xlYW4pIHtcbiAgICBpZiAoaXNFbGVtZW50T3ZlcmZsb3cpIHtcbiAgICAgIGlmICghdGhpcy5pbnN0YW5jZSkge1xuICAgICAgICB0aGlzLmNyZWF0ZUluc3RhbmNlKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmluc3RhbmNlLmVuYWJsZSgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluc3RhbmNlPy5kaXNhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGxpc3RlblRvSG9zdFJlc2l6ZSgpIHtcbiAgICBkaW1lbnNpb25zQ2hhbmdlcyh0aGlzLmhvc3QpXG4gICAgICAucGlwZSh0YWtlVW50aWwobWVyZ2UodGhpcy5kZXN0cm95ZWQsIHRoaXMudmlzaWJsZUludGVybmFsKSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRJbnN0YW5jZVdpZHRoKHRoaXMuaW5zdGFuY2UsIHRoaXMuaG9zdFdpZHRoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldEluc3RhbmNlV2lkdGgoaW5zdGFuY2U6IEluc3RhbmNlLCB3aWR0aDogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgY29uc3QgaW5QaXhlbHMgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHdpZHRoKTtcbiAgICBpbnN0YW5jZS5wb3BwZXIuc3R5bGUud2lkdGggPSBpblBpeGVscztcbiAgICBpbnN0YW5jZS5wb3BwZXIuc3R5bGUubWF4V2lkdGggPSBpblBpeGVscztcbiAgICAoaW5zdGFuY2UucG9wcGVyLmZpcnN0RWxlbWVudENoaWxkIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5tYXhXaWR0aCA9IGluUGl4ZWxzO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgaXNTZXJ2ZXJTaWRlKCkge1xuICAgIHJldHVybiBpc1BsYXRmb3JtU2VydmVyKHRoaXMucGxhdGZvcm1JZCk7XG4gIH1cblxuICBwcml2YXRlIG9uSGlkZGVuKGluc3RhbmNlOiBUaXBweUluc3RhbmNlID0gdGhpcy5pbnN0YW5jZSkge1xuICAgIHRoaXMuZGVzdHJveVZpZXcoKTtcbiAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgIHRoaXMudmlzaWJsZUludGVybmFsLm5leHQodGhpcy5pc1Zpc2libGUpO1xuICAgIGlmICh0aGlzLnZpc2libGUub2JzZXJ2ZWQpIHtcbiAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4gdGhpcy52aXNpYmxlLm5leHQodGhpcy5pc1Zpc2libGUpKTtcbiAgICB9XG4gICAgdGhpcy5nbG9iYWxDb25maWcub25IaWRkZW4/LihpbnN0YW5jZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNDaGFuZ2VkPFQgZXh0ZW5kcyBvYmplY3Q+KGtleToga2V5b2YgVCwgY2hhbmdlczogVCkge1xuICByZXR1cm4ga2V5IGluIGNoYW5nZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb2VyY2VCb29sZWFuSW5wdXQodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBgJHt2YWx1ZX1gICE9PSAnZmFsc2UnO1xufVxuIl19
@@ -68,14 +68,14 @@ export class TippyService {
68
68
  };
69
69
  return tippy(host, config);
70
70
  }
71
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TippyService, deps: [{ token: TIPPY_CONFIG }, { token: i1.ViewService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); }
72
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TippyService, providedIn: 'root' }); }
71
73
  }
72
- TippyService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: TippyService, deps: [{ token: TIPPY_CONFIG }, { token: i1.ViewService }, { token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
73
- TippyService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: TippyService, providedIn: 'root' });
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.1", ngImport: i0, type: TippyService, decorators: [{
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.3", ngImport: i0, type: TippyService, decorators: [{
75
75
  type: Injectable,
76
76
  args: [{ providedIn: 'root' }]
77
77
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
78
78
  type: Inject,
79
79
  args: [TIPPY_CONFIG]
80
80
  }] }, { type: i1.ViewService }, { type: i0.Injector }]; } });
81
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nbmVhdC9oZWxpcG9wcGVyL3NyYy9saWIvdGlwcHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFlLE1BQU0sa0JBQWtCLENBQUM7QUFFM0UsT0FBTyxFQUF3QyxZQUFZLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7OztBQUc3RCxNQUFNLE9BQU8sWUFBWTtJQUN2QixZQUNnQyxZQUF5QixFQUMvQyxJQUFpQixFQUNqQixRQUFrQjtRQUZJLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQy9DLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUN6QixDQUFDO0lBRUosTUFBTSxDQUFvQixJQUFhLEVBQUUsT0FBVSxFQUFFLFVBQWtDLEVBQUU7UUFDdkYsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDO1FBQzFFLE1BQU0sTUFBTSxHQUFHO1lBQ2IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtvQkFDMUIsUUFBUSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7b0JBRTNCLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dC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bGFyL2NvcmUnO1xuaW1wb3J0IHRpcHB5IGZyb20gJ3RpcHB5LmpzJztcbmltcG9ydCB7IGlzQ29tcG9uZW50LCBpc1RlbXBsYXRlUmVmLCBWaWV3U2VydmljZSB9IGZyb20gJ0BuZ25lYXQvb3ZlcnZpZXcnO1xuaW1wb3J0IHsgQ29udGVudCB9IGZyb20gJ0BuZ25lYXQvb3ZlcnZpZXcnO1xuaW1wb3J0IHsgQ3JlYXRlT3B0aW9ucywgRXh0ZW5kZWRUaXBweUluc3RhbmNlLCBUSVBQWV9DT05GSUcsIFRJUFBZX1JFRiwgVGlwcHlDb25maWcgfSBmcm9tICcuL3RpcHB5LnR5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUNsYXNzTmFtZSwgb25seVRpcHB5UHJvcHMgfSBmcm9tICcuL3V0aWxzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBUaXBweVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFRJUFBZX0NPTkZJRykgcHJpdmF0ZSBnbG9iYWxDb25maWc6IFRpcHB5Q29uZmlnLFxuICAgIHByaXZhdGUgdmlldzogVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7fVxuXG4gIGNyZWF0ZTxUIGV4dGVuZHMgQ29udGVudD4oaG9zdDogRWxlbWVudCwgY29udGVudDogVCwgb3B0aW9uczogUGFydGlhbDxDcmVhdGVPcHRpb25zPiA9IHt9KTogRXh0ZW5kZWRUaXBweUluc3RhbmNlPFQ+IHtcbiAgICBjb25zdCB2YXJpYXRpb24gPSBvcHRpb25zLnZhcmlhdGlvbiB8fCB0aGlzLmdsb2JhbENvbmZpZy5kZWZhdWx0VmFyaWF0aW9uO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIG9uU2hvdzogaW5zdGFuY2UgPT4ge1xuICAgICAgICBob3N0LnNldEF0dHJpYnV0ZSgnZGF0YS10aXBweS1vcGVuJywgJycpO1xuICAgICAgICBpZiAoIWluc3RhbmNlLiR2aWV3T3B0aW9ucykge1xuICAgICAgICAgIGluc3RhbmNlLiR2aWV3T3B0aW9ucyA9IHt9O1xuXG4gICAgICAgICAgaWYgKGlzVGVtcGxhdGVSZWYoY29udGVudCkpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLiR2aWV3T3B0aW9ucy5jb250ZXh0ID0ge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IGluc3RhbmNlLmhpZGUuYmluZChpbnN0YW5jZSksXG4gICAgICAgICAgICAgIC4uLm9wdGlvbnMuY29udGV4dFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzQ29tcG9uZW50KGNvbnRlbnQpKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICAgICAgaW5zdGFuY2UuZGF0YSA9IG9wdGlvbnMuZGF0YTtcbiAgICAgICAgICAgIGluc3RhbmNlLiR2aWV3T3B0aW9ucy5pbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFRJUFBZX1JFRixcbiAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBpbnN0YW5jZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcGFyZW50OiBvcHRpb25zLmluamVjdG9yIHx8IHRoaXMuaW5qZWN0b3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWluc3RhbmNlLnZpZXcpIHtcbiAgICAgICAgICBpbnN0YW5jZS52aWV3ID0gdGhpcy52aWV3LmNyZWF0ZVZpZXcoY29udGVudCwgeyAuLi5vcHRpb25zLCAuLi5pbnN0YW5jZS4kdmlld09wdGlvbnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2Uuc2V0Q29udGVudChpbnN0YW5jZS52aWV3LmdldEVsZW1lbnQoKSk7XG4gICAgICAgIG9wdGlvbnM/Lm9uU2hvdz8uKGluc3RhbmNlKTtcbiAgICAgIH0sXG4gICAgICBvbkhpZGRlbjogaW5zdGFuY2UgPT4ge1xuICAgICAgICBob3N0LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10aXBweS1vcGVuJyk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnByZXNlcnZlVmlldykge1xuICAgICAgICAgIGluc3RhbmNlLnZpZXcuZGVzdHJveSgpO1xuICAgICAgICAgIGluc3RhbmNlLnZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnM/Lm9uSGlkZGVuPy4oaW5zdGFuY2UpO1xuICAgICAgfSxcbiAgICAgIC4uLm9ubHlUaXBweVByb3BzKHRoaXMuZ2xvYmFsQ29uZmlnKSxcbiAgICAgIC4uLnRoaXMuZ2xvYmFsQ29uZmlnLnZhcmlhdGlvbnNbdmFyaWF0aW9uXSxcbiAgICAgIC4uLm9ubHlUaXBweVByb3BzKG9wdGlvbnMpLFxuICAgICAgb25DcmVhdGU6IGluc3RhbmNlID0+IHtcbiAgICAgICAgaW5zdGFuY2UucG9wcGVyLmNsYXNzTGlzdC5hZGQoYHRpcHB5LXZhcmlhdGlvbi0ke3ZhcmlhdGlvbn1gKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBub3JtYWxpemVDbGFzc05hbWUob3B0aW9ucy5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5wb3BwZXIuY2xhc3NMaXN0LmFkZChrbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLm9uQ3JlYXRlPy4oaW5zdGFuY2UpO1xuICAgICAgICBvcHRpb25zLm9uQ3JlYXRlPy4oaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gdGlwcHkoaG9zdCwgY29uZmlnKSBhcyBFeHRlbmRlZFRpcHB5SW5zdGFuY2U8VD47XG4gIH1cbn1cbiJdfQ==
81
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGlwcHkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nbmVhdC9oZWxpcG9wcGVyL3NyYy9saWIvdGlwcHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxLQUFLLE1BQU0sVUFBVSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFlLE1BQU0sa0JBQWtCLENBQUM7QUFFM0UsT0FBTyxFQUF3QyxZQUFZLEVBQUUsU0FBUyxFQUFlLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7OztBQUc3RCxNQUFNLE9BQU8sWUFBWTtJQUN2QixZQUNnQyxZQUF5QixFQUMvQyxJQUFpQixFQUNqQixRQUFrQjtRQUZJLGlCQUFZLEdBQVosWUFBWSxDQUFhO1FBQy9DLFNBQUksR0FBSixJQUFJLENBQWE7UUFDakIsYUFBUSxHQUFSLFFBQVEsQ0FBVTtJQUN6QixDQUFDO0lBRUosTUFBTSxDQUFvQixJQUFhLEVBQUUsT0FBVSxFQUFFLFVBQWtDLEVBQUU7UUFDdkYsTUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDO1FBQzFFLE1BQU0sTUFBTSxHQUFHO1lBQ2IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFO2dCQUNqQixJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksRUFBRTtvQkFDMUIsUUFBUSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7b0JBRTNCLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dC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bGFyL2NvcmUnO1xuaW1wb3J0IHRpcHB5IGZyb20gJ3RpcHB5LmpzJztcbmltcG9ydCB7IGlzQ29tcG9uZW50LCBpc1RlbXBsYXRlUmVmLCBWaWV3U2VydmljZSB9IGZyb20gJ0BuZ25lYXQvb3ZlcnZpZXcnO1xuaW1wb3J0IHsgQ29udGVudCB9IGZyb20gJ0BuZ25lYXQvb3ZlcnZpZXcnO1xuaW1wb3J0IHsgQ3JlYXRlT3B0aW9ucywgRXh0ZW5kZWRUaXBweUluc3RhbmNlLCBUSVBQWV9DT05GSUcsIFRJUFBZX1JFRiwgVGlwcHlDb25maWcgfSBmcm9tICcuL3RpcHB5LnR5cGVzJztcbmltcG9ydCB7IG5vcm1hbGl6ZUNsYXNzTmFtZSwgb25seVRpcHB5UHJvcHMgfSBmcm9tICcuL3V0aWxzJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBUaXBweVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KFRJUFBZX0NPTkZJRykgcHJpdmF0ZSBnbG9iYWxDb25maWc6IFRpcHB5Q29uZmlnLFxuICAgIHByaXZhdGUgdmlldzogVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3JcbiAgKSB7fVxuXG4gIGNyZWF0ZTxUIGV4dGVuZHMgQ29udGVudD4oaG9zdDogRWxlbWVudCwgY29udGVudDogVCwgb3B0aW9uczogUGFydGlhbDxDcmVhdGVPcHRpb25zPiA9IHt9KTogRXh0ZW5kZWRUaXBweUluc3RhbmNlPFQ+IHtcbiAgICBjb25zdCB2YXJpYXRpb24gPSBvcHRpb25zLnZhcmlhdGlvbiB8fCB0aGlzLmdsb2JhbENvbmZpZy5kZWZhdWx0VmFyaWF0aW9uO1xuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIG9uU2hvdzogaW5zdGFuY2UgPT4ge1xuICAgICAgICBob3N0LnNldEF0dHJpYnV0ZSgnZGF0YS10aXBweS1vcGVuJywgJycpO1xuICAgICAgICBpZiAoIWluc3RhbmNlLiR2aWV3T3B0aW9ucykge1xuICAgICAgICAgIGluc3RhbmNlLiR2aWV3T3B0aW9ucyA9IHt9O1xuXG4gICAgICAgICAgaWYgKGlzVGVtcGxhdGVSZWYoY29udGVudCkpIHtcbiAgICAgICAgICAgIGluc3RhbmNlLiR2aWV3T3B0aW9ucy5jb250ZXh0ID0ge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IGluc3RhbmNlLmhpZGUuYmluZChpbnN0YW5jZSksXG4gICAgICAgICAgICAgIC4uLm9wdGlvbnMuY29udGV4dFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzQ29tcG9uZW50KGNvbnRlbnQpKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5jb250ZXh0ID0gb3B0aW9ucy5jb250ZXh0O1xuICAgICAgICAgICAgaW5zdGFuY2UuZGF0YSA9IG9wdGlvbnMuZGF0YTtcbiAgICAgICAgICAgIGluc3RhbmNlLiR2aWV3T3B0aW9ucy5pbmplY3RvciA9IEluamVjdG9yLmNyZWF0ZSh7XG4gICAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHByb3ZpZGU6IFRJUFBZX1JFRixcbiAgICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBpbnN0YW5jZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgcGFyZW50OiBvcHRpb25zLmluamVjdG9yIHx8IHRoaXMuaW5qZWN0b3JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWluc3RhbmNlLnZpZXcpIHtcbiAgICAgICAgICBpbnN0YW5jZS52aWV3ID0gdGhpcy52aWV3LmNyZWF0ZVZpZXcoY29udGVudCwgeyAuLi5vcHRpb25zLCAuLi5pbnN0YW5jZS4kdmlld09wdGlvbnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaW5zdGFuY2Uuc2V0Q29udGVudChpbnN0YW5jZS52aWV3LmdldEVsZW1lbnQoKSk7XG4gICAgICAgIG9wdGlvbnM/Lm9uU2hvdz8uKGluc3RhbmNlKTtcbiAgICAgIH0sXG4gICAgICBvbkhpZGRlbjogaW5zdGFuY2UgPT4ge1xuICAgICAgICBob3N0LnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10aXBweS1vcGVuJyk7XG5cbiAgICAgICAgaWYgKCFvcHRpb25zLnByZXNlcnZlVmlldykge1xuICAgICAgICAgIGluc3RhbmNlLnZpZXcuZGVzdHJveSgpO1xuICAgICAgICAgIGluc3RhbmNlLnZpZXcgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIG9wdGlvbnM/Lm9uSGlkZGVuPy4oaW5zdGFuY2UpO1xuICAgICAgfSxcbiAgICAgIC4uLm9ubHlUaXBweVByb3BzKHRoaXMuZ2xvYmFsQ29uZmlnKSxcbiAgICAgIC4uLnRoaXMuZ2xvYmFsQ29uZmlnLnZhcmlhdGlvbnNbdmFyaWF0aW9uXSxcbiAgICAgIC4uLm9ubHlUaXBweVByb3BzKG9wdGlvbnMpLFxuICAgICAgb25DcmVhdGU6IGluc3RhbmNlID0+IHtcbiAgICAgICAgaW5zdGFuY2UucG9wcGVyLmNsYXNzTGlzdC5hZGQoYHRpcHB5LXZhcmlhdGlvbi0ke3ZhcmlhdGlvbn1gKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuY2xhc3NOYW1lKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBrbGFzcyBvZiBub3JtYWxpemVDbGFzc05hbWUob3B0aW9ucy5jbGFzc05hbWUpKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5wb3BwZXIuY2xhc3NMaXN0LmFkZChrbGFzcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsQ29uZmlnLm9uQ3JlYXRlPy4oaW5zdGFuY2UpO1xuICAgICAgICBvcHRpb25zLm9uQ3JlYXRlPy4oaW5zdGFuY2UpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gdGlwcHkoaG9zdCwgY29uZmlnKSBhcyBFeHRlbmRlZFRpcHB5SW5zdGFuY2U8VD47XG4gIH1cbn1cbiJdfQ==