@ngxs/store 18.1.5-dev.master-cd94934 → 18.1.5-dev.master-8fe2074
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.
|
@@ -31,20 +31,17 @@ function cloneDefaults(defaults) {
|
|
|
31
31
|
* The `StateFactory` class adds root and feature states to the graph.
|
|
32
32
|
* This extracts state names from state classes, checks if they already
|
|
33
33
|
* exist in the global graph, throws errors if their names are invalid, etc.
|
|
34
|
-
* See its constructor, state factories inject state factories that are
|
|
35
|
-
* parent-level providers. This is required to get feature states from the
|
|
36
|
-
* injector on the same level.
|
|
37
34
|
*
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
*
|
|
35
|
+
* Root and feature initializers call `addAndReturnDefaults()` to add those states
|
|
36
|
+
* to the global graph. Since `addAndReturnDefaults` runs within the injection
|
|
37
|
+
* context (which might be the root injector or a feature injector), we can
|
|
38
|
+
* retrieve an instance of the state class using `inject(StateClass)`.
|
|
41
39
|
* @ignore
|
|
42
40
|
*/
|
|
43
41
|
export class StateFactory {
|
|
44
42
|
constructor() {
|
|
45
43
|
this._injector = inject(Injector);
|
|
46
44
|
this._config = inject(NgxsConfig);
|
|
47
|
-
this._parentFactory = inject(StateFactory, { optional: true, skipSelf: true });
|
|
48
45
|
this._stateContextFactory = inject(StateContextFactory);
|
|
49
46
|
this._actions = inject(InternalActions);
|
|
50
47
|
this._actionResults = inject(InternalDispatchedActionResults);
|
|
@@ -61,47 +58,36 @@ export class StateFactory {
|
|
|
61
58
|
const stateFactory = this;
|
|
62
59
|
const propGetter = stateFactory._propGetter;
|
|
63
60
|
function resolveGetter(key) {
|
|
64
|
-
const path = stateFactory.
|
|
61
|
+
const path = stateFactory._statePaths[key];
|
|
65
62
|
return path ? propGetter(path.split('.')) : null;
|
|
66
63
|
}
|
|
67
|
-
const context =
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (getter) {
|
|
75
|
-
return getter;
|
|
76
|
-
}
|
|
77
|
-
return (...args) => {
|
|
78
|
-
// Late loaded getter
|
|
79
|
-
if (!getter) {
|
|
80
|
-
getter = /*@__INLINE__*/ resolveGetter(key);
|
|
81
|
-
}
|
|
82
|
-
return getter ? getter(...args) : undefined;
|
|
83
|
-
};
|
|
84
|
-
},
|
|
85
|
-
getSelectorOptions(localOptions) {
|
|
86
|
-
const globalSelectorOptions = stateFactory._config.selectorOptions;
|
|
87
|
-
return {
|
|
88
|
-
...globalSelectorOptions,
|
|
89
|
-
...(localOptions || {})
|
|
90
|
-
};
|
|
64
|
+
const context = {
|
|
65
|
+
getStateGetter(key) {
|
|
66
|
+
// Use `@__INLINE__` annotation to forcely inline `resolveGetter`.
|
|
67
|
+
// This is a Terser annotation, which will function only in the production mode.
|
|
68
|
+
let getter = /*@__INLINE__*/ resolveGetter(key);
|
|
69
|
+
if (getter) {
|
|
70
|
+
return getter;
|
|
91
71
|
}
|
|
92
|
-
|
|
72
|
+
return (...args) => {
|
|
73
|
+
// Late loaded getter
|
|
74
|
+
if (!getter) {
|
|
75
|
+
getter = /*@__INLINE__*/ resolveGetter(key);
|
|
76
|
+
}
|
|
77
|
+
return getter ? getter(...args) : undefined;
|
|
78
|
+
};
|
|
79
|
+
},
|
|
80
|
+
getSelectorOptions(localOptions) {
|
|
81
|
+
const globalSelectorOptions = stateFactory._config.selectorOptions;
|
|
82
|
+
return {
|
|
83
|
+
...globalSelectorOptions,
|
|
84
|
+
...(localOptions || {})
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
};
|
|
93
88
|
return context;
|
|
94
89
|
});
|
|
95
90
|
}
|
|
96
|
-
get states() {
|
|
97
|
-
return this._parentFactory ? this._parentFactory.states : this._states;
|
|
98
|
-
}
|
|
99
|
-
get statesByName() {
|
|
100
|
-
return this._parentFactory ? this._parentFactory.statesByName : this._statesByName;
|
|
101
|
-
}
|
|
102
|
-
get statePaths() {
|
|
103
|
-
return this._parentFactory ? this._parentFactory.statePaths : this._statePaths;
|
|
104
|
-
}
|
|
105
91
|
ngOnDestroy() {
|
|
106
92
|
this._actionsSubscription?.unsubscribe();
|
|
107
93
|
}
|
|
@@ -137,7 +123,7 @@ export class StateFactory {
|
|
|
137
123
|
path,
|
|
138
124
|
isInitialised: false,
|
|
139
125
|
actions: meta.actions,
|
|
140
|
-
instance:
|
|
126
|
+
instance: inject(stateClass),
|
|
141
127
|
defaults: cloneDefaults(meta.defaults)
|
|
142
128
|
};
|
|
143
129
|
// ensure our store hasn't already been added
|
|
@@ -146,7 +132,7 @@ export class StateFactory {
|
|
|
146
132
|
if (!this.hasBeenMountedAndBootstrapped(name, path)) {
|
|
147
133
|
bootstrappedStores.push(stateMap);
|
|
148
134
|
}
|
|
149
|
-
this.
|
|
135
|
+
this._states.push(stateMap);
|
|
150
136
|
this.hydrateActionMetasMap(stateMap);
|
|
151
137
|
}
|
|
152
138
|
return bootstrappedStores;
|
|
@@ -161,12 +147,6 @@ export class StateFactory {
|
|
|
161
147
|
return { defaults, states: mappedStores };
|
|
162
148
|
}
|
|
163
149
|
connectActionHandlers() {
|
|
164
|
-
// Note: We have to connect actions only once when the `StateFactory`
|
|
165
|
-
// is being created for the first time. This checks if we're in
|
|
166
|
-
// a child state factory and the parent state factory already exists.
|
|
167
|
-
if (this._parentFactory || this._actionsSubscription !== null) {
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
150
|
this._actionsSubscription = this._actions
|
|
171
151
|
.pipe(filter((ctx) => ctx.status === "DISPATCHED" /* ActionStatus.Dispatched */), mergeMap(ctx => {
|
|
172
152
|
const action = ctx.action;
|
|
@@ -222,7 +202,7 @@ export class StateFactory {
|
|
|
222
202
|
}
|
|
223
203
|
addToStatesMap(stateClasses) {
|
|
224
204
|
const newStates = [];
|
|
225
|
-
const statesMap = this.
|
|
205
|
+
const statesMap = this._statesByName;
|
|
226
206
|
for (const stateClass of stateClasses) {
|
|
227
207
|
const stateName = ɵgetStoreMetadata(stateClass).name;
|
|
228
208
|
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
@@ -237,7 +217,7 @@ export class StateFactory {
|
|
|
237
217
|
return { newStates };
|
|
238
218
|
}
|
|
239
219
|
addRuntimeInfoToMeta(meta, path) {
|
|
240
|
-
this.
|
|
220
|
+
this._statePaths[meta.name] = path;
|
|
241
221
|
// TODO: versions after v3 - we plan to get rid of the `path` property because it is non-deterministic
|
|
242
222
|
// we can do this when we get rid of the incorrectly exposed getStoreMetadata
|
|
243
223
|
// We will need to come up with an alternative to what was exposed in v3 because this is used by many plugins
|
|
@@ -247,7 +227,7 @@ export class StateFactory {
|
|
|
247
227
|
const valueIsBootstrappedInInitialState = getValue(this._initialState, path) !== undefined;
|
|
248
228
|
// This checks whether a state has been already added to the global graph and
|
|
249
229
|
// its lifecycle is in 'bootstrapped' state.
|
|
250
|
-
return this.
|
|
230
|
+
return this._statesByName[name] && valueIsBootstrappedInInitialState;
|
|
251
231
|
}
|
|
252
232
|
hydrateActionMetasMap({ path, actions, instance }) {
|
|
253
233
|
const { dispatched$ } = this._actions;
|
|
@@ -318,13 +298,14 @@ export class StateFactory {
|
|
|
318
298
|
}
|
|
319
299
|
}
|
|
320
300
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
321
|
-
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory }); }
|
|
301
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, providedIn: 'root' }); }
|
|
322
302
|
}
|
|
323
303
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, decorators: [{
|
|
324
|
-
type: Injectable
|
|
304
|
+
type: Injectable,
|
|
305
|
+
args: [{ providedIn: 'root' }]
|
|
325
306
|
}] });
|
|
326
307
|
// This is used to replace `setState` and `patchState` once the action
|
|
327
308
|
// handler has been unsubscribed or completed, to prevent writing
|
|
328
309
|
// to the state context.
|
|
329
310
|
function noop() { }
|
|
330
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3NyYy9pbnRlcm5hbC9zdGF0ZS1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFhLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBR1QsaUJBQWlCLEVBRWpCLG9CQUFvQixFQUdyQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEYsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osWUFBWSxFQUNaLEVBQUUsRUFFRixVQUFVLEVBQ1YsVUFBVSxFQUNWLGNBQWMsRUFDZCxNQUFNLEVBQ04sR0FBRyxFQUNILFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUVULE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGtCQUFrQixFQUVsQixXQUFXLEVBQ1gsWUFBWSxFQUlaLGVBQWUsRUFDaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUErQixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQztBQUMzRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFFNUQsU0FBUyxhQUFhLENBQUMsUUFBYTtJQUNsQyxJQUFJLEtBQUssR0FBRyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztJQUVuRCxJQUFJLFFBQVEsRUFBRSxDQUFDO1FBQ2IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7WUFDNUIsS0FBSyxHQUFHLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUMzQixDQUFDO2FBQU0sSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4QyxLQUFLLEdBQUcsRUFBRSxHQUFHLFFBQVEsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBRUgsTUFBTSxPQUFPLFlBQVk7SUFEekI7UUFFbUIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM3QixZQUFPLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzdCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDMUUseUJBQW9CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDbkQsYUFBUSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUNuQyxtQkFBYyxHQUFHLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3pELGtCQUFhLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDakUsb0JBQWUsR0FBRyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM3QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU1Qyx5QkFBb0IsR0FBd0IsSUFBSSxDQUFDO1FBRWpELCtCQUEwQixHQUE4QixJQUFLLENBQUM7UUFFOUQsWUFBTyxHQUFrQixFQUFFLENBQUM7UUFLNUIsa0JBQWEsR0FBaUIsRUFBRSxDQUFDO1FBS2pDLGdCQUFXLEdBQTJCLEVBQUUsQ0FBQztRQUtqRCw4QkFBeUIsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3hDLDREQUE0RDtZQUM1RCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDMUIsTUFBTSxVQUFVLEdBQUcsWUFBWSxDQUFDLFdBQVcsQ0FBQztZQUU1QyxTQUFTLGFBQWEsQ0FBQyxHQUFXO2dCQUNoQyxNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMxQyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25ELENBQUM7WUFFRCxNQUFNLE9BQU8sR0FBNEIsSUFBSSxDQUFDLGNBQWM7Z0JBQzFELENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHlCQUF5QixFQUFFO2dCQUNqRCxDQUFDLENBQUM7b0JBQ0UsY0FBYyxDQUFDLEdBQVc7d0JBQ3hCLGtFQUFrRTt3QkFDbEUsZ0ZBQWdGO3dCQUNoRixJQUFJLE1BQU0sR0FBRyxlQUFlLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3dCQUNoRCxJQUFJLE1BQU0sRUFBRSxDQUFDOzRCQUNYLE9BQU8sTUFBTSxDQUFDO3dCQUNoQixDQUFDO3dCQUNELE9BQU8sQ0FBQyxHQUFHLElBQUksRUFBRSxFQUFFOzRCQUNqQixxQkFBcUI7NEJBQ3JCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQ0FDWixNQUFNLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQzs0QkFDOUMsQ0FBQzs0QkFDRCxPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQzt3QkFDOUMsQ0FBQyxDQUFDO29CQUNKLENBQUM7b0JBQ0Qsa0JBQWtCLENBQUMsWUFBcUM7d0JBQ3RELE1BQU0scUJBQXFCLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUM7d0JBQ25FLE9BQU87NEJBQ0wsR0FBRyxxQkFBcUI7NEJBQ3hCLEdBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO3lCQUN4QixDQUFDO29CQUNKLENBQUM7aUJBQ0YsQ0FBQztZQUNOLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO0tBNlFKO0lBaFVDLElBQUksTUFBTTtRQUNSLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDekUsQ0FBQztJQUdELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDckYsQ0FBQztJQUdELElBQVksVUFBVTtRQUNwQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQ2pGLENBQUM7SUF5Q0QsV0FBVztRQUNULElBQUksQ0FBQyxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxHQUFHLENBQUMsWUFBbUM7UUFDckMsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxFQUFFLENBQUM7WUFDbEQsd0JBQXdCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUVELE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTTtZQUFFLE9BQU8sRUFBRSxDQUFDO1FBRWpDLE1BQU0sVUFBVSxHQUFrQixVQUFVLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDeEQsTUFBTSxZQUFZLEdBQWEsZUFBZSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sS0FBSyxHQUEyQixrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyRSxNQUFNLFNBQVMsR0FBd0MsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlFLE1BQU0sa0JBQWtCLEdBQWtCLEVBQUUsQ0FBQztRQUU3QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2hDLE1BQU0sVUFBVSxHQUF3QixTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDeEQsTUFBTSxJQUFJLEdBQVcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pDLE1BQU0sSUFBSSxHQUFtQixVQUFVLENBQUMsU0FBUyxDQUFFLENBQUM7WUFFcEQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztZQUV0Qyx1RUFBdUU7WUFDdkUsMkVBQTJFO1lBQzNFLDJFQUEyRTtZQUMzRSwyREFBMkQ7WUFDM0QsSUFBSSxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxFQUFFLENBQUM7Z0JBQ2xELDRCQUE0QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFFRCxNQUFNLFFBQVEsR0FBZ0I7Z0JBQzVCLElBQUk7Z0JBQ0osSUFBSTtnQkFDSixhQUFhLEVBQUUsS0FBSztnQkFDcEIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO2dCQUNyQixRQUFRLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO2dCQUN4QyxRQUFRLEVBQUUsYUFBYSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7YUFDdkMsQ0FBQztZQUVGLDZDQUE2QztZQUM3Qyx5Q0FBeUM7WUFDekMsOEJBQThCO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3BELGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNwQyxDQUFDO1lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDM0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNILG9CQUFvQixDQUFDLFlBQW1DO1FBQ3RELE1BQU0sT0FBTyxHQUEwQixZQUFZLElBQUksRUFBRSxDQUFDO1FBRTFELE1BQU0sWUFBWSxHQUFrQixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQ2xDLENBQUMsTUFBVyxFQUFFLFdBQXdCLEVBQUUsRUFBRSxDQUN4QyxRQUFRLENBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUMxRCxFQUFFLENBQ0gsQ0FBQztRQUNGLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIscUVBQXFFO1FBQ3JFLHFFQUFxRTtRQUNyRSwyRUFBMkU7UUFDM0UsSUFBSSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsS0FBSyxJQUFJLEVBQUUsQ0FBQztZQUM5RCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUTthQUN0QyxJQUFJLENBQ0gsTUFBTSxDQUFDLENBQUMsR0FBa0IsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sK0NBQTRCLENBQUMsRUFDdEUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2IsTUFBTSxNQUFNLEdBQVEsR0FBRyxDQUFDLE1BQU0sQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUNwQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLDRDQUF5QixFQUFFLENBQUEsQ0FBQyxFQUNyRSxjQUFjLENBQWdCLEVBQUUsTUFBTSxFQUFFLE1BQU0sd0NBQXVCLEVBQUUsQ0FBQyxFQUN4RSxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pCLE1BQU0seUJBQXlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsMEJBQTBCO29CQUNoRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pELE1BQU0sZUFBZSxHQUFHLHVCQUF1QixDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsQ0FDMUQseUJBQXlCLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQ3pELENBQUM7Z0JBQ0YsT0FBTyxFQUFFLENBQWdCO29CQUN2QixNQUFNO29CQUNOLE1BQU0sc0NBQXNCO29CQUM1QixLQUFLLEVBQUUsZUFBZTtpQkFDdkIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNIO2FBQ0EsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxhQUFhLENBQUMsTUFBVztRQUMvQixNQUFNLElBQUksR0FBRyx5QkFBeUIsQ0FBQyxNQUFNLENBQUUsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBMEIsRUFBRSxDQUFDO1FBRTFDLDhFQUE4RTtRQUM5RSw2RUFBNkU7UUFDN0UsSUFBSSxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFFakMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdEQsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixLQUFLLE1BQU0sYUFBYSxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUMzQyxJQUFJLE1BQU0sQ0FBQztnQkFFWCxJQUFJLENBQUM7b0JBQ0gsTUFBTSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDakMsQ0FBQztnQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUNYLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLENBQUM7Z0JBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFFckIsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLDJCQUEyQjtRQUMzQixJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1lBQzNFLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDcEYsK0VBQStFO1lBQy9FLDJGQUEyRjtZQUMzRixzRUFBc0U7WUFDdEUsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDOUIsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7SUFFTyxjQUFjLENBQUMsWUFBbUM7UUFHeEQsTUFBTSxTQUFTLEdBQTBCLEVBQUUsQ0FBQztRQUM1QyxNQUFNLFNBQVMsR0FBaUIsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUVsRCxLQUFLLE1BQU0sVUFBVSxJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ3RDLE1BQU0sU0FBUyxHQUFHLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUssQ0FBQztZQUN0RCxJQUFJLE9BQU8sU0FBUyxLQUFLLFdBQVcsSUFBSSxTQUFTLEVBQUUsQ0FBQztnQkFDbEQsdUJBQXVCLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBQ0QsTUFBTSxjQUFjLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDN0MsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDbkIsU0FBUyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDM0IsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUNwQyxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sb0JBQW9CLENBQUMsSUFBb0IsRUFBRSxJQUFZO1FBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNuQyxzR0FBc0c7UUFDdEcsNkVBQTZFO1FBQzdFLDZHQUE2RztRQUM3RyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRU8sNkJBQTZCLENBQUMsSUFBWSxFQUFFLElBQVk7UUFDOUQsTUFBTSxpQ0FBaUMsR0FDckMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDO1FBQ25ELDZFQUE2RTtRQUM3RSw0Q0FBNEM7UUFDNUMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLGlDQUFpQyxDQUFDO0lBQ3RFLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFlO1FBQ3BFLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3RDLEtBQUssTUFBTSxVQUFVLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzlDLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQzFELE1BQU0sVUFBVSxHQUFHLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO2dCQUUxRCxPQUFPLENBQUMsTUFBVyxFQUFFLEVBQUU7b0JBQ3JCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFFeEUsSUFBSSxNQUFNLEdBQUcsUUFBUSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUM7b0JBRTNELHlEQUF5RDtvQkFDekQsaUZBQWlGO29CQUNqRixnRkFBZ0Y7b0JBQ2hGLG1GQUFtRjtvQkFDbkYsb0ZBQW9GO29CQUNwRixZQUFZO29CQUNaLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7d0JBQ3ZCLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7b0JBQ3hCLENBQUM7b0JBRUQsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQzt3QkFDekIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQ2xCLFFBQVEsQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFOzRCQUN0QixJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dDQUN0QixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDckIsQ0FBQztpQ0FBTSxJQUFJLFlBQVksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dDQUMvQixPQUFPLEtBQUssQ0FBQzs0QkFDZixDQUFDO2lDQUFNLENBQUM7Z0NBQ04sT0FBTyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQ25CLENBQUM7d0JBQ0gsQ0FBQyxDQUFDO3dCQUNGLGdFQUFnRTt3QkFDaEUsNERBQTREO3dCQUM1RCxpRUFBaUU7d0JBQ2pFLDJEQUEyRDt3QkFDM0QsdUVBQXVFO3dCQUN2RSxnREFBZ0Q7d0JBQ2hELHVFQUF1RTt3QkFDdkUsdUVBQXVFO3dCQUN2RSxjQUFjLENBQUMsU0FBUyxDQUFDLENBQzFCLENBQUM7d0JBRUYsSUFBSSxVQUFVLEVBQUUsQ0FBQzs0QkFDZixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7NEJBQy9ELE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO3dCQUM3QyxDQUFDO3dCQUVELE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSTt3QkFDbEIsd0VBQXdFO3dCQUN4RSx5RUFBeUU7d0JBQ3pFLHlFQUF5RTt3QkFDekUseUVBQXlFO3dCQUN6RSw0RUFBNEU7d0JBQzVFLHlFQUF5RTt3QkFDekUsMkNBQTJDO3dCQUMzQyxRQUFRLENBQUMsR0FBRyxFQUFFOzRCQUNaLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzRCQUM3QixZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztvQkFDSixDQUFDO3lCQUFNLENBQUM7d0JBQ04sd0VBQXdFO3dCQUN4RSxnRUFBZ0U7d0JBQ2hFLE1BQU0sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3pCLENBQUM7b0JBRUQsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztpSUEvVVUsWUFBWTtxSUFBWixZQUFZOzsyRkFBWixZQUFZO2tCQUR4QixVQUFVOztBQW1WWCxzRUFBc0U7QUFDdEUsaUVBQWlFO0FBQ2pFLHdCQUF3QjtBQUN4QixTQUFTLElBQUksS0FBSSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE9uRGVzdHJveSwgaW5qZWN0LCDJtWlzUHJvbWlzZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgybVtZW1vaXplLFxuICDJtU1FVEFfS0VZLFxuICDJtVBsYWluT2JqZWN0T2YsXG4gIMm1TWV0YURhdGFNb2RlbCxcbiAgybVnZXRTdG9yZU1ldGFkYXRhLFxuICDJtVN0YXRlQ2xhc3NJbnRlcm5hbCxcbiAgybVJTklUSUFMX1NUQVRFX1RPS0VOLFxuICDJtVNoYXJlZFNlbGVjdG9yT3B0aW9ucyxcbiAgybVSdW50aW1lU2VsZWN0b3JDb250ZXh0XG59IGZyb20gJ0BuZ3hzL3N0b3JlL2ludGVybmFscyc7XG5pbXBvcnQgeyBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlLCBnZXRWYWx1ZSwgc2V0VmFsdWUgfSBmcm9tICdAbmd4cy9zdG9yZS9wbHVnaW5zJztcbmltcG9ydCB7XG4gIGZvcmtKb2luLFxuICBmcm9tLFxuICBpc09ic2VydmFibGUsXG4gIG9mLFxuICBTdWJzY3JpcHRpb24sXG4gIHRocm93RXJyb3IsXG4gIGNhdGNoRXJyb3IsXG4gIGRlZmF1bHRJZkVtcHR5LFxuICBmaWx0ZXIsXG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIHRha2VVbnRpbCxcbiAgZmluYWxpemUsXG4gIE9ic2VydmFibGVcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IE5neHNDb25maWcgfSBmcm9tICcuLi9zeW1ib2xzJztcbmltcG9ydCB7XG4gIGJ1aWxkR3JhcGgsXG4gIGZpbmRGdWxsUGFyZW50UGF0aCxcbiAgTWFwcGVkU3RvcmUsXG4gIG5hbWVUb1N0YXRlLFxuICDJtVBST1BfR0VUVEVSLFxuICBTdGF0ZUtleUdyYXBoLFxuICBTdGF0ZXNBbmREZWZhdWx0cyxcbiAgU3RhdGVzQnlOYW1lLFxuICB0b3BvbG9naWNhbFNvcnRcbn0gZnJvbSAnLi9pbnRlcm5hbHMnO1xuaW1wb3J0IHsgTmd4c0FjdGlvblJlZ2lzdHJ5IH0gZnJvbSAnLi4vYWN0aW9ucy9hY3Rpb24tcmVnaXN0cnknO1xuaW1wb3J0IHsgQWN0aW9uQ29udGV4dCwgQWN0aW9uU3RhdHVzLCBJbnRlcm5hbEFjdGlvbnMgfSBmcm9tICcuLi9hY3Rpb25zLXN0cmVhbSc7XG5pbXBvcnQgeyBJbnRlcm5hbERpc3BhdGNoZWRBY3Rpb25SZXN1bHRzIH0gZnJvbSAnLi4vaW50ZXJuYWwvZGlzcGF0Y2hlcic7XG5pbXBvcnQgeyBlbnN1cmVTdGF0ZU5hbWVJc1VuaXF1ZSwgZW5zdXJlU3RhdGVzQXJlRGVjb3JhdGVkIH0gZnJvbSAnLi4vdXRpbHMvc3RvcmUtdmFsaWRhdG9ycyc7XG5pbXBvcnQgeyBlbnN1cmVTdGF0ZUNsYXNzSXNJbmplY3RhYmxlIH0gZnJvbSAnLi4vaXZ5L2l2eS1lbmFibGVkLWluLWRldi1tb2RlJztcbmltcG9ydCB7IE5neHNVbmhhbmRsZWRBY3Rpb25zTG9nZ2VyIH0gZnJvbSAnLi4vZGV2LWZlYXR1cmVzL25neHMtdW5oYW5kbGVkLWFjdGlvbnMtbG9nZ2VyJztcbmltcG9ydCB7IE5neHNVbmhhbmRsZWRFcnJvckhhbmRsZXIgfSBmcm9tICcuLi9uZ3hzLXVuaGFuZGxlZC1lcnJvci1oYW5kbGVyJztcbmltcG9ydCB7IGFzc2lnblVuaGFuZGxlZENhbGxiYWNrIH0gZnJvbSAnLi91bmhhbmRsZWQtcnhqcy1lcnJvci1jYWxsYmFjayc7XG5pbXBvcnQgeyBTdGF0ZUNvbnRleHRGYWN0b3J5IH0gZnJvbSAnLi9zdGF0ZS1jb250ZXh0LWZhY3RvcnknO1xuaW1wb3J0IHsgb2ZBY3Rpb25EaXNwYXRjaGVkIH0gZnJvbSAnLi4vb3BlcmF0b3JzL29mLWFjdGlvbic7XG5cbmZ1bmN0aW9uIGNsb25lRGVmYXVsdHMoZGVmYXVsdHM6IGFueSk6IGFueSB7XG4gIGxldCB2YWx1ZSA9IGRlZmF1bHRzID09PSB1bmRlZmluZWQgPyB7fSA6IGRlZmF1bHRzO1xuXG4gIGlmIChkZWZhdWx0cykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGRlZmF1bHRzKSkge1xuICAgICAgdmFsdWUgPSBkZWZhdWx0cy5zbGljZSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmF1bHRzID09PSAnb2JqZWN0Jykge1xuICAgICAgdmFsdWUgPSB7IC4uLmRlZmF1bHRzIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFRoZSBgU3RhdGVGYWN0b3J5YCBjbGFzcyBhZGRzIHJvb3QgYW5kIGZlYXR1cmUgc3RhdGVzIHRvIHRoZSBncmFwaC5cbiAqIFRoaXMgZXh0cmFjdHMgc3RhdGUgbmFtZXMgZnJvbSBzdGF0ZSBjbGFzc2VzLCBjaGVja3MgaWYgdGhleSBhbHJlYWR5XG4gKiBleGlzdCBpbiB0aGUgZ2xvYmFsIGdyYXBoLCB0aHJvd3MgZXJyb3JzIGlmIHRoZWlyIG5hbWVzIGFyZSBpbnZhbGlkLCBldGMuXG4gKiBTZWUgaXRzIGNvbnN0cnVjdG9yLCBzdGF0ZSBmYWN0b3JpZXMgaW5qZWN0IHN0YXRlIGZhY3RvcmllcyB0aGF0IGFyZVxuICogcGFyZW50LWxldmVsIHByb3ZpZGVycy4gVGhpcyBpcyByZXF1aXJlZCB0byBnZXQgZmVhdHVyZSBzdGF0ZXMgZnJvbSB0aGVcbiAqIGluamVjdG9yIG9uIHRoZSBzYW1lIGxldmVsLlxuICpcbiAqIFRoZSBgTmd4c01vZHVsZS5mb3JGZWF0dXJlKC4uLilgIHJldHVybnMgYHByb3ZpZGVyczogW1N0YXRlRmFjdG9yeSwgLi4uc3RhdGVzXWAuXG4gKiBUaGUgYFN0YXRlRmFjdG9yeWAgaXMgaW5pdGlhbGl6ZWQgb24gdGhlIGZlYXR1cmUgbGV2ZWwgYW5kIGdvZXMgdGhyb3VnaCBgLi4uc3RhdGVzYFxuICogdG8gZ2V0IHRoZW0gZnJvbSB0aGUgaW5qZWN0b3IgdGhyb3VnaCBgaW5qZWN0b3IuZ2V0KHN0YXRlKWAuXG4gKiBAaWdub3JlXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTdGF0ZUZhY3RvcnkgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NvbmZpZyA9IGluamVjdChOZ3hzQ29uZmlnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFyZW50RmFjdG9yeSA9IGluamVjdChTdGF0ZUZhY3RvcnksIHsgb3B0aW9uYWw6IHRydWUsIHNraXBTZWxmOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZUNvbnRleHRGYWN0b3J5ID0gaW5qZWN0KFN0YXRlQ29udGV4dEZhY3RvcnkpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hY3Rpb25zID0gaW5qZWN0KEludGVybmFsQWN0aW9ucyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGlvblJlc3VsdHMgPSBpbmplY3QoSW50ZXJuYWxEaXNwYXRjaGVkQWN0aW9uUmVzdWx0cyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2luaXRpYWxTdGF0ZSA9IGluamVjdCjJtUlOSVRJQUxfU1RBVEVfVE9LRU4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGlvblJlZ2lzdHJ5ID0gaW5qZWN0KE5neHNBY3Rpb25SZWdpc3RyeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3BHZXR0ZXIgPSBpbmplY3QoybVQUk9QX0dFVFRFUik7XG5cbiAgcHJpdmF0ZSBfYWN0aW9uc1N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG5cbiAgcHJpdmF0ZSBfbmd4c1VuaGFuZGxlZEVycm9ySGFuZGxlcjogTmd4c1VuaGFuZGxlZEVycm9ySGFuZGxlciA9IG51bGwhO1xuXG4gIHByaXZhdGUgX3N0YXRlczogTWFwcGVkU3RvcmVbXSA9IFtdO1xuICBnZXQgc3RhdGVzKCk6IE1hcHBlZFN0b3JlW10ge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRGYWN0b3J5ID8gdGhpcy5fcGFyZW50RmFjdG9yeS5zdGF0ZXMgOiB0aGlzLl9zdGF0ZXM7XG4gIH1cblxuICBwcml2YXRlIF9zdGF0ZXNCeU5hbWU6IFN0YXRlc0J5TmFtZSA9IHt9O1xuICBnZXQgc3RhdGVzQnlOYW1lKCk6IFN0YXRlc0J5TmFtZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudEZhY3RvcnkgPyB0aGlzLl9wYXJlbnRGYWN0b3J5LnN0YXRlc0J5TmFtZSA6IHRoaXMuX3N0YXRlc0J5TmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgX3N0YXRlUGF0aHM6IMm1UGxhaW5PYmplY3RPZjxzdHJpbmc+ID0ge307XG4gIHByaXZhdGUgZ2V0IHN0YXRlUGF0aHMoKTogybVQbGFpbk9iamVjdE9mPHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9wYXJlbnRGYWN0b3J5ID8gdGhpcy5fcGFyZW50RmFjdG9yeS5zdGF0ZVBhdGhzIDogdGhpcy5fc3RhdGVQYXRocztcbiAgfVxuXG4gIGdldFJ1bnRpbWVTZWxlY3RvckNvbnRleHQgPSDJtW1lbW9pemUoKCkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGNvbnN0IHN0YXRlRmFjdG9yeSA9IHRoaXM7XG4gICAgY29uc3QgcHJvcEdldHRlciA9IHN0YXRlRmFjdG9yeS5fcHJvcEdldHRlcjtcblxuICAgIGZ1bmN0aW9uIHJlc29sdmVHZXR0ZXIoa2V5OiBzdHJpbmcpIHtcbiAgICAgIGNvbnN0IHBhdGggPSBzdGF0ZUZhY3Rvcnkuc3RhdGVQYXRoc1trZXldO1xuICAgICAgcmV0dXJuIHBhdGggPyBwcm9wR2V0dGVyKHBhdGguc3BsaXQoJy4nKSkgOiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQ6IMm1UnVudGltZVNlbGVjdG9yQ29udGV4dCA9IHRoaXMuX3BhcmVudEZhY3RvcnlcbiAgICAgID8gdGhpcy5fcGFyZW50RmFjdG9yeS5nZXRSdW50aW1lU2VsZWN0b3JDb250ZXh0KClcbiAgICAgIDoge1xuICAgICAgICAgIGdldFN0YXRlR2V0dGVyKGtleTogc3RyaW5nKSB7XG4gICAgICAgICAgICAvLyBVc2UgYEBfX0lOTElORV9fYCBhbm5vdGF0aW9uIHRvIGZvcmNlbHkgaW5saW5lIGByZXNvbHZlR2V0dGVyYC5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBUZXJzZXIgYW5ub3RhdGlvbiwgd2hpY2ggd2lsbCBmdW5jdGlvbiBvbmx5IGluIHRoZSBwcm9kdWN0aW9uIG1vZGUuXG4gICAgICAgICAgICBsZXQgZ2V0dGVyID0gLypAX19JTkxJTkVfXyovIHJlc29sdmVHZXR0ZXIoa2V5KTtcbiAgICAgICAgICAgIGlmIChnZXR0ZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldHRlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAvLyBMYXRlIGxvYWRlZCBnZXR0ZXJcbiAgICAgICAgICAgICAgaWYgKCFnZXR0ZXIpIHtcbiAgICAgICAgICAgICAgICBnZXR0ZXIgPSAvKkBfX0lOTElORV9fKi8gcmVzb2x2ZUdldHRlcihrZXkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBnZXR0ZXIgPyBnZXR0ZXIoLi4uYXJncykgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH0sXG4gICAgICAgICAgZ2V0U2VsZWN0b3JPcHRpb25zKGxvY2FsT3B0aW9ucz86IMm1U2hhcmVkU2VsZWN0b3JPcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBnbG9iYWxTZWxlY3Rvck9wdGlvbnMgPSBzdGF0ZUZhY3RvcnkuX2NvbmZpZy5zZWxlY3Rvck9wdGlvbnM7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAuLi5nbG9iYWxTZWxlY3Rvck9wdGlvbnMsXG4gICAgICAgICAgICAgIC4uLihsb2NhbE9wdGlvbnMgfHwge30pXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICByZXR1cm4gY29udGV4dDtcbiAgfSk7XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5fYWN0aW9uc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgc3RhdGUgdG8gdGhlIGdsb2JhbCBkZWZzLlxuICAgKi9cbiAgYWRkKHN0YXRlQ2xhc3NlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXSk6IE1hcHBlZFN0b3JlW10ge1xuICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUpIHtcbiAgICAgIGVuc3VyZVN0YXRlc0FyZURlY29yYXRlZChzdGF0ZUNsYXNzZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgbmV3U3RhdGVzIH0gPSB0aGlzLmFkZFRvU3RhdGVzTWFwKHN0YXRlQ2xhc3Nlcyk7XG4gICAgaWYgKCFuZXdTdGF0ZXMubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICBjb25zdCBzdGF0ZUdyYXBoOiBTdGF0ZUtleUdyYXBoID0gYnVpbGRHcmFwaChuZXdTdGF0ZXMpO1xuICAgIGNvbnN0IHNvcnRlZFN0YXRlczogc3RyaW5nW10gPSB0b3BvbG9naWNhbFNvcnQoc3RhdGVHcmFwaCk7XG4gICAgY29uc3QgcGF0aHM6IMm1UGxhaW5PYmplY3RPZjxzdHJpbmc+ID0gZmluZEZ1bGxQYXJlbnRQYXRoKHN0YXRlR3JhcGgpO1xuICAgIGNvbnN0IG5hbWVHcmFwaDogybVQbGFpbk9iamVjdE9mPMm1U3RhdGVDbGFzc0ludGVybmFsPiA9IG5hbWVUb1N0YXRlKG5ld1N0YXRlcyk7XG4gICAgY29uc3QgYm9vdHN0cmFwcGVkU3RvcmVzOiBNYXBwZWRTdG9yZVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IG5hbWUgb2Ygc29ydGVkU3RhdGVzKSB7XG4gICAgICBjb25zdCBzdGF0ZUNsYXNzOiDJtVN0YXRlQ2xhc3NJbnRlcm5hbCA9IG5hbWVHcmFwaFtuYW1lXTtcbiAgICAgIGNvbnN0IHBhdGg6IHN0cmluZyA9IHBhdGhzW25hbWVdO1xuICAgICAgY29uc3QgbWV0YTogybVNZXRhRGF0YU1vZGVsID0gc3RhdGVDbGFzc1vJtU1FVEFfS0VZXSE7XG5cbiAgICAgIHRoaXMuYWRkUnVudGltZUluZm9Ub01ldGEobWV0YSwgcGF0aCk7XG5cbiAgICAgIC8vIE5vdGU6IHByZXZpb3VzbHkgd2UgY2FsbGVkIGBlbnN1cmVTdGF0ZUNsYXNzSXNJbmplY3RhYmxlYCB3aXRoaW4gdGhlXG4gICAgICAvLyBgU3RhdGVgIGRlY29yYXRvci4gVGhpcyBjaGVjayBpcyBtb3ZlZCBoZXJlIGJlY2F1c2UgdGhlIGDJtXByb3ZgIHByb3BlcnR5XG4gICAgICAvLyB3aWxsIG5vdCBleGlzdCBvbiB0aGUgY2xhc3MgaW4gSklUIG1vZGUgKGJlY2F1c2UgaXQncyBzZXQgYXN5bmNocm9ub3VzbHlcbiAgICAgIC8vIGR1cmluZyBKSVQgY29tcGlsYXRpb24gdGhyb3VnaCBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCkuXG4gICAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlKSB7XG4gICAgICAgIGVuc3VyZVN0YXRlQ2xhc3NJc0luamVjdGFibGUoc3RhdGVDbGFzcyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHN0YXRlTWFwOiBNYXBwZWRTdG9yZSA9IHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgaXNJbml0aWFsaXNlZDogZmFsc2UsXG4gICAgICAgIGFjdGlvbnM6IG1ldGEuYWN0aW9ucyxcbiAgICAgICAgaW5zdGFuY2U6IHRoaXMuX2luamVjdG9yLmdldChzdGF0ZUNsYXNzKSxcbiAgICAgICAgZGVmYXVsdHM6IGNsb25lRGVmYXVsdHMobWV0YS5kZWZhdWx0cylcbiAgICAgIH07XG5cbiAgICAgIC8vIGVuc3VyZSBvdXIgc3RvcmUgaGFzbid0IGFscmVhZHkgYmVlbiBhZGRlZFxuICAgICAgLy8gYnV0IGRvbid0IHRocm93IHNpbmNlIGl0IGNvdWxkIGJlIGxhenlcbiAgICAgIC8vIGxvYWRlZCBmcm9tIGRpZmZlcmVudCBwYXRoc1xuICAgICAgaWYgKCF0aGlzLmhhc0JlZW5Nb3VudGVkQW5kQm9vdHN0cmFwcGVkKG5hbWUsIHBhdGgpKSB7XG4gICAgICAgIGJvb3RzdHJhcHBlZFN0b3Jlcy5wdXNoKHN0YXRlTWFwKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdGF0ZXMucHVzaChzdGF0ZU1hcCk7XG4gICAgICB0aGlzLmh5ZHJhdGVBY3Rpb25NZXRhc01hcChzdGF0ZU1hcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvb3RzdHJhcHBlZFN0b3JlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBzZXQgb2Ygc3RhdGVzIHRvIHRoZSBzdG9yZSBhbmQgcmV0dXJuIHRoZSBkZWZhdWx0c1xuICAgKi9cbiAgYWRkQW5kUmV0dXJuRGVmYXVsdHMoc3RhdGVDbGFzc2VzOiDJtVN0YXRlQ2xhc3NJbnRlcm5hbFtdKTogU3RhdGVzQW5kRGVmYXVsdHMge1xuICAgIGNvbnN0IGNsYXNzZXM6IMm1U3RhdGVDbGFzc0ludGVybmFsW10gPSBzdGF0ZUNsYXNzZXMgfHwgW107XG5cbiAgICBjb25zdCBtYXBwZWRTdG9yZXM6IE1hcHBlZFN0b3JlW10gPSB0aGlzLmFkZChjbGFzc2VzKTtcbiAgICBjb25zdCBkZWZhdWx0cyA9IG1hcHBlZFN0b3Jlcy5yZWR1Y2UoXG4gICAgICAocmVzdWx0OiBhbnksIG1hcHBlZFN0b3JlOiBNYXBwZWRTdG9yZSkgPT5cbiAgICAgICAgc2V0VmFsdWUocmVzdWx0LCBtYXBwZWRTdG9yZS5wYXRoLCBtYXBwZWRTdG9yZS5kZWZhdWx0cyksXG4gICAgICB7fVxuICAgICk7XG4gICAgcmV0dXJuIHsgZGVmYXVsdHMsIHN0YXRlczogbWFwcGVkU3RvcmVzIH07XG4gIH1cblxuICBjb25uZWN0QWN0aW9uSGFuZGxlcnMoKTogdm9pZCB7XG4gICAgLy8gTm90ZTogV2UgaGF2ZSB0byBjb25uZWN0IGFjdGlvbnMgb25seSBvbmNlIHdoZW4gdGhlIGBTdGF0ZUZhY3RvcnlgXG4gICAgLy8gICAgICAgaXMgYmVpbmcgY3JlYXRlZCBmb3IgdGhlIGZpcnN0IHRpbWUuIFRoaXMgY2hlY2tzIGlmIHdlJ3JlIGluXG4gICAgLy8gICAgICAgYSBjaGlsZCBzdGF0ZSBmYWN0b3J5IGFuZCB0aGUgcGFyZW50IHN0YXRlIGZhY3RvcnkgYWxyZWFkeSBleGlzdHMuXG4gICAgaWYgKHRoaXMuX3BhcmVudEZhY3RvcnkgfHwgdGhpcy5fYWN0aW9uc1N1YnNjcmlwdGlvbiAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2FjdGlvbnNTdWJzY3JpcHRpb24gPSB0aGlzLl9hY3Rpb25zXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKChjdHg6IEFjdGlvbkNvbnRleHQpID0+IGN0eC5zdGF0dXMgPT09IEFjdGlvblN0YXR1cy5EaXNwYXRjaGVkKSxcbiAgICAgICAgbWVyZ2VNYXAoY3R4ID0+IHtcbiAgICAgICAgICBjb25zdCBhY3Rpb246IGFueSA9IGN0eC5hY3Rpb247XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW52b2tlQWN0aW9ucyhhY3Rpb24pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKCkgPT4gPEFjdGlvbkNvbnRleHQ+eyBhY3Rpb24sIHN0YXR1czogQWN0aW9uU3RhdHVzLlN1Y2Nlc3NmdWwgfSksXG4gICAgICAgICAgICBkZWZhdWx0SWZFbXB0eSg8QWN0aW9uQ29udGV4dD57IGFjdGlvbiwgc3RhdHVzOiBBY3Rpb25TdGF0dXMuQ2FuY2VsZWQgfSksXG4gICAgICAgICAgICBjYXRjaEVycm9yKGVycm9yID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgbmd4c1VuaGFuZGxlZEVycm9ySGFuZGxlciA9ICh0aGlzLl9uZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyIHx8PVxuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyKSk7XG4gICAgICAgICAgICAgIGNvbnN0IGhhbmRsZWFibGVFcnJvciA9IGFzc2lnblVuaGFuZGxlZENhbGxiYWNrKGVycm9yLCAoKSA9PlxuICAgICAgICAgICAgICAgIG5neHNVbmhhbmRsZWRFcnJvckhhbmRsZXIuaGFuZGxlRXJyb3IoZXJyb3IsIHsgYWN0aW9uIH0pXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHJldHVybiBvZig8QWN0aW9uQ29udGV4dD57XG4gICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgIHN0YXR1czogQWN0aW9uU3RhdHVzLkVycm9yZWQsXG4gICAgICAgICAgICAgICAgZXJyb3I6IGhhbmRsZWFibGVFcnJvclxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoY3R4ID0+IHRoaXMuX2FjdGlvblJlc3VsdHMubmV4dChjdHgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2UgYWN0aW9ucyBvbiB0aGUgc3RhdGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBpbnZva2VBY3Rpb25zKGFjdGlvbjogYW55KTogT2JzZXJ2YWJsZTx1bmtub3duW10+IHtcbiAgICBjb25zdCB0eXBlID0gZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShhY3Rpb24pITtcbiAgICBjb25zdCByZXN1bHRzOiBPYnNlcnZhYmxlPHVua25vd24+W10gPSBbXTtcblxuICAgIC8vIERldGVybWluZXMgd2hldGhlciB0aGUgZGlzcGF0Y2hlZCBhY3Rpb24gaGFzIGJlZW4gaGFuZGxlZCwgdGhpcyBpcyBhc3NpZ25lZFxuICAgIC8vIHRvIGB0cnVlYCB3aXRoaW4gdGhlIGJlbG93IGBmb3JgIGxvb3AgaWYgYW55IGBhY3Rpb25NZXRhc2AgaGFzIGJlZW4gZm91bmQuXG4gICAgbGV0IGFjdGlvbkhhc0JlZW5IYW5kbGVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBhY3Rpb25IYW5kbGVycyA9IHRoaXMuX2FjdGlvblJlZ2lzdHJ5LmdldCh0eXBlKTtcblxuICAgIGlmIChhY3Rpb25IYW5kbGVycykge1xuICAgICAgZm9yIChjb25zdCBhY3Rpb25IYW5kbGVyIG9mIGFjdGlvbkhhbmRsZXJzKSB7XG4gICAgICAgIGxldCByZXN1bHQ7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXN1bHQgPSBhY3Rpb25IYW5kbGVyKGFjdGlvbik7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICByZXN1bHQgPSB0aHJvd0Vycm9yKCgpID0+IGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0cy5wdXNoKHJlc3VsdCk7XG5cbiAgICAgICAgYWN0aW9uSGFzQmVlbkhhbmRsZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoZSBgTmd4c1VuaGFuZGxlZEFjdGlvbnNMb2dnZXJgIGlzIGEgdHJlZS1zaGFrYWJsZSBjbGFzcyB3aGljaCBmdW5jdGlvbnNcbiAgICAvLyBvbmx5IGR1cmluZyBkZXZlbG9wbWVudC5cbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlICYmICFhY3Rpb25IYXNCZWVuSGFuZGxlZCkge1xuICAgICAgY29uc3QgdW5oYW5kbGVkQWN0aW9uc0xvZ2dlciA9IHRoaXMuX2luamVjdG9yLmdldChOZ3hzVW5oYW5kbGVkQWN0aW9uc0xvZ2dlciwgbnVsbCk7XG4gICAgICAvLyBUaGUgYE5neHNVbmhhbmRsZWRBY3Rpb25zTG9nZ2VyYCB3aWxsIG5vdCBiZSByZXNvbHZlZCBieSB0aGUgaW5qZWN0b3IgaWYgdGhlXG4gICAgICAvLyBgTmd4c0RldmVsb3BtZW50TW9kdWxlYCBpcyBub3QgcHJvdmlkZWQuIEl0J3MgZW5vdWdoIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGBpbmplY3Rvci5nZXRgXG4gICAgICAvLyBkaWRuJ3QgcmV0dXJuIGBudWxsYCBzbyB3ZSBtYXkgZW5zdXJlIHRoZSBtb2R1bGUgaGFzIGJlZW4gaW1wb3J0ZWQuXG4gICAgICB1bmhhbmRsZWRBY3Rpb25zTG9nZ2VyPy53YXJuKGFjdGlvbik7XG4gICAgfVxuXG4gICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgICAgcmVzdWx0cy5wdXNoKG9mKHVuZGVmaW5lZCkpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3JrSm9pbihyZXN1bHRzKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkVG9TdGF0ZXNNYXAoc3RhdGVDbGFzc2VzOiDJtVN0YXRlQ2xhc3NJbnRlcm5hbFtdKToge1xuICAgIG5ld1N0YXRlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXTtcbiAgfSB7XG4gICAgY29uc3QgbmV3U3RhdGVzOiDJtVN0YXRlQ2xhc3NJbnRlcm5hbFtdID0gW107XG4gICAgY29uc3Qgc3RhdGVzTWFwOiBTdGF0ZXNCeU5hbWUgPSB0aGlzLnN0YXRlc0J5TmFtZTtcblxuICAgIGZvciAoY29uc3Qgc3RhdGVDbGFzcyBvZiBzdGF0ZUNsYXNzZXMpIHtcbiAgICAgIGNvbnN0IHN0YXRlTmFtZSA9IMm1Z2V0U3RvcmVNZXRhZGF0YShzdGF0ZUNsYXNzKS5uYW1lITtcbiAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUpIHtcbiAgICAgICAgZW5zdXJlU3RhdGVOYW1lSXNVbmlxdWUoc3RhdGVOYW1lLCBzdGF0ZUNsYXNzLCBzdGF0ZXNNYXApO1xuICAgICAgfVxuICAgICAgY29uc3QgdW5tb3VudGVkU3RhdGUgPSAhc3RhdGVzTWFwW3N0YXRlTmFtZV07XG4gICAgICBpZiAodW5tb3VudGVkU3RhdGUpIHtcbiAgICAgICAgbmV3U3RhdGVzLnB1c2goc3RhdGVDbGFzcyk7XG4gICAgICAgIHN0YXRlc01hcFtzdGF0ZU5hbWVdID0gc3RhdGVDbGFzcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBuZXdTdGF0ZXMgfTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkUnVudGltZUluZm9Ub01ldGEobWV0YTogybVNZXRhRGF0YU1vZGVsLCBwYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlUGF0aHNbbWV0YS5uYW1lIV0gPSBwYXRoO1xuICAgIC8vIFRPRE86IHZlcnNpb25zIGFmdGVyIHYzIC0gd2UgcGxhbiB0byBnZXQgcmlkIG9mIHRoZSBgcGF0aGAgcHJvcGVydHkgYmVjYXVzZSBpdCBpcyBub24tZGV0ZXJtaW5pc3RpY1xuICAgIC8vIHdlIGNhbiBkbyB0aGlzIHdoZW4gd2UgZ2V0IHJpZCBvZiB0aGUgaW5jb3JyZWN0bHkgZXhwb3NlZCBnZXRTdG9yZU1ldGFkYXRhXG4gICAgLy8gV2Ugd2lsbCBuZWVkIHRvIGNvbWUgdXAgd2l0aCBhbiBhbHRlcm5hdGl2ZSB0byB3aGF0IHdhcyBleHBvc2VkIGluIHYzIGJlY2F1c2UgdGhpcyBpcyB1c2VkIGJ5IG1hbnkgcGx1Z2luc1xuICAgIG1ldGEucGF0aCA9IHBhdGg7XG4gIH1cblxuICBwcml2YXRlIGhhc0JlZW5Nb3VudGVkQW5kQm9vdHN0cmFwcGVkKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWVJc0Jvb3RzdHJhcHBlZEluSW5pdGlhbFN0YXRlOiBib29sZWFuID1cbiAgICAgIGdldFZhbHVlKHRoaXMuX2luaXRpYWxTdGF0ZSwgcGF0aCkgIT09IHVuZGVmaW5lZDtcbiAgICAvLyBUaGlzIGNoZWNrcyB3aGV0aGVyIGEgc3RhdGUgaGFzIGJlZW4gYWxyZWFkeSBhZGRlZCB0byB0aGUgZ2xvYmFsIGdyYXBoIGFuZFxuICAgIC8vIGl0cyBsaWZlY3ljbGUgaXMgaW4gJ2Jvb3RzdHJhcHBlZCcgc3RhdGUuXG4gICAgcmV0dXJuIHRoaXMuc3RhdGVzQnlOYW1lW25hbWVdICYmIHZhbHVlSXNCb290c3RyYXBwZWRJbkluaXRpYWxTdGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgaHlkcmF0ZUFjdGlvbk1ldGFzTWFwKHsgcGF0aCwgYWN0aW9ucywgaW5zdGFuY2UgfTogTWFwcGVkU3RvcmUpOiB2b2lkIHtcbiAgICBjb25zdCB7IGRpc3BhdGNoZWQkIH0gPSB0aGlzLl9hY3Rpb25zO1xuICAgIGZvciAoY29uc3QgYWN0aW9uVHlwZSBvZiBPYmplY3Qua2V5cyhhY3Rpb25zKSkge1xuICAgICAgY29uc3QgYWN0aW9uSGFuZGxlcnMgPSBhY3Rpb25zW2FjdGlvblR5cGVdLm1hcChhY3Rpb25NZXRhID0+IHtcbiAgICAgICAgY29uc3QgY2FuY2VsYWJsZSA9ICEhYWN0aW9uTWV0YS5vcHRpb25zLmNhbmNlbFVuY29tcGxldGVkO1xuXG4gICAgICAgIHJldHVybiAoYWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBzdGF0ZUNvbnRleHQgPSB0aGlzLl9zdGF0ZUNvbnRleHRGYWN0b3J5LmNyZWF0ZVN0YXRlQ29udGV4dChwYXRoKTtcblxuICAgICAgICAgIGxldCByZXN1bHQgPSBpbnN0YW5jZVthY3Rpb25NZXRhLmZuXShzdGF0ZUNvbnRleHQsIGFjdGlvbik7XG5cbiAgICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSBgaXNQcm9taXNlYCBpbnN0ZWFkIG9mIGNoZWNraW5nIHdoZXRoZXJcbiAgICAgICAgICAvLyBgcmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZWAuIEluIHpvbmUuanMgcGF0Y2hlZCBlbnZpcm9ubWVudHMsIGBnbG9iYWwuUHJvbWlzZWBcbiAgICAgICAgICAvLyBpcyB0aGUgYFpvbmVBd2FyZVByb21pc2VgLiBTb21lIEFQSXMsIHdoaWNoIGFyZSBsaWtlbHkgbm90IHBhdGNoZWQgYnkgem9uZS5qc1xuICAgICAgICAgIC8vIGZvciBjZXJ0YWluIHJlYXNvbnMsIG1pZ2h0IG5vdCB3b3JrIHdpdGggYGluc3RhbmNlb2ZgLiBGb3IgaW5zdGFuY2UsIHRoZSBkeW5hbWljXG4gICAgICAgICAgLy8gaW1wb3J0IHJldHVybnMgYSBuYXRpdmUgcHJvbWlzZSAobm90IGEgYFpvbmVBd2FyZVByb21pc2VgKSwgY2F1c2luZyB0aGlzIGNoZWNrIHRvXG4gICAgICAgICAgLy8gYmUgZmFsc3kuXG4gICAgICAgICAgaWYgKMm1aXNQcm9taXNlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IGZyb20ocmVzdWx0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5waXBlKFxuICAgICAgICAgICAgICBtZXJnZU1hcCgodmFsdWU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICjJtWlzUHJvbWlzZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBmcm9tKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAvLyBJZiB0aGlzIG9ic2VydmFibGUgaGFzIGNvbXBsZXRlZCB3aXRob3V0IGVtaXR0aW5nIGFueSB2YWx1ZXMsXG4gICAgICAgICAgICAgIC8vIHdlIHdvdWxkbid0IHdhbnQgdG8gY29tcGxldGUgdGhlIGVudGlyZSBjaGFpbiBvZiBhY3Rpb25zLlxuICAgICAgICAgICAgICAvLyBJZiBhbnkgb2JzZXJ2YWJsZSBjb21wbGV0ZXMsIHRoZW4gdGhlIGFjdGlvbiB3aWxsIGJlIGNhbmNlbGVkLlxuICAgICAgICAgICAgICAvLyBGb3IgaW5zdGFuY2UsIGlmIGFueSBhY3Rpb24gaGFuZGxlciBoYWQgYSBzdGF0ZW1lbnQgbGlrZVxuICAgICAgICAgICAgICAvLyBgaGFuZGxlcihjdHgpIHsgcmV0dXJuIEVNUFRZOyB9YCwgdGhlbiB0aGUgYWN0aW9uIHdvdWxkIGJlIGNhbmNlbGVkLlxuICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25neHMvc3RvcmUvaXNzdWVzLzE1NjhcbiAgICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHdlIGFjdHVhbGx5IGRvbid0IGNhcmUgYWJvdXQgdGhlIHJldHVybiB0eXBlOyB3ZSBvbmx5IGNhcmVcbiAgICAgICAgICAgICAgLy8gYWJvdXQgZW1pc3Npb24sIGFuZCB0aHVzIGB1bmRlZmluZWRgIGlzIGFwcGxpY2FibGUgYnkgdGhlIGZyYW1ld29yay5cbiAgICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkodW5kZWZpbmVkKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKGNhbmNlbGFibGUpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm90aWZpZXIkID0gZGlzcGF0Y2hlZCQucGlwZShvZkFjdGlvbkRpc3BhdGNoZWQoYWN0aW9uKSk7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5waXBlKHRha2VVbnRpbChub3RpZmllciQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnBpcGUoXG4gICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSB1c2UgdGhlIGBmaW5hbGl6ZWAgb3BlcmF0b3Igb25seSB3aGVuIHRoZSBhY3Rpb24gaGFuZGxlclxuICAgICAgICAgICAgICAvLyByZXR1cm5zIGFuIG9ic2VydmFibGUuIElmIHRoZSBhY3Rpb24gaGFuZGxlciBpcyBzeW5jaHJvbm91cywgd2UgZG8gbm90XG4gICAgICAgICAgICAgIC8vIG5lZWQgdG8gc2V0IHRoZSBzdGF0ZSBjb250ZXh0IGZ1bmN0aW9ucyB0byBgbm9vcGAsIGFzIHRoZSBhYnNlbmNlIG9mIGFcbiAgICAgICAgICAgICAgLy8gcmV0dXJuIHZhbHVlIGluZGljYXRlcyBubyBhc3luY2hyb25vdXMgZnVuY3Rpb25hbGl0eS4gSWYgdGhlIGhhbmRsZXInc1xuICAgICAgICAgICAgICAvLyByZXN1bHQgaXMgdW5zdWJzY3JpYmVkIChlaXRoZXIgYmVjYXVzZSB0aGUgb2JzZXJ2YWJsZSBoYXMgY29tcGxldGVkIG9yIGl0XG4gICAgICAgICAgICAgIC8vIHdhcyB1bnN1YnNjcmliZWQgYnkgYHRha2VVbnRpbGAgZHVlIHRvIGEgbmV3IGFjdGlvbiBiZWluZyBkaXNwYXRjaGVkKSxcbiAgICAgICAgICAgICAgLy8gd2UgcHJldmVudCB3cml0aW5nIHRvIHRoZSBzdGF0ZSBjb250ZXh0LlxuICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgc3RhdGVDb250ZXh0LnNldFN0YXRlID0gbm9vcDtcbiAgICAgICAgICAgICAgICBzdGF0ZUNvbnRleHQucGF0Y2hTdGF0ZSA9IG5vb3A7XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgYWN0aW9uIGhhbmRsZXIgaXMgc3luY2hyb25vdXMgYW5kIHJldHVybnMgbm90aGluZyAoYHZvaWRgKSwgd2VcbiAgICAgICAgICAgIC8vIHN0aWxsIGhhdmUgdG8gY29udmVydCB0aGUgcmVzdWx0IHRvIGEgc3luY2hyb25vdXMgb2JzZXJ2YWJsZS5cbiAgICAgICAgICAgIHJlc3VsdCA9IG9mKHVuZGVmaW5lZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGFjdGlvbkhhbmRsZXIgb2YgYWN0aW9uSGFuZGxlcnMpIHtcbiAgICAgICAgdGhpcy5fYWN0aW9uUmVnaXN0cnkucmVnaXN0ZXIoYWN0aW9uVHlwZSwgYWN0aW9uSGFuZGxlcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8vIFRoaXMgaXMgdXNlZCB0byByZXBsYWNlIGBzZXRTdGF0ZWAgYW5kIGBwYXRjaFN0YXRlYCBvbmNlIHRoZSBhY3Rpb25cbi8vIGhhbmRsZXIgaGFzIGJlZW4gdW5zdWJzY3JpYmVkIG9yIGNvbXBsZXRlZCwgdG8gcHJldmVudCB3cml0aW5nXG4vLyB0byB0aGUgc3RhdGUgY29udGV4dC5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuIl19
|
|
311
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUtZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3NyYy9pbnRlcm5hbC9zdGF0ZS1mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFhLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEYsT0FBTyxFQUNMLFFBQVEsRUFDUixTQUFTLEVBR1QsaUJBQWlCLEVBRWpCLG9CQUFvQixFQUdyQixNQUFNLHVCQUF1QixDQUFDO0FBQy9CLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDcEYsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osWUFBWSxFQUNaLEVBQUUsRUFFRixVQUFVLEVBQ1YsVUFBVSxFQUNWLGNBQWMsRUFDZCxNQUFNLEVBQ04sR0FBRyxFQUNILFFBQVEsRUFDUixTQUFTLEVBQ1QsUUFBUSxFQUVULE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQ0wsVUFBVSxFQUNWLGtCQUFrQixFQUVsQixXQUFXLEVBQ1gsWUFBWSxFQUlaLGVBQWUsRUFDaEIsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUErQixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RixPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsMEJBQTBC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RSw0RUFBNEU7d0JBQzVFLHlFQUF5RTt3QkFDekUsMkNBQTJDO3dCQUMzQyxRQUFRLENBQUMsR0FBRyxFQUFFOzRCQUNaLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzRCQUM3QixZQUFZLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt3QkFDakMsQ0FBQyxDQUFDLENBQ0gsQ0FBQztvQkFDSixDQUFDO3lCQUFNLENBQUM7d0JBQ04sd0VBQXdFO3dCQUN4RSxnRUFBZ0U7d0JBQ2hFLE1BQU0sR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7b0JBQ3pCLENBQUM7b0JBRUQsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUFDO1lBRUgsS0FBSyxNQUFNLGFBQWEsSUFBSSxjQUFjLEVBQUUsQ0FBQztnQkFDM0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzNELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztpSUExVFUsWUFBWTtxSUFBWixZQUFZLGNBREMsTUFBTTs7MkZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQThUbEMsc0VBQXNFO0FBQ3RFLGlFQUFpRTtBQUNqRSx3QkFBd0I7QUFDeEIsU0FBUyxJQUFJLEtBQUksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEluamVjdG9yLCBPbkRlc3Ryb3ksIGluamVjdCwgybVpc1Byb21pc2UgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIMm1bWVtb2l6ZSxcbiAgybVNRVRBX0tFWSxcbiAgybVQbGFpbk9iamVjdE9mLFxuICDJtU1ldGFEYXRhTW9kZWwsXG4gIMm1Z2V0U3RvcmVNZXRhZGF0YSxcbiAgybVTdGF0ZUNsYXNzSW50ZXJuYWwsXG4gIMm1SU5JVElBTF9TVEFURV9UT0tFTixcbiAgybVTaGFyZWRTZWxlY3Rvck9wdGlvbnMsXG4gIMm1UnVudGltZVNlbGVjdG9yQ29udGV4dFxufSBmcm9tICdAbmd4cy9zdG9yZS9pbnRlcm5hbHMnO1xuaW1wb3J0IHsgZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZSwgZ2V0VmFsdWUsIHNldFZhbHVlIH0gZnJvbSAnQG5neHMvc3RvcmUvcGx1Z2lucyc7XG5pbXBvcnQge1xuICBmb3JrSm9pbixcbiAgZnJvbSxcbiAgaXNPYnNlcnZhYmxlLFxuICBvZixcbiAgU3Vic2NyaXB0aW9uLFxuICB0aHJvd0Vycm9yLFxuICBjYXRjaEVycm9yLFxuICBkZWZhdWx0SWZFbXB0eSxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIG1lcmdlTWFwLFxuICB0YWtlVW50aWwsXG4gIGZpbmFsaXplLFxuICBPYnNlcnZhYmxlXG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBOZ3hzQ29uZmlnIH0gZnJvbSAnLi4vc3ltYm9scyc7XG5pbXBvcnQge1xuICBidWlsZEdyYXBoLFxuICBmaW5kRnVsbFBhcmVudFBhdGgsXG4gIE1hcHBlZFN0b3JlLFxuICBuYW1lVG9TdGF0ZSxcbiAgybVQUk9QX0dFVFRFUixcbiAgU3RhdGVLZXlHcmFwaCxcbiAgU3RhdGVzQW5kRGVmYXVsdHMsXG4gIFN0YXRlc0J5TmFtZSxcbiAgdG9wb2xvZ2ljYWxTb3J0XG59IGZyb20gJy4vaW50ZXJuYWxzJztcbmltcG9ydCB7IE5neHNBY3Rpb25SZWdpc3RyeSB9IGZyb20gJy4uL2FjdGlvbnMvYWN0aW9uLXJlZ2lzdHJ5JztcbmltcG9ydCB7IEFjdGlvbkNvbnRleHQsIEFjdGlvblN0YXR1cywgSW50ZXJuYWxBY3Rpb25zIH0gZnJvbSAnLi4vYWN0aW9ucy1zdHJlYW0nO1xuaW1wb3J0IHsgSW50ZXJuYWxEaXNwYXRjaGVkQWN0aW9uUmVzdWx0cyB9IGZyb20gJy4uL2ludGVybmFsL2Rpc3BhdGNoZXInO1xuaW1wb3J0IHsgZW5zdXJlU3RhdGVOYW1lSXNVbmlxdWUsIGVuc3VyZVN0YXRlc0FyZURlY29yYXRlZCB9IGZyb20gJy4uL3V0aWxzL3N0b3JlLXZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgZW5zdXJlU3RhdGVDbGFzc0lzSW5qZWN0YWJsZSB9IGZyb20gJy4uL2l2eS9pdnktZW5hYmxlZC1pbi1kZXYtbW9kZSc7XG5pbXBvcnQgeyBOZ3hzVW5oYW5kbGVkQWN0aW9uc0xvZ2dlciB9IGZyb20gJy4uL2Rldi1mZWF0dXJlcy9uZ3hzLXVuaGFuZGxlZC1hY3Rpb25zLWxvZ2dlcic7XG5pbXBvcnQgeyBOZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyIH0gZnJvbSAnLi4vbmd4cy11bmhhbmRsZWQtZXJyb3ItaGFuZGxlcic7XG5pbXBvcnQgeyBhc3NpZ25VbmhhbmRsZWRDYWxsYmFjayB9IGZyb20gJy4vdW5oYW5kbGVkLXJ4anMtZXJyb3ItY2FsbGJhY2snO1xuaW1wb3J0IHsgU3RhdGVDb250ZXh0RmFjdG9yeSB9IGZyb20gJy4vc3RhdGUtY29udGV4dC1mYWN0b3J5JztcbmltcG9ydCB7IG9mQWN0aW9uRGlzcGF0Y2hlZCB9IGZyb20gJy4uL29wZXJhdG9ycy9vZi1hY3Rpb24nO1xuXG5mdW5jdGlvbiBjbG9uZURlZmF1bHRzKGRlZmF1bHRzOiBhbnkpOiBhbnkge1xuICBsZXQgdmFsdWUgPSBkZWZhdWx0cyA9PT0gdW5kZWZpbmVkID8ge30gOiBkZWZhdWx0cztcblxuICBpZiAoZGVmYXVsdHMpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0cykpIHtcbiAgICAgIHZhbHVlID0gZGVmYXVsdHMuc2xpY2UoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhbHVlID0geyAuLi5kZWZhdWx0cyB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLyoqXG4gKiBUaGUgYFN0YXRlRmFjdG9yeWAgY2xhc3MgYWRkcyByb290IGFuZCBmZWF0dXJlIHN0YXRlcyB0byB0aGUgZ3JhcGguXG4gKiBUaGlzIGV4dHJhY3RzIHN0YXRlIG5hbWVzIGZyb20gc3RhdGUgY2xhc3NlcywgY2hlY2tzIGlmIHRoZXkgYWxyZWFkeVxuICogZXhpc3QgaW4gdGhlIGdsb2JhbCBncmFwaCwgdGhyb3dzIGVycm9ycyBpZiB0aGVpciBuYW1lcyBhcmUgaW52YWxpZCwgZXRjLlxuICpcbiAqIFJvb3QgYW5kIGZlYXR1cmUgaW5pdGlhbGl6ZXJzIGNhbGwgYGFkZEFuZFJldHVybkRlZmF1bHRzKClgIHRvIGFkZCB0aG9zZSBzdGF0ZXNcbiAqIHRvIHRoZSBnbG9iYWwgZ3JhcGguIFNpbmNlIGBhZGRBbmRSZXR1cm5EZWZhdWx0c2AgcnVucyB3aXRoaW4gdGhlIGluamVjdGlvblxuICogY29udGV4dCAod2hpY2ggbWlnaHQgYmUgdGhlIHJvb3QgaW5qZWN0b3Igb3IgYSBmZWF0dXJlIGluamVjdG9yKSwgd2UgY2FuXG4gKiByZXRyaWV2ZSBhbiBpbnN0YW5jZSBvZiB0aGUgc3RhdGUgY2xhc3MgdXNpbmcgYGluamVjdChTdGF0ZUNsYXNzKWAuXG4gKiBAaWdub3JlXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgU3RhdGVGYWN0b3J5IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jb25maWcgPSBpbmplY3QoTmd4c0NvbmZpZyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dEZhY3RvcnkgPSBpbmplY3QoU3RhdGVDb250ZXh0RmFjdG9yeSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FjdGlvbnMgPSBpbmplY3QoSW50ZXJuYWxBY3Rpb25zKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aW9uUmVzdWx0cyA9IGluamVjdChJbnRlcm5hbERpc3BhdGNoZWRBY3Rpb25SZXN1bHRzKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaW5pdGlhbFN0YXRlID0gaW5qZWN0KMm1SU5JVElBTF9TVEFURV9UT0tFTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfYWN0aW9uUmVnaXN0cnkgPSBpbmplY3QoTmd4c0FjdGlvblJlZ2lzdHJ5KTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvcEdldHRlciA9IGluamVjdCjJtVBST1BfR0VUVEVSKTtcblxuICBwcml2YXRlIF9hY3Rpb25zU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9uZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyOiBOZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyID0gbnVsbCE7XG5cbiAgcHJpdmF0ZSBfc3RhdGVzOiBNYXBwZWRTdG9yZVtdID0gW107XG4gIHByaXZhdGUgX3N0YXRlc0J5TmFtZTogU3RhdGVzQnlOYW1lID0ge307XG4gIHByaXZhdGUgX3N0YXRlUGF0aHM6IMm1UGxhaW5PYmplY3RPZjxzdHJpbmc+ID0ge307XG5cbiAgZ2V0UnVudGltZVNlbGVjdG9yQ29udGV4dCA9IMm1bWVtb2l6ZSgoKSA9PiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgY29uc3Qgc3RhdGVGYWN0b3J5ID0gdGhpcztcbiAgICBjb25zdCBwcm9wR2V0dGVyID0gc3RhdGVGYWN0b3J5Ll9wcm9wR2V0dGVyO1xuXG4gICAgZnVuY3Rpb24gcmVzb2x2ZUdldHRlcihrZXk6IHN0cmluZykge1xuICAgICAgY29uc3QgcGF0aCA9IHN0YXRlRmFjdG9yeS5fc3RhdGVQYXRoc1trZXldO1xuICAgICAgcmV0dXJuIHBhdGggPyBwcm9wR2V0dGVyKHBhdGguc3BsaXQoJy4nKSkgOiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQ6IMm1UnVudGltZVNlbGVjdG9yQ29udGV4dCA9IHtcbiAgICAgIGdldFN0YXRlR2V0dGVyKGtleTogc3RyaW5nKSB7XG4gICAgICAgIC8vIFVzZSBgQF9fSU5MSU5FX19gIGFubm90YXRpb24gdG8gZm9yY2VseSBpbmxpbmUgYHJlc29sdmVHZXR0ZXJgLlxuICAgICAgICAvLyBUaGlzIGlzIGEgVGVyc2VyIGFubm90YXRpb24sIHdoaWNoIHdpbGwgZnVuY3Rpb24gb25seSBpbiB0aGUgcHJvZHVjdGlvbiBtb2RlLlxuICAgICAgICBsZXQgZ2V0dGVyID0gLypAX19JTkxJTkVfXyovIHJlc29sdmVHZXR0ZXIoa2V5KTtcbiAgICAgICAgaWYgKGdldHRlcikge1xuICAgICAgICAgIHJldHVybiBnZXR0ZXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgLy8gTGF0ZSBsb2FkZWQgZ2V0dGVyXG4gICAgICAgICAgaWYgKCFnZXR0ZXIpIHtcbiAgICAgICAgICAgIGdldHRlciA9IC8qQF9fSU5MSU5FX18qLyByZXNvbHZlR2V0dGVyKGtleSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBnZXR0ZXIgPyBnZXR0ZXIoLi4uYXJncykgOiB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgZ2V0U2VsZWN0b3JPcHRpb25zKGxvY2FsT3B0aW9ucz86IMm1U2hhcmVkU2VsZWN0b3JPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGdsb2JhbFNlbGVjdG9yT3B0aW9ucyA9IHN0YXRlRmFjdG9yeS5fY29uZmlnLnNlbGVjdG9yT3B0aW9ucztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5nbG9iYWxTZWxlY3Rvck9wdGlvbnMsXG4gICAgICAgICAgLi4uKGxvY2FsT3B0aW9ucyB8fCB7fSlcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBjb250ZXh0O1xuICB9KTtcblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25zU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBzdGF0ZSB0byB0aGUgZ2xvYmFsIGRlZnMuXG4gICAqL1xuICBwcml2YXRlIGFkZChzdGF0ZUNsYXNzZXM6IMm1U3RhdGVDbGFzc0ludGVybmFsW10pOiBNYXBwZWRTdG9yZVtdIHtcbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlKSB7XG4gICAgICBlbnN1cmVTdGF0ZXNBcmVEZWNvcmF0ZWQoc3RhdGVDbGFzc2VzKTtcbiAgICB9XG5cbiAgICBjb25zdCB7IG5ld1N0YXRlcyB9ID0gdGhpcy5hZGRUb1N0YXRlc01hcChzdGF0ZUNsYXNzZXMpO1xuICAgIGlmICghbmV3U3RhdGVzLmxlbmd0aCkgcmV0dXJuIFtdO1xuXG4gICAgY29uc3Qgc3RhdGVHcmFwaDogU3RhdGVLZXlHcmFwaCA9IGJ1aWxkR3JhcGgobmV3U3RhdGVzKTtcbiAgICBjb25zdCBzb3J0ZWRTdGF0ZXM6IHN0cmluZ1tdID0gdG9wb2xvZ2ljYWxTb3J0KHN0YXRlR3JhcGgpO1xuICAgIGNvbnN0IHBhdGhzOiDJtVBsYWluT2JqZWN0T2Y8c3RyaW5nPiA9IGZpbmRGdWxsUGFyZW50UGF0aChzdGF0ZUdyYXBoKTtcbiAgICBjb25zdCBuYW1lR3JhcGg6IMm1UGxhaW5PYmplY3RPZjzJtVN0YXRlQ2xhc3NJbnRlcm5hbD4gPSBuYW1lVG9TdGF0ZShuZXdTdGF0ZXMpO1xuICAgIGNvbnN0IGJvb3RzdHJhcHBlZFN0b3JlczogTWFwcGVkU3RvcmVbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHNvcnRlZFN0YXRlcykge1xuICAgICAgY29uc3Qgc3RhdGVDbGFzczogybVTdGF0ZUNsYXNzSW50ZXJuYWwgPSBuYW1lR3JhcGhbbmFtZV07XG4gICAgICBjb25zdCBwYXRoOiBzdHJpbmcgPSBwYXRoc1tuYW1lXTtcbiAgICAgIGNvbnN0IG1ldGE6IMm1TWV0YURhdGFNb2RlbCA9IHN0YXRlQ2xhc3NbybVNRVRBX0tFWV0hO1xuXG4gICAgICB0aGlzLmFkZFJ1bnRpbWVJbmZvVG9NZXRhKG1ldGEsIHBhdGgpO1xuXG4gICAgICAvLyBOb3RlOiBwcmV2aW91c2x5IHdlIGNhbGxlZCBgZW5zdXJlU3RhdGVDbGFzc0lzSW5qZWN0YWJsZWAgd2l0aGluIHRoZVxuICAgICAgLy8gYFN0YXRlYCBkZWNvcmF0b3IuIFRoaXMgY2hlY2sgaXMgbW92ZWQgaGVyZSBiZWNhdXNlIHRoZSBgybVwcm92YCBwcm9wZXJ0eVxuICAgICAgLy8gd2lsbCBub3QgZXhpc3Qgb24gdGhlIGNsYXNzIGluIEpJVCBtb2RlIChiZWNhdXNlIGl0J3Mgc2V0IGFzeW5jaHJvbm91c2x5XG4gICAgICAvLyBkdXJpbmcgSklUIGNvbXBpbGF0aW9uIHRocm91Z2ggYE9iamVjdC5kZWZpbmVQcm9wZXJ0eWApLlxuICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSkge1xuICAgICAgICBlbnN1cmVTdGF0ZUNsYXNzSXNJbmplY3RhYmxlKHN0YXRlQ2xhc3MpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdGF0ZU1hcDogTWFwcGVkU3RvcmUgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHBhdGgsXG4gICAgICAgIGlzSW5pdGlhbGlzZWQ6IGZhbHNlLFxuICAgICAgICBhY3Rpb25zOiBtZXRhLmFjdGlvbnMsXG4gICAgICAgIGluc3RhbmNlOiBpbmplY3Qoc3RhdGVDbGFzcyksXG4gICAgICAgIGRlZmF1bHRzOiBjbG9uZURlZmF1bHRzKG1ldGEuZGVmYXVsdHMpXG4gICAgICB9O1xuXG4gICAgICAvLyBlbnN1cmUgb3VyIHN0b3JlIGhhc24ndCBhbHJlYWR5IGJlZW4gYWRkZWRcbiAgICAgIC8vIGJ1dCBkb24ndCB0aHJvdyBzaW5jZSBpdCBjb3VsZCBiZSBsYXp5XG4gICAgICAvLyBsb2FkZWQgZnJvbSBkaWZmZXJlbnQgcGF0aHNcbiAgICAgIGlmICghdGhpcy5oYXNCZWVuTW91bnRlZEFuZEJvb3RzdHJhcHBlZChuYW1lLCBwYXRoKSkge1xuICAgICAgICBib290c3RyYXBwZWRTdG9yZXMucHVzaChzdGF0ZU1hcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3N0YXRlcy5wdXNoKHN0YXRlTWFwKTtcbiAgICAgIHRoaXMuaHlkcmF0ZUFjdGlvbk1ldGFzTWFwKHN0YXRlTWFwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYm9vdHN0cmFwcGVkU3RvcmVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIHNldCBvZiBzdGF0ZXMgdG8gdGhlIHN0b3JlIGFuZCByZXR1cm4gdGhlIGRlZmF1bHRzXG4gICAqL1xuICBhZGRBbmRSZXR1cm5EZWZhdWx0cyhzdGF0ZUNsYXNzZXM6IMm1U3RhdGVDbGFzc0ludGVybmFsW10pOiBTdGF0ZXNBbmREZWZhdWx0cyB7XG4gICAgY29uc3QgY2xhc3NlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXSA9IHN0YXRlQ2xhc3NlcyB8fCBbXTtcblxuICAgIGNvbnN0IG1hcHBlZFN0b3JlczogTWFwcGVkU3RvcmVbXSA9IHRoaXMuYWRkKGNsYXNzZXMpO1xuICAgIGNvbnN0IGRlZmF1bHRzID0gbWFwcGVkU3RvcmVzLnJlZHVjZShcbiAgICAgIChyZXN1bHQ6IGFueSwgbWFwcGVkU3RvcmU6IE1hcHBlZFN0b3JlKSA9PlxuICAgICAgICBzZXRWYWx1ZShyZXN1bHQsIG1hcHBlZFN0b3JlLnBhdGgsIG1hcHBlZFN0b3JlLmRlZmF1bHRzKSxcbiAgICAgIHt9XG4gICAgKTtcbiAgICByZXR1cm4geyBkZWZhdWx0cywgc3RhdGVzOiBtYXBwZWRTdG9yZXMgfTtcbiAgfVxuXG4gIGNvbm5lY3RBY3Rpb25IYW5kbGVycygpOiB2b2lkIHtcbiAgICB0aGlzLl9hY3Rpb25zU3Vic2NyaXB0aW9uID0gdGhpcy5fYWN0aW9uc1xuICAgICAgLnBpcGUoXG4gICAgICAgIGZpbHRlcigoY3R4OiBBY3Rpb25Db250ZXh0KSA9PiBjdHguc3RhdHVzID09PSBBY3Rpb25TdGF0dXMuRGlzcGF0Y2hlZCksXG4gICAgICAgIG1lcmdlTWFwKGN0eCA9PiB7XG4gICAgICAgICAgY29uc3QgYWN0aW9uOiBhbnkgPSBjdHguYWN0aW9uO1xuICAgICAgICAgIHJldHVybiB0aGlzLmludm9rZUFjdGlvbnMoYWN0aW9uKS5waXBlKFxuICAgICAgICAgICAgbWFwKCgpID0+IDxBY3Rpb25Db250ZXh0PnsgYWN0aW9uLCBzdGF0dXM6IEFjdGlvblN0YXR1cy5TdWNjZXNzZnVsIH0pLFxuICAgICAgICAgICAgZGVmYXVsdElmRW1wdHkoPEFjdGlvbkNvbnRleHQ+eyBhY3Rpb24sIHN0YXR1czogQWN0aW9uU3RhdHVzLkNhbmNlbGVkIH0pLFxuICAgICAgICAgICAgY2F0Y2hFcnJvcihlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5neHNVbmhhbmRsZWRFcnJvckhhbmRsZXIgPSAodGhpcy5fbmd4c1VuaGFuZGxlZEVycm9ySGFuZGxlciB8fD1cbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTmd4c1VuaGFuZGxlZEVycm9ySGFuZGxlcikpO1xuICAgICAgICAgICAgICBjb25zdCBoYW5kbGVhYmxlRXJyb3IgPSBhc3NpZ25VbmhhbmRsZWRDYWxsYmFjayhlcnJvciwgKCkgPT5cbiAgICAgICAgICAgICAgICBuZ3hzVW5oYW5kbGVkRXJyb3JIYW5kbGVyLmhhbmRsZUVycm9yKGVycm9yLCB7IGFjdGlvbiB9KVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICByZXR1cm4gb2YoPEFjdGlvbkNvbnRleHQ+e1xuICAgICAgICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICAgICAgICBzdGF0dXM6IEFjdGlvblN0YXR1cy5FcnJvcmVkLFxuICAgICAgICAgICAgICAgIGVycm9yOiBoYW5kbGVhYmxlRXJyb3JcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGN0eCA9PiB0aGlzLl9hY3Rpb25SZXN1bHRzLm5leHQoY3R4KSk7XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIGFjdGlvbnMgb24gdGhlIHN0YXRlcy5cbiAgICovXG4gIHByaXZhdGUgaW52b2tlQWN0aW9ucyhhY3Rpb246IGFueSk6IE9ic2VydmFibGU8dW5rbm93bltdPiB7XG4gICAgY29uc3QgdHlwZSA9IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UoYWN0aW9uKSE7XG4gICAgY29uc3QgcmVzdWx0czogT2JzZXJ2YWJsZTx1bmtub3duPltdID0gW107XG5cbiAgICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGRpc3BhdGNoZWQgYWN0aW9uIGhhcyBiZWVuIGhhbmRsZWQsIHRoaXMgaXMgYXNzaWduZWRcbiAgICAvLyB0byBgdHJ1ZWAgd2l0aGluIHRoZSBiZWxvdyBgZm9yYCBsb29wIGlmIGFueSBgYWN0aW9uTWV0YXNgIGhhcyBiZWVuIGZvdW5kLlxuICAgIGxldCBhY3Rpb25IYXNCZWVuSGFuZGxlZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgYWN0aW9uSGFuZGxlcnMgPSB0aGlzLl9hY3Rpb25SZWdpc3RyeS5nZXQodHlwZSk7XG5cbiAgICBpZiAoYWN0aW9uSGFuZGxlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgYWN0aW9uSGFuZGxlciBvZiBhY3Rpb25IYW5kbGVycykge1xuICAgICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmVzdWx0ID0gYWN0aW9uSGFuZGxlcihhY3Rpb24pO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVzdWx0ID0gdGhyb3dFcnJvcigoKSA9PiBlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuXG4gICAgICAgIGFjdGlvbkhhc0JlZW5IYW5kbGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGUgYE5neHNVbmhhbmRsZWRBY3Rpb25zTG9nZ2VyYCBpcyBhIHRyZWUtc2hha2FibGUgY2xhc3Mgd2hpY2ggZnVuY3Rpb25zXG4gICAgLy8gb25seSBkdXJpbmcgZGV2ZWxvcG1lbnQuXG4gICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSAmJiAhYWN0aW9uSGFzQmVlbkhhbmRsZWQpIHtcbiAgICAgIGNvbnN0IHVuaGFuZGxlZEFjdGlvbnNMb2dnZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoTmd4c1VuaGFuZGxlZEFjdGlvbnNMb2dnZXIsIG51bGwpO1xuICAgICAgLy8gVGhlIGBOZ3hzVW5oYW5kbGVkQWN0aW9uc0xvZ2dlcmAgd2lsbCBub3QgYmUgcmVzb2x2ZWQgYnkgdGhlIGluamVjdG9yIGlmIHRoZVxuICAgICAgLy8gYE5neHNEZXZlbG9wbWVudE1vZHVsZWAgaXMgbm90IHByb3ZpZGVkLiBJdCdzIGVub3VnaCB0byBjaGVjayB3aGV0aGVyIHRoZSBgaW5qZWN0b3IuZ2V0YFxuICAgICAgLy8gZGlkbid0IHJldHVybiBgbnVsbGAgc28gd2UgbWF5IGVuc3VyZSB0aGUgbW9kdWxlIGhhcyBiZWVuIGltcG9ydGVkLlxuICAgICAgdW5oYW5kbGVkQWN0aW9uc0xvZ2dlcj8ud2FybihhY3Rpb24pO1xuICAgIH1cblxuICAgIGlmICghcmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdHMucHVzaChvZih1bmRlZmluZWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ya0pvaW4ocmVzdWx0cyk7XG4gIH1cblxuICBwcml2YXRlIGFkZFRvU3RhdGVzTWFwKHN0YXRlQ2xhc3NlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXSk6IHtcbiAgICBuZXdTdGF0ZXM6IMm1U3RhdGVDbGFzc0ludGVybmFsW107XG4gIH0ge1xuICAgIGNvbnN0IG5ld1N0YXRlczogybVTdGF0ZUNsYXNzSW50ZXJuYWxbXSA9IFtdO1xuICAgIGNvbnN0IHN0YXRlc01hcDogU3RhdGVzQnlOYW1lID0gdGhpcy5fc3RhdGVzQnlOYW1lO1xuXG4gICAgZm9yIChjb25zdCBzdGF0ZUNsYXNzIG9mIHN0YXRlQ2xhc3Nlcykge1xuICAgICAgY29uc3Qgc3RhdGVOYW1lID0gybVnZXRTdG9yZU1ldGFkYXRhKHN0YXRlQ2xhc3MpLm5hbWUhO1xuICAgICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSkge1xuICAgICAgICBlbnN1cmVTdGF0ZU5hbWVJc1VuaXF1ZShzdGF0ZU5hbWUsIHN0YXRlQ2xhc3MsIHN0YXRlc01hcCk7XG4gICAgICB9XG4gICAgICBjb25zdCB1bm1vdW50ZWRTdGF0ZSA9ICFzdGF0ZXNNYXBbc3RhdGVOYW1lXTtcbiAgICAgIGlmICh1bm1vdW50ZWRTdGF0ZSkge1xuICAgICAgICBuZXdTdGF0ZXMucHVzaChzdGF0ZUNsYXNzKTtcbiAgICAgICAgc3RhdGVzTWFwW3N0YXRlTmFtZV0gPSBzdGF0ZUNsYXNzO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IG5ld1N0YXRlcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRSdW50aW1lSW5mb1RvTWV0YShtZXRhOiDJtU1ldGFEYXRhTW9kZWwsIHBhdGg6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlUGF0aHNbbWV0YS5uYW1lIV0gPSBwYXRoO1xuICAgIC8vIFRPRE86IHZlcnNpb25zIGFmdGVyIHYzIC0gd2UgcGxhbiB0byBnZXQgcmlkIG9mIHRoZSBgcGF0aGAgcHJvcGVydHkgYmVjYXVzZSBpdCBpcyBub24tZGV0ZXJtaW5pc3RpY1xuICAgIC8vIHdlIGNhbiBkbyB0aGlzIHdoZW4gd2UgZ2V0IHJpZCBvZiB0aGUgaW5jb3JyZWN0bHkgZXhwb3NlZCBnZXRTdG9yZU1ldGFkYXRhXG4gICAgLy8gV2Ugd2lsbCBuZWVkIHRvIGNvbWUgdXAgd2l0aCBhbiBhbHRlcm5hdGl2ZSB0byB3aGF0IHdhcyBleHBvc2VkIGluIHYzIGJlY2F1c2UgdGhpcyBpcyB1c2VkIGJ5IG1hbnkgcGx1Z2luc1xuICAgIG1ldGEucGF0aCA9IHBhdGg7XG4gIH1cblxuICBwcml2YXRlIGhhc0JlZW5Nb3VudGVkQW5kQm9vdHN0cmFwcGVkKG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWVJc0Jvb3RzdHJhcHBlZEluSW5pdGlhbFN0YXRlOiBib29sZWFuID1cbiAgICAgIGdldFZhbHVlKHRoaXMuX2luaXRpYWxTdGF0ZSwgcGF0aCkgIT09IHVuZGVmaW5lZDtcbiAgICAvLyBUaGlzIGNoZWNrcyB3aGV0aGVyIGEgc3RhdGUgaGFzIGJlZW4gYWxyZWFkeSBhZGRlZCB0byB0aGUgZ2xvYmFsIGdyYXBoIGFuZFxuICAgIC8vIGl0cyBsaWZlY3ljbGUgaXMgaW4gJ2Jvb3RzdHJhcHBlZCcgc3RhdGUuXG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlc0J5TmFtZVtuYW1lXSAmJiB2YWx1ZUlzQm9vdHN0cmFwcGVkSW5Jbml0aWFsU3RhdGU7XG4gIH1cblxuICBwcml2YXRlIGh5ZHJhdGVBY3Rpb25NZXRhc01hcCh7IHBhdGgsIGFjdGlvbnMsIGluc3RhbmNlIH06IE1hcHBlZFN0b3JlKTogdm9pZCB7XG4gICAgY29uc3QgeyBkaXNwYXRjaGVkJCB9ID0gdGhpcy5fYWN0aW9ucztcbiAgICBmb3IgKGNvbnN0IGFjdGlvblR5cGUgb2YgT2JqZWN0LmtleXMoYWN0aW9ucykpIHtcbiAgICAgIGNvbnN0IGFjdGlvbkhhbmRsZXJzID0gYWN0aW9uc1thY3Rpb25UeXBlXS5tYXAoYWN0aW9uTWV0YSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbmNlbGFibGUgPSAhIWFjdGlvbk1ldGEub3B0aW9ucy5jYW5jZWxVbmNvbXBsZXRlZDtcblxuICAgICAgICByZXR1cm4gKGFjdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVDb250ZXh0ID0gdGhpcy5fc3RhdGVDb250ZXh0RmFjdG9yeS5jcmVhdGVTdGF0ZUNvbnRleHQocGF0aCk7XG5cbiAgICAgICAgICBsZXQgcmVzdWx0ID0gaW5zdGFuY2VbYWN0aW9uTWV0YS5mbl0oc3RhdGVDb250ZXh0LCBhY3Rpb24pO1xuXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byB1c2UgYGlzUHJvbWlzZWAgaW5zdGVhZCBvZiBjaGVja2luZyB3aGV0aGVyXG4gICAgICAgICAgLy8gYHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2VgLiBJbiB6b25lLmpzIHBhdGNoZWQgZW52aXJvbm1lbnRzLCBgZ2xvYmFsLlByb21pc2VgXG4gICAgICAgICAgLy8gaXMgdGhlIGBab25lQXdhcmVQcm9taXNlYC4gU29tZSBBUElzLCB3aGljaCBhcmUgbGlrZWx5IG5vdCBwYXRjaGVkIGJ5IHpvbmUuanNcbiAgICAgICAgICAvLyBmb3IgY2VydGFpbiByZWFzb25zLCBtaWdodCBub3Qgd29yayB3aXRoIGBpbnN0YW5jZW9mYC4gRm9yIGluc3RhbmNlLCB0aGUgZHluYW1pY1xuICAgICAgICAgIC8vIGltcG9ydCByZXR1cm5zIGEgbmF0aXZlIHByb21pc2UgKG5vdCBhIGBab25lQXdhcmVQcm9taXNlYCksIGNhdXNpbmcgdGhpcyBjaGVjayB0b1xuICAgICAgICAgIC8vIGJlIGZhbHN5LlxuICAgICAgICAgIGlmICjJtWlzUHJvbWlzZShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBmcm9tKHJlc3VsdCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGlzT2JzZXJ2YWJsZShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucGlwZShcbiAgICAgICAgICAgICAgbWVyZ2VNYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoybVpc1Byb21pc2UodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gZnJvbSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpc09ic2VydmFibGUodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBvZih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgLy8gSWYgdGhpcyBvYnNlcnZhYmxlIGhhcyBjb21wbGV0ZWQgd2l0aG91dCBlbWl0dGluZyBhbnkgdmFsdWVzLFxuICAgICAgICAgICAgICAvLyB3ZSB3b3VsZG4ndCB3YW50IHRvIGNvbXBsZXRlIHRoZSBlbnRpcmUgY2hhaW4gb2YgYWN0aW9ucy5cbiAgICAgICAgICAgICAgLy8gSWYgYW55IG9ic2VydmFibGUgY29tcGxldGVzLCB0aGVuIHRoZSBhY3Rpb24gd2lsbCBiZSBjYW5jZWxlZC5cbiAgICAgICAgICAgICAgLy8gRm9yIGluc3RhbmNlLCBpZiBhbnkgYWN0aW9uIGhhbmRsZXIgaGFkIGEgc3RhdGVtZW50IGxpa2VcbiAgICAgICAgICAgICAgLy8gYGhhbmRsZXIoY3R4KSB7IHJldHVybiBFTVBUWTsgfWAsIHRoZW4gdGhlIGFjdGlvbiB3b3VsZCBiZSBjYW5jZWxlZC5cbiAgICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9uZ3hzL3N0b3JlL2lzc3Vlcy8xNTY4XG4gICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBhY3R1YWxseSBkb24ndCBjYXJlIGFib3V0IHRoZSByZXR1cm4gdHlwZTsgd2Ugb25seSBjYXJlXG4gICAgICAgICAgICAgIC8vIGFib3V0IGVtaXNzaW9uLCBhbmQgdGh1cyBgdW5kZWZpbmVkYCBpcyBhcHBsaWNhYmxlIGJ5IHRoZSBmcmFtZXdvcmsuXG4gICAgICAgICAgICAgIGRlZmF1bHRJZkVtcHR5KHVuZGVmaW5lZClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmIChjYW5jZWxhYmxlKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vdGlmaWVyJCA9IGRpc3BhdGNoZWQkLnBpcGUob2ZBY3Rpb25EaXNwYXRjaGVkKGFjdGlvbikpO1xuICAgICAgICAgICAgICByZXN1bHQgPSByZXN1bHQucGlwZSh0YWtlVW50aWwobm90aWZpZXIkKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5waXBlKFxuICAgICAgICAgICAgICAvLyBOb3RlIHRoYXQgd2UgdXNlIHRoZSBgZmluYWxpemVgIG9wZXJhdG9yIG9ubHkgd2hlbiB0aGUgYWN0aW9uIGhhbmRsZXJcbiAgICAgICAgICAgICAgLy8gcmV0dXJucyBhbiBvYnNlcnZhYmxlLiBJZiB0aGUgYWN0aW9uIGhhbmRsZXIgaXMgc3luY2hyb25vdXMsIHdlIGRvIG5vdFxuICAgICAgICAgICAgICAvLyBuZWVkIHRvIHNldCB0aGUgc3RhdGUgY29udGV4dCBmdW5jdGlvbnMgdG8gYG5vb3BgLCBhcyB0aGUgYWJzZW5jZSBvZiBhXG4gICAgICAgICAgICAgIC8vIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgbm8gYXN5bmNocm9ub3VzIGZ1bmN0aW9uYWxpdHkuIElmIHRoZSBoYW5kbGVyJ3NcbiAgICAgICAgICAgICAgLy8gcmVzdWx0IGlzIHVuc3Vic2NyaWJlZCAoZWl0aGVyIGJlY2F1c2UgdGhlIG9ic2VydmFibGUgaGFzIGNvbXBsZXRlZCBvciBpdFxuICAgICAgICAgICAgICAvLyB3YXMgdW5zdWJzY3JpYmVkIGJ5IGB0YWtlVW50aWxgIGR1ZSB0byBhIG5ldyBhY3Rpb24gYmVpbmcgZGlzcGF0Y2hlZCksXG4gICAgICAgICAgICAgIC8vIHdlIHByZXZlbnQgd3JpdGluZyB0byB0aGUgc3RhdGUgY29udGV4dC5cbiAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHN0YXRlQ29udGV4dC5zZXRTdGF0ZSA9IG5vb3A7XG4gICAgICAgICAgICAgICAgc3RhdGVDb250ZXh0LnBhdGNoU3RhdGUgPSBub29wO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIGFjdGlvbiBoYW5kbGVyIGlzIHN5bmNocm9ub3VzIGFuZCByZXR1cm5zIG5vdGhpbmcgKGB2b2lkYCksIHdlXG4gICAgICAgICAgICAvLyBzdGlsbCBoYXZlIHRvIGNvbnZlcnQgdGhlIHJlc3VsdCB0byBhIHN5bmNocm9ub3VzIG9ic2VydmFibGUuXG4gICAgICAgICAgICByZXN1bHQgPSBvZih1bmRlZmluZWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgZm9yIChjb25zdCBhY3Rpb25IYW5kbGVyIG9mIGFjdGlvbkhhbmRsZXJzKSB7XG4gICAgICAgIHRoaXMuX2FjdGlvblJlZ2lzdHJ5LnJlZ2lzdGVyKGFjdGlvblR5cGUsIGFjdGlvbkhhbmRsZXIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGlzIGlzIHVzZWQgdG8gcmVwbGFjZSBgc2V0U3RhdGVgIGFuZCBgcGF0Y2hTdGF0ZWAgb25jZSB0aGUgYWN0aW9uXG4vLyBoYW5kbGVyIGhhcyBiZWVuIHVuc3Vic2NyaWJlZCBvciBjb21wbGV0ZWQsIHRvIHByZXZlbnQgd3JpdGluZ1xuLy8gdG8gdGhlIHN0YXRlIGNvbnRleHQuXG5mdW5jdGlvbiBub29wKCkge31cbiJdfQ==
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import { FEATURE_STATE_TOKEN } from '../symbols';
|
|
2
2
|
import { PluginManager } from '../plugin-manager';
|
|
3
|
-
import { StateFactory } from '../internal/state-factory';
|
|
4
3
|
/**
|
|
5
4
|
* This function provides the required providers when calling `NgxsModule.forFeature`
|
|
6
5
|
* or `provideStates`. It is shared between the NgModule and standalone APIs.
|
|
7
6
|
*/
|
|
8
7
|
export function getFeatureProviders(states) {
|
|
9
8
|
return [
|
|
10
|
-
StateFactory,
|
|
11
9
|
PluginManager,
|
|
12
10
|
...states,
|
|
13
11
|
{
|
|
@@ -17,4 +15,4 @@ export function getFeatureProviders(states) {
|
|
|
17
15
|
}
|
|
18
16
|
];
|
|
19
17
|
}
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc3RhbmRhbG9uZS1mZWF0dXJlcy9mZWF0dXJlLXByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxEOzs7R0FHRztBQUNILE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFxQjtJQUN2RCxPQUFPO1FBQ0wsYUFBYTtRQUNiLEdBQUcsTUFBTTtRQUNUO1lBQ0UsT0FBTyxFQUFFLG1CQUFtQjtZQUM1QixLQUFLLEVBQUUsSUFBSTtZQUNYLFFBQVEsRUFBRSxNQUFNO1NBQ2pCO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgybVTdGF0ZUNsYXNzIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcblxuaW1wb3J0IHsgRkVBVFVSRV9TVEFURV9UT0tFTiB9IGZyb20gJy4uL3N5bWJvbHMnO1xuaW1wb3J0IHsgUGx1Z2luTWFuYWdlciB9IGZyb20gJy4uL3BsdWdpbi1tYW5hZ2VyJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSByZXF1aXJlZCBwcm92aWRlcnMgd2hlbiBjYWxsaW5nIGBOZ3hzTW9kdWxlLmZvckZlYXR1cmVgXG4gKiBvciBgcHJvdmlkZVN0YXRlc2AuIEl0IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBOZ01vZHVsZSBhbmQgc3RhbmRhbG9uZSBBUElzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmVhdHVyZVByb3ZpZGVycyhzdGF0ZXM6IMm1U3RhdGVDbGFzc1tdKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAgUGx1Z2luTWFuYWdlcixcbiAgICAuLi5zdGF0ZXMsXG4gICAge1xuICAgICAgcHJvdmlkZTogRkVBVFVSRV9TVEFURV9UT0tFTixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlVmFsdWU6IHN0YXRlc1xuICAgIH1cbiAgXTtcbn1cbiJdfQ==
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { APP_BOOTSTRAP_LISTENER, inject } from '@angular/core';
|
|
2
2
|
import { ɵNgxsAppBootstrappedState } from '@ngxs/store/internals';
|
|
3
|
-
import { StateFactory } from '../internal/state-factory';
|
|
4
3
|
import { CUSTOM_NGXS_EXECUTION_STRATEGY } from '../execution/symbols';
|
|
5
4
|
import { ROOT_STATE_TOKEN, NGXS_OPTIONS } from '../symbols';
|
|
6
5
|
/**
|
|
@@ -9,7 +8,6 @@ import { ROOT_STATE_TOKEN, NGXS_OPTIONS } from '../symbols';
|
|
|
9
8
|
*/
|
|
10
9
|
export function getRootProviders(states, options) {
|
|
11
10
|
return [
|
|
12
|
-
StateFactory,
|
|
13
11
|
...states,
|
|
14
12
|
{
|
|
15
13
|
provide: ROOT_STATE_TOKEN,
|
|
@@ -33,4 +31,4 @@ export function getRootProviders(states, options) {
|
|
|
33
31
|
}
|
|
34
32
|
];
|
|
35
33
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc3RhbmRhbG9uZS1mZWF0dXJlcy9yb290LXByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQVksTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBZSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9FLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3RFLE9BQU8sRUFBcUIsZ0JBQWdCLEVBQUUsWUFBWSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRS9FOzs7R0FHRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsTUFBcUIsRUFDckIsT0FBMEI7SUFFMUIsT0FBTztRQUNMLEdBQUcsTUFBTTtRQUNUO1lBQ0UsT0FBTyxFQUFFLGdCQUFnQjtZQUN6QixRQUFRLEVBQUUsTUFBTTtTQUNqQjtRQUNEO1lBQ0UsT0FBTyxFQUFFLHNCQUFzQjtZQUMvQixVQUFVLEVBQUUsR0FBRyxFQUFFO2dCQUNmLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUM7Z0JBQy9ELE9BQU8sR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDaEQsQ0FBQztZQUNELEtBQUssRUFBRSxJQUFJO1NBQ1o7UUFDRDtZQUNFLE9BQU8sRUFBRSxZQUFZO1lBQ3JCLFFBQVEsRUFBRSxPQUFPO1NBQ2xCO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsOEJBQThCO1lBQ3ZDLFFBQVEsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1NBQ3BDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLCBQcm92aWRlciwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyDJtVN0YXRlQ2xhc3MsIMm1Tmd4c0FwcEJvb3RzdHJhcHBlZFN0YXRlIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcblxuaW1wb3J0IHsgQ1VTVE9NX05HWFNfRVhFQ1VUSU9OX1NUUkFURUdZIH0gZnJvbSAnLi4vZXhlY3V0aW9uL3N5bWJvbHMnO1xuaW1wb3J0IHsgTmd4c01vZHVsZU9wdGlvbnMsIFJPT1RfU1RBVEVfVE9LRU4sIE5HWFNfT1BUSU9OUyB9IGZyb20gJy4uL3N5bWJvbHMnO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgdGhlIHJlcXVpcmVkIHByb3ZpZGVycyB3aGVuIGludm9raW5nIGBOZ3hzTW9kdWxlLmZvclJvb3RgXG4gKiBvciBgcHJvdmlkZVN0b3JlYC4gSXQgaXMgc2hhcmVkIGJldHdlZW4gdGhlIE5nTW9kdWxlIGFuZCBzdGFuZGFsb25lIEFQSXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRSb290UHJvdmlkZXJzKFxuICBzdGF0ZXM6IMm1U3RhdGVDbGFzc1tdLFxuICBvcHRpb25zOiBOZ3hzTW9kdWxlT3B0aW9uc1xuKTogUHJvdmlkZXJbXSB7XG4gIHJldHVybiBbXG4gICAgLi4uc3RhdGVzLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFJPT1RfU1RBVEVfVE9LRU4sXG4gICAgICB1c2VWYWx1ZTogc3RhdGVzXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfQk9PVFNUUkFQX0xJU1RFTkVSLFxuICAgICAgdXNlRmFjdG9yeTogKCkgPT4ge1xuICAgICAgICBjb25zdCBhcHBCb290c3RyYXBwZWRTdGF0ZSA9IGluamVjdCjJtU5neHNBcHBCb290c3RyYXBwZWRTdGF0ZSk7XG4gICAgICAgIHJldHVybiAoKSA9PiBhcHBCb290c3RyYXBwZWRTdGF0ZS5ib290c3RyYXAoKTtcbiAgICAgIH0sXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdYU19PUFRJT05TLFxuICAgICAgdXNlVmFsdWU6IG9wdGlvbnNcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IENVU1RPTV9OR1hTX0VYRUNVVElPTl9TVFJBVEVHWSxcbiAgICAgIHVzZVZhbHVlOiBvcHRpb25zLmV4ZWN1dGlvblN0cmF0ZWd5XG4gICAgfVxuICBdO1xufVxuIl19
|
package/fesm2022/ngxs-store.mjs
CHANGED
|
@@ -1241,20 +1241,17 @@ function cloneDefaults(defaults) {
|
|
|
1241
1241
|
* The `StateFactory` class adds root and feature states to the graph.
|
|
1242
1242
|
* This extracts state names from state classes, checks if they already
|
|
1243
1243
|
* exist in the global graph, throws errors if their names are invalid, etc.
|
|
1244
|
-
* See its constructor, state factories inject state factories that are
|
|
1245
|
-
* parent-level providers. This is required to get feature states from the
|
|
1246
|
-
* injector on the same level.
|
|
1247
1244
|
*
|
|
1248
|
-
*
|
|
1249
|
-
*
|
|
1250
|
-
*
|
|
1245
|
+
* Root and feature initializers call `addAndReturnDefaults()` to add those states
|
|
1246
|
+
* to the global graph. Since `addAndReturnDefaults` runs within the injection
|
|
1247
|
+
* context (which might be the root injector or a feature injector), we can
|
|
1248
|
+
* retrieve an instance of the state class using `inject(StateClass)`.
|
|
1251
1249
|
* @ignore
|
|
1252
1250
|
*/
|
|
1253
1251
|
class StateFactory {
|
|
1254
1252
|
constructor() {
|
|
1255
1253
|
this._injector = inject(Injector);
|
|
1256
1254
|
this._config = inject(NgxsConfig);
|
|
1257
|
-
this._parentFactory = inject(StateFactory, { optional: true, skipSelf: true });
|
|
1258
1255
|
this._stateContextFactory = inject(StateContextFactory);
|
|
1259
1256
|
this._actions = inject(InternalActions);
|
|
1260
1257
|
this._actionResults = inject(InternalDispatchedActionResults);
|
|
@@ -1271,47 +1268,36 @@ class StateFactory {
|
|
|
1271
1268
|
const stateFactory = this;
|
|
1272
1269
|
const propGetter = stateFactory._propGetter;
|
|
1273
1270
|
function resolveGetter(key) {
|
|
1274
|
-
const path = stateFactory.
|
|
1271
|
+
const path = stateFactory._statePaths[key];
|
|
1275
1272
|
return path ? propGetter(path.split('.')) : null;
|
|
1276
1273
|
}
|
|
1277
|
-
const context =
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
if (getter) {
|
|
1285
|
-
return getter;
|
|
1286
|
-
}
|
|
1287
|
-
return (...args) => {
|
|
1288
|
-
// Late loaded getter
|
|
1289
|
-
if (!getter) {
|
|
1290
|
-
getter = /*@__INLINE__*/ resolveGetter(key);
|
|
1291
|
-
}
|
|
1292
|
-
return getter ? getter(...args) : undefined;
|
|
1293
|
-
};
|
|
1294
|
-
},
|
|
1295
|
-
getSelectorOptions(localOptions) {
|
|
1296
|
-
const globalSelectorOptions = stateFactory._config.selectorOptions;
|
|
1297
|
-
return {
|
|
1298
|
-
...globalSelectorOptions,
|
|
1299
|
-
...(localOptions || {})
|
|
1300
|
-
};
|
|
1274
|
+
const context = {
|
|
1275
|
+
getStateGetter(key) {
|
|
1276
|
+
// Use `@__INLINE__` annotation to forcely inline `resolveGetter`.
|
|
1277
|
+
// This is a Terser annotation, which will function only in the production mode.
|
|
1278
|
+
let getter = /*@__INLINE__*/ resolveGetter(key);
|
|
1279
|
+
if (getter) {
|
|
1280
|
+
return getter;
|
|
1301
1281
|
}
|
|
1302
|
-
|
|
1282
|
+
return (...args) => {
|
|
1283
|
+
// Late loaded getter
|
|
1284
|
+
if (!getter) {
|
|
1285
|
+
getter = /*@__INLINE__*/ resolveGetter(key);
|
|
1286
|
+
}
|
|
1287
|
+
return getter ? getter(...args) : undefined;
|
|
1288
|
+
};
|
|
1289
|
+
},
|
|
1290
|
+
getSelectorOptions(localOptions) {
|
|
1291
|
+
const globalSelectorOptions = stateFactory._config.selectorOptions;
|
|
1292
|
+
return {
|
|
1293
|
+
...globalSelectorOptions,
|
|
1294
|
+
...(localOptions || {})
|
|
1295
|
+
};
|
|
1296
|
+
}
|
|
1297
|
+
};
|
|
1303
1298
|
return context;
|
|
1304
1299
|
});
|
|
1305
1300
|
}
|
|
1306
|
-
get states() {
|
|
1307
|
-
return this._parentFactory ? this._parentFactory.states : this._states;
|
|
1308
|
-
}
|
|
1309
|
-
get statesByName() {
|
|
1310
|
-
return this._parentFactory ? this._parentFactory.statesByName : this._statesByName;
|
|
1311
|
-
}
|
|
1312
|
-
get statePaths() {
|
|
1313
|
-
return this._parentFactory ? this._parentFactory.statePaths : this._statePaths;
|
|
1314
|
-
}
|
|
1315
1301
|
ngOnDestroy() {
|
|
1316
1302
|
this._actionsSubscription?.unsubscribe();
|
|
1317
1303
|
}
|
|
@@ -1347,7 +1333,7 @@ class StateFactory {
|
|
|
1347
1333
|
path,
|
|
1348
1334
|
isInitialised: false,
|
|
1349
1335
|
actions: meta.actions,
|
|
1350
|
-
instance:
|
|
1336
|
+
instance: inject(stateClass),
|
|
1351
1337
|
defaults: cloneDefaults(meta.defaults)
|
|
1352
1338
|
};
|
|
1353
1339
|
// ensure our store hasn't already been added
|
|
@@ -1356,7 +1342,7 @@ class StateFactory {
|
|
|
1356
1342
|
if (!this.hasBeenMountedAndBootstrapped(name, path)) {
|
|
1357
1343
|
bootstrappedStores.push(stateMap);
|
|
1358
1344
|
}
|
|
1359
|
-
this.
|
|
1345
|
+
this._states.push(stateMap);
|
|
1360
1346
|
this.hydrateActionMetasMap(stateMap);
|
|
1361
1347
|
}
|
|
1362
1348
|
return bootstrappedStores;
|
|
@@ -1371,12 +1357,6 @@ class StateFactory {
|
|
|
1371
1357
|
return { defaults, states: mappedStores };
|
|
1372
1358
|
}
|
|
1373
1359
|
connectActionHandlers() {
|
|
1374
|
-
// Note: We have to connect actions only once when the `StateFactory`
|
|
1375
|
-
// is being created for the first time. This checks if we're in
|
|
1376
|
-
// a child state factory and the parent state factory already exists.
|
|
1377
|
-
if (this._parentFactory || this._actionsSubscription !== null) {
|
|
1378
|
-
return;
|
|
1379
|
-
}
|
|
1380
1360
|
this._actionsSubscription = this._actions
|
|
1381
1361
|
.pipe(filter((ctx) => ctx.status === "DISPATCHED" /* ActionStatus.Dispatched */), mergeMap$1(ctx => {
|
|
1382
1362
|
const action = ctx.action;
|
|
@@ -1432,7 +1412,7 @@ class StateFactory {
|
|
|
1432
1412
|
}
|
|
1433
1413
|
addToStatesMap(stateClasses) {
|
|
1434
1414
|
const newStates = [];
|
|
1435
|
-
const statesMap = this.
|
|
1415
|
+
const statesMap = this._statesByName;
|
|
1436
1416
|
for (const stateClass of stateClasses) {
|
|
1437
1417
|
const stateName = _getStoreMetadata(stateClass).name;
|
|
1438
1418
|
if (typeof ngDevMode !== 'undefined' && ngDevMode) {
|
|
@@ -1447,7 +1427,7 @@ class StateFactory {
|
|
|
1447
1427
|
return { newStates };
|
|
1448
1428
|
}
|
|
1449
1429
|
addRuntimeInfoToMeta(meta, path) {
|
|
1450
|
-
this.
|
|
1430
|
+
this._statePaths[meta.name] = path;
|
|
1451
1431
|
// TODO: versions after v3 - we plan to get rid of the `path` property because it is non-deterministic
|
|
1452
1432
|
// we can do this when we get rid of the incorrectly exposed getStoreMetadata
|
|
1453
1433
|
// We will need to come up with an alternative to what was exposed in v3 because this is used by many plugins
|
|
@@ -1457,7 +1437,7 @@ class StateFactory {
|
|
|
1457
1437
|
const valueIsBootstrappedInInitialState = getValue(this._initialState, path) !== undefined;
|
|
1458
1438
|
// This checks whether a state has been already added to the global graph and
|
|
1459
1439
|
// its lifecycle is in 'bootstrapped' state.
|
|
1460
|
-
return this.
|
|
1440
|
+
return this._statesByName[name] && valueIsBootstrappedInInitialState;
|
|
1461
1441
|
}
|
|
1462
1442
|
hydrateActionMetasMap({ path, actions, instance }) {
|
|
1463
1443
|
const { dispatched$ } = this._actions;
|
|
@@ -1528,10 +1508,11 @@ class StateFactory {
|
|
|
1528
1508
|
}
|
|
1529
1509
|
}
|
|
1530
1510
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
1531
|
-
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory }); }
|
|
1511
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, providedIn: 'root' }); }
|
|
1532
1512
|
}
|
|
1533
1513
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: StateFactory, decorators: [{
|
|
1534
|
-
type: Injectable
|
|
1514
|
+
type: Injectable,
|
|
1515
|
+
args: [{ providedIn: 'root' }]
|
|
1535
1516
|
}] });
|
|
1536
1517
|
// This is used to replace `setState` and `patchState` once the action
|
|
1537
1518
|
// handler has been unsubscribed or completed, to prevent writing
|
|
@@ -1883,7 +1864,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
|
|
|
1883
1864
|
*/
|
|
1884
1865
|
function getRootProviders(states, options) {
|
|
1885
1866
|
return [
|
|
1886
|
-
StateFactory,
|
|
1887
1867
|
...states,
|
|
1888
1868
|
{
|
|
1889
1869
|
provide: ROOT_STATE_TOKEN,
|
|
@@ -1914,7 +1894,6 @@ function getRootProviders(states, options) {
|
|
|
1914
1894
|
*/
|
|
1915
1895
|
function getFeatureProviders(states) {
|
|
1916
1896
|
return [
|
|
1917
|
-
StateFactory,
|
|
1918
1897
|
PluginManager,
|
|
1919
1898
|
...states,
|
|
1920
1899
|
{
|