@ethlete/core 2.4.3 → 2.5.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.
Files changed (38) hide show
  1. package/esm2022/lib/components/structured-data/structured-data.component.mjs +3 -3
  2. package/esm2022/lib/directives/animatable/animatable.directive.mjs +3 -3
  3. package/esm2022/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +3 -3
  4. package/esm2022/lib/directives/animated-overlay/animated-overlay.directive.mjs +3 -3
  5. package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +3 -3
  6. package/esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +3 -3
  7. package/esm2022/lib/directives/delayable/delayable.directive.mjs +3 -3
  8. package/esm2022/lib/directives/is-active-element/is-active-element.directive.mjs +3 -3
  9. package/esm2022/lib/directives/let/let.directive.mjs +3 -3
  10. package/esm2022/lib/directives/observe-content/observe-content.directive.mjs +3 -3
  11. package/esm2022/lib/directives/observe-resize/observe-resize.directive.mjs +3 -3
  12. package/esm2022/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +3 -3
  13. package/esm2022/lib/directives/repeat/repeat.directive.mjs +3 -3
  14. package/esm2022/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +3 -3
  15. package/esm2022/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +3 -3
  16. package/esm2022/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +3 -3
  17. package/esm2022/lib/directives/seo/seo.directive.mjs +3 -3
  18. package/esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +3 -3
  19. package/esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +3 -3
  20. package/esm2022/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +3 -3
  21. package/esm2022/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +3 -3
  22. package/esm2022/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +3 -3
  23. package/esm2022/lib/pipes/to-array/to-array.pipe.mjs +3 -3
  24. package/esm2022/lib/services/click-observer.service.mjs +6 -6
  25. package/esm2022/lib/services/content-observer.service.mjs +6 -6
  26. package/esm2022/lib/services/focus-visible.service.mjs +3 -3
  27. package/esm2022/lib/services/resize-observer.service.mjs +6 -6
  28. package/esm2022/lib/services/router-state.service.mjs +3 -3
  29. package/esm2022/lib/services/viewport.service.mjs +3 -3
  30. package/esm2022/lib/utils/active-selection-model.utils.mjs +82 -0
  31. package/esm2022/lib/utils/public-api.mjs +2 -1
  32. package/esm2022/lib/utils/reactive-binding.util.mjs +4 -3
  33. package/esm2022/lib/utils/selection-model.utils.mjs +4 -4
  34. package/fesm2022/ethlete-core.mjs +193 -113
  35. package/fesm2022/ethlete-core.mjs.map +1 -1
  36. package/lib/utils/active-selection-model.utils.d.ts +14 -0
  37. package/lib/utils/public-api.d.ts +1 -0
  38. package/package.json +5 -5
@@ -0,0 +1,82 @@
1
+ import { DOWN_ARROW, END, HOME, PAGE_DOWN, PAGE_UP, UP_ARROW } from '@angular/cdk/keycodes';
2
+ import { BehaviorSubject, of, switchMap, takeUntil, tap } from 'rxjs';
3
+ import { createDestroy } from './destroy.utils';
4
+ export class ActiveSelectionModel {
5
+ get selectionModel$() {
6
+ return this._selectionModel$.asObservable();
7
+ }
8
+ get selectionModel() {
9
+ return this._selectionModel$.value;
10
+ }
11
+ get activeOption$() {
12
+ return this._activeOption$.asObservable();
13
+ }
14
+ get activeOption() {
15
+ return this._activeOption$.value;
16
+ }
17
+ constructor() {
18
+ this._destroy$ = createDestroy();
19
+ this._selectionModel$ = new BehaviorSubject(null);
20
+ this._activeOption$ = new BehaviorSubject(null);
21
+ this._selectionModel$
22
+ .pipe(takeUntil(this._destroy$), switchMap((model) => model?.filteredOptions$ ?? of([])), tap(() => this._resetActiveOptions()))
23
+ .subscribe();
24
+ }
25
+ setSelectionModel(selectionModel) {
26
+ this._selectionModel$.next(selectionModel);
27
+ return this;
28
+ }
29
+ evaluateKeyboardEvent(event) {
30
+ const keyCode = event.keyCode;
31
+ const activeOption = this.activeOption;
32
+ if (!this.selectionModel || !activeOption)
33
+ return;
34
+ const currentIndex = this.selectionModel?.getOptionIndex(activeOption);
35
+ if (currentIndex === null)
36
+ return;
37
+ let newActiveOption = undefined;
38
+ switch (keyCode) {
39
+ case DOWN_ARROW:
40
+ {
41
+ newActiveOption = this.selectionModel?.getOptionByOffset(1, currentIndex);
42
+ }
43
+ break;
44
+ case UP_ARROW:
45
+ {
46
+ newActiveOption = this.selectionModel?.getOptionByOffset(-1, currentIndex);
47
+ }
48
+ break;
49
+ case PAGE_UP:
50
+ {
51
+ newActiveOption = this.selectionModel?.getOptionByOffset(-10, currentIndex);
52
+ }
53
+ break;
54
+ case PAGE_DOWN:
55
+ {
56
+ newActiveOption = this.selectionModel?.getOptionByOffset(10, currentIndex);
57
+ }
58
+ break;
59
+ case HOME:
60
+ {
61
+ newActiveOption = this.selectionModel?.getFirstOption();
62
+ }
63
+ break;
64
+ case END:
65
+ {
66
+ newActiveOption = this.selectionModel?.getLastOption();
67
+ }
68
+ break;
69
+ }
70
+ if (newActiveOption !== undefined) {
71
+ event.preventDefault();
72
+ }
73
+ if (newActiveOption !== activeOption && newActiveOption !== undefined) {
74
+ this._activeOption$.next(newActiveOption);
75
+ }
76
+ }
77
+ _resetActiveOptions() {
78
+ const firstOption = this.selectionModel?.getFirstOption();
79
+ this._activeOption$.next(firstOption ?? null);
80
+ }
81
+ }
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLXNlbGVjdGlvbi1tb2RlbC51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL2FjdGl2ZS1zZWxlY3Rpb24tbW9kZWwudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDNUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR2hELE1BQU0sT0FBTyxvQkFBb0I7SUFHL0IsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzlDLENBQUM7SUFDRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO0lBQ3JDLENBQUM7SUFHRCxJQUFJLGFBQWE7UUFDZixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUNELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUdEO1FBbEJpQixjQUFTLEdBQUcsYUFBYSxFQUFFLENBQUM7UUFRNUIscUJBQWdCLEdBQUcsSUFBSSxlQUFlLENBQTJCLElBQUksQ0FBQyxDQUFDO1FBUXZFLG1CQUFjLEdBQUcsSUFBSSxlQUFlLENBQVcsSUFBSSxDQUFDLENBQUM7UUFHcEUsSUFBSSxDQUFDLGdCQUFnQjthQUNsQixJQUFJLENBQ0gsU0FBUyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFDekIsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ3ZELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQyxDQUN0QzthQUNBLFNBQVMsRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxjQUF3QztRQUN4RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTNDLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELHFCQUFxQixDQUFDLEtBQW9CO1FBQ3hDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUV2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLFlBQVk7WUFBRSxPQUFPO1FBRWxELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXZFLElBQUksWUFBWSxLQUFLLElBQUk7WUFBRSxPQUFPO1FBRWxDLElBQUksZUFBZSxHQUF5QixTQUFTLENBQUM7UUFFdEQsUUFBUSxPQUFPLEVBQUU7WUFDZixLQUFLLFVBQVU7Z0JBQ2I7b0JBQ0UsZUFBZSxHQUFHLElBQUksQ0FBQyxjQUFjLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUMzRTtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYO29CQUNFLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUM1RTtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxPQUFPO2dCQUNWO29CQUNFLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLENBQUMsRUFBRSxFQUFFLFlBQVksQ0FBQyxDQUFDO2lCQUM3RTtnQkFDRCxNQUFNO1lBQ1IsS0FBSyxTQUFTO2dCQUNaO29CQUNFLGVBQWUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEVBQUUsRUFBRSxZQUFZLENBQUMsQ0FBQztpQkFDNUU7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssSUFBSTtnQkFDUDtvQkFDRSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsQ0FBQztpQkFDekQ7Z0JBQ0QsTUFBTTtZQUNSLEtBQUssR0FBRztnQkFDTjtvQkFDRSxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxhQUFhLEVBQUUsQ0FBQztpQkFDeEQ7Z0JBQ0QsTUFBTTtTQUNUO1FBRUQsSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQ2pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztTQUN4QjtRQUVELElBQUksZUFBZSxLQUFLLFlBQVksSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQ3JFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzNDO0lBQ0gsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLGNBQWMsRUFBRSxDQUFDO1FBRTFELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsQ0FBQztJQUNoRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET1dOX0FSUk9XLCBFTkQsIEhPTUUsIFBBR0VfRE9XTiwgUEFHRV9VUCwgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBvZiwgc3dpdGNoTWFwLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSB9IGZyb20gJy4vZGVzdHJveS51dGlscyc7XG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJy4vc2VsZWN0aW9uLW1vZGVsLnV0aWxzJztcblxuZXhwb3J0IGNsYXNzIEFjdGl2ZVNlbGVjdGlvbk1vZGVsPFQgPSB1bmtub3duPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuXG4gIGdldCBzZWxlY3Rpb25Nb2RlbCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgc2VsZWN0aW9uTW9kZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbk1vZGVsJC52YWx1ZTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9zZWxlY3Rpb25Nb2RlbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFNlbGVjdGlvbk1vZGVsPFQ+IHwgbnVsbD4obnVsbCk7XG5cbiAgZ2V0IGFjdGl2ZU9wdGlvbiQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGl2ZU9wdGlvbiQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgZ2V0IGFjdGl2ZU9wdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aXZlT3B0aW9uJC52YWx1ZTtcbiAgfVxuICBwcml2YXRlIHJlYWRvbmx5IF9hY3RpdmVPcHRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUIHwgbnVsbD4obnVsbCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uTW9kZWwkXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgICAgc3dpdGNoTWFwKChtb2RlbCkgPT4gbW9kZWw/LmZpbHRlcmVkT3B0aW9ucyQgPz8gb2YoW10pKSxcbiAgICAgICAgdGFwKCgpID0+IHRoaXMuX3Jlc2V0QWN0aXZlT3B0aW9ucygpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHNldFNlbGVjdGlvbk1vZGVsKHNlbGVjdGlvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxUPiB8IG51bGwpIHtcbiAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlbCQubmV4dChzZWxlY3Rpb25Nb2RlbCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGV2YWx1YXRlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGNvbnN0IGtleUNvZGUgPSBldmVudC5rZXlDb2RlO1xuICAgIGNvbnN0IGFjdGl2ZU9wdGlvbiA9IHRoaXMuYWN0aXZlT3B0aW9uO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGlvbk1vZGVsIHx8ICFhY3RpdmVPcHRpb24pIHJldHVybjtcblxuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuc2VsZWN0aW9uTW9kZWw/LmdldE9wdGlvbkluZGV4KGFjdGl2ZU9wdGlvbik7XG5cbiAgICBpZiAoY3VycmVudEluZGV4ID09PSBudWxsKSByZXR1cm47XG5cbiAgICBsZXQgbmV3QWN0aXZlT3B0aW9uOiBUIHwgbnVsbCB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIHN3aXRjaCAoa2V5Q29kZSkge1xuICAgICAgY2FzZSBET1dOX0FSUk9XOlxuICAgICAgICB7XG4gICAgICAgICAgbmV3QWN0aXZlT3B0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlbD8uZ2V0T3B0aW9uQnlPZmZzZXQoMSwgY3VycmVudEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgVVBfQVJST1c6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXdBY3RpdmVPcHRpb24gPSB0aGlzLnNlbGVjdGlvbk1vZGVsPy5nZXRPcHRpb25CeU9mZnNldCgtMSwgY3VycmVudEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUEFHRV9VUDpcbiAgICAgICAge1xuICAgICAgICAgIG5ld0FjdGl2ZU9wdGlvbiA9IHRoaXMuc2VsZWN0aW9uTW9kZWw/LmdldE9wdGlvbkJ5T2Zmc2V0KC0xMCwgY3VycmVudEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgUEFHRV9ET1dOOlxuICAgICAgICB7XG4gICAgICAgICAgbmV3QWN0aXZlT3B0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlbD8uZ2V0T3B0aW9uQnlPZmZzZXQoMTAsIGN1cnJlbnRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIEhPTUU6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXdBY3RpdmVPcHRpb24gPSB0aGlzLnNlbGVjdGlvbk1vZGVsPy5nZXRGaXJzdE9wdGlvbigpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBFTkQ6XG4gICAgICAgIHtcbiAgICAgICAgICBuZXdBY3RpdmVPcHRpb24gPSB0aGlzLnNlbGVjdGlvbk1vZGVsPy5nZXRMYXN0T3B0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgaWYgKG5ld0FjdGl2ZU9wdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmIChuZXdBY3RpdmVPcHRpb24gIT09IGFjdGl2ZU9wdGlvbiAmJiBuZXdBY3RpdmVPcHRpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fYWN0aXZlT3B0aW9uJC5uZXh0KG5ld0FjdGl2ZU9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVzZXRBY3RpdmVPcHRpb25zKCkge1xuICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlbD8uZ2V0Rmlyc3RPcHRpb24oKTtcblxuICAgIHRoaXMuX2FjdGl2ZU9wdGlvbiQubmV4dChmaXJzdE9wdGlvbiA/PyBudWxsKTtcbiAgfVxufVxuIl19
@@ -1,3 +1,4 @@
1
+ export * from './active-selection-model.utils';
1
2
  export * from './animation.utils';
2
3
  export * from './clamp.util';
3
4
  export * from './clone.util';
@@ -12,4 +13,4 @@ export * from './scrollable.utils';
12
13
  export * from './selection-model.utils';
13
14
  export * from './smart-block-scroll-strategy.utils';
14
15
  export * from './viewport.util';
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsb0JBQW9CLENBQUM7QUFDbkMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHFDQUFxQyxDQUFDO0FBQ3BELGNBQWMsaUJBQWlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuaW1hdGlvbi51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYW1wLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jbG9uZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vY29va2llLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXN0cm95LnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vZXF1YWwudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL21lZGlhLXF1ZXJ5LW9ic2VydmFibGUudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3JlYWN0aXZlLWJpbmRpbmcudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3J1bnRpbWUtZXJyb3IudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9yeGpzLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc2Nyb2xsYWJsZS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NlbGVjdGlvbi1tb2RlbC51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0LWJsb2NrLXNjcm9sbC1zdHJhdGVneS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0LnV0aWwnO1xuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3V0aWxzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLHlCQUF5QixDQUFDO0FBQ3hDLGNBQWMscUNBQXFDLENBQUM7QUFDcEQsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYWN0aXZlLXNlbGVjdGlvbi1tb2RlbC51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2FuaW1hdGlvbi51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL2NsYW1wLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9jbG9uZS51dGlsJztcbmV4cG9ydCAqIGZyb20gJy4vY29va2llLnV0aWwnO1xuZXhwb3J0ICogZnJvbSAnLi9kZXN0cm95LnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vZXF1YWwudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL21lZGlhLXF1ZXJ5LW9ic2VydmFibGUudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3JlYWN0aXZlLWJpbmRpbmcudXRpbCc7XG5leHBvcnQgKiBmcm9tICcuL3J1bnRpbWUtZXJyb3IudXRpbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9yeGpzLnV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc2Nyb2xsYWJsZS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NlbGVjdGlvbi1tb2RlbC51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3NtYXJ0LWJsb2NrLXNjcm9sbC1zdHJhdGVneS51dGlscyc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZXdwb3J0LnV0aWwnO1xuIl19
@@ -1,5 +1,6 @@
1
1
  import { ElementRef, assertInInjectionContext, inject } from '@angular/core';
2
- import { distinctUntilChanged, takeUntil } from 'rxjs';
2
+ import { distinctUntilChanged, map, switchMap, takeUntil } from 'rxjs';
3
+ import { fromNextFrame } from './animation.utils';
3
4
  import { createDestroy } from './destroy.utils';
4
5
  const isAttributeRenderBinding = (value) => typeof value === 'boolean';
5
6
  const isAttributeValueBinding = (value) => typeof value === 'object';
@@ -29,7 +30,7 @@ export const createReactiveBindings = (...values) => {
29
30
  return a.render === b.render && a.value === b.value;
30
31
  }
31
32
  return false;
32
- }))
33
+ }), switchMap((v) => fromNextFrame().pipe(map(() => v))))
33
34
  .subscribe((value) => {
34
35
  const currentAttributes = pushedAttributes.find((s) => s.some((current) => attributes.includes(current))) || [];
35
36
  for (const attribute of currentAttributes) {
@@ -109,4 +110,4 @@ export const createReactiveBindings = (...values) => {
109
110
  reset,
110
111
  };
111
112
  };
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtYmluZGluZy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvcmVhY3RpdmUtYmluZGluZy51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBNEIsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWVoRCxNQUFNLHdCQUF3QixHQUFHLENBQy9CLEtBQXFELEVBQ3BCLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDakUsTUFBTSx1QkFBdUIsR0FBRyxDQUM5QixLQUFxRCxFQUNyQixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBUS9ELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsR0FBRyxNQUE0QixFQUF5QixFQUFFO0lBQy9GLHdCQUF3QixDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFakQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztJQUNuRSxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBMkQsRUFBRSxDQUFDO0lBQ2pGLE1BQU0sZ0JBQWdCLEdBQWUsRUFBRSxDQUFDO0lBRXhDLE1BQU0sUUFBUSxHQUF1QyxFQUFFLENBQUM7SUFFeEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUF5QixFQUFFLEVBQUU7UUFDekMsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBQ3BELE1BQU0sS0FBSyxHQUFHLFVBQVUsSUFBSSxjQUFjLENBQUM7UUFD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LENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssU0FBUyxDQUFDLENBQUM7Z0JBQy9ELGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFFN0QsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQy9CLEdBQUcsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7b0JBQy9CLGFBQWEsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDckQ7YUFDRjtTQUNGO0lBQ0gsQ0FBQyxDQUFDO0lBRUYsTUFBTSxLQUFLLEdBQUcsR0FBRyxFQUFFO1FBQ2pCLEtBQUssTUFBTSxTQUFTLElBQUksUUFBUSxFQUFFO1lBQ2hDLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLFNBQVMsRUFBRTtnQkFDckMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDekQ7aUJBQU07Z0JBQ0wsY0FBYyxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxTQUFTLENBQVcsQ0FBQyxDQUFDO2FBQ3JGO1NBQ0Y7SUFDSCxDQUFDLENBQUM7SUFFRixLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRTtRQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDYjtJQUVELE9BQU87UUFDTCxJQUFJO1FBQ0osTUFBTTtRQUNOLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY3JlYXRlRGVzdHJveSB9IGZyb20gJy4vZGVzdHJveS51dGlscyc7XG5cbnR5cGUgQXR0cmlidXRlVmFsdWVCaW5kaW5nID0ge1xuICByZW5kZXI6IGJvb2xlYW47XG4gIHZhbHVlOiBib29sZWFuIHwgc3RyaW5nIHwgbnVtYmVyO1xufTtcblxudHlwZSBBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nID0gYm9vbGVhbjtcblxuZXhwb3J0IHR5cGUgUmVhY3RpdmVBdHRyaWJ1dGVzID0ge1xuICBhdHRyaWJ1dGU6IHN0cmluZyB8IHN0cmluZ1tdO1xuICBvYnNlcnZhYmxlOiBPYnNlcnZhYmxlPEF0dHJpYnV0ZVZhbHVlQmluZGluZyB8IEF0dHJpYnV0ZVJlbmRlckJpbmRpbmc+O1xuICBlbGVtZW50UmVmPzogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG59O1xuXG5jb25zdCBpc0F0dHJpYnV0ZVJlbmRlckJpbmRpbmcgPSAoXG4gIHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZUJpbmRpbmcgfCBBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nLFxuKTogdmFsdWUgaXMgQXR0cmlidXRlUmVuZGVyQmluZGluZyA9PiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbmNvbnN0IGlzQXR0cmlidXRlVmFsdWVCaW5kaW5nID0gKFxuICB2YWx1ZTogQXR0cmlidXRlVmFsdWVCaW5kaW5nIHwgQXR0cmlidXRlUmVuZGVyQmluZGluZyxcbik6IHZhbHVlIGlzIEF0dHJpYnV0ZVZhbHVlQmluZGluZyA9PiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFJlYWN0aXZlQmluZGluZ1Jlc3VsdCB7XG4gIHJlc2V0OiAoKSA9PiB2b2lkO1xuICByZW1vdmU6ICguLi5hdHRyaWJ1dGVzOiBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgcHVzaDogKHZhbHVlOiBSZWFjdGl2ZUF0dHJpYnV0ZXMpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVSZWFjdGl2ZUJpbmRpbmdzID0gKC4uLnZhbHVlczogUmVhY3RpdmVBdHRyaWJ1dGVzW10pOiBSZWFjdGl2ZUJpbmRpbmdSZXN1bHQgPT4ge1xuICBhc3NlcnRJbkluamVjdGlvbkNvbnRleHQoY3JlYXRlUmVhY3RpdmVCaW5kaW5ncyk7XG5cbiAgY29uc3Qgcm9vdEVsZW1lbnRSZWYgPSBpbmplY3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KEVsZW1lbnRSZWYpO1xuICBjb25zdCBkZXN0cm95JCA9IGNyZWF0ZURlc3Ryb3koKTtcblxuICBjb25zdCBzdWJzY3JpcHRpb25zOiB7IGF0dHJpYnV0ZXM6IHN0cmluZ1tdOyBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB9W10gPSBbXTtcbiAgY29uc3QgcHVzaGVkQXR0cmlidXRlczogc3RyaW5nW11bXSA9IFtdO1xuXG4gIGNvbnN0IGRlZmF1bHRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+ID0ge307XG5cbiAgY29uc3QgcHVzaCA9ICh2YWx1ZTogUmVhY3RpdmVBdHRyaWJ1dGVzKSA9PiB7XG4gICAgY29uc3QgeyBhdHRyaWJ1dGUsIG9ic2VydmFibGUsIGVsZW1lbnRSZWYgfSA9IHZhbHVlO1xuICAgIGNvbnN0IGVsUmVmID0gZWxlbWVudFJlZiB8fCByb290RWxlbWVudFJlZjtcbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gQXJyYXkuaXNBcnJheShhdHRyaWJ1dGUpID8gYXR0cmlidXRlIDogW2F0dHJpYnV0ZV07XG4gICAgcHVzaGVkQXR0cmlidXRlcy5wdXNoKGF0dHJpYnV0ZXMpO1xuXG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuICAgICAgaWYgKCFkZWZhdWx0c1thdHRyaWJ1dGVdKSB7XG4gICAgICAgIGRlZmF1bHRzW2F0dHJpYnV0ZV0gPSBlbFJlZi5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGUpIHx8IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBvYnNlcnZhYmxlXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVVudGlsKGRlc3Ryb3kkKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IHtcbiAgICAgICAgICBpZiAoaXNBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nKGEpICYmIGlzQXR0cmlidXRlUmVuZGVyQmluZGluZyhiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGEgPT09IGI7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0F0dHJpYnV0ZVZhbHVlQmluZGluZyhhKSAmJiBpc0F0dHJpYnV0ZVZhbHVlQmluZGluZyhiKSkge1xuICAgICAgICAgICAgcmV0dXJuIGEucmVuZGVyID09PSBiLnJlbmRlciAmJiBhLnZhbHVlID09PSBiLnZhbHVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBjb25zdCBjdXJyZW50QXR0cmlidXRlcyA9IHB1c2hlZEF0dHJpYnV0ZXMuZmluZCgocykgPT4gcy5zb21lKChjdXJyZW50KSA9PiBhdHRyaWJ1dGVzLmluY2x1ZGVzKGN1cnJlbnQpKSkgfHwgW107XG5cbiAgICAgICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgY3VycmVudEF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICBjb25zdCBpc1NpbmdsZUNsYXNzTXV0YXRpb24gPSBhdHRyaWJ1dGUuc3RhcnRzV2l0aCgnY2xhc3MuJyk7XG4gICAgICAgICAgY29uc3QgaXNNdWx0aXBsZUNsYXNzTXV0YXRpb24gPSBhdHRyaWJ1dGUgPT09ICdjbGFzcyc7XG5cbiAgICAgICAgICBjb25zdCByZW5kZXIgPSBpc0F0dHJpYnV0ZVJlbmRlckJpbmRpbmcodmFsdWUpID8gdmFsdWUgOiB2YWx1ZS5yZW5kZXI7XG5cbiAgICAgICAgICBpZiAoaXNTaW5nbGVDbGFzc011dGF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc05hbWUgPSBhdHRyaWJ1dGUucmVwbGFjZSgnY2xhc3MuJywgJycpO1xuXG4gICAgICAgICAgICBpZiAoIWNsYXNzTmFtZSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTXVsdGlwbGVDbGFzc011dGF0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBjbGFzc2VzID0gaXNBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nKHZhbHVlKSA/ICcnIDogYCR7dmFsdWUudmFsdWV9YDtcblxuICAgICAgICAgICAgaWYgKCFjbGFzc2VzKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXJlbmRlcikge1xuICAgICAgICAgICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoLi4uY2xhc3Nlcy5zcGxpdCgnICcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCguLi5jbGFzc2VzLnNwbGl0KCcgJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZSA9IGlzQXR0cmlidXRlUmVuZGVyQmluZGluZyh2YWx1ZSkgPyB0cnVlIDogYCR7dmFsdWUudmFsdWV9YDtcblxuICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGUpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgICAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGAke2F0dHJpYnV0ZVZhbHVlfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBzdWJzY3JpcHRpb25zLnB1c2goeyBhdHRyaWJ1dGVzLCBzdWJzY3JpcHRpb24gfSk7XG4gIH07XG5cbiAgY29uc3QgcmVtb3ZlID0gKC4uLmF0dHJpYnV0ZXM6IHN0cmluZ1tdKSA9PiB7XG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlcykge1xuICAgICAgY29uc3Qgc3ViID0gc3Vic2NyaXB0aW9ucy5maW5kKChzKSA9PiBzLmF0dHJpYnV0ZXMuaW5jbHVkZXMoYXR0cmlidXRlKSk7XG4gICAgICBjb25zdCBhdHRyaWJ1dGVTdGFjayA9IHB1c2hlZEF0dHJpYnV0ZXMuZmluZCgoYSkgPT4gYS5pbmNsdWRlcyhhdHRyaWJ1dGUpKTtcblxuICAgICAgaWYgKHN1Yikge1xuICAgICAgICBzdWIuYXR0cmlidXRlcyA9IHN1Yi5hdHRyaWJ1dGVzLmZpbHRlcigoYSkgPT4gYSAhPT0gYXR0cmlidXRlKTtcbiAgICAgICAgYXR0cmlidXRlU3RhY2s/LnNwbGljZShhdHRyaWJ1dGVTdGFjay5pbmRleE9mKGF0dHJpYnV0ZSksIDEpO1xuXG4gICAgICAgIGlmIChzdWIuYXR0cmlidXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBzdWIuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgc3Vic2NyaXB0aW9ucy5zcGxpY2Uoc3Vic2NyaXB0aW9ucy5pbmRleE9mKHN1YiksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHJlc2V0ID0gKCkgPT4ge1xuICAgIGZvciAoY29uc3QgYXR0cmlidXRlIGluIGRlZmF1bHRzKSB7XG4gICAgICBpZiAoZGVmYXVsdHNbYXR0cmlidXRlXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvb3RFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByb290RWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGRlZmF1bHRzW2F0dHJpYnV0ZV0gYXMgc3RyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICBwdXNoKHZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcHVzaCxcbiAgICByZW1vdmUsXG4gICAgcmVzZXQsXG4gIH07XG59O1xuIl19
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3RpdmUtYmluZGluZy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvcmVhY3RpdmUtYmluZGluZy51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdFLE9BQU8sRUFBNEIsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakcsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQWVoRCxNQUFNLHdCQUF3QixHQUFHLENBQy9CLEtBQXFELEVBQ3BCLEVBQUUsQ0FBQyxPQUFPLEtBQUssS0FBSyxTQUFTLENBQUM7QUFDakUsTUFBTSx1QkFBdUIsR0FBRyxDQUM5QixLQUFxRCxFQUNyQixFQUFFLENBQUMsT0FBTyxLQUFLLEtBQUssUUFBUSxDQUFDO0FBUS9ELE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsR0FBRyxNQUE0QixFQUF5QixFQUFFO0lBQy9GLHdCQUF3QixDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFFakQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUEwQixVQUFVLENBQUMsQ0FBQztJQUNuRSxNQUFNLFFBQVEsR0FBRyxhQUFhLEVBQUUsQ0FBQztJQUVqQyxNQUFNLGFBQWEsR0FBMkQsRUFBRSxDQUFDO0lBQ2pGLE1BQU0sZ0JBQWdCLEdBQWUsRUFBRSxDQUFDO0lBRXhDLE1BQU0sUUFBUSxHQUF1QyxFQUFFLENBQUM7SUFFeEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUF5QixFQUFFLEVBQUU7UUFDekMsTUFBTSxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxF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QUNOLEtBQUs7S0FDTixDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgYXNzZXJ0SW5JbmplY3Rpb25Db250ZXh0LCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3dpdGNoTWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZyb21OZXh0RnJhbWUgfSBmcm9tICcuL2FuaW1hdGlvbi51dGlscyc7XG5pbXBvcnQgeyBjcmVhdGVEZXN0cm95IH0gZnJvbSAnLi9kZXN0cm95LnV0aWxzJztcblxudHlwZSBBdHRyaWJ1dGVWYWx1ZUJpbmRpbmcgPSB7XG4gIHJlbmRlcjogYm9vbGVhbjtcbiAgdmFsdWU6IGJvb2xlYW4gfCBzdHJpbmcgfCBudW1iZXI7XG59O1xuXG50eXBlIEF0dHJpYnV0ZVJlbmRlckJpbmRpbmcgPSBib29sZWFuO1xuXG5leHBvcnQgdHlwZSBSZWFjdGl2ZUF0dHJpYnV0ZXMgPSB7XG4gIGF0dHJpYnV0ZTogc3RyaW5nIHwgc3RyaW5nW107XG4gIG9ic2VydmFibGU6IE9ic2VydmFibGU8QXR0cmlidXRlVmFsdWVCaW5kaW5nIHwgQXR0cmlidXRlUmVuZGVyQmluZGluZz47XG4gIGVsZW1lbnRSZWY/OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50Pjtcbn07XG5cbmNvbnN0IGlzQXR0cmlidXRlUmVuZGVyQmluZGluZyA9IChcbiAgdmFsdWU6IEF0dHJpYnV0ZVZhbHVlQmluZGluZyB8IEF0dHJpYnV0ZVJlbmRlckJpbmRpbmcsXG4pOiB2YWx1ZSBpcyBBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nO1xuY29uc3QgaXNBdHRyaWJ1dGVWYWx1ZUJpbmRpbmcgPSAoXG4gIHZhbHVlOiBBdHRyaWJ1dGVWYWx1ZUJpbmRpbmcgfCBBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nLFxuKTogdmFsdWUgaXMgQXR0cmlidXRlVmFsdWVCaW5kaW5nID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVhY3RpdmVCaW5kaW5nUmVzdWx0IHtcbiAgcmVzZXQ6ICgpID0+IHZvaWQ7XG4gIHJlbW92ZTogKC4uLmF0dHJpYnV0ZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICBwdXNoOiAodmFsdWU6IFJlYWN0aXZlQXR0cmlidXRlcykgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVJlYWN0aXZlQmluZGluZ3MgPSAoLi4udmFsdWVzOiBSZWFjdGl2ZUF0dHJpYnV0ZXNbXSk6IFJlYWN0aXZlQmluZGluZ1Jlc3VsdCA9PiB7XG4gIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dChjcmVhdGVSZWFjdGl2ZUJpbmRpbmdzKTtcblxuICBjb25zdCByb290RWxlbWVudFJlZiA9IGluamVjdDxFbGVtZW50UmVmPEhUTUxFbGVtZW50Pj4oRWxlbWVudFJlZik7XG4gIGNvbnN0IGRlc3Ryb3kkID0gY3JlYXRlRGVzdHJveSgpO1xuXG4gIGNvbnN0IHN1YnNjcmlwdGlvbnM6IHsgYXR0cmlidXRlczogc3RyaW5nW107IHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIH1bXSA9IFtdO1xuICBjb25zdCBwdXNoZWRBdHRyaWJ1dGVzOiBzdHJpbmdbXVtdID0gW107XG5cbiAgY29uc3QgZGVmYXVsdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gPSB7fTtcblxuICBjb25zdCBwdXNoID0gKHZhbHVlOiBSZWFjdGl2ZUF0dHJpYnV0ZXMpID0+IHtcbiAgICBjb25zdCB7IGF0dHJpYnV0ZSwgb2JzZXJ2YWJsZSwgZWxlbWVudFJlZiB9ID0gdmFsdWU7XG4gICAgY29uc3QgZWxSZWYgPSBlbGVtZW50UmVmIHx8IHJvb3RFbGVtZW50UmVmO1xuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBBcnJheS5pc0FycmF5KGF0dHJpYnV0ZSkgPyBhdHRyaWJ1dGUgOiBbYXR0cmlidXRlXTtcbiAgICBwdXNoZWRBdHRyaWJ1dGVzLnB1c2goYXR0cmlidXRlcyk7XG5cbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICBpZiAoIWRlZmF1bHRzW2F0dHJpYnV0ZV0pIHtcbiAgICAgICAgZGVmYXVsdHNbYXR0cmlidXRlXSA9IGVsUmVmLm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSkgfHwgdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IG9ic2VydmFibGVcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwoZGVzdHJveSQpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4ge1xuICAgICAgICAgIGlmIChpc0F0dHJpYnV0ZVJlbmRlckJpbmRpbmcoYSkgJiYgaXNBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nKGIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYSA9PT0gYjtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzQXR0cmlidXRlVmFsdWVCaW5kaW5nKGEpICYmIGlzQXR0cmlidXRlVmFsdWVCaW5kaW5nKGIpKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5yZW5kZXIgPT09IGIucmVuZGVyICYmIGEudmFsdWUgPT09IGIudmFsdWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9KSxcbiAgICAgICAgc3dpdGNoTWFwKCh2KSA9PiBmcm9tTmV4dEZyYW1lKCkucGlwZShtYXAoKCkgPT4gdikpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRBdHRyaWJ1dGVzID0gcHVzaGVkQXR0cmlidXRlcy5maW5kKChzKSA9PiBzLnNvbWUoKGN1cnJlbnQpID0+IGF0dHJpYnV0ZXMuaW5jbHVkZXMoY3VycmVudCkpKSB8fCBbXTtcblxuICAgICAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBjdXJyZW50QXR0cmlidXRlcykge1xuICAgICAgICAgIGNvbnN0IGlzU2luZ2xlQ2xhc3NNdXRhdGlvbiA9IGF0dHJpYnV0ZS5zdGFydHNXaXRoKCdjbGFzcy4nKTtcbiAgICAgICAgICBjb25zdCBpc011bHRpcGxlQ2xhc3NNdXRhdGlvbiA9IGF0dHJpYnV0ZSA9PT0gJ2NsYXNzJztcblxuICAgICAgICAgIGNvbnN0IHJlbmRlciA9IGlzQXR0cmlidXRlUmVuZGVyQmluZGluZyh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlLnJlbmRlcjtcblxuICAgICAgICAgIGlmIChpc1NpbmdsZUNsYXNzTXV0YXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGF0dHJpYnV0ZS5yZXBsYWNlKCdjbGFzcy4nLCAnJyk7XG5cbiAgICAgICAgICAgIGlmICghY2xhc3NOYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIXJlbmRlcikge1xuICAgICAgICAgICAgICBlbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNNdWx0aXBsZUNsYXNzTXV0YXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzZXMgPSBpc0F0dHJpYnV0ZVJlbmRlckJpbmRpbmcodmFsdWUpID8gJycgOiBgJHt2YWx1ZS52YWx1ZX1gO1xuXG4gICAgICAgICAgICBpZiAoIWNsYXNzZXMpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghcmVuZGVyKSB7XG4gICAgICAgICAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi5jbGFzc2VzLnNwbGl0KCcgJykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKC4uLmNsYXNzZXMuc3BsaXQoJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gaXNBdHRyaWJ1dGVSZW5kZXJCaW5kaW5nKHZhbHVlKSA/IHRydWUgOiBgJHt2YWx1ZS52YWx1ZX1gO1xuXG4gICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFyZW5kZXIpIHtcbiAgICAgICAgICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVsUmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgYCR7YXR0cmlidXRlVmFsdWV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgIHN1YnNjcmlwdGlvbnMucHVzaCh7IGF0dHJpYnV0ZXMsIHN1YnNjcmlwdGlvbiB9KTtcbiAgfTtcblxuICBjb25zdCByZW1vdmUgPSAoLi4uYXR0cmlidXRlczogc3RyaW5nW10pID0+IHtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICBjb25zdCBzdWIgPSBzdWJzY3JpcHRpb25zLmZpbmQoKHMpID0+IHMuYXR0cmlidXRlcy5pbmNsdWRlcyhhdHRyaWJ1dGUpKTtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZVN0YWNrID0gcHVzaGVkQXR0cmlidXRlcy5maW5kKChhKSA9PiBhLmluY2x1ZGVzKGF0dHJpYnV0ZSkpO1xuXG4gICAgICBpZiAoc3ViKSB7XG4gICAgICAgIHN1Yi5hdHRyaWJ1dGVzID0gc3ViLmF0dHJpYnV0ZXMuZmlsdGVyKChhKSA9PiBhICE9PSBhdHRyaWJ1dGUpO1xuICAgICAgICBhdHRyaWJ1dGVTdGFjaz8uc3BsaWNlKGF0dHJpYnV0ZVN0YWNrLmluZGV4T2YoYXR0cmlidXRlKSwgMSk7XG5cbiAgICAgICAgaWYgKHN1Yi5hdHRyaWJ1dGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHN1Yi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICBzdWJzY3JpcHRpb25zLnNwbGljZShzdWJzY3JpcHRpb25zLmluZGV4T2Yoc3ViKSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgY29uc3QgcmVzZXQgPSAoKSA9PiB7XG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgaW4gZGVmYXVsdHMpIHtcbiAgICAgIGlmIChkZWZhdWx0c1thdHRyaWJ1dGVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcm9vdEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJvb3RFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgZGVmYXVsdHNbYXR0cmlidXRlXSBhcyBzdHJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgIHB1c2godmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBwdXNoLFxuICAgIHJlbW92ZSxcbiAgICByZXNldCxcbiAgfTtcbn07XG4iXX0=
@@ -184,13 +184,13 @@ export class SelectionModel {
184
184
  }
185
185
  return this.getOptionByIndex(newIndex);
186
186
  }
187
- getFirstOption(options = this.options) {
187
+ getFirstOption(options = this.getFilteredOptions()) {
188
188
  return this.getOptionByIndex(0, options);
189
189
  }
190
- getLastOption(options = this.options) {
190
+ getLastOption(options = this.getFilteredOptions()) {
191
191
  return this.getOptionByIndex(options.length - 1, options);
192
192
  }
193
- getOptionIndex(option, options = this.options) {
193
+ getOptionIndex(option, options = this.getFilteredOptions()) {
194
194
  const key = this.getKey(option);
195
195
  const index = options.findIndex((o) => this.getKey(o) === key);
196
196
  return index === -1 ? null : index;
@@ -289,4 +289,4 @@ export class SelectionModel {
289
289
  }
290
290
  }
291
291
  }
292
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLW1vZGVsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2VsZWN0aW9uLW1vZGVsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFjLEVBQW9DLEVBQUU7SUFDcEUsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBNEIsRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUN2RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTFDLElBQUksQ0FBQyxjQUFjO1FBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5QixJQUFJLEtBQUssR0FBWSxHQUFHLENBQUM7SUFFekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUV2QyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFJRixNQUFNLE9BQU8sY0FBYztJQUEzQjtRQU9tQixnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO1FBUTNDLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQVF6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QUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVsSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNMLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcblxuY29uc3QgaXNPYmplY3QgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xufTtcblxuY29uc3QgZ2V0T2JqZWN0UHJvcGVydHkgPSAob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJvcDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGhhc0RvdE5vdGF0aW9uID0gcHJvcC5pbmNsdWRlcygnLicpO1xuXG4gIGlmICghaGFzRG90Tm90YXRpb24pIHJldHVybiBvYmpbcHJvcF07XG5cbiAgY29uc3QgcHJvcHMgPSBwcm9wLnNwbGl0KCcuJyk7XG5cbiAgbGV0IHZhbHVlOiB1bmtub3duID0gb2JqO1xuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgIGlmICghaXNPYmplY3QodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgdmFsdWUgPSB2YWx1ZVtwcm9wXTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbnR5cGUgU2VsZWN0aW9uTW9kZWxUeXBlcyA9IHN0cmluZyB8IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5rbm93bjtcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbk1vZGVsPFQgZXh0ZW5kcyBTZWxlY3Rpb25Nb2RlbFR5cGVzID0gdW5rbm93bj4ge1xuICBnZXQgc2VsZWN0aW9uJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgc2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb24kLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuXG4gIGdldCBvcHRpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMkLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KFtdKTtcblxuICBnZXQgdmFsdWVCaW5kaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVCaW5kaW5nJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgdmFsdWVCaW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZUJpbmRpbmckLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhbHVlQmluZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGdldCBrZXlCaW5kaW5nJCgpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fa2V5QmluZGluZyQsIHRoaXMudmFsdWVCaW5kaW5nJF0pLnBpcGUoXG4gICAgICBtYXAoKFtrZXlCaW5kaW5nLCB2YWx1ZUJpbmRpbmddKSA9PiBrZXlCaW5kaW5nIHx8IHZhbHVlQmluZGluZyksXG4gICAgKTtcbiAgfVxuICBnZXQga2V5QmluZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fa2V5QmluZGluZyQudmFsdWUgfHwgdGhpcy52YWx1ZUJpbmRpbmc7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfa2V5QmluZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGdldCBsYWJlbEJpbmRpbmckKCkge1xuICAgIHJldHVybiB0aGlzLl9sYWJlbEJpbmRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBsYWJlbEJpbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQmluZGluZyQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfbGFiZWxCaW5kaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgZ2V0IGFsbG93TXVsdGlwbGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9hbGxvd011bHRpcGxlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgYWxsb3dNdWx0aXBsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dNdWx0aXBsZSQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsb3dNdWx0aXBsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBnZXQgZmlsdGVyJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgZmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXIkLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IHZhbHVlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc2VsZWN0aW9uJCwgdGhpcy52YWx1ZUJpbmRpbmckLCB0aGlzLmFsbG93TXVsdGlwbGUkXSkucGlwZShcbiAgICBtYXAoKFtzZWxlY3Rpb24sIHZhbHVlQmluZGluZywgYWxsb3dNdWx0aXBsZV0pID0+IHtcbiAgICAgIGlmIChhbGxvd011bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24ubWFwKChvcHRpb24pID0+IHRoaXMuZ2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCB2YWx1ZUJpbmRpbmcpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW29wdGlvbl0gPSBzZWxlY3Rpb247XG5cbiAgICAgIGlmICghb3B0aW9uKSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCB2YWx1ZUJpbmRpbmcpO1xuICAgIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkT3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLmZpbHRlciQsIHRoaXMubGFiZWxCaW5kaW5nJF0pLnBpcGUoXG4gICAgbWFwKChbb3B0aW9ucywgZmlsdGVyXSkgPT4gdGhpcy5nZXRGaWx0ZXJlZE9wdGlvbnMoZmlsdGVyLCBvcHRpb25zKSksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zQW5kU2VsZWN0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX29wdGlvbnMkLCB0aGlzLl9zZWxlY3Rpb24kXSk7XG5cbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbjogVCB8IFRbXSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZWxlY3Rpb24pKSB7XG4gICAgICBzZWxlY3Rpb24gPSBbc2VsZWN0aW9uXTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoc2VsZWN0aW9uKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0VmFsdWVCaW5kaW5nKHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX3ZhbHVlQmluZGluZyQubmV4dChwcm9wZXJ0eVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRLZXlCaW5kaW5nKHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX2tleUJpbmRpbmckLm5leHQocHJvcGVydHlQYXRoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0TGFiZWxCaW5kaW5nKHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX2xhYmVsQmluZGluZyQubmV4dChwcm9wZXJ0eVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IFRbXSkge1xuICAgIHRoaXMuX29wdGlvbnMkLm5leHQob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEFsbG93TXVsdGlwbGUoYWxsb3dNdWx0aXBsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2FsbG93TXVsdGlwbGUkLm5leHQoYWxsb3dNdWx0aXBsZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEZpbHRlcihmaWx0ZXI6IHN0cmluZyB8IG51bGwpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWRGaWx0ZXIgPSBmaWx0ZXI/LnRyaW0oKSB8fCAnJztcblxuICAgIHRoaXMuX2ZpbHRlciQubmV4dChzYW5pdGl6ZWRGaWx0ZXIpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFtdKTtcbiAgICB0aGlzLl9vcHRpb25zJC5uZXh0KFtdKTtcbiAgICB0aGlzLl92YWx1ZUJpbmRpbmckLm5leHQobnVsbCk7XG4gICAgdGhpcy5fa2V5QmluZGluZyQubmV4dChudWxsKTtcbiAgICB0aGlzLl9sYWJlbEJpbmRpbmckLm5leHQobnVsbCk7XG4gICAgdGhpcy5fYWxsb3dNdWx0aXBsZSQubmV4dChmYWxzZSk7XG4gIH1cblxuICBnZXRPcHRpb25CeVZhbHVlJCh2YWx1ZTogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zQW5kU2VsZWN0aW9uJC5waXBlKG1hcCgoKSA9PiB0aGlzLmdldE9wdGlvbkJ5VmFsdWUodmFsdWUpKSk7XG4gIH1cblxuICBnZXRPcHRpb25CeUxhYmVsJChsYWJlbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnNBbmRTZWxlY3Rpb24kLnBpcGUobWFwKCgpID0+IHRoaXMuZ2V0T3B0aW9uQnlMYWJlbChsYWJlbCkpKTtcbiAgfVxuXG4gIGdldE9wdGlvbkJ5S2V5JChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zQW5kU2VsZWN0aW9uJC5waXBlKG1hcCgoKSA9PiB0aGlzLmdldE9wdGlvbkJ5S2V5KGtleSkpKTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQkKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb24kLnBpcGUobWFwKCgpID0+IHRoaXMuaXNTZWxlY3RlZChvcHRpb24pKSk7XG4gIH1cblxuICBnZXRMYWJlbCQob3B0aW9uOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxCaW5kaW5nJC5waXBlKG1hcCgobGFiZWxCaW5kaW5nKSA9PiB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgbGFiZWxCaW5kaW5nKSkpO1xuICB9XG5cbiAgZ2V0VmFsdWUkKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlQmluZGluZyQucGlwZShtYXAoKHZhbHVlQmluZGluZykgPT4gdGhpcy5nZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHZhbHVlQmluZGluZykpKTtcbiAgfVxuXG4gIGdldEtleSQob3B0aW9uOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5QmluZGluZyQucGlwZShtYXAoKGtleUJpbmRpbmcpID0+IHRoaXMuZ2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCBrZXlCaW5kaW5nKSkpO1xuICB9XG5cbiAgZ2V0T3B0aW9uQnlWYWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbih2YWx1ZSwgdGhpcy52YWx1ZUJpbmRpbmcpO1xuICB9XG5cbiAgZ2V0T3B0aW9uQnlMYWJlbChsYWJlbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKGxhYmVsLCB0aGlzLmxhYmVsQmluZGluZyk7XG4gIH1cblxuICBnZXRPcHRpb25CeUtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihrZXksIHRoaXMua2V5QmluZGluZyk7XG4gIH1cblxuICBnZXRPcHRpb24odmFsdWU6IHVua25vd24sIHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGwsIG9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zLCAuLi50aGlzLnNlbGVjdGlvbl0pIHtcbiAgICBpZiAoIXByb3BlcnR5UGF0aCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24gPT09IHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucy5maW5kKChvcHRpb24pID0+IHtcbiAgICAgIGlmICghaXNPYmplY3Qob3B0aW9uKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXR1cm4gZ2V0T2JqZWN0UHJvcGVydHkob3B0aW9uLCBwcm9wZXJ0eVBhdGgpID09PSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldE9wdGlvbkJ5SW5kZXgoaW5kZXg6IG51bWJlciwgb3B0aW9ucyA9IHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCkpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIG9wdGlvbnNbaW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBnZXRPcHRpb25CeU9mZnNldChcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIG9wdGlvbnMgPSB0aGlzLmdldEZpbHRlcmVkT3B0aW9ucygpLFxuICAgIGNvbmZpZzogeyBsb29wPzogYm9vbGVhbjsgY2xhbXA/OiBib29sZWFuIH0gPSB7IGNsYW1wOiB0cnVlIH0sXG4gICk6IFQgfCBudWxsIHtcbiAgICBjb25zdCB7IGxvb3AsIGNsYW1wIH0gPSBjb25maWc7XG5cbiAgICBjb25zdCBuZXdJbmRleCA9IGluZGV4ICsgb2Zmc2V0O1xuICAgIGNvbnN0IHJlbWFpbmluZ09mZnNldCA9IG5ld0luZGV4ICogLTE7XG5cbiAgICBpZiAobmV3SW5kZXggPCAwKSB7XG4gICAgICBpZiAobG9vcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25CeU9mZnNldChyZW1haW5pbmdPZmZzZXQsIG9wdGlvbnMubGVuZ3RoIC0gMSwgb3B0aW9ucywgY29uZmlnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsYW1wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpcnN0T3B0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChuZXdJbmRleCA+PSBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgaWYgKGxvb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uQnlPZmZzZXQocmVtYWluaW5nT2Zmc2V0LCAwLCBvcHRpb25zLCBjb25maWcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xhbXApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFzdE9wdGlvbigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25CeUluZGV4KG5ld0luZGV4KTtcbiAgfVxuXG4gIGdldEZpcnN0T3B0aW9uKG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uQnlJbmRleCgwLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldExhc3RPcHRpb24ob3B0aW9ucyA9IHRoaXMub3B0aW9ucyk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25CeUluZGV4KG9wdGlvbnMubGVuZ3RoIC0gMSwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRPcHRpb25JbmRleChvcHRpb246IFQsIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleShvcHRpb24pO1xuICAgIGNvbnN0IGluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgoKG8pID0+IHRoaXMuZ2V0S2V5KG8pID09PSBrZXkpO1xuXG4gICAgcmV0dXJuIGluZGV4ID09PSAtMSA/IG51bGwgOiBpbmRleDtcbiAgfVxuXG4gIGdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb24oKTogVCB8IG51bGwge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uWzBdIHx8IG51bGw7XG4gIH1cblxuICBnZXROb25NdWx0aXBsZVNlbGVjdGVkT3B0aW9uSW5kZXgoKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBvcHQgPSB0aGlzLmdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb24oKTtcblxuICAgIGlmICghb3B0KSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkluZGV4KG9wdCk7XG4gIH1cblxuICBnZXROb25NdWx0aXBsZU9wdGlvbkJ5T2Zmc2V0RnJvbVNlbGVjdGVkKFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGNvbmZpZzogeyBsb29wPzogYm9vbGVhbjsgY2xhbXA/OiBib29sZWFuIH0gPSB7IGNsYW1wOiB0cnVlIH0sXG4gICkge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb25JbmRleCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkJ5T2Zmc2V0KGluZGV4LCBvZmZzZXQsIHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCksIGNvbmZpZyk7XG4gIH1cblxuICBnZXRMYWJlbChvcHRpb246IFQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHRoaXMubGFiZWxCaW5kaW5nKTtcbiAgfVxuXG4gIGdldFZhbHVlKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy52YWx1ZUJpbmRpbmcpO1xuICB9XG5cbiAgZ2V0S2V5KG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcbiAgfVxuXG4gIGdldE9wdGlvblByb3BlcnR5KG9wdGlvbjogVCwgcHJvcGVydHlQYXRoOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKCFwcm9wZXJ0eVBhdGggfHwgIWlzT2JqZWN0KG9wdGlvbikpIHJldHVybiBvcHRpb247XG5cbiAgICByZXR1cm4gZ2V0T2JqZWN0UHJvcGVydHkob3B0aW9uLCBwcm9wZXJ0eVBhdGgpO1xuICB9XG5cbiAgaXNTZWxlY3RlZChvcHRpb246IFQpIHtcbiAgICBjb25zdCBvcHRpb25LZXkgPSB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihvcHRpb25LZXksIHRoaXMua2V5QmluZGluZywgdGhpcy5zZWxlY3Rpb24pICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRGaWx0ZXJlZE9wdGlvbnMoZmlsdGVyID0gdGhpcy5maWx0ZXIsIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpIHtcbiAgICBpZiAoIWZpbHRlcikgcmV0dXJuIG9wdGlvbnM7XG5cbiAgICBjb25zdCBzcGxpdEZpbHRlciA9IGZpbHRlci5zcGxpdCgnICcpLmZpbHRlcigoZikgPT4gZik7XG5cbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldExhYmVsKG9wdGlvbik7XG5cbiAgICAgIGlmICghbGFiZWwgfHwgdHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjb25zdCBzcGxpdExhYmVsID0gbGFiZWwuc3BsaXQoJyAnKS5maWx0ZXIoKGwpID0+IGwpO1xuXG4gICAgICByZXR1cm4gc3BsaXRGaWx0ZXIuZXZlcnkoKGYpID0+IHNwbGl0TGFiZWwuc29tZSgobCkgPT4gbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGYudG9Mb3dlckNhc2UoKSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbjogVCkge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoWy4uLnRoaXMuc2VsZWN0aW9uLCBvcHRpb25dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFtvcHRpb25dKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb246IFQpIHtcbiAgICBjb25zdCBvcHRpb25LZXkgPSB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcblxuICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKG9wdGlvbikpIHJldHVybjtcblxuICAgIHRoaXMuX3NlbGVjdGlvbiQubmV4dChcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmZpbHRlcigoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRPcHRpb25Qcm9wZXJ0eShzZWxlY3RlZE9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcblxuICAgICAgICByZXR1cm4ga2V5ICE9PSBvcHRpb25LZXk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFtdKTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdGVkT3B0aW9uKG9wdGlvbjogVCkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSkge1xuICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQWxsU2VsZWN0ZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCk7XG4gICAgY29uc3QgdW5zZWxlY3RlZE9wdGlvbnMgPSBmaWx0ZXJlZE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+ICF0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSk7XG5cbiAgICBpZiAodW5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB1bnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKG8pID0+ICF0aGlzLnNlbGVjdGlvbi5zb21lKChzKSA9PiB0aGlzLmdldEtleShzKSA9PT0gdGhpcy5nZXRLZXkobykpKTtcblxuICAgICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFsuLi50aGlzLnNlbGVjdGlvbiwgLi4uc2VsZWN0aW9uXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmZpbHRlcigocykgPT4gIWZpbHRlcmVkT3B0aW9ucy5zb21lKChvKSA9PiB0aGlzLmdldEtleShvKSA9PT0gdGhpcy5nZXRLZXkocykpKTtcblxuICAgICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KHNlbGVjdGlvbik7XG4gICAgfVxuICB9XG59XG4iXX0=
292
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLW1vZGVsLnV0aWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvdXRpbHMvc2VsZWN0aW9uLW1vZGVsLnV0aWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFeEUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFjLEVBQW9DLEVBQUU7SUFDcEUsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQztBQUNyRCxDQUFDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUFHLENBQUMsR0FBNEIsRUFBRSxJQUFZLEVBQUUsRUFBRTtJQUN2RSxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTFDLElBQUksQ0FBQyxjQUFjO1FBQUUsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdEMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUU5QixJQUFJLEtBQUssR0FBWSxHQUFHLENBQUM7SUFFekIsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7WUFBRSxPQUFPLFNBQVMsQ0FBQztRQUV2QyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3JCO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUM7QUFJRixNQUFNLE9BQU8sY0FBYztJQUEzQjtRQU9tQixnQkFBVyxHQUFHLElBQUksZUFBZSxDQUFNLEVBQUUsQ0FBQyxDQUFDO1FBUTNDLGNBQVMsR0FBRyxJQUFJLGVBQWUsQ0FBTSxFQUFFLENBQUMsQ0FBQztRQVF6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QUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVsSCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNMLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFaEgsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDbEM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcblxuY29uc3QgaXNPYmplY3QgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9PiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsO1xufTtcblxuY29uc3QgZ2V0T2JqZWN0UHJvcGVydHkgPSAob2JqOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgcHJvcDogc3RyaW5nKSA9PiB7XG4gIGNvbnN0IGhhc0RvdE5vdGF0aW9uID0gcHJvcC5pbmNsdWRlcygnLicpO1xuXG4gIGlmICghaGFzRG90Tm90YXRpb24pIHJldHVybiBvYmpbcHJvcF07XG5cbiAgY29uc3QgcHJvcHMgPSBwcm9wLnNwbGl0KCcuJyk7XG5cbiAgbGV0IHZhbHVlOiB1bmtub3duID0gb2JqO1xuXG4gIGZvciAoY29uc3QgcHJvcCBvZiBwcm9wcykge1xuICAgIGlmICghaXNPYmplY3QodmFsdWUpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgdmFsdWUgPSB2YWx1ZVtwcm9wXTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbnR5cGUgU2VsZWN0aW9uTW9kZWxUeXBlcyA9IHN0cmluZyB8IG51bWJlciB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5rbm93bjtcblxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbk1vZGVsPFQgZXh0ZW5kcyBTZWxlY3Rpb25Nb2RlbFR5cGVzID0gdW5rbm93bj4ge1xuICBnZXQgc2VsZWN0aW9uJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgc2VsZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb24kLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlbGVjdGlvbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRbXT4oW10pO1xuXG4gIGdldCBvcHRpb25zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9ucyQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cbiAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnMkLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxUW10+KFtdKTtcblxuICBnZXQgdmFsdWVCaW5kaW5nJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWVCaW5kaW5nJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgdmFsdWVCaW5kaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZUJpbmRpbmckLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZhbHVlQmluZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGdldCBrZXlCaW5kaW5nJCgpIHtcbiAgICByZXR1cm4gY29tYmluZUxhdGVzdChbdGhpcy5fa2V5QmluZGluZyQsIHRoaXMudmFsdWVCaW5kaW5nJF0pLnBpcGUoXG4gICAgICBtYXAoKFtrZXlCaW5kaW5nLCB2YWx1ZUJpbmRpbmddKSA9PiBrZXlCaW5kaW5nIHx8IHZhbHVlQmluZGluZyksXG4gICAgKTtcbiAgfVxuICBnZXQga2V5QmluZGluZygpIHtcbiAgICByZXR1cm4gdGhpcy5fa2V5QmluZGluZyQudmFsdWUgfHwgdGhpcy52YWx1ZUJpbmRpbmc7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfa2V5QmluZGluZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gIGdldCBsYWJlbEJpbmRpbmckKCkge1xuICAgIHJldHVybiB0aGlzLl9sYWJlbEJpbmRpbmckLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG4gIGdldCBsYWJlbEJpbmRpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2xhYmVsQmluZGluZyQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfbGFiZWxCaW5kaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgZ2V0IGFsbG93TXVsdGlwbGUkKCkge1xuICAgIHJldHVybiB0aGlzLl9hbGxvd011bHRpcGxlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgYWxsb3dNdWx0aXBsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dNdWx0aXBsZSQudmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSByZWFkb25seSBfYWxsb3dNdWx0aXBsZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICBnZXQgZmlsdGVyJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZmlsdGVyJC5hc09ic2VydmFibGUoKTtcbiAgfVxuICBnZXQgZmlsdGVyKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXIkLnZhbHVlO1xuICB9XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIHJlYWRvbmx5IHZhbHVlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuc2VsZWN0aW9uJCwgdGhpcy52YWx1ZUJpbmRpbmckLCB0aGlzLmFsbG93TXVsdGlwbGUkXSkucGlwZShcbiAgICBtYXAoKFtzZWxlY3Rpb24sIHZhbHVlQmluZGluZywgYWxsb3dNdWx0aXBsZV0pID0+IHtcbiAgICAgIGlmIChhbGxvd011bHRpcGxlKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3Rpb24ubWFwKChvcHRpb24pID0+IHRoaXMuZ2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCB2YWx1ZUJpbmRpbmcpKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW29wdGlvbl0gPSBzZWxlY3Rpb247XG5cbiAgICAgIGlmICghb3B0aW9uKSByZXR1cm4gbnVsbDtcblxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCB2YWx1ZUJpbmRpbmcpO1xuICAgIH0pLFxuICApO1xuXG4gIHJlYWRvbmx5IGZpbHRlcmVkT3B0aW9ucyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLm9wdGlvbnMkLCB0aGlzLmZpbHRlciQsIHRoaXMubGFiZWxCaW5kaW5nJF0pLnBpcGUoXG4gICAgbWFwKChbb3B0aW9ucywgZmlsdGVyXSkgPT4gdGhpcy5nZXRGaWx0ZXJlZE9wdGlvbnMoZmlsdGVyLCBvcHRpb25zKSksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zQW5kU2VsZWN0aW9uJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuX29wdGlvbnMkLCB0aGlzLl9zZWxlY3Rpb24kXSk7XG5cbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbjogVCB8IFRbXSkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzZWxlY3Rpb24pKSB7XG4gICAgICBzZWxlY3Rpb24gPSBbc2VsZWN0aW9uXTtcbiAgICB9XG5cbiAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoc2VsZWN0aW9uKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0VmFsdWVCaW5kaW5nKHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX3ZhbHVlQmluZGluZyQubmV4dChwcm9wZXJ0eVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRLZXlCaW5kaW5nKHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX2tleUJpbmRpbmckLm5leHQocHJvcGVydHlQYXRoKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgc2V0TGFiZWxCaW5kaW5nKHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCkge1xuICAgIHRoaXMuX2xhYmVsQmluZGluZyQubmV4dChwcm9wZXJ0eVBhdGgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBzZXRPcHRpb25zKG9wdGlvbnM6IFRbXSkge1xuICAgIHRoaXMuX29wdGlvbnMkLm5leHQob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEFsbG93TXVsdGlwbGUoYWxsb3dNdWx0aXBsZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2FsbG93TXVsdGlwbGUkLm5leHQoYWxsb3dNdWx0aXBsZSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNldEZpbHRlcihmaWx0ZXI6IHN0cmluZyB8IG51bGwpIHtcbiAgICBjb25zdCBzYW5pdGl6ZWRGaWx0ZXIgPSBmaWx0ZXI/LnRyaW0oKSB8fCAnJztcblxuICAgIHRoaXMuX2ZpbHRlciQubmV4dChzYW5pdGl6ZWRGaWx0ZXIpO1xuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFtdKTtcbiAgICB0aGlzLl9vcHRpb25zJC5uZXh0KFtdKTtcbiAgICB0aGlzLl92YWx1ZUJpbmRpbmckLm5leHQobnVsbCk7XG4gICAgdGhpcy5fa2V5QmluZGluZyQubmV4dChudWxsKTtcbiAgICB0aGlzLl9sYWJlbEJpbmRpbmckLm5leHQobnVsbCk7XG4gICAgdGhpcy5fYWxsb3dNdWx0aXBsZSQubmV4dChmYWxzZSk7XG4gIH1cblxuICBnZXRPcHRpb25CeVZhbHVlJCh2YWx1ZTogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zQW5kU2VsZWN0aW9uJC5waXBlKG1hcCgoKSA9PiB0aGlzLmdldE9wdGlvbkJ5VmFsdWUodmFsdWUpKSk7XG4gIH1cblxuICBnZXRPcHRpb25CeUxhYmVsJChsYWJlbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnNBbmRTZWxlY3Rpb24kLnBpcGUobWFwKCgpID0+IHRoaXMuZ2V0T3B0aW9uQnlMYWJlbChsYWJlbCkpKTtcbiAgfVxuXG4gIGdldE9wdGlvbkJ5S2V5JChrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zQW5kU2VsZWN0aW9uJC5waXBlKG1hcCgoKSA9PiB0aGlzLmdldE9wdGlvbkJ5S2V5KGtleSkpKTtcbiAgfVxuXG4gIGlzU2VsZWN0ZWQkKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb24kLnBpcGUobWFwKCgpID0+IHRoaXMuaXNTZWxlY3RlZChvcHRpb24pKSk7XG4gIH1cblxuICBnZXRMYWJlbCQob3B0aW9uOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxCaW5kaW5nJC5waXBlKG1hcCgobGFiZWxCaW5kaW5nKSA9PiB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgbGFiZWxCaW5kaW5nKSkpO1xuICB9XG5cbiAgZ2V0VmFsdWUkKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlQmluZGluZyQucGlwZShtYXAoKHZhbHVlQmluZGluZykgPT4gdGhpcy5nZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHZhbHVlQmluZGluZykpKTtcbiAgfVxuXG4gIGdldEtleSQob3B0aW9uOiBUKSB7XG4gICAgcmV0dXJuIHRoaXMua2V5QmluZGluZyQucGlwZShtYXAoKGtleUJpbmRpbmcpID0+IHRoaXMuZ2V0T3B0aW9uUHJvcGVydHkob3B0aW9uLCBrZXlCaW5kaW5nKSkpO1xuICB9XG5cbiAgZ2V0T3B0aW9uQnlWYWx1ZSh2YWx1ZTogdW5rbm93bikge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbih2YWx1ZSwgdGhpcy52YWx1ZUJpbmRpbmcpO1xuICB9XG5cbiAgZ2V0T3B0aW9uQnlMYWJlbChsYWJlbDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uKGxhYmVsLCB0aGlzLmxhYmVsQmluZGluZyk7XG4gIH1cblxuICBnZXRPcHRpb25CeUtleShrZXk6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihrZXksIHRoaXMua2V5QmluZGluZyk7XG4gIH1cblxuICBnZXRPcHRpb24odmFsdWU6IHVua25vd24sIHByb3BlcnR5UGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGwsIG9wdGlvbnMgPSBbLi4udGhpcy5vcHRpb25zLCAuLi50aGlzLnNlbGVjdGlvbl0pIHtcbiAgICBpZiAoIXByb3BlcnR5UGF0aCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24gPT09IHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3B0aW9ucy5maW5kKChvcHRpb24pID0+IHtcbiAgICAgIGlmICghaXNPYmplY3Qob3B0aW9uKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICByZXR1cm4gZ2V0T2JqZWN0UHJvcGVydHkob3B0aW9uLCBwcm9wZXJ0eVBhdGgpID09PSB2YWx1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldE9wdGlvbkJ5SW5kZXgoaW5kZXg6IG51bWJlciwgb3B0aW9ucyA9IHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCkpOiBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIG9wdGlvbnNbaW5kZXhdIHx8IG51bGw7XG4gIH1cblxuICBnZXRPcHRpb25CeU9mZnNldChcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIG9wdGlvbnMgPSB0aGlzLmdldEZpbHRlcmVkT3B0aW9ucygpLFxuICAgIGNvbmZpZzogeyBsb29wPzogYm9vbGVhbjsgY2xhbXA/OiBib29sZWFuIH0gPSB7IGNsYW1wOiB0cnVlIH0sXG4gICk6IFQgfCBudWxsIHtcbiAgICBjb25zdCB7IGxvb3AsIGNsYW1wIH0gPSBjb25maWc7XG5cbiAgICBjb25zdCBuZXdJbmRleCA9IGluZGV4ICsgb2Zmc2V0O1xuICAgIGNvbnN0IHJlbWFpbmluZ09mZnNldCA9IG5ld0luZGV4ICogLTE7XG5cbiAgICBpZiAobmV3SW5kZXggPCAwKSB7XG4gICAgICBpZiAobG9vcCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25CeU9mZnNldChyZW1haW5pbmdPZmZzZXQsIG9wdGlvbnMubGVuZ3RoIC0gMSwgb3B0aW9ucywgY29uZmlnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNsYW1wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEZpcnN0T3B0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChuZXdJbmRleCA+PSBvcHRpb25zLmxlbmd0aCkge1xuICAgICAgaWYgKGxvb3ApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uQnlPZmZzZXQocmVtYWluaW5nT2Zmc2V0LCAwLCBvcHRpb25zLCBjb25maWcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2xhbXApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TGFzdE9wdGlvbigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25CeUluZGV4KG5ld0luZGV4KTtcbiAgfVxuXG4gIGdldEZpcnN0T3B0aW9uKG9wdGlvbnMgPSB0aGlzLmdldEZpbHRlcmVkT3B0aW9ucygpKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkJ5SW5kZXgoMCwgb3B0aW9ucyk7XG4gIH1cblxuICBnZXRMYXN0T3B0aW9uKG9wdGlvbnMgPSB0aGlzLmdldEZpbHRlcmVkT3B0aW9ucygpKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkJ5SW5kZXgob3B0aW9ucy5sZW5ndGggLSAxLCBvcHRpb25zKTtcbiAgfVxuXG4gIGdldE9wdGlvbkluZGV4KG9wdGlvbjogVCwgb3B0aW9ucyA9IHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCkpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEtleShvcHRpb24pO1xuICAgIGNvbnN0IGluZGV4ID0gb3B0aW9ucy5maW5kSW5kZXgoKG8pID0+IHRoaXMuZ2V0S2V5KG8pID09PSBrZXkpO1xuXG4gICAgcmV0dXJuIGluZGV4ID09PSAtMSA/IG51bGwgOiBpbmRleDtcbiAgfVxuXG4gIGdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb24oKTogVCB8IG51bGwge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHJldHVybiBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uWzBdIHx8IG51bGw7XG4gIH1cblxuICBnZXROb25NdWx0aXBsZVNlbGVjdGVkT3B0aW9uSW5kZXgoKSB7XG4gICAgaWYgKHRoaXMuYWxsb3dNdWx0aXBsZSkgcmV0dXJuIG51bGw7XG5cbiAgICBjb25zdCBvcHQgPSB0aGlzLmdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb24oKTtcblxuICAgIGlmICghb3B0KSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkluZGV4KG9wdCk7XG4gIH1cblxuICBnZXROb25NdWx0aXBsZU9wdGlvbkJ5T2Zmc2V0RnJvbVNlbGVjdGVkKFxuICAgIG9mZnNldDogbnVtYmVyLFxuICAgIGNvbmZpZzogeyBsb29wPzogYm9vbGVhbjsgY2xhbXA/OiBib29sZWFuIH0gPSB7IGNsYW1wOiB0cnVlIH0sXG4gICkge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHJldHVybiBudWxsO1xuXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmdldE5vbk11bHRpcGxlU2VsZWN0ZWRPcHRpb25JbmRleCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBudWxsKSByZXR1cm4gbnVsbDtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbkJ5T2Zmc2V0KGluZGV4LCBvZmZzZXQsIHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCksIGNvbmZpZyk7XG4gIH1cblxuICBnZXRMYWJlbChvcHRpb246IFQpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Qcm9wZXJ0eShvcHRpb24sIHRoaXMubGFiZWxCaW5kaW5nKTtcbiAgfVxuXG4gIGdldFZhbHVlKG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy52YWx1ZUJpbmRpbmcpO1xuICB9XG5cbiAgZ2V0S2V5KG9wdGlvbjogVCkge1xuICAgIHJldHVybiB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcbiAgfVxuXG4gIGdldE9wdGlvblByb3BlcnR5KG9wdGlvbjogVCwgcHJvcGVydHlQYXRoOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKCFwcm9wZXJ0eVBhdGggfHwgIWlzT2JqZWN0KG9wdGlvbikpIHJldHVybiBvcHRpb247XG5cbiAgICByZXR1cm4gZ2V0T2JqZWN0UHJvcGVydHkob3B0aW9uLCBwcm9wZXJ0eVBhdGgpO1xuICB9XG5cbiAgaXNTZWxlY3RlZChvcHRpb246IFQpIHtcbiAgICBjb25zdCBvcHRpb25LZXkgPSB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcblxuICAgIHJldHVybiB0aGlzLmdldE9wdGlvbihvcHRpb25LZXksIHRoaXMua2V5QmluZGluZywgdGhpcy5zZWxlY3Rpb24pICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRGaWx0ZXJlZE9wdGlvbnMoZmlsdGVyID0gdGhpcy5maWx0ZXIsIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMpIHtcbiAgICBpZiAoIWZpbHRlcikgcmV0dXJuIG9wdGlvbnM7XG5cbiAgICBjb25zdCBzcGxpdEZpbHRlciA9IGZpbHRlci5zcGxpdCgnICcpLmZpbHRlcigoZikgPT4gZik7XG5cbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldExhYmVsKG9wdGlvbik7XG5cbiAgICAgIGlmICghbGFiZWwgfHwgdHlwZW9mIGxhYmVsICE9PSAnc3RyaW5nJykgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBjb25zdCBzcGxpdExhYmVsID0gbGFiZWwuc3BsaXQoJyAnKS5maWx0ZXIoKGwpID0+IGwpO1xuXG4gICAgICByZXR1cm4gc3BsaXRGaWx0ZXIuZXZlcnkoKGYpID0+IHNwbGl0TGFiZWwuc29tZSgobCkgPT4gbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGYudG9Mb3dlckNhc2UoKSkpKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbjogVCkge1xuICAgIGlmICh0aGlzLmFsbG93TXVsdGlwbGUpIHtcbiAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSkgcmV0dXJuO1xuXG4gICAgICB0aGlzLl9zZWxlY3Rpb24kLm5leHQoWy4uLnRoaXMuc2VsZWN0aW9uLCBvcHRpb25dKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFtvcHRpb25dKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb246IFQpIHtcbiAgICBjb25zdCBvcHRpb25LZXkgPSB0aGlzLmdldE9wdGlvblByb3BlcnR5KG9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcblxuICAgIGlmICghdGhpcy5pc1NlbGVjdGVkKG9wdGlvbikpIHJldHVybjtcblxuICAgIHRoaXMuX3NlbGVjdGlvbiQubmV4dChcbiAgICAgIHRoaXMuc2VsZWN0aW9uLmZpbHRlcigoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5nZXRPcHRpb25Qcm9wZXJ0eShzZWxlY3RlZE9wdGlvbiwgdGhpcy5rZXlCaW5kaW5nKTtcblxuICAgICAgICByZXR1cm4ga2V5ICE9PSBvcHRpb25LZXk7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgY2xlYXJTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFtdKTtcbiAgfVxuXG4gIHRvZ2dsZVNlbGVjdGVkT3B0aW9uKG9wdGlvbjogVCkge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSkge1xuICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFkZFNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlQWxsU2VsZWN0ZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHRoaXMuZ2V0RmlsdGVyZWRPcHRpb25zKCk7XG4gICAgY29uc3QgdW5zZWxlY3RlZE9wdGlvbnMgPSBmaWx0ZXJlZE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+ICF0aGlzLmlzU2VsZWN0ZWQob3B0aW9uKSk7XG5cbiAgICBpZiAodW5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSB1bnNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKG8pID0+ICF0aGlzLnNlbGVjdGlvbi5zb21lKChzKSA9PiB0aGlzLmdldEtleShzKSA9PT0gdGhpcy5nZXRLZXkobykpKTtcblxuICAgICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KFsuLi50aGlzLnNlbGVjdGlvbiwgLi4uc2VsZWN0aW9uXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuc2VsZWN0aW9uLmZpbHRlcigocykgPT4gIWZpbHRlcmVkT3B0aW9ucy5zb21lKChvKSA9PiB0aGlzLmdldEtleShvKSA9PT0gdGhpcy5nZXRLZXkocykpKTtcblxuICAgICAgdGhpcy5fc2VsZWN0aW9uJC5uZXh0KHNlbGVjdGlvbik7XG4gICAgfVxuICB9XG59XG4iXX0=