ngx-speculoos 8.0.0 → 9.0.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/esm2020/lib/route.mjs
CHANGED
|
@@ -89,7 +89,6 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
|
|
|
89
89
|
this._firstChild = null;
|
|
90
90
|
this._children = [];
|
|
91
91
|
this._pathFromRoot = [];
|
|
92
|
-
this._routeConfig = null;
|
|
93
92
|
this._root = this;
|
|
94
93
|
}
|
|
95
94
|
get parent() {
|
|
@@ -122,13 +121,17 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
|
|
|
122
121
|
set pathFromRoot(value) {
|
|
123
122
|
this._pathFromRoot = value;
|
|
124
123
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
124
|
+
get title() {
|
|
125
|
+
return this._title;
|
|
126
|
+
}
|
|
127
|
+
set title(value) {
|
|
128
|
+
this._title = value;
|
|
129
|
+
}
|
|
130
|
+
get paramMap() {
|
|
131
|
+
return convertToParamMap(this.params);
|
|
129
132
|
}
|
|
130
|
-
|
|
131
|
-
this.
|
|
133
|
+
get queryParamMap() {
|
|
134
|
+
return convertToParamMap(this.queryParams);
|
|
132
135
|
}
|
|
133
136
|
}
|
|
134
137
|
/**
|
|
@@ -144,6 +147,8 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
|
|
|
144
147
|
* - when changing the params, query params, fragment, etc., their associated observable emits unconditionally, instead of
|
|
145
148
|
* first checking if the value is actually different from before. It's thus the responsibility of the tester to not
|
|
146
149
|
* change the values if they're the same as before.
|
|
150
|
+
* - the params, paramMap, queryParams and queryParamMap objects of the route snapshot change when params or query params are set
|
|
151
|
+
* on the stub route. So if the code keeps a reference to params or paramMaps, it won't see the changes.
|
|
147
152
|
*/
|
|
148
153
|
export class ActivatedRouteStub extends ActivatedRoute {
|
|
149
154
|
/**
|
|
@@ -165,8 +170,10 @@ export class ActivatedRouteStub extends ActivatedRoute {
|
|
|
165
170
|
snapshot.params = options?.params ?? {};
|
|
166
171
|
snapshot.queryParams = options?.queryParams ?? {};
|
|
167
172
|
snapshot.data = options?.data ?? {};
|
|
173
|
+
snapshot.title = options?.title;
|
|
168
174
|
snapshot.fragment = options?.fragment ?? null;
|
|
169
175
|
snapshot.url = options?.url ?? [];
|
|
176
|
+
// @ts-expect-error the routeConfig is readonly, but we need to overwrite it here
|
|
170
177
|
snapshot.routeConfig = options?.routeConfig ?? null;
|
|
171
178
|
snapshot.firstChild = this.firstChild?.snapshot ?? null;
|
|
172
179
|
snapshot.children = this.children?.map(route => route.snapshot) ?? [];
|
|
@@ -176,6 +183,7 @@ export class ActivatedRouteStub extends ActivatedRoute {
|
|
|
176
183
|
this.paramsSubject = new BehaviorSubject(this.snapshot.params);
|
|
177
184
|
this.queryParamsSubject = new BehaviorSubject(this.snapshot.queryParams);
|
|
178
185
|
this.dataSubject = new BehaviorSubject(this.snapshot.data);
|
|
186
|
+
this.titleSubject = new BehaviorSubject(this.snapshot.title);
|
|
179
187
|
this.fragmentSubject = new BehaviorSubject(this.snapshot.fragment);
|
|
180
188
|
this.urlSubject = new BehaviorSubject(this.snapshot.url);
|
|
181
189
|
this.params = this.paramsSubject.asObservable();
|
|
@@ -183,6 +191,8 @@ export class ActivatedRouteStub extends ActivatedRoute {
|
|
|
183
191
|
this.data = this.dataSubject.asObservable();
|
|
184
192
|
this.fragment = this.fragmentSubject.asObservable();
|
|
185
193
|
this.url = this.urlSubject.asObservable();
|
|
194
|
+
// @ts-expect-error the title is readonly, but we need to be able to initialize it here
|
|
195
|
+
this.title = this.titleSubject.asObservable();
|
|
186
196
|
}
|
|
187
197
|
get root() {
|
|
188
198
|
return this._root;
|
|
@@ -203,7 +213,7 @@ export class ActivatedRouteStub extends ActivatedRoute {
|
|
|
203
213
|
return this.snapshot.routeConfig;
|
|
204
214
|
}
|
|
205
215
|
/**
|
|
206
|
-
* Triggers a navigation with the given new parameters. All the other parts (query params etc.) stay as
|
|
216
|
+
* Triggers a navigation with the given new parameters. All the other parts (query params etc.) stay as they are.
|
|
207
217
|
* This is a shortcut to `triggerNavigation` that can be used to only change the parameters.
|
|
208
218
|
*/
|
|
209
219
|
setParams(params) {
|
|
@@ -211,7 +221,7 @@ export class ActivatedRouteStub extends ActivatedRoute {
|
|
|
211
221
|
}
|
|
212
222
|
/**
|
|
213
223
|
* Triggers a navigation with the given new parameter. The other parameters, as well as all the other parts (query params etc.)
|
|
214
|
-
* stay as
|
|
224
|
+
* stay as they are.
|
|
215
225
|
* This is a shortcut to `triggerNavigation` that can be used to only change one parameter.
|
|
216
226
|
*/
|
|
217
227
|
setParam(name, value) {
|
|
@@ -248,6 +258,14 @@ export class ActivatedRouteStub extends ActivatedRoute {
|
|
|
248
258
|
setDataItem(name, value) {
|
|
249
259
|
this.setData({ ...this.snapshot.data, [name]: value });
|
|
250
260
|
}
|
|
261
|
+
/**
|
|
262
|
+
* Triggers a navigation with the given new title. The other parameters, as well as all the other parts (params etc.)
|
|
263
|
+
* stay as the are.
|
|
264
|
+
* This is a shortcut to `triggerNavigation` that can be used to only change the title.
|
|
265
|
+
*/
|
|
266
|
+
setTitle(title) {
|
|
267
|
+
this.triggerNavigation({ title: { value: title } });
|
|
268
|
+
}
|
|
251
269
|
/**
|
|
252
270
|
* Triggers a navigation with the given new fragment. The other parts (params etc.) stay as the are.
|
|
253
271
|
* This is a shortcut to `triggerNavigation` that can be used to only change the fragment.
|
|
@@ -271,6 +289,13 @@ export class ActivatedRouteStub extends ActivatedRoute {
|
|
|
271
289
|
*
|
|
272
290
|
* So, setting params and query params will make the params and queryParams observables emit, but not the fragment, data and
|
|
273
291
|
* url observables for example. This is consistent to how the router behaves.
|
|
292
|
+
*
|
|
293
|
+
* Note: since the title of a route can become undefined, in order to be able to distinguish between a navigation which leaves the title
|
|
294
|
+
* as it is and a navigation that sets the title to undefined, a wrapper object is used for the title. So
|
|
295
|
+
*
|
|
296
|
+
* - `triggerNavigation({ params:... })` leaves the title as is because it's undefined in the options
|
|
297
|
+
* - `triggerNavigation({ title: { value: 'test' } })` sets the title to 'test'
|
|
298
|
+
* - `triggerNavigation({ title: { value: undefined } })` sets the title to undefined
|
|
274
299
|
*/
|
|
275
300
|
triggerNavigation(options) {
|
|
276
301
|
// set the snapshot first
|
|
@@ -286,6 +311,10 @@ export class ActivatedRouteStub extends ActivatedRoute {
|
|
|
286
311
|
if (options.data) {
|
|
287
312
|
this.snapshot.data = options.data;
|
|
288
313
|
}
|
|
314
|
+
if (options.title) {
|
|
315
|
+
// @ts-expect-error the title is readonly, but we need to be able to overwrite it here
|
|
316
|
+
this.snapshot.title = options.title.value;
|
|
317
|
+
}
|
|
289
318
|
if (options.url) {
|
|
290
319
|
this.snapshot.url = options.url;
|
|
291
320
|
}
|
|
@@ -302,6 +331,9 @@ export class ActivatedRouteStub extends ActivatedRoute {
|
|
|
302
331
|
if (options.data) {
|
|
303
332
|
this.dataSubject.next(this.snapshot.data);
|
|
304
333
|
}
|
|
334
|
+
if (options.title) {
|
|
335
|
+
this.titleSubject.next(this.snapshot.title);
|
|
336
|
+
}
|
|
305
337
|
if (options.url) {
|
|
306
338
|
this.urlSubject.next(this.snapshot.url);
|
|
307
339
|
}
|
|
@@ -316,4 +348,4 @@ export class ActivatedRouteStub extends ActivatedRoute {
|
|
|
316
348
|
export function stubRoute(options) {
|
|
317
349
|
return new ActivatedRouteStub(options);
|
|
318
350
|
}
|
|
319
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3BlY3Vsb29zL3NyYy9saWIvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBbUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3SCxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUd4RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0E0QnpCO0lBQ0MsTUFBTSxNQUFNLEdBQUc7UUFDYixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7UUFDaEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDekYsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FB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LElBQUksQ0FBQztTQUNuQztRQUNELElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7U0FDakM7UUFFRCx3Q0FBd0M7UUFDeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ2xCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDL0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7WUFDdkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3pEO1FBQ0QsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxHQUFHLEVBQUU7WUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztJQUVNLFFBQVE7UUFDYixPQUFPLG9CQUFvQixDQUFDO0lBQzlCLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFNBQVMsQ0FBQyxPQUFtQztJQUMzRCxPQUFPLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCBjb252ZXJ0VG9QYXJhbU1hcCwgRGF0YSwgUGFyYW1zLCBSb3V0ZSwgVXJsU2VnbWVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmYWtlIHBhcnRpYWwgQWN0aXZhdGVkUm91dGUgZm9yIHRlc3RzLlxuICpcbiAqIElmIHlvdSBwYXNzIHBhcmFtcywgdGhlbiB0aGUgY3JlYXRlZCByb3V0ZSdzIHBhcmFtTWFwIHdpbGwgY29udGFpbiB0aGUgc2FtZSB2YWx1ZXMuXG4gKiBUaGUgc2FtZSBnb2VzIGZvciBxdWVyeVBhcmFtcyBhbmQgcXVlcnlQYXJhbU1hcC5cbiAqXG4gKiBJZiB5b3UgcGFzcyBhIHBhcmVudCByb3V0ZSBhbmQgYSBzbmFwc2hvdCwgYW5kIHRoZSBwYXNzZWQgc25hcHNob3QgZG9lc24ndCBoYXZlIGEgcGFyZW50LCB0aGVuIHRoZSBzbmFwc2hvdCdzXG4gKiBwYXJlbnQgd2lsbCBiZSBzZXQgdG8gdGhlIHBhcmVudCByb3V0ZSBzbmFwc2hvdC4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdW5kZXIgdGVzdCB0byB1c2VcbiAqIGByb3V0ZS5wYXJlbnQuc25hcHNob3RgIG9yIGByb3V0ZS5zbmFwc2hvdC5wYXJlbnRgLlxuICpcbiAqIElmIHlvdSBwYXNzIGEgc25hcHNob3Qgd2l0aCBhIHBhcmVudCwgYnV0IGRvbid0IHBhc3MgYSBwYXJlbnQgb3IgcGFzcyBhIHBhcmVudCB3aXRob3V0IHNuYXBzaG90LCB0aGVuIHRoZSByb3V0ZSdzXG4gKiBwYXJlbnQgc25hcHNob3Qgd2lsbCBiZSBzZXQgdG8gdGhlIGdpdmVuIHNuYXBzaG90J3MgcGFyZW50LiBUaGlzIGFsbG93cyB0aGUgY29kZSB1bmRlciB0ZXN0IHRvIHVzZVxuICogYHJvdXRlLnBhcmVudC5zbmFwc2hvdGAgb3IgYHJvdXRlLnNuYXBzaG90LnBhcmVudGAuXG4gKlxuICogQHJldHVybnMgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkLCBmYWtlIEFjdGl2YXRlZFJvdXRlLCBkZXBlbmRpbmcgb24gd2hhdCB5b3UgcGFzc2VkIGluXG4gKiBAZGVwcmVjYXRlZCBmYXZvciBzdHViUm91dGUsIHdoaWNoIGNyZWF0ZXMgYW4gZWFzaWVyIHRvIHVzZSBhbmQgbW9yZSBsb2dpY2FsIHN0dWJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZha2VSb3V0ZShvcHRpb25zOiB7XG4gIHVybD86IE9ic2VydmFibGU8VXJsU2VnbWVudFtdPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIG1hdHJpeCBwYXJhbWV0ZXJzIHNjb3BlZCB0byB0aGlzIHJvdXRlICovXG4gIHBhcmFtcz86IE9ic2VydmFibGU8UGFyYW1zPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgc2hhcmVkIGJ5IGFsbCB0aGUgcm91dGVzICovXG4gIHF1ZXJ5UGFyYW1zPzogT2JzZXJ2YWJsZTxQYXJhbXM+O1xuICAvKiogQW4gb2JzZXJ2YWJsZSBvZiB0aGUgVVJMIGZyYWdtZW50IHNoYXJlZCBieSBhbGwgdGhlIHJvdXRlcyAqL1xuICBmcmFnbWVudD86IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIHN0YXRpYyBhbmQgcmVzb2x2ZWQgZGF0YSBvZiB0aGlzIHJvdXRlLiAqL1xuICBkYXRhPzogT2JzZXJ2YWJsZTxEYXRhPjtcbiAgLyoqIFRoZSBvdXRsZXQgbmFtZSBvZiB0aGUgcm91dGUuIEl0J3MgYSBjb25zdGFudCAqL1xuICBvdXRsZXQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgY29tcG9uZW50IG9mIHRoZSByb3V0ZS4gSXQncyBhIGNvbnN0YW50ICovXG4gIGNvbXBvbmVudD86IFR5cGU8dW5rbm93bj4gfCBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGN1cnJlbnQgc25hcHNob3Qgb2YgdGhpcyByb3V0ZSAqL1xuICBzbmFwc2hvdD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiB1c2VkIHRvIG1hdGNoIHRoaXMgcm91dGUgKi9cbiAgcm91dGVDb25maWc/OiBSb3V0ZSB8IG51bGw7XG4gIC8qKiBUaGUgcm9vdCBvZiB0aGUgcm91dGVyIHN0YXRlICovXG4gIHJvb3Q/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgLyoqIFRoZSBwYXJlbnQgb2YgdGhpcyByb3V0ZSBpbiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgKi9cbiAgcGFyZW50PzogQWN0aXZhdGVkUm91dGUgfCBudWxsO1xuICAvKiogVGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIGZpcnN0Q2hpbGQ/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgLyoqIFRoZSBjaGlsZHJlbiBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBjaGlsZHJlbj86IEFjdGl2YXRlZFJvdXRlW107XG4gIC8qKiBUaGUgcGF0aCBmcm9tIHRoZSByb290IG9mIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSB0byB0aGlzIHJvdXRlICovXG4gIHBhdGhGcm9tUm9vdD86IEFjdGl2YXRlZFJvdXRlW107XG59KTogQWN0aXZhdGVkUm91dGUge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLFxuICAgIHBhcmFtTWFwOiBvcHRpb25zLnBhcmFtcyAmJiBvcHRpb25zLnBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKSkpLFxuICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UGFyYW1zLFxuICAgIHF1ZXJ5UGFyYW1NYXA6IG9wdGlvbnMucXVlcnlQYXJhbXMgJiYgb3B0aW9ucy5xdWVyeVBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKSkpLFxuICAgIGZyYWdtZW50OiBvcHRpb25zLmZyYWdtZW50LFxuICAgIGRhdGE6IG9wdGlvbnMuZGF0YSxcbiAgICBvdXRsZXQ6IG9wdGlvbnMub3V0bGV0LFxuICAgIGNvbXBvbmVudDogb3B0aW9ucy5jb21wb25lbnQsXG4gICAgc25hcHNob3Q6IG9wdGlvbnMuc25hcHNob3QsXG4gICAgcm91dGVDb25maWc6IG9wdGlvbnMucm91dGVDb25maWcsXG4gICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgIHBhcmVudDogb3B0aW9ucy5wYXJlbnQsXG4gICAgZmlyc3RDaGlsZDogb3B0aW9ucy5maXJzdENoaWxkLFxuICAgIGNoaWxkcmVuOiBvcHRpb25zLmNoaWxkcmVuLFxuICAgIHBhdGhGcm9tUm9vdDogb3B0aW9ucy5wYXRoRnJvbVJvb3RcbiAgfSBhcyBBY3RpdmF0ZWRSb3V0ZTtcblxuICBmb3IgKGxldCByb3V0ZTogbnVsbCB8IEFjdGl2YXRlZFJvdXRlID0gcmVzdWx0OyByb3V0ZTsgcm91dGUgPSByb3V0ZS5wYXJlbnQpIHtcbiAgICBpZiAocm91dGUucGFyZW50ICYmIHJvdXRlLnBhcmVudC5zbmFwc2hvdCAmJiAhcm91dGUuc25hcHNob3QpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgcm91dGUuc25hcHNob3QgPSBmYWtlU25hcHNob3Qoe30pO1xuICAgIH1cbiAgICBpZiAocm91dGUucGFyZW50ICYmIHJvdXRlLnBhcmVudC5zbmFwc2hvdCAmJiAhcm91dGUuc25hcHNob3QucGFyZW50KSB7XG4gICAgICAocm91dGUuc25hcHNob3QgYXMgT21pdDxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCAncGFyZW50Jz4gJiB7IHBhcmVudDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9KS5wYXJlbnQgPSByb3V0ZS5wYXJlbnQuc25hcHNob3Q7XG4gICAgfVxuXG4gICAgaWYgKHJvdXRlLnNuYXBzaG90ICYmIHJvdXRlLnNuYXBzaG90LnBhcmVudCAmJiAhcm91dGUucGFyZW50KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIChyb3V0ZSBhcyBPbWl0PEFjdGl2YXRlZFJvdXRlLCAncGFyZW50Jz4gJiB7IHBhcmVudDogQWN0aXZhdGVkUm91dGUgfSkucGFyZW50ID0gZmFrZVJvdXRlKHt9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnNuYXBzaG90ICYmIHJvdXRlLnNuYXBzaG90LnBhcmVudCAmJiByb3V0ZS5wYXJlbnQgJiYgIXJvdXRlLnBhcmVudC5zbmFwc2hvdCkge1xuICAgICAgcm91dGUucGFyZW50LnNuYXBzaG90ID0gcm91dGUuc25hcHNob3QucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZha2UgcGFydGlhbCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGZvciB0ZXN0cy5cbiAqXG4gKiBJZiB5b3UgcGFzcyBwYXJhbXMsIHRoZW4gdGhlIGNyZWF0ZWQgc25hcHNob3QncyBwYXJhbU1hcCB3aWxsIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzLlxuICogVGhlIHNhbWUgZ29lcyBmb3IgcXVlcnlQYXJhbXMgYW5kIHF1ZXJ5UGFyYW1NYXAuXG4gKlxuICogQHJldHVybnMgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkLCBmYWtlIEFjdGl2YXRlZFJvdXRlLCBkZXBlbmRpbmcgb24gd2hhdCB5b3UgcGFzc2VkIGluXG4gKiBAZGVwcmVjYXRlZCBmYXZvciBzdHViUm91dGUsIHdoaWNoIGNyZWF0ZXMgYW4gZWFzaWVyIHRvIHVzZSBhbmQgbW9yZSBsb2dpY2FsIHN0dWIgZm9yIGJvdGggdGhlIHJvdXRlIGFuZCBpdHMgc25hcHNob3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZha2VTbmFwc2hvdChvcHRpb25zOiB7XG4gIHVybD86IFVybFNlZ21lbnRbXTtcbiAgLyoqIFRoZSBtYXRyaXggcGFyYW1ldGVycyBzY29wZWQgdG8gdGhpcyByb3V0ZSAqL1xuICBwYXJhbXM/OiBQYXJhbXM7XG4gIC8qKiBUaGUgcXVlcnkgcGFyYW1ldGVycyBzaGFyZWQgYnkgYWxsIHRoZSByb3V0ZXMgKi9cbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XG4gIC8qKiBUaGUgVVJMIGZyYWdtZW50IHNoYXJlZCBieSBhbGwgdGhlIHJvdXRlcyAqL1xuICBmcmFnbWVudD86IHN0cmluZztcbiAgLyoqIFRoZSBzdGF0aWMgYW5kIHJlc29sdmVkIGRhdGEgb2YgdGhpcyByb3V0ZSAqL1xuICBkYXRhPzogRGF0YTtcbiAgLyoqIFRoZSBvdXRsZXQgbmFtZSBvZiB0aGUgcm91dGUgKi9cbiAgb3V0bGV0Pzogc3RyaW5nO1xuICAvKiogVGhlIGNvbXBvbmVudCBvZiB0aGUgcm91dGUgKi9cbiAgY29tcG9uZW50PzogVHlwZTx1bmtub3duPiB8IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiB1c2VkIHRvIG1hdGNoIHRoaXMgcm91dGUgKi9cbiAgcm91dGVDb25maWc/OiBSb3V0ZTtcbiAgLyoqIFRoZSByb290IG9mIHRoZSByb3V0ZXIgc3RhdGUgKi9cbiAgcm9vdD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIC8qKiBUaGUgcGFyZW50IG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIHBhcmVudD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsO1xuICAvKiogVGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIGZpcnN0Q2hpbGQ/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbDtcbiAgLyoqIFRoZSBjaGlsZHJlbiBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBjaGlsZHJlbj86IEFjdGl2YXRlZFJvdXRlU25hcHNob3RbXTtcbiAgLyoqIFRoZSBwYXRoIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIHRvIHRoaXMgcm91dGUgKi9cbiAgcGF0aEZyb21Sb290PzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdFtdO1xufSk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICByZXR1cm4ge1xuICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcyxcbiAgICBwYXJhbU1hcDogb3B0aW9ucy5wYXJhbXMgJiYgY29udmVydFRvUGFyYW1NYXAob3B0aW9ucy5wYXJhbXMpLFxuICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UGFyYW1zLFxuICAgIHF1ZXJ5UGFyYW1NYXA6IG9wdGlvbnMucXVlcnlQYXJhbXMgJiYgY29udmVydFRvUGFyYW1NYXAob3B0aW9ucy5xdWVyeVBhcmFtcyksXG4gICAgZnJhZ21lbnQ6IG9wdGlvbnMuZnJhZ21lbnQsXG4gICAgZGF0YTogb3B0aW9ucy5kYXRhLFxuICAgIG91dGxldDogb3B0aW9ucy5vdXRsZXQsXG4gICAgY29tcG9uZW50OiBvcHRpb25zLmNvbXBvbmVudCxcbiAgICByb3V0ZUNvbmZpZzogb3B0aW9ucy5yb3V0ZUNvbmZpZyxcbiAgICByb290OiBvcHRpb25zLnJvb3QsXG4gICAgcGFyZW50OiBvcHRpb25zLnBhcmVudCxcbiAgICBmaXJzdENoaWxkOiBvcHRpb25zLmZpcnN0Q2hpbGQsXG4gICAgY2hpbGRyZW46IG9wdGlvbnMuY2hpbGRyZW4sXG4gICAgcGF0aEZyb21Sb290OiBvcHRpb25zLnBhdGhGcm9tUm9vdFxuICB9IGFzIEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHdoZW4gY3JlYXRpbmcgYW4gQWN0aXZhdGVkUm91dGVTdHViLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2YXRlZFJvdXRlU3R1Yk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgcGFyYW1zPzogUGFyYW1zO1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIGRhdGEgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBkYXRhPzogRGF0YTtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIGZyYWdtZW50IG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgZnJhZ21lbnQ/OiBzdHJpbmcgfCBudWxsO1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdXJsIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgdXJsPzogVXJsU2VnbWVudFtdO1xuICAvKipcbiAgICogVGhlIHBhcmVudCBvZiB0aGUgcm91dGVcbiAgICovXG4gIHBhcmVudD86IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBmaXJzdENoaWxkPzogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBjaGlsZHJlbiBvZiB0aGUgcm91dGVcbiAgICovXG4gIGNoaWxkcmVuPzogQWN0aXZhdGVkUm91dGVTdHViW10gfCBudWxsO1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJvdXRlXG4gICAqL1xuICByb3V0ZUNvbmZpZz86IFJvdXRlIHwgbnVsbDtcbn1cblxuY2xhc3MgQWN0aXZhdGVkUm91dGVTbmFwc2hvdFN0dWIgZXh0ZW5kcyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgcHJpdmF0ZSBfcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jvb3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIHByaXZhdGUgX2ZpcnN0Q2hpbGQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+ID0gW107XG4gIHByaXZhdGUgX3BhdGhGcm9tUm9vdDogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4gPSBbXTtcbiAgcHJpdmF0ZSBfcm91dGVDb25maWc6IFJvdXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgZ2V0IHBhcmVudCgpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgfVxuXG4gIHNldCBwYXJlbnQodmFsdWU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsKSB7XG4gICAgdGhpcy5fcGFyZW50ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcm9vdCgpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgICByZXR1cm4gdGhpcy5fcm9vdDtcbiAgfVxuXG4gIHNldCByb290KHZhbHVlOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90KSB7XG4gICAgdGhpcy5fcm9vdCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9maXJzdENoaWxkO1xuICB9XG5cbiAgc2V0IGZpcnN0Q2hpbGQodmFsdWU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsKSB7XG4gICAgdGhpcy5fZmlyc3RDaGlsZCA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IGNoaWxkcmVuKCk6IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+IHtcbiAgICByZXR1cm4gdGhpcy5fY2hpbGRyZW47XG4gIH1cblxuICBzZXQgY2hpbGRyZW4odmFsdWU6IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+KSB7XG4gICAgdGhpcy5fY2hpbGRyZW4gPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCBwYXRoRnJvbVJvb3QoKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4ge1xuICAgIHJldHVybiB0aGlzLl9wYXRoRnJvbVJvb3Q7XG4gIH1cblxuICBzZXQgcGF0aEZyb21Sb290KHZhbHVlOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90Pikge1xuICAgIHRoaXMuX3BhdGhGcm9tUm9vdCA9IHZhbHVlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAvLyBAdHMtaWdub3JlXG4gIGdldCByb3V0ZUNvbmZpZygpOiBSb3V0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9yb3V0ZUNvbmZpZztcbiAgfVxuXG4gIHNldCByb3V0ZUNvbmZpZyhyb3V0ZTogUm91dGUgfCBudWxsKSB7XG4gICAgdGhpcy5fcm91dGVDb25maWcgPSByb3V0ZTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fcm9vdCA9IHRoaXM7XG4gIH1cbn1cblxuLyoqXG4gKiBBIHN0dWIgZm9yIEFjdGl2YXRlZFJvdXRlLiBJdCBiZWhhdmVzIGFsbW9zdCB0aGUgc2FtZSB3YXkgYXMgdGhlIGFjdHVhbCBBY3RpdmF0ZWRSb3V0ZSwgZXhwb3NpbmcgYSBzbmFwc2hvdFxuICogYW5kIG9ic2VydmFibGVzIGZvciB0aGUgcGFyYW1zLCBxdWVyeSBwYXJhbXMgZXRjLiwgd2hpY2ggYXJlIGtlcHQgaW4gc3luYy5cbiAqXG4gKiBJbiBhZGRpdGlvbiwgdGhpcyBzdHViIGFsbG93cyBzaW11bGF0aW5nIGEgbmF2aWdhdGlvbiBieSBjaGFuZ2luZyB0aGUgcGFyYW1zLCB0aGUgcXVlcnkgcGFyYW1zLCB0aGUgZnJhZ21lbnQsIGV0Yy5cbiAqIFdoZW4gdGhhdCBoYXBwZW5zLCB0aGUgc25hcHNob3QgaXMgbW9kaWZpZWQsIHRoZW4gdGhlIHJlbGV2YW50IG9ic2VydmFibGVzIGVtaXQgdGhlIG5ldyB2YWx1ZXMuXG4gKlxuICogVGhlcmUgYXJlIHNvbWUgdGhpbmdzIHRoYXQgZG9uJ3QgcmVhbGx5IHdvcmsgdGhlIHNhbWUgd2F5IGFzIHRoZSByZWFsIEFjdGl2YXRlZFJvdXRlIHRob3VnaDpcbiAqIC0gdGhlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdENoaWxkIGFuZCBvZiB0aGUgY2hpbGRyZW4gaXMgZW50aXJlbHkgdW5kZXIgdGhlIHRlc3RlcidzIHJlc3BvbnNpYmlsaXR5LiBTZXR0aW5nIHRoZSBwYXJlbnRcbiAqICAgb2YgYSByb3V0ZSBzdHViIGRvZXMgbm90IGFkZCB0aGlzIHJvdXRlIHRvIHRoZSBjaGlsZHJlbiBvZiBpdHMgcGFyZW50LCBmb3IgZXhhbXBsZS5cbiAqIC0gd2hlbiBjaGFuZ2luZyB0aGUgcGFyYW1zLCBxdWVyeSBwYXJhbXMsIGZyYWdtZW50LCBldGMuLCB0aGVpciBhc3NvY2lhdGVkIG9ic2VydmFibGUgZW1pdHMgdW5jb25kaXRpb25hbGx5LCBpbnN0ZWFkIG9mXG4gKiAgIGZpcnN0IGNoZWNraW5nIGlmIHRoZSB2YWx1ZSBpcyBhY3R1YWxseSBkaWZmZXJlbnQgZnJvbSBiZWZvcmUuIEl0J3MgdGh1cyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRlc3RlciB0byBub3RcbiAqICAgY2hhbmdlIHRoZSB2YWx1ZXMgaWYgdGhleSdyZSB0aGUgc2FtZSBhcyBiZWZvcmUuXG4gKi9cbmV4cG9ydCBjbGFzcyBBY3RpdmF0ZWRSb3V0ZVN0dWIgZXh0ZW5kcyBBY3RpdmF0ZWRSb3V0ZSB7XG4gIHByaXZhdGUgX2ZpcnN0Q2hpbGQ6IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGw7XG4gIHByaXZhdGUgX2NoaWxkcmVuOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVN0dWI+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyYW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcXVlcnlQYXJhbXNTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8UGFyYW1zPjtcbiAgcHJpdmF0ZSByZWFkb25seSBkYXRhU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PERhdGE+O1xuICBwcml2YXRlIHJlYWRvbmx5IGZyYWdtZW50U3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+O1xuICBwcml2YXRlIHJlYWRvbmx5IHVybFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxBcnJheTxVcmxTZWdtZW50Pj47XG5cbiAgcHJpdmF0ZSBfcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsO1xuICBwcml2YXRlIF9yb290OiBBY3RpdmF0ZWRSb3V0ZVN0dWI7XG4gIHByaXZhdGUgX3BhdGhGcm9tUm9vdDogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSwgYmFzZWQgb24gdGhlIGdpdmVuIG9wdGlvbnMuXG4gICAqIElmIGFuIG9wdGlvbiBpcyBub3QgcHJvdmlkZWQgKG9yIGlmIG5vIG9wdGlvbiBpcyBwcm92aWRlZCBhdCBhbGwpLCB0aGVuIHRoZSByb3V0ZSBoYXMgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIG9wdGlvblxuICAgKiAoZW1wdHkgcGFyYW1ldGVycyBmb3IgZXhhbXBsZSwgbnVsbCBmcmFnbWVudCwgZXRjLilcbiAgICogSWYgbm8gcGFyZW50IGlzIHBhc3NlZCwgdGhlbiB0aGlzIHJvdXRlIGhhcyBubyBwYXJlbnQgYW5kIGlzIHRodXMgc2V0IGFzIHRoZSByb290LiBPdGhlcndpc2UsIHRoZSByb290IGFuZCB0aGUgcGF0aFxuICAgKiBmcm9tIHJvb3QgYXJlIGNyZWF0ZWQgYmFzZWQgb24gdGhlIHJvb3QgYW5kIHBhdGggZnJvbSByb290IG9mIHRoZSBnaXZlbiBwYXJlbnQgcm91dGUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQWN0aXZhdGVkUm91dGVTdHViT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90U3R1YigpO1xuICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDtcblxuICAgIHRoaXMuX2ZpcnN0Q2hpbGQgPSBvcHRpb25zPy5maXJzdENoaWxkID8/IG51bGw7XG4gICAgdGhpcy5fY2hpbGRyZW4gPSBvcHRpb25zPy5jaGlsZHJlbiA/PyBbXTtcbiAgICB0aGlzLl9wYXJlbnQgPSBvcHRpb25zPy5wYXJlbnQgPz8gbnVsbDtcbiAgICB0aGlzLl9yb290ID0gdGhpcy5wYXJlbnQ/LnJvb3QgPz8gdGhpcztcbiAgICB0aGlzLl9wYXRoRnJvbVJvb3QgPSB0aGlzLnBhcmVudCA/IFsuLi50aGlzLnBhcmVudC5wYXRoRnJvbVJvb3QsIHRoaXNdIDogW3RoaXNdO1xuXG4gICAgc25hcHNob3QucGFyYW1zID0gb3B0aW9ucz8ucGFyYW1zID8/IHt9O1xuICAgIHNuYXBzaG90LnF1ZXJ5UGFyYW1zID0gb3B0aW9ucz8ucXVlcnlQYXJhbXMgPz8ge307XG4gICAgc25hcHNob3QuZGF0YSA9IG9wdGlvbnM/LmRhdGEgPz8ge307XG4gICAgc25hcHNob3QuZnJhZ21lbnQgPSBvcHRpb25zPy5mcmFnbWVudCA/PyBudWxsO1xuICAgIHNuYXBzaG90LnVybCA9IG9wdGlvbnM/LnVybCA/PyBbXTtcbiAgICBzbmFwc2hvdC5yb3V0ZUNvbmZpZyA9IG9wdGlvbnM/LnJvdXRlQ29uZmlnID8/IG51bGw7XG5cbiAgICBzbmFwc2hvdC5maXJzdENoaWxkID0gdGhpcy5maXJzdENoaWxkPy5zbmFwc2hvdCA/PyBudWxsO1xuICAgIHNuYXBzaG90LmNoaWxkcmVuID0gdGhpcy5jaGlsZHJlbj8ubWFwKHJvdXRlID0+IHJvdXRlLnNuYXBzaG90KSA/PyBbXTtcbiAgICBzbmFwc2hvdC5wYXJlbnQgPSB0aGlzLnBhcmVudD8uc25hcHNob3QgPz8gbnVsbDtcbiAgICBzbmFwc2hvdC5yb290ID0gdGhpcy5yb290LnNuYXBzaG90O1xuICAgIHNuYXBzaG90LnBhdGhGcm9tUm9vdCA9IHRoaXMucGF0aEZyb21Sb290Lm1hcChyb3V0ZSA9PiByb3V0ZS5zbmFwc2hvdCk7XG5cbiAgICB0aGlzLnBhcmFtc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz4odGhpcy5zbmFwc2hvdC5wYXJhbXMpO1xuICAgIHRoaXMucXVlcnlQYXJhbXNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQYXJhbXM+KHRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMpO1xuICAgIHRoaXMuZGF0YVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGE+KHRoaXMuc25hcHNob3QuZGF0YSk7XG4gICAgdGhpcy5mcmFnbWVudFN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IG51bGw+KHRoaXMuc25hcHNob3QuZnJhZ21lbnQpO1xuICAgIHRoaXMudXJsU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VXJsU2VnbWVudD4+KHRoaXMuc25hcHNob3QudXJsKTtcblxuICAgIHRoaXMucGFyYW1zID0gdGhpcy5wYXJhbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMucXVlcnlQYXJhbXMgPSB0aGlzLnF1ZXJ5UGFyYW1zU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGFTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZnJhZ21lbnQgPSB0aGlzLmZyYWdtZW50U3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgICB0aGlzLnVybCA9IHRoaXMudXJsU3ViamVjdC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGdldCByb290KCkge1xuICAgIHJldHVybiB0aGlzLl9yb290O1xuICB9XG5cbiAgZ2V0IHBhcmVudCgpOiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICB9XG5cbiAgZ2V0IHBhdGhGcm9tUm9vdCgpOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVN0dWI+IHtcbiAgICByZXR1cm4gdGhpcy5fcGF0aEZyb21Sb290O1xuICB9XG5cbiAgZ2V0IGZpcnN0Q2hpbGQoKTogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPiB7XG4gICAgcmV0dXJuIHRoaXMuX2NoaWxkcmVuO1xuICB9XG5cbiAgZ2V0IHJvdXRlQ29uZmlnKCk6IFJvdXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc25hcHNob3Qucm91dGVDb25maWc7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBwYXJhbWV0ZXJzLiBBbGwgdGhlIG90aGVyIHBhcnRzIChxdWVyeSBwYXJhbXMgZXRjLikgc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIHRoZSBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIHNldFBhcmFtcyhwYXJhbXM6IFBhcmFtcyk6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlck5hdmlnYXRpb24oeyBwYXJhbXMgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBwYXJhbWV0ZXIuIFRoZSBvdGhlciBwYXJhbWV0ZXJzLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHF1ZXJ5IHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2Ugb25lIHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBzZXRQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFBhcmFtcyh7IC4uLnRoaXMuc25hcHNob3QucGFyYW1zLCBbbmFtZV06IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcXVlcnkgcGFyYW1ldGVycy4gQWxsIHRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBzZXRRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcGFyYW1ldGVyLiBUaGUgb3RoZXIgcXVlcnkgcGFyYW1ldGVycywgYXMgd2VsbCBhcyBhbGwgdGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLilcbiAgICogc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIG9uZSBxdWVyeSBwYXJhbWV0ZXIuXG4gICAqL1xuICBwdWJsaWMgc2V0UXVlcnlQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFF1ZXJ5UGFyYW1zKHsgLi4udGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcywgW25hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IGRhdGEuIFRoZSBvdGhlciBwYXJhbWV0ZXJzLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIGRhdGEuXG4gICAqL1xuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBEYXRhKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IGRhdGEgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBkYXRhIGl0ZW0uIFRoZSBvdGhlciBkYXRhLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2Ugb25lIGRhdGEgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBzZXREYXRhSXRlbShuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRhKHsgLi4udGhpcy5zbmFwc2hvdC5kYXRhLCBbbmFtZV06IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgZnJhZ21lbnQuIFRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pICBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIGZyYWdtZW50LlxuICAgKi9cbiAgcHVibGljIHNldEZyYWdtZW50KGZyYWdtZW50OiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IGZyYWdtZW50IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgdXJsLiBUaGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKSAgc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIHRoZSB1cmwuXG4gICAqL1xuICBwdWJsaWMgc2V0VXJsKHVybDogQXJyYXk8VXJsU2VnbWVudD4pOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKHsgdXJsIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiBiYXNlZCBvbiB0aGUgZ2l2ZW4gb3B0aW9ucy4gSWYgYW4gb3B0aW9uIGlzIHVuZGVmaW5lZCBvciBudWxsLCBpdCdzIGlnbm9yZWQuIEV4Y2VwdCBmb3IgZnJhZ21lbnQsIHdoaWNoIGlzIG9ubHlcbiAgICogaWdub3JlZCBpZiBpdCdzIHVuZGVmaW5lZCwgYmVjYXVzZSBudWxsIGlzIGEgdmFsaWQgdmFsdWUgZm9yIGEgZnJhZ21lbnQuXG4gICAqXG4gICAqIFRoZSBub24taWdub3JlZCB2YWx1ZXMgYXJlIHVzZWQgdG8gY2hhbmdlIHRoZSBzbmFwc2hvdCBvZiB0aGUgcm91dGUuIE9uY2UgdGhlIHNuYXBzaG90IGhhcyBiZWVuIG1vZGlmaWVkLFxuICAgKiB0aGUgb2JzZXJ2YWJsZXMgY29ycmVzcG9uZGluZyB0byB0aGUgdXBkYXRlZCBwYXJ0cyBlbWl0IHRoZSBuZXcgdmFsdWUuXG4gICAqXG4gICAqIFNvLCBzZXR0aW5nIHBhcmFtcyBhbmQgcXVlcnkgcGFyYW1zIHdpbGwgbWFrZSB0aGUgcGFyYW1zIGFuZCBxdWVyeVBhcmFtcyBvYnNlcnZhYmxlcyBlbWl0LCBidXQgbm90IHRoZSBmcmFnbWVudCwgZGF0YSBhbmRcbiAgICogdXJsIG9ic2VydmFibGVzIGZvciBleGFtcGxlLiBUaGlzIGlzIGNvbnNpc3RlbnQgdG8gaG93IHRoZSByb3V0ZXIgYmVoYXZlcy5cbiAgICovXG4gIHB1YmxpYyB0cmlnZ2VyTmF2aWdhdGlvbihvcHRpb25zOiB7XG4gICAgcGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIGZyYWdtZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBkYXRhPzogRGF0YSB8IG51bGw7XG4gICAgdXJsPzogQXJyYXk8VXJsU2VnbWVudD4gfCBudWxsO1xuICB9KTogdm9pZCB7XG4gICAgLy8gc2V0IHRoZSBzbmFwc2hvdCBmaXJzdFxuICAgIGlmIChvcHRpb25zLnBhcmFtcykge1xuICAgICAgdGhpcy5zbmFwc2hvdC5wYXJhbXMgPSBvcHRpb25zLnBhcmFtcztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucXVlcnlQYXJhbXMpIHtcbiAgICAgIHRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMgPSBvcHRpb25zLnF1ZXJ5UGFyYW1zO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNuYXBzaG90LmZyYWdtZW50ID0gb3B0aW9ucy5mcmFnbWVudDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgdGhpcy5zbmFwc2hvdC5kYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy51cmwpIHtcbiAgICAgIHRoaXMuc25hcHNob3QudXJsID0gb3B0aW9ucy51cmw7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBlbWl0IGV2ZXJ5dGhpbmcgdGhhdCBoYXMgY2hhbmdlZFxuICAgIGlmIChvcHRpb25zLnBhcmFtcykge1xuICAgICAgdGhpcy5wYXJhbXNTdWJqZWN0Lm5leHQodGhpcy5zbmFwc2hvdC5wYXJhbXMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcykge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mcmFnbWVudFN1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LmZyYWdtZW50KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QuZGF0YSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnVybCkge1xuICAgICAgdGhpcy51cmxTdWJqZWN0Lm5leHQodGhpcy5zbmFwc2hvdC51cmwpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiAnQWN0aXZhdGVkUm91dGVTdHViJztcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgQWN0aXZhdGVkUm91dGVTdHViLCBieSBjYWxsaW5nIGl0cyBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0dWJSb3V0ZShvcHRpb25zPzogQWN0aXZhdGVkUm91dGVTdHViT3B0aW9ucyk6IEFjdGl2YXRlZFJvdXRlU3R1YiB7XG4gIHJldHVybiBuZXcgQWN0aXZhdGVkUm91dGVTdHViKG9wdGlvbnMpO1xufVxuIl19
|
|
351
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3BlY3Vsb29zL3NyYy9saWIvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBNkMsTUFBTSxpQkFBaUIsQ0FBQztBQUN2SSxPQUFPLEVBQUUsZUFBZSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUd4RDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsT0E0QnpCO0lBQ0MsTUFBTSxNQUFNLEdBQUc7UUFDYixHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUc7UUFDaEIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1FBQ3RCLFFBQVEsRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDekYsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXO1FBQ2hDLGFBQWEsRUFBRSxPQUFPLENBQUMsV0FBVyxJQUFJLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDeEcsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO1FBQzFCLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtRQUNsQixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07UUFDdEIsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTO1FBQzVCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUTtRQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7UUFDaEMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO1FB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SUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ25EO1FBQ0QsSUFBSSxPQUFPLENBQUMsSUFBSSxFQUFFO1lBQ2hCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDM0M7UUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDakIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QztRQUNELElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRTtZQUNmLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRU0sUUFBUTtRQUNiLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLE9BQW1DO0lBQzNELE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIEFjdGl2YXRlZFJvdXRlU25hcHNob3QsIGNvbnZlcnRUb1BhcmFtTWFwLCBEYXRhLCBQYXJhbU1hcCwgUGFyYW1zLCBSb3V0ZSwgVXJsU2VnbWVudCB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmYWtlIHBhcnRpYWwgQWN0aXZhdGVkUm91dGUgZm9yIHRlc3RzLlxuICpcbiAqIElmIHlvdSBwYXNzIHBhcmFtcywgdGhlbiB0aGUgY3JlYXRlZCByb3V0ZSdzIHBhcmFtTWFwIHdpbGwgY29udGFpbiB0aGUgc2FtZSB2YWx1ZXMuXG4gKiBUaGUgc2FtZSBnb2VzIGZvciBxdWVyeVBhcmFtcyBhbmQgcXVlcnlQYXJhbU1hcC5cbiAqXG4gKiBJZiB5b3UgcGFzcyBhIHBhcmVudCByb3V0ZSBhbmQgYSBzbmFwc2hvdCwgYW5kIHRoZSBwYXNzZWQgc25hcHNob3QgZG9lc24ndCBoYXZlIGEgcGFyZW50LCB0aGVuIHRoZSBzbmFwc2hvdCdzXG4gKiBwYXJlbnQgd2lsbCBiZSBzZXQgdG8gdGhlIHBhcmVudCByb3V0ZSBzbmFwc2hvdC4gVGhpcyBhbGxvd3MgdGhlIGNvZGUgdW5kZXIgdGVzdCB0byB1c2VcbiAqIGByb3V0ZS5wYXJlbnQuc25hcHNob3RgIG9yIGByb3V0ZS5zbmFwc2hvdC5wYXJlbnRgLlxuICpcbiAqIElmIHlvdSBwYXNzIGEgc25hcHNob3Qgd2l0aCBhIHBhcmVudCwgYnV0IGRvbid0IHBhc3MgYSBwYXJlbnQgb3IgcGFzcyBhIHBhcmVudCB3aXRob3V0IHNuYXBzaG90LCB0aGVuIHRoZSByb3V0ZSdzXG4gKiBwYXJlbnQgc25hcHNob3Qgd2lsbCBiZSBzZXQgdG8gdGhlIGdpdmVuIHNuYXBzaG90J3MgcGFyZW50LiBUaGlzIGFsbG93cyB0aGUgY29kZSB1bmRlciB0ZXN0IHRvIHVzZVxuICogYHJvdXRlLnBhcmVudC5zbmFwc2hvdGAgb3IgYHJvdXRlLnNuYXBzaG90LnBhcmVudGAuXG4gKlxuICogQHJldHVybnMgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkLCBmYWtlIEFjdGl2YXRlZFJvdXRlLCBkZXBlbmRpbmcgb24gd2hhdCB5b3UgcGFzc2VkIGluXG4gKiBAZGVwcmVjYXRlZCBmYXZvciBzdHViUm91dGUsIHdoaWNoIGNyZWF0ZXMgYW4gZWFzaWVyIHRvIHVzZSBhbmQgbW9yZSBsb2dpY2FsIHN0dWJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZha2VSb3V0ZShvcHRpb25zOiB7XG4gIHVybD86IE9ic2VydmFibGU8VXJsU2VnbWVudFtdPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIG1hdHJpeCBwYXJhbWV0ZXJzIHNjb3BlZCB0byB0aGlzIHJvdXRlICovXG4gIHBhcmFtcz86IE9ic2VydmFibGU8UGFyYW1zPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIHF1ZXJ5IHBhcmFtZXRlcnMgc2hhcmVkIGJ5IGFsbCB0aGUgcm91dGVzICovXG4gIHF1ZXJ5UGFyYW1zPzogT2JzZXJ2YWJsZTxQYXJhbXM+O1xuICAvKiogQW4gb2JzZXJ2YWJsZSBvZiB0aGUgVVJMIGZyYWdtZW50IHNoYXJlZCBieSBhbGwgdGhlIHJvdXRlcyAqL1xuICBmcmFnbWVudD86IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgLyoqIEFuIG9ic2VydmFibGUgb2YgdGhlIHN0YXRpYyBhbmQgcmVzb2x2ZWQgZGF0YSBvZiB0aGlzIHJvdXRlLiAqL1xuICBkYXRhPzogT2JzZXJ2YWJsZTxEYXRhPjtcbiAgLyoqIFRoZSBvdXRsZXQgbmFtZSBvZiB0aGUgcm91dGUuIEl0J3MgYSBjb25zdGFudCAqL1xuICBvdXRsZXQ/OiBzdHJpbmc7XG4gIC8qKiBUaGUgY29tcG9uZW50IG9mIHRoZSByb3V0ZS4gSXQncyBhIGNvbnN0YW50ICovXG4gIGNvbXBvbmVudD86IFR5cGU8dW5rbm93bj4gfCBzdHJpbmcgfCBudWxsO1xuICAvKiogVGhlIGN1cnJlbnQgc25hcHNob3Qgb2YgdGhpcyByb3V0ZSAqL1xuICBzbmFwc2hvdD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiB1c2VkIHRvIG1hdGNoIHRoaXMgcm91dGUgKi9cbiAgcm91dGVDb25maWc/OiBSb3V0ZSB8IG51bGw7XG4gIC8qKiBUaGUgcm9vdCBvZiB0aGUgcm91dGVyIHN0YXRlICovXG4gIHJvb3Q/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgLyoqIFRoZSBwYXJlbnQgb2YgdGhpcyByb3V0ZSBpbiB0aGUgcm91dGVyIHN0YXRlIHRyZWUgKi9cbiAgcGFyZW50PzogQWN0aXZhdGVkUm91dGUgfCBudWxsO1xuICAvKiogVGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIGZpcnN0Q2hpbGQ/OiBBY3RpdmF0ZWRSb3V0ZTtcbiAgLyoqIFRoZSBjaGlsZHJlbiBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBjaGlsZHJlbj86IEFjdGl2YXRlZFJvdXRlW107XG4gIC8qKiBUaGUgcGF0aCBmcm9tIHRoZSByb290IG9mIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSB0byB0aGlzIHJvdXRlICovXG4gIHBhdGhGcm9tUm9vdD86IEFjdGl2YXRlZFJvdXRlW107XG59KTogQWN0aXZhdGVkUm91dGUge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdXJsOiBvcHRpb25zLnVybCxcbiAgICBwYXJhbXM6IG9wdGlvbnMucGFyYW1zLFxuICAgIHBhcmFtTWFwOiBvcHRpb25zLnBhcmFtcyAmJiBvcHRpb25zLnBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKSkpLFxuICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UGFyYW1zLFxuICAgIHF1ZXJ5UGFyYW1NYXA6IG9wdGlvbnMucXVlcnlQYXJhbXMgJiYgb3B0aW9ucy5xdWVyeVBhcmFtcy5waXBlKG1hcChwYXJhbXMgPT4gY29udmVydFRvUGFyYW1NYXAocGFyYW1zKSkpLFxuICAgIGZyYWdtZW50OiBvcHRpb25zLmZyYWdtZW50LFxuICAgIGRhdGE6IG9wdGlvbnMuZGF0YSxcbiAgICBvdXRsZXQ6IG9wdGlvbnMub3V0bGV0LFxuICAgIGNvbXBvbmVudDogb3B0aW9ucy5jb21wb25lbnQsXG4gICAgc25hcHNob3Q6IG9wdGlvbnMuc25hcHNob3QsXG4gICAgcm91dGVDb25maWc6IG9wdGlvbnMucm91dGVDb25maWcsXG4gICAgcm9vdDogb3B0aW9ucy5yb290LFxuICAgIHBhcmVudDogb3B0aW9ucy5wYXJlbnQsXG4gICAgZmlyc3RDaGlsZDogb3B0aW9ucy5maXJzdENoaWxkLFxuICAgIGNoaWxkcmVuOiBvcHRpb25zLmNoaWxkcmVuLFxuICAgIHBhdGhGcm9tUm9vdDogb3B0aW9ucy5wYXRoRnJvbVJvb3RcbiAgfSBhcyBBY3RpdmF0ZWRSb3V0ZTtcblxuICBmb3IgKGxldCByb3V0ZTogbnVsbCB8IEFjdGl2YXRlZFJvdXRlID0gcmVzdWx0OyByb3V0ZTsgcm91dGUgPSByb3V0ZS5wYXJlbnQpIHtcbiAgICBpZiAocm91dGUucGFyZW50ICYmIHJvdXRlLnBhcmVudC5zbmFwc2hvdCAmJiAhcm91dGUuc25hcHNob3QpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgcm91dGUuc25hcHNob3QgPSBmYWtlU25hcHNob3Qoe30pO1xuICAgIH1cbiAgICBpZiAocm91dGUucGFyZW50ICYmIHJvdXRlLnBhcmVudC5zbmFwc2hvdCAmJiAhcm91dGUuc25hcHNob3QucGFyZW50KSB7XG4gICAgICAocm91dGUuc25hcHNob3QgYXMgT21pdDxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90LCAncGFyZW50Jz4gJiB7IHBhcmVudDogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB9KS5wYXJlbnQgPSByb3V0ZS5wYXJlbnQuc25hcHNob3Q7XG4gICAgfVxuXG4gICAgaWYgKHJvdXRlLnNuYXBzaG90ICYmIHJvdXRlLnNuYXBzaG90LnBhcmVudCAmJiAhcm91dGUucGFyZW50KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgIChyb3V0ZSBhcyBPbWl0PEFjdGl2YXRlZFJvdXRlLCAncGFyZW50Jz4gJiB7IHBhcmVudDogQWN0aXZhdGVkUm91dGUgfSkucGFyZW50ID0gZmFrZVJvdXRlKHt9KTtcbiAgICB9XG4gICAgaWYgKHJvdXRlLnNuYXBzaG90ICYmIHJvdXRlLnNuYXBzaG90LnBhcmVudCAmJiByb3V0ZS5wYXJlbnQgJiYgIXJvdXRlLnBhcmVudC5zbmFwc2hvdCkge1xuICAgICAgcm91dGUucGFyZW50LnNuYXBzaG90ID0gcm91dGUuc25hcHNob3QucGFyZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGZha2UgcGFydGlhbCBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IGZvciB0ZXN0cy5cbiAqXG4gKiBJZiB5b3UgcGFzcyBwYXJhbXMsIHRoZW4gdGhlIGNyZWF0ZWQgc25hcHNob3QncyBwYXJhbU1hcCB3aWxsIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzLlxuICogVGhlIHNhbWUgZ29lcyBmb3IgcXVlcnlQYXJhbXMgYW5kIHF1ZXJ5UGFyYW1NYXAuXG4gKlxuICogQHJldHVybnMgYSBwYXJ0aWFsbHkgcG9wdWxhdGVkLCBmYWtlIEFjdGl2YXRlZFJvdXRlLCBkZXBlbmRpbmcgb24gd2hhdCB5b3UgcGFzc2VkIGluXG4gKiBAZGVwcmVjYXRlZCBmYXZvciBzdHViUm91dGUsIHdoaWNoIGNyZWF0ZXMgYW4gZWFzaWVyIHRvIHVzZSBhbmQgbW9yZSBsb2dpY2FsIHN0dWIgZm9yIGJvdGggdGhlIHJvdXRlIGFuZCBpdHMgc25hcHNob3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZha2VTbmFwc2hvdChvcHRpb25zOiB7XG4gIHVybD86IFVybFNlZ21lbnRbXTtcbiAgLyoqIFRoZSBtYXRyaXggcGFyYW1ldGVycyBzY29wZWQgdG8gdGhpcyByb3V0ZSAqL1xuICBwYXJhbXM/OiBQYXJhbXM7XG4gIC8qKiBUaGUgcXVlcnkgcGFyYW1ldGVycyBzaGFyZWQgYnkgYWxsIHRoZSByb3V0ZXMgKi9cbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XG4gIC8qKiBUaGUgVVJMIGZyYWdtZW50IHNoYXJlZCBieSBhbGwgdGhlIHJvdXRlcyAqL1xuICBmcmFnbWVudD86IHN0cmluZztcbiAgLyoqIFRoZSBzdGF0aWMgYW5kIHJlc29sdmVkIGRhdGEgb2YgdGhpcyByb3V0ZSAqL1xuICBkYXRhPzogRGF0YTtcbiAgLyoqIFRoZSBvdXRsZXQgbmFtZSBvZiB0aGUgcm91dGUgKi9cbiAgb3V0bGV0Pzogc3RyaW5nO1xuICAvKiogVGhlIGNvbXBvbmVudCBvZiB0aGUgcm91dGUgKi9cbiAgY29tcG9uZW50PzogVHlwZTx1bmtub3duPiB8IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgY29uZmlndXJhdGlvbiB1c2VkIHRvIG1hdGNoIHRoaXMgcm91dGUgKi9cbiAgcm91dGVDb25maWc/OiBSb3V0ZTtcbiAgLyoqIFRoZSByb290IG9mIHRoZSByb3V0ZXIgc3RhdGUgKi9cbiAgcm9vdD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIC8qKiBUaGUgcGFyZW50IG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIHBhcmVudD86IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsO1xuICAvKiogVGhlIGZpcnN0IGNoaWxkIG9mIHRoaXMgcm91dGUgaW4gdGhlIHJvdXRlciBzdGF0ZSB0cmVlICovXG4gIGZpcnN0Q2hpbGQ/OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbDtcbiAgLyoqIFRoZSBjaGlsZHJlbiBvZiB0aGlzIHJvdXRlIGluIHRoZSByb3V0ZXIgc3RhdGUgdHJlZSAqL1xuICBjaGlsZHJlbj86IEFjdGl2YXRlZFJvdXRlU25hcHNob3RbXTtcbiAgLyoqIFRoZSBwYXRoIGZyb20gdGhlIHJvb3Qgb2YgdGhlIHJvdXRlciBzdGF0ZSB0cmVlIHRvIHRoaXMgcm91dGUgKi9cbiAgcGF0aEZyb21Sb290PzogQWN0aXZhdGVkUm91dGVTbmFwc2hvdFtdO1xufSk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICByZXR1cm4ge1xuICAgIHVybDogb3B0aW9ucy51cmwsXG4gICAgcGFyYW1zOiBvcHRpb25zLnBhcmFtcyxcbiAgICBwYXJhbU1hcDogb3B0aW9ucy5wYXJhbXMgJiYgY29udmVydFRvUGFyYW1NYXAob3B0aW9ucy5wYXJhbXMpLFxuICAgIHF1ZXJ5UGFyYW1zOiBvcHRpb25zLnF1ZXJ5UGFyYW1zLFxuICAgIHF1ZXJ5UGFyYW1NYXA6IG9wdGlvbnMucXVlcnlQYXJhbXMgJiYgY29udmVydFRvUGFyYW1NYXAob3B0aW9ucy5xdWVyeVBhcmFtcyksXG4gICAgZnJhZ21lbnQ6IG9wdGlvbnMuZnJhZ21lbnQsXG4gICAgZGF0YTogb3B0aW9ucy5kYXRhLFxuICAgIG91dGxldDogb3B0aW9ucy5vdXRsZXQsXG4gICAgY29tcG9uZW50OiBvcHRpb25zLmNvbXBvbmVudCxcbiAgICByb3V0ZUNvbmZpZzogb3B0aW9ucy5yb3V0ZUNvbmZpZyxcbiAgICByb290OiBvcHRpb25zLnJvb3QsXG4gICAgcGFyZW50OiBvcHRpb25zLnBhcmVudCxcbiAgICBmaXJzdENoaWxkOiBvcHRpb25zLmZpcnN0Q2hpbGQsXG4gICAgY2hpbGRyZW46IG9wdGlvbnMuY2hpbGRyZW4sXG4gICAgcGF0aEZyb21Sb290OiBvcHRpb25zLnBhdGhGcm9tUm9vdFxuICB9IGFzIEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG59XG5cbi8qKlxuICogVGhlIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIHdoZW4gY3JlYXRpbmcgYW4gQWN0aXZhdGVkUm91dGVTdHViLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFjdGl2YXRlZFJvdXRlU3R1Yk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBwYXJhbWV0ZXJzIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgcGFyYW1zPzogUGFyYW1zO1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdmFsdWVzIG9mIHRoZSBxdWVyeSBwYXJhbWV0ZXJzIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgcXVlcnlQYXJhbXM/OiBQYXJhbXM7XG4gIC8qKlxuICAgKiBUaGUgaW5pdGlhbCB2YWx1ZXMgb2YgdGhlIGRhdGEgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBkYXRhPzogRGF0YTtcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIHZhbHVlcyBvZiB0aGUgdGl0bGUgb2YgdGhlIHJvdXRlXG4gICAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBpbml0aWFsIGZyYWdtZW50IG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgZnJhZ21lbnQ/OiBzdHJpbmcgfCBudWxsO1xuICAvKipcbiAgICogVGhlIGluaXRpYWwgdXJsIG9mIHRoZSByb3V0ZVxuICAgKi9cbiAgdXJsPzogVXJsU2VnbWVudFtdO1xuICAvKipcbiAgICogVGhlIHBhcmVudCBvZiB0aGUgcm91dGVcbiAgICovXG4gIHBhcmVudD86IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGw7XG4gIC8qKlxuICAgKiBUaGUgZmlyc3QgY2hpbGQgb2YgdGhlIHJvdXRlXG4gICAqL1xuICBmaXJzdENoaWxkPzogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbDtcbiAgLyoqXG4gICAqIFRoZSBjaGlsZHJlbiBvZiB0aGUgcm91dGVcbiAgICovXG4gIGNoaWxkcmVuPzogQWN0aXZhdGVkUm91dGVTdHViW10gfCBudWxsO1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHJvdXRlXG4gICAqL1xuICByb3V0ZUNvbmZpZz86IFJvdXRlIHwgbnVsbDtcbn1cblxuY2xhc3MgQWN0aXZhdGVkUm91dGVTbmFwc2hvdFN0dWIgZXh0ZW5kcyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHtcbiAgcHJpdmF0ZSBfcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3Jvb3Q6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Q7XG4gIHByaXZhdGUgX2ZpcnN0Q2hpbGQ6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfY2hpbGRyZW46IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+ID0gW107XG4gIHByaXZhdGUgX3BhdGhGcm9tUm9vdDogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4gPSBbXTtcbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBnZXQgcGFyZW50KCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50O1xuICB9XG5cbiAgc2V0IHBhcmVudCh2YWx1ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpIHtcbiAgICB0aGlzLl9wYXJlbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIGdldCByb290KCk6IEFjdGl2YXRlZFJvdXRlU25hcHNob3Qge1xuICAgIHJldHVybiB0aGlzLl9yb290O1xuICB9XG5cbiAgc2V0IHJvb3QodmFsdWU6IEFjdGl2YXRlZFJvdXRlU25hcHNob3QpIHtcbiAgICB0aGlzLl9yb290ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgZmlyc3RDaGlsZCgpOiBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0Q2hpbGQ7XG4gIH1cblxuICBzZXQgZmlyc3RDaGlsZCh2YWx1ZTogQWN0aXZhdGVkUm91dGVTbmFwc2hvdCB8IG51bGwpIHtcbiAgICB0aGlzLl9maXJzdENoaWxkID0gdmFsdWU7XG4gIH1cblxuICBnZXQgY2hpbGRyZW4oKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4ge1xuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcbiAgfVxuXG4gIHNldCBjaGlsZHJlbih2YWx1ZTogQXJyYXk8QWN0aXZhdGVkUm91dGVTbmFwc2hvdD4pIHtcbiAgICB0aGlzLl9jaGlsZHJlbiA9IHZhbHVlO1xuICB9XG5cbiAgZ2V0IHBhdGhGcm9tUm9vdCgpOiBBcnJheTxBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90PiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdGhGcm9tUm9vdDtcbiAgfVxuXG4gIHNldCBwYXRoRnJvbVJvb3QodmFsdWU6IEFycmF5PEFjdGl2YXRlZFJvdXRlU25hcHNob3Q+KSB7XG4gICAgdGhpcy5fcGF0aEZyb21Sb290ID0gdmFsdWU7XG4gIH1cblxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cblxuICBzZXQgdGl0bGUodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3RpdGxlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFyYW1NYXAoKTogUGFyYW1NYXAge1xuICAgIHJldHVybiBjb252ZXJ0VG9QYXJhbU1hcCh0aGlzLnBhcmFtcyk7XG4gIH1cblxuICBnZXQgcXVlcnlQYXJhbU1hcCgpOiBQYXJhbU1hcCB7XG4gICAgcmV0dXJuIGNvbnZlcnRUb1BhcmFtTWFwKHRoaXMucXVlcnlQYXJhbXMpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9yb290ID0gdGhpcztcbiAgfVxufVxuXG4vKipcbiAqIEEgc3R1YiBmb3IgQWN0aXZhdGVkUm91dGUuIEl0IGJlaGF2ZXMgYWxtb3N0IHRoZSBzYW1lIHdheSBhcyB0aGUgYWN0dWFsIEFjdGl2YXRlZFJvdXRlLCBleHBvc2luZyBhIHNuYXBzaG90XG4gKiBhbmQgb2JzZXJ2YWJsZXMgZm9yIHRoZSBwYXJhbXMsIHF1ZXJ5IHBhcmFtcyBldGMuLCB3aGljaCBhcmUga2VwdCBpbiBzeW5jLlxuICpcbiAqIEluIGFkZGl0aW9uLCB0aGlzIHN0dWIgYWxsb3dzIHNpbXVsYXRpbmcgYSBuYXZpZ2F0aW9uIGJ5IGNoYW5naW5nIHRoZSBwYXJhbXMsIHRoZSBxdWVyeSBwYXJhbXMsIHRoZSBmcmFnbWVudCwgZXRjLlxuICogV2hlbiB0aGF0IGhhcHBlbnMsIHRoZSBzbmFwc2hvdCBpcyBtb2RpZmllZCwgdGhlbiB0aGUgcmVsZXZhbnQgb2JzZXJ2YWJsZXMgZW1pdCB0aGUgbmV3IHZhbHVlcy5cbiAqXG4gKiBUaGVyZSBhcmUgc29tZSB0aGluZ3MgdGhhdCBkb24ndCByZWFsbHkgd29yayB0aGUgc2FtZSB3YXkgYXMgdGhlIHJlYWwgQWN0aXZhdGVkUm91dGUgdGhvdWdoOlxuICogLSB0aGUgaGFuZGxpbmcgb2YgdGhlIGZpcnN0Q2hpbGQgYW5kIG9mIHRoZSBjaGlsZHJlbiBpcyBlbnRpcmVseSB1bmRlciB0aGUgdGVzdGVyJ3MgcmVzcG9uc2liaWxpdHkuIFNldHRpbmcgdGhlIHBhcmVudFxuICogICBvZiBhIHJvdXRlIHN0dWIgZG9lcyBub3QgYWRkIHRoaXMgcm91dGUgdG8gdGhlIGNoaWxkcmVuIG9mIGl0cyBwYXJlbnQsIGZvciBleGFtcGxlLlxuICogLSB3aGVuIGNoYW5naW5nIHRoZSBwYXJhbXMsIHF1ZXJ5IHBhcmFtcywgZnJhZ21lbnQsIGV0Yy4sIHRoZWlyIGFzc29jaWF0ZWQgb2JzZXJ2YWJsZSBlbWl0cyB1bmNvbmRpdGlvbmFsbHksIGluc3RlYWQgb2ZcbiAqICAgZmlyc3QgY2hlY2tpbmcgaWYgdGhlIHZhbHVlIGlzIGFjdHVhbGx5IGRpZmZlcmVudCBmcm9tIGJlZm9yZS4gSXQncyB0aHVzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgdGVzdGVyIHRvIG5vdFxuICogICBjaGFuZ2UgdGhlIHZhbHVlcyBpZiB0aGV5J3JlIHRoZSBzYW1lIGFzIGJlZm9yZS5cbiAqIC0gdGhlIHBhcmFtcywgcGFyYW1NYXAsIHF1ZXJ5UGFyYW1zIGFuZCBxdWVyeVBhcmFtTWFwIG9iamVjdHMgb2YgdGhlIHJvdXRlIHNuYXBzaG90IGNoYW5nZSB3aGVuIHBhcmFtcyBvciBxdWVyeSBwYXJhbXMgYXJlIHNldFxuICogICBvbiB0aGUgc3R1YiByb3V0ZS4gU28gaWYgdGhlIGNvZGUga2VlcHMgYSByZWZlcmVuY2UgdG8gcGFyYW1zIG9yIHBhcmFtTWFwcywgaXQgd29uJ3Qgc2VlIHRoZSBjaGFuZ2VzLlxuICovXG5leHBvcnQgY2xhc3MgQWN0aXZhdGVkUm91dGVTdHViIGV4dGVuZHMgQWN0aXZhdGVkUm91dGUge1xuICBwcml2YXRlIF9maXJzdENoaWxkOiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsO1xuICBwcml2YXRlIF9jaGlsZHJlbjogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPjtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBhcmFtc1N1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxQYXJhbXM+O1xuICBwcml2YXRlIHJlYWRvbmx5IHF1ZXJ5UGFyYW1zU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz47XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0YVN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxEYXRhPjtcbiAgcHJpdmF0ZSByZWFkb25seSBmcmFnbWVudFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmcgfCBudWxsPjtcbiAgcHJpdmF0ZSByZWFkb25seSB1cmxTdWJqZWN0OiBCZWhhdmlvclN1YmplY3Q8QXJyYXk8VXJsU2VnbWVudD4+O1xuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlU3ViamVjdDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD47XG5cbiAgcHJpdmF0ZSBfcGFyZW50OiBBY3RpdmF0ZWRSb3V0ZVN0dWIgfCBudWxsO1xuICBwcml2YXRlIF9yb290OiBBY3RpdmF0ZWRSb3V0ZVN0dWI7XG4gIHByaXZhdGUgX3BhdGhGcm9tUm9vdDogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPjtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBhIG5ldyBpbnN0YW5jZSwgYmFzZWQgb24gdGhlIGdpdmVuIG9wdGlvbnMuXG4gICAqIElmIGFuIG9wdGlvbiBpcyBub3QgcHJvdmlkZWQgKG9yIGlmIG5vIG9wdGlvbiBpcyBwcm92aWRlZCBhdCBhbGwpLCB0aGVuIHRoZSByb3V0ZSBoYXMgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGlzIG9wdGlvblxuICAgKiAoZW1wdHkgcGFyYW1ldGVycyBmb3IgZXhhbXBsZSwgbnVsbCBmcmFnbWVudCwgZXRjLilcbiAgICogSWYgbm8gcGFyZW50IGlzIHBhc3NlZCwgdGhlbiB0aGlzIHJvdXRlIGhhcyBubyBwYXJlbnQgYW5kIGlzIHRodXMgc2V0IGFzIHRoZSByb290LiBPdGhlcndpc2UsIHRoZSByb290IGFuZCB0aGUgcGF0aFxuICAgKiBmcm9tIHJvb3QgYXJlIGNyZWF0ZWQgYmFzZWQgb24gdGhlIHJvb3QgYW5kIHBhdGggZnJvbSByb290IG9mIHRoZSBnaXZlbiBwYXJlbnQgcm91dGUuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zPzogQWN0aXZhdGVkUm91dGVTdHViT3B0aW9ucykge1xuICAgIHN1cGVyKCk7XG5cbiAgICBjb25zdCBzbmFwc2hvdCA9IG5ldyBBY3RpdmF0ZWRSb3V0ZVNuYXBzaG90U3R1YigpO1xuICAgIHRoaXMuc25hcHNob3QgPSBzbmFwc2hvdDtcblxuICAgIHRoaXMuX2ZpcnN0Q2hpbGQgPSBvcHRpb25zPy5maXJzdENoaWxkID8/IG51bGw7XG4gICAgdGhpcy5fY2hpbGRyZW4gPSBvcHRpb25zPy5jaGlsZHJlbiA/PyBbXTtcbiAgICB0aGlzLl9wYXJlbnQgPSBvcHRpb25zPy5wYXJlbnQgPz8gbnVsbDtcbiAgICB0aGlzLl9yb290ID0gdGhpcy5wYXJlbnQ/LnJvb3QgPz8gdGhpcztcbiAgICB0aGlzLl9wYXRoRnJvbVJvb3QgPSB0aGlzLnBhcmVudCA/IFsuLi50aGlzLnBhcmVudC5wYXRoRnJvbVJvb3QsIHRoaXNdIDogW3RoaXNdO1xuXG4gICAgc25hcHNob3QucGFyYW1zID0gb3B0aW9ucz8ucGFyYW1zID8/IHt9O1xuICAgIHNuYXBzaG90LnF1ZXJ5UGFyYW1zID0gb3B0aW9ucz8ucXVlcnlQYXJhbXMgPz8ge307XG4gICAgc25hcHNob3QuZGF0YSA9IG9wdGlvbnM/LmRhdGEgPz8ge307XG4gICAgc25hcHNob3QudGl0bGUgPSBvcHRpb25zPy50aXRsZTtcbiAgICBzbmFwc2hvdC5mcmFnbWVudCA9IG9wdGlvbnM/LmZyYWdtZW50ID8/IG51bGw7XG4gICAgc25hcHNob3QudXJsID0gb3B0aW9ucz8udXJsID8/IFtdO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhlIHJvdXRlQ29uZmlnIGlzIHJlYWRvbmx5LCBidXQgd2UgbmVlZCB0byBvdmVyd3JpdGUgaXQgaGVyZVxuICAgIHNuYXBzaG90LnJvdXRlQ29uZmlnID0gb3B0aW9ucz8ucm91dGVDb25maWcgPz8gbnVsbDtcblxuICAgIHNuYXBzaG90LmZpcnN0Q2hpbGQgPSB0aGlzLmZpcnN0Q2hpbGQ/LnNuYXBzaG90ID8/IG51bGw7XG4gICAgc25hcHNob3QuY2hpbGRyZW4gPSB0aGlzLmNoaWxkcmVuPy5tYXAocm91dGUgPT4gcm91dGUuc25hcHNob3QpID8/IFtdO1xuICAgIHNuYXBzaG90LnBhcmVudCA9IHRoaXMucGFyZW50Py5zbmFwc2hvdCA/PyBudWxsO1xuICAgIHNuYXBzaG90LnJvb3QgPSB0aGlzLnJvb3Quc25hcHNob3Q7XG4gICAgc25hcHNob3QucGF0aEZyb21Sb290ID0gdGhpcy5wYXRoRnJvbVJvb3QubWFwKHJvdXRlID0+IHJvdXRlLnNuYXBzaG90KTtcblxuICAgIHRoaXMucGFyYW1zU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UGFyYW1zPih0aGlzLnNuYXBzaG90LnBhcmFtcyk7XG4gICAgdGhpcy5xdWVyeVBhcmFtc1N1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFBhcmFtcz4odGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcyk7XG4gICAgdGhpcy5kYXRhU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YT4odGhpcy5zbmFwc2hvdC5kYXRhKTtcbiAgICB0aGlzLnRpdGxlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkPih0aGlzLnNuYXBzaG90LnRpdGxlKTtcbiAgICB0aGlzLmZyYWdtZW50U3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgbnVsbD4odGhpcy5zbmFwc2hvdC5mcmFnbWVudCk7XG4gICAgdGhpcy51cmxTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxBcnJheTxVcmxTZWdtZW50Pj4odGhpcy5zbmFwc2hvdC51cmwpO1xuXG4gICAgdGhpcy5wYXJhbXMgPSB0aGlzLnBhcmFtc1N1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHRoaXMucXVlcnlQYXJhbXNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZGF0YSA9IHRoaXMuZGF0YVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGhpcy5mcmFnbWVudCA9IHRoaXMuZnJhZ21lbnRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMudXJsID0gdGhpcy51cmxTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgdGhlIHRpdGxlIGlzIHJlYWRvbmx5LCBidXQgd2UgbmVlZCB0byBiZSBhYmxlIHRvIGluaXRpYWxpemUgaXQgIGhlcmVcbiAgICB0aGlzLnRpdGxlID0gdGhpcy50aXRsZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBnZXQgcm9vdCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcm9vdDtcbiAgfVxuXG4gIGdldCBwYXJlbnQoKTogQWN0aXZhdGVkUm91dGVTdHViIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudDtcbiAgfVxuXG4gIGdldCBwYXRoRnJvbVJvb3QoKTogQXJyYXk8QWN0aXZhdGVkUm91dGVTdHViPiB7XG4gICAgcmV0dXJuIHRoaXMuX3BhdGhGcm9tUm9vdDtcbiAgfVxuXG4gIGdldCBmaXJzdENoaWxkKCk6IEFjdGl2YXRlZFJvdXRlU3R1YiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9maXJzdENoaWxkO1xuICB9XG5cbiAgZ2V0IGNoaWxkcmVuKCk6IEFycmF5PEFjdGl2YXRlZFJvdXRlU3R1Yj4ge1xuICAgIHJldHVybiB0aGlzLl9jaGlsZHJlbjtcbiAgfVxuXG4gIGdldCByb3V0ZUNvbmZpZygpOiBSb3V0ZSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnNuYXBzaG90LnJvdXRlQ29uZmlnO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcGFyYW1ldGVycy4gQWxsIHRoZSBvdGhlciBwYXJ0cyAocXVlcnkgcGFyYW1zIGV0Yy4pIHN0YXkgYXMgdGhleSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgc2V0UGFyYW1zKHBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IHBhcmFtcyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IHBhcmFtZXRlci4gVGhlIG90aGVyIHBhcmFtZXRlcnMsIGFzIHdlbGwgYXMgYWxsIHRoZSBvdGhlciBwYXJ0cyAocXVlcnkgcGFyYW1zIGV0Yy4pXG4gICAqIHN0YXkgYXMgdGhleSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2Ugb25lIHBhcmFtZXRlci5cbiAgICovXG4gIHB1YmxpYyBzZXRQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFBhcmFtcyh7IC4uLnRoaXMuc25hcHNob3QucGFyYW1zLCBbbmFtZV06IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcXVlcnkgcGFyYW1ldGVycy4gQWxsIHRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBzZXRRdWVyeVBhcmFtcyhxdWVyeVBhcmFtczogUGFyYW1zKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IHF1ZXJ5UGFyYW1zIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgcGFyYW1ldGVyLiBUaGUgb3RoZXIgcXVlcnkgcGFyYW1ldGVycywgYXMgd2VsbCBhcyBhbGwgdGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLilcbiAgICogc3RheSBhcyB0aGUgYXJlLlxuICAgKiBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYHRyaWdnZXJOYXZpZ2F0aW9uYCB0aGF0IGNhbiBiZSB1c2VkIHRvIG9ubHkgY2hhbmdlIG9uZSBxdWVyeSBwYXJhbWV0ZXIuXG4gICAqL1xuICBwdWJsaWMgc2V0UXVlcnlQYXJhbShuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnNldFF1ZXJ5UGFyYW1zKHsgLi4udGhpcy5zbmFwc2hvdC5xdWVyeVBhcmFtcywgW25hbWVdOiB2YWx1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmlnZ2VycyBhIG5hdmlnYXRpb24gd2l0aCB0aGUgZ2l2ZW4gbmV3IGRhdGEuIFRoZSBvdGhlciBwYXJhbWV0ZXJzLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIGRhdGEuXG4gICAqL1xuICBwdWJsaWMgc2V0RGF0YShkYXRhOiBEYXRhKTogdm9pZCB7XG4gICAgdGhpcy50cmlnZ2VyTmF2aWdhdGlvbih7IGRhdGEgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBkYXRhIGl0ZW0uIFRoZSBvdGhlciBkYXRhLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2Ugb25lIGRhdGEgaXRlbS5cbiAgICovXG4gIHB1YmxpYyBzZXREYXRhSXRlbShuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG4gICAgdGhpcy5zZXREYXRhKHsgLi4udGhpcy5zbmFwc2hvdC5kYXRhLCBbbmFtZV06IHZhbHVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWdnZXJzIGEgbmF2aWdhdGlvbiB3aXRoIHRoZSBnaXZlbiBuZXcgdGl0bGUuIFRoZSBvdGhlciBwYXJhbWV0ZXJzLCBhcyB3ZWxsIGFzIGFsbCB0aGUgb3RoZXIgcGFydHMgKHBhcmFtcyBldGMuKVxuICAgKiBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIHRpdGxlLlxuICAgKi9cbiAgcHVibGljIHNldFRpdGxlKHRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKHsgdGl0bGU6IHsgdmFsdWU6IHRpdGxlIH0gfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyBmcmFnbWVudC4gVGhlIG90aGVyIHBhcnRzIChwYXJhbXMgZXRjLikgIHN0YXkgYXMgdGhlIGFyZS5cbiAgICogVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGB0cmlnZ2VyTmF2aWdhdGlvbmAgdGhhdCBjYW4gYmUgdXNlZCB0byBvbmx5IGNoYW5nZSB0aGUgZnJhZ21lbnQuXG4gICAqL1xuICBwdWJsaWMgc2V0RnJhZ21lbnQoZnJhZ21lbnQ6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJOYXZpZ2F0aW9uKHsgZnJhZ21lbnQgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIHdpdGggdGhlIGdpdmVuIG5ldyB1cmwuIFRoZSBvdGhlciBwYXJ0cyAocGFyYW1zIGV0Yy4pICBzdGF5IGFzIHRoZSBhcmUuXG4gICAqIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBgdHJpZ2dlck5hdmlnYXRpb25gIHRoYXQgY2FuIGJlIHVzZWQgdG8gb25seSBjaGFuZ2UgdGhlIHVybC5cbiAgICovXG4gIHB1YmxpYyBzZXRVcmwodXJsOiBBcnJheTxVcmxTZWdtZW50Pik6IHZvaWQge1xuICAgIHRoaXMudHJpZ2dlck5hdmlnYXRpb24oeyB1cmwgfSk7XG4gIH1cblxuICAvKipcbiAgICogVHJpZ2dlcnMgYSBuYXZpZ2F0aW9uIGJhc2VkIG9uIHRoZSBnaXZlbiBvcHRpb25zLiBJZiBhbiBvcHRpb24gaXMgdW5kZWZpbmVkIG9yIG51bGwsIGl0J3MgaWdub3JlZC4gRXhjZXB0IGZvciBmcmFnbWVudCwgd2hpY2ggaXMgb25seVxuICAgKiBpZ25vcmVkIGlmIGl0J3MgdW5kZWZpbmVkLCBiZWNhdXNlIG51bGwgaXMgYSB2YWxpZCB2YWx1ZSBmb3IgYSBmcmFnbWVudC5cbiAgICpcbiAgICogVGhlIG5vbi1pZ25vcmVkIHZhbHVlcyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIHNuYXBzaG90IG9mIHRoZSByb3V0ZS4gT25jZSB0aGUgc25hcHNob3QgaGFzIGJlZW4gbW9kaWZpZWQsXG4gICAqIHRoZSBvYnNlcnZhYmxlcyBjb3JyZXNwb25kaW5nIHRvIHRoZSB1cGRhdGVkIHBhcnRzIGVtaXQgdGhlIG5ldyB2YWx1ZS5cbiAgICpcbiAgICogU28sIHNldHRpbmcgcGFyYW1zIGFuZCBxdWVyeSBwYXJhbXMgd2lsbCBtYWtlIHRoZSBwYXJhbXMgYW5kIHF1ZXJ5UGFyYW1zIG9ic2VydmFibGVzIGVtaXQsIGJ1dCBub3QgdGhlIGZyYWdtZW50LCBkYXRhIGFuZFxuICAgKiB1cmwgb2JzZXJ2YWJsZXMgZm9yIGV4YW1wbGUuIFRoaXMgaXMgY29uc2lzdGVudCB0byBob3cgdGhlIHJvdXRlciBiZWhhdmVzLlxuICAgKlxuICAgKiBOb3RlOiBzaW5jZSB0aGUgdGl0bGUgb2YgYSByb3V0ZSBjYW4gYmVjb21lIHVuZGVmaW5lZCwgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGEgbmF2aWdhdGlvbiB3aGljaCBsZWF2ZXMgdGhlIHRpdGxlXG4gICAqIGFzIGl0IGlzIGFuZCBhIG5hdmlnYXRpb24gdGhhdCBzZXRzIHRoZSB0aXRsZSB0byB1bmRlZmluZWQsIGEgd3JhcHBlciBvYmplY3QgaXMgdXNlZCBmb3IgdGhlIHRpdGxlLiBTb1xuICAgKlxuICAgKiAtIGB0cmlnZ2VyTmF2aWdhdGlvbih7IHBhcmFtczouLi4gfSlgIGxlYXZlcyB0aGUgdGl0bGUgYXMgaXMgYmVjYXVzZSBpdCdzIHVuZGVmaW5lZCBpbiB0aGUgb3B0aW9uc1xuICAgKiAtIGB0cmlnZ2VyTmF2aWdhdGlvbih7IHRpdGxlOiB7IHZhbHVlOiAndGVzdCcgfSB9KWAgc2V0cyB0aGUgdGl0bGUgdG8gJ3Rlc3QnXG4gICAqIC0gYHRyaWdnZXJOYXZpZ2F0aW9uKHsgdGl0bGU6IHsgdmFsdWU6IHVuZGVmaW5lZCB9IH0pYCBzZXRzIHRoZSB0aXRsZSB0byB1bmRlZmluZWRcbiAgICovXG4gIHB1YmxpYyB0cmlnZ2VyTmF2aWdhdGlvbihvcHRpb25zOiB7XG4gICAgcGFyYW1zPzogUGFyYW1zO1xuICAgIHF1ZXJ5UGFyYW1zPzogUGFyYW1zO1xuICAgIGZyYWdtZW50Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBkYXRhPzogRGF0YSB8IG51bGw7XG4gICAgdGl0bGU/OiB7IHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQgfSB8IG51bGw7XG4gICAgdXJsPzogQXJyYXk8VXJsU2VnbWVudD4gfCBudWxsO1xuICB9KTogdm9pZCB7XG4gICAgLy8gc2V0IHRoZSBzbmFwc2hvdCBmaXJzdFxuICAgIGlmIChvcHRpb25zLnBhcmFtcykge1xuICAgICAgdGhpcy5zbmFwc2hvdC5wYXJhbXMgPSBvcHRpb25zLnBhcmFtcztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucXVlcnlQYXJhbXMpIHtcbiAgICAgIHRoaXMuc25hcHNob3QucXVlcnlQYXJhbXMgPSBvcHRpb25zLnF1ZXJ5UGFyYW1zO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNuYXBzaG90LmZyYWdtZW50ID0gb3B0aW9ucy5mcmFnbWVudDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgdGhpcy5zbmFwc2hvdC5kYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aXRsZSkge1xuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGUgdGl0bGUgaXMgcmVhZG9ubHksIGJ1dCB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gb3ZlcndyaXRlIGl0IGhlcmVcbiAgICAgIHRoaXMuc25hcHNob3QudGl0bGUgPSBvcHRpb25zLnRpdGxlLnZhbHVlO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy51cmwpIHtcbiAgICAgIHRoaXMuc25hcHNob3QudXJsID0gb3B0aW9ucy51cmw7XG4gICAgfVxuXG4gICAgLy8gdGhlbiBlbWl0IGV2ZXJ5dGhpbmcgdGhhdCBoYXMgY2hhbmdlZFxuICAgIGlmIChvcHRpb25zLnBhcmFtcykge1xuICAgICAgdGhpcy5wYXJhbXNTdWJqZWN0Lm5leHQodGhpcy5zbmFwc2hvdC5wYXJhbXMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy5xdWVyeVBhcmFtcykge1xuICAgICAgdGhpcy5xdWVyeVBhcmFtc1N1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LnF1ZXJ5UGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5mcmFnbWVudFN1YmplY3QubmV4dCh0aGlzLnNuYXBzaG90LmZyYWdtZW50KTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QuZGF0YSk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRpdGxlKSB7XG4gICAgICB0aGlzLnRpdGxlU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QudGl0bGUpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy51cmwpIHtcbiAgICAgIHRoaXMudXJsU3ViamVjdC5uZXh0KHRoaXMuc25hcHNob3QudXJsKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ0FjdGl2YXRlZFJvdXRlU3R1Yic7XG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IEFjdGl2YXRlZFJvdXRlU3R1YiwgYnkgY2FsbGluZyBpdHMgY29uc3RydWN0b3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHViUm91dGUob3B0aW9ucz86IEFjdGl2YXRlZFJvdXRlU3R1Yk9wdGlvbnMpOiBBY3RpdmF0ZWRSb3V0ZVN0dWIge1xuICByZXR1cm4gbmV3IEFjdGl2YXRlZFJvdXRlU3R1YihvcHRpb25zKTtcbn1cbiJdfQ==
|
|
@@ -715,7 +715,6 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
|
|
|
715
715
|
this._firstChild = null;
|
|
716
716
|
this._children = [];
|
|
717
717
|
this._pathFromRoot = [];
|
|
718
|
-
this._routeConfig = null;
|
|
719
718
|
this._root = this;
|
|
720
719
|
}
|
|
721
720
|
get parent() {
|
|
@@ -748,13 +747,17 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
|
|
|
748
747
|
set pathFromRoot(value) {
|
|
749
748
|
this._pathFromRoot = value;
|
|
750
749
|
}
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
750
|
+
get title() {
|
|
751
|
+
return this._title;
|
|
752
|
+
}
|
|
753
|
+
set title(value) {
|
|
754
|
+
this._title = value;
|
|
755
755
|
}
|
|
756
|
-
|
|
757
|
-
this.
|
|
756
|
+
get paramMap() {
|
|
757
|
+
return convertToParamMap(this.params);
|
|
758
|
+
}
|
|
759
|
+
get queryParamMap() {
|
|
760
|
+
return convertToParamMap(this.queryParams);
|
|
758
761
|
}
|
|
759
762
|
}
|
|
760
763
|
/**
|
|
@@ -770,6 +773,8 @@ class ActivatedRouteSnapshotStub extends ActivatedRouteSnapshot {
|
|
|
770
773
|
* - when changing the params, query params, fragment, etc., their associated observable emits unconditionally, instead of
|
|
771
774
|
* first checking if the value is actually different from before. It's thus the responsibility of the tester to not
|
|
772
775
|
* change the values if they're the same as before.
|
|
776
|
+
* - the params, paramMap, queryParams and queryParamMap objects of the route snapshot change when params or query params are set
|
|
777
|
+
* on the stub route. So if the code keeps a reference to params or paramMaps, it won't see the changes.
|
|
773
778
|
*/
|
|
774
779
|
class ActivatedRouteStub extends ActivatedRoute {
|
|
775
780
|
/**
|
|
@@ -792,8 +797,10 @@ class ActivatedRouteStub extends ActivatedRoute {
|
|
|
792
797
|
snapshot.params = (_f = options === null || options === void 0 ? void 0 : options.params) !== null && _f !== void 0 ? _f : {};
|
|
793
798
|
snapshot.queryParams = (_g = options === null || options === void 0 ? void 0 : options.queryParams) !== null && _g !== void 0 ? _g : {};
|
|
794
799
|
snapshot.data = (_h = options === null || options === void 0 ? void 0 : options.data) !== null && _h !== void 0 ? _h : {};
|
|
800
|
+
snapshot.title = options === null || options === void 0 ? void 0 : options.title;
|
|
795
801
|
snapshot.fragment = (_j = options === null || options === void 0 ? void 0 : options.fragment) !== null && _j !== void 0 ? _j : null;
|
|
796
802
|
snapshot.url = (_k = options === null || options === void 0 ? void 0 : options.url) !== null && _k !== void 0 ? _k : [];
|
|
803
|
+
// @ts-expect-error the routeConfig is readonly, but we need to overwrite it here
|
|
797
804
|
snapshot.routeConfig = (_l = options === null || options === void 0 ? void 0 : options.routeConfig) !== null && _l !== void 0 ? _l : null;
|
|
798
805
|
snapshot.firstChild = (_o = (_m = this.firstChild) === null || _m === void 0 ? void 0 : _m.snapshot) !== null && _o !== void 0 ? _o : null;
|
|
799
806
|
snapshot.children = (_q = (_p = this.children) === null || _p === void 0 ? void 0 : _p.map(route => route.snapshot)) !== null && _q !== void 0 ? _q : [];
|
|
@@ -803,6 +810,7 @@ class ActivatedRouteStub extends ActivatedRoute {
|
|
|
803
810
|
this.paramsSubject = new BehaviorSubject(this.snapshot.params);
|
|
804
811
|
this.queryParamsSubject = new BehaviorSubject(this.snapshot.queryParams);
|
|
805
812
|
this.dataSubject = new BehaviorSubject(this.snapshot.data);
|
|
813
|
+
this.titleSubject = new BehaviorSubject(this.snapshot.title);
|
|
806
814
|
this.fragmentSubject = new BehaviorSubject(this.snapshot.fragment);
|
|
807
815
|
this.urlSubject = new BehaviorSubject(this.snapshot.url);
|
|
808
816
|
this.params = this.paramsSubject.asObservable();
|
|
@@ -810,6 +818,8 @@ class ActivatedRouteStub extends ActivatedRoute {
|
|
|
810
818
|
this.data = this.dataSubject.asObservable();
|
|
811
819
|
this.fragment = this.fragmentSubject.asObservable();
|
|
812
820
|
this.url = this.urlSubject.asObservable();
|
|
821
|
+
// @ts-expect-error the title is readonly, but we need to be able to initialize it here
|
|
822
|
+
this.title = this.titleSubject.asObservable();
|
|
813
823
|
}
|
|
814
824
|
get root() {
|
|
815
825
|
return this._root;
|
|
@@ -830,7 +840,7 @@ class ActivatedRouteStub extends ActivatedRoute {
|
|
|
830
840
|
return this.snapshot.routeConfig;
|
|
831
841
|
}
|
|
832
842
|
/**
|
|
833
|
-
* Triggers a navigation with the given new parameters. All the other parts (query params etc.) stay as
|
|
843
|
+
* Triggers a navigation with the given new parameters. All the other parts (query params etc.) stay as they are.
|
|
834
844
|
* This is a shortcut to `triggerNavigation` that can be used to only change the parameters.
|
|
835
845
|
*/
|
|
836
846
|
setParams(params) {
|
|
@@ -838,7 +848,7 @@ class ActivatedRouteStub extends ActivatedRoute {
|
|
|
838
848
|
}
|
|
839
849
|
/**
|
|
840
850
|
* Triggers a navigation with the given new parameter. The other parameters, as well as all the other parts (query params etc.)
|
|
841
|
-
* stay as
|
|
851
|
+
* stay as they are.
|
|
842
852
|
* This is a shortcut to `triggerNavigation` that can be used to only change one parameter.
|
|
843
853
|
*/
|
|
844
854
|
setParam(name, value) {
|
|
@@ -875,6 +885,14 @@ class ActivatedRouteStub extends ActivatedRoute {
|
|
|
875
885
|
setDataItem(name, value) {
|
|
876
886
|
this.setData(Object.assign(Object.assign({}, this.snapshot.data), { [name]: value }));
|
|
877
887
|
}
|
|
888
|
+
/**
|
|
889
|
+
* Triggers a navigation with the given new title. The other parameters, as well as all the other parts (params etc.)
|
|
890
|
+
* stay as the are.
|
|
891
|
+
* This is a shortcut to `triggerNavigation` that can be used to only change the title.
|
|
892
|
+
*/
|
|
893
|
+
setTitle(title) {
|
|
894
|
+
this.triggerNavigation({ title: { value: title } });
|
|
895
|
+
}
|
|
878
896
|
/**
|
|
879
897
|
* Triggers a navigation with the given new fragment. The other parts (params etc.) stay as the are.
|
|
880
898
|
* This is a shortcut to `triggerNavigation` that can be used to only change the fragment.
|
|
@@ -898,6 +916,13 @@ class ActivatedRouteStub extends ActivatedRoute {
|
|
|
898
916
|
*
|
|
899
917
|
* So, setting params and query params will make the params and queryParams observables emit, but not the fragment, data and
|
|
900
918
|
* url observables for example. This is consistent to how the router behaves.
|
|
919
|
+
*
|
|
920
|
+
* Note: since the title of a route can become undefined, in order to be able to distinguish between a navigation which leaves the title
|
|
921
|
+
* as it is and a navigation that sets the title to undefined, a wrapper object is used for the title. So
|
|
922
|
+
*
|
|
923
|
+
* - `triggerNavigation({ params:... })` leaves the title as is because it's undefined in the options
|
|
924
|
+
* - `triggerNavigation({ title: { value: 'test' } })` sets the title to 'test'
|
|
925
|
+
* - `triggerNavigation({ title: { value: undefined } })` sets the title to undefined
|
|
901
926
|
*/
|
|
902
927
|
triggerNavigation(options) {
|
|
903
928
|
// set the snapshot first
|
|
@@ -913,6 +938,10 @@ class ActivatedRouteStub extends ActivatedRoute {
|
|
|
913
938
|
if (options.data) {
|
|
914
939
|
this.snapshot.data = options.data;
|
|
915
940
|
}
|
|
941
|
+
if (options.title) {
|
|
942
|
+
// @ts-expect-error the title is readonly, but we need to be able to overwrite it here
|
|
943
|
+
this.snapshot.title = options.title.value;
|
|
944
|
+
}
|
|
916
945
|
if (options.url) {
|
|
917
946
|
this.snapshot.url = options.url;
|
|
918
947
|
}
|
|
@@ -929,6 +958,9 @@ class ActivatedRouteStub extends ActivatedRoute {
|
|
|
929
958
|
if (options.data) {
|
|
930
959
|
this.dataSubject.next(this.snapshot.data);
|
|
931
960
|
}
|
|
961
|
+
if (options.title) {
|
|
962
|
+
this.titleSubject.next(this.snapshot.title);
|
|
963
|
+
}
|
|
932
964
|
if (options.url) {
|
|
933
965
|
this.urlSubject.next(this.snapshot.url);
|
|
934
966
|
}
|
|
@@ -1255,3 +1287,4 @@ function createMock(type) {
|
|
|
1255
1287
|
|
|
1256
1288
|
export { ActivatedRouteStub, ComponentTester, TestButton, TestElement, TestHtmlElement, TestInput, TestSelect, TestTextArea, createMock, fakeRoute, fakeSnapshot, speculoosMatchers, stubRoute };
|
|
1257
1289
|
//# sourceMappingURL=ngx-speculoos.mjs.map
|
|
1290
|
+
//# sourceMappingURL=ngx-speculoos.mjs.map
|