@skyux/core 9.0.0-alpha.9 → 9.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,19 +1,19 @@
1
- import { Injectable, } from '@angular/core';
1
+ import { ViewportRuler } from '@angular/cdk/overlay';
2
+ import { Injectable, NgZone, RendererFactory2, inject, } from '@angular/core';
2
3
  import { SkyAffixer } from './affixer';
3
4
  import * as i0 from "@angular/core";
4
5
  export class SkyAffixService {
5
- #renderer;
6
- constructor(rendererFactory) {
7
- this.#renderer = rendererFactory.createRenderer(undefined, null);
8
- }
6
+ #renderer = inject(RendererFactory2).createRenderer(undefined, null);
7
+ #viewportRuler = inject(ViewportRuler);
8
+ #zone = inject(NgZone);
9
9
  /**
10
10
  * Creates an instance of [[SkyAffixer]].
11
11
  * @param affixed The element to be affixed.
12
12
  */
13
13
  createAffixer(affixed) {
14
- return new SkyAffixer(affixed.nativeElement, this.#renderer);
14
+ return new SkyAffixer(affixed.nativeElement, this.#renderer, this.#viewportRuler, this.#zone);
15
15
  }
16
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
16
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
17
17
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, providedIn: 'root' }); }
18
18
  }
19
19
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, decorators: [{
@@ -21,5 +21,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
21
21
  args: [{
22
22
  providedIn: 'root',
23
23
  }]
24
- }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
25
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9hZmZpeC9hZmZpeC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxVQUFVLEdBR1gsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFLdkMsTUFBTSxPQUFPLGVBQWU7SUFDMUIsU0FBUyxDQUFZO0lBRXJCLFlBQVksZUFBaUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsR0FBRyxlQUFlLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksYUFBYSxDQUFDLE9BQW1CO1FBQ3RDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDL0QsQ0FBQzs4R0FiVSxlQUFlO2tIQUFmLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVsZW1lbnRSZWYsXG4gIEluamVjdGFibGUsXG4gIFJlbmRlcmVyMixcbiAgUmVuZGVyZXJGYWN0b3J5Mixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUFmZml4ZXIgfSBmcm9tICcuL2FmZml4ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5QWZmaXhTZXJ2aWNlIHtcbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG5cbiAgY29uc3RydWN0b3IocmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyKSB7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlckZhY3RvcnkuY3JlYXRlUmVuZGVyZXIodW5kZWZpbmVkLCBudWxsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFtbU2t5QWZmaXhlcl1dLlxuICAgKiBAcGFyYW0gYWZmaXhlZCBUaGUgZWxlbWVudCB0byBiZSBhZmZpeGVkLlxuICAgKi9cbiAgcHVibGljIGNyZWF0ZUFmZml4ZXIoYWZmaXhlZDogRWxlbWVudFJlZik6IFNreUFmZml4ZXIge1xuICAgIHJldHVybiBuZXcgU2t5QWZmaXhlcihhZmZpeGVkLm5hdGl2ZUVsZW1lbnQsIHRoaXMuI3JlbmRlcmVyKTtcbiAgfVxufVxuIl19
24
+ }] });
25
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXguc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9hZmZpeC9hZmZpeC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBRUwsVUFBVSxFQUNWLE1BQU0sRUFDTixnQkFBZ0IsRUFDaEIsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBS3ZDLE1BQU0sT0FBTyxlQUFlO0lBQ2pCLFNBQVMsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBRXJFLGNBQWMsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFFdkMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUVoQzs7O09BR0c7SUFDSSxhQUFhLENBQUMsT0FBbUI7UUFDdEMsT0FBTyxJQUFJLFVBQVUsQ0FDbkIsT0FBTyxDQUFDLGFBQWEsRUFDckIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsY0FBYyxFQUNuQixJQUFJLENBQUMsS0FBSyxDQUNYLENBQUM7SUFDSixDQUFDOzhHQWxCVSxlQUFlO2tIQUFmLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQge1xuICBFbGVtZW50UmVmLFxuICBJbmplY3RhYmxlLFxuICBOZ1pvbmUsXG4gIFJlbmRlcmVyRmFjdG9yeTIsXG4gIGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUFmZml4ZXIgfSBmcm9tICcuL2FmZml4ZXInO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5QWZmaXhTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgI3JlbmRlcmVyID0gaW5qZWN0KFJlbmRlcmVyRmFjdG9yeTIpLmNyZWF0ZVJlbmRlcmVyKHVuZGVmaW5lZCwgbnVsbCk7XG5cbiAgcmVhZG9ubHkgI3ZpZXdwb3J0UnVsZXIgPSBpbmplY3QoVmlld3BvcnRSdWxlcik7XG5cbiAgcmVhZG9ubHkgI3pvbmUgPSBpbmplY3QoTmdab25lKTtcblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBbW1NreUFmZml4ZXJdXS5cbiAgICogQHBhcmFtIGFmZml4ZWQgVGhlIGVsZW1lbnQgdG8gYmUgYWZmaXhlZC5cbiAgICovXG4gIHB1YmxpYyBjcmVhdGVBZmZpeGVyKGFmZml4ZWQ6IEVsZW1lbnRSZWYpOiBTa3lBZmZpeGVyIHtcbiAgICByZXR1cm4gbmV3IFNreUFmZml4ZXIoXG4gICAgICBhZmZpeGVkLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLiNyZW5kZXJlcixcbiAgICAgIHRoaXMuI3ZpZXdwb3J0UnVsZXIsXG4gICAgICB0aGlzLiN6b25lXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,4 +1,4 @@
1
- import { Subject, fromEvent } from 'rxjs';
1
+ import { Subject, Subscription } from 'rxjs';
2
2
  import { SkyAffixAutoFitContext } from './affix-auto-fit-context';
3
3
  import { getInversePlacement, getNextPlacement } from './affix-utils';
4
4
  import { getElementOffset, getOverflowParents, isOffsetFullyVisibleWithinParent, isOffsetPartiallyVisibleWithinParent, } from './dom-utils';
@@ -60,12 +60,17 @@ export class SkyAffixer {
60
60
  #placementChange;
61
61
  #placementChangeObs;
62
62
  #renderer;
63
- #resizeListener;
64
- #scrollListeners;
63
+ #scrollChange = new Subject();
64
+ #viewportListeners;
65
+ #viewportRuler;
66
+ #zone;
65
67
  #_config = DEFAULT_AFFIX_CONFIG;
66
- constructor(affixedElement, renderer) {
68
+ #scrollChangeListener = () => this.#scrollChange.next();
69
+ constructor(affixedElement, renderer, viewportRuler, zone) {
67
70
  this.#affixedElement = affixedElement;
68
71
  this.#renderer = renderer;
72
+ this.#viewportRuler = viewportRuler;
73
+ this.#zone = zone;
69
74
  this.#offsetChange = new Subject();
70
75
  this.#overflowScroll = new Subject();
71
76
  this.#placementChange = new Subject();
@@ -85,8 +90,7 @@ export class SkyAffixer {
85
90
  this.#overflowParents = getOverflowParents(baseElement);
86
91
  this.#affix();
87
92
  if (this.#config.isSticky) {
88
- this.#addScrollListeners();
89
- this.#addResizeListener();
93
+ this.#addViewportListeners();
90
94
  }
91
95
  }
92
96
  getConfig() {
@@ -108,6 +112,7 @@ export class SkyAffixer {
108
112
  this.#placementChange.complete();
109
113
  this.#offsetChange.complete();
110
114
  this.#overflowScroll.complete();
115
+ this.#scrollChange.complete();
111
116
  }
112
117
  #affix() {
113
118
  const offset = this.#getOffset();
@@ -131,8 +136,11 @@ export class SkyAffixer {
131
136
  top: 0,
132
137
  };
133
138
  if (this.#config.position === 'absolute') {
134
- autoFitOverflowOffset.top =
135
- (autoFitOverflowOffset.top || 0) + window.scrollY;
139
+ const { top, left } = this.#viewportRuler.getViewportScrollPosition();
140
+ autoFitOverflowOffset.top = (autoFitOverflowOffset.top || 0) + top;
141
+ autoFitOverflowOffset.left = (autoFitOverflowOffset.left || 0) + left;
142
+ autoFitOverflowOffset.bottom = (autoFitOverflowOffset.bottom || 0) + top;
143
+ autoFitOverflowOffset.right = (autoFitOverflowOffset.right || 0) + left;
136
144
  }
137
145
  do {
138
146
  offset = this.#getPreferredOffset(placement);
@@ -174,8 +182,11 @@ export class SkyAffixer {
174
182
  height: baseDomRect.height,
175
183
  };
176
184
  if (this.#config.position === 'absolute') {
177
- baseRect.top += window.scrollY;
178
- baseRect.bottom = baseRect.top + baseDomRect.height;
185
+ const { left, top } = this.#viewportRuler.getViewportScrollPosition();
186
+ baseRect.top += top;
187
+ baseRect.left += left;
188
+ baseRect.bottom += top;
189
+ baseRect.right += left;
179
190
  }
180
191
  return baseRect;
181
192
  }
@@ -335,8 +346,7 @@ export class SkyAffixer {
335
346
  }
336
347
  }
337
348
  #reset() {
338
- this.#removeScrollListeners();
339
- this.#removeResizeListener();
349
+ this.#removeViewportListeners();
340
350
  this.#overflowParents = [];
341
351
  this.#config =
342
352
  this.#baseElement =
@@ -368,31 +378,31 @@ export class SkyAffixer {
368
378
  bottom: baseRect.bottom,
369
379
  }, this.#config.autoFitOverflowOffset);
370
380
  }
371
- #addScrollListeners() {
372
- this.#scrollListeners = this.#overflowParents.map((parentElement) => {
373
- const overflow = parentElement === document.body ? 'window' : parentElement;
374
- return this.#renderer.listen(overflow, 'scroll', () => {
375
- this.#affix();
376
- this.#overflowScroll.next();
381
+ #addViewportListeners() {
382
+ this.#viewportListeners = new Subscription();
383
+ // Resize and orientation changes.
384
+ this.#viewportListeners.add(this.#viewportRuler.change().subscribe(() => {
385
+ this.#affix();
386
+ }));
387
+ this.#viewportListeners.add(this.#scrollChange.subscribe(() => {
388
+ this.#affix();
389
+ this.#overflowScroll.next();
390
+ }));
391
+ // Listen for scroll events on the window, visual viewport, and any overflow parents.
392
+ // https://developer.chrome.com/blog/visual-viewport-api/#events-only-fire-when-the-visual-viewport-changes
393
+ this.#zone.runOutsideAngular(() => {
394
+ [window, window.visualViewport, ...this.#overflowParents].forEach((parentElement) => {
395
+ parentElement?.addEventListener('scroll', this.#scrollChangeListener);
377
396
  });
378
397
  });
379
398
  }
380
- #addResizeListener() {
381
- this.#resizeListener = fromEvent(window, 'resize').subscribe(() => this.#affix());
382
- }
383
- #removeResizeListener() {
384
- if (this.#resizeListener) {
385
- this.#resizeListener.unsubscribe();
386
- this.#resizeListener = undefined;
387
- }
388
- }
389
- #removeScrollListeners() {
390
- if (this.#scrollListeners) {
391
- // Remove renderer-generated listeners by calling the listener itself.
392
- // https://github.com/angular/angular/issues/9368#issuecomment-227199778
393
- this.#scrollListeners.forEach((listener) => listener());
394
- this.#scrollListeners = undefined;
395
- }
399
+ #removeViewportListeners() {
400
+ this.#viewportListeners?.unsubscribe();
401
+ this.#zone.runOutsideAngular(() => {
402
+ [window, window.visualViewport, ...this.#overflowParents].forEach((parentElement) => {
403
+ parentElement?.removeEventListener('scroll', this.#scrollChangeListener);
404
+ });
405
+ });
396
406
  }
397
407
  }
398
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9hZmZpeC9hZmZpeGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBYyxPQUFPLEVBQWdCLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQU9sRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUNMLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZ0NBQWdDLEVBQ2hDLG9DQUFvQyxHQUNyQyxNQUFNLGFBQWEsQ0FBQztBQWtCckIsTUFBTSxvQkFBb0IsR0FBMEI7SUFDbEQsY0FBYyxFQUFFLHNCQUFzQixDQUFDLGNBQWM7SUFDckQsYUFBYSxFQUFFLEtBQUs7SUFDcEIsbUJBQW1CLEVBQUUsUUFBUTtJQUM3QixRQUFRLEVBQUUsS0FBSztJQUNmLFNBQVMsRUFBRSxPQUFPO0NBQ25CLENBQUM7QUFFRixNQUFNLE9BQU8sVUFBVTtJQUNyQjs7T0FFRztJQUNILElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILElBQVcsY0FBYztRQUN2QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNqQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFBVyxlQUFlO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO0lBQ2xDLENBQUM7SUFFRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUVELElBQUksT0FBTyxDQUFDLEtBQWlDO1FBQzNDLE1BQU0sTUFBTSxHQUEwQjtZQUNwQyxHQUFH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QVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDaEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUNkLENBQUM7SUFDSixDQUFDO0lBRUQscUJBQXFCO1FBQ25CLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN4QixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ25DLElBQUksQ0FBQyxlQUFlLEdBQUcsU0FBUyxDQUFDO1NBQ2xDO0lBQ0gsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUN6QixzRUFBc0U7WUFDdEUsd0VBQXdFO1lBQ3hFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFNBQVMsQ0FBQztTQUNuQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIGZyb21FdmVudCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTa3lBZmZpeEF1dG9GaXRDb250ZXh0IH0gZnJvbSAnLi9hZmZpeC1hdXRvLWZpdC1jb250ZXh0JztcbmltcG9ydCB7IFNreUFmZml4Q29uZmlnIH0gZnJvbSAnLi9hZmZpeC1jb25maWcnO1xuaW1wb3J0IHsgU2t5QWZmaXhPZmZzZXQgfSBmcm9tICcuL2FmZml4LW9mZnNldCc7XG5pbXBvcnQgeyBTa3lBZmZpeE9mZnNldENoYW5nZSB9IGZyb20gJy4vYWZmaXgtb2Zmc2V0LWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lBZmZpeFBsYWNlbWVudCB9IGZyb20gJy4vYWZmaXgtcGxhY2VtZW50JztcbmltcG9ydCB7IFNreUFmZml4UGxhY2VtZW50Q2hhbmdlIH0gZnJvbSAnLi9hZmZpeC1wbGFjZW1lbnQtY2hhbmdlJztcbmltcG9ydCB7IEFmZml4UmVjdCB9IGZyb20gJy4vYWZmaXgtcmVjdCc7XG5pbXBvcnQgeyBnZXRJbnZlcnNlUGxhY2VtZW50LCBnZXROZXh0UGxhY2VtZW50IH0gZnJvbSAnLi9hZmZpeC11dGlscyc7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50T2Zmc2V0LFxuICBnZXRPdmVyZmxvd1BhcmVudHMsXG4gIGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50LFxuICBpc09mZnNldFBhcnRpYWxseVZpc2libGVXaXRoaW5QYXJlbnQsXG59IGZyb20gJy4vZG9tLXV0aWxzJztcblxuLyoqXG4gKiBNYWtlIHNwZWNpZmljIHByb3BlcnRpZXMgcmVxdWlyZWQsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0b1xuICogZG8gbnVsbCBjaGVja3MgdGhyb3VnaG91dCB0aGlzIGZpbGUuXG4gKi9cbnR5cGUgQWZmaXhDb25maWdPckRlZmF1bHRzID0gU2t5QWZmaXhDb25maWcgJlxuICBSZXF1aXJlZDxcbiAgICBQaWNrPFxuICAgICAgU2t5QWZmaXhDb25maWcsXG4gICAgICB8ICdhdXRvRml0Q29udGV4dCdcbiAgICAgIHwgJ2VuYWJsZUF1dG9GaXQnXG4gICAgICB8ICdob3Jpem9udGFsQWxpZ25tZW50J1xuICAgICAgfCAnaXNTdGlja3knXG4gICAgICB8ICdwbGFjZW1lbnQnXG4gICAgPlxuICA+O1xuXG5jb25zdCBERUZBVUxUX0FGRklYX0NPTkZJRzogQWZmaXhDb25maWdPckRlZmF1bHRzID0ge1xuICBhdXRvRml0Q29udGV4dDogU2t5QWZmaXhBdXRvRml0Q29udGV4dC5PdmVyZmxvd1BhcmVudCxcbiAgZW5hYmxlQXV0b0ZpdDogZmFsc2UsXG4gIGhvcml6b250YWxBbGlnbm1lbnQ6ICdjZW50ZXInLFxuICBpc1N0aWNreTogZmFsc2UsXG4gIHBsYWNlbWVudDogJ2Fib3ZlJyxcbn07XG5cbmV4cG9ydCBjbGFzcyBTa3lBZmZpeGVyIHtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGFmZml4ZWQgZWxlbWVudCdzIG9mZnNldCBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBvZmZzZXRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lBZmZpeE9mZnNldENoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLiNvZmZzZXRDaGFuZ2VPYnM7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgYmFzZSBlbGVtZW50J3MgbmVhcmVzdCBvdmVyZmxvdyBwYXJlbnQgaXMgc2Nyb2xsaW5nLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZFxuICAgKiB0byBwZXJmb3JtIGFuIGFkZGl0aW9uYWwgYWN0aW9uIGR1cmluZyB0aGUgc2Nyb2xsIGV2ZW50IGJ1dCBkb24ndCB3YW50IHRvIGdlbmVyYXRlIGFub3RoZXJcbiAgICogZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG92ZXJmbG93U2Nyb2xsKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLiNvdmVyZmxvd1Njcm9sbE9icztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBwbGFjZW1lbnQgdmFsdWUgY2hhbmdlcy4gQSBgbnVsbGAgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYSBzdWl0YWJsZVxuICAgKiBwbGFjZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZW1lbnRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLiNwbGFjZW1lbnRDaGFuZ2VPYnM7XG4gIH1cblxuICBnZXQgI2NvbmZpZygpOiBBZmZpeENvbmZpZ09yRGVmYXVsdHMge1xuICAgIHJldHVybiB0aGlzLiNfY29uZmlnO1xuICB9XG5cbiAgc2V0ICNjb25maWcodmFsdWU6IFNreUFmZml4Q29uZmlnIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWVyZ2VkOiBBZmZpeENvbmZpZ09yRGVmYXVsdHMgPSB7XG4gICAgICAuLi5ERUZBVUxUX0FGRklYX0NPTkZJRyxcbiAgICAgIC4uLnZhbHVlLFxuICAgIH07XG5cbiAgICAvLyBNYWtlIHN1cmUgbm9uZSBvZiB0aGUgdmFsdWVzIGFyZSB1bmRlZmluZWQuXG4gICAgbGV0IGtleToga2V5b2YgdHlwZW9mIG1lcmdlZDtcbiAgICBmb3IgKGtleSBpbiBtZXJnZWQpIHtcbiAgICAgIGlmIChtZXJnZWRba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIChtZXJnZWQgYXMgYW55KVtrZXldID0gREVGQVVMVF9BRkZJWF9DT05GSUdba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNfY29uZmlnID0gbWVyZ2VkO1xuICB9XG5cbiAgI2FmZml4ZWRFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAjYmFzZUVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICNjdXJyZW50T2Zmc2V0OiBTa3lBZmZpeE9mZnNldCB8IHVuZGVmaW5lZDtcblxuICAjY3VycmVudFBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgI29mZnNldENoYW5nZTogU3ViamVjdDxTa3lBZmZpeE9mZnNldENoYW5nZT47XG5cbiAgI29mZnNldENoYW5nZU9iczogT2JzZXJ2YWJsZTxTa3lBZmZpeE9mZnNldENoYW5nZT47XG5cbiAgI292ZXJmbG93UGFyZW50czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gICNvdmVyZmxvd1Njcm9sbDogU3ViamVjdDx2b2lkPjtcblxuICAjb3ZlcmZsb3dTY3JvbGxPYnM6IE9ic2VydmFibGU8dm9pZD47XG5cbiAgI3BsYWNlbWVudENoYW5nZTogU3ViamVjdDxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT47XG5cbiAgI3BsYWNlbWVudENoYW5nZU9iczogT2JzZXJ2YWJsZTxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT47XG5cbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG5cbiAgI3Jlc2l6ZUxpc3RlbmVyOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI3Njcm9sbExpc3RlbmVyczogKCgpID0+IHZvaWQpW10gfCB1bmRlZmluZWQ7XG5cbiAgI19jb25maWc6IEFmZml4Q29uZmlnT3JEZWZhdWx0cyA9IERFRkFVTFRfQUZGSVhfQ09ORklHO1xuXG4gIGNvbnN0cnVjdG9yKGFmZml4ZWRFbGVtZW50OiBIVE1MRWxlbWVudCwgcmVuZGVyZXI6IFJlbmRlcmVyMikge1xuICAgIHRoaXMuI2FmZml4ZWRFbGVtZW50ID0gYWZmaXhlZEVsZW1lbnQ7XG4gICAgdGhpcy4jcmVuZGVyZXIgPSByZW5kZXJlcjtcblxuICAgIHRoaXMuI29mZnNldENoYW5nZSA9IG5ldyBTdWJqZWN0PFNreUFmZml4T2Zmc2V0Q2hhbmdlPigpO1xuICAgIHRoaXMuI292ZXJmbG93U2Nyb2xsID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgICB0aGlzLiNwbGFjZW1lbnRDaGFuZ2UgPSBuZXcgU3ViamVjdDxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT4oKTtcblxuICAgIHRoaXMuI29mZnNldENoYW5nZU9icyA9IHRoaXMuI29mZnNldENoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLiNvdmVyZmxvd1Njcm9sbE9icyA9IHRoaXMuI292ZXJmbG93U2Nyb2xsLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuI3BsYWNlbWVudENoYW5nZU9icyA9IHRoaXMuI3BsYWNlbWVudENoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZmZpeGVzIGFuIGVsZW1lbnQgdG8gYSBiYXNlIGVsZW1lbnQuXG4gICAqIEBwYXJhbSBiYXNlRWxlbWVudCBUaGUgYmFzZSBlbGVtZW50LlxuICAgKiBAcGFyYW0gY29uZmlnIENvbmZpZ3VyYXRpb24gZm9yIHRoZSBhZmZpeCBhY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgYWZmaXhUbyhiYXNlRWxlbWVudDogSFRNTEVsZW1lbnQsIGNvbmZpZz86IFNreUFmZml4Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy4jcmVzZXQoKTtcblxuICAgIHRoaXMuI2NvbmZpZyA9IGNvbmZpZztcbiAgICB0aGlzLiNiYXNlRWxlbWVudCA9IGJhc2VFbGVtZW50O1xuICAgIHRoaXMuI292ZXJmbG93UGFyZW50cyA9IGdldE92ZXJmbG93UGFyZW50cyhiYXNlRWxlbWVudCk7XG5cbiAgICB0aGlzLiNhZmZpeCgpO1xuXG4gICAgaWYgKHRoaXMuI2NvbmZpZy5pc1N0aWNreSkge1xuICAgICAgdGhpcy4jYWRkU2Nyb2xsTGlzdGVuZXJzKCk7XG4gICAgICB0aGlzLiNhZGRSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRDb25maWcoKTogU2t5QWZmaXhDb25maWcge1xuICAgIHJldHVybiB0aGlzLiNjb25maWc7XG4gIH1cblxuICAvKipcbiAgICogUmUtcnVucyB0aGUgYWZmaXggY2FsY3VsYXRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZmZpeCgpOiB2b2lkIHtcbiAgICAvLyBSZXNldCBjdXJyZW50IHBsYWNlbWVudCB0byBwcmVmZXJyZWQgcGxhY2VtZW50LlxuICAgIHRoaXMuI2N1cnJlbnRQbGFjZW1lbnQgPSB0aGlzLiNjb25maWcucGxhY2VtZW50O1xuICAgIHRoaXMuI2FmZml4KCk7XG4gIH1cblxuICAvKipcbiAgICogRGVzdHJveXMgdGhlIGFmZml4ZXIuXG4gICAqL1xuICBwdWJsaWMgZGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLiNyZXNldCgpO1xuICAgIHRoaXMuI3BsYWNlbWVudENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI29mZnNldENoYW5nZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMuI292ZXJmbG93U2Nyb2xsLmNvbXBsZXRlKCk7XG4gIH1cblxuICAjYWZmaXgoKTogdm9pZCB7XG4gICAgY29uc3Qgb2Zmc2V0ID0gdGhpcy4jZ2V0T2Zmc2V0KCk7XG5cbiAgICBpZiAodGhpcy4jaXNOZXdPZmZzZXQob2Zmc2V0KSkge1xuICAgICAgdGhpcy4jcmVuZGVyZXIuc2V0U3R5bGUodGhpcy4jYWZmaXhlZEVsZW1lbnQsICd0b3AnLCBgJHtvZmZzZXQudG9wfXB4YCk7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRTdHlsZSh0aGlzLiNhZmZpeGVkRWxlbWVudCwgJ2xlZnQnLCBgJHtvZmZzZXQubGVmdH1weGApO1xuXG4gICAgICB0aGlzLiNvZmZzZXRDaGFuZ2UubmV4dCh7IG9mZnNldCB9KTtcbiAgICB9XG4gIH1cblxuICAjZ2V0T2Zmc2V0KCk6IFNreUFmZml4T2Zmc2V0IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLiNnZXRBdXRvRml0Q29udGV4dFBhcmVudCgpO1xuXG4gICAgY29uc3QgbWF4QXR0ZW1wdHMgPSA0O1xuICAgIGxldCBhdHRlbXB0cyA9IDA7XG5cbiAgICBsZXQgaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSA9IGZhbHNlO1xuICAgIGxldCBvZmZzZXQ6IFJlcXVpcmVkPFNreUFmZml4T2Zmc2V0PjtcbiAgICBsZXQgcGxhY2VtZW50ID0gdGhpcy4jY29uZmlnLnBsYWNlbWVudDtcblxuICAgIGNvbnN0IGF1dG9GaXRPdmVyZmxvd09mZnNldCA9IHRoaXMuI2NvbmZpZy5hdXRvRml0T3ZlcmZsb3dPZmZzZXQgfHwge1xuICAgICAgYm90dG9tOiAwLFxuICAgICAgbGVmdDogMCxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdG9wOiAwLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy4jY29uZmlnLnBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICBhdXRvRml0T3ZlcmZsb3dPZmZzZXQudG9wID1cbiAgICAgICAgKGF1dG9GaXRPdmVyZmxvd09mZnNldC50b3AgfHwgMCkgKyB3aW5kb3cuc2Nyb2xsWTtcbiAgICB9XG5cbiAgICBkbyB7XG4gICAgICBvZmZzZXQgPSB0aGlzLiNnZXRQcmVmZXJyZWRPZmZzZXQocGxhY2VtZW50KTtcbiAgICAgIGlzQWZmaXhlZEVsZW1lbnRGdWxseVZpc2libGUgPSBpc09mZnNldEZ1bGx5VmlzaWJsZVdpdGhpblBhcmVudChcbiAgICAgICAgcGFyZW50LFxuICAgICAgICBvZmZzZXQsXG4gICAgICAgIGF1dG9GaXRPdmVyZmxvd09mZnNldFxuICAgICAgKTtcblxuICAgICAgaWYgKCF0aGlzLiNjb25maWcuZW5hYmxlQXV0b0ZpdCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKCFpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlKSB7XG4gICAgICAgIHBsYWNlbWVudCA9XG4gICAgICAgICAgYXR0ZW1wdHMgJSAyID09PSAwXG4gICAgICAgICAgICA/IGdldEludmVyc2VQbGFjZW1lbnQocGxhY2VtZW50KVxuICAgICAgICAgICAgOiBnZXROZXh0UGxhY2VtZW50KHBsYWNlbWVudCk7XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzKys7XG4gICAgfSB3aGlsZSAoIWlzQWZmaXhlZEVsZW1lbnRGdWxseVZpc2libGUgJiYgYXR0ZW1wdHMgPCBtYXhBdHRlbXB0cyk7XG5cbiAgICBpZiAoaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSkge1xuICAgICAgaWYgKHRoaXMuI2lzQmFzZUVsZW1lbnRWaXNpYmxlKCkpIHtcbiAgICAgICAgdGhpcy4jbm90aWZ5UGxhY2VtZW50Q2hhbmdlKHBsYWNlbWVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLiNub3RpZnlQbGFjZW1lbnRDaGFuZ2UobnVsbCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvZmZzZXQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2NvbmZpZy5lbmFibGVBdXRvRml0KSB7XG4gICAgICB0aGlzLiNub3RpZnlQbGFjZW1lbnRDaGFuZ2UobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gTm8gc3VpdGFibGUgcGxhY2VtZW50IHdhcyBmb3VuZCwgc28gcmV2ZXJ0IHRvIHByZWZlcnJlZCBwbGFjZW1lbnQuXG4gICAgcmV0dXJuIHRoaXMuI2dldFByZWZlcnJlZE9mZnNldCh0aGlzLiNjb25maWcucGxhY2VtZW50KTtcbiAgfVxuXG4gICNnZXRSZWN0KGJhc2VFbGVtZW50OiBIVE1MRWxlbWVudCk6IEFmZml4UmVjdCB7XG4gICAgY29uc3QgYmFzZURvbVJlY3QgPSBiYXNlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IGJhc2VSZWN0OiBBZmZpeFJlY3QgPSB7XG4gICAgICB0b3A6IGJhc2VEb21SZWN0LnRvcCxcbiAgICAgIGJvdHRvbTogYmFzZURvbVJlY3QuYm90dG9tLFxuICAgICAgbGVmdDogYmFzZURvbVJlY3QubGVmdCxcbiAgICAgIHJpZ2h0OiBiYXNlRG9tUmVjdC5yaWdodCxcbiAgICAgIHdpZHRoOiBiYXNlRG9tUmVjdC53aWR0aCxcbiAgICAgIGhlaWdodDogYmFzZURvbVJlY3QuaGVpZ2h0LFxuICAgIH07XG5cbiAgICBpZiAodGhpcy4jY29uZmlnLnBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICBiYXNlUmVjdC50b3AgKz0gd2luZG93LnNjcm9sbFk7XG4gICAgICBiYXNlUmVjdC5ib3R0b20gPSBiYXNlUmVjdC50b3AgKyBiYXNlRG9tUmVjdC5oZWlnaHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VSZWN0O1xuICB9XG5cbiAgI2dldFByZWZlcnJlZE9mZnNldChwbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50KTogUmVxdWlyZWQ8U2t5QWZmaXhPZmZzZXQ+IHtcbiAgICBpZiAoIXRoaXMuI2Jhc2VFbGVtZW50KSB7XG4gICAgICByZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAsIGJvdHRvbTogMCwgcmlnaHQ6IDAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBhZmZpeGVkUmVjdCA9IHRoaXMuI2dldFJlY3QodGhpcy4jYWZmaXhlZEVsZW1lbnQpO1xuICAgIGNvbnN0IGJhc2VSZWN0ID0gdGhpcy4jZ2V0UmVjdCh0aGlzLiNiYXNlRWxlbWVudCk7XG5cbiAgICBjb25zdCBob3Jpem9udGFsQWxpZ25tZW50ID0gdGhpcy4jY29uZmlnLmhvcml6b250YWxBbGlnbm1lbnQ7XG4gICAgY29uc3QgdmVydGljYWxBbGlnbm1lbnQgPSB0aGlzLiNjb25maWcudmVydGljYWxBbGlnbm1lbnQ7XG4gICAgY29uc3QgZW5hYmxlQXV0b0ZpdCA9IHRoaXMuI2NvbmZpZy5lbmFibGVBdXRvRml0O1xuXG4gICAgbGV0IHRvcDogbnVtYmVyO1xuICAgIGxldCBsZWZ0OiBudW1iZXI7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSAnYWJvdmUnIHx8IHBsYWNlbWVudCA9PT0gJ2JlbG93Jykge1xuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ2Fib3ZlJykge1xuICAgICAgICB0b3AgPSBiYXNlUmVjdC50b3AgLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG5cbiAgICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWdubWVudCkge1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICAgICAgdG9wID0gdG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0b3AgPSBiYXNlUmVjdC5ib3R0b207XG5cbiAgICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWdubWVudCkge1xuICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgLSBhZmZpeGVkUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICAgIHRvcCA9IHRvcCAtIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAoaG9yaXpvbnRhbEFsaWdubWVudCkge1xuICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICBsZWZ0ID0gYmFzZVJlY3QubGVmdDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGxlZnQgPSBiYXNlUmVjdC5sZWZ0ICsgYmFzZVJlY3Qud2lkdGggLyAyIC0gYWZmaXhlZFJlY3Qud2lkdGggLyAyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0ID0gYmFzZVJlY3QucmlnaHQgLSBhZmZpeGVkUmVjdC53aWR0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHBsYWNlbWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIGxlZnQgPSBiYXNlUmVjdC5sZWZ0IC0gYWZmaXhlZFJlY3Qud2lkdGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZWZ0ID0gYmFzZVJlY3QucmlnaHQ7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodmVydGljYWxBbGlnbm1lbnQpIHtcbiAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICB0b3AgPSBiYXNlUmVjdC50b3A7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0b3AgPSBiYXNlUmVjdC50b3AgKyBiYXNlUmVjdC5oZWlnaHQgLyAyIC0gYWZmaXhlZFJlY3QuaGVpZ2h0IC8gMjtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCA9IGJhc2VSZWN0LmJvdHRvbSAtIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBvZmZzZXQ6IFJlcXVpcmVkPFNreUFmZml4T2Zmc2V0PiA9IHsgdG9wLCBsZWZ0LCBib3R0b206IDAsIHJpZ2h0OiAwIH07XG5cbiAgICBpZiAoZW5hYmxlQXV0b0ZpdCkge1xuICAgICAgY29uc3QgYWRqdXN0bWVudHMgPSB0aGlzLiNhZGp1c3RPZmZzZXRUb092ZXJmbG93UGFyZW50KFxuICAgICAgICB7IHRvcCwgbGVmdCB9LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHRoaXMuI2Jhc2VFbGVtZW50XG4gICAgICApO1xuICAgICAgb2Zmc2V0LnRvcCA9IGFkanVzdG1lbnRzLnRvcDtcbiAgICAgIG9mZnNldC5sZWZ0ID0gYWRqdXN0bWVudHMubGVmdDtcbiAgICB9XG5cbiAgICBvZmZzZXQuYm90dG9tID0gb2Zmc2V0LnRvcCArIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICBvZmZzZXQucmlnaHQgPSBvZmZzZXQubGVmdCArIGFmZml4ZWRSZWN0LndpZHRoO1xuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTbGlnaHRseSBhZGp1c3QgdGhlIG9mZnNldCB0byBmaXQgd2l0aGluIHRoZSBzY3JvbGwgcGFyZW50J3MgYm91bmRhcmllcyBpZlxuICAgKiB0aGUgYWZmaXhlZCBlbGVtZW50IHdvdWxkIG90aGVyd2lzZSBiZSBjbGlwcGVkLlxuICAgKi9cbiAgI2FkanVzdE9mZnNldFRvT3ZlcmZsb3dQYXJlbnQoXG4gICAgb2Zmc2V0OiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSxcbiAgICBwbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50LFxuICAgIGJhc2VFbGVtZW50OiBIVE1MRWxlbWVudFxuICApOiB7IHRvcDogbnVtYmVyOyBsZWZ0OiBudW1iZXIgfSB7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy4jZ2V0QXV0b0ZpdENvbnRleHRQYXJlbnQoKTtcbiAgICBjb25zdCBwYXJlbnRPZmZzZXQgPSBnZXRFbGVtZW50T2Zmc2V0KFxuICAgICAgcGFyZW50LFxuICAgICAgdGhpcy4jY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldFxuICAgICk7XG5cbiAgICBjb25zdCBhZmZpeGVkUmVjdCA9IHRoaXMuI2dldFJlY3QodGhpcy4jYWZmaXhlZEVsZW1lbnQpO1xuICAgIGNvbnN0IGJhc2VSZWN0ID0gdGhpcy4jZ2V0UmVjdChiYXNlRWxlbWVudCk7XG5cbiAgICAvLyBBIHBpeGVsIHZhbHVlIHJlcHJlc2VudGluZyB0aGUgbGVld2F5IGJldHdlZW4gdGhlIGVkZ2Ugb2YgdGhlIG92ZXJmbG93IHBhcmVudCBhbmQgdGhlIGVkZ2VcbiAgICAvLyBvZiB0aGUgYmFzZSBlbGVtZW50IGJlZm9yZSBpdCBkaXNhcHBlYXJzIGZyb20gdmlldy5cbiAgICAvLyBJZiB0aGUgdmlzaWJsZSBwb3J0aW9uIG9mIHRoZSBiYXNlIGVsZW1lbnQgaXMgbGVzcyB0aGFuIHRoaXMgcGl4ZWwgdmFsdWUsIHRoZSBhdXRvLWZpdFxuICAgIC8vIGZ1bmN0aW9uYWxpdHkgYXR0ZW1wdHMgdG8gZmluZCBhbm90aGVyIHBsYWNlbWVudC5cbiAgICBjb25zdCBkZWZhdWx0UGl4ZWxUb2xlcmFuY2UgPSA0MDtcbiAgICBsZXQgcGl4ZWxUb2xlcmFuY2U6IG51bWJlcjtcblxuICAgIGNvbnN0IG9yaWdpbmFsT2Zmc2V0VG9wID0gb2Zmc2V0LnRvcDtcbiAgICBjb25zdCBvcmlnaW5hbE9mZnNldExlZnQgPSBvZmZzZXQubGVmdDtcblxuICAgIHN3aXRjaCAocGxhY2VtZW50KSB7XG4gICAgICBjYXNlICdhYm92ZSc6XG4gICAgICBjYXNlICdiZWxvdyc6XG4gICAgICAgIC8vIEtlZXAgdGhlIGFmZml4ZWQgZWxlbWVudCB3aXRoaW4gdGhlIG92ZXJmbG93IHBhcmVudC5cbiAgICAgICAgaWYgKG9mZnNldC5sZWZ0IDwgcGFyZW50T2Zmc2V0LmxlZnQpIHtcbiAgICAgICAgICBvZmZzZXQubGVmdCA9IHBhcmVudE9mZnNldC5sZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGggPiBwYXJlbnRPZmZzZXQucmlnaHQpIHtcbiAgICAgICAgICBvZmZzZXQubGVmdCA9IHBhcmVudE9mZnNldC5yaWdodCAtIGFmZml4ZWRSZWN0LndpZHRoO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIGEgc21hbGxlciBwaXhlbCB0b2xlcmFuY2UgaWYgdGhlIGJhc2UgZWxlbWVudCB3aWR0aCBpcyBsZXNzIHRoYW4gdGhlIGRlZmF1bHQuXG4gICAgICAgIHBpeGVsVG9sZXJhbmNlID0gTWF0aC5taW4oZGVmYXVsdFBpeGVsVG9sZXJhbmNlLCBiYXNlUmVjdC53aWR0aCk7XG5cbiAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBhZmZpeGVkIGVsZW1lbnQgbmV2ZXIgZGV0YWNoZXMgZnJvbSB0aGUgYmFzZSBlbGVtZW50LlxuICAgICAgICBpZiAoXG4gICAgICAgICAgb2Zmc2V0LmxlZnQgKyBwaXhlbFRvbGVyYW5jZSA+IGJhc2VSZWN0LnJpZ2h0IHx8XG4gICAgICAgICAgb2Zmc2V0LmxlZnQgKyBhZmZpeGVkUmVjdC53aWR0aCAtIHBpeGVsVG9sZXJhbmNlIDwgYmFzZVJlY3QubGVmdFxuICAgICAgICApIHtcbiAgICAgICAgICBvZmZzZXQubGVmdCA9IG9yaWdpbmFsT2Zmc2V0TGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgLy8gS2VlcCB0aGUgYWZmaXhlZCBlbGVtZW50IHdpdGhpbiB0aGUgb3ZlcmZsb3cgcGFyZW50LlxuICAgICAgICBpZiAob2Zmc2V0LnRvcCA8IHBhcmVudE9mZnNldC50b3ApIHtcbiAgICAgICAgICBvZmZzZXQudG9wID0gcGFyZW50T2Zmc2V0LnRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQudG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0ID4gcGFyZW50T2Zmc2V0LmJvdHRvbSkge1xuICAgICAgICAgIG9mZnNldC50b3AgPSBwYXJlbnRPZmZzZXQuYm90dG9tIC0gYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVXNlIGEgc21hbGxlciBwaXhlbCB0b2xlcmFuY2UgaWYgdGhlIGJhc2UgZWxlbWVudCBoZWlnaHQgaXMgbGVzcyB0aGFuIHRoZSBkZWZhdWx0LlxuICAgICAgICBwaXhlbFRvbGVyYW5jZSA9IE1hdGgubWluKGRlZmF1bHRQaXhlbFRvbGVyYW5jZSwgYmFzZVJlY3QuaGVpZ2h0KTtcblxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGFmZml4ZWQgZWxlbWVudCBuZXZlciBkZXRhY2hlcyBmcm9tIHRoZSBiYXNlIGVsZW1lbnQuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvZmZzZXQudG9wICsgcGl4ZWxUb2xlcmFuY2UgPiBiYXNlUmVjdC5ib3R0b20gfHxcbiAgICAgICAgICBvZmZzZXQudG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0IC0gcGl4ZWxUb2xlcmFuY2UgPCBiYXNlUmVjdC50b3BcbiAgICAgICAgKSB7XG4gICAgICAgICAgb2Zmc2V0LnRvcCA9IG9yaWdpbmFsT2Zmc2V0VG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuXG4gICNnZXRJbW1lZGlhdGVPdmVyZmxvd1BhcmVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuI292ZXJmbG93UGFyZW50c1t0aGlzLiNvdmVyZmxvd1BhcmVudHMubGVuZ3RoIC0gMV07XG4gIH1cblxuICAjZ2V0QXV0b0ZpdENvbnRleHRQYXJlbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IGJvZHlFbGVtZW50ID0gdGhpcy4jb3ZlcmZsb3dQYXJlbnRzWzBdO1xuXG4gICAgcmV0dXJuIHRoaXMuI2NvbmZpZy5hdXRvRml0Q29udGV4dCA9PT0gU2t5QWZmaXhBdXRvRml0Q29udGV4dC5PdmVyZmxvd1BhcmVudFxuICAgICAgPyB0aGlzLiNnZXRJbW1lZGlhdGVPdmVyZmxvd1BhcmVudCgpXG4gICAgICA6IGJvZHlFbGVtZW50O1xuICB9XG5cbiAgI25vdGlmeVBsYWNlbWVudENoYW5nZShwbGFjZW1lbnQ6IFNreUFmZml4UGxhY2VtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNjdXJyZW50UGxhY2VtZW50ICE9PSBwbGFjZW1lbnQpIHtcbiAgICAgIHRoaXMuI2N1cnJlbnRQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPz8gdW5kZWZpbmVkO1xuICAgICAgdGhpcy4jcGxhY2VtZW50Q2hhbmdlLm5leHQoe1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAjcmVzZXQoKTogdm9pZCB7XG4gICAgdGhpcy4jcmVtb3ZlU2Nyb2xsTGlzdGVuZXJzKCk7XG4gICAgdGhpcy4jcmVtb3ZlUmVzaXplTGlzdGVuZXIoKTtcblxuICAgIHRoaXMuI292ZXJmbG93UGFyZW50cyA9IFtdO1xuXG4gICAgdGhpcy4jY29uZmlnID1cbiAgICAgIHRoaXMuI2Jhc2VFbGVtZW50ID1cbiAgICAgIHRoaXMuI2N1cnJlbnRQbGFjZW1lbnQgPVxuICAgICAgdGhpcy4jY3VycmVudE9mZnNldCA9XG4gICAgICAgIHVuZGVmaW5lZDtcbiAgfVxuXG4gICNpc05ld09mZnNldChvZmZzZXQ6IFNreUFmZml4T2Zmc2V0KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuI2N1cnJlbnRPZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy4jY3VycmVudE9mZnNldCA9IG9mZnNldDtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHRoaXMuI2N1cnJlbnRPZmZzZXQudG9wID09PSBvZmZzZXQudG9wICYmXG4gICAgICB0aGlzLiNjdXJyZW50T2Zmc2V0LmxlZnQgPT09IG9mZnNldC5sZWZ0XG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhpcy4jY3VycmVudE9mZnNldCA9IG9mZnNldDtcblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgI2lzQmFzZUVsZW1lbnRWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy4jYmFzZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBiYXNlUmVjdCA9IHRoaXMuI2Jhc2VFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgcmV0dXJuIGlzT2Zmc2V0UGFydGlhbGx5VmlzaWJsZVdpdGhpblBhcmVudChcbiAgICAgIHRoaXMuI2dldEltbWVkaWF0ZU92ZXJmbG93UGFyZW50KCksXG4gICAgICB7XG4gICAgICAgIHRvcDogYmFzZVJlY3QudG9wLFxuICAgICAgICBsZWZ0OiBiYXNlUmVjdC5sZWZ0LFxuICAgICAgICByaWdodDogYmFzZVJlY3QucmlnaHQsXG4gICAgICAgIGJvdHRvbTogYmFzZVJlY3QuYm90dG9tLFxuICAgICAgfSxcbiAgICAgIHRoaXMuI2NvbmZpZy5hdXRvRml0T3ZlcmZsb3dPZmZzZXRcbiAgICApO1xuICB9XG5cbiAgI2FkZFNjcm9sbExpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLiNzY3JvbGxMaXN0ZW5lcnMgPSB0aGlzLiNvdmVyZmxvd1BhcmVudHMubWFwKChwYXJlbnRFbGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9XG4gICAgICAgIHBhcmVudEVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkgPyAnd2luZG93JyA6IHBhcmVudEVsZW1lbnQ7XG4gICAgICByZXR1cm4gdGhpcy4jcmVuZGVyZXIubGlzdGVuKG92ZXJmbG93LCAnc2Nyb2xsJywgKCkgPT4ge1xuICAgICAgICB0aGlzLiNhZmZpeCgpO1xuICAgICAgICB0aGlzLiNvdmVyZmxvd1Njcm9sbC5uZXh0KCk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gICNhZGRSZXNpemVMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICB0aGlzLiNyZXNpemVMaXN0ZW5lciA9IGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5zdWJzY3JpYmUoKCkgPT5cbiAgICAgIHRoaXMuI2FmZml4KClcbiAgICApO1xuICB9XG5cbiAgI3JlbW92ZVJlc2l6ZUxpc3RlbmVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLiNyZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy4jcmVzaXplTGlzdGVuZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRoaXMuI3Jlc2l6ZUxpc3RlbmVyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gICNyZW1vdmVTY3JvbGxMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI3Njcm9sbExpc3RlbmVycykge1xuICAgICAgLy8gUmVtb3ZlIHJlbmRlcmVyLWdlbmVyYXRlZCBsaXN0ZW5lcnMgYnkgY2FsbGluZyB0aGUgbGlzdGVuZXIgaXRzZWxmLlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvOTM2OCNpc3N1ZWNvbW1lbnQtMjI3MTk5Nzc4XG4gICAgICB0aGlzLiNzY3JvbGxMaXN0ZW5lcnMuZm9yRWFjaCgobGlzdGVuZXIpID0+IGxpc3RlbmVyKCkpO1xuICAgICAgdGhpcy4jc2Nyb2xsTGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuIl19
408
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWZmaXhlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9jb3JlL3NyYy9saWIvbW9kdWxlcy9hZmZpeC9hZmZpeGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBYyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXpELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBT2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0RSxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGtCQUFrQixFQUNsQixnQ0FBZ0MsRUFDaEMsb0NBQW9DLEdBQ3JDLE1BQU0sYUFBYSxDQUFDO0FBa0JyQixNQUFNLG9CQUFvQixHQUEwQjtJQUNsRCxjQUFjLEVBQUUsc0JBQXNCLENBQUMsY0FBYztJQUNyRCxhQUFhLEVBQUUsS0FBSztJQUNwQixtQkFBbUIsRUFBRSxRQUFRO0lBQzdCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsU0FBUyxFQUFFLE9BQU87Q0FDbkIsQ0FBQztBQUVGLE1BQU0sT0FBTyxVQUFVO0lBQ3JCOztPQUVHO0lBQ0gsSUFBVyxZQUFZO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsSUFBVyxjQUFjO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0lBQ2pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLGVBQWU7UUFDeEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBSSxPQUFPLENBQUMsS0FBaUM7UUFDM0MsTUFBTSxNQUFNLEdBQTBCO1lBQ3BDLEdBQUcs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QUFXLEVBQUUsQ0FBQztRQUV2QyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRTtZQUNoQyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUMvRCxDQUFDLGFBQWEsRUFBRSxFQUFFO2dCQUNoQixhQUFhLEVBQUUsbUJBQW1CLENBQ2hDLFFBQVEsRUFDUixJQUFJLENBQUMscUJBQXFCLENBQzNCLENBQUM7WUFDSixDQUFDLENBQ0YsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlld3BvcnRSdWxlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IE5nWm9uZSwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTa3lBZmZpeEF1dG9GaXRDb250ZXh0IH0gZnJvbSAnLi9hZmZpeC1hdXRvLWZpdC1jb250ZXh0JztcbmltcG9ydCB7IFNreUFmZml4Q29uZmlnIH0gZnJvbSAnLi9hZmZpeC1jb25maWcnO1xuaW1wb3J0IHsgU2t5QWZmaXhPZmZzZXQgfSBmcm9tICcuL2FmZml4LW9mZnNldCc7XG5pbXBvcnQgeyBTa3lBZmZpeE9mZnNldENoYW5nZSB9IGZyb20gJy4vYWZmaXgtb2Zmc2V0LWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lBZmZpeFBsYWNlbWVudCB9IGZyb20gJy4vYWZmaXgtcGxhY2VtZW50JztcbmltcG9ydCB7IFNreUFmZml4UGxhY2VtZW50Q2hhbmdlIH0gZnJvbSAnLi9hZmZpeC1wbGFjZW1lbnQtY2hhbmdlJztcbmltcG9ydCB7IEFmZml4UmVjdCB9IGZyb20gJy4vYWZmaXgtcmVjdCc7XG5pbXBvcnQgeyBnZXRJbnZlcnNlUGxhY2VtZW50LCBnZXROZXh0UGxhY2VtZW50IH0gZnJvbSAnLi9hZmZpeC11dGlscyc7XG5pbXBvcnQge1xuICBnZXRFbGVtZW50T2Zmc2V0LFxuICBnZXRPdmVyZmxvd1BhcmVudHMsXG4gIGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50LFxuICBpc09mZnNldFBhcnRpYWxseVZpc2libGVXaXRoaW5QYXJlbnQsXG59IGZyb20gJy4vZG9tLXV0aWxzJztcblxuLyoqXG4gKiBNYWtlIHNwZWNpZmljIHByb3BlcnRpZXMgcmVxdWlyZWQsIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0b1xuICogZG8gbnVsbCBjaGVja3MgdGhyb3VnaG91dCB0aGlzIGZpbGUuXG4gKi9cbnR5cGUgQWZmaXhDb25maWdPckRlZmF1bHRzID0gU2t5QWZmaXhDb25maWcgJlxuICBSZXF1aXJlZDxcbiAgICBQaWNrPFxuICAgICAgU2t5QWZmaXhDb25maWcsXG4gICAgICB8ICdhdXRvRml0Q29udGV4dCdcbiAgICAgIHwgJ2VuYWJsZUF1dG9GaXQnXG4gICAgICB8ICdob3Jpem9udGFsQWxpZ25tZW50J1xuICAgICAgfCAnaXNTdGlja3knXG4gICAgICB8ICdwbGFjZW1lbnQnXG4gICAgPlxuICA+O1xuXG5jb25zdCBERUZBVUxUX0FGRklYX0NPTkZJRzogQWZmaXhDb25maWdPckRlZmF1bHRzID0ge1xuICBhdXRvRml0Q29udGV4dDogU2t5QWZmaXhBdXRvRml0Q29udGV4dC5PdmVyZmxvd1BhcmVudCxcbiAgZW5hYmxlQXV0b0ZpdDogZmFsc2UsXG4gIGhvcml6b250YWxBbGlnbm1lbnQ6ICdjZW50ZXInLFxuICBpc1N0aWNreTogZmFsc2UsXG4gIHBsYWNlbWVudDogJ2Fib3ZlJyxcbn07XG5cbmV4cG9ydCBjbGFzcyBTa3lBZmZpeGVyIHtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGFmZml4ZWQgZWxlbWVudCdzIG9mZnNldCBjaGFuZ2VzLlxuICAgKi9cbiAgcHVibGljIGdldCBvZmZzZXRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lBZmZpeE9mZnNldENoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLiNvZmZzZXRDaGFuZ2VPYnM7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgYmFzZSBlbGVtZW50J3MgbmVhcmVzdCBvdmVyZmxvdyBwYXJlbnQgaXMgc2Nyb2xsaW5nLiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UgbmVlZFxuICAgKiB0byBwZXJmb3JtIGFuIGFkZGl0aW9uYWwgYWN0aW9uIGR1cmluZyB0aGUgc2Nyb2xsIGV2ZW50IGJ1dCBkb24ndCB3YW50IHRvIGdlbmVyYXRlIGFub3RoZXJcbiAgICogZXZlbnQgbGlzdGVuZXIuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG92ZXJmbG93U2Nyb2xsKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLiNvdmVyZmxvd1Njcm9sbE9icztcbiAgfVxuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSBwbGFjZW1lbnQgdmFsdWUgY2hhbmdlcy4gQSBgbnVsbGAgdmFsdWUgaW5kaWNhdGVzIHRoYXQgYSBzdWl0YWJsZVxuICAgKiBwbGFjZW1lbnQgY291bGQgbm90IGJlIGZvdW5kLlxuICAgKi9cbiAgcHVibGljIGdldCBwbGFjZW1lbnRDaGFuZ2UoKTogT2JzZXJ2YWJsZTxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT4ge1xuICAgIHJldHVybiB0aGlzLiNwbGFjZW1lbnRDaGFuZ2VPYnM7XG4gIH1cblxuICBnZXQgI2NvbmZpZygpOiBBZmZpeENvbmZpZ09yRGVmYXVsdHMge1xuICAgIHJldHVybiB0aGlzLiNfY29uZmlnO1xuICB9XG5cbiAgc2V0ICNjb25maWcodmFsdWU6IFNreUFmZml4Q29uZmlnIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbWVyZ2VkOiBBZmZpeENvbmZpZ09yRGVmYXVsdHMgPSB7XG4gICAgICAuLi5ERUZBVUxUX0FGRklYX0NPTkZJRyxcbiAgICAgIC4uLnZhbHVlLFxuICAgIH07XG5cbiAgICAvLyBNYWtlIHN1cmUgbm9uZSBvZiB0aGUgdmFsdWVzIGFyZSB1bmRlZmluZWQuXG4gICAgbGV0IGtleToga2V5b2YgdHlwZW9mIG1lcmdlZDtcbiAgICBmb3IgKGtleSBpbiBtZXJnZWQpIHtcbiAgICAgIGlmIChtZXJnZWRba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIChtZXJnZWQgYXMgYW55KVtrZXldID0gREVGQVVMVF9BRkZJWF9DT05GSUdba2V5XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNfY29uZmlnID0gbWVyZ2VkO1xuICB9XG5cbiAgI2FmZml4ZWRFbGVtZW50OiBIVE1MRWxlbWVudDtcblxuICAjYmFzZUVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgdW5kZWZpbmVkO1xuXG4gICNjdXJyZW50T2Zmc2V0OiBTa3lBZmZpeE9mZnNldCB8IHVuZGVmaW5lZDtcblxuICAjY3VycmVudFBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgI29mZnNldENoYW5nZTogU3ViamVjdDxTa3lBZmZpeE9mZnNldENoYW5nZT47XG5cbiAgI29mZnNldENoYW5nZU9iczogT2JzZXJ2YWJsZTxTa3lBZmZpeE9mZnNldENoYW5nZT47XG5cbiAgI292ZXJmbG93UGFyZW50czogSFRNTEVsZW1lbnRbXSA9IFtdO1xuXG4gICNvdmVyZmxvd1Njcm9sbDogU3ViamVjdDx2b2lkPjtcblxuICAjb3ZlcmZsb3dTY3JvbGxPYnM6IE9ic2VydmFibGU8dm9pZD47XG5cbiAgI3BsYWNlbWVudENoYW5nZTogU3ViamVjdDxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT47XG5cbiAgI3BsYWNlbWVudENoYW5nZU9iczogT2JzZXJ2YWJsZTxTa3lBZmZpeFBsYWNlbWVudENoYW5nZT47XG5cbiAgI3JlbmRlcmVyOiBSZW5kZXJlcjI7XG5cbiAgI3Njcm9sbENoYW5nZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgI3ZpZXdwb3J0TGlzdGVuZXJzOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWQ7XG5cbiAgI3ZpZXdwb3J0UnVsZXI6IFZpZXdwb3J0UnVsZXI7XG5cbiAgI3pvbmU6IE5nWm9uZTtcblxuICAjX2NvbmZpZzogQWZmaXhDb25maWdPckRlZmF1bHRzID0gREVGQVVMVF9BRkZJWF9DT05GSUc7XG5cbiAgI3Njcm9sbENoYW5nZUxpc3RlbmVyOiAoKSA9PiB2b2lkID0gKCkgPT4gdGhpcy4jc2Nyb2xsQ2hhbmdlLm5leHQoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBhZmZpeGVkRWxlbWVudDogSFRNTEVsZW1lbnQsXG4gICAgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICB2aWV3cG9ydFJ1bGVyOiBWaWV3cG9ydFJ1bGVyLFxuICAgIHpvbmU6IE5nWm9uZVxuICApIHtcbiAgICB0aGlzLiNhZmZpeGVkRWxlbWVudCA9IGFmZml4ZWRFbGVtZW50O1xuICAgIHRoaXMuI3JlbmRlcmVyID0gcmVuZGVyZXI7XG4gICAgdGhpcy4jdmlld3BvcnRSdWxlciA9IHZpZXdwb3J0UnVsZXI7XG4gICAgdGhpcy4jem9uZSA9IHpvbmU7XG5cbiAgICB0aGlzLiNvZmZzZXRDaGFuZ2UgPSBuZXcgU3ViamVjdDxTa3lBZmZpeE9mZnNldENoYW5nZT4oKTtcbiAgICB0aGlzLiNvdmVyZmxvd1Njcm9sbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgdGhpcy4jcGxhY2VtZW50Q2hhbmdlID0gbmV3IFN1YmplY3Q8U2t5QWZmaXhQbGFjZW1lbnRDaGFuZ2U+KCk7XG5cbiAgICB0aGlzLiNvZmZzZXRDaGFuZ2VPYnMgPSB0aGlzLiNvZmZzZXRDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy4jb3ZlcmZsb3dTY3JvbGxPYnMgPSB0aGlzLiNvdmVyZmxvd1Njcm9sbC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLiNwbGFjZW1lbnRDaGFuZ2VPYnMgPSB0aGlzLiNwbGFjZW1lbnRDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICAvKipcbiAgICogQWZmaXhlcyBhbiBlbGVtZW50IHRvIGEgYmFzZSBlbGVtZW50LlxuICAgKiBAcGFyYW0gYmFzZUVsZW1lbnQgVGhlIGJhc2UgZWxlbWVudC5cbiAgICogQHBhcmFtIGNvbmZpZyBDb25maWd1cmF0aW9uIGZvciB0aGUgYWZmaXggYWN0aW9uLlxuICAgKi9cbiAgcHVibGljIGFmZml4VG8oYmFzZUVsZW1lbnQ6IEhUTUxFbGVtZW50LCBjb25maWc/OiBTa3lBZmZpeENvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuI3Jlc2V0KCk7XG5cbiAgICB0aGlzLiNjb25maWcgPSBjb25maWc7XG4gICAgdGhpcy4jYmFzZUVsZW1lbnQgPSBiYXNlRWxlbWVudDtcbiAgICB0aGlzLiNvdmVyZmxvd1BhcmVudHMgPSBnZXRPdmVyZmxvd1BhcmVudHMoYmFzZUVsZW1lbnQpO1xuXG4gICAgdGhpcy4jYWZmaXgoKTtcblxuICAgIGlmICh0aGlzLiNjb25maWcuaXNTdGlja3kpIHtcbiAgICAgIHRoaXMuI2FkZFZpZXdwb3J0TGlzdGVuZXJzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldENvbmZpZygpOiBTa3lBZmZpeENvbmZpZyB7XG4gICAgcmV0dXJuIHRoaXMuI2NvbmZpZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1ydW5zIHRoZSBhZmZpeCBjYWxjdWxhdGlvbi5cbiAgICovXG4gIHB1YmxpYyByZWFmZml4KCk6IHZvaWQge1xuICAgIC8vIFJlc2V0IGN1cnJlbnQgcGxhY2VtZW50IHRvIHByZWZlcnJlZCBwbGFjZW1lbnQuXG4gICAgdGhpcy4jY3VycmVudFBsYWNlbWVudCA9IHRoaXMuI2NvbmZpZy5wbGFjZW1lbnQ7XG4gICAgdGhpcy4jYWZmaXgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXN0cm95cyB0aGUgYWZmaXhlci5cbiAgICovXG4gIHB1YmxpYyBkZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuI3Jlc2V0KCk7XG4gICAgdGhpcy4jcGxhY2VtZW50Q2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jb2Zmc2V0Q2hhbmdlLmNvbXBsZXRlKCk7XG4gICAgdGhpcy4jb3ZlcmZsb3dTY3JvbGwuY29tcGxldGUoKTtcbiAgICB0aGlzLiNzY3JvbGxDaGFuZ2UuY29tcGxldGUoKTtcbiAgfVxuXG4gICNhZmZpeCgpOiB2b2lkIHtcbiAgICBjb25zdCBvZmZzZXQgPSB0aGlzLiNnZXRPZmZzZXQoKTtcblxuICAgIGlmICh0aGlzLiNpc05ld09mZnNldChvZmZzZXQpKSB7XG4gICAgICB0aGlzLiNyZW5kZXJlci5zZXRTdHlsZSh0aGlzLiNhZmZpeGVkRWxlbWVudCwgJ3RvcCcsIGAke29mZnNldC50b3B9cHhgKTtcbiAgICAgIHRoaXMuI3JlbmRlcmVyLnNldFN0eWxlKHRoaXMuI2FmZml4ZWRFbGVtZW50LCAnbGVmdCcsIGAke29mZnNldC5sZWZ0fXB4YCk7XG5cbiAgICAgIHRoaXMuI29mZnNldENoYW5nZS5uZXh0KHsgb2Zmc2V0IH0pO1xuICAgIH1cbiAgfVxuXG4gICNnZXRPZmZzZXQoKTogU2t5QWZmaXhPZmZzZXQge1xuICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuI2dldEF1dG9GaXRDb250ZXh0UGFyZW50KCk7XG5cbiAgICBjb25zdCBtYXhBdHRlbXB0cyA9IDQ7XG4gICAgbGV0IGF0dGVtcHRzID0gMDtcblxuICAgIGxldCBpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlID0gZmFsc2U7XG4gICAgbGV0IG9mZnNldDogUmVxdWlyZWQ8U2t5QWZmaXhPZmZzZXQ+O1xuICAgIGxldCBwbGFjZW1lbnQgPSB0aGlzLiNjb25maWcucGxhY2VtZW50O1xuXG4gICAgY29uc3QgYXV0b0ZpdE92ZXJmbG93T2Zmc2V0ID0gdGhpcy4jY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldCB8fCB7XG4gICAgICBib3R0b206IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgcmlnaHQ6IDAsXG4gICAgICB0b3A6IDAsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLiNjb25maWcucG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgIGNvbnN0IHsgdG9wLCBsZWZ0IH0gPSB0aGlzLiN2aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgIGF1dG9GaXRPdmVyZmxvd09mZnNldC50b3AgPSAoYXV0b0ZpdE92ZXJmbG93T2Zmc2V0LnRvcCB8fCAwKSArIHRvcDtcbiAgICAgIGF1dG9GaXRPdmVyZmxvd09mZnNldC5sZWZ0ID0gKGF1dG9GaXRPdmVyZmxvd09mZnNldC5sZWZ0IHx8IDApICsgbGVmdDtcbiAgICAgIGF1dG9GaXRPdmVyZmxvd09mZnNldC5ib3R0b20gPSAoYXV0b0ZpdE92ZXJmbG93T2Zmc2V0LmJvdHRvbSB8fCAwKSArIHRvcDtcbiAgICAgIGF1dG9GaXRPdmVyZmxvd09mZnNldC5yaWdodCA9IChhdXRvRml0T3ZlcmZsb3dPZmZzZXQucmlnaHQgfHwgMCkgKyBsZWZ0O1xuICAgIH1cblxuICAgIGRvIHtcbiAgICAgIG9mZnNldCA9IHRoaXMuI2dldFByZWZlcnJlZE9mZnNldChwbGFjZW1lbnQpO1xuICAgICAgaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSA9IGlzT2Zmc2V0RnVsbHlWaXNpYmxlV2l0aGluUGFyZW50KFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIG9mZnNldCxcbiAgICAgICAgYXV0b0ZpdE92ZXJmbG93T2Zmc2V0XG4gICAgICApO1xuXG4gICAgICBpZiAoIXRoaXMuI2NvbmZpZy5lbmFibGVBdXRvRml0KSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWlzQWZmaXhlZEVsZW1lbnRGdWxseVZpc2libGUpIHtcbiAgICAgICAgcGxhY2VtZW50ID1cbiAgICAgICAgICBhdHRlbXB0cyAlIDIgPT09IDBcbiAgICAgICAgICAgID8gZ2V0SW52ZXJzZVBsYWNlbWVudChwbGFjZW1lbnQpXG4gICAgICAgICAgICA6IGdldE5leHRQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgICAgIH1cblxuICAgICAgYXR0ZW1wdHMrKztcbiAgICB9IHdoaWxlICghaXNBZmZpeGVkRWxlbWVudEZ1bGx5VmlzaWJsZSAmJiBhdHRlbXB0cyA8IG1heEF0dGVtcHRzKTtcblxuICAgIGlmIChpc0FmZml4ZWRFbGVtZW50RnVsbHlWaXNpYmxlKSB7XG4gICAgICBpZiAodGhpcy4jaXNCYXNlRWxlbWVudFZpc2libGUoKSkge1xuICAgICAgICB0aGlzLiNub3RpZnlQbGFjZW1lbnRDaGFuZ2UocGxhY2VtZW50KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI25vdGlmeVBsYWNlbWVudENoYW5nZShudWxsKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jY29uZmlnLmVuYWJsZUF1dG9GaXQpIHtcbiAgICAgIHRoaXMuI25vdGlmeVBsYWNlbWVudENoYW5nZShudWxsKTtcbiAgICB9XG5cbiAgICAvLyBObyBzdWl0YWJsZSBwbGFjZW1lbnQgd2FzIGZvdW5kLCBzbyByZXZlcnQgdG8gcHJlZmVycmVkIHBsYWNlbWVudC5cbiAgICByZXR1cm4gdGhpcy4jZ2V0UHJlZmVycmVkT2Zmc2V0KHRoaXMuI2NvbmZpZy5wbGFjZW1lbnQpO1xuICB9XG5cbiAgI2dldFJlY3QoYmFzZUVsZW1lbnQ6IEhUTUxFbGVtZW50KTogQWZmaXhSZWN0IHtcbiAgICBjb25zdCBiYXNlRG9tUmVjdCA9IGJhc2VFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgY29uc3QgYmFzZVJlY3Q6IEFmZml4UmVjdCA9IHtcbiAgICAgIHRvcDogYmFzZURvbVJlY3QudG9wLFxuICAgICAgYm90dG9tOiBiYXNlRG9tUmVjdC5ib3R0b20sXG4gICAgICBsZWZ0OiBiYXNlRG9tUmVjdC5sZWZ0LFxuICAgICAgcmlnaHQ6IGJhc2VEb21SZWN0LnJpZ2h0LFxuICAgICAgd2lkdGg6IGJhc2VEb21SZWN0LndpZHRoLFxuICAgICAgaGVpZ2h0OiBiYXNlRG9tUmVjdC5oZWlnaHQsXG4gICAgfTtcblxuICAgIGlmICh0aGlzLiNjb25maWcucG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgIGNvbnN0IHsgbGVmdCwgdG9wIH0gPSB0aGlzLiN2aWV3cG9ydFJ1bGVyLmdldFZpZXdwb3J0U2Nyb2xsUG9zaXRpb24oKTtcbiAgICAgIGJhc2VSZWN0LnRvcCArPSB0b3A7XG4gICAgICBiYXNlUmVjdC5sZWZ0ICs9IGxlZnQ7XG4gICAgICBiYXNlUmVjdC5ib3R0b20gKz0gdG9wO1xuICAgICAgYmFzZVJlY3QucmlnaHQgKz0gbGVmdDtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZVJlY3Q7XG4gIH1cblxuICAjZ2V0UHJlZmVycmVkT2Zmc2V0KHBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQpOiBSZXF1aXJlZDxTa3lBZmZpeE9mZnNldD4ge1xuICAgIGlmICghdGhpcy4jYmFzZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB7IHRvcDogMCwgbGVmdDogMCwgYm90dG9tOiAwLCByaWdodDogMCB9O1xuICAgIH1cblxuICAgIGNvbnN0IGFmZml4ZWRSZWN0ID0gdGhpcy4jZ2V0UmVjdCh0aGlzLiNhZmZpeGVkRWxlbWVudCk7XG4gICAgY29uc3QgYmFzZVJlY3QgPSB0aGlzLiNnZXRSZWN0KHRoaXMuI2Jhc2VFbGVtZW50KTtcblxuICAgIGNvbnN0IGhvcml6b250YWxBbGlnbm1lbnQgPSB0aGlzLiNjb25maWcuaG9yaXpvbnRhbEFsaWdubWVudDtcbiAgICBjb25zdCB2ZXJ0aWNhbEFsaWdubWVudCA9IHRoaXMuI2NvbmZpZy52ZXJ0aWNhbEFsaWdubWVudDtcbiAgICBjb25zdCBlbmFibGVBdXRvRml0ID0gdGhpcy4jY29uZmlnLmVuYWJsZUF1dG9GaXQ7XG5cbiAgICBsZXQgdG9wOiBudW1iZXI7XG4gICAgbGV0IGxlZnQ6IG51bWJlcjtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09ICdhYm92ZScgfHwgcGxhY2VtZW50ID09PSAnYmVsb3cnKSB7XG4gICAgICBpZiAocGxhY2VtZW50ID09PSAnYWJvdmUnKSB7XG4gICAgICAgIHRvcCA9IGJhc2VSZWN0LnRvcCAtIGFmZml4ZWRSZWN0LmhlaWdodDtcblxuICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICAgIHRvcCA9IHRvcCArIGFmZml4ZWRSZWN0LmhlaWdodDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ21pZGRsZSc6XG4gICAgICAgICAgICB0b3AgPSB0b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRvcCA9IGJhc2VSZWN0LmJvdHRvbTtcblxuICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ25tZW50KSB7XG4gICAgICAgICAgY2FzZSAndG9wJzpcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSAnbWlkZGxlJzpcbiAgICAgICAgICAgIHRvcCA9IHRvcCAtIGFmZml4ZWRSZWN0LmhlaWdodCAvIDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgdG9wID0gdG9wIC0gYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChob3Jpem9udGFsQWxpZ25tZW50KSB7XG4gICAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgICAgIGxlZnQgPSBiYXNlUmVjdC5sZWZ0O1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgbGVmdCA9IGJhc2VSZWN0LmxlZnQgKyBiYXNlUmVjdC53aWR0aCAvIDIgLSBhZmZpeGVkUmVjdC53aWR0aCAvIDI7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgPSBiYXNlUmVjdC5yaWdodCAtIGFmZml4ZWRSZWN0LndpZHRoO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocGxhY2VtZW50ID09PSAnbGVmdCcpIHtcbiAgICAgICAgbGVmdCA9IGJhc2VSZWN0LmxlZnQgLSBhZmZpeGVkUmVjdC53aWR0aDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnQgPSBiYXNlUmVjdC5yaWdodDtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoICh2ZXJ0aWNhbEFsaWdubWVudCkge1xuICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgIHRvcCA9IGJhc2VSZWN0LnRvcDtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdtaWRkbGUnOlxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRvcCA9IGJhc2VSZWN0LnRvcCArIGJhc2VSZWN0LmhlaWdodCAvIDIgLSBhZmZpeGVkUmVjdC5oZWlnaHQgLyAyO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgdG9wID0gYmFzZVJlY3QuYm90dG9tIC0gYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9mZnNldDogUmVxdWlyZWQ8U2t5QWZmaXhPZmZzZXQ+ID0geyB0b3AsIGxlZnQsIGJvdHRvbTogMCwgcmlnaHQ6IDAgfTtcblxuICAgIGlmIChlbmFibGVBdXRvRml0KSB7XG4gICAgICBjb25zdCBhZGp1c3RtZW50cyA9IHRoaXMuI2FkanVzdE9mZnNldFRvT3ZlcmZsb3dQYXJlbnQoXG4gICAgICAgIHsgdG9wLCBsZWZ0IH0sXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgdGhpcy4jYmFzZUVsZW1lbnRcbiAgICAgICk7XG4gICAgICBvZmZzZXQudG9wID0gYWRqdXN0bWVudHMudG9wO1xuICAgICAgb2Zmc2V0LmxlZnQgPSBhZGp1c3RtZW50cy5sZWZ0O1xuICAgIH1cblxuICAgIG9mZnNldC5ib3R0b20gPSBvZmZzZXQudG9wICsgYWZmaXhlZFJlY3QuaGVpZ2h0O1xuICAgIG9mZnNldC5yaWdodCA9IG9mZnNldC5sZWZ0ICsgYWZmaXhlZFJlY3Qud2lkdGg7XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgLyoqXG4gICAqIFNsaWdodGx5IGFkanVzdCB0aGUgb2Zmc2V0IHRvIGZpdCB3aXRoaW4gdGhlIHNjcm9sbCBwYXJlbnQncyBib3VuZGFyaWVzIGlmXG4gICAqIHRoZSBhZmZpeGVkIGVsZW1lbnQgd291bGQgb3RoZXJ3aXNlIGJlIGNsaXBwZWQuXG4gICAqL1xuICAjYWRqdXN0T2Zmc2V0VG9PdmVyZmxvd1BhcmVudChcbiAgICBvZmZzZXQ6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9LFxuICAgIHBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQsXG4gICAgYmFzZUVsZW1lbnQ6IEhUTUxFbGVtZW50XG4gICk6IHsgdG9wOiBudW1iZXI7IGxlZnQ6IG51bWJlciB9IHtcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLiNnZXRBdXRvRml0Q29udGV4dFBhcmVudCgpO1xuICAgIGNvbnN0IHBhcmVudE9mZnNldCA9IGdldEVsZW1lbnRPZmZzZXQoXG4gICAgICBwYXJlbnQsXG4gICAgICB0aGlzLiNjb25maWcuYXV0b0ZpdE92ZXJmbG93T2Zmc2V0XG4gICAgKTtcblxuICAgIGNvbnN0IGFmZml4ZWRSZWN0ID0gdGhpcy4jZ2V0UmVjdCh0aGlzLiNhZmZpeGVkRWxlbWVudCk7XG4gICAgY29uc3QgYmFzZVJlY3QgPSB0aGlzLiNnZXRSZWN0KGJhc2VFbGVtZW50KTtcblxuICAgIC8vIEEgcGl4ZWwgdmFsdWUgcmVwcmVzZW50aW5nIHRoZSBsZWV3YXkgYmV0d2VlbiB0aGUgZWRnZSBvZiB0aGUgb3ZlcmZsb3cgcGFyZW50IGFuZCB0aGUgZWRnZVxuICAgIC8vIG9mIHRoZSBiYXNlIGVsZW1lbnQgYmVmb3JlIGl0IGRpc2FwcGVhcnMgZnJvbSB2aWV3LlxuICAgIC8vIElmIHRoZSB2aXNpYmxlIHBvcnRpb24gb2YgdGhlIGJhc2UgZWxlbWVudCBpcyBsZXNzIHRoYW4gdGhpcyBwaXhlbCB2YWx1ZSwgdGhlIGF1dG8tZml0XG4gICAgLy8gZnVuY3Rpb25hbGl0eSBhdHRlbXB0cyB0byBmaW5kIGFub3RoZXIgcGxhY2VtZW50LlxuICAgIGNvbnN0IGRlZmF1bHRQaXhlbFRvbGVyYW5jZSA9IDQwO1xuICAgIGxldCBwaXhlbFRvbGVyYW5jZTogbnVtYmVyO1xuXG4gICAgY29uc3Qgb3JpZ2luYWxPZmZzZXRUb3AgPSBvZmZzZXQudG9wO1xuICAgIGNvbnN0IG9yaWdpbmFsT2Zmc2V0TGVmdCA9IG9mZnNldC5sZWZ0O1xuXG4gICAgc3dpdGNoIChwbGFjZW1lbnQpIHtcbiAgICAgIGNhc2UgJ2Fib3ZlJzpcbiAgICAgIGNhc2UgJ2JlbG93JzpcbiAgICAgICAgLy8gS2VlcCB0aGUgYWZmaXhlZCBlbGVtZW50IHdpdGhpbiB0aGUgb3ZlcmZsb3cgcGFyZW50LlxuICAgICAgICBpZiAob2Zmc2V0LmxlZnQgPCBwYXJlbnRPZmZzZXQubGVmdCkge1xuICAgICAgICAgIG9mZnNldC5sZWZ0ID0gcGFyZW50T2Zmc2V0LmxlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0LmxlZnQgKyBhZmZpeGVkUmVjdC53aWR0aCA+IHBhcmVudE9mZnNldC5yaWdodCkge1xuICAgICAgICAgIG9mZnNldC5sZWZ0ID0gcGFyZW50T2Zmc2V0LnJpZ2h0IC0gYWZmaXhlZFJlY3Qud2lkdGg7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2UgYSBzbWFsbGVyIHBpeGVsIHRvbGVyYW5jZSBpZiB0aGUgYmFzZSBlbGVtZW50IHdpZHRoIGlzIGxlc3MgdGhhbiB0aGUgZGVmYXVsdC5cbiAgICAgICAgcGl4ZWxUb2xlcmFuY2UgPSBNYXRoLm1pbihkZWZhdWx0UGl4ZWxUb2xlcmFuY2UsIGJhc2VSZWN0LndpZHRoKTtcblxuICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIGFmZml4ZWQgZWxlbWVudCBuZXZlciBkZXRhY2hlcyBmcm9tIHRoZSBiYXNlIGVsZW1lbnQuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvZmZzZXQubGVmdCArIHBpeGVsVG9sZXJhbmNlID4gYmFzZVJlY3QucmlnaHQgfHxcbiAgICAgICAgICBvZmZzZXQubGVmdCArIGFmZml4ZWRSZWN0LndpZHRoIC0gcGl4ZWxUb2xlcmFuY2UgPCBiYXNlUmVjdC5sZWZ0XG4gICAgICAgICkge1xuICAgICAgICAgIG9mZnNldC5sZWZ0ID0gb3JpZ2luYWxPZmZzZXRMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xlZnQnOlxuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAvLyBLZWVwIHRoZSBhZmZpeGVkIGVsZW1lbnQgd2l0aGluIHRoZSBvdmVyZmxvdyBwYXJlbnQuXG4gICAgICAgIGlmIChvZmZzZXQudG9wIDwgcGFyZW50T2Zmc2V0LnRvcCkge1xuICAgICAgICAgIG9mZnNldC50b3AgPSBwYXJlbnRPZmZzZXQudG9wO1xuICAgICAgICB9IGVsc2UgaWYgKG9mZnNldC50b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQgPiBwYXJlbnRPZmZzZXQuYm90dG9tKSB7XG4gICAgICAgICAgb2Zmc2V0LnRvcCA9IHBhcmVudE9mZnNldC5ib3R0b20gLSBhZmZpeGVkUmVjdC5oZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBVc2UgYSBzbWFsbGVyIHBpeGVsIHRvbGVyYW5jZSBpZiB0aGUgYmFzZSBlbGVtZW50IGhlaWdodCBpcyBsZXNzIHRoYW4gdGhlIGRlZmF1bHQuXG4gICAgICAgIHBpeGVsVG9sZXJhbmNlID0gTWF0aC5taW4oZGVmYXVsdFBpeGVsVG9sZXJhbmNlLCBiYXNlUmVjdC5oZWlnaHQpO1xuXG4gICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgYWZmaXhlZCBlbGVtZW50IG5ldmVyIGRldGFjaGVzIGZyb20gdGhlIGJhc2UgZWxlbWVudC5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9mZnNldC50b3AgKyBwaXhlbFRvbGVyYW5jZSA+IGJhc2VSZWN0LmJvdHRvbSB8fFxuICAgICAgICAgIG9mZnNldC50b3AgKyBhZmZpeGVkUmVjdC5oZWlnaHQgLSBwaXhlbFRvbGVyYW5jZSA8IGJhc2VSZWN0LnRvcFxuICAgICAgICApIHtcbiAgICAgICAgICBvZmZzZXQudG9wID0gb3JpZ2luYWxPZmZzZXRUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0O1xuICB9XG5cbiAgI2dldEltbWVkaWF0ZU92ZXJmbG93UGFyZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy4jb3ZlcmZsb3dQYXJlbnRzW3RoaXMuI292ZXJmbG93UGFyZW50cy5sZW5ndGggLSAxXTtcbiAgfVxuXG4gICNnZXRBdXRvRml0Q29udGV4dFBhcmVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgY29uc3QgYm9keUVsZW1lbnQgPSB0aGlzLiNvdmVyZmxvd1BhcmVudHNbMF07XG5cbiAgICByZXR1cm4gdGhpcy4jY29uZmlnLmF1dG9GaXRDb250ZXh0ID09PSBTa3lBZmZpeEF1dG9GaXRDb250ZXh0Lk92ZXJmbG93UGFyZW50XG4gICAgICA/IHRoaXMuI2dldEltbWVkaWF0ZU92ZXJmbG93UGFyZW50KClcbiAgICAgIDogYm9keUVsZW1lbnQ7XG4gIH1cblxuICAjbm90aWZ5UGxhY2VtZW50Q2hhbmdlKHBsYWNlbWVudDogU2t5QWZmaXhQbGFjZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuI2N1cnJlbnRQbGFjZW1lbnQgIT09IHBsYWNlbWVudCkge1xuICAgICAgdGhpcy4jY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudCA/PyB1bmRlZmluZWQ7XG4gICAgICB0aGlzLiNwbGFjZW1lbnRDaGFuZ2UubmV4dCh7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gICNyZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLiNyZW1vdmVWaWV3cG9ydExpc3RlbmVycygpO1xuXG4gICAgdGhpcy4jb3ZlcmZsb3dQYXJlbnRzID0gW107XG5cbiAgICB0aGlzLiNjb25maWcgPVxuICAgICAgdGhpcy4jYmFzZUVsZW1lbnQgPVxuICAgICAgdGhpcy4jY3VycmVudFBsYWNlbWVudCA9XG4gICAgICB0aGlzLiNjdXJyZW50T2Zmc2V0ID1cbiAgICAgICAgdW5kZWZpbmVkO1xuICB9XG5cbiAgI2lzTmV3T2Zmc2V0KG9mZnNldDogU2t5QWZmaXhPZmZzZXQpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy4jY3VycmVudE9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLiNjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdGhpcy4jY3VycmVudE9mZnNldC50b3AgPT09IG9mZnNldC50b3AgJiZcbiAgICAgIHRoaXMuI2N1cnJlbnRPZmZzZXQubGVmdCA9PT0gb2Zmc2V0LmxlZnRcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0aGlzLiNjdXJyZW50T2Zmc2V0ID0gb2Zmc2V0O1xuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAjaXNCYXNlRWxlbWVudFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLiNiYXNlRWxlbWVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGJhc2VSZWN0ID0gdGhpcy4jYmFzZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICByZXR1cm4gaXNPZmZzZXRQYXJ0aWFsbHlWaXNpYmxlV2l0aGluUGFyZW50KFxuICAgICAgdGhpcy4jZ2V0SW1tZWRpYXRlT3ZlcmZsb3dQYXJlbnQoKSxcbiAgICAgIHtcbiAgICAgICAgdG9wOiBiYXNlUmVjdC50b3AsXG4gICAgICAgIGxlZnQ6IGJhc2VSZWN0LmxlZnQsXG4gICAgICAgIHJpZ2h0OiBiYXNlUmVjdC5yaWdodCxcbiAgICAgICAgYm90dG9tOiBiYXNlUmVjdC5ib3R0b20sXG4gICAgICB9LFxuICAgICAgdGhpcy4jY29uZmlnLmF1dG9GaXRPdmVyZmxvd09mZnNldFxuICAgICk7XG4gIH1cblxuICAjYWRkVmlld3BvcnRMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy4jdmlld3BvcnRMaXN0ZW5lcnMgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAvLyBSZXNpemUgYW5kIG9yaWVudGF0aW9uIGNoYW5nZXMuXG4gICAgdGhpcy4jdmlld3BvcnRMaXN0ZW5lcnMuYWRkKFxuICAgICAgdGhpcy4jdmlld3BvcnRSdWxlci5jaGFuZ2UoKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLiNhZmZpeCgpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy4jdmlld3BvcnRMaXN0ZW5lcnMuYWRkKFxuICAgICAgdGhpcy4jc2Nyb2xsQ2hhbmdlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuI2FmZml4KCk7XG4gICAgICAgIHRoaXMuI292ZXJmbG93U2Nyb2xsLm5leHQoKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIExpc3RlbiBmb3Igc2Nyb2xsIGV2ZW50cyBvbiB0aGUgd2luZG93LCB2aXN1YWwgdmlld3BvcnQsIGFuZCBhbnkgb3ZlcmZsb3cgcGFyZW50cy5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5jaHJvbWUuY29tL2Jsb2cvdmlzdWFsLXZpZXdwb3J0LWFwaS8jZXZlbnRzLW9ubHktZmlyZS13aGVuLXRoZS12aXN1YWwtdmlld3BvcnQtY2hhbmdlc1xuICAgIHRoaXMuI3pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgW3dpbmRvdywgd2luZG93LnZpc3VhbFZpZXdwb3J0LCAuLi50aGlzLiNvdmVyZmxvd1BhcmVudHNdLmZvckVhY2goXG4gICAgICAgIChwYXJlbnRFbGVtZW50KSA9PiB7XG4gICAgICAgICAgcGFyZW50RWxlbWVudD8uYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy4jc2Nyb2xsQ2hhbmdlTGlzdGVuZXIpO1xuICAgICAgICB9XG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgI3JlbW92ZVZpZXdwb3J0TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuI3ZpZXdwb3J0TGlzdGVuZXJzPy51bnN1YnNjcmliZSgpO1xuXG4gICAgdGhpcy4jem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICBbd2luZG93LCB3aW5kb3cudmlzdWFsVmlld3BvcnQsIC4uLnRoaXMuI292ZXJmbG93UGFyZW50c10uZm9yRWFjaChcbiAgICAgICAgKHBhcmVudEVsZW1lbnQpID0+IHtcbiAgICAgICAgICBwYXJlbnRFbGVtZW50Py5yZW1vdmVFdmVudExpc3RlbmVyKFxuICAgICAgICAgICAgJ3Njcm9sbCcsXG4gICAgICAgICAgICB0aGlzLiNzY3JvbGxDaGFuZ2VMaXN0ZW5lclxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
@@ -1,9 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { NgModule, Injectable, EventEmitter, Directive, Input, Output, inject, EnvironmentInjector, createEnvironmentInjector, createComponent, ChangeDetectorRef, ElementRef, ViewContainerRef, Component, ChangeDetectionStrategy, ViewChild, InjectionToken, Optional, Inject, Pipe, HostBinding, ApplicationRef } from '@angular/core';
2
+ import { NgModule, Injectable, inject, RendererFactory2, NgZone, EventEmitter, Directive, Input, Output, EnvironmentInjector, createEnvironmentInjector, createComponent, ChangeDetectorRef, ElementRef, ViewContainerRef, Component, ChangeDetectionStrategy, ViewChild, InjectionToken, Optional, Inject, Pipe, HostBinding, ApplicationRef } from '@angular/core';
3
3
  import * as i1$1 from '@angular/common';
4
4
  import { CommonModule, DOCUMENT } from '@angular/common';
5
- import { Subject, fromEvent, ReplaySubject, BehaviorSubject, Observable, of, concat, animationFrameScheduler } from 'rxjs';
5
+ import { Subject, Subscription, ReplaySubject, fromEvent, BehaviorSubject, Observable, of, concat, animationFrameScheduler } from 'rxjs';
6
6
  import { takeUntil, debounceTime, finalize, switchMap, map } from 'rxjs/operators';
7
+ import { ViewportRuler } from '@angular/cdk/overlay';
7
8
  import * as i1 from '@skyux/i18n';
8
9
  import { SkyLibResourcesService, getLibStringForLocale, SkyI18nModule, SKY_LIB_RESOURCES_PROVIDERS, SkyIntlNumberFormatStyle, SkyIntlNumberFormatter } from '@skyux/i18n';
9
10
  import { Router, NavigationStart } from '@angular/router';
@@ -430,12 +431,17 @@ class SkyAffixer {
430
431
  #placementChange;
431
432
  #placementChangeObs;
432
433
  #renderer;
433
- #resizeListener;
434
- #scrollListeners;
434
+ #scrollChange = new Subject();
435
+ #viewportListeners;
436
+ #viewportRuler;
437
+ #zone;
435
438
  #_config = DEFAULT_AFFIX_CONFIG;
436
- constructor(affixedElement, renderer) {
439
+ #scrollChangeListener = () => this.#scrollChange.next();
440
+ constructor(affixedElement, renderer, viewportRuler, zone) {
437
441
  this.#affixedElement = affixedElement;
438
442
  this.#renderer = renderer;
443
+ this.#viewportRuler = viewportRuler;
444
+ this.#zone = zone;
439
445
  this.#offsetChange = new Subject();
440
446
  this.#overflowScroll = new Subject();
441
447
  this.#placementChange = new Subject();
@@ -455,8 +461,7 @@ class SkyAffixer {
455
461
  this.#overflowParents = getOverflowParents(baseElement);
456
462
  this.#affix();
457
463
  if (this.#config.isSticky) {
458
- this.#addScrollListeners();
459
- this.#addResizeListener();
464
+ this.#addViewportListeners();
460
465
  }
461
466
  }
462
467
  getConfig() {
@@ -478,6 +483,7 @@ class SkyAffixer {
478
483
  this.#placementChange.complete();
479
484
  this.#offsetChange.complete();
480
485
  this.#overflowScroll.complete();
486
+ this.#scrollChange.complete();
481
487
  }
482
488
  #affix() {
483
489
  const offset = this.#getOffset();
@@ -501,8 +507,11 @@ class SkyAffixer {
501
507
  top: 0,
502
508
  };
503
509
  if (this.#config.position === 'absolute') {
504
- autoFitOverflowOffset.top =
505
- (autoFitOverflowOffset.top || 0) + window.scrollY;
510
+ const { top, left } = this.#viewportRuler.getViewportScrollPosition();
511
+ autoFitOverflowOffset.top = (autoFitOverflowOffset.top || 0) + top;
512
+ autoFitOverflowOffset.left = (autoFitOverflowOffset.left || 0) + left;
513
+ autoFitOverflowOffset.bottom = (autoFitOverflowOffset.bottom || 0) + top;
514
+ autoFitOverflowOffset.right = (autoFitOverflowOffset.right || 0) + left;
506
515
  }
507
516
  do {
508
517
  offset = this.#getPreferredOffset(placement);
@@ -544,8 +553,11 @@ class SkyAffixer {
544
553
  height: baseDomRect.height,
545
554
  };
546
555
  if (this.#config.position === 'absolute') {
547
- baseRect.top += window.scrollY;
548
- baseRect.bottom = baseRect.top + baseDomRect.height;
556
+ const { left, top } = this.#viewportRuler.getViewportScrollPosition();
557
+ baseRect.top += top;
558
+ baseRect.left += left;
559
+ baseRect.bottom += top;
560
+ baseRect.right += left;
549
561
  }
550
562
  return baseRect;
551
563
  }
@@ -705,8 +717,7 @@ class SkyAffixer {
705
717
  }
706
718
  }
707
719
  #reset() {
708
- this.#removeScrollListeners();
709
- this.#removeResizeListener();
720
+ this.#removeViewportListeners();
710
721
  this.#overflowParents = [];
711
722
  this.#config =
712
723
  this.#baseElement =
@@ -738,47 +749,46 @@ class SkyAffixer {
738
749
  bottom: baseRect.bottom,
739
750
  }, this.#config.autoFitOverflowOffset);
740
751
  }
741
- #addScrollListeners() {
742
- this.#scrollListeners = this.#overflowParents.map((parentElement) => {
743
- const overflow = parentElement === document.body ? 'window' : parentElement;
744
- return this.#renderer.listen(overflow, 'scroll', () => {
745
- this.#affix();
746
- this.#overflowScroll.next();
752
+ #addViewportListeners() {
753
+ this.#viewportListeners = new Subscription();
754
+ // Resize and orientation changes.
755
+ this.#viewportListeners.add(this.#viewportRuler.change().subscribe(() => {
756
+ this.#affix();
757
+ }));
758
+ this.#viewportListeners.add(this.#scrollChange.subscribe(() => {
759
+ this.#affix();
760
+ this.#overflowScroll.next();
761
+ }));
762
+ // Listen for scroll events on the window, visual viewport, and any overflow parents.
763
+ // https://developer.chrome.com/blog/visual-viewport-api/#events-only-fire-when-the-visual-viewport-changes
764
+ this.#zone.runOutsideAngular(() => {
765
+ [window, window.visualViewport, ...this.#overflowParents].forEach((parentElement) => {
766
+ parentElement?.addEventListener('scroll', this.#scrollChangeListener);
747
767
  });
748
768
  });
749
769
  }
750
- #addResizeListener() {
751
- this.#resizeListener = fromEvent(window, 'resize').subscribe(() => this.#affix());
752
- }
753
- #removeResizeListener() {
754
- if (this.#resizeListener) {
755
- this.#resizeListener.unsubscribe();
756
- this.#resizeListener = undefined;
757
- }
758
- }
759
- #removeScrollListeners() {
760
- if (this.#scrollListeners) {
761
- // Remove renderer-generated listeners by calling the listener itself.
762
- // https://github.com/angular/angular/issues/9368#issuecomment-227199778
763
- this.#scrollListeners.forEach((listener) => listener());
764
- this.#scrollListeners = undefined;
765
- }
770
+ #removeViewportListeners() {
771
+ this.#viewportListeners?.unsubscribe();
772
+ this.#zone.runOutsideAngular(() => {
773
+ [window, window.visualViewport, ...this.#overflowParents].forEach((parentElement) => {
774
+ parentElement?.removeEventListener('scroll', this.#scrollChangeListener);
775
+ });
776
+ });
766
777
  }
767
778
  }
768
779
 
769
780
  class SkyAffixService {
770
- #renderer;
771
- constructor(rendererFactory) {
772
- this.#renderer = rendererFactory.createRenderer(undefined, null);
773
- }
781
+ #renderer = inject(RendererFactory2).createRenderer(undefined, null);
782
+ #viewportRuler = inject(ViewportRuler);
783
+ #zone = inject(NgZone);
774
784
  /**
775
785
  * Creates an instance of [[SkyAffixer]].
776
786
  * @param affixed The element to be affixed.
777
787
  */
778
788
  createAffixer(affixed) {
779
- return new SkyAffixer(affixed.nativeElement, this.#renderer);
789
+ return new SkyAffixer(affixed.nativeElement, this.#renderer, this.#viewportRuler, this.#zone);
780
790
  }
781
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }
791
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
782
792
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, providedIn: 'root' }); }
783
793
  }
784
794
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImport: i0, type: SkyAffixService, decorators: [{
@@ -786,7 +796,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.1", ngImpor
786
796
  args: [{
787
797
  providedIn: 'root',
788
798
  }]
789
- }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
799
+ }] });
790
800
 
791
801
  /**
792
802
  * Affixes the host element to a base element.