@ethlete/core 4.23.8 → 4.24.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.
- package/CHANGELOG.md +6 -0
- package/fesm2022/ethlete-core.mjs +130 -138
- package/fesm2022/ethlete-core.mjs.map +1 -1
- package/lib/types/angular.types.d.ts +0 -1
- package/package.json +7 -9
- package/esm2022/ethlete-core.mjs +0 -5
- package/esm2022/index.mjs +0 -38
- package/esm2022/lib/components/structured-data/index.mjs +0 -2
- package/esm2022/lib/components/structured-data/structured-data.component.mjs +0 -37
- package/esm2022/lib/constants/index.mjs +0 -2
- package/esm2022/lib/constants/viewport.constants.mjs +0 -17
- package/esm2022/lib/decorators/memo/index.mjs +0 -2
- package/esm2022/lib/decorators/memo/memo.decorator.mjs +0 -25
- package/esm2022/lib/directives/animatable/animatable.directive.mjs +0 -121
- package/esm2022/lib/directives/animatable/index.mjs +0 -2
- package/esm2022/lib/directives/animated-if/animated-if.directive.mjs +0 -54
- package/esm2022/lib/directives/animated-if/index.mjs +0 -2
- package/esm2022/lib/directives/animated-lifecycle/animated-lifecycle.directive.mjs +0 -136
- package/esm2022/lib/directives/animated-lifecycle/index.mjs +0 -2
- package/esm2022/lib/directives/animated-overlay/animated-overlay.directive.mjs +0 -344
- package/esm2022/lib/directives/animated-overlay/index.mjs +0 -2
- package/esm2022/lib/directives/click-outside/click-outside.directive.mjs +0 -37
- package/esm2022/lib/directives/click-outside/index.mjs +0 -2
- package/esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.constants.mjs +0 -3
- package/esm2022/lib/directives/cursor-drag-scroll/cursor-drag-scroll.directive.mjs +0 -170
- package/esm2022/lib/directives/cursor-drag-scroll/index.mjs +0 -3
- package/esm2022/lib/directives/debug/debug.directive.mjs +0 -44
- package/esm2022/lib/directives/debug/index.mjs +0 -2
- package/esm2022/lib/directives/delayable/delayable.directive.mjs +0 -55
- package/esm2022/lib/directives/delayable/index.mjs +0 -2
- package/esm2022/lib/directives/is-active-element/index.mjs +0 -2
- package/esm2022/lib/directives/is-active-element/is-active-element.directive.mjs +0 -33
- package/esm2022/lib/directives/is-element/index.mjs +0 -2
- package/esm2022/lib/directives/is-element/is-element.directive.mjs +0 -33
- package/esm2022/lib/directives/let/index.mjs +0 -3
- package/esm2022/lib/directives/let/let.directive.mjs +0 -40
- package/esm2022/lib/directives/let/let.types.mjs +0 -9
- package/esm2022/lib/directives/observe-content/index.mjs +0 -2
- package/esm2022/lib/directives/observe-content/observe-content.directive.mjs +0 -72
- package/esm2022/lib/directives/observe-resize/index.mjs +0 -2
- package/esm2022/lib/directives/observe-resize/observe-resize.directive.mjs +0 -72
- package/esm2022/lib/directives/observe-scroll-state/index.mjs +0 -4
- package/esm2022/lib/directives/observe-scroll-state/observe-scroll-state.constants.mjs +0 -3
- package/esm2022/lib/directives/observe-scroll-state/observe-scroll-state.directive.mjs +0 -180
- package/esm2022/lib/directives/observe-scroll-state/observe-scroll-state.types.mjs +0 -2
- package/esm2022/lib/directives/observe-visibility/index.mjs +0 -2
- package/esm2022/lib/directives/observe-visibility/observe-visibility.directive.mjs +0 -80
- package/esm2022/lib/directives/repeat/index.mjs +0 -2
- package/esm2022/lib/directives/repeat/repeat.directive.mjs +0 -35
- package/esm2022/lib/directives/root-boundary/index.mjs +0 -2
- package/esm2022/lib/directives/root-boundary/root-boundary.directive.mjs +0 -36
- package/esm2022/lib/directives/scroll-observer-first-element/index.mjs +0 -2
- package/esm2022/lib/directives/scroll-observer-first-element/scroll-observer-first-element.directive.mjs +0 -24
- package/esm2022/lib/directives/scroll-observer-ignore-target/index.mjs +0 -2
- package/esm2022/lib/directives/scroll-observer-ignore-target/scroll-observer-ignore-target.directive.mjs +0 -18
- package/esm2022/lib/directives/scroll-observer-last-element/index.mjs +0 -2
- package/esm2022/lib/directives/scroll-observer-last-element/scroll-observer-last-element.directive.mjs +0 -27
- package/esm2022/lib/directives/seo/index.mjs +0 -5
- package/esm2022/lib/directives/seo/seo.directive.constants.mjs +0 -3
- package/esm2022/lib/directives/seo/seo.directive.mjs +0 -166
- package/esm2022/lib/directives/seo/seo.directive.types.mjs +0 -2
- package/esm2022/lib/directives/seo/seo.directive.utils.mjs +0 -7
- package/esm2022/lib/pipes/infer-mime-type/index.mjs +0 -3
- package/esm2022/lib/pipes/infer-mime-type/infer-mime-type.pipe.mjs +0 -18
- package/esm2022/lib/pipes/infer-mime-type/infer-mime-type.util.mjs +0 -196
- package/esm2022/lib/pipes/normalize-game-result-type/index.mjs +0 -4
- package/esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.pipe.mjs +0 -15
- package/esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.types.mjs +0 -2
- package/esm2022/lib/pipes/normalize-game-result-type/normalize-game-result-type.util.mjs +0 -34
- package/esm2022/lib/pipes/normalize-match-participants/index.mjs +0 -4
- package/esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.pipe.mjs +0 -15
- package/esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.types.mjs +0 -2
- package/esm2022/lib/pipes/normalize-match-participants/normalize-match-participants.util.mjs +0 -47
- package/esm2022/lib/pipes/normalize-match-score/index.mjs +0 -4
- package/esm2022/lib/pipes/normalize-match-score/normalize-match-score.pipe.mjs +0 -15
- package/esm2022/lib/pipes/normalize-match-score/normalize-match-score.types.mjs +0 -2
- package/esm2022/lib/pipes/normalize-match-score/normalize-match-score.util.mjs +0 -126
- package/esm2022/lib/pipes/normalize-match-state/index.mjs +0 -4
- package/esm2022/lib/pipes/normalize-match-state/normalize-match-state.constants.mjs +0 -2
- package/esm2022/lib/pipes/normalize-match-state/normalize-match-state.pipe.mjs +0 -15
- package/esm2022/lib/pipes/normalize-match-state/normalize-match-state.util.mjs +0 -19
- package/esm2022/lib/pipes/normalize-match-type/index.mjs +0 -3
- package/esm2022/lib/pipes/normalize-match-type/normalize-match-type.pipe.mjs +0 -15
- package/esm2022/lib/pipes/normalize-match-type/normalize-match-type.util.mjs +0 -38
- package/esm2022/lib/pipes/to-array/index.mjs +0 -3
- package/esm2022/lib/pipes/to-array/to-array.pipe.mjs +0 -15
- package/esm2022/lib/pipes/to-array/to-array.util.mjs +0 -5
- package/esm2022/lib/props/create-prop-handlers.mjs +0 -17
- package/esm2022/lib/props/create-props.mjs +0 -53
- package/esm2022/lib/props/create-setup.mjs +0 -19
- package/esm2022/lib/props/dependency-stash.mjs +0 -20
- package/esm2022/lib/props/element-dictionary.mjs +0 -44
- package/esm2022/lib/props/index.mjs +0 -9
- package/esm2022/lib/props/props-binding.mjs +0 -53
- package/esm2022/lib/props/props.directive.mjs +0 -35
- package/esm2022/lib/props/template-input.mjs +0 -41
- package/esm2022/lib/services/click-observer.service.mjs +0 -73
- package/esm2022/lib/services/content-observer.service.mjs +0 -79
- package/esm2022/lib/services/focus-visible.service.mjs +0 -34
- package/esm2022/lib/services/index.mjs +0 -9
- package/esm2022/lib/services/intersection-observer.service.mjs +0 -75
- package/esm2022/lib/services/resize-observer.service.mjs +0 -75
- package/esm2022/lib/services/router-state.service.mjs +0 -205
- package/esm2022/lib/services/viewport.service.mjs +0 -244
- package/esm2022/lib/services/viewport.types.mjs +0 -2
- package/esm2022/lib/types/angular.types.mjs +0 -15
- package/esm2022/lib/types/i18n.types.mjs +0 -2
- package/esm2022/lib/types/index.mjs +0 -5
- package/esm2022/lib/types/value.types.mjs +0 -2
- package/esm2022/lib/types/viewport.types.mjs +0 -2
- package/esm2022/lib/utils/active-selection-model.utils.mjs +0 -91
- package/esm2022/lib/utils/angular.utils.mjs +0 -7
- package/esm2022/lib/utils/animation.utils.mjs +0 -113
- package/esm2022/lib/utils/clamp.util.mjs +0 -4
- package/esm2022/lib/utils/clone.util.mjs +0 -78
- package/esm2022/lib/utils/component-id.utils.mjs +0 -7
- package/esm2022/lib/utils/cookie.util.mjs +0 -53
- package/esm2022/lib/utils/destroy.utils.mjs +0 -13
- package/esm2022/lib/utils/equal.util.mjs +0 -118
- package/esm2022/lib/utils/form.utils.mjs +0 -63
- package/esm2022/lib/utils/index.mjs +0 -27
- package/esm2022/lib/utils/inject.utils.mjs +0 -4
- package/esm2022/lib/utils/intersection-observer.utils.mjs +0 -65
- package/esm2022/lib/utils/key-press-manager.utils.mjs +0 -30
- package/esm2022/lib/utils/media-query-observable.util.mjs +0 -18
- package/esm2022/lib/utils/mutation-observable.util.mjs +0 -42
- package/esm2022/lib/utils/object.utils.mjs +0 -30
- package/esm2022/lib/utils/reactive-binding.util.mjs +0 -124
- package/esm2022/lib/utils/resize-observable.util.mjs +0 -12
- package/esm2022/lib/utils/round.utils.mjs +0 -5
- package/esm2022/lib/utils/runtime-error.utils.mjs +0 -31
- package/esm2022/lib/utils/scrollable.utils.mjs +0 -157
- package/esm2022/lib/utils/selection-model.utils.mjs +0 -376
- package/esm2022/lib/utils/signal.utils.mjs +0 -1004
- package/esm2022/lib/utils/smart-block-scroll-strategy.utils.mjs +0 -96
- package/esm2022/lib/utils/value.utils.mjs +0 -22
- package/esm2022/lib/utils/viewport.util.mjs +0 -5
- package/esm2022/lib/validators/at-least-one-required.validator.mjs +0 -20
- package/esm2022/lib/validators/index.mjs +0 -15
- package/esm2022/lib/validators/is-array-not-empty.validator.mjs +0 -9
- package/esm2022/lib/validators/is-email.validator.mjs +0 -10
- package/esm2022/lib/validators/must-match.validator.mjs +0 -19
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
import { inject, Injectable } from '@angular/core';
|
|
2
|
-
import { NavigationEnd, Router } from '@angular/router';
|
|
3
|
-
import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, filter, map, pairwise, shareReplay, tap, } from 'rxjs';
|
|
4
|
-
import { equal } from '../utils';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
const ET_DISABLE_SCROLL_TOP = Symbol('ET_DISABLE_SCROLL_TOP');
|
|
7
|
-
const ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE = Symbol('ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE');
|
|
8
|
-
const ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE = Symbol('ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE');
|
|
9
|
-
export const routerDisableScrollTop = (config = {}) => {
|
|
10
|
-
return {
|
|
11
|
-
...(!config.asReturnRoute ? { [ET_DISABLE_SCROLL_TOP]: true } : { [ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE]: true }),
|
|
12
|
-
...(config.onPathParamChange ? { [ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE]: true } : {}),
|
|
13
|
-
};
|
|
14
|
-
};
|
|
15
|
-
export const ET_PROPERTY_REMOVED = Symbol('ET_PROPERTY_REMOVED');
|
|
16
|
-
export class RouterStateService {
|
|
17
|
-
get route$() {
|
|
18
|
-
return this._route$.asObservable().pipe(distinctUntilChanged());
|
|
19
|
-
}
|
|
20
|
-
get route() {
|
|
21
|
-
return this._route$.getValue();
|
|
22
|
-
}
|
|
23
|
-
get state$() {
|
|
24
|
-
return this._state$.asObservable();
|
|
25
|
-
}
|
|
26
|
-
get state() {
|
|
27
|
-
return this._state$.getValue();
|
|
28
|
-
}
|
|
29
|
-
get data$() {
|
|
30
|
-
return this._state$.pipe(map((state) => state.data), distinctUntilChanged((a, b) => equal(a, b)));
|
|
31
|
-
}
|
|
32
|
-
get data() {
|
|
33
|
-
return this._state$.getValue().data;
|
|
34
|
-
}
|
|
35
|
-
get pathParams$() {
|
|
36
|
-
return this._state$.pipe(map((state) => state.pathParams), distinctUntilChanged((a, b) => equal(a, b)));
|
|
37
|
-
}
|
|
38
|
-
get pathParams() {
|
|
39
|
-
return this._state$.getValue().pathParams;
|
|
40
|
-
}
|
|
41
|
-
get queryParams$() {
|
|
42
|
-
return this._state$.pipe(map((state) => state.queryParams), distinctUntilChanged((a, b) => equal(a, b)));
|
|
43
|
-
}
|
|
44
|
-
get queryParams() {
|
|
45
|
-
return this._state$.getValue().queryParams;
|
|
46
|
-
}
|
|
47
|
-
get title$() {
|
|
48
|
-
return this._state$.pipe(map((state) => state.title), distinctUntilChanged());
|
|
49
|
-
}
|
|
50
|
-
get title() {
|
|
51
|
-
return this._state$.getValue().title;
|
|
52
|
-
}
|
|
53
|
-
get fragment$() {
|
|
54
|
-
return this._state$.pipe(map((state) => state.fragment), distinctUntilChanged());
|
|
55
|
-
}
|
|
56
|
-
get fragment() {
|
|
57
|
-
return this._state$.getValue().fragment;
|
|
58
|
-
}
|
|
59
|
-
get dataChanges$() {
|
|
60
|
-
return this.data$.pipe(pairwise(), map((v) => this._findChanges(v)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
61
|
-
}
|
|
62
|
-
get queryParamChanges$() {
|
|
63
|
-
return this.queryParams$.pipe(pairwise(), map((v) => this._findChanges(v)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
64
|
-
}
|
|
65
|
-
get pathParamChanges$() {
|
|
66
|
-
return this.pathParams$.pipe(pairwise(), map((v) => this._findChanges(v)), shareReplay({ bufferSize: 1, refCount: true }));
|
|
67
|
-
}
|
|
68
|
-
constructor() {
|
|
69
|
-
this._isScrollTopOnNavigationEnabled = false;
|
|
70
|
-
this._router = inject(Router);
|
|
71
|
-
this._route$ = new BehaviorSubject(window.location.pathname);
|
|
72
|
-
this._state$ = new BehaviorSubject(this._getInitialState());
|
|
73
|
-
this._afterInitialize$ = new BehaviorSubject(false);
|
|
74
|
-
this.afterInitialize$ = this._afterInitialize$.pipe(filter((v) => v));
|
|
75
|
-
this._router.events
|
|
76
|
-
.pipe(filter((event) => event instanceof NavigationEnd), distinctUntilChanged((a, b) => a.url === b.url), map((event) => {
|
|
77
|
-
const { url } = event;
|
|
78
|
-
const urlWithoutQueryParams = url.split('?')[0] ?? '';
|
|
79
|
-
const withoutFragment = urlWithoutQueryParams.split('#')[0] ?? '';
|
|
80
|
-
return withoutFragment;
|
|
81
|
-
}), tap(() => {
|
|
82
|
-
if (!this._afterInitialize$.getValue()) {
|
|
83
|
-
this._afterInitialize$.next(true);
|
|
84
|
-
}
|
|
85
|
-
}))
|
|
86
|
-
.subscribe(this._route$);
|
|
87
|
-
combineLatest([this._route$, this._afterInitialize$])
|
|
88
|
-
.pipe(tap(([, afterInitialize]) => {
|
|
89
|
-
if (!afterInitialize)
|
|
90
|
-
return;
|
|
91
|
-
let route = this._router.routerState.snapshot.root;
|
|
92
|
-
while (route.firstChild) {
|
|
93
|
-
route = route.firstChild;
|
|
94
|
-
}
|
|
95
|
-
const { data, params, queryParams, title, fragment } = route;
|
|
96
|
-
this._state$.next({
|
|
97
|
-
data,
|
|
98
|
-
pathParams: params,
|
|
99
|
-
queryParams,
|
|
100
|
-
title: title ?? null,
|
|
101
|
-
fragment,
|
|
102
|
-
});
|
|
103
|
-
}))
|
|
104
|
-
.subscribe();
|
|
105
|
-
}
|
|
106
|
-
enableScrollEnhancements(config = {}) {
|
|
107
|
-
if (this._isScrollTopOnNavigationEnabled) {
|
|
108
|
-
return;
|
|
109
|
-
}
|
|
110
|
-
this._isScrollTopOnNavigationEnabled = true;
|
|
111
|
-
combineLatest([this._state$.pipe(pairwise()), this._route$.pipe(pairwise())])
|
|
112
|
-
.pipe(debounceTime(1))
|
|
113
|
-
.subscribe(([[prevState, currState], [prevRoute, currRoute]]) => {
|
|
114
|
-
const sameUrlNavigation = prevRoute === currRoute;
|
|
115
|
-
const didFragmentChange = prevState.fragment !== currState.fragment;
|
|
116
|
-
if (sameUrlNavigation) {
|
|
117
|
-
const allQueryParams = [
|
|
118
|
-
...new Set(Object.keys(prevState.queryParams).concat(Object.keys(currState.queryParams))),
|
|
119
|
-
];
|
|
120
|
-
const changedQueryParams = allQueryParams.filter((key) => currState.queryParams[key] !== prevState.queryParams[key]);
|
|
121
|
-
if (!config.queryParamTriggerList?.length && !didFragmentChange) {
|
|
122
|
-
return;
|
|
123
|
-
}
|
|
124
|
-
const caseQueryParams = changedQueryParams.some((key) => config.queryParamTriggerList?.includes(key));
|
|
125
|
-
const caseFragment = didFragmentChange && config.fragment?.enabled;
|
|
126
|
-
if (caseQueryParams) {
|
|
127
|
-
(config.scrollElement ?? document.documentElement).scrollTop = 0;
|
|
128
|
-
}
|
|
129
|
-
else if (caseFragment) {
|
|
130
|
-
const fragmentElement = document.getElementById(currState.fragment ?? '');
|
|
131
|
-
if (fragmentElement) {
|
|
132
|
-
fragmentElement.scrollIntoView({ behavior: config.fragment?.smooth ? 'smooth' : 'auto' });
|
|
133
|
-
}
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
const viaReturnRoute = currState.data[ET_DISABLE_SCROLL_TOP_AS_RETURN_ROUTE] && prevState.data[ET_DISABLE_SCROLL_TOP];
|
|
138
|
-
const explicitly = currState.data[ET_DISABLE_SCROLL_TOP];
|
|
139
|
-
const pathParamsChange = currState.data[ET_DISABLE_SCROLL_TOP_ON_PATH_PARAM_CHANGE];
|
|
140
|
-
if (viaReturnRoute || explicitly || pathParamsChange) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
const el = config.scrollElement ?? document.documentElement;
|
|
144
|
-
el.scrollTop = 0;
|
|
145
|
-
}
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
selectQueryParam(key) {
|
|
149
|
-
return this._state$.pipe(map((state) => state.queryParams[key]), distinctUntilChanged());
|
|
150
|
-
}
|
|
151
|
-
selectPathParam(key) {
|
|
152
|
-
return this._state$.pipe(map((state) => state.pathParams[key]), distinctUntilChanged());
|
|
153
|
-
}
|
|
154
|
-
selectData(key) {
|
|
155
|
-
return this._state$.pipe(map((state) => state.data[key]), distinctUntilChanged((a, b) => equal(a, b)));
|
|
156
|
-
}
|
|
157
|
-
_findChanges([previous, current,]) {
|
|
158
|
-
const changes = {};
|
|
159
|
-
const allKeys = new Set([
|
|
160
|
-
...Object.keys(previous),
|
|
161
|
-
...Object.keys(current),
|
|
162
|
-
]);
|
|
163
|
-
for (const key of allKeys) {
|
|
164
|
-
if (!equal(previous[key], current[key])) {
|
|
165
|
-
const val = current[key] === undefined ? ET_PROPERTY_REMOVED : current[key];
|
|
166
|
-
changes[key] = val;
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
return changes;
|
|
170
|
-
}
|
|
171
|
-
_getInitialState() {
|
|
172
|
-
const data = {};
|
|
173
|
-
const pathParams = {};
|
|
174
|
-
const queryParams = {};
|
|
175
|
-
const title = null;
|
|
176
|
-
let fragment = null;
|
|
177
|
-
const currentQueryParams = window.location.search;
|
|
178
|
-
const currentFragment = window.location.hash;
|
|
179
|
-
if (currentQueryParams) {
|
|
180
|
-
const params = new URLSearchParams(currentQueryParams);
|
|
181
|
-
params.forEach((value, key) => {
|
|
182
|
-
queryParams[key] = value;
|
|
183
|
-
});
|
|
184
|
-
}
|
|
185
|
-
if (currentFragment) {
|
|
186
|
-
fragment = currentFragment.slice(1);
|
|
187
|
-
}
|
|
188
|
-
return {
|
|
189
|
-
data,
|
|
190
|
-
pathParams,
|
|
191
|
-
queryParams,
|
|
192
|
-
title,
|
|
193
|
-
fragment,
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RouterStateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
197
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RouterStateService, providedIn: 'root' }); }
|
|
198
|
-
}
|
|
199
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: RouterStateService, decorators: [{
|
|
200
|
-
type: Injectable,
|
|
201
|
-
args: [{
|
|
202
|
-
providedIn: 'root',
|
|
203
|
-
}]
|
|
204
|
-
}], ctorParameters: () => [] });
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVyLXN0YXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy9yb3V0ZXItc3RhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQVEsYUFBYSxFQUFVLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsTUFBTSxFQUNOLEdBQUcsRUFFSCxRQUFRLEVBQ1IsV0FBVyxFQUNYLEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBRWpDLE1BQU0scUJBQXFCLEdBQUcsTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQUM7QUFDOUQsTUFBTSxxQ0FBcUMsR0FBRyxNQUFNLENBQUMsdUNBQXVDLENBQUMsQ0FBQztBQUM5RixNQUFNLDBDQUEwQyxHQUFHLE1BQU0sQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO0FBZ0J4RyxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLFNBQXVDLEVBQUUsRUFBRSxFQUFFO0lBQ2xGLE9BQU87UUFDTCxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMscUJBQXFCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLHFDQUFxQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDbEgsR0FBRyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLDBDQUEwQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztLQUM1RixDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sbUJBQW1CLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLENBQUM7QUEwQ2pFLE1BQU0sT0FBTyxrQkFBa0I7SUFVN0IsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUNqQyxDQUFDO0lBRUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUMxQixvQkFBb0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDNUMsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFJLElBQUk7UUFDTixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUMsSUFBSSxDQUFDO0lBQ3RDLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFDaEMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzVDLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDLFVBQVUsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDdEIsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQ2pDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUM1QyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksV0FBVztRQUNiLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxXQUFXLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUMzQixvQkFBb0IsRUFBRSxDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUM7SUFDdkMsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUM5QixvQkFBb0IsRUFBRSxDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQ3BCLFFBQVEsRUFBRSxFQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQyxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQzNCLFFBQVEsRUFBRSxFQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQyxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVELElBQUksaUJBQWlCO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQzFCLFFBQVEsRUFBRSxFQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoQyxXQUFXLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUMvQyxDQUFDO0lBQ0osQ0FBQztJQUVEO1FBeEdRLG9DQUErQixHQUFHLEtBQUssQ0FBQztRQUMvQixZQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXpCLFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELFlBQU8sR0FBRyxJQUFJLGVBQWUsQ0FBYyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO1FBRXBFLHNCQUFpQixHQUFHLElBQUksZUFBZSxDQUFVLEtBQUssQ0FBQyxDQUFDO1FBQ2hFLHFCQUFnQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBa0d4RSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07YUFDaEIsSUFBSSxDQUNILE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBMEIsRUFBRSxDQUFDLEtBQUssWUFBWSxhQUFhLENBQUMsRUFDekUsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0MsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDWixNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDO1lBRXRCLE1BQU0scUJBQXFCLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEQsTUFBTSxlQUFlLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUVsRSxPQUFPLGVBQWUsQ0FBQztRQUN6QixDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFO1lBQ1AsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDO2dCQUN2QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FDSDthQUNBLFNBQVMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFM0IsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQzthQUNsRCxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxFQUFFLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGVBQWU7Z0JBQUUsT0FBTztZQUU3QixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBRW5ELE9BQU8sS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUN4QixLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUMzQixDQUFDO1lBRUQsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFFN0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2hCLElBQUk7Z0JBQ0osVUFBVSxFQUFFLE1BQU07Z0JBQ2xCLFdBQVc7Z0JBQ1gsS0FBSyxFQUFFLEtBQUssSUFBSSxJQUFJO2dCQUNwQixRQUFRO2FBQ1QsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQ0g7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsd0JBQXdCLENBQUMsU0FBbUMsRUFBRTtRQUM1RCxJQUFJLElBQUksQ0FBQywrQkFBK0IsRUFBRSxDQUFDO1lBQ3pDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQztRQUU1QyxhQUFhLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUMxRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JCLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQzlELE1BQU0saUJBQWlCLEdBQUcsU0FBUyxLQUFLLFNBQVMsQ0FBQztZQUNsRCxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLFFBQVEsQ0FBQztZQUVwRSxJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sY0FBYyxHQUFHO29CQUNyQixHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO2lCQUMxRixDQUFDO2dCQUVGLE1BQU0sa0JBQWtCLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FDOUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FDbkUsQ0FBQztnQkFFRixJQUFJLENBQUMsTUFBTSxDQUFDLHFCQUFxQixFQUFFLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7b0JBQ2hFLE9BQU87Z0JBQ1QsQ0FBQztnQkFFRCxNQUFNLGVBQWUsR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztnQkFDdEcsTUFBTSxZQUFZLEdBQUcsaUJBQWlCLElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUM7Z0JBRW5FLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3BCLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFDbkUsQ0FBQztxQkFBTSxJQUFJLFlBQVksRUFBRSxDQUFDO29CQUN4QixNQUFNLGVBQWUsR0FBRyxRQUFRLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUM7b0JBRTFFLElBQUksZUFBZSxFQUFFLENBQUM7d0JBQ3BCLGVBQWUsQ0FBQyxjQUFjLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztvQkFDNUYsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLE1BQU0sY0FBYyxHQUNsQixTQUFTLENBQUMsSUFBSSxDQUFDLHFDQUFxQyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO2dCQUNqRyxNQUFNLFVBQVUsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7Z0JBQ3pELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO2dCQUVwRixJQUFJLGNBQWMsSUFBSSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztvQkFDckQsT0FBTztnQkFDVCxDQUFDO2dCQUVELE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxhQUFhLElBQUksUUFBUSxDQUFDLGVBQWUsQ0FBQztnQkFDNUQsRUFBRSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUM7WUFDbkIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGdCQUFnQixDQUF5QixHQUFXO1FBQ2xELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQ3RCLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUN0QyxvQkFBb0IsRUFBRSxDQUN2QixDQUFDO0lBQ0osQ0FBQztJQUVELGVBQWUsQ0FBeUIsR0FBVztRQUNqRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDckMsb0JBQW9CLEVBQUUsQ0FDdkIsQ0FBQztJQUNKLENBQUM7SUFFRCxVQUFVLENBQWMsR0FBVztRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUN0QixHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFDL0Isb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzVDLENBQUM7SUFDSixDQUFDO0lBRU8sWUFBWSxDQUE2RixDQUMvRyxRQUFRLEVBQ1IsT0FBTyxFQUNMO1FBQ0YsTUFBTSxPQUFPLEdBQTRCLEVBQUUsQ0FBQztRQUU1QyxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBK0M7WUFDcEUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUN4QixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ3hCLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDeEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFFNUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQztZQUNyQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sT0FBWSxDQUFDO0lBQ3RCLENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsTUFBTSxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLFdBQVcsR0FBVyxFQUFFLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDO1FBQ25CLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQztRQUVwQixNQUFNLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ2xELE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBRTdDLElBQUksa0JBQWtCLEVBQUUsQ0FBQztZQUN2QixNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBRXZELE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7Z0JBQzVCLFdBQVcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxlQUFlLEVBQUUsQ0FBQztZQUNwQixRQUFRLEdBQUcsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsT0FBTztZQUNMLElBQUk7WUFDSixVQUFVO1lBQ1YsV0FBVztZQUNYLEtBQUs7WUFDTCxRQUFRO1NBQ1QsQ0FBQztJQUNKLENBQUM7K0dBclJVLGtCQUFrQjttSEFBbEIsa0JBQWtCLGNBRmpCLE1BQU07OzRGQUVQLGtCQUFrQjtrQkFIOUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERhdGEsIE5hdmlnYXRpb25FbmQsIFBhcmFtcywgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIHBhaXJ3aXNlLFxuICBzaGFyZVJlcGxheSxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5jb25zdCBFVF9ESVNBQkxFX1NDUk9MTF9UT1AgPSBTeW1ib2woJ0VUX0RJU0FCTEVfU0NST0xMX1RPUCcpO1xuY29uc3QgRVRfRElTQUJMRV9TQ1JPTExfVE9QX0FTX1JFVFVSTl9ST1VURSA9IFN5bWJvbCgnRVRfRElTQUJMRV9TQ1JPTExfVE9QX0FTX1JFVFVSTl9ST1VURScpO1xuY29uc3QgRVRfRElTQUJMRV9TQ1JPTExfVE9QX09OX1BBVEhfUEFSQU1fQ0hBTkdFID0gU3ltYm9sKCdFVF9ESVNBQkxFX1NDUk9MTF9UT1BfT05fUEFUSF9QQVJBTV9DSEFOR0UnKTtcblxuZXhwb3J0IGludGVyZmFjZSBSb3V0ZXJEaXNhYmxlU2Nyb2xsVG9wQ29uZmlnIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzYWJsZSBzY3JvbGwgdG8gdG9wIE9OTFkgd2hlbiBuYXZpZ2F0aW5nIGJhY2sgdG8gdGhpcyByb3V0ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGFzUmV0dXJuUm91dGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGRpc2FibGUgc2Nyb2xsIHRvIHRvcCB3aGVuIGEgcGF0aCBwYXJhbSBjaGFuZ2VzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgb25QYXRoUGFyYW1DaGFuZ2U/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY29uc3Qgcm91dGVyRGlzYWJsZVNjcm9sbFRvcCA9IChjb25maWc6IFJvdXRlckRpc2FibGVTY3JvbGxUb3BDb25maWcgPSB7fSkgPT4ge1xuICByZXR1cm4ge1xuICAgIC4uLighY29uZmlnLmFzUmV0dXJuUm91dGUgPyB7IFtFVF9ESVNBQkxFX1NDUk9MTF9UT1BdOiB0cnVlIH0gOiB7IFtFVF9ESVNBQkxFX1NDUk9MTF9UT1BfQVNfUkVUVVJOX1JPVVRFXTogdHJ1ZSB9KSxcbiAgICAuLi4oY29uZmlnLm9uUGF0aFBhcmFtQ2hhbmdlID8geyBbRVRfRElTQUJMRV9TQ1JPTExfVE9QX09OX1BBVEhfUEFSQU1fQ0hBTkdFXTogdHJ1ZSB9IDoge30pLFxuICB9O1xufTtcblxuZXhwb3J0IGNvbnN0IEVUX1BST1BFUlRZX1JFTU9WRUQgPSBTeW1ib2woJ0VUX1BST1BFUlRZX1JFTU9WRUQnKTtcblxuZXhwb3J0IGludGVyZmFjZSBTY3JvbGxFbmhhbmNlbWVudHNDb25maWcge1xuICAvKipcbiAgICogVGhlIHNjcm9sbGFibGUgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcbiAgICovXG4gIHNjcm9sbEVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgLyoqXG4gICAqIEEgbGlzdCBvZiBxdWVyeSBwYXJhbXMgdGhhdCBzaG91bGQgdHJpZ2dlciBhIHNjcm9sbCB0byB0b3AuXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBleGFtcGxlIFsncGFnZSddIC8vIHdpbGwgc2Nyb2xsIHRvIHRvcCB3aGVuIHRoZSBwYWdlIHF1ZXJ5IHBhcmFtIGNoYW5nZXNcbiAgICovXG4gIHF1ZXJ5UGFyYW1UcmlnZ2VyTGlzdD86IHN0cmluZ1tdO1xuICAvKipcbiAgICogQ29uZmlnIGZvciBmcmFnbWVudCBzY3JvbGxpbmcuXG4gICAqL1xuICBmcmFnbWVudD86IHtcbiAgICAvKipcbiAgICAgKiBFbmFibGUgZnJhZ21lbnQgc2Nyb2xsaW5nIChzY3JvbGwgdG8gZWxlbWVudCB3aXRoIGlkKVxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XG4gICAgLyoqXG4gICAgICogV2hldGhlciB0byB1c2Ugc21vb3RoIHNjcm9sbGluZyBvciBub3QuXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBzbW9vdGg/OiBib29sZWFuO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJvdXRlclN0YXRlIHtcbiAgZGF0YTogRGF0YTtcbiAgcGF0aFBhcmFtczogUGFyYW1zO1xuICBxdWVyeVBhcmFtczogUGFyYW1zO1xuICB0aXRsZTogc3RyaW5nIHwgbnVsbDtcbiAgZnJhZ21lbnQ6IHN0cmluZyB8IG51bGw7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSb3V0ZXJTdGF0ZVNlcnZpY2Uge1xuICBwcml2YXRlIF9pc1Njcm9sbFRvcE9uTmF2aWdhdGlvbkVuYWJsZWQgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcm91dGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFJvdXRlclN0YXRlPih0aGlzLl9nZXRJbml0aWFsU3RhdGUoKSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfYWZ0ZXJJbml0aWFsaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICByZWFkb25seSBhZnRlckluaXRpYWxpemUkID0gdGhpcy5fYWZ0ZXJJbml0aWFsaXplJC5waXBlKGZpbHRlcigodikgPT4gdikpO1xuXG4gIGdldCByb3V0ZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3JvdXRlJC5hc09ic2VydmFibGUoKS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICB9XG5cbiAgZ2V0IHJvdXRlKCkge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZSQuZ2V0VmFsdWUoKTtcbiAgfVxuXG4gIGdldCBzdGF0ZSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBzdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLmdldFZhbHVlKCk7XG4gIH1cblxuICBnZXQgZGF0YSQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5waXBlKFxuICAgICAgbWFwKChzdGF0ZSkgPT4gc3RhdGUuZGF0YSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gZXF1YWwoYSwgYikpLFxuICAgICk7XG4gIH1cblxuICBnZXQgZGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLmdldFZhbHVlKCkuZGF0YTtcbiAgfVxuXG4gIGdldCBwYXRoUGFyYW1zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHN0YXRlKSA9PiBzdGF0ZS5wYXRoUGFyYW1zKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBlcXVhbChhLCBiKSksXG4gICAgKTtcbiAgfVxuXG4gIGdldCBwYXRoUGFyYW1zKCkge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQuZ2V0VmFsdWUoKS5wYXRoUGFyYW1zO1xuICB9XG5cbiAgZ2V0IHF1ZXJ5UGFyYW1zJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHN0YXRlKSA9PiBzdGF0ZS5xdWVyeVBhcmFtcyksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gZXF1YWwoYSwgYikpLFxuICAgICk7XG4gIH1cblxuICBnZXQgcXVlcnlQYXJhbXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5nZXRWYWx1ZSgpLnF1ZXJ5UGFyYW1zO1xuICB9XG5cbiAgZ2V0IHRpdGxlJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHN0YXRlKSA9PiBzdGF0ZS50aXRsZSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICk7XG4gIH1cblxuICBnZXQgdGl0bGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5nZXRWYWx1ZSgpLnRpdGxlO1xuICB9XG5cbiAgZ2V0IGZyYWdtZW50JCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHN0YXRlKSA9PiBzdGF0ZS5mcmFnbWVudCksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICk7XG4gIH1cblxuICBnZXQgZnJhZ21lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlJC5nZXRWYWx1ZSgpLmZyYWdtZW50O1xuICB9XG5cbiAgZ2V0IGRhdGFDaGFuZ2VzJCgpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhJC5waXBlKFxuICAgICAgcGFpcndpc2UoKSxcbiAgICAgIG1hcCgodikgPT4gdGhpcy5fZmluZENoYW5nZXModikpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuICB9XG5cbiAgZ2V0IHF1ZXJ5UGFyYW1DaGFuZ2VzJCgpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVBhcmFtcyQucGlwZShcbiAgICAgIHBhaXJ3aXNlKCksXG4gICAgICBtYXAoKHYpID0+IHRoaXMuX2ZpbmRDaGFuZ2VzKHYpKSxcbiAgICAgIHNoYXJlUmVwbGF5KHsgYnVmZmVyU2l6ZTogMSwgcmVmQ291bnQ6IHRydWUgfSksXG4gICAgKTtcbiAgfVxuXG4gIGdldCBwYXRoUGFyYW1DaGFuZ2VzJCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYXRoUGFyYW1zJC5waXBlKFxuICAgICAgcGFpcndpc2UoKSxcbiAgICAgIG1hcCgodikgPT4gdGhpcy5fZmluZENoYW5nZXModikpLFxuICAgICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fcm91dGVyLmV2ZW50c1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZXZlbnQpOiBldmVudCBpcyBOYXZpZ2F0aW9uRW5kID0+IGV2ZW50IGluc3RhbmNlb2YgTmF2aWdhdGlvbkVuZCksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBhLnVybCA9PT0gYi51cmwpLFxuICAgICAgICBtYXAoKGV2ZW50KSA9PiB7XG4gICAgICAgICAgY29uc3QgeyB1cmwgfSA9IGV2ZW50O1xuXG4gICAgICAgICAgY29uc3QgdXJsV2l0aG91dFF1ZXJ5UGFyYW1zID0gdXJsLnNwbGl0KCc/JylbMF0gPz8gJyc7XG4gICAgICAgICAgY29uc3Qgd2l0aG91dEZyYWdtZW50ID0gdXJsV2l0aG91dFF1ZXJ5UGFyYW1zLnNwbGl0KCcjJylbMF0gPz8gJyc7XG5cbiAgICAgICAgICByZXR1cm4gd2l0aG91dEZyYWdtZW50O1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2FmdGVySW5pdGlhbGl6ZSQuZ2V0VmFsdWUoKSkge1xuICAgICAgICAgICAgdGhpcy5fYWZ0ZXJJbml0aWFsaXplJC5uZXh0KHRydWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKHRoaXMuX3JvdXRlJCk7XG5cbiAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLl9yb3V0ZSQsIHRoaXMuX2FmdGVySW5pdGlhbGl6ZSRdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoWywgYWZ0ZXJJbml0aWFsaXplXSkgPT4ge1xuICAgICAgICAgIGlmICghYWZ0ZXJJbml0aWFsaXplKSByZXR1cm47XG5cbiAgICAgICAgICBsZXQgcm91dGUgPSB0aGlzLl9yb3V0ZXIucm91dGVyU3RhdGUuc25hcHNob3Qucm9vdDtcblxuICAgICAgICAgIHdoaWxlIChyb3V0ZS5maXJzdENoaWxkKSB7XG4gICAgICAgICAgICByb3V0ZSA9IHJvdXRlLmZpcnN0Q2hpbGQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgeyBkYXRhLCBwYXJhbXMsIHF1ZXJ5UGFyYW1zLCB0aXRsZSwgZnJhZ21lbnQgfSA9IHJvdXRlO1xuXG4gICAgICAgICAgdGhpcy5fc3RhdGUkLm5leHQoe1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGhQYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlID8/IG51bGwsXG4gICAgICAgICAgICBmcmFnbWVudCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBlbmFibGVTY3JvbGxFbmhhbmNlbWVudHMoY29uZmlnOiBTY3JvbGxFbmhhbmNlbWVudHNDb25maWcgPSB7fSkge1xuICAgIGlmICh0aGlzLl9pc1Njcm9sbFRvcE9uTmF2aWdhdGlvbkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc1Njcm9sbFRvcE9uTmF2aWdhdGlvbkVuYWJsZWQgPSB0cnVlO1xuXG4gICAgY29tYmluZUxhdGVzdChbdGhpcy5fc3RhdGUkLnBpcGUocGFpcndpc2UoKSksIHRoaXMuX3JvdXRlJC5waXBlKHBhaXJ3aXNlKCkpXSlcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxKSlcbiAgICAgIC5zdWJzY3JpYmUoKFtbcHJldlN0YXRlLCBjdXJyU3RhdGVdLCBbcHJldlJvdXRlLCBjdXJyUm91dGVdXSkgPT4ge1xuICAgICAgICBjb25zdCBzYW1lVXJsTmF2aWdhdGlvbiA9IHByZXZSb3V0ZSA9PT0gY3VyclJvdXRlO1xuICAgICAgICBjb25zdCBkaWRGcmFnbWVudENoYW5nZSA9IHByZXZTdGF0ZS5mcmFnbWVudCAhPT0gY3VyclN0YXRlLmZyYWdtZW50O1xuXG4gICAgICAgIGlmIChzYW1lVXJsTmF2aWdhdGlvbikge1xuICAgICAgICAgIGNvbnN0IGFsbFF1ZXJ5UGFyYW1zID0gW1xuICAgICAgICAgICAgLi4ubmV3IFNldChPYmplY3Qua2V5cyhwcmV2U3RhdGUucXVlcnlQYXJhbXMpLmNvbmNhdChPYmplY3Qua2V5cyhjdXJyU3RhdGUucXVlcnlQYXJhbXMpKSksXG4gICAgICAgICAgXTtcblxuICAgICAgICAgIGNvbnN0IGNoYW5nZWRRdWVyeVBhcmFtcyA9IGFsbFF1ZXJ5UGFyYW1zLmZpbHRlcihcbiAgICAgICAgICAgIChrZXkpID0+IGN1cnJTdGF0ZS5xdWVyeVBhcmFtc1trZXldICE9PSBwcmV2U3RhdGUucXVlcnlQYXJhbXNba2V5XSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKCFjb25maWcucXVlcnlQYXJhbVRyaWdnZXJMaXN0Py5sZW5ndGggJiYgIWRpZEZyYWdtZW50Q2hhbmdlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgY2FzZVF1ZXJ5UGFyYW1zID0gY2hhbmdlZFF1ZXJ5UGFyYW1zLnNvbWUoKGtleSkgPT4gY29uZmlnLnF1ZXJ5UGFyYW1UcmlnZ2VyTGlzdD8uaW5jbHVkZXMoa2V5KSk7XG4gICAgICAgICAgY29uc3QgY2FzZUZyYWdtZW50ID0gZGlkRnJhZ21lbnRDaGFuZ2UgJiYgY29uZmlnLmZyYWdtZW50Py5lbmFibGVkO1xuXG4gICAgICAgICAgaWYgKGNhc2VRdWVyeVBhcmFtcykge1xuICAgICAgICAgICAgKGNvbmZpZy5zY3JvbGxFbGVtZW50ID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsVG9wID0gMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGNhc2VGcmFnbWVudCkge1xuICAgICAgICAgICAgY29uc3QgZnJhZ21lbnRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoY3VyclN0YXRlLmZyYWdtZW50ID8/ICcnKTtcblxuICAgICAgICAgICAgaWYgKGZyYWdtZW50RWxlbWVudCkge1xuICAgICAgICAgICAgICBmcmFnbWVudEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogY29uZmlnLmZyYWdtZW50Py5zbW9vdGggPyAnc21vb3RoJyA6ICdhdXRvJyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgdmlhUmV0dXJuUm91dGUgPVxuICAgICAgICAgICAgY3VyclN0YXRlLmRhdGFbRVRfRElTQUJMRV9TQ1JPTExfVE9QX0FTX1JFVFVSTl9ST1VURV0gJiYgcHJldlN0YXRlLmRhdGFbRVRfRElTQUJMRV9TQ1JPTExfVE9QXTtcbiAgICAgICAgICBjb25zdCBleHBsaWNpdGx5ID0gY3VyclN0YXRlLmRhdGFbRVRfRElTQUJMRV9TQ1JPTExfVE9QXTtcbiAgICAgICAgICBjb25zdCBwYXRoUGFyYW1zQ2hhbmdlID0gY3VyclN0YXRlLmRhdGFbRVRfRElTQUJMRV9TQ1JPTExfVE9QX09OX1BBVEhfUEFSQU1fQ0hBTkdFXTtcblxuICAgICAgICAgIGlmICh2aWFSZXR1cm5Sb3V0ZSB8fCBleHBsaWNpdGx5IHx8IHBhdGhQYXJhbXNDaGFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlbCA9IGNvbmZpZy5zY3JvbGxFbGVtZW50ID8/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgICBlbC5zY3JvbGxUb3AgPSAwO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHNlbGVjdFF1ZXJ5UGFyYW08VCA9IHN0cmluZyB8IHVuZGVmaW5lZD4oa2V5OiBzdHJpbmcpOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gdGhpcy5fc3RhdGUkLnBpcGUoXG4gICAgICBtYXAoKHN0YXRlKSA9PiBzdGF0ZS5xdWVyeVBhcmFtc1trZXldKSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgKTtcbiAgfVxuXG4gIHNlbGVjdFBhdGhQYXJhbTxUID0gc3RyaW5nIHwgdW5kZWZpbmVkPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoc3RhdGUpID0+IHN0YXRlLnBhdGhQYXJhbXNba2V5XSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICk7XG4gIH1cblxuICBzZWxlY3REYXRhPFQgPSB1bmtub3duPihrZXk6IHN0cmluZyk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiB0aGlzLl9zdGF0ZSQucGlwZShcbiAgICAgIG1hcCgoc3RhdGUpID0+IHN0YXRlLmRhdGFba2V5XSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgoYSwgYikgPT4gZXF1YWwoYSwgYikpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9maW5kQ2hhbmdlczxUIGV4dGVuZHMgW1JlY29yZDxzdHJpbmcsIHVua25vd24+LCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPl0sIEogZXh0ZW5kcyBQYXJ0aWFsPFRbbnVtYmVyXT4+KFtcbiAgICBwcmV2aW91cyxcbiAgICBjdXJyZW50LFxuICBdOiBUKSB7XG4gICAgY29uc3QgY2hhbmdlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGNvbnN0IGFsbEtleXMgPSBuZXcgU2V0PGtleW9mIHR5cGVvZiBwcmV2aW91cyAmIGtleW9mIHR5cGVvZiBjdXJyZW50PihbXG4gICAgICAuLi5PYmplY3Qua2V5cyhwcmV2aW91cyksXG4gICAgICAuLi5PYmplY3Qua2V5cyhjdXJyZW50KSxcbiAgICBdKTtcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGFsbEtleXMpIHtcbiAgICAgIGlmICghZXF1YWwocHJldmlvdXNba2V5XSwgY3VycmVudFtrZXldKSkge1xuICAgICAgICBjb25zdCB2YWwgPSBjdXJyZW50W2tleV0gPT09IHVuZGVmaW5lZCA/IEVUX1BST1BFUlRZX1JFTU9WRUQgOiBjdXJyZW50W2tleV07XG5cbiAgICAgICAgY2hhbmdlc1trZXldID0gdmFsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGFuZ2VzIGFzIEo7XG4gIH1cblxuICBwcml2YXRlIF9nZXRJbml0aWFsU3RhdGUoKTogUm91dGVyU3RhdGUge1xuICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICBjb25zdCBwYXRoUGFyYW1zID0ge307XG4gICAgY29uc3QgcXVlcnlQYXJhbXM6IFBhcmFtcyA9IHt9O1xuICAgIGNvbnN0IHRpdGxlID0gbnVsbDtcbiAgICBsZXQgZnJhZ21lbnQgPSBudWxsO1xuXG4gICAgY29uc3QgY3VycmVudFF1ZXJ5UGFyYW1zID0gd2luZG93LmxvY2F0aW9uLnNlYXJjaDtcbiAgICBjb25zdCBjdXJyZW50RnJhZ21lbnQgPSB3aW5kb3cubG9jYXRpb24uaGFzaDtcblxuICAgIGlmIChjdXJyZW50UXVlcnlQYXJhbXMpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoY3VycmVudFF1ZXJ5UGFyYW1zKTtcblxuICAgICAgcGFyYW1zLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgcXVlcnlQYXJhbXNba2V5XSA9IHZhbHVlO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRGcmFnbWVudCkge1xuICAgICAgZnJhZ21lbnQgPSBjdXJyZW50RnJhZ21lbnQuc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGEsXG4gICAgICBwYXRoUGFyYW1zLFxuICAgICAgcXVlcnlQYXJhbXMsXG4gICAgICB0aXRsZSxcbiAgICAgIGZyYWdtZW50LFxuICAgIH07XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,244 +0,0 @@
|
|
|
1
|
-
import { __decorate, __metadata } from "tslib";
|
|
2
|
-
import { BreakpointObserver } from '@angular/cdk/layout';
|
|
3
|
-
import { Injectable, inject } from '@angular/core';
|
|
4
|
-
import { BehaviorSubject, Subject, combineLatest, debounceTime, finalize, map, shareReplay, takeUntil, tap, } from 'rxjs';
|
|
5
|
-
import { DEFAULT_VIEWPORT_CONFIG, VIEWPORT_CONFIG } from '../constants';
|
|
6
|
-
import { Memo } from '../decorators/memo';
|
|
7
|
-
import { equal } from '../utils';
|
|
8
|
-
import { ResizeObserverService } from './resize-observer.service';
|
|
9
|
-
import * as i0 from "@angular/core";
|
|
10
|
-
export class ViewportService {
|
|
11
|
-
get isXs$() {
|
|
12
|
-
return this._isXs$.asObservable();
|
|
13
|
-
}
|
|
14
|
-
get isXs() {
|
|
15
|
-
return this._isXs$.value;
|
|
16
|
-
}
|
|
17
|
-
get isSm$() {
|
|
18
|
-
return this._isSm$.asObservable();
|
|
19
|
-
}
|
|
20
|
-
get isSm() {
|
|
21
|
-
return this._isSm$.value;
|
|
22
|
-
}
|
|
23
|
-
get isMd$() {
|
|
24
|
-
return this._isMd$.asObservable();
|
|
25
|
-
}
|
|
26
|
-
get isMd() {
|
|
27
|
-
return this._isMd$.value;
|
|
28
|
-
}
|
|
29
|
-
get isLg$() {
|
|
30
|
-
return this._isLg$.asObservable();
|
|
31
|
-
}
|
|
32
|
-
get isLg() {
|
|
33
|
-
return this._isLg$.value;
|
|
34
|
-
}
|
|
35
|
-
get isXl$() {
|
|
36
|
-
return this._isXl$.asObservable();
|
|
37
|
-
}
|
|
38
|
-
get isXl() {
|
|
39
|
-
return this._isXl$.value;
|
|
40
|
-
}
|
|
41
|
-
get is2Xl$() {
|
|
42
|
-
return this._is2Xl$.asObservable();
|
|
43
|
-
}
|
|
44
|
-
get is2Xl() {
|
|
45
|
-
return this._is2Xl$.value;
|
|
46
|
-
}
|
|
47
|
-
get viewportSize$() {
|
|
48
|
-
return this._viewportSize$.asObservable();
|
|
49
|
-
}
|
|
50
|
-
get viewportSize() {
|
|
51
|
-
return this._viewportSize$.value;
|
|
52
|
-
}
|
|
53
|
-
get scrollbarSize$() {
|
|
54
|
-
return this._scrollbarSize$.asObservable();
|
|
55
|
-
}
|
|
56
|
-
get scrollbarSize() {
|
|
57
|
-
return this._scrollbarSize$.value;
|
|
58
|
-
}
|
|
59
|
-
get currentViewport() {
|
|
60
|
-
return this.getCurrentViewport([this.isXs, this.isSm, this.isMd, this.isLg, this.isXl, this.is2Xl]);
|
|
61
|
-
}
|
|
62
|
-
constructor() {
|
|
63
|
-
this._resizeObserverService = inject(ResizeObserverService);
|
|
64
|
-
this._viewportConfig = inject(VIEWPORT_CONFIG, { optional: true }) || DEFAULT_VIEWPORT_CONFIG;
|
|
65
|
-
this._breakpointObserver = inject(BreakpointObserver);
|
|
66
|
-
this._viewportMonitorStop$ = new Subject();
|
|
67
|
-
this._isViewportMonitorEnabled = false;
|
|
68
|
-
this._isXs$ = new BehaviorSubject(this.isMatched({ max: 'xs' }));
|
|
69
|
-
this._isSm$ = new BehaviorSubject(this.isMatched({ min: 'sm', max: 'sm' }));
|
|
70
|
-
this._isMd$ = new BehaviorSubject(this.isMatched({ min: 'md', max: 'md' }));
|
|
71
|
-
this._isLg$ = new BehaviorSubject(this.isMatched({ min: 'lg', max: 'lg' }));
|
|
72
|
-
this._isXl$ = new BehaviorSubject(this.isMatched({ min: 'xl', max: 'xl' }));
|
|
73
|
-
this._is2Xl$ = new BehaviorSubject(this.isMatched({ min: '2xl' }));
|
|
74
|
-
this._viewportSize$ = new BehaviorSubject(null);
|
|
75
|
-
this._scrollbarSize$ = new BehaviorSubject(null);
|
|
76
|
-
this.currentViewport$ = combineLatest([this.isXs$, this.isSm$, this.isMd$, this.isLg$, this.isXl$, this.is2Xl$]).pipe(map((val) => this.getCurrentViewport(val)), debounceTime(0), shareReplay({ bufferSize: 1, refCount: true }));
|
|
77
|
-
this._observeDefaultBreakpoints();
|
|
78
|
-
}
|
|
79
|
-
observe(options) {
|
|
80
|
-
const mediaQuery = this._buildMediaQuery(options);
|
|
81
|
-
return this._breakpointObserver.observe(mediaQuery).pipe(map((x) => x.matches), shareReplay({ bufferSize: 1, refCount: true }));
|
|
82
|
-
}
|
|
83
|
-
isMatched(options) {
|
|
84
|
-
const mediaQuery = this._buildMediaQuery(options);
|
|
85
|
-
return this._breakpointObserver.isMatched(mediaQuery);
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Applies size CSS variables to the documentElement in pixels.
|
|
89
|
-
* - `--et-vw`: viewport width excluding scrollbar width
|
|
90
|
-
* - `--et-vh`: viewport height excluding scrollbar height
|
|
91
|
-
* - `--et-sw`: scrollbar width
|
|
92
|
-
* - `--et-sh`: scrollbar height
|
|
93
|
-
*/
|
|
94
|
-
monitorViewport() {
|
|
95
|
-
if (this._isViewportMonitorEnabled)
|
|
96
|
-
return;
|
|
97
|
-
this._isViewportMonitorEnabled = true;
|
|
98
|
-
this._resizeObserverService
|
|
99
|
-
.observe(document.documentElement)
|
|
100
|
-
.pipe(tap((e) => {
|
|
101
|
-
const entry = e[0];
|
|
102
|
-
if (!entry)
|
|
103
|
-
return;
|
|
104
|
-
const width = entry.contentRect.width;
|
|
105
|
-
const height = entry.contentRect.height;
|
|
106
|
-
const obj = { width, height };
|
|
107
|
-
if (equal(obj, this._viewportSize$.value))
|
|
108
|
-
return;
|
|
109
|
-
document.documentElement.style.setProperty('--et-vw', `${obj.width}px`);
|
|
110
|
-
document.documentElement.style.setProperty('--et-vh', `${obj.height}px`);
|
|
111
|
-
this._viewportSize$.next(obj);
|
|
112
|
-
}), finalize(() => {
|
|
113
|
-
document.documentElement.style.removeProperty('--et-vw');
|
|
114
|
-
document.documentElement.style.removeProperty('--et-vh');
|
|
115
|
-
this._viewportSize$.next(null);
|
|
116
|
-
}), takeUntil(this._viewportMonitorStop$))
|
|
117
|
-
.subscribe();
|
|
118
|
-
const scrollbarRuler = document.createElement('div');
|
|
119
|
-
scrollbarRuler.style.width = '100px';
|
|
120
|
-
scrollbarRuler.style.height = '100px';
|
|
121
|
-
scrollbarRuler.style.overflow = 'scroll';
|
|
122
|
-
scrollbarRuler.style.position = 'absolute';
|
|
123
|
-
scrollbarRuler.style.top = '-9999px';
|
|
124
|
-
document.body.appendChild(scrollbarRuler);
|
|
125
|
-
this._resizeObserverService
|
|
126
|
-
.observe(scrollbarRuler)
|
|
127
|
-
.pipe(tap((e) => {
|
|
128
|
-
const entry = e[0];
|
|
129
|
-
if (!entry)
|
|
130
|
-
return;
|
|
131
|
-
const size = entry.contentRect.width;
|
|
132
|
-
const obj = { width: 100 - size, height: 100 - size };
|
|
133
|
-
if (equal(obj, this._scrollbarSize$.value))
|
|
134
|
-
return;
|
|
135
|
-
document.documentElement.style.setProperty('--et-sw', `${obj.width}px`);
|
|
136
|
-
document.documentElement.style.setProperty('--et-sh', `${obj.height}px`);
|
|
137
|
-
this._scrollbarSize$.next(obj);
|
|
138
|
-
}), finalize(() => {
|
|
139
|
-
document.body.removeChild(scrollbarRuler);
|
|
140
|
-
document.documentElement.style.removeProperty('--et-vw');
|
|
141
|
-
document.documentElement.style.removeProperty('--et-vh');
|
|
142
|
-
this._scrollbarSize$.next(null);
|
|
143
|
-
}), takeUntil(this._viewportMonitorStop$))
|
|
144
|
-
.subscribe();
|
|
145
|
-
}
|
|
146
|
-
unmonitorViewport() {
|
|
147
|
-
this._viewportMonitorStop$.next();
|
|
148
|
-
this._isViewportMonitorEnabled = false;
|
|
149
|
-
}
|
|
150
|
-
getBreakpointSize(type, option) {
|
|
151
|
-
const index = option === 'min' ? 0 : 1;
|
|
152
|
-
const size = this._viewportConfig.breakpoints[type][index];
|
|
153
|
-
if (size === Infinity || size === 0) {
|
|
154
|
-
return size;
|
|
155
|
-
}
|
|
156
|
-
if (option === 'min') {
|
|
157
|
-
return size;
|
|
158
|
-
}
|
|
159
|
-
// Due to scaling, the actual size of the viewport may be a decimal number.
|
|
160
|
-
// Eg. on Windows 11 with 150% scaling, the viewport size may be 1535.33px
|
|
161
|
-
// and thus not matching any of the default breakpoints.
|
|
162
|
-
return size + 0.9;
|
|
163
|
-
}
|
|
164
|
-
_observeDefaultBreakpoints() {
|
|
165
|
-
this.observe({ max: 'xs' }).subscribe(this._isXs$);
|
|
166
|
-
this.observe({ min: 'sm', max: 'sm' }).subscribe(this._isSm$);
|
|
167
|
-
this.observe({ min: 'md', max: 'md' }).subscribe(this._isMd$);
|
|
168
|
-
this.observe({ min: 'lg', max: 'lg' }).subscribe(this._isLg$);
|
|
169
|
-
this.observe({ min: 'xl', max: 'xl' }).subscribe(this._isXl$);
|
|
170
|
-
this.observe({ min: '2xl' }).subscribe(this._is2Xl$);
|
|
171
|
-
}
|
|
172
|
-
_buildMediaQuery(options) {
|
|
173
|
-
if (!options.min && !options.max) {
|
|
174
|
-
throw new Error('At least one of min or max must be defined');
|
|
175
|
-
}
|
|
176
|
-
const mediaQueryParts = [];
|
|
177
|
-
if (options.min) {
|
|
178
|
-
if (typeof options.min === 'number') {
|
|
179
|
-
mediaQueryParts.push(`(min-width: ${options.min}px)`);
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
mediaQueryParts.push(`(min-width: ${this.getBreakpointSize(options.min, 'min')}px)`);
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
if (options.min && options.max) {
|
|
186
|
-
mediaQueryParts.push('and');
|
|
187
|
-
}
|
|
188
|
-
if (options.max) {
|
|
189
|
-
if (typeof options.max === 'number') {
|
|
190
|
-
mediaQueryParts.push(`(max-width: ${options.max}px)`);
|
|
191
|
-
}
|
|
192
|
-
else {
|
|
193
|
-
mediaQueryParts.push(`(max-width: ${this.getBreakpointSize(options.max, 'max')}px)`);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
return mediaQueryParts.join(' ');
|
|
197
|
-
}
|
|
198
|
-
getCurrentViewport([isXs, isSm, isMd, isLg, isXl, is2Xl]) {
|
|
199
|
-
if (isXs) {
|
|
200
|
-
return 'xs';
|
|
201
|
-
}
|
|
202
|
-
else if (isSm) {
|
|
203
|
-
return 'sm';
|
|
204
|
-
}
|
|
205
|
-
else if (isMd) {
|
|
206
|
-
return 'md';
|
|
207
|
-
}
|
|
208
|
-
else if (isLg) {
|
|
209
|
-
return 'lg';
|
|
210
|
-
}
|
|
211
|
-
else if (isXl) {
|
|
212
|
-
return 'xl';
|
|
213
|
-
}
|
|
214
|
-
else if (is2Xl) {
|
|
215
|
-
return '2xl';
|
|
216
|
-
}
|
|
217
|
-
return 'xs';
|
|
218
|
-
}
|
|
219
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ViewportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
220
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ViewportService, providedIn: 'root' }); }
|
|
221
|
-
}
|
|
222
|
-
__decorate([
|
|
223
|
-
Memo(),
|
|
224
|
-
__metadata("design:type", Function),
|
|
225
|
-
__metadata("design:paramtypes", [String, String]),
|
|
226
|
-
__metadata("design:returntype", void 0)
|
|
227
|
-
], ViewportService.prototype, "getBreakpointSize", null);
|
|
228
|
-
__decorate([
|
|
229
|
-
Memo({
|
|
230
|
-
resolver: (v) => {
|
|
231
|
-
return `${v.min ?? ''}-${v.max ?? ''}`;
|
|
232
|
-
},
|
|
233
|
-
}),
|
|
234
|
-
__metadata("design:type", Function),
|
|
235
|
-
__metadata("design:paramtypes", [Object]),
|
|
236
|
-
__metadata("design:returntype", void 0)
|
|
237
|
-
], ViewportService.prototype, "_buildMediaQuery", null);
|
|
238
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: ViewportService, decorators: [{
|
|
239
|
-
type: Injectable,
|
|
240
|
-
args: [{
|
|
241
|
-
providedIn: 'root',
|
|
242
|
-
}]
|
|
243
|
-
}], ctorParameters: () => [], propDecorators: { getBreakpointSize: [], _buildMediaQuery: [] } });
|
|
244
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NlcnZpY2VzL3ZpZXdwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFDTCxlQUFlLEVBRWYsT0FBTyxFQUNQLGFBQWEsRUFDYixZQUFZLEVBQ1osUUFBUSxFQUNSLEdBQUcsRUFDSCxXQUFXLEVBQ1gsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDeEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBV2xFLE1BQU0sT0FBTyxlQUFlO0lBa0IxQixJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7SUFDM0IsQ0FBQztJQUVELElBQUksS0FBSztRQUNQLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRUQsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFD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SUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsS0FBSyxDQU85RDtRQUNDLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO2FBQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNoQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7YUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ2hCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksS0FBSyxFQUFFLENBQUM7WUFDakIsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOytHQTNSVSxlQUFlO21IQUFmLGVBQWUsY0FGZCxNQUFNOztBQXdNbEI7SUFEQyxJQUFJLEVBQUU7Ozs7d0RBaUJOO0FBZ0JPO0lBTFAsSUFBSSxDQUFDO1FBQ0osUUFBUSxFQUFFLENBQUMsQ0FBeUIsRUFBRSxFQUFFO1lBQ3RDLE9BQU8sR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3pDLENBQUM7S0FDRixDQUFDOzs7O3VEQTZCRDs0RkFsUVUsZUFBZTtrQkFIM0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7d0RBdU1DLGlCQUFpQixNQWdDVCxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvbGF5b3V0JztcbmltcG9ydCB7IEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGZpbmFsaXplLFxuICBtYXAsXG4gIHNoYXJlUmVwbGF5LFxuICB0YWtlVW50aWwsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBERUZBVUxUX1ZJRVdQT1JUX0NPTkZJRywgVklFV1BPUlRfQ09ORklHIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IE1lbW8gfSBmcm9tICcuLi9kZWNvcmF0b3JzL21lbW8nO1xuaW1wb3J0IHsgQnJlYWtwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGVxdWFsIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJTZXJ2aWNlIH0gZnJvbSAnLi9yZXNpemUtb2JzZXJ2ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBCdWlsZE1lZGlhUXVlcnlPcHRpb25zIH0gZnJvbSAnLi92aWV3cG9ydC50eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2l6ZSB7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xufVxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgVmlld3BvcnRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlID0gaW5qZWN0KFJlc2l6ZU9ic2VydmVyU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3ZpZXdwb3J0Q29uZmlnID0gaW5qZWN0KFZJRVdQT1JUX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KSB8fCBERUZBVUxUX1ZJRVdQT1JUX0NPTkZJRztcbiAgcHJpdmF0ZSByZWFkb25seSBfYnJlYWtwb2ludE9ic2VydmVyID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfdmlld3BvcnRNb25pdG9yU3RvcCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF9pc1ZpZXdwb3J0TW9uaXRvckVuYWJsZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9pc1hzJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtYXg6ICd4cycgfSkpO1xuICBwcml2YXRlIF9pc1NtJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtaW46ICdzbScsIG1heDogJ3NtJyB9KSk7XG4gIHByaXZhdGUgX2lzTWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdCh0aGlzLmlzTWF0Y2hlZCh7IG1pbjogJ21kJywgbWF4OiAnbWQnIH0pKTtcbiAgcHJpdmF0ZSBfaXNMZyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRoaXMuaXNNYXRjaGVkKHsgbWluOiAnbGcnLCBtYXg6ICdsZycgfSkpO1xuICBwcml2YXRlIF9pc1hsJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtaW46ICd4bCcsIG1heDogJ3hsJyB9KSk7XG4gIHByaXZhdGUgX2lzMlhsJCA9IG5ldyBCZWhhdmlvclN1YmplY3QodGhpcy5pc01hdGNoZWQoeyBtaW46ICcyeGwnIH0pKTtcblxuICBwcml2YXRlIF92aWV3cG9ydFNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTaXplIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgX3Njcm9sbGJhclNpemUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxTaXplIHwgbnVsbD4obnVsbCk7XG5cbiAgZ2V0IGlzWHMkKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1hzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBpc1hzKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1hzJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc1NtJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTbSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXNTbSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTbSQudmFsdWU7XG4gIH1cblxuICBnZXQgaXNNZCQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTWQkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IGlzTWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzTWQkLnZhbHVlO1xuICB9XG5cbiAgZ2V0IGlzTGckKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0xnJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCBpc0xnKCkge1xuICAgIHJldHVybiB0aGlzLl9pc0xnJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBpc1hsJCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNYbCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXNYbCgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNYbCQudmFsdWU7XG4gIH1cblxuICBnZXQgaXMyWGwkKCkge1xuICAgIHJldHVybiB0aGlzLl9pczJYbCQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgaXMyWGwoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzMlhsJC52YWx1ZTtcbiAgfVxuXG4gIGdldCB2aWV3cG9ydFNpemUkKCkge1xuICAgIHJldHVybiB0aGlzLl92aWV3cG9ydFNpemUkLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgZ2V0IHZpZXdwb3J0U2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdmlld3BvcnRTaXplJC52YWx1ZTtcbiAgfVxuXG4gIGdldCBzY3JvbGxiYXJTaXplJCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsYmFyU2l6ZSQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgc2Nyb2xsYmFyU2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsYmFyU2l6ZSQudmFsdWU7XG4gIH1cblxuICBjdXJyZW50Vmlld3BvcnQkID0gY29tYmluZUxhdGVzdChbdGhpcy5pc1hzJCwgdGhpcy5pc1NtJCwgdGhpcy5pc01kJCwgdGhpcy5pc0xnJCwgdGhpcy5pc1hsJCwgdGhpcy5pczJYbCRdKS5waXBlKFxuICAgIG1hcCgodmFsKSA9PiB0aGlzLmdldEN1cnJlbnRWaWV3cG9ydCh2YWwpKSxcbiAgICBkZWJvdW5jZVRpbWUoMCksXG4gICAgc2hhcmVSZXBsYXkoeyBidWZmZXJTaXplOiAxLCByZWZDb3VudDogdHJ1ZSB9KSxcbiAgKTtcblxuICBnZXQgY3VycmVudFZpZXdwb3J0KCkge1xuICAgIHJldHVybiB0aGlzLmdldEN1cnJlbnRWaWV3cG9ydChbdGhpcy5pc1hzLCB0aGlzLmlzU20sIHRoaXMuaXNNZCwgdGhpcy5pc0xnLCB0aGlzLmlzWGwsIHRoaXMuaXMyWGxdKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX29ic2VydmVEZWZhdWx0QnJlYWtwb2ludHMoKTtcbiAgfVxuXG4gIG9ic2VydmUob3B0aW9uczogeyBtaW4/OiBudW1iZXIgfCBCcmVha3BvaW50OyBtYXg/OiBudW1iZXIgfCBCcmVha3BvaW50IH0pOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gdGhpcy5fYnVpbGRNZWRpYVF1ZXJ5KG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5vYnNlcnZlKG1lZGlhUXVlcnkpLnBpcGUoXG4gICAgICBtYXAoKHgpID0+IHgubWF0Y2hlcyksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pLFxuICAgICk7XG4gIH1cblxuICBpc01hdGNoZWQob3B0aW9uczogeyBtaW4/OiBudW1iZXIgfCBCcmVha3BvaW50OyBtYXg/OiBudW1iZXIgfCBCcmVha3BvaW50IH0pOiBib29sZWFuIHtcbiAgICBjb25zdCBtZWRpYVF1ZXJ5ID0gdGhpcy5fYnVpbGRNZWRpYVF1ZXJ5KG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQobWVkaWFRdWVyeSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBzaXplIENTUyB2YXJpYWJsZXMgdG8gdGhlIGRvY3VtZW50RWxlbWVudCBpbiBwaXhlbHMuXG4gICAqIC0gYC0tZXQtdndgOiB2aWV3cG9ydCB3aWR0aCBleGNsdWRpbmcgc2Nyb2xsYmFyIHdpZHRoXG4gICAqIC0gYC0tZXQtdmhgOiB2aWV3cG9ydCBoZWlnaHQgZXhjbHVkaW5nIHNjcm9sbGJhciBoZWlnaHRcbiAgICogLSBgLS1ldC1zd2A6IHNjcm9sbGJhciB3aWR0aFxuICAgKiAtIGAtLWV0LXNoYDogc2Nyb2xsYmFyIGhlaWdodFxuICAgKi9cbiAgbW9uaXRvclZpZXdwb3J0KCkge1xuICAgIGlmICh0aGlzLl9pc1ZpZXdwb3J0TW9uaXRvckVuYWJsZWQpIHJldHVybjtcblxuICAgIHRoaXMuX2lzVmlld3BvcnRNb25pdG9yRW5hYmxlZCA9IHRydWU7XG5cbiAgICB0aGlzLl9yZXNpemVPYnNlcnZlclNlcnZpY2VcbiAgICAgIC5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGUpID0+IHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICAgICAgICBpZiAoIWVudHJ5KSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCB3aWR0aCA9IGVudHJ5LmNvbnRlbnRSZWN0LndpZHRoO1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGVudHJ5LmNvbnRlbnRSZWN0LmhlaWdodDtcblxuICAgICAgICAgIGNvbnN0IG9iaiA9IHsgd2lkdGgsIGhlaWdodCB9O1xuXG4gICAgICAgICAgaWYgKGVxdWFsKG9iaiwgdGhpcy5fdmlld3BvcnRTaXplJC52YWx1ZSkpIHJldHVybjtcblxuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ldC12dycsIGAke29iai53aWR0aH1weGApO1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1ldC12aCcsIGAke29iai5oZWlnaHR9cHhgKTtcblxuICAgICAgICAgIHRoaXMuX3ZpZXdwb3J0U2l6ZSQubmV4dChvYmopO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1ldC12dycpO1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1ldC12aCcpO1xuXG4gICAgICAgICAgdGhpcy5fdmlld3BvcnRTaXplJC5uZXh0KG51bGwpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX3ZpZXdwb3J0TW9uaXRvclN0b3AkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgIGNvbnN0IHNjcm9sbGJhclJ1bGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgc2Nyb2xsYmFyUnVsZXIuc3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIHNjcm9sbGJhclJ1bGVyLnN0eWxlLmhlaWdodCA9ICcxMDBweCc7XG4gICAgc2Nyb2xsYmFyUnVsZXIuc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBzY3JvbGxiYXJSdWxlci5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gICAgc2Nyb2xsYmFyUnVsZXIuc3R5bGUudG9wID0gJy05OTk5cHgnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc2Nyb2xsYmFyUnVsZXIpO1xuXG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXJTZXJ2aWNlXG4gICAgICAub2JzZXJ2ZShzY3JvbGxiYXJSdWxlcilcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKGUpID0+IHtcbiAgICAgICAgICBjb25zdCBlbnRyeSA9IGVbMF07XG5cbiAgICAgICAgICBpZiAoIWVudHJ5KSByZXR1cm47XG5cbiAgICAgICAgICBjb25zdCBzaXplID0gZW50cnkuY29udGVudFJlY3Qud2lkdGg7XG5cbiAgICAgICAgICBjb25zdCBvYmogPSB7IHdpZHRoOiAxMDAgLSBzaXplLCBoZWlnaHQ6IDEwMCAtIHNpemUgfTtcblxuICAgICAgICAgIGlmIChlcXVhbChvYmosIHRoaXMuX3Njcm9sbGJhclNpemUkLnZhbHVlKSkgcmV0dXJuO1xuXG4gICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWV0LXN3JywgYCR7b2JqLndpZHRofXB4YCk7XG4gICAgICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KCctLWV0LXNoJywgYCR7b2JqLmhlaWdodH1weGApO1xuXG4gICAgICAgICAgdGhpcy5fc2Nyb2xsYmFyU2l6ZSQubmV4dChvYmopO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoc2Nyb2xsYmFyUnVsZXIpO1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1ldC12dycpO1xuICAgICAgICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1ldC12aCcpO1xuXG4gICAgICAgICAgdGhpcy5fc2Nyb2xsYmFyU2l6ZSQubmV4dChudWxsKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl92aWV3cG9ydE1vbml0b3JTdG9wJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICB1bm1vbml0b3JWaWV3cG9ydCgpIHtcbiAgICB0aGlzLl92aWV3cG9ydE1vbml0b3JTdG9wJC5uZXh0KCk7XG4gICAgdGhpcy5faXNWaWV3cG9ydE1vbml0b3JFbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICBATWVtbygpXG4gIGdldEJyZWFrcG9pbnRTaXplKHR5cGU6IEJyZWFrcG9pbnQsIG9wdGlvbjogJ21pbicgfCAnbWF4Jykge1xuICAgIGNvbnN0IGluZGV4ID0gb3B0aW9uID09PSAnbWluJyA/IDAgOiAxO1xuICAgIGNvbnN0IHNpemUgPSB0aGlzLl92aWV3cG9ydENvbmZpZy5icmVha3BvaW50c1t0eXBlXVtpbmRleF07XG5cbiAgICBpZiAoc2l6ZSA9PT0gSW5maW5pdHkgfHwgc2l6ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHNpemU7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbiA9PT0gJ21pbicpIHtcbiAgICAgIHJldHVybiBzaXplO1xuICAgIH1cblxuICAgIC8vIER1ZSB0byBzY2FsaW5nLCB0aGUgYWN0dWFsIHNpemUgb2YgdGhlIHZpZXdwb3J0IG1heSBiZSBhIGRlY2ltYWwgbnVtYmVyLlxuICAgIC8vIEVnLiBvbiBXaW5kb3dzIDExIHdpdGggMTUwJSBzY2FsaW5nLCB0aGUgdmlld3BvcnQgc2l6ZSBtYXkgYmUgMTUzNS4zM3B4XG4gICAgLy8gYW5kIHRodXMgbm90IG1hdGNoaW5nIGFueSBvZiB0aGUgZGVmYXVsdCBicmVha3BvaW50cy5cbiAgICByZXR1cm4gc2l6ZSArIDAuOTtcbiAgfVxuXG4gIHByaXZhdGUgX29ic2VydmVEZWZhdWx0QnJlYWtwb2ludHMoKSB7XG4gICAgdGhpcy5vYnNlcnZlKHsgbWF4OiAneHMnIH0pLnN1YnNjcmliZSh0aGlzLl9pc1hzJCk7XG4gICAgdGhpcy5vYnNlcnZlKHsgbWluOiAnc20nLCBtYXg6ICdzbScgfSkuc3Vic2NyaWJlKHRoaXMuX2lzU20kKTtcbiAgICB0aGlzLm9ic2VydmUoeyBtaW46ICdtZCcsIG1heDogJ21kJyB9KS5zdWJzY3JpYmUodGhpcy5faXNNZCQpO1xuICAgIHRoaXMub2JzZXJ2ZSh7IG1pbjogJ2xnJywgbWF4OiAnbGcnIH0pLnN1YnNjcmliZSh0aGlzLl9pc0xnJCk7XG4gICAgdGhpcy5vYnNlcnZlKHsgbWluOiAneGwnLCBtYXg6ICd4bCcgfSkuc3Vic2NyaWJlKHRoaXMuX2lzWGwkKTtcbiAgICB0aGlzLm9ic2VydmUoeyBtaW46ICcyeGwnIH0pLnN1YnNjcmliZSh0aGlzLl9pczJYbCQpO1xuICB9XG5cbiAgQE1lbW8oe1xuICAgIHJlc29sdmVyOiAodjogQnVpbGRNZWRpYVF1ZXJ5T3B0aW9ucykgPT4ge1xuICAgICAgcmV0dXJuIGAke3YubWluID8/ICcnfS0ke3YubWF4ID8/ICcnfWA7XG4gICAgfSxcbiAgfSlcbiAgcHJpdmF0ZSBfYnVpbGRNZWRpYVF1ZXJ5KG9wdGlvbnM6IEJ1aWxkTWVkaWFRdWVyeU9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMubWluICYmICFvcHRpb25zLm1heCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBdCBsZWFzdCBvbmUgb2YgbWluIG9yIG1heCBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZWRpYVF1ZXJ5UGFydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpZiAob3B0aW9ucy5taW4pIHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5taW4gPT09ICdudW1iZXInKSB7XG4gICAgICAgIG1lZGlhUXVlcnlQYXJ0cy5wdXNoKGAobWluLXdpZHRoOiAke29wdGlvbnMubWlufXB4KWApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWVkaWFRdWVyeVBhcnRzLnB1c2goYChtaW4td2lkdGg6ICR7dGhpcy5nZXRCcmVha3BvaW50U2l6ZShvcHRpb25zLm1pbiwgJ21pbicpfXB4KWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1pbiAmJiBvcHRpb25zLm1heCkge1xuICAgICAgbWVkaWFRdWVyeVBhcnRzLnB1c2goJ2FuZCcpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1heCkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLm1heCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbWVkaWFRdWVyeVBhcnRzLnB1c2goYChtYXgtd2lkdGg6ICR7b3B0aW9ucy5tYXh9cHgpYCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtZWRpYVF1ZXJ5UGFydHMucHVzaChgKG1heC13aWR0aDogJHt0aGlzLmdldEJyZWFrcG9pbnRTaXplKG9wdGlvbnMubWF4LCAnbWF4Jyl9cHgpYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lZGlhUXVlcnlQYXJ0cy5qb2luKCcgJyk7XG4gIH1cblxuICBwcml2YXRlIGdldEN1cnJlbnRWaWV3cG9ydChbaXNYcywgaXNTbSwgaXNNZCwgaXNMZywgaXNYbCwgaXMyWGxdOiBbXG4gICAgYm9vbGVhbixcbiAgICBib29sZWFuLFxuICAgIGJvb2xlYW4sXG4gICAgYm9vbGVhbixcbiAgICBib29sZWFuLFxuICAgIGJvb2xlYW4sXG4gIF0pOiBCcmVha3BvaW50IHtcbiAgICBpZiAoaXNYcykge1xuICAgICAgcmV0dXJuICd4cyc7XG4gICAgfSBlbHNlIGlmIChpc1NtKSB7XG4gICAgICByZXR1cm4gJ3NtJztcbiAgICB9IGVsc2UgaWYgKGlzTWQpIHtcbiAgICAgIHJldHVybiAnbWQnO1xuICAgIH0gZWxzZSBpZiAoaXNMZykge1xuICAgICAgcmV0dXJuICdsZyc7XG4gICAgfSBlbHNlIGlmIChpc1hsKSB7XG4gICAgICByZXR1cm4gJ3hsJztcbiAgICB9IGVsc2UgaWYgKGlzMlhsKSB7XG4gICAgICByZXR1cm4gJzJ4bCc7XG4gICAgfVxuXG4gICAgcmV0dXJuICd4cyc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9zZXJ2aWNlcy92aWV3cG9ydC50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludCB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgQnVpbGRNZWRpYVF1ZXJ5T3B0aW9ucyA9IHtcbiAgbWluPzogbnVtYmVyIHwgQnJlYWtwb2ludDtcbiAgbWF4PzogbnVtYmVyIHwgQnJlYWtwb2ludDtcbn07XG4iXX0=
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
var _a;
|
|
2
|
-
import { QueryList } from '@angular/core';
|
|
3
|
-
export class TypedQueryList extends QueryList {
|
|
4
|
-
constructor() {
|
|
5
|
-
super(...arguments);
|
|
6
|
-
this[_a] = () => {
|
|
7
|
-
return super[Symbol.iterator]();
|
|
8
|
-
};
|
|
9
|
-
}
|
|
10
|
-
static { _a = Symbol.iterator; }
|
|
11
|
-
get changes() {
|
|
12
|
-
return super.changes;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3R5cGVzL2FuZ3VsYXIudHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVEsTUFBTSxlQUFlLENBQUM7QUFzQmhELE1BQU0sT0FBTyxjQUFrQixTQUFRLFNBQVk7SUFBbkQ7O1FBQ1csUUFBaUIsR0FBc0IsR0FBRyxFQUFFO1lBQ25ELE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBaUIsQ0FBQztRQUNqRCxDQUFDLENBQUM7SUFLSixDQUFDO2tCQVBXLE1BQU0sQ0FBQyxRQUFRO0lBSXpCLElBQWEsT0FBTztRQUNsQixPQUFPLEtBQUssQ0FBQyxPQUF3QyxDQUFDO0lBQ3hELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFF1ZXJ5TGlzdCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgdHlwZSBOZ0NsYXNzVHlwZSA9XG4gIHwgc3RyaW5nXG4gIHwgc3RyaW5nW11cbiAgfCBTZXQ8c3RyaW5nPlxuICB8IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBba2xhc3M6IHN0cmluZ106IGFueTtcbiAgICB9XG4gIHwgbnVsbFxuICB8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgSG9zdERpcmVjdGl2ZSA9XG4gIHwgVHlwZTx1bmtub3duPlxuICB8IHtcbiAgICAgIGRpcmVjdGl2ZTogVHlwZTx1bmtub3duPjtcbiAgICAgIGlucHV0cz86IHN0cmluZ1tdO1xuICAgICAgb3V0cHV0cz86IHN0cmluZ1tdO1xuICAgIH07XG5cbmV4cG9ydCBjbGFzcyBUeXBlZFF1ZXJ5TGlzdDxUPiBleHRlbmRzIFF1ZXJ5TGlzdDxUPiB7XG4gIG92ZXJyaWRlIFtTeW1ib2wuaXRlcmF0b3JdOiAoKSA9PiBJdGVyYXRvcjxUPiA9ICgpID0+IHtcbiAgICByZXR1cm4gc3VwZXJbU3ltYm9sLml0ZXJhdG9yXSgpIGFzIEl0ZXJhdG9yPFQ+O1xuICB9O1xuXG4gIG92ZXJyaWRlIGdldCBjaGFuZ2VzKCk6IE9ic2VydmFibGU8VHlwZWRRdWVyeUxpc3Q8VD4+IHtcbiAgICByZXR1cm4gc3VwZXIuY2hhbmdlcyBhcyBPYnNlcnZhYmxlPFR5cGVkUXVlcnlMaXN0PFQ+PjtcbiAgfVxufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi50eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3R5cGVzL2kxOG4udHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVHJhbnNsYXRhYmxlIHtcbiAgaTE4bjogc3RyaW5nO1xuICB0ZXh0OiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * from './angular.types';
|
|
2
|
-
export * from './i18n.types';
|
|
3
|
-
export * from './value.types';
|
|
4
|
-
export * from './viewport.types';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90eXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsa0JBQWtCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FuZ3VsYXIudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9pMThuLnR5cGVzJztcbmV4cG9ydCAqIGZyb20gJy4vdmFsdWUudHlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi92aWV3cG9ydC50eXBlcyc7XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWUudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90eXBlcy92YWx1ZS50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgUHJpbWl0aXZlID0gc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQgfCBzeW1ib2wgfCBiaWdpbnQ7XG5leHBvcnQgdHlwZSBSZWZlcmVuY2UgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IEFycmF5PHVua25vd24+O1xuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi90eXBlcy92aWV3cG9ydC50eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgVmVjMiA9IFtudW1iZXIsIG51bWJlcl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVmlld3BvcnRDb25maWcge1xuICBicmVha3BvaW50czoge1xuICAgIHhzOiBWZWMyO1xuICAgIHNtOiBWZWMyO1xuICAgIG1kOiBWZWMyO1xuICAgIGxnOiBWZWMyO1xuICAgIHhsOiBWZWMyO1xuICAgICcyeGwnOiBWZWMyO1xuICB9O1xufVxuXG5leHBvcnQgdHlwZSBCcmVha3BvaW50ID0ga2V5b2YgVmlld3BvcnRDb25maWdbJ2JyZWFrcG9pbnRzJ107XG4iXX0=
|