@plumile/router 0.1.17 → 0.1.19

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/README.md CHANGED
@@ -230,6 +230,50 @@ Type helper for strongly-typed route definitions.
230
230
 
231
231
  ## Advanced Usage
232
232
 
233
+ ### Per-Route Prepared Data & Typed Navigate
234
+
235
+ Each route created with `r({...})` now preserves:
236
+
237
+ - Prepared data type (return of `prepare`)
238
+ - URL parameter type
239
+ - Inferred typed query shape from its `query` schema
240
+
241
+ This enables discriminated narrowing using `entry.route?.path` and compile-time validation of `navigate` query objects.
242
+
243
+ ```ts
244
+ import { r, q, createRouter } from '@plumile/router';
245
+
246
+ const plans = r({
247
+ path: '/plans',
248
+ query: { page: q.number() } as const,
249
+ prepare: ({ query }) => ({ page: query.page }),
250
+ });
251
+ const user = r<{ userId: string }, { id: string }>({
252
+ path: '/users/:id',
253
+ prepare: ({ variables }) => ({ userId: variables.id }),
254
+ });
255
+ const { context } = createRouter([plans, user] as const);
256
+
257
+ const entry = context.get();
258
+ if (entry.route?.path === '/plans') {
259
+ const prepared = context.getPrepared('/plans');
260
+ // prepared?.page inferred as number | undefined
261
+ const typed = context.getTypedQuery('/plans');
262
+ // typed?.page inferred
263
+ }
264
+
265
+ // Typed navigate – query validated against the route schema
266
+ context.navigate({ pathname: '/plans', query: { page: 2 } });
267
+ ```
268
+
269
+ APIs:
270
+
271
+ - `context.getPrepared(path)` → prepared object for that matched path (if present).
272
+ - `context.getTypedQuery(path)` → typed query for path.
273
+ - `context.navigate({...})` → enforces schema shape when `pathname` matches a known literal path.
274
+
275
+ If a path is dynamic or no schema exists, the untyped fallback remains available.
276
+
233
277
  ### Typed Query Parameters (DSL)
234
278
 
235
279
  The router provides a lightweight schema DSL for parsing, typing, normalizing and serializing query strings.
@@ -1,13 +1,13 @@
1
1
  import { type MatchFunction, type ParamData } from 'path-to-regexp';
2
- import type { FlatRouteInput, Redirect, Route, PrepareResult } from './types.js';
2
+ import type { FlatRouteInput, Redirect, AnyRoute } from './types.js';
3
3
  export declare class FlatRoute<TParams extends ParamData> {
4
4
  path: string;
5
- routes: Route<PrepareResult>[];
5
+ routes: AnyRoute[];
6
6
  matchFunction: MatchFunction<TParams>;
7
7
  redirectTo?: string;
8
8
  constructor(input: FlatRouteInput<TParams>);
9
9
  }
10
- export declare function isRedirect(route: Route<PrepareResult> | Redirect): route is Redirect;
11
- export declare function buildRoute(routeConfig: (Route<PrepareResult> | Redirect)[], parentRoutes?: Route<PrepareResult>[], prefix?: string): FlatRoute<ParamData>[];
12
- export declare function buildRoutes(routeConfig: Route<PrepareResult>[]): FlatRoute<ParamData>[];
10
+ export declare function isRedirect(route: AnyRoute | Redirect): route is Redirect;
11
+ export declare function buildRoute(routeConfig: (AnyRoute | Redirect)[], parentRoutes?: AnyRoute[], prefix?: string): FlatRoute<ParamData>[];
12
+ export declare function buildRoutes(routeConfig: AnyRoute[]): FlatRoute<ParamData>[];
13
13
  //# sourceMappingURL=builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,KAAK,EACV,cAAc,EACd,QAAQ,EACR,KAAK,EACL,aAAa,EACd,MAAM,YAAY,CAAC;AAQpB,qBAAa,SAAS,CAAC,OAAO,SAAS,SAAS;IAEvC,IAAI,EAAE,MAAM,CAAC;IAGb,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC;IAG/B,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAGtC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAOR,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;CAOlD;AAQD,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,QAAQ,GACrC,KAAK,IAAI,QAAQ,CAGnB;AAYD,wBAAgB,UAAU,CACxB,WAAW,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,EAChD,YAAY,GAAE,KAAK,CAAC,aAAa,CAAC,EAAO,EACzC,MAAM,SAAK,GACV,SAAS,CAAC,SAAS,CAAC,EAAE,CA8DxB;AASD,wBAAgB,WAAW,CACzB,WAAW,EAAE,KAAK,CAAC,aAAa,CAAC,EAAE,GAClC,SAAS,CAAC,SAAS,CAAC,EAAE,CAExB"}
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3E,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAS,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ5E,qBAAa,SAAS,CAAC,OAAO,SAAS,SAAS;IAEvC,IAAI,EAAE,MAAM,CAAC;IAGb,MAAM,EAAE,QAAQ,EAAE,CAAC;IAGnB,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IAGtC,UAAU,CAAC,EAAE,MAAM,CAAC;gBAOR,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC;CAOlD;AAQD,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,GAAG,KAAK,IAAI,QAAQ,CAGxE;AAYD,wBAAgB,UAAU,CACxB,WAAW,EAAE,CAAC,QAAQ,GAAG,QAAQ,CAAC,EAAE,EACpC,YAAY,GAAE,QAAQ,EAAO,EAC7B,MAAM,SAAK,GACV,SAAS,CAAC,SAAS,CAAC,EAAE,CA8DxB;AASD,wBAAgB,WAAW,CAAC,WAAW,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,EAAE,CAE3E"}
@@ -68,4 +68,4 @@ export function buildRoute(routeConfig, parentRoutes = [], prefix = '') {
68
68
  export function buildRoutes(routeConfig) {
69
69
  return buildRoute(routeConfig);
70
70
  }
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQXNDLE1BQU0sZ0JBQWdCLENBQUM7QUFlM0UsTUFBTSxPQUFPLFNBQVM7SUFFYixJQUFJLENBQVM7SUFHYixNQUFNLENBQXlCO0lBRy9CLGFBQWEsQ0FBeUI7SUFHdEMsVUFBVSxDQUFVO0lBTzNCLFlBQW1CLEtBQThCO1FBQy9DLE1BQU0sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDckIsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7SUFDckMsQ0FBQztDQUNGO0FBUUQsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsS0FBc0M7SUFHdEMsT0FBUSxLQUFrQixDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUM7QUFDeEMsQ0FBQztBQVlELE1BQU0sVUFBVSxVQUFVLENBQ3hCLFdBQWdELEVBQ2hELGVBQXVDLEVBQUUsRUFDekMsTUFBTSxHQUFHLEVBQUU7SUFFWCxNQUFNLFVBQVUsR0FBMkIsRUFBRSxDQUFDO0lBRTlDLEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLElBQUksTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2xCLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDckIsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxFQUFFLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUNsRSxJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO1lBQzVCLElBQUksVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUMvQixVQUFVLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNuQyxDQUFDO1lBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN6QixDQUFDO1FBRUQsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVoQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBNkIsQ0FBQztRQUVuRCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUMzQyxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxZQUFZLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkUsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO1lBRTNCLFNBQVM7UUFDWCxDQUFDO1FBRUQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLElBQUksT0FBTyxFQUFFLEVBQUU7WUFDekMsUUFBUSxFQUFFLEtBQUs7U0FDaEIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDO1FBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUVELElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEIsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUUxQixJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxVQUFVLEdBQUcsR0FBRyxJQUFJLElBQUksVUFBVSxFQUFFLENBQUM7WUFDdkMsQ0FBQztZQUNELFVBQVUsQ0FBQyxJQUFJLENBQ2IsSUFBSSxTQUFTLENBQUM7Z0JBQ1osSUFBSTtnQkFDSixVQUFVO2dCQUNWLGFBQWE7Z0JBQ2IsTUFBTSxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUM7YUFDMUIsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsQ0FBQyxJQUFJLENBQ2IsSUFBSSxTQUFTLENBQUM7Z0JBQ1osSUFBSTtnQkFDSixhQUFhO2dCQUNiLE1BQU0sRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEtBQUssQ0FBQzthQUNqQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQVNELE1BQU0sVUFBVSxXQUFXLENBQ3pCLFdBQW1DO0lBRW5DLE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXRjaCwgdHlwZSBNYXRjaEZ1bmN0aW9uLCB0eXBlIFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcblxuaW1wb3J0IHR5cGUge1xuICBGbGF0Um91dGVJbnB1dCxcbiAgUmVkaXJlY3QsXG4gIFJvdXRlLFxuICBQcmVwYXJlUmVzdWx0LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZmxhdHRlbmVkIHJvdXRlIHdpdGggYSBjb21waWxlZCBtYXRjaCBmdW5jdGlvbi5cbiAqIFRoaXMgaXMgYW4gaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gdXNlZCBieSB0aGUgcm91dGVyIHRvIGVmZmljaWVudGx5IG1hdGNoIFVSTHMuXG4gKlxuICogQHRlbXBsYXRlIFRQYXJhbXMgLSBSb3V0ZSBwYXJhbWV0ZXIgdHlwZXMgZXh0cmFjdGVkIGZyb20gdGhlIFVSTCBwYXRoXG4gKi9cbmV4cG9ydCBjbGFzcyBGbGF0Um91dGU8VFBhcmFtcyBleHRlbmRzIFBhcmFtRGF0YT4ge1xuICAvKiogVGhlIFVSTCBwYXRoIHBhdHRlcm4gZm9yIHRoaXMgcm91dGUgKi9cbiAgcHVibGljIHBhdGg6IHN0cmluZztcblxuICAvKiogTmVzdGVkIHJvdXRlcyB0aGF0IHNob3VsZCBiZSByZW5kZXJlZCB3aXRoaW4gdGhpcyByb3V0ZSAqL1xuICBwdWJsaWMgcm91dGVzOiBSb3V0ZTxQcmVwYXJlUmVzdWx0PltdO1xuXG4gIC8qKiBDb21waWxlZCBmdW5jdGlvbiB0byBtYXRjaCBVUkwgcGF0aHMgYWdhaW5zdCB0aGlzIHJvdXRlIHBhdHRlcm4gKi9cbiAgcHVibGljIG1hdGNoRnVuY3Rpb246IE1hdGNoRnVuY3Rpb248VFBhcmFtcz47XG5cbiAgLyoqIE9wdGlvbmFsIHJlZGlyZWN0IGRlc3RpbmF0aW9uIGlmIHRoaXMgcm91dGUgc2hvdWxkIHJlZGlyZWN0ICovXG4gIHB1YmxpYyByZWRpcmVjdFRvPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEZsYXRSb3V0ZSBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGlucHV0IC0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIGZsYXQgcm91dGVcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihpbnB1dDogRmxhdFJvdXRlSW5wdXQ8VFBhcmFtcz4pIHtcbiAgICBjb25zdCB7IG1hdGNoRnVuY3Rpb24sIHBhdGgsIHJlZGlyZWN0VG8sIHJvdXRlcyB9ID0gaW5wdXQ7XG4gICAgdGhpcy5wYXRoID0gcGF0aDtcbiAgICB0aGlzLnJlZGlyZWN0VG8gPSByZWRpcmVjdFRvO1xuICAgIHRoaXMucm91dGVzID0gcm91dGVzO1xuICAgIHRoaXMubWF0Y2hGdW5jdGlvbiA9IG1hdGNoRnVuY3Rpb247XG4gIH1cbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgcm91dGUgY29uZmlndXJhdGlvbiBpcyBhIHJlZGlyZWN0LlxuICpcbiAqIEBwYXJhbSByb3V0ZSAtIFJvdXRlIG9yIHJlZGlyZWN0IGNvbmZpZ3VyYXRpb24gdG8gY2hlY2tcbiAqIEByZXR1cm5zIFRydWUgaWYgdGhlIHJvdXRlIGlzIGEgcmVkaXJlY3QgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWRpcmVjdChcbiAgcm91dGU6IFJvdXRlPFByZXBhcmVSZXN1bHQ+IHwgUmVkaXJlY3QsXG4pOiByb3V0ZSBpcyBSZWRpcmVjdCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gIHJldHVybiAocm91dGUgYXMgUmVkaXJlY3QpLnRvICE9IG51bGw7XG59XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgYnVpbGRzIGEgZmxhdCBsaXN0IG9mIHJvdXRlcyBmcm9tIGEgbmVzdGVkIHJvdXRlIGNvbmZpZ3VyYXRpb24uXG4gKiBUaGlzIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgcm91dGUgdHJlZSBhbmQgY3JlYXRlcyBGbGF0Um91dGUgaW5zdGFuY2VzIHdpdGhcbiAqIGNvbXBpbGVkIHBhdGggbWF0Y2hlcnMgZm9yIGVmZmljaWVudCBVUkwgbWF0Y2hpbmcuXG4gKlxuICogQHBhcmFtIHJvdXRlQ29uZmlnIC0gQXJyYXkgb2Ygcm91dGUgb3IgcmVkaXJlY3QgY29uZmlndXJhdGlvbnNcbiAqIEBwYXJhbSBwYXJlbnRSb3V0ZXMgLSBQYXJlbnQgcm91dGVzIGluIHRoZSBjdXJyZW50IHBhdGggKGZvciBuZXN0ZWQgcm91dGVzKVxuICogQHBhcmFtIHByZWZpeCAtIFVSTCBwcmVmaXggZnJvbSBwYXJlbnQgcm91dGVzXG4gKiBAcmV0dXJucyBBcnJheSBvZiBmbGF0dGVuZWQgcm91dGVzIHJlYWR5IGZvciBtYXRjaGluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRSb3V0ZShcbiAgcm91dGVDb25maWc6IChSb3V0ZTxQcmVwYXJlUmVzdWx0PiB8IFJlZGlyZWN0KVtdLFxuICBwYXJlbnRSb3V0ZXM6IFJvdXRlPFByZXBhcmVSZXN1bHQ+W10gPSBbXSxcbiAgcHJlZml4ID0gJycsXG4pOiBGbGF0Um91dGU8UGFyYW1EYXRhPltdIHtcbiAgY29uc3QgZmxhdFJvdXRlczogRmxhdFJvdXRlPFBhcmFtRGF0YT5bXSA9IFtdO1xuXG4gIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVDb25maWcpIHtcbiAgICBjb25zdCBwYXJ0cyA9IFtdO1xuICAgIGlmIChwcmVmaXggIT09ICcnKSB7XG4gICAgICBwYXJ0cy5wdXNoKHByZWZpeCk7XG4gICAgfVxuICAgIGlmIChyb3V0ZS5wYXRoICE9IG51bGwgJiYgcm91dGUucGF0aCAhPT0gJycgJiYgcm91dGUucGF0aCAhPT0gJy8nKSB7XG4gICAgICBsZXQgbm9ybWFsaXplZCA9IHJvdXRlLnBhdGg7XG4gICAgICBpZiAobm9ybWFsaXplZC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZWQuc2xpY2UoMSk7XG4gICAgICB9XG4gICAgICBwYXJ0cy5wdXNoKG5vcm1hbGl6ZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IG5ld1BhdGggPSBwYXJ0cy5qb2luKCcvJyk7XG5cbiAgICBjb25zdCB7IGNoaWxkcmVuIH0gPSByb3V0ZSBhcyBSb3V0ZTxQcmVwYXJlUmVzdWx0PjtcblxuICAgIGlmICghaXNSZWRpcmVjdChyb3V0ZSkgJiYgY2hpbGRyZW4gIT0gbnVsbCkge1xuICAgICAgY29uc3Qgcm91dGVzID0gYnVpbGRSb3V0ZShjaGlsZHJlbiwgWy4uLnBhcmVudFJvdXRlcywgcm91dGVdLCBuZXdQYXRoKTtcbiAgICAgIGZsYXRSb3V0ZXMucHVzaCguLi5yb3V0ZXMpO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnRpbnVlXG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXRjaEZ1bmN0aW9uID0gbWF0Y2goYC8ke25ld1BhdGh9YCwge1xuICAgICAgdHJhaWxpbmc6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgbGV0IHBhdGggPSBuZXdQYXRoO1xuICAgIGlmICghbmV3UGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHBhdGggPSBgLyR7bmV3UGF0aH1gO1xuICAgIH1cblxuICAgIGlmIChpc1JlZGlyZWN0KHJvdXRlKSkge1xuICAgICAgbGV0IHJlZGlyZWN0VG8gPSByb3V0ZS50bztcblxuICAgICAgaWYgKCFyZWRpcmVjdFRvLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgICByZWRpcmVjdFRvID0gYCR7cGF0aH0vJHtyZWRpcmVjdFRvfWA7XG4gICAgICB9XG4gICAgICBmbGF0Um91dGVzLnB1c2goXG4gICAgICAgIG5ldyBGbGF0Um91dGUoe1xuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgcmVkaXJlY3RUbyxcbiAgICAgICAgICBtYXRjaEZ1bmN0aW9uLFxuICAgICAgICAgIHJvdXRlczogWy4uLnBhcmVudFJvdXRlc10sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhdFJvdXRlcy5wdXNoKFxuICAgICAgICBuZXcgRmxhdFJvdXRlKHtcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIG1hdGNoRnVuY3Rpb24sXG4gICAgICAgICAgcm91dGVzOiBbLi4ucGFyZW50Um91dGVzLCByb3V0ZV0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmxhdFJvdXRlcztcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSBmbGF0IHJvdXRlIGxpc3QgZnJvbSB0aGUgZ2l2ZW4gcm91dGUgY29uZmlndXJhdGlvbi5cbiAqIFRoaXMgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHJvdXRlIGJ1aWxkaW5nLlxuICpcbiAqIEBwYXJhbSByb3V0ZUNvbmZpZyAtIEFycmF5IG9mIHJvdXRlIGNvbmZpZ3VyYXRpb25zIHRvIGZsYXR0ZW5cbiAqIEByZXR1cm5zIEFycmF5IG9mIGZsYXR0ZW5lZCByb3V0ZXMgcmVhZHkgZm9yIG1hdGNoaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFJvdXRlcyhcbiAgcm91dGVDb25maWc6IFJvdXRlPFByZXBhcmVSZXN1bHQ+W10sXG4pOiBGbGF0Um91dGU8UGFyYW1EYXRhPltdIHtcbiAgcmV0dXJuIGJ1aWxkUm91dGUocm91dGVDb25maWcpO1xufVxuIl19
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9idWlsZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQXNDLE1BQU0sZ0JBQWdCLENBQUM7QUFVM0UsTUFBTSxPQUFPLFNBQVM7SUFFYixJQUFJLENBQVM7SUFHYixNQUFNLENBQWE7SUFHbkIsYUFBYSxDQUF5QjtJQUd0QyxVQUFVLENBQVU7SUFPM0IsWUFBbUIsS0FBOEI7UUFDL0MsTUFBTSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUNyQixJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztJQUNyQyxDQUFDO0NBQ0Y7QUFRRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEtBQTBCO0lBRW5ELE9BQVEsS0FBa0IsQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDO0FBQ3hDLENBQUM7QUFZRCxNQUFNLFVBQVUsVUFBVSxDQUN4QixXQUFvQyxFQUNwQyxlQUEyQixFQUFFLEVBQzdCLE1BQU0sR0FBRyxFQUFFO0lBRVgsTUFBTSxVQUFVLEdBQTJCLEVBQUUsQ0FBQztJQUU5QyxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsRUFBRSxDQUFDO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUNqQixJQUFJLE1BQU0sS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUNsQixLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssRUFBRSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssR0FBRyxFQUFFLENBQUM7WUFDbEUsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDL0IsVUFBVSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkMsQ0FBQztZQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFaEMsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEtBQTZCLENBQUM7UUFFbkQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0MsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsWUFBWSxFQUFFLEtBQUssQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZFLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztZQUUzQixTQUFTO1FBQ1gsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLEtBQUssQ0FBQyxJQUFJLE9BQU8sRUFBRSxFQUFFO1lBQ3pDLFFBQVEsRUFBRSxLQUFLO1NBQ2hCLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxHQUFHLE9BQU8sQ0FBQztRQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQzdCLElBQUksR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxJQUFJLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3RCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFFMUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDaEMsVUFBVSxHQUFHLEdBQUcsSUFBSSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3ZDLENBQUM7WUFDRCxVQUFVLENBQUMsSUFBSSxDQUNiLElBQUksU0FBUyxDQUFDO2dCQUNaLElBQUk7Z0JBQ0osVUFBVTtnQkFDVixhQUFhO2dCQUNiLE1BQU0sRUFBRSxDQUFDLEdBQUcsWUFBWSxDQUFlO2FBQ3hDLENBQUMsQ0FDSCxDQUFDO1FBQ0osQ0FBQzthQUFNLENBQUM7WUFDTixVQUFVLENBQUMsSUFBSSxDQUNiLElBQUksU0FBUyxDQUFDO2dCQUNaLElBQUk7Z0JBQ0osYUFBYTtnQkFDYixNQUFNLEVBQUUsQ0FBQyxHQUFHLFlBQVksRUFBRSxLQUFLLENBQWU7YUFDL0MsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU8sVUFBVSxDQUFDO0FBQ3BCLENBQUM7QUFTRCxNQUFNLFVBQVUsV0FBVyxDQUFDLFdBQXVCO0lBQ2pELE9BQU8sVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYXRjaCwgdHlwZSBNYXRjaEZ1bmN0aW9uLCB0eXBlIFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcblxuaW1wb3J0IHR5cGUgeyBGbGF0Um91dGVJbnB1dCwgUmVkaXJlY3QsIFJvdXRlLCBBbnlSb3V0ZSB9IGZyb20gJy4vdHlwZXMuanMnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBmbGF0dGVuZWQgcm91dGUgd2l0aCBhIGNvbXBpbGVkIG1hdGNoIGZ1bmN0aW9uLlxuICogVGhpcyBpcyBhbiBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiB1c2VkIGJ5IHRoZSByb3V0ZXIgdG8gZWZmaWNpZW50bHkgbWF0Y2ggVVJMcy5cbiAqXG4gKiBAdGVtcGxhdGUgVFBhcmFtcyAtIFJvdXRlIHBhcmFtZXRlciB0eXBlcyBleHRyYWN0ZWQgZnJvbSB0aGUgVVJMIHBhdGhcbiAqL1xuZXhwb3J0IGNsYXNzIEZsYXRSb3V0ZTxUUGFyYW1zIGV4dGVuZHMgUGFyYW1EYXRhPiB7XG4gIC8qKiBUaGUgVVJMIHBhdGggcGF0dGVybiBmb3IgdGhpcyByb3V0ZSAqL1xuICBwdWJsaWMgcGF0aDogc3RyaW5nO1xuXG4gIC8qKiBOZXN0ZWQgcm91dGVzIHRoYXQgc2hvdWxkIGJlIHJlbmRlcmVkIHdpdGhpbiB0aGlzIHJvdXRlICovXG4gIHB1YmxpYyByb3V0ZXM6IEFueVJvdXRlW107XG5cbiAgLyoqIENvbXBpbGVkIGZ1bmN0aW9uIHRvIG1hdGNoIFVSTCBwYXRocyBhZ2FpbnN0IHRoaXMgcm91dGUgcGF0dGVybiAqL1xuICBwdWJsaWMgbWF0Y2hGdW5jdGlvbjogTWF0Y2hGdW5jdGlvbjxUUGFyYW1zPjtcblxuICAvKiogT3B0aW9uYWwgcmVkaXJlY3QgZGVzdGluYXRpb24gaWYgdGhpcyByb3V0ZSBzaG91bGQgcmVkaXJlY3QgKi9cbiAgcHVibGljIHJlZGlyZWN0VG8/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgRmxhdFJvdXRlIGluc3RhbmNlLlxuICAgKlxuICAgKiBAcGFyYW0gaW5wdXQgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgZmxhdCByb3V0ZVxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGlucHV0OiBGbGF0Um91dGVJbnB1dDxUUGFyYW1zPikge1xuICAgIGNvbnN0IHsgbWF0Y2hGdW5jdGlvbiwgcGF0aCwgcmVkaXJlY3RUbywgcm91dGVzIH0gPSBpbnB1dDtcbiAgICB0aGlzLnBhdGggPSBwYXRoO1xuICAgIHRoaXMucmVkaXJlY3RUbyA9IHJlZGlyZWN0VG87XG4gICAgdGhpcy5yb3V0ZXMgPSByb3V0ZXM7XG4gICAgdGhpcy5tYXRjaEZ1bmN0aW9uID0gbWF0Y2hGdW5jdGlvbjtcbiAgfVxufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgYSByb3V0ZSBjb25maWd1cmF0aW9uIGlzIGEgcmVkaXJlY3QuXG4gKlxuICogQHBhcmFtIHJvdXRlIC0gUm91dGUgb3IgcmVkaXJlY3QgY29uZmlndXJhdGlvbiB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgcm91dGUgaXMgYSByZWRpcmVjdCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1JlZGlyZWN0KHJvdXRlOiBBbnlSb3V0ZSB8IFJlZGlyZWN0KTogcm91dGUgaXMgUmVkaXJlY3Qge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICByZXR1cm4gKHJvdXRlIGFzIFJlZGlyZWN0KS50byAhPSBudWxsO1xufVxuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGJ1aWxkcyBhIGZsYXQgbGlzdCBvZiByb3V0ZXMgZnJvbSBhIG5lc3RlZCByb3V0ZSBjb25maWd1cmF0aW9uLlxuICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJvdXRlIHRyZWUgYW5kIGNyZWF0ZXMgRmxhdFJvdXRlIGluc3RhbmNlcyB3aXRoXG4gKiBjb21waWxlZCBwYXRoIG1hdGNoZXJzIGZvciBlZmZpY2llbnQgVVJMIG1hdGNoaW5nLlxuICpcbiAqIEBwYXJhbSByb3V0ZUNvbmZpZyAtIEFycmF5IG9mIHJvdXRlIG9yIHJlZGlyZWN0IGNvbmZpZ3VyYXRpb25zXG4gKiBAcGFyYW0gcGFyZW50Um91dGVzIC0gUGFyZW50IHJvdXRlcyBpbiB0aGUgY3VycmVudCBwYXRoIChmb3IgbmVzdGVkIHJvdXRlcylcbiAqIEBwYXJhbSBwcmVmaXggLSBVUkwgcHJlZml4IGZyb20gcGFyZW50IHJvdXRlc1xuICogQHJldHVybnMgQXJyYXkgb2YgZmxhdHRlbmVkIHJvdXRlcyByZWFkeSBmb3IgbWF0Y2hpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUm91dGUoXG4gIHJvdXRlQ29uZmlnOiAoQW55Um91dGUgfCBSZWRpcmVjdClbXSxcbiAgcGFyZW50Um91dGVzOiBBbnlSb3V0ZVtdID0gW10sXG4gIHByZWZpeCA9ICcnLFxuKTogRmxhdFJvdXRlPFBhcmFtRGF0YT5bXSB7XG4gIGNvbnN0IGZsYXRSb3V0ZXM6IEZsYXRSb3V0ZTxQYXJhbURhdGE+W10gPSBbXTtcblxuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlQ29uZmlnKSB7XG4gICAgY29uc3QgcGFydHMgPSBbXTtcbiAgICBpZiAocHJlZml4ICE9PSAnJykge1xuICAgICAgcGFydHMucHVzaChwcmVmaXgpO1xuICAgIH1cbiAgICBpZiAocm91dGUucGF0aCAhPSBudWxsICYmIHJvdXRlLnBhdGggIT09ICcnICYmIHJvdXRlLnBhdGggIT09ICcvJykge1xuICAgICAgbGV0IG5vcm1hbGl6ZWQgPSByb3V0ZS5wYXRoO1xuICAgICAgaWYgKG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVkLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgcGFydHMucHVzaChub3JtYWxpemVkKTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdQYXRoID0gcGFydHMuam9pbignLycpO1xuXG4gICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gcm91dGUgYXMgUm91dGU8YW55LCBhbnksIGFueT47XG5cbiAgICBpZiAoIWlzUmVkaXJlY3Qocm91dGUpICYmIGNoaWxkcmVuICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHJvdXRlcyA9IGJ1aWxkUm91dGUoY2hpbGRyZW4sIFsuLi5wYXJlbnRSb3V0ZXMsIHJvdXRlXSwgbmV3UGF0aCk7XG4gICAgICBmbGF0Um91dGVzLnB1c2goLi4ucm91dGVzKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgbWF0Y2hGdW5jdGlvbiA9IG1hdGNoKGAvJHtuZXdQYXRofWAsIHtcbiAgICAgIHRyYWlsaW5nOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIGxldCBwYXRoID0gbmV3UGF0aDtcbiAgICBpZiAoIW5ld1BhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke25ld1BhdGh9YDtcbiAgICB9XG5cbiAgICBpZiAoaXNSZWRpcmVjdChyb3V0ZSkpIHtcbiAgICAgIGxldCByZWRpcmVjdFRvID0gcm91dGUudG87XG5cbiAgICAgIGlmICghcmVkaXJlY3RUby5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcmVkaXJlY3RUbyA9IGAke3BhdGh9LyR7cmVkaXJlY3RUb31gO1xuICAgICAgfVxuICAgICAgZmxhdFJvdXRlcy5wdXNoKFxuICAgICAgICBuZXcgRmxhdFJvdXRlKHtcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHJlZGlyZWN0VG8sXG4gICAgICAgICAgbWF0Y2hGdW5jdGlvbixcbiAgICAgICAgICByb3V0ZXM6IFsuLi5wYXJlbnRSb3V0ZXNdIGFzIEFueVJvdXRlW10sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmxhdFJvdXRlcy5wdXNoKFxuICAgICAgICBuZXcgRmxhdFJvdXRlKHtcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIG1hdGNoRnVuY3Rpb24sXG4gICAgICAgICAgcm91dGVzOiBbLi4ucGFyZW50Um91dGVzLCByb3V0ZV0gYXMgQW55Um91dGVbXSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmbGF0Um91dGVzO1xufVxuXG4vKipcbiAqIEJ1aWxkcyBhIGZsYXQgcm91dGUgbGlzdCBmcm9tIHRoZSBnaXZlbiByb3V0ZSBjb25maWd1cmF0aW9uLlxuICogVGhpcyBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3Igcm91dGUgYnVpbGRpbmcuXG4gKlxuICogQHBhcmFtIHJvdXRlQ29uZmlnIC0gQXJyYXkgb2Ygcm91dGUgY29uZmlndXJhdGlvbnMgdG8gZmxhdHRlblxuICogQHJldHVybnMgQXJyYXkgb2YgZmxhdHRlbmVkIHJvdXRlcyByZWFkeSBmb3IgbWF0Y2hpbmdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkUm91dGVzKHJvdXRlQ29uZmlnOiBBbnlSb3V0ZVtdKTogRmxhdFJvdXRlPFBhcmFtRGF0YT5bXSB7XG4gIHJldHVybiBidWlsZFJvdXRlKHJvdXRlQ29uZmlnKTtcbn1cbiJdfQ==
@@ -1,13 +1,13 @@
1
- import type { Route, RoutingContextType } from '../types.js';
2
- export type CreateRouterReturn = {
1
+ import type { RoutingContextType, AnyRoute, PreparedAccess } from '../types.js';
2
+ export type CreateRouterReturn<R extends AnyRoute[]> = {
3
3
  cleanup: () => void;
4
- context: RoutingContextType<any>;
4
+ context: RoutingContextType<any> & PreparedAccess<R>;
5
5
  };
6
- export default function createRouter(routes: Route<any, any>[], opts?: {
6
+ export default function createRouter<R extends AnyRoute[]>(routes: [...R] | AnyRoute[], opts?: {
7
7
  devtools?: boolean | {
8
8
  global?: boolean;
9
9
  panel?: boolean;
10
10
  shortcut?: string;
11
11
  };
12
- }): CreateRouterReturn;
12
+ }): CreateRouterReturn<R extends AnyRoute[] ? R : AnyRoute[]>;
13
13
  //# sourceMappingURL=createRouter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,KAAK,EAEL,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AAKrB,MAAM,MAAM,kBAAkB,GAAG;IAE/B,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,CAAC;CAClC,CAAC;AAkCF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,MAAM,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EACzB,IAAI,GAAE;IACJ,QAAQ,CAAC,EACL,OAAO,GACP;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD,GACL,kBAAkB,CAqsBpB"}
1
+ {"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAEV,kBAAkB,EAElB,QAAQ,EACR,cAAc,EAEf,MAAM,aAAa,CAAC;AAKrB,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EAAE,IAAI;IAErD,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,OAAO,EAAE,kBAAkB,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;CACtD,CAAC;AAqCF,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,CAAC,SAAS,QAAQ,EAAE,EACvD,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,EAC3B,IAAI,GAAE;IACJ,QAAQ,CAAC,EACL,OAAO,GACP;QAAE,MAAM,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACzD,GACL,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EAAE,GAAG,CAAC,GAAG,QAAQ,EAAE,CAAC,CAutB3D"}
@@ -234,7 +234,7 @@ export default function createRouter(routes, opts = {}) {
234
234
  subscribers.set(id, callback);
235
235
  return dispose;
236
236
  },
237
- navigate({ pathname, query, filters: navFilters, replace, }) {
237
+ navigate({ pathname, query, filters: navFilters, replace }) {
238
238
  const current = currentEntry;
239
239
  const targetPathname = pathname ?? current.location.pathname;
240
240
  let schema;
@@ -280,13 +280,39 @@ export default function createRouter(routes, opts = {}) {
280
280
  filterSchema,
281
281
  });
282
282
  const locationObj = { pathname: targetPathname, search, hash: '' };
283
- if (replace) {
283
+ if (replace === true) {
284
284
  history.set(locationObj);
285
285
  }
286
286
  else {
287
287
  history.push(locationObj);
288
288
  }
289
289
  },
290
+ getPrepared(path) {
291
+ try {
292
+ const entry = currentEntry;
293
+ for (const pr of entry.preparedMatch.routes) {
294
+ if (pr.path === path) {
295
+ return pr.prepared;
296
+ }
297
+ }
298
+ return undefined;
299
+ }
300
+ catch {
301
+ return undefined;
302
+ }
303
+ },
304
+ getTypedQuery(path) {
305
+ try {
306
+ const entry = currentEntry;
307
+ if (entry.route?.path === path) {
308
+ return entry.typedQuery;
309
+ }
310
+ return undefined;
311
+ }
312
+ catch {
313
+ return undefined;
314
+ }
315
+ },
290
316
  };
291
317
  if (devtoolsGlobal) {
292
318
  try {
@@ -630,4 +656,4 @@ export default function createRouter(routes, opts = {}) {
630
656
  }
631
657
  return { cleanup, context };
632
658
  }
633
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sbUJBQW1CLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLEtBQUssSUFBSSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQWtEOUQsTUFBTSxDQUFDLE9BQU8sVUFBVSxZQUFZLENBQ2xDLE1BQXlCLEVBQ3pCLE9BSUksRUFBRTtJQUdOLElBQUksY0FBdUIsQ0FBQztJQUM1QixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDMUIsSUFBSSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7SUFDckMsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDO2dCQUNILE9BQU8sQ0FDTCxPQUFPLE9BQU8sS0FBSyxXQUFXO29CQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQ3RDLENBQUM7WUFDSixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFD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RyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQzs0QkFDeEIsT0FBTyxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7d0JBQ2pDLENBQUM7d0JBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDcEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDOUIsSUFBSSxLQUFLLEtBQUssZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDOzRCQUNuRCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO2dDQUNsQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7NEJBQy9CLENBQUM7aUNBQU0sQ0FBQztnQ0FDTixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7NEJBQzlCLENBQUM7d0JBQ0gsQ0FBQztvQkFDSCxDQUFDO29CQUFDLE1BQU0sQ0FBQztvQkFFVCxDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFBQyxNQUFNLENBQUM7UUFFVCxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1aWxkUm91dGVzIH0gZnJvbSAnLi4vYnVpbGRlci5qcyc7XG5pbXBvcnQgeyBCcm93c2VySGlzdG9yeSB9IGZyb20gJy4uL2hpc3RvcnkvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0TWF0Y2hlZFJvdXRlLCBwcmVwYXJlTWF0Y2ggfSBmcm9tICcuLi90b29scy5qcyc7XG5pbXBvcnQgeyBwYXJzZVR5cGVkUXVlcnkgfSBmcm9tICcuLi90b29scy9xdWVyeS1kc2wuanMnO1xuaW1wb3J0IHsgcGFyc2VSYXdRdWVyeSB9IGZyb20gJy4uL3Rvb2xzL3F1ZXJ5LmpzJztcbmltcG9ydCB7IGJ1aWxkU2VhcmNoIH0gZnJvbSAnLi4vdG9vbHMvYnVpbGRTZWFyY2guanMnO1xuaW1wb3J0IGJ1aWxkQ29tYmluZWRTZWFyY2ggZnJvbSAnLi4vdG9vbHMvYnVpbGRDb21iaW5lZFNlYXJjaC5qcyc7XG5pbXBvcnQgeyBwYXJzZSBhcyBwYXJzZUZpbHRlcnMgfSBmcm9tICdAcGx1bWlsZS9maWx0ZXItcXVlcnknO1xuaW1wb3J0IHR5cGUge1xuICBSb3V0ZSxcbiAgUm91dGVFbnRyeSxcbiAgUm91dGluZ0NvbnRleHRUeXBlLFxuICBTdWJzY3JpYmVDYWxsYmFjayxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKipcbiAqIFJldHVybiB0eXBlIGZvciB0aGUgY3JlYXRlUm91dGVyIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVSb3V0ZXJSZXR1cm4gPSB7XG4gIC8qKiBGdW5jdGlvbiB0byBjbGVhbiB1cCByb3V0ZXIgbGlzdGVuZXJzIGFuZCByZXNvdXJjZXMgKi9cbiAgY2xlYW51cDogKCkgPT4gdm9pZDtcbiAgLyoqIFJvdXRlciBjb250ZXh0IG9iamVjdCBmb3IgdGhlIFJlYWN0IENvbnRleHQgUHJvdmlkZXIgKi9cbiAgY29udGV4dDogUm91dGluZ0NvbnRleHRUeXBlPGFueT47XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb21wbGV0ZSByb3V0ZXIgc3lzdGVtIGZyb20gcm91dGUgY29uZmlndXJhdGlvbnMuXG4gKlxuICogVGhpcyByb3V0ZXIgaXMgYnVpbHQgZnJvbSB0aGUgc2FtZSBwcmltaXRpdmVzIGFzIHJlYWN0LXJvdXRlciBidXQgd2l0aCBhZGRpdGlvbmFsXG4gKiBmZWF0dXJlcyBmb3IgZGF0YSBwcmVsb2FkaW5nIGFuZCBjb2RlIHNwbGl0dGluZy4gRWFjaCByb3V0ZSBjYW4gY29udGFpbiBib3RoIGFcbiAqIENvbXBvbmVudCBhbmQgYSBwcmVwYXJlKCkgZnVuY3Rpb24gdGhhdCBjYW4gcHJlbG9hZCBkYXRhIGZvciB0aGUgY29tcG9uZW50LlxuICpcbiAqIFRoZSByb3V0ZXIgd2F0Y2hlcyBmb3IgY2hhbmdlcyB0byB0aGUgY3VycmVudCBsb2NhdGlvbiB2aWEgdGhlIEhUTUw1IEhpc3RvcnkgQVBJLFxuICogbWFwcyB0aGUgbG9jYXRpb24gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcm91dGUgZW50cnksIGFuZCB0aGVuIHByZWxvYWRzIHRoZSBjb2RlXG4gKiBhbmQgZGF0YSBmb3IgdGhlIHJvdXRlIGJlZm9yZSByZW5kZXJpbmcuXG4gKlxuICogQHBhcmFtIHJvdXRlcyAtIEFycmF5IG9mIHJvdXRlIGNvbmZpZ3VyYXRpb25zXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0aGUgcm91dGVyIGNvbnRleHQgYW5kIGNsZWFudXAgZnVuY3Rpb25cbiAqXG4gIHByZXBhcmVkTWF0Y2g6IHByZXBhcmVNYXRjaChyb3V0ZSwgcGFyc2VSYXdRdWVyeShoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkpLFxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgcm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJy91c2Vycy86aWQnLFxuICogICAgIHJlc291cmNlUGFnZTogZ2V0UmVzb3VyY2VQYWdlKCdVc2VyUHJvZmlsZScsICgpID0+IGltcG9ydCgnLi9Vc2VyUHJvZmlsZScpKSxcbiAqICAgICBwcmVwYXJlOiAoeyB2YXJpYWJsZXMgfSkgPT4gKHsgdXNlcklkOiB2YXJpYWJsZXMuaWQgfSlcbiAqICAgfVxuICogXTtcbiAqXG4gKiBjb25zdCB7IGNvbnRleHQsIGNsZWFudXAgfSA9IGNyZWF0ZVJvdXRlcihyb3V0ZXMpO1xuICpcbiAqIC8vIFVzZSBpbiBSZWFjdCBhcHBcbiAqIDxSb3V0aW5nQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dH0+XG4gKiAgIDxSb3V0ZXJSZW5kZXJlciAvPlxuICogPC9Sb3V0aW5nQ29udGV4dC5Qcm92aWRlcj5cbiAqIGBgYFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVSb3V0ZXIoXG4gIHJvdXRlczogUm91dGU8YW55LCBhbnk+W10sXG4gIG9wdHM6IHtcbiAgICBkZXZ0b29scz86XG4gICAgICB8IGJvb2xlYW5cbiAgICAgIHwgeyBnbG9iYWw/OiBib29sZWFuOyBwYW5lbD86IGJvb2xlYW47IHNob3J0Y3V0Pzogc3RyaW5nIH07XG4gIH0gPSB7fSxcbik6IENyZWF0ZVJvdXRlclJldHVybiB7XG4gIC8vIE5vcm1hbGl6ZSBkZXZ0b29scyBvcHRpb25zIG1haW50YWluaW5nIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIGxldCBkZXZ0b29sc0dsb2JhbDogYm9vbGVhbjtcbiAgbGV0IGRldnRvb2xzUGFuZWwgPSBmYWxzZTtcbiAgbGV0IGRldnRvb2xzU2hvcnRjdXQgPSAnQWx0K1NoaWZ0K1InO1xuICBpZiAodHlwZW9mIG9wdHMuZGV2dG9vbHMgPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgYmFzZUVuYWJsZWQgPSAoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nXG4gICAgICAgICk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0pKCk7XG4gICAgZGV2dG9vbHNHbG9iYWwgPSBvcHRzLmRldnRvb2xzLmdsb2JhbCA/PyBiYXNlRW5hYmxlZDtcbiAgICBkZXZ0b29sc1BhbmVsID0gISFvcHRzLmRldnRvb2xzLnBhbmVsO1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBvcHRzLmRldnRvb2xzLnNob3J0Y3V0ID09PSAnc3RyaW5nJyAmJlxuICAgICAgb3B0cy5kZXZ0b29scy5zaG9ydGN1dC50cmltKCkgIT09ICcnXG4gICAgKSB7XG4gICAgICBkZXZ0b29sc1Nob3J0Y3V0ID0gb3B0cy5kZXZ0b29scy5zaG9ydGN1dDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gYm9vbGVhbiBvciB1bmRlZmluZWRcbiAgICBjb25zdCBlbmFibGVkID0gKCgpID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0cy5kZXZ0b29scyA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gb3B0cy5kZXZ0b29scztcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGRldnRvb2xzR2xvYmFsID0gZW5hYmxlZDtcbiAgfVxuICAvLyBJbml0aWFsaXplIGJyb3dzZXIgaGlzdG9yeSBtYW5hZ2VyXG4gIGNvbnN0IGhpc3RvcnkgPSBuZXcgQnJvd3Nlckhpc3RvcnkoKTtcblxuICAvLyBCdWlsZCBhIGZsYXQgbGlzdCBvZiByb3V0ZXMgZm9yIGVmZmljaWVudCBtYXRjaGluZ1xuICBjb25zdCBmbGF0Um91dGVzID0gYnVpbGRSb3V0ZXMocm91dGVzKTtcblxuICAvLyBGaW5kIHRoZSBpbml0aWFsIHJvdXRlIG1hdGNoIGFuZCBwcmVwYXJlIGl0IGZvciByZW5kZXJpbmdcbiAgY29uc3Qgcm91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywgaGlzdG9yeS5sb2NhdGlvbik7XG4gIGNvbnN0IGluaXRpYWxSYXdRdWVyeSA9IHBhcnNlUmF3UXVlcnkoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpO1xuICAvLyBEZXRlcm1pbmUgc2NoZW1hIGZyb20gZGVlcGVzdCByb3V0ZSBmb3IgaW5pdGlhbCBsb2FkXG4gIGxldCBpbml0aWFsU2NoZW1hOiBhbnk7XG4gIGlmIChyb3V0ZSAhPSBudWxsKSB7XG4gICAgY29uc3QgY29sbGVjdGVkOiBhbnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgciBvZiByb3V0ZS5yb3V0ZS5yb3V0ZXMpIHtcbiAgICAgIGNvbnN0IG1heWJlOiB1bmtub3duID0gKHIgYXMgdW5rbm93biBhcyB7IHF1ZXJ5PzogdW5rbm93biB9KS5xdWVyeTtcbiAgICAgIGlmIChtYXliZSAhPSBudWxsKSB7XG4gICAgICAgIGNvbGxlY3RlZC5wdXNoKG1heWJlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGNvbGxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICBpbml0aWFsU2NoZW1hID0gY29sbGVjdGVkLmF0KC0xKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgaW5pdGlhbFR5cGVkUXVlcnkgPSBwYXJzZVR5cGVkUXVlcnkoaW5pdGlhbFNjaGVtYSwgaW5pdGlhbFJhd1F1ZXJ5KTtcbiAgLy8gRGV0ZXJtaW5lIGZpbHRlciBzY2hlbWEgZnJvbSBkZWVwZXN0IHJvdXRlXG4gIGxldCBpbml0aWFsRmlsdGVyU2NoZW1hOiBhbnk7XG4gIGlmIChyb3V0ZSAhPSBudWxsKSB7XG4gICAgY29uc3QgY29sbGVjdGVkOiBhbnlbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgciBvZiByb3V0ZS5yb3V0ZS5yb3V0ZXMpIHtcbiAgICAgIGNvbnN0IG1heWJlOiB1bmtub3duID0gKHIgYXMgdW5rbm93biBhcyB7IGZpbHRlclNjaGVtYT86IHVua25vd24gfSlcbiAgICAgICAgLmZpbHRlclNjaGVtYTtcbiAgICAgIGlmIChtYXliZSAhPSBudWxsKSBjb2xsZWN0ZWQucHVzaChtYXliZSk7XG4gICAgfVxuICAgIGlmIChjb2xsZWN0ZWQubGVuZ3RoID4gMCkgaW5pdGlhbEZpbHRlclNjaGVtYSA9IGNvbGxlY3RlZC5hdCgtMSk7XG4gIH1cbiAgbGV0IGluaXRpYWxGaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgbGV0IGluaXRpYWxGaWx0ZXJEaWFnbm9zdGljczogYW55W10gfCB1bmRlZmluZWQ7XG4gIGlmIChpbml0aWFsRmlsdGVyU2NoZW1hICE9IG51bGwpIHtcbiAgICBjb25zdCBwYXJzZWQgPSBwYXJzZUZpbHRlcnMoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gsIGluaXRpYWxGaWx0ZXJTY2hlbWEpO1xuICAgIGluaXRpYWxGaWx0ZXJzID0gcGFyc2VkLmZpbHRlcnMgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBpbml0aWFsRmlsdGVyRGlhZ25vc3RpY3MgPSBwYXJzZWQuZGlhZ25vc3RpY3MgYXMgdW5rbm93bltdO1xuICB9XG4gIGNvbnN0IHByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2gocm91dGUsIGluaXRpYWxUeXBlZFF1ZXJ5KTtcbiAgLy8gSGVscGVyIHRvIGJ1aWxkIHRoZSByYXcgcXVlcnkgb2JqZWN0IGZyb20gYSBzZWFyY2ggc3RyaW5nXG4gIGxldCBjdXJyZW50RW50cnk6IFJvdXRlRW50cnk8YW55PiA9IHtcbiAgICBmb3JjZVJlcmVuZGVyOiBmYWxzZSxcbiAgICBsb2NhdGlvbjogaGlzdG9yeS5sb2NhdGlvbixcbiAgICByb3V0ZSxcbiAgICBwcmVwYXJlZE1hdGNoLFxuICAgIHJhd1NlYXJjaDogaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gsXG4gICAgcXVlcnk6IGluaXRpYWxSYXdRdWVyeSxcbiAgICB0eXBlZFF1ZXJ5OiBpbml0aWFsVHlwZWRRdWVyeSxcbiAgICBmaWx0ZXJzOiBpbml0aWFsRmlsdGVycyxcbiAgICBmaWx0ZXJEaWFnbm9zdGljczogaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzLFxuICB9O1xuXG4gIC8vIEluaXRpYWwgbm9ybWFsaXphdGlvbiBwYXNzIChlLmcuLCBjbGFtcCBwYWdlKVxuICBjb25zdCBpbml0VHlwZWQgPSBjdXJyZW50RW50cnkudHlwZWRRdWVyeSBhcyB1bmtub3duIGFzXG4gICAgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPlxuICAgIHwgdW5kZWZpbmVkO1xuICBsZXQgaW5pdFBhZ2U6IHVua25vd247XG4gIGlmIChpbml0VHlwZWQgIT0gbnVsbCkge1xuICAgIGluaXRQYWdlID0gaW5pdFR5cGVkLnBhZ2U7XG4gIH1cbiAgaWYgKFxuICAgIHR5cGVvZiBpbml0UGFnZSA9PT0gJ251bWJlcicgJiZcbiAgICBpbml0UGFnZSA8IDEgJiZcbiAgICBpbml0aWFsU2NoZW1hICE9IG51bGwgJiZcbiAgICBpbml0VHlwZWQgIT0gbnVsbFxuICApIHtcbiAgICBjb25zdCBub3JtID0geyAuLi5pbml0VHlwZWQsIHBhZ2U6IDEgfSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gYnVpbGRTZWFyY2gobm9ybSwgaW5pdGlhbFNjaGVtYSk7XG4gICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2ggIT09IGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKSB7XG4gICAgICBoaXN0b3J5LnNldCh7XG4gICAgICAgIHBhdGhuYW1lOiBoaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICBzZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICAgIGhhc2g6ICcnLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gTWFpbnRhaW4gYSBzZXQgb2Ygc3Vic2NyaWJlcnMgdG8gdGhlIGFjdGl2ZSByb3V0ZSBlbnRyeVxuICBsZXQgbmV4dElkID0gMDtcbiAgY29uc3Qgc3Vic2NyaWJlcnMgPSBuZXcgTWFwPG51bWJlciwgU3Vic2NyaWJlQ2FsbGJhY2s8YW55Pj4oKTtcblxuICAvLyBMaXN0ZW4gZm9yIGxvY2F0aW9uIGNoYW5nZXMsIG1hdGNoIHRvIHRoZSByb3V0ZSBlbnRyeSwgcHJlcGFyZSB0aGUgZW50cnksXG4gIC8vIGFuZCBub3RpZnkgc3Vic2NyaWJlcnMuIFRoaXMgcGF0dGVybiBlbnN1cmVzIHRoYXQgZGF0YS1sb2FkaW5nXG4gIC8vIG9jY3VycyAqb3V0c2lkZSogb2YgLSBhbmQgKmJlZm9yZSogLSByZW5kZXJpbmcuXG4gIGNvbnN0IGNsZWFudXAgPSBoaXN0b3J5LnN1YnNjcmliZSgobG9jYXRpb24sIGZvcmNlUmVyZW5kZXIpID0+IHtcbiAgICBjb25zdCBzYW1lUGF0aG5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZSA9PT0gY3VycmVudEVudHJ5LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIGNvbnN0IHNhbWVTZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2ggPT09IGN1cnJlbnRFbnRyeS5yYXdTZWFyY2g7XG5cbiAgICBpZiAoIWZvcmNlUmVyZW5kZXIgJiYgc2FtZVBhdGhuYW1lICYmIHNhbWVTZWFyY2gpIHtcbiAgICAgIC8vIE5vdGhpbmcgY2hhbmdlZCB0aGF0IHdlIGNhcmUgYWJvdXRcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IHRoZSBzZWFyY2ggY2hhbmdlZCB3ZSBzdGlsbCB3YW50IHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlLlxuICAgIC8vIEtlZXAgdGhlIGV4aXN0aW5nIHByZXBhcmVkTWF0Y2ggd2hlbiBwYXRobmFtZSBpcyBpZGVudGljYWwgdG8gYXZvaWQgcmVkdW5kYW50IHdvcmsuXG4gICAgbGV0IG5leHRQcmVwYXJlZE1hdGNoID0gY3VycmVudEVudHJ5LnByZXBhcmVkTWF0Y2g7XG4gICAgbGV0IG5leHRSb3V0ZSA9IGN1cnJlbnRFbnRyeS5yb3V0ZTtcblxuICAgIGlmICghc2FtZVBhdGhuYW1lKSB7XG4gICAgICAvLyBQYXRoIGNoYW5nZWQ6IHJlY29tcHV0ZSBtYXRjaCArIHByZXBhcmVkIGRhdGEgaW5jbHVkaW5nIHF1ZXJ5XG4gICAgICBuZXh0Um91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywgaGlzdG9yeS5sb2NhdGlvbik7XG4gICAgICAvLyB3ZSB3aWxsIHNldCBiZWxvdyBhZnRlciBjb21wdXRpbmcgdHlwZWQgcXVlcnlcbiAgICB9XG5cbiAgICAvLyBCdWlsZCByYXcgcXVlcnkgb2JqZWN0IChiYXNpYyBhZ2dyZWdhdGlvbikgZnJvbSBsb2NhdGlvbi5zZWFyY2hcbiAgICBjb25zdCBxdWVyeSA9IHBhcnNlUmF3UXVlcnkobG9jYXRpb24uc2VhcmNoKTtcbiAgICAvLyBEZXRlcm1pbmUgc2NoZW1hIGZyb20gZGVlcGVzdCBtYXRjaGVkIHJvdXRlXG4gICAgbGV0IHNjaGVtYTogYW55O1xuICAgIGxldCBmaWx0ZXJTY2hlbWE6IGFueTtcbiAgICBpZiAobmV4dFJvdXRlICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbGxlY3RlZDogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IGZpbHRlckNvbGxlY3RlZDogYW55W10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgciBvZiBuZXh0Um91dGUucm91dGUucm91dGVzKSB7XG4gICAgICAgIGNvbnN0IG1heWJlOiB1bmtub3duID0gKHIgYXMgdW5rbm93biBhcyB7IHF1ZXJ5PzogdW5rbm93biB9KS5xdWVyeTtcbiAgICAgICAgaWYgKG1heWJlICE9IG51bGwpIHtcbiAgICAgICAgICBjb2xsZWN0ZWQucHVzaChtYXliZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbWF5YmVGOiB1bmtub3duID0gKHIgYXMgdW5rbm93biBhcyB7IGZpbHRlclNjaGVtYT86IHVua25vd24gfSlcbiAgICAgICAgICAuZmlsdGVyU2NoZW1hO1xuICAgICAgICBpZiAobWF5YmVGICE9IG51bGwpIGZpbHRlckNvbGxlY3RlZC5wdXNoKG1heWJlRik7XG4gICAgICB9XG4gICAgICBpZiAoY29sbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2NoZW1hID0gY29sbGVjdGVkLmF0KC0xKTtcbiAgICAgIH1cbiAgICAgIGlmIChmaWx0ZXJDb2xsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICBmaWx0ZXJTY2hlbWEgPSBmaWx0ZXJDb2xsZWN0ZWQuYXQoLTEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgdHlwZWRRdWVyeSA9IHBhcnNlVHlwZWRRdWVyeShzY2hlbWEsIHF1ZXJ5KTtcbiAgICAvLyBQYXJzZSBmaWx0ZXJzIHVzaW5nIGZpbHRlciBzY2hlbWEgaWYgcHJlc2VudFxuICAgIGxldCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICBsZXQgZmlsdGVyRGlhZ25vc3RpY3M6IGFueVtdIHwgdW5kZWZpbmVkO1xuICAgIGlmIChmaWx0ZXJTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcGFyc2VkRiA9IHBhcnNlRmlsdGVycyhsb2NhdGlvbi5zZWFyY2gsIGZpbHRlclNjaGVtYSk7XG4gICAgICBmaWx0ZXJzID0gcGFyc2VkRi5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBmaWx0ZXJEaWFnbm9zdGljcyA9IHBhcnNlZEYuZGlhZ25vc3RpY3MgYXMgdW5rbm93bltdO1xuICAgIH1cbiAgICAvLyBOb3JtYWxpemF0aW9uOiBjbGFtcCBwYWdlID49IDEgaWYgbnVtZXJpYyBwYWdlIHByZXNlbnRcbiAgICBsZXQgbm9ybWFsaXplZCA9IGZhbHNlO1xuICAgIGNvbnN0IHBnID0gKHR5cGVkUXVlcnkgYXMgUmVjb3JkPHN0cmluZywgYW55PikucGFnZTtcbiAgICBpZiAodHlwZW9mIHBnID09PSAnbnVtYmVyJyAmJiBwZyA8IDEpIHtcbiAgICAgIGNvbnN0IGNsb25lID0geyAuLi4odHlwZWRRdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+KSwgcGFnZTogMSB9O1xuICAgICAgdHlwZWRRdWVyeSA9IGNsb25lO1xuICAgICAgbm9ybWFsaXplZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSB0aGUgc2VhcmNoIGNoYW5nZWQgKHNhbWUgcGF0aG5hbWUpIHdlIHN0aWxsIG5lZWQgdG8gcmUtcnVuIHByZXBhcmVcbiAgICBpZiAoIXNhbWVQYXRobmFtZSkge1xuICAgICAgbmV4dFByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2gobmV4dFJvdXRlLCB0eXBlZFF1ZXJ5KTtcbiAgICB9IGVsc2UgaWYgKCFzYW1lU2VhcmNoKSB7XG4gICAgICBuZXh0UHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChuZXh0Um91dGUsIHR5cGVkUXVlcnkpO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbnRyeTogUm91dGVFbnRyeTxhbnk+ID0ge1xuICAgICAgZm9yY2VSZXJlbmRlcjogZm9yY2VSZXJlbmRlciB8fCAoc2FtZVBhdGhuYW1lICYmICFzYW1lU2VhcmNoKSxcbiAgICAgIGxvY2F0aW9uLFxuICAgICAgcm91dGU6IG5leHRSb3V0ZSxcbiAgICAgIHByZXBhcmVkTWF0Y2g6IG5leHRQcmVwYXJlZE1hdGNoLFxuICAgICAgcmF3U2VhcmNoOiBsb2NhdGlvbi5zZWFyY2gsXG4gICAgICBxdWVyeSxcbiAgICAgIHR5cGVkUXVlcnksXG4gICAgICBmaWx0ZXJzLFxuICAgICAgZmlsdGVyRGlhZ25vc3RpY3MsXG4gICAgfTtcblxuICAgIC8vIElmIG5vcm1hbGl6YXRpb24gY2hhbmdlZCB0aGUgdHlwZWQgcXVlcnkgd2UgdHJpZ2dlciBhIHJlcGxhY2Ugd2l0aCBub3JtYWxpemVkIHNlYXJjaFxuICAgIGlmIChub3JtYWxpemVkICYmIHNjaGVtYSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICAgIHF1ZXJ5OiB0eXBlZFF1ZXJ5IGFzIGFueSxcbiAgICAgICAgcXVlcnlTY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgZmlsdGVyU2NoZW1hLFxuICAgICAgfSk7XG4gICAgICBpZiAobm9ybWFsaXplZFNlYXJjaCAhPT0gbG9jYXRpb24uc2VhcmNoKSB7XG4gICAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuOyAvLyBlYXJseTogc3Vic2VxdWVudCBzZXQgd2lsbCB0cmlnZ2VyIHJlcnVuXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIGN1cnJlbnQgZW50cnkgYW5kIG5vdGlmeSBhbGwgc3Vic2NyaWJlcnNcbiAgICBjdXJyZW50RW50cnkgPSBuZXh0RW50cnk7XG4gICAgc3Vic2NyaWJlcnMuZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgIGNhbGxiYWNrKG5leHRFbnRyeSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIFRoZSByb3V0ZXIgY29udGV4dCBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBSZWFjdCBDb250ZXh0XG4gIGNvbnN0IGNvbnRleHQ6IFJvdXRpbmdDb250ZXh0VHlwZTxhbnk+ID0ge1xuICAgIGhpc3RvcnksXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRFbnRyeTtcbiAgICB9LFxuICAgIHByZWxvYWRDb2RlKHBhdGhuYW1lKSB7XG4gICAgICAvLyBQcmVsb2FkIGp1c3QgdGhlIGNvbXBvbmVudCBjb2RlIGZvciBhIHJvdXRlIHdpdGhvdXQgc3RvcmluZyB0aGUgcmVzdWx0XG4gICAgICBjb25zdCBtYXRjaGVzID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4ud2luZG93LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gTG9hZCBhbGwgcmVzb3VyY2UgcGFnZXMgZm9yIHRoZSBtYXRjaGVkIHJvdXRlXG4gICAgICBtYXRjaGVzLnJvdXRlLnJvdXRlcy5mb3JFYWNoKCh7IHJlc291cmNlUGFnZSB9KSA9PiB7XG4gICAgICAgIGlmIChyZXNvdXJjZVBhZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJlc291cmNlUGFnZS5sb2FkKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByZWxvYWQocGF0aG5hbWUpIHtcbiAgICAgIC8vIFByZWxvYWQgYm90aCB0aGUgY29tcG9uZW50IGNvZGUgYW5kIHByZXBhcmVkIGRhdGEgZm9yIGEgcm91dGVcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi53aW5kb3cubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBwcmVwYXJlTWF0Y2gobWF0Y2hlcyk7XG4gICAgfSxcbiAgICBzdWJzY3JpYmUoY2FsbGJhY2spIHtcbiAgICAgIC8vIEFkZCBhIG5ldyBzdWJzY3JpYmVyIGFuZCByZXR1cm4gdW5zdWJzY3JpYmUgZnVuY3Rpb25cbiAgICAgIG5leHRJZCArPSAxO1xuICAgICAgY29uc3QgaWQgPSBuZXh0SWQ7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1zdHlsZVxuICAgICAgY29uc3QgZGlzcG9zZSA9ICgpID0+IHtcbiAgICAgICAgc3Vic2NyaWJlcnMuZGVsZXRlKGlkKTtcbiAgICAgIH07XG4gICAgICBzdWJzY3JpYmVycy5zZXQoaWQsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiBkaXNwb3NlO1xuICAgIH0sXG4gICAgbmF2aWdhdGUoe1xuICAgICAgcGF0aG5hbWUsXG4gICAgICBxdWVyeSxcbiAgICAgIGZpbHRlcnM6IG5hdkZpbHRlcnMsXG4gICAgICByZXBsYWNlLFxuICAgIH06IHtcbiAgICAgIHBhdGhuYW1lPzogc3RyaW5nO1xuICAgICAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICAgICAgZmlsdGVycz86IFJlY29yZDxzdHJpbmcsIGFueT47XG4gICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAgICB9KSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gY3VycmVudEVudHJ5O1xuICAgICAgY29uc3QgdGFyZ2V0UGF0aG5hbWUgPSBwYXRobmFtZSA/PyBjdXJyZW50LmxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgLy8gRGV0ZXJtaW5lIHNjaGVtYSBvZiBkZXN0aW5hdGlvbiAoaWYgc2FtZSBwYXRoIGFuZCB3ZSBoYXZlIHJvdXRlIHdlIGNhbiByZXVzZSwgZWxzZSByZW1hdGNoKVxuICAgICAgbGV0IHNjaGVtYTogYW55O1xuICAgICAgbGV0IGZpbHRlclNjaGVtYTogYW55O1xuICAgICAgLyoqIENvbGxlY3QgZGVlcGVzdCBxdWVyeSBzY2hlbWEgZnJvbSByb3V0ZSBjaGFpbiAqL1xuICAgICAgZnVuY3Rpb24gY29sbGVjdFNjaGVtYShyb3V0ZXNBcnI6IGFueVtdIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmIChyb3V0ZXNBcnIgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgICAgIGNvbnN0IGZpbHRlckNvbGxlY3RlZDogYW55W10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCByIG9mIHJvdXRlc0Fycikge1xuICAgICAgICAgIGNvbnN0IG1heWJlOiB1bmtub3duID0gKHIgYXMgdW5rbm93biBhcyB7IHF1ZXJ5PzogdW5rbm93biB9KS5xdWVyeTtcbiAgICAgICAgICBpZiAobWF5YmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29sbGVjdGVkLnB1c2gobWF5YmUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBtYXliZUY6IHVua25vd24gPSAociBhcyB1bmtub3duIGFzIHsgZmlsdGVyU2NoZW1hPzogdW5rbm93biB9KVxuICAgICAgICAgICAgLmZpbHRlclNjaGVtYTtcbiAgICAgICAgICBpZiAobWF5YmVGICE9IG51bGwpIGZpbHRlckNvbGxlY3RlZC5wdXNoKG1heWJlRik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbGxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgc2NoZW1hID0gY29sbGVjdGVkLmF0KC0xKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyQ29sbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBmaWx0ZXJTY2hlbWEgPSBmaWx0ZXJDb2xsZWN0ZWQuYXQoLTEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocGF0aG5hbWUgPT0gbnVsbCB8fCBwYXRobmFtZSA9PT0gY3VycmVudC5sb2NhdGlvbi5wYXRobmFtZSkge1xuICAgICAgICBjb2xsZWN0U2NoZW1hKGN1cnJlbnQucm91dGU/LnJvdXRlLnJvdXRlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBkZXN0Um91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAgIC4uLndpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgICBwYXRobmFtZTogdGFyZ2V0UGF0aG5hbWUsXG4gICAgICAgIH0pO1xuICAgICAgICBjb2xsZWN0U2NoZW1hKGRlc3RSb3V0ZT8ucm91dGUucm91dGVzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVmZmVjdGl2ZUZpbHRlcnMgPSBuYXZGaWx0ZXJzID8/IGN1cnJlbnQuZmlsdGVycztcbiAgICAgIGNvbnN0IHNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgcXVlcnlTY2hlbWE6IHNjaGVtYSxcbiAgICAgICAgZmlsdGVyczogZWZmZWN0aXZlRmlsdGVycyxcbiAgICAgICAgZmlsdGVyU2NoZW1hLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBsb2NhdGlvbk9iaiA9IHsgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLCBzZWFyY2gsIGhhc2g6ICcnIH07XG4gICAgICBpZiAocmVwbGFjZSkge1xuICAgICAgICBoaXN0b3J5LnNldChsb2NhdGlvbk9iaik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoaXN0b3J5LnB1c2gobG9jYXRpb25PYmopO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG5cbiAgLy8gUmV0dXJuIGJvdGggdGhlIGNvbnRleHQgb2JqZWN0IGFuZCBhIGNsZWFudXAgZnVuY3Rpb25cbiAgLy8gRGV2dG9vbHMgZXhwb3N1cmUgKGRldmVsb3BtZW50IG9ubHkpXG4gIGlmIChkZXZ0b29sc0dsb2JhbCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgKHdpbmRvdyBhcyB1bmtub3duIGFzIHsgX19QTFVNSUxFX1JPVVRFUl9fPzogYW55IH0pLl9fUExVTUlMRV9ST1VURVJfXyA9XG4gICAgICAgICAge1xuICAgICAgICAgICAgZ2V0OiBjb250ZXh0LmdldCxcbiAgICAgICAgICAgIHN1YnNjcmliZTogY29udGV4dC5zdWJzY3JpYmUsXG4gICAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIGlnbm9yZSAqL1xuICAgIH1cbiAgfVxuICAvLyBPcHRpb25hbCBpbi1wYWdlIGRldnRvb2xzIHBhbmVsIChsaWdodHdlaWdodCBvdmVybGF5KVxuICBpZiAoZGV2dG9vbHNQYW5lbCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignW2RhdGEtcGx1bWlsZS1yb3V0ZXItZGV2dG9vbHMtcGFuZWxdJykgPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaG9zdC5zZXRBdHRyaWJ1dGUoJ2RhdGEtcGx1bWlsZS1yb3V0ZXItZGV2dG9vbHMtcGFuZWwnLCAnJyk7XG4gICAgICAgIGhvc3Quc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgICAgICBob3N0LnN0eWxlLnpJbmRleCA9ICcyMTQ3NDgzNjQ2JztcbiAgICAgICAgaG9zdC5zdHlsZS5ib3R0b20gPSAnOHB4JztcbiAgICAgICAgaG9zdC5zdHlsZS5yaWdodCA9ICc4cHgnO1xuICAgICAgICBob3N0LnN0eWxlLmZvbnRGYW1pbHkgPVxuICAgICAgICAgICd1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgXCJMaWJlcmF0aW9uIE1vbm9cIiwgbW9ub3NwYWNlJztcbiAgICAgICAgaG9zdC5zdHlsZS5mb250U2l6ZSA9ICcxMnB4JztcbiAgICAgICAgaG9zdC5zdHlsZS5saW5lSGVpZ2h0ID0gJzEuMyc7XG4gICAgICAgIGhvc3Quc3R5bGUuY29sb3IgPSAnIzExMSc7XG4gICAgICAgIGhvc3Quc3R5bGUuYmFja2dyb3VuZCA9ICd0cmFuc3BhcmVudCc7XG4gICAgICAgIGhvc3Quc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcbiAgICAgICAgY29uc3Qgc2hhZG93ID0gaG9zdC5hdHRhY2hTaGFkb3coeyBtb2RlOiAnb3BlbicgfSk7XG4gICAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHBhbmVsLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnYXV0byc7XG4gICAgICAgIHBhbmVsLnN0eWxlLm1pbldpZHRoID0gJzI2MHB4JztcbiAgICAgICAgcGFuZWwuc3R5bGUubWF4V2lkdGggPSAnNDIwcHgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSAnNTB2aCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICBwYW5lbC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMjU1LDI1NSwyNTUsMC45NSknO1xuICAgICAgICBwYW5lbC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNjY2MnO1xuICAgICAgICBwYW5lbC5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNnB4JztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm94U2hhZG93ID0gJzAgMnB4IDhweCByZ2JhKDAsMCwwLDAuMTUpJztcbiAgICAgICAgcGFuZWwuc3R5bGUucGFkZGluZyA9ICc2cHggOHB4IDhweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmJhY2tkcm9wRmlsdGVyID0gJ2JsdXIoNHB4KSc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICAgICAgcGFuZWwuc3R5bGUucm93R2FwID0gJzRweCc7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBoZWFkZXIuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgaGVhZGVyLnN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJztcbiAgICAgICAgaGVhZGVyLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ3NwYWNlLWJldHdlZW4nO1xuICAgICAgICBoZWFkZXIuc3R5bGUuZ2FwID0gJzhweCc7XG4gICAgICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICB0aXRsZS50ZXh0Q29udGVudCA9ICdQbHVtaWxlIFJvdXRlcic7XG4gICAgICAgIHRpdGxlLnN0eWxlLmZvbnRXZWlnaHQgPSAnNjAwJztcbiAgICAgICAgY29uc3QgYnV0dG9ucyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBidXR0b25zLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIGJ1dHRvbnMuc3R5bGUuZ2FwID0gJzRweCc7XG4gICAgICAgIGNvbnN0IGNvbGxhcHNlQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJ+KIkic7XG4gICAgICAgIGNvbnN0IGNsb3NlQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIGNsb3NlQnRuLnRleHRDb250ZW50ID0gJ8OXJztcbiAgICAgICAgY29uc3QgYnRuczogSFRNTEJ1dHRvbkVsZW1lbnRbXSA9IFtjb2xsYXBzZUJ0biwgY2xvc2VCdG5dO1xuICAgICAgICBmb3IgKGNvbnN0IGIgb2YgYnRucykge1xuICAgICAgICAgIGIuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuICAgICAgICAgIGIuc3R5bGUuYmFja2dyb3VuZCA9ICcjZWVlJztcbiAgICAgICAgICBiLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2NjYyc7XG4gICAgICAgICAgYi5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnNHB4JztcbiAgICAgICAgICBiLnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgICAgICAgIGIuc3R5bGUubGluZUhlaWdodCA9ICcxJztcbiAgICAgICAgICBiLnN0eWxlLnBhZGRpbmcgPSAnMnB4IDVweCc7XG4gICAgICAgIH1cbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKHRpdGxlKTtcbiAgICAgICAgYnV0dG9ucy5hcHBlbmRDaGlsZChjb2xsYXBzZUJ0bik7XG4gICAgICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQoY2xvc2VCdG4pO1xuICAgICAgICBoZWFkZXIuYXBwZW5kQ2hpbGQoYnV0dG9ucyk7XG4gICAgICAgIGNvbnN0IHBhdGhFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwYXRoRWwuc3R5bGUud2hpdGVTcGFjZSA9ICdub3dyYXAnO1xuICAgICAgICBjb25zdCB2YXJzRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgY29uc3QgcXVlcnlFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgICAgICBjb25zdCB0eXBlZEVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgICAgIGNvbnN0IGZpbHRlcnNFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgICAgICBjb25zdCBmaWx0ZXJEaWFnRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgLy8gVGltZWxpbmUgY29udGFpbmVyXG4gICAgICAgIGNvbnN0IHRpbWVsaW5lV3JhcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aW1lbGluZVdyYXAuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLmdhcCA9ICcycHgnO1xuICAgICAgICB0aW1lbGluZVdyYXAuc3R5bGUubWFyZ2luVG9wID0gJzRweCc7XG4gICAgICAgIGNvbnN0IHRpbWVsaW5lSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRpbWVsaW5lSGVhZGVyLnRleHRDb250ZW50ID0gJ1RpbWVsaW5lIChxdWVyeSBjaGFuZ2VzKSc7XG4gICAgICAgIHRpbWVsaW5lSGVhZGVyLnN0eWxlLmZvbnRXZWlnaHQgPSAnNjAwJztcbiAgICAgICAgdGltZWxpbmVIZWFkZXIuc3R5bGUuZm9udFNpemUgPSAnMTFweCc7XG4gICAgICAgIGNvbnN0IHRpbWVsaW5lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uLXJldmVyc2UnOyAvLyBuZXdlc3Qgb24gdG9wIHZpc3VhbGx5IHdoaWxlIGFwcGVuZGluZyBhdCBlbmQgZm9yIGNoZWFwZXIgb3BzXG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLm1heEhlaWdodCA9ICcxNDBweCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLm92ZXJmbG93WSA9ICdhdXRvJztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgICAgdGltZWxpbmUuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZhZmJmYyc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZvbnRGYW1pbHkgPSAnaW5oZXJpdCc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgICAgICB0aW1lbGluZVdyYXAuYXBwZW5kQ2hpbGQodGltZWxpbmVIZWFkZXIpO1xuICAgICAgICB0aW1lbGluZVdyYXAuYXBwZW5kQ2hpbGQodGltZWxpbmUpO1xuICAgICAgICBjb25zdCBwcmVzOiBIVE1MUHJlRWxlbWVudFtdID0gW1xuICAgICAgICAgIHZhcnNFbCxcbiAgICAgICAgICBxdWVyeUVsLFxuICAgICAgICAgIHR5cGVkRWwsXG4gICAgICAgICAgZmlsdGVyc0VsLFxuICAgICAgICAgIGZpbHRlckRpYWdFbCxcbiAgICAgICAgXTtcbiAgICAgICAgZm9yIChjb25zdCBwIG9mIHByZXMpIHtcbiAgICAgICAgICBwLnN0eWxlLm1hcmdpbiA9ICcwJztcbiAgICAgICAgICBwLnN0eWxlLnBhZGRpbmcgPSAnNHB4JztcbiAgICAgICAgICBwLnN0eWxlLmJhY2tncm91bmQgPSAnI2Y2ZjhmYSc7XG4gICAgICAgICAgcC5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNlMmUyZTInO1xuICAgICAgICAgIHAuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgICAgcC5zdHlsZS5vdmVyZmxvd1ggPSAnYXV0byc7XG4gICAgICAgICAgcC5zdHlsZS5tYXhIZWlnaHQgPSAnMTYwcHgnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNtYWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIHNtYWxsLnN0eWxlLmZvbnRTaXplID0gJzEwcHgnO1xuICAgICAgICBzbWFsbC5zdHlsZS5vcGFjaXR5ID0gJzAuNyc7XG4gICAgICAgIHNtYWxsLnRleHRDb250ZW50ID0gYFNob3J0Y3V0OiAke2RldnRvb2xzU2hvcnRjdXR9YDtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoaGVhZGVyKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQocGF0aEVsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQodmFyc0VsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQocXVlcnlFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHR5cGVkRWwpO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZCh0aW1lbGluZVdyYXApO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZChmaWx0ZXJzRWwpO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZChmaWx0ZXJEaWFnRWwpO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZChzbWFsbCk7XG4gICAgICAgIHNoYWRvdy5hcHBlbmRDaGlsZChwYW5lbCk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaG9zdCk7XG4gICAgICAgIGxldCBjb2xsYXBzZWQgPSBmYWxzZTtcbiAgICAgICAgY29sbGFwc2VCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgY29sbGFwc2VkID0gIWNvbGxhcHNlZDtcbiAgICAgICAgICBpZiAoY29sbGFwc2VkKSB7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSAnMjRweCc7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgY29sbGFwc2VCdG4udGV4dENvbnRlbnQgPSAnKyc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhbmVsLnN0eWxlLm1heEhlaWdodCA9ICc1MHZoJztcbiAgICAgICAgICAgIHBhbmVsLnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgICAgICAgICAgY29sbGFwc2VCdG4udGV4dENvbnRlbnQgPSAn4oiSJztcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgdW5zdWI6ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgICAgICAgY2xvc2VCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgaG9zdC5yZW1vdmUoKTtcbiAgICAgICAgICBpZiAodHlwZW9mIHVuc3ViID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB1bnN1YigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8qKiBVcGRhdGUgcGFuZWwgY29udGVudCBmcm9tIGN1cnJlbnQgcm91dGUgZW50cnkgKi9cbiAgICAgICAgLy8gS2VlcCBsYXN0IHF1ZXJ5IHNuYXBzaG90IGZvciBkaWZmXG4gICAgICAgIGxldCBsYXN0UXVlcnk6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgICAgICBsZXQgbGFzdFNlYXJjaDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ29tcHV0ZSBkaWZmIGNsYXNzaWZpY2F0aW9uIGJldHdlZW4gdHdvIHF1ZXJ5IG9iamVjdHMuXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBkaWZmUXVlcmllcyhcbiAgICAgICAgICBwcmV2OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBuZXh0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICAgICAgKToge1xuICAgICAgICAgIGFkZGVkOiBzdHJpbmdbXTtcbiAgICAgICAgICByZW1vdmVkOiBzdHJpbmdbXTtcbiAgICAgICAgICBjaGFuZ2VkOiBzdHJpbmdbXTtcbiAgICAgICAgICB1bmNoYW5nZWQ6IHN0cmluZ1tdO1xuICAgICAgICB9IHtcbiAgICAgICAgICBjb25zdCBhZGRlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCByZW1vdmVkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IGNoYW5nZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgdW5jaGFuZ2VkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHByZXZLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhwcmV2ID8/IHt9KSk7XG4gICAgICAgICAgY29uc3QgbmV4dEtleXMgPSBuZXcgU2V0KE9iamVjdC5rZXlzKG5leHQpKTtcbiAgICAgICAgICBuZXh0S2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXByZXZLZXlzLmhhcyhrKSkge1xuICAgICAgICAgICAgICBhZGRlZC5wdXNoKGspO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcHY6IHVua25vd247XG4gICAgICAgICAgICBpZiAocHJldiAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIHByZXYgaXMgYSBwbGFpbiByZWNvcmQ7IGRpcmVjdCBpbmRleCAocnVudGltZSBzYWZlKVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgICAgICAgIHB2ID0gKHByZXYgYXMgYW55KVtrXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG52ID0gbmV4dFtrXTtcbiAgICAgICAgICAgIGxldCBzYW1lID0gZmFsc2U7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwdikgJiYgQXJyYXkuaXNBcnJheShudikpIHtcbiAgICAgICAgICAgICAgaWYgKHB2Lmxlbmd0aCA9PT0gKG52IGFzIHVua25vd25bXSkubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc2FtZSA9IHB2LmV2ZXJ5KCh2LCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdiA9PT0gKG52IGFzIHVua25vd25bXSlbaV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNhbWUgPSBwdiA9PT0gbnY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2FtZSkge1xuICAgICAgICAgICAgICB1bmNoYW5nZWQucHVzaChrKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoYW5nZWQucHVzaChrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXZLZXlzLmRlbGV0ZShrKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBwcmV2S2V5cy5mb3JFYWNoKChrKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVkLnB1c2goayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIHsgYWRkZWQsIHJlbW92ZWQsIGNoYW5nZWQsIHVuY2hhbmdlZCB9O1xuICAgICAgICB9XG4gICAgICAgIC8qKiBVcGRhdGUgcGFuZWwgY29udGVudCBhbmQgbWF5YmUgcHVzaCB0aW1lbGluZSBlbnRyeSAqL1xuICAgICAgICBmdW5jdGlvbiByZW5kZXIoKTogdm9pZCB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gY29udGV4dC5nZXQoKTtcbiAgICAgICAgICAgIHBhdGhFbC50ZXh0Q29udGVudCA9IGAke2VudHJ5LmxvY2F0aW9uLnBhdGhuYW1lfSR7ZW50cnkubG9jYXRpb24uc2VhcmNofWA7XG4gICAgICAgICAgICBjb25zdCB2YXJzSnNvbiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnJvdXRlPy5wYXJhbXMgPz8ge30sIG51bGwsIDIpO1xuICAgICAgICAgICAgdmFyc0VsLnRleHRDb250ZW50ID0gYHZhcnM6ICR7dmFyc0pzb259YDtcbiAgICAgICAgICAgIGNvbnN0IHJhd0pzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeS5xdWVyeSwgbnVsbCwgMik7XG4gICAgICAgICAgICBxdWVyeUVsLnRleHRDb250ZW50ID0gYHJhdzogICR7cmF3SnNvbn1gO1xuICAgICAgICAgICAgY29uc3QgdHlwZWRKc29uID0gSlNPTi5zdHJpbmdpZnkoZW50cnkudHlwZWRRdWVyeSwgbnVsbCwgMik7XG4gICAgICAgICAgICB0eXBlZEVsLnRleHRDb250ZW50ID0gYHR5cGVkOiR7dHlwZWRKc29ufWA7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzSnNvbiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LmZpbHRlcnMsIG51bGwsIDIpO1xuICAgICAgICAgICAgZmlsdGVyc0VsLnRleHRDb250ZW50ID0gYGZpbHRlcnM6JHtmaWx0ZXJzSnNvbn1gO1xuICAgICAgICAgICAgY29uc3QgZGlhZyA9IGVudHJ5LmZpbHRlckRpYWdub3N0aWNzID8/IFtdO1xuICAgICAgICAgICAgZmlsdGVyRGlhZ0VsLnRleHRDb250ZW50ID0gYGZpbHRlckRpYWdub3N0aWNzOiAke2RpYWcubGVuZ3RofWA7XG4gICAgICAgICAgICAvLyBUaW1lbGluZSBsb2cgaWYgcXVlcnkgc2VhcmNoIGNoYW5nZWRcbiAgICAgICAgICAgIGlmIChlbnRyeS5yYXdTZWFyY2ggIT09IGxhc3RTZWFyY2gpIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm93UXVlcnkgPSBlbnRyeS5xdWVyeSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgICAgY29uc3QgZGlmZiA9IGRpZmZRdWVyaWVzKGxhc3RRdWVyeSwgbm93UXVlcnkpO1xuICAgICAgICAgICAgICBjb25zdCByb3cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgcm93LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgIHJvdy5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgICAgICAgIHJvdy5zdHlsZS5ib3JkZXJCb3R0b20gPSAnMXB4IHNvbGlkICNlOWU5ZTknO1xuICAgICAgICAgICAgICByb3cuc3R5bGUucGFkZGluZyA9ICczcHggNHB4JztcbiAgICAgICAgICAgICAgY29uc3QgaGVhZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICBoZWFkLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgICAgICAgIGhlYWQuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSAnc3BhY2UtYmV0d2Vlbic7XG4gICAgICAgICAgICAgIGNvbnN0IHRzID0gbmV3IERhdGUoKS50b0xvY2FsZVRpbWVTdHJpbmcoKTtcbiAgICAgICAgICAgICAgbGV0IHNlYXJjaERpc3BsYXkgPSAnKGVtcHR5KSc7XG4gICAgICAgICAgICAgIGlmIChlbnRyeS5sb2NhdGlvbi5zZWFyY2ggIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgc2VhcmNoRGlzcGxheSA9IGVudHJ5LmxvY2F0aW9uLnNlYXJjaDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBoZWFkLmlubmVySFRNTCA9IGA8c3Ryb25nPiR7dHN9PC9zdHJvbmc+IDxjb2RlIHN0eWxlPVwiYmFja2dyb3VuZDojZWVlO3BhZGRpbmc6MXB4IDNweDtib3JkZXItcmFkaXVzOjNweDtcIj4ke3NlYXJjaERpc3BsYXl9PC9jb2RlPmA7XG4gICAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICBib2R5LnN0eWxlLmZsZXhXcmFwID0gJ3dyYXAnO1xuICAgICAgICAgICAgICBib2R5LnN0eWxlLmdhcCA9ICc0cHgnO1xuICAgICAgICAgICAgICAvKiogQ3JlYXRlIGEgY29sb3JlZCBwaWxsIGVsZW1lbnQgKi9cbiAgICAgICAgICAgICAgZnVuY3Rpb24gcGlsbChcbiAgICAgICAgICAgICAgICBsYWJlbDogc3RyaW5nLFxuICAgICAgICAgICAgICAgIGtpbmQ6ICdhZGRlZCcgfCAncmVtb3ZlZCcgfCAnY2hhbmdlZCcgfCAndW5jaGFuZ2VkJyxcbiAgICAgICAgICAgICAgKTogSFRNTFNwYW5FbGVtZW50IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgIHNwYW4udGV4dENvbnRlbnQgPSBsYWJlbDtcbiAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLnBhZGRpbmcgPSAnMXB4IDRweCc7XG4gICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJSYWRpdXMgPSAnMTBweCc7XG4gICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5mb250U2l6ZSA9ICcxMHB4JztcbiAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQnO1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICAgICAgICAgICAgY2FzZSAnYWRkZWQnOlxuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2U2ZmZlZCc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzJjYmU0ZSc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnIzIyODYzYSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSAncmVtb3ZlZCc6XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmZlZWYwJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjZDczYTQ5JztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjY2IyNDMxJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlICdjaGFuZ2VkJzpcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZmY1YjEnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyNmZmQzM2QnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyM3MzVjMGYnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3VuY2hhbmdlZCc6XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZjFmOGZmJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjNzliOGZmJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjMDM2NmQ2JztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gZXhoYXVzdGl2ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3BhbjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGlmZi5hZGRlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAuLi5kaWZmLmFkZGVkLm1hcCgoaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGlsbChgKyR7a31gLCAnYWRkZWQnKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRpZmYuY2hhbmdlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgYm9keS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAuLi5kaWZmLmNoYW5nZWQubWFwKChrKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwaWxsKGB+JHtrfWAsICdjaGFuZ2VkJyk7XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChkaWZmLnJlbW92ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgLi4uZGlmZi5yZW1vdmVkLm1hcCgoaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGlsbChgLSR7a31gLCAncmVtb3ZlZCcpO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjb25zdCBub0FkZHMgPSBkaWZmLmFkZGVkLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgY29uc3Qgbm9DaGFuZ2VzID0gZGlmZi5jaGFuZ2VkLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgICAgICAgY29uc3Qgbm9SZW1vdmFscyA9IGRpZmYucmVtb3ZlZC5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgIGlmIChub0FkZHMgJiYgbm9DaGFuZ2VzICYmIG5vUmVtb3ZhbHMpIHtcbiAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChwaWxsKCduby1jaGFuZ2UnLCAndW5jaGFuZ2VkJykpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChoZWFkKTtcbiAgICAgICAgICAgICAgcm93LmFwcGVuZENoaWxkKGJvZHkpO1xuICAgICAgICAgICAgICB0aW1lbGluZS5hcHBlbmRDaGlsZChyb3cpO1xuICAgICAgICAgICAgICBpZiAodGltZWxpbmUuY2hpbGRFbGVtZW50Q291bnQgPiA1MCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0ID0gdGltZWxpbmUuZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgICAgICAgICAgICAgaWYgKGZpcnN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLnJlbW92ZUNoaWxkKGZpcnN0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGFzdFF1ZXJ5ID0gbm93UXVlcnk7XG4gICAgICAgICAgICAgIGxhc3RTZWFyY2ggPSBlbnRyeS5yYXdTZWFyY2g7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvKiBpZ25vcmUgKi9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmVuZGVyKCk7XG4gICAgICAgIHVuc3ViID0gY29udGV4dC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgIHJlbmRlcigpO1xuICAgICAgICB9KTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZXYpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcGFydHM6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgICBpZiAoZXYuYWx0S2V5KSBwYXJ0cy5wdXNoKCdBbHQnKTtcbiAgICAgICAgICAgIGlmIChldi5zaGlmdEtleSkgcGFydHMucHVzaCgnU2hpZnQnKTtcbiAgICAgICAgICAgIGlmIChldi5jdHJsS2V5KSBwYXJ0cy5wdXNoKCdDdHJsJyk7XG4gICAgICAgICAgICBsZXQga2V5UGFydCA9IGV2LmtleTtcbiAgICAgICAgICAgIGlmIChldi5rZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgIGtleVBhcnQgPSBldi5rZXkudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnRzLnB1c2goa2V5UGFydCk7XG4gICAgICAgICAgICBjb25zdCBjb21ibyA9IHBhcnRzLmpvaW4oJysnKTtcbiAgICAgICAgICAgIGlmIChjb21ibyA9PT0gZGV2dG9vbHNTaG9ydGN1dC5yZXBsYWNlKC9cXHMrL2csICcnKSkge1xuICAgICAgICAgICAgICBpZiAoaG9zdC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBob3N0LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGhvc3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLyogaWdub3JlICovXG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIGlnbm9yZSAqL1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjbGVhbnVwLCBjb250ZXh0IH07XG59XG4iXX0=
659
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3RELE9BQU8sbUJBQW1CLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLEtBQUssSUFBSSxZQUFZLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQXVEOUQsTUFBTSxDQUFDLE9BQU8sVUFBVSxZQUFZLENBQ2xDLE1BQTJCLEVBQzNCLE9BSUksRUFBRTtJQUdOLElBQUksY0FBdUIsQ0FBQztJQUM1QixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDMUIsSUFBSSxnQkFBZ0IsR0FBRyxhQUFhLENBQUM7SUFDckMsSUFBSSxPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7UUFDdEMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxDQUFDO2dCQUNILE9BQU8sQ0FDTCxPQUFPLE9BQU8sS0FBSyxXQUFXO29CQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxZQUFZLENBQ3RDLENBQUM7WUFDSixDQUFDO1lBQUMsTUFBTSxDQUFDO2dCQUNQLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztRQUNILENBQUMsQ0FBQyxFQUFFLENBQUM7UUFD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LEVBQUUsQ0FBQztnQ0FDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDOzRCQUMvQixDQUFDO2lDQUFNLENBQUM7Z0NBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDOzRCQUM5QixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQztvQkFBQyxNQUFNLENBQUM7b0JBRVQsQ0FBQztnQkFDSCxDQUFDLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO1FBQUMsTUFBTSxDQUFDO1FBRVQsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBNkIsQ0FBQztBQUN6RCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRSb3V0ZXMgfSBmcm9tICcuLi9idWlsZGVyLmpzJztcbmltcG9ydCB7IEJyb3dzZXJIaXN0b3J5IH0gZnJvbSAnLi4vaGlzdG9yeS9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRNYXRjaGVkUm91dGUsIHByZXBhcmVNYXRjaCB9IGZyb20gJy4uL3Rvb2xzLmpzJztcbmltcG9ydCB7IHBhcnNlVHlwZWRRdWVyeSB9IGZyb20gJy4uL3Rvb2xzL3F1ZXJ5LWRzbC5qcyc7XG5pbXBvcnQgeyBwYXJzZVJhd1F1ZXJ5IH0gZnJvbSAnLi4vdG9vbHMvcXVlcnkuanMnO1xuaW1wb3J0IHsgYnVpbGRTZWFyY2ggfSBmcm9tICcuLi90b29scy9idWlsZFNlYXJjaC5qcyc7XG5pbXBvcnQgYnVpbGRDb21iaW5lZFNlYXJjaCBmcm9tICcuLi90b29scy9idWlsZENvbWJpbmVkU2VhcmNoLmpzJztcbmltcG9ydCB7IHBhcnNlIGFzIHBhcnNlRmlsdGVycyB9IGZyb20gJ0BwbHVtaWxlL2ZpbHRlci1xdWVyeSc7XG5pbXBvcnQgdHlwZSB7XG4gIFJvdXRlRW50cnksXG4gIFJvdXRpbmdDb250ZXh0VHlwZSxcbiAgU3Vic2NyaWJlQ2FsbGJhY2ssXG4gIEFueVJvdXRlLFxuICBQcmVwYXJlZEFjY2VzcyxcbiAgTmF2aWdhdGVPdmVybG9hZHMsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgdGhlIGNyZWF0ZVJvdXRlciBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlUm91dGVyUmV0dXJuPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPiA9IHtcbiAgLyoqIEZ1bmN0aW9uIHRvIGNsZWFuIHVwIHJvdXRlciBsaXN0ZW5lcnMgYW5kIHJlc291cmNlcyAqL1xuICBjbGVhbnVwOiAoKSA9PiB2b2lkO1xuICAvKiogUm91dGVyIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgUmVhY3QgQ29udGV4dCBQcm92aWRlciAqL1xuICBjb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8YW55PiAmIFByZXBhcmVkQWNjZXNzPFI+O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGxldGUgcm91dGVyIHN5c3RlbSBmcm9tIHJvdXRlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFRoaXMgcm91dGVyIGlzIGJ1aWx0IGZyb20gdGhlIHNhbWUgcHJpbWl0aXZlcyBhcyByZWFjdC1yb3V0ZXIgYnV0IHdpdGggYWRkaXRpb25hbFxuICogZmVhdHVyZXMgZm9yIGRhdGEgcHJlbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmcuIEVhY2ggcm91dGUgY2FuIGNvbnRhaW4gYm90aCBhXG4gKiBDb21wb25lbnQgYW5kIGEgcHJlcGFyZSgpIGZ1bmN0aW9uIHRoYXQgY2FuIHByZWxvYWQgZGF0YSBmb3IgdGhlIGNvbXBvbmVudC5cbiAqXG4gKiBUaGUgcm91dGVyIHdhdGNoZXMgZm9yIGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gdmlhIHRoZSBIVE1MNSBIaXN0b3J5IEFQSSxcbiAqIG1hcHMgdGhlIGxvY2F0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdXRlIGVudHJ5LCBhbmQgdGhlbiBwcmVsb2FkcyB0aGUgY29kZVxuICogYW5kIGRhdGEgZm9yIHRoZSByb3V0ZSBiZWZvcmUgcmVuZGVyaW5nLlxuICpcbiAqIEBwYXJhbSByb3V0ZXMgLSBBcnJheSBvZiByb3V0ZSBjb25maWd1cmF0aW9uc1xuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJvdXRlciBjb250ZXh0IGFuZCBjbGVhbnVwIGZ1bmN0aW9uXG4gKlxuICBwcmVwYXJlZE1hdGNoOiBwcmVwYXJlTWF0Y2gocm91dGUsIHBhcnNlUmF3UXVlcnkoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpKSxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICcvdXNlcnMvOmlkJyxcbiAqICAgICByZXNvdXJjZVBhZ2U6IGdldFJlc291cmNlUGFnZSgnVXNlclByb2ZpbGUnLCAoKSA9PiBpbXBvcnQoJy4vVXNlclByb2ZpbGUnKSksXG4gKiAgICAgcHJlcGFyZTogKHsgdmFyaWFibGVzIH0pID0+ICh7IHVzZXJJZDogdmFyaWFibGVzLmlkIH0pXG4gKiAgIH1cbiAqIF07XG4gKlxuICogY29uc3QgeyBjb250ZXh0LCBjbGVhbnVwIH0gPSBjcmVhdGVSb3V0ZXIocm91dGVzKTtcbiAqXG4gKiAvLyBVc2UgaW4gUmVhY3QgYXBwXG4gKiA8Um91dGluZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICogICA8Um91dGVyUmVuZGVyZXIgLz5cbiAqIDwvUm91dGluZ0NvbnRleHQuUHJvdmlkZXI+XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSByb3V0ZXIgKHR5cGVkIG92ZXJsb2FkKS4gV2hlbiBjYWxsZWQgd2l0aCBhIGNvbnN0IHR1cGxlIG9mIHJvdXRlcywgZ2VuZXJpY3MgYXJlIHByZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUm91dGVyPFIgZXh0ZW5kcyBBbnlSb3V0ZVtdPihcbiAgcm91dGVzOiBbLi4uUl0gfCBBbnlSb3V0ZVtdLFxuICBvcHRzOiB7XG4gICAgZGV2dG9vbHM/OlxuICAgICAgfCBib29sZWFuXG4gICAgICB8IHsgZ2xvYmFsPzogYm9vbGVhbjsgcGFuZWw/OiBib29sZWFuOyBzaG9ydGN1dD86IHN0cmluZyB9O1xuICB9ID0ge30sXG4pOiBDcmVhdGVSb3V0ZXJSZXR1cm48UiBleHRlbmRzIEFueVJvdXRlW10gPyBSIDogQW55Um91dGVbXT4ge1xuICAvLyBOb3JtYWxpemUgZGV2dG9vbHMgb3B0aW9ucyBtYWludGFpbmluZyBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBsZXQgZGV2dG9vbHNHbG9iYWw6IGJvb2xlYW47XG4gIGxldCBkZXZ0b29sc1BhbmVsID0gZmFsc2U7XG4gIGxldCBkZXZ0b29sc1Nob3J0Y3V0ID0gJ0FsdCtTaGlmdCtSJztcbiAgaWYgKHR5cGVvZiBvcHRzLmRldnRvb2xzID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IGJhc2VFbmFibGVkID0gKCgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJ1xuICAgICAgICApO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9KSgpO1xuICAgIGRldnRvb2xzR2xvYmFsID0gb3B0cy5kZXZ0b29scy5nbG9iYWwgPz8gYmFzZUVuYWJsZWQ7XG4gICAgZGV2dG9vbHNQYW5lbCA9ICEhb3B0cy5kZXZ0b29scy5wYW5lbDtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygb3B0cy5kZXZ0b29scy5zaG9ydGN1dCA9PT0gJ3N0cmluZycgJiZcbiAgICAgIG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQudHJpbSgpICE9PSAnJ1xuICAgICkge1xuICAgICAgZGV2dG9vbHNTaG9ydGN1dCA9IG9wdHMuZGV2dG9vbHMuc2hvcnRjdXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGJvb2xlYW4gb3IgdW5kZWZpbmVkXG4gICAgY29uc3QgZW5hYmxlZCA9ICgoKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMuZGV2dG9vbHMgPT09ICdib29sZWFuJykgcmV0dXJuIG9wdHMuZGV2dG9vbHM7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbidcbiAgICAgICAgKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgICBkZXZ0b29sc0dsb2JhbCA9IGVuYWJsZWQ7XG4gIH1cbiAgLy8gSW5pdGlhbGl6ZSBicm93c2VyIGhpc3RvcnkgbWFuYWdlclxuICBjb25zdCBoaXN0b3J5ID0gbmV3IEJyb3dzZXJIaXN0b3J5KCk7XG5cbiAgLy8gQnVpbGQgYSBmbGF0IGxpc3Qgb2Ygcm91dGVzIGZvciBlZmZpY2llbnQgbWF0Y2hpbmdcbiAgY29uc3QgZmxhdFJvdXRlcyA9IGJ1aWxkUm91dGVzKHJvdXRlcyk7XG5cbiAgLy8gRmluZCB0aGUgaW5pdGlhbCByb3V0ZSBtYXRjaCBhbmQgcHJlcGFyZSBpdCBmb3IgcmVuZGVyaW5nXG4gIGNvbnN0IHJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGhpc3RvcnkubG9jYXRpb24pO1xuICBjb25zdCBpbml0aWFsUmF3UXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KGhpc3RvcnkubG9jYXRpb24uc2VhcmNoKTtcbiAgLy8gRGV0ZXJtaW5lIHNjaGVtYSBmcm9tIGRlZXBlc3Qgcm91dGUgZm9yIGluaXRpYWwgbG9hZFxuICBsZXQgaW5pdGlhbFNjaGVtYTogYW55O1xuICBpZiAocm91dGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IGNvbGxlY3RlZDogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygcm91dGUucm91dGUucm91dGVzKSB7XG4gICAgICBjb25zdCBtYXliZTogdW5rbm93biA9IChyIGFzIHVua25vd24gYXMgeyBxdWVyeT86IHVua25vd24gfSkucXVlcnk7XG4gICAgICBpZiAobWF5YmUgIT0gbnVsbCkge1xuICAgICAgICBjb2xsZWN0ZWQucHVzaChtYXliZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjb2xsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgaW5pdGlhbFNjaGVtYSA9IGNvbGxlY3RlZC5hdCgtMSk7XG4gICAgfVxuICB9XG4gIGNvbnN0IGluaXRpYWxUeXBlZFF1ZXJ5ID0gcGFyc2VUeXBlZFF1ZXJ5KGluaXRpYWxTY2hlbWEsIGluaXRpYWxSYXdRdWVyeSk7XG4gIC8vIERldGVybWluZSBmaWx0ZXIgc2NoZW1hIGZyb20gZGVlcGVzdCByb3V0ZVxuICBsZXQgaW5pdGlhbEZpbHRlclNjaGVtYTogYW55O1xuICBpZiAocm91dGUgIT0gbnVsbCkge1xuICAgIGNvbnN0IGNvbGxlY3RlZDogYW55W10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHIgb2Ygcm91dGUucm91dGUucm91dGVzKSB7XG4gICAgICBjb25zdCBtYXliZTogdW5rbm93biA9IChyIGFzIHVua25vd24gYXMgeyBmaWx0ZXJTY2hlbWE/OiB1bmtub3duIH0pXG4gICAgICAgIC5maWx0ZXJTY2hlbWE7XG4gICAgICBpZiAobWF5YmUgIT0gbnVsbCkgY29sbGVjdGVkLnB1c2gobWF5YmUpO1xuICAgIH1cbiAgICBpZiAoY29sbGVjdGVkLmxlbmd0aCA+IDApIGluaXRpYWxGaWx0ZXJTY2hlbWEgPSBjb2xsZWN0ZWQuYXQoLTEpO1xuICB9XG4gIGxldCBpbml0aWFsRmlsdGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gIGxldCBpbml0aWFsRmlsdGVyRGlhZ25vc3RpY3M6IGFueVtdIHwgdW5kZWZpbmVkO1xuICBpZiAoaW5pdGlhbEZpbHRlclNjaGVtYSAhPSBudWxsKSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2VGaWx0ZXJzKGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLCBpbml0aWFsRmlsdGVyU2NoZW1hKTtcbiAgICBpbml0aWFsRmlsdGVycyA9IHBhcnNlZC5maWx0ZXJzIGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgaW5pdGlhbEZpbHRlckRpYWdub3N0aWNzID0gcGFyc2VkLmRpYWdub3N0aWNzIGFzIHVua25vd25bXTtcbiAgfVxuICBjb25zdCBwcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKHJvdXRlLCBpbml0aWFsVHlwZWRRdWVyeSk7XG4gIC8vIEhlbHBlciB0byBidWlsZCB0aGUgcmF3IHF1ZXJ5IG9iamVjdCBmcm9tIGEgc2VhcmNoIHN0cmluZ1xuICBsZXQgY3VycmVudEVudHJ5OiBSb3V0ZUVudHJ5PGFueT4gPSB7XG4gICAgZm9yY2VSZXJlbmRlcjogZmFsc2UsXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb24sXG4gICAgcm91dGUsXG4gICAgcHJlcGFyZWRNYXRjaCxcbiAgICByYXdTZWFyY2g6IGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLFxuICAgIHF1ZXJ5OiBpbml0aWFsUmF3UXVlcnksXG4gICAgdHlwZWRRdWVyeTogaW5pdGlhbFR5cGVkUXVlcnksXG4gICAgZmlsdGVyczogaW5pdGlhbEZpbHRlcnMsXG4gICAgZmlsdGVyRGlhZ25vc3RpY3M6IGluaXRpYWxGaWx0ZXJEaWFnbm9zdGljcyxcbiAgfTtcblxuICAvLyBJbml0aWFsIG5vcm1hbGl6YXRpb24gcGFzcyAoZS5nLiwgY2xhbXAgcGFnZSlcbiAgY29uc3QgaW5pdFR5cGVkID0gY3VycmVudEVudHJ5LnR5cGVkUXVlcnkgYXMgdW5rbm93biBhc1xuICAgIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgICB8IHVuZGVmaW5lZDtcbiAgbGV0IGluaXRQYWdlOiB1bmtub3duO1xuICBpZiAoaW5pdFR5cGVkICE9IG51bGwpIHtcbiAgICBpbml0UGFnZSA9IGluaXRUeXBlZC5wYWdlO1xuICB9XG4gIGlmIChcbiAgICB0eXBlb2YgaW5pdFBhZ2UgPT09ICdudW1iZXInICYmXG4gICAgaW5pdFBhZ2UgPCAxICYmXG4gICAgaW5pdGlhbFNjaGVtYSAhPSBudWxsICYmXG4gICAgaW5pdFR5cGVkICE9IG51bGxcbiAgKSB7XG4gICAgY29uc3Qgbm9ybSA9IHsgLi4uaW5pdFR5cGVkLCBwYWdlOiAxIH0gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkU2VhcmNoKG5vcm0sIGluaXRpYWxTY2hlbWEpO1xuICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgaGlzdG9yeS5zZXQoe1xuICAgICAgICBwYXRobmFtZTogaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICBoYXNoOiAnJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIE1haW50YWluIGEgc2V0IG9mIHN1YnNjcmliZXJzIHRvIHRoZSBhY3RpdmUgcm91dGUgZW50cnlcbiAgbGV0IG5leHRJZCA9IDA7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IE1hcDxudW1iZXIsIFN1YnNjcmliZUNhbGxiYWNrPGFueT4+KCk7XG5cbiAgLy8gTGlzdGVuIGZvciBsb2NhdGlvbiBjaGFuZ2VzLCBtYXRjaCB0byB0aGUgcm91dGUgZW50cnksIHByZXBhcmUgdGhlIGVudHJ5LFxuICAvLyBhbmQgbm90aWZ5IHN1YnNjcmliZXJzLiBUaGlzIHBhdHRlcm4gZW5zdXJlcyB0aGF0IGRhdGEtbG9hZGluZ1xuICAvLyBvY2N1cnMgKm91dHNpZGUqIG9mIC0gYW5kICpiZWZvcmUqIC0gcmVuZGVyaW5nLlxuICBjb25zdCBjbGVhbnVwID0gaGlzdG9yeS5zdWJzY3JpYmUoKGxvY2F0aW9uLCBmb3JjZVJlcmVuZGVyKSA9PiB7XG4gICAgY29uc3Qgc2FtZVBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWUgPT09IGN1cnJlbnRFbnRyeS5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICBjb25zdCBzYW1lU2VhcmNoID0gbG9jYXRpb24uc2VhcmNoID09PSBjdXJyZW50RW50cnkucmF3U2VhcmNoO1xuXG4gICAgaWYgKCFmb3JjZVJlcmVuZGVyICYmIHNhbWVQYXRobmFtZSAmJiBzYW1lU2VhcmNoKSB7XG4gICAgICAvLyBOb3RoaW5nIGNoYW5nZWQgdGhhdCB3ZSBjYXJlIGFib3V0XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSB0aGUgc2VhcmNoIGNoYW5nZWQgd2Ugc3RpbGwgd2FudCB0byBwcm9wYWdhdGUgdGhlIGNoYW5nZS5cbiAgICAvLyBLZWVwIHRoZSBleGlzdGluZyBwcmVwYXJlZE1hdGNoIHdoZW4gcGF0aG5hbWUgaXMgaWRlbnRpY2FsIHRvIGF2b2lkIHJlZHVuZGFudCB3b3JrLlxuICAgIGxldCBuZXh0UHJlcGFyZWRNYXRjaCA9IGN1cnJlbnRFbnRyeS5wcmVwYXJlZE1hdGNoO1xuICAgIGxldCBuZXh0Um91dGUgPSBjdXJyZW50RW50cnkucm91dGU7XG5cbiAgICBpZiAoIXNhbWVQYXRobmFtZSkge1xuICAgICAgLy8gUGF0aCBjaGFuZ2VkOiByZWNvbXB1dGUgbWF0Y2ggKyBwcmVwYXJlZCBkYXRhIGluY2x1ZGluZyBxdWVyeVxuICAgICAgbmV4dFJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGhpc3RvcnkubG9jYXRpb24pO1xuICAgICAgLy8gd2Ugd2lsbCBzZXQgYmVsb3cgYWZ0ZXIgY29tcHV0aW5nIHR5cGVkIHF1ZXJ5XG4gICAgfVxuXG4gICAgLy8gQnVpbGQgcmF3IHF1ZXJ5IG9iamVjdCAoYmFzaWMgYWdncmVnYXRpb24pIGZyb20gbG9jYXRpb24uc2VhcmNoXG4gICAgY29uc3QgcXVlcnkgPSBwYXJzZVJhd1F1ZXJ5KGxvY2F0aW9uLnNlYXJjaCk7XG4gICAgLy8gRGV0ZXJtaW5lIHNjaGVtYSBmcm9tIGRlZXBlc3QgbWF0Y2hlZCByb3V0ZVxuICAgIGxldCBzY2hlbWE6IGFueTtcbiAgICBsZXQgZmlsdGVyU2NoZW1hOiBhbnk7XG4gICAgaWYgKG5leHRSb3V0ZSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb2xsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgICBjb25zdCBmaWx0ZXJDb2xsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgICBmb3IgKGNvbnN0IHIgb2YgbmV4dFJvdXRlLnJvdXRlLnJvdXRlcykge1xuICAgICAgICBjb25zdCBtYXliZTogdW5rbm93biA9IChyIGFzIHVua25vd24gYXMgeyBxdWVyeT86IHVua25vd24gfSkucXVlcnk7XG4gICAgICAgIGlmIChtYXliZSAhPSBudWxsKSB7XG4gICAgICAgICAgY29sbGVjdGVkLnB1c2gobWF5YmUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1heWJlRjogdW5rbm93biA9IChyIGFzIHVua25vd24gYXMgeyBmaWx0ZXJTY2hlbWE/OiB1bmtub3duIH0pXG4gICAgICAgICAgLmZpbHRlclNjaGVtYTtcbiAgICAgICAgaWYgKG1heWJlRiAhPSBudWxsKSBmaWx0ZXJDb2xsZWN0ZWQucHVzaChtYXliZUYpO1xuICAgICAgfVxuICAgICAgaWYgKGNvbGxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHNjaGVtYSA9IGNvbGxlY3RlZC5hdCgtMSk7XG4gICAgICB9XG4gICAgICBpZiAoZmlsdGVyQ29sbGVjdGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmlsdGVyU2NoZW1hID0gZmlsdGVyQ29sbGVjdGVkLmF0KC0xKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHR5cGVkUXVlcnkgPSBwYXJzZVR5cGVkUXVlcnkoc2NoZW1hLCBxdWVyeSk7XG4gICAgLy8gUGFyc2UgZmlsdGVycyB1c2luZyBmaWx0ZXIgc2NoZW1hIGlmIHByZXNlbnRcbiAgICBsZXQgZmlsdGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgbGV0IGZpbHRlckRpYWdub3N0aWNzOiBhbnlbXSB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZmlsdGVyU2NoZW1hICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZEYgPSBwYXJzZUZpbHRlcnMobG9jYXRpb24uc2VhcmNoLCBmaWx0ZXJTY2hlbWEpO1xuICAgICAgZmlsdGVycyA9IHBhcnNlZEYuZmlsdGVycyBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgZmlsdGVyRGlhZ25vc3RpY3MgPSBwYXJzZWRGLmRpYWdub3N0aWNzIGFzIHVua25vd25bXTtcbiAgICB9XG4gICAgLy8gTm9ybWFsaXphdGlvbjogY2xhbXAgcGFnZSA+PSAxIGlmIG51bWVyaWMgcGFnZSBwcmVzZW50XG4gICAgbGV0IG5vcm1hbGl6ZWQgPSBmYWxzZTtcbiAgICBjb25zdCBwZyA9ICh0eXBlZFF1ZXJ5IGFzIFJlY29yZDxzdHJpbmcsIGFueT4pLnBhZ2U7XG4gICAgaWYgKHR5cGVvZiBwZyA9PT0gJ251bWJlcicgJiYgcGcgPCAxKSB7XG4gICAgICBjb25zdCBjbG9uZSA9IHsgLi4uKHR5cGVkUXVlcnkgYXMgUmVjb3JkPHN0cmluZywgYW55PiksIHBhZ2U6IDEgfTtcbiAgICAgIHR5cGVkUXVlcnkgPSBjbG9uZTtcbiAgICAgIG5vcm1hbGl6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgdGhlIHNlYXJjaCBjaGFuZ2VkIChzYW1lIHBhdGhuYW1lKSB3ZSBzdGlsbCBuZWVkIHRvIHJlLXJ1biBwcmVwYXJlXG4gICAgaWYgKCFzYW1lUGF0aG5hbWUpIHtcbiAgICAgIG5leHRQcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKG5leHRSb3V0ZSwgdHlwZWRRdWVyeSk7XG4gICAgfSBlbHNlIGlmICghc2FtZVNlYXJjaCkge1xuICAgICAgbmV4dFByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2gobmV4dFJvdXRlLCB0eXBlZFF1ZXJ5KTtcbiAgICB9XG5cbiAgICBjb25zdCBuZXh0RW50cnk6IFJvdXRlRW50cnk8YW55PiA9IHtcbiAgICAgIGZvcmNlUmVyZW5kZXI6IGZvcmNlUmVyZW5kZXIgfHwgKHNhbWVQYXRobmFtZSAmJiAhc2FtZVNlYXJjaCksXG4gICAgICBsb2NhdGlvbixcbiAgICAgIHJvdXRlOiBuZXh0Um91dGUsXG4gICAgICBwcmVwYXJlZE1hdGNoOiBuZXh0UHJlcGFyZWRNYXRjaCxcbiAgICAgIHJhd1NlYXJjaDogbG9jYXRpb24uc2VhcmNoLFxuICAgICAgcXVlcnksXG4gICAgICB0eXBlZFF1ZXJ5LFxuICAgICAgZmlsdGVycyxcbiAgICAgIGZpbHRlckRpYWdub3N0aWNzLFxuICAgIH07XG5cbiAgICAvLyBJZiBub3JtYWxpemF0aW9uIGNoYW5nZWQgdGhlIHR5cGVkIHF1ZXJ5IHdlIHRyaWdnZXIgYSByZXBsYWNlIHdpdGggbm9ybWFsaXplZCBzZWFyY2hcbiAgICBpZiAobm9ybWFsaXplZCAmJiBzY2hlbWEgIT0gbnVsbCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgICBxdWVyeTogdHlwZWRRdWVyeSBhcyBhbnksXG4gICAgICAgIHF1ZXJ5U2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIGZpbHRlclNjaGVtYSxcbiAgICAgIH0pO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRTZWFyY2ggIT09IGxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgICBoaXN0b3J5LnNldCh7XG4gICAgICAgICAgcGF0aG5hbWU6IGxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybjsgLy8gZWFybHk6IHN1YnNlcXVlbnQgc2V0IHdpbGwgdHJpZ2dlciByZXJ1blxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBjdXJyZW50IGVudHJ5IGFuZCBub3RpZnkgYWxsIHN1YnNjcmliZXJzXG4gICAgY3VycmVudEVudHJ5ID0gbmV4dEVudHJ5O1xuICAgIHN1YnNjcmliZXJzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICBjYWxsYmFjayhuZXh0RW50cnkpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBUaGUgcm91dGVyIGNvbnRleHQgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gUmVhY3QgQ29udGV4dFxuICBjb25zdCBjb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8YW55PiAmXG4gICAgUHJlcGFyZWRBY2Nlc3M8QW55Um91dGVbXT4gJiB7XG4gICAgICBuYXZpZ2F0ZTogTmF2aWdhdGVPdmVybG9hZHM8QW55Um91dGVbXT47XG4gICAgfSA9IHtcbiAgICBoaXN0b3J5LFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBjdXJyZW50RW50cnk7XG4gICAgfSxcbiAgICBwcmVsb2FkQ29kZShwYXRobmFtZSkge1xuICAgICAgLy8gUHJlbG9hZCBqdXN0IHRoZSBjb21wb25lbnQgY29kZSBmb3IgYSByb3V0ZSB3aXRob3V0IHN0b3JpbmcgdGhlIHJlc3VsdFxuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLndpbmRvdy5sb2NhdGlvbixcbiAgICAgICAgcGF0aG5hbWUsXG4gICAgICB9KTtcblxuICAgICAgaWYgKG1hdGNoZXMgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIExvYWQgYWxsIHJlc291cmNlIHBhZ2VzIGZvciB0aGUgbWF0Y2hlZCByb3V0ZVxuICAgICAgbWF0Y2hlcy5yb3V0ZS5yb3V0ZXMuZm9yRWFjaCgoeyByZXNvdXJjZVBhZ2UgfSkgPT4ge1xuICAgICAgICBpZiAocmVzb3VyY2VQYWdlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgICByZXNvdXJjZVBhZ2UubG9hZCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcmVsb2FkKHBhdGhuYW1lKSB7XG4gICAgICAvLyBQcmVsb2FkIGJvdGggdGhlIGNvbXBvbmVudCBjb2RlIGFuZCBwcmVwYXJlZCBkYXRhIGZvciBhIHJvdXRlXG4gICAgICBjb25zdCBtYXRjaGVzID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgLi4ud2luZG93LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZSxcbiAgICAgIH0pO1xuICAgICAgcHJlcGFyZU1hdGNoKG1hdGNoZXMpO1xuICAgIH0sXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICAvLyBBZGQgYSBuZXcgc3Vic2NyaWJlciBhbmQgcmV0dXJuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uXG4gICAgICBuZXh0SWQgKz0gMTtcbiAgICAgIGNvbnN0IGlkID0gbmV4dElkO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtc3R5bGVcbiAgICAgIGNvbnN0IGRpc3Bvc2UgPSAoKSA9PiB7XG4gICAgICAgIHN1YnNjcmliZXJzLmRlbGV0ZShpZCk7XG4gICAgICB9O1xuICAgICAgc3Vic2NyaWJlcnMuc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZGlzcG9zZTtcbiAgICB9LFxuICAgIG5hdmlnYXRlKHsgcGF0aG5hbWUsIHF1ZXJ5LCBmaWx0ZXJzOiBuYXZGaWx0ZXJzLCByZXBsYWNlIH06IGFueSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRFbnRyeTtcbiAgICAgIGNvbnN0IHRhcmdldFBhdGhuYW1lID0gcGF0aG5hbWUgPz8gY3VycmVudC5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgIC8vIERldGVybWluZSBzY2hlbWEgb2YgZGVzdGluYXRpb24gKGlmIHNhbWUgcGF0aCBhbmQgd2UgaGF2ZSByb3V0ZSB3ZSBjYW4gcmV1c2UsIGVsc2UgcmVtYXRjaClcbiAgICAgIGxldCBzY2hlbWE6IGFueTtcbiAgICAgIGxldCBmaWx0ZXJTY2hlbWE6IGFueTtcbiAgICAgIC8qKiBDb2xsZWN0IGRlZXBlc3QgcXVlcnkgc2NoZW1hIGZyb20gcm91dGUgY2hhaW4gKi9cbiAgICAgIGZ1bmN0aW9uIGNvbGxlY3RTY2hlbWEocm91dGVzQXJyOiBhbnlbXSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgICAgICBpZiAocm91dGVzQXJyID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29sbGVjdGVkOiBhbnlbXSA9IFtdO1xuICAgICAgICBjb25zdCBmaWx0ZXJDb2xsZWN0ZWQ6IGFueVtdID0gW107XG4gICAgICAgIGZvciAoY29uc3QgciBvZiByb3V0ZXNBcnIpIHtcbiAgICAgICAgICBjb25zdCBtYXliZTogdW5rbm93biA9IChyIGFzIHVua25vd24gYXMgeyBxdWVyeT86IHVua25vd24gfSkucXVlcnk7XG4gICAgICAgICAgaWYgKG1heWJlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbGxlY3RlZC5wdXNoKG1heWJlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgbWF5YmVGOiB1bmtub3duID0gKHIgYXMgdW5rbm93biBhcyB7IGZpbHRlclNjaGVtYT86IHVua25vd24gfSlcbiAgICAgICAgICAgIC5maWx0ZXJTY2hlbWE7XG4gICAgICAgICAgaWYgKG1heWJlRiAhPSBudWxsKSBmaWx0ZXJDb2xsZWN0ZWQucHVzaChtYXliZUYpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2xsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHNjaGVtYSA9IGNvbGxlY3RlZC5hdCgtMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlckNvbGxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZmlsdGVyU2NoZW1hID0gZmlsdGVyQ29sbGVjdGVkLmF0KC0xKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBhdGhuYW1lID09IG51bGwgfHwgcGF0aG5hbWUgPT09IGN1cnJlbnQubG9jYXRpb24ucGF0aG5hbWUpIHtcbiAgICAgICAgY29sbGVjdFNjaGVtYShjdXJyZW50LnJvdXRlPy5yb3V0ZS5yb3V0ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZGVzdFJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgICAgICAuLi53aW5kb3cubG9jYXRpb24sXG4gICAgICAgICAgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLFxuICAgICAgICB9KTtcbiAgICAgICAgY29sbGVjdFNjaGVtYShkZXN0Um91dGU/LnJvdXRlLnJvdXRlcyk7XG4gICAgICB9XG4gICAgICBjb25zdCBlZmZlY3RpdmVGaWx0ZXJzID0gbmF2RmlsdGVycyA/PyBjdXJyZW50LmZpbHRlcnM7XG4gICAgICBjb25zdCBzZWFyY2ggPSBidWlsZENvbWJpbmVkU2VhcmNoKHtcbiAgICAgICAgcXVlcnksXG4gICAgICAgIHF1ZXJ5U2NoZW1hOiBzY2hlbWEsXG4gICAgICAgIGZpbHRlcnM6IGVmZmVjdGl2ZUZpbHRlcnMsXG4gICAgICAgIGZpbHRlclNjaGVtYSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9jYXRpb25PYmogPSB7IHBhdGhuYW1lOiB0YXJnZXRQYXRobmFtZSwgc2VhcmNoLCBoYXNoOiAnJyB9O1xuICAgICAgaWYgKHJlcGxhY2UgPT09IHRydWUpIHtcbiAgICAgICAgaGlzdG9yeS5zZXQobG9jYXRpb25PYmopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGlzdG9yeS5wdXNoKGxvY2F0aW9uT2JqKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFByZXBhcmVkKHBhdGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gY3VycmVudEVudHJ5O1xuICAgICAgICAvLyBGaW5kIGxhc3QgcHJlcGFyZWQgcm91dGUgd2l0aCBtYXRjaGluZyBwYXRoXG4gICAgICAgIGZvciAoY29uc3QgcHIgb2YgZW50cnkucHJlcGFyZWRNYXRjaC5yb3V0ZXMpIHtcbiAgICAgICAgICBpZiAocHIucGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHByLnByZXBhcmVkIGFzIGFueTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0VHlwZWRRdWVyeShwYXRoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnRFbnRyeTtcbiAgICAgICAgaWYgKGVudHJ5LnJvdXRlPy5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgcmV0dXJuIGVudHJ5LnR5cGVkUXVlcnkgYXMgYW55O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xuXG4gIC8vIFJldHVybiBib3RoIHRoZSBjb250ZXh0IG9iamVjdCBhbmQgYSBjbGVhbnVwIGZ1bmN0aW9uXG4gIC8vIERldnRvb2xzIGV4cG9zdXJlIChkZXZlbG9wbWVudCBvbmx5KVxuICBpZiAoZGV2dG9vbHNHbG9iYWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICh3aW5kb3cgYXMgdW5rbm93biBhcyB7IF9fUExVTUlMRV9ST1VURVJfXz86IGFueSB9KS5fX1BMVU1JTEVfUk9VVEVSX18gPVxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGdldDogY29udGV4dC5nZXQsXG4gICAgICAgICAgICBzdWJzY3JpYmU6IGNvbnRleHQuc3Vic2NyaWJlLFxuICAgICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBpZ25vcmUgKi9cbiAgICB9XG4gIH1cbiAgLy8gT3B0aW9uYWwgaW4tcGFnZSBkZXZ0b29scyBwYW5lbCAobGlnaHR3ZWlnaHQgb3ZlcmxheSlcbiAgaWYgKGRldnRvb2xzUGFuZWwpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLXBsdW1pbGUtcm91dGVyLWRldnRvb2xzLXBhbmVsXScpID09IG51bGxcbiAgICAgICkge1xuICAgICAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGhvc3Quc2V0QXR0cmlidXRlKCdkYXRhLXBsdW1pbGUtcm91dGVyLWRldnRvb2xzLXBhbmVsJywgJycpO1xuICAgICAgICBob3N0LnN0eWxlLnBvc2l0aW9uID0gJ2ZpeGVkJztcbiAgICAgICAgaG9zdC5zdHlsZS56SW5kZXggPSAnMjE0NzQ4MzY0Nic7XG4gICAgICAgIGhvc3Quc3R5bGUuYm90dG9tID0gJzhweCc7XG4gICAgICAgIGhvc3Quc3R5bGUucmlnaHQgPSAnOHB4JztcbiAgICAgICAgaG9zdC5zdHlsZS5mb250RmFtaWx5ID1cbiAgICAgICAgICAndWktbW9ub3NwYWNlLCBTRk1vbm8tUmVndWxhciwgTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIFwiTGliZXJhdGlvbiBNb25vXCIsIG1vbm9zcGFjZSc7XG4gICAgICAgIGhvc3Quc3R5bGUuZm9udFNpemUgPSAnMTJweCc7XG4gICAgICAgIGhvc3Quc3R5bGUubGluZUhlaWdodCA9ICcxLjMnO1xuICAgICAgICBob3N0LnN0eWxlLmNvbG9yID0gJyMxMTEnO1xuICAgICAgICBob3N0LnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgICAgICBob3N0LnN0eWxlLnBvaW50ZXJFdmVudHMgPSAnbm9uZSc7XG4gICAgICAgIGNvbnN0IHNoYWRvdyA9IGhvc3QuYXR0YWNoU2hhZG93KHsgbW9kZTogJ29wZW4nIH0pO1xuICAgICAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBwYW5lbC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ2F1dG8nO1xuICAgICAgICBwYW5lbC5zdHlsZS5taW5XaWR0aCA9ICcyNjBweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLm1heFdpZHRoID0gJzQyMHB4JztcbiAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzUwdmgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYmFja2dyb3VuZCA9ICdyZ2JhKDI1NSwyNTUsMjU1LDAuOTUpJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgICAgICAgcGFuZWwuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzZweCc7XG4gICAgICAgIHBhbmVsLnN0eWxlLmJveFNoYWRvdyA9ICcwIDJweCA4cHggcmdiYSgwLDAsMCwwLjE1KSc7XG4gICAgICAgIHBhbmVsLnN0eWxlLnBhZGRpbmcgPSAnNnB4IDhweCA4cHgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5iYWNrZHJvcEZpbHRlciA9ICdibHVyKDRweCknO1xuICAgICAgICBwYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBwYW5lbC5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgIHBhbmVsLnN0eWxlLnJvd0dhcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCBoZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgaGVhZGVyLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIGhlYWRlci5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XG4gICAgICAgIGhlYWRlci5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdzcGFjZS1iZXR3ZWVuJztcbiAgICAgICAgaGVhZGVyLnN0eWxlLmdhcCA9ICc4cHgnO1xuICAgICAgICBjb25zdCB0aXRsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgdGl0bGUudGV4dENvbnRlbnQgPSAnUGx1bWlsZSBSb3V0ZXInO1xuICAgICAgICB0aXRsZS5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgICAgIGNvbnN0IGJ1dHRvbnMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgYnV0dG9ucy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICBidXR0b25zLnN0eWxlLmdhcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCBjb2xsYXBzZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjb2xsYXBzZUJ0bi50ZXh0Q29udGVudCA9ICfiiJInO1xuICAgICAgICBjb25zdCBjbG9zZUJ0biA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICBjbG9zZUJ0bi50ZXh0Q29udGVudCA9ICfDlyc7XG4gICAgICAgIGNvbnN0IGJ0bnM6IEhUTUxCdXR0b25FbGVtZW50W10gPSBbY29sbGFwc2VCdG4sIGNsb3NlQnRuXTtcbiAgICAgICAgZm9yIChjb25zdCBiIG9mIGJ0bnMpIHtcbiAgICAgICAgICBiLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICAgICAgICBiLnN0eWxlLmJhY2tncm91bmQgPSAnI2VlZSc7XG4gICAgICAgICAgYi5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNjY2MnO1xuICAgICAgICAgIGIuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgICAgICAgYi5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgICAgICBiLnN0eWxlLmxpbmVIZWlnaHQgPSAnMSc7XG4gICAgICAgICAgYi5zdHlsZS5wYWRkaW5nID0gJzJweCA1cHgnO1xuICAgICAgICB9XG4gICAgICAgIGhlYWRlci5hcHBlbmRDaGlsZCh0aXRsZSk7XG4gICAgICAgIGJ1dHRvbnMuYXBwZW5kQ2hpbGQoY29sbGFwc2VCdG4pO1xuICAgICAgICBidXR0b25zLmFwcGVuZENoaWxkKGNsb3NlQnRuKTtcbiAgICAgICAgaGVhZGVyLmFwcGVuZENoaWxkKGJ1dHRvbnMpO1xuICAgICAgICBjb25zdCBwYXRoRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgcGF0aEVsLnN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcbiAgICAgICAgY29uc3QgdmFyc0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgICAgIGNvbnN0IHF1ZXJ5RWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgY29uc3QgdHlwZWRFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1xuICAgICAgICBjb25zdCBmaWx0ZXJzRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdwcmUnKTtcbiAgICAgICAgY29uc3QgZmlsdGVyRGlhZ0VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgncHJlJyk7XG4gICAgICAgIC8vIFRpbWVsaW5lIGNvbnRhaW5lclxuICAgICAgICBjb25zdCB0aW1lbGluZVdyYXAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIHRpbWVsaW5lV3JhcC5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbic7XG4gICAgICAgIHRpbWVsaW5lV3JhcC5zdHlsZS5nYXAgPSAnMnB4JztcbiAgICAgICAgdGltZWxpbmVXcmFwLnN0eWxlLm1hcmdpblRvcCA9ICc0cHgnO1xuICAgICAgICBjb25zdCB0aW1lbGluZUhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aW1lbGluZUhlYWRlci50ZXh0Q29udGVudCA9ICdUaW1lbGluZSAocXVlcnkgY2hhbmdlcyknO1xuICAgICAgICB0aW1lbGluZUhlYWRlci5zdHlsZS5mb250V2VpZ2h0ID0gJzYwMCc7XG4gICAgICAgIHRpbWVsaW5lSGVhZGVyLnN0eWxlLmZvbnRTaXplID0gJzExcHgnO1xuICAgICAgICBjb25zdCB0aW1lbGluZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5mbGV4RGlyZWN0aW9uID0gJ2NvbHVtbi1yZXZlcnNlJzsgLy8gbmV3ZXN0IG9uIHRvcCB2aXN1YWxseSB3aGlsZSBhcHBlbmRpbmcgYXQgZW5kIGZvciBjaGVhcGVyIG9wc1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5tYXhIZWlnaHQgPSAnMTQwcHgnO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5vdmVyZmxvd1kgPSAnYXV0byc7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2UyZTJlMic7XG4gICAgICAgIHRpbWVsaW5lLnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmYWZiZmMnO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5mb250RmFtaWx5ID0gJ2luaGVyaXQnO1xuICAgICAgICB0aW1lbGluZS5zdHlsZS5mb250U2l6ZSA9ICcxMXB4JztcbiAgICAgICAgdGltZWxpbmVXcmFwLmFwcGVuZENoaWxkKHRpbWVsaW5lSGVhZGVyKTtcbiAgICAgICAgdGltZWxpbmVXcmFwLmFwcGVuZENoaWxkKHRpbWVsaW5lKTtcbiAgICAgICAgY29uc3QgcHJlczogSFRNTFByZUVsZW1lbnRbXSA9IFtcbiAgICAgICAgICB2YXJzRWwsXG4gICAgICAgICAgcXVlcnlFbCxcbiAgICAgICAgICB0eXBlZEVsLFxuICAgICAgICAgIGZpbHRlcnNFbCxcbiAgICAgICAgICBmaWx0ZXJEaWFnRWwsXG4gICAgICAgIF07XG4gICAgICAgIGZvciAoY29uc3QgcCBvZiBwcmVzKSB7XG4gICAgICAgICAgcC5zdHlsZS5tYXJnaW4gPSAnMCc7XG4gICAgICAgICAgcC5zdHlsZS5wYWRkaW5nID0gJzRweCc7XG4gICAgICAgICAgcC5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmNmY4ZmEnO1xuICAgICAgICAgIHAuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjZTJlMmUyJztcbiAgICAgICAgICBwLnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgICAgICAgIHAuc3R5bGUub3ZlcmZsb3dYID0gJ2F1dG8nO1xuICAgICAgICAgIHAuc3R5bGUubWF4SGVpZ2h0ID0gJzE2MHB4JztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzbWFsbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBzbWFsbC5zdHlsZS5mb250U2l6ZSA9ICcxMHB4JztcbiAgICAgICAgc21hbGwuc3R5bGUub3BhY2l0eSA9ICcwLjcnO1xuICAgICAgICBzbWFsbC50ZXh0Q29udGVudCA9IGBTaG9ydGN1dDogJHtkZXZ0b29sc1Nob3J0Y3V0fWA7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKGhlYWRlcik7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHBhdGhFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHZhcnNFbCk7XG4gICAgICAgIHBhbmVsLmFwcGVuZENoaWxkKHF1ZXJ5RWwpO1xuICAgICAgICBwYW5lbC5hcHBlbmRDaGlsZCh0eXBlZEVsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQodGltZWxpbmVXcmFwKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoZmlsdGVyc0VsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoZmlsdGVyRGlhZ0VsKTtcbiAgICAgICAgcGFuZWwuYXBwZW5kQ2hpbGQoc21hbGwpO1xuICAgICAgICBzaGFkb3cuYXBwZW5kQ2hpbGQocGFuZWwpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGhvc3QpO1xuICAgICAgICBsZXQgY29sbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIGNvbGxhcHNlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGNvbGxhcHNlZCA9ICFjb2xsYXBzZWQ7XG4gICAgICAgICAgaWYgKGNvbGxhcHNlZCkge1xuICAgICAgICAgICAgcGFuZWwuc3R5bGUubWF4SGVpZ2h0ID0gJzI0cHgnO1xuICAgICAgICAgICAgcGFuZWwuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgICAgICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJysnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5tYXhIZWlnaHQgPSAnNTB2aCc7XG4gICAgICAgICAgICBwYW5lbC5zdHlsZS5vdmVyZmxvdyA9ICdhdXRvJztcbiAgICAgICAgICAgIGNvbGxhcHNlQnRuLnRleHRDb250ZW50ID0gJ+KIkic7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbGV0IHVuc3ViOiAoKCkgPT4gdm9pZCkgfCB1bmRlZmluZWQ7XG4gICAgICAgIGNsb3NlQnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIGhvc3QucmVtb3ZlKCk7XG4gICAgICAgICAgaWYgKHR5cGVvZiB1bnN1YiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdW5zdWIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICAvKiogVXBkYXRlIHBhbmVsIGNvbnRlbnQgZnJvbSBjdXJyZW50IHJvdXRlIGVudHJ5ICovXG4gICAgICAgIC8vIEtlZXAgbGFzdCBxdWVyeSBzbmFwc2hvdCBmb3IgZGlmZlxuICAgICAgICBsZXQgbGFzdFF1ZXJ5OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZDtcbiAgICAgICAgbGV0IGxhc3RTZWFyY2g6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbXB1dGUgZGlmZiBjbGFzc2lmaWNhdGlvbiBiZXR3ZWVuIHR3byBxdWVyeSBvYmplY3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgZnVuY3Rpb24gZGlmZlF1ZXJpZXMoXG4gICAgICAgICAgcHJldjogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQsXG4gICAgICAgICAgbmV4dDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICAgICAgICk6IHtcbiAgICAgICAgICBhZGRlZDogc3RyaW5nW107XG4gICAgICAgICAgcmVtb3ZlZDogc3RyaW5nW107XG4gICAgICAgICAgY2hhbmdlZDogc3RyaW5nW107XG4gICAgICAgICAgdW5jaGFuZ2VkOiBzdHJpbmdbXTtcbiAgICAgICAgfSB7XG4gICAgICAgICAgY29uc3QgYWRkZWQ6IHN0cmluZ1tdID0gW107XG4gICAgICAgICAgY29uc3QgcmVtb3ZlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBjaGFuZ2VkOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgIGNvbnN0IHVuY2hhbmdlZDogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgICBjb25zdCBwcmV2S2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocHJldiA/PyB7fSkpO1xuICAgICAgICAgIGNvbnN0IG5leHRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhuZXh0KSk7XG4gICAgICAgICAgbmV4dEtleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgaWYgKCFwcmV2S2V5cy5oYXMoaykpIHtcbiAgICAgICAgICAgICAgYWRkZWQucHVzaChrKTtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHB2OiB1bmtub3duO1xuICAgICAgICAgICAgaWYgKHByZXYgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBwcmV2IGlzIGEgcGxhaW4gcmVjb3JkOyBkaXJlY3QgaW5kZXggKHJ1bnRpbWUgc2FmZSlcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICAgICBwdiA9IChwcmV2IGFzIGFueSlba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBudiA9IG5leHRba107XG4gICAgICAgICAgICBsZXQgc2FtZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHYpICYmIEFycmF5LmlzQXJyYXkobnYpKSB7XG4gICAgICAgICAgICAgIGlmIChwdi5sZW5ndGggPT09IChudiBhcyB1bmtub3duW10pLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHNhbWUgPSBwdi5ldmVyeSgodiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgPT09IChudiBhcyB1bmtub3duW10pW2ldO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzYW1lID0gcHYgPT09IG52O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNhbWUpIHtcbiAgICAgICAgICAgICAgdW5jaGFuZ2VkLnB1c2goayk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGFuZ2VkLnB1c2goayk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2S2V5cy5kZWxldGUoayk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcHJldktleXMuZm9yRWFjaCgoaykgPT4ge1xuICAgICAgICAgICAgcmVtb3ZlZC5wdXNoKGspO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiB7IGFkZGVkLCByZW1vdmVkLCBjaGFuZ2VkLCB1bmNoYW5nZWQgfTtcbiAgICAgICAgfVxuICAgICAgICAvKiogVXBkYXRlIHBhbmVsIGNvbnRlbnQgYW5kIG1heWJlIHB1c2ggdGltZWxpbmUgZW50cnkgKi9cbiAgICAgICAgZnVuY3Rpb24gcmVuZGVyKCk6IHZvaWQge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IGNvbnRleHQuZ2V0KCk7XG4gICAgICAgICAgICBwYXRoRWwudGV4dENvbnRlbnQgPSBgJHtlbnRyeS5sb2NhdGlvbi5wYXRobmFtZX0ke2VudHJ5LmxvY2F0aW9uLnNlYXJjaH1gO1xuICAgICAgICAgICAgY29uc3QgdmFyc0pzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeS5yb3V0ZT8ucGFyYW1zID8/IHt9LCBudWxsLCAyKTtcbiAgICAgICAgICAgIHZhcnNFbC50ZXh0Q29udGVudCA9IGB2YXJzOiAke3ZhcnNKc29ufWA7XG4gICAgICAgICAgICBjb25zdCByYXdKc29uID0gSlNPTi5zdHJpbmdpZnkoZW50cnkucXVlcnksIG51bGwsIDIpO1xuICAgICAgICAgICAgcXVlcnlFbC50ZXh0Q29udGVudCA9IGByYXc6ICAke3Jhd0pzb259YDtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkSnNvbiA9IEpTT04uc3RyaW5naWZ5KGVudHJ5LnR5cGVkUXVlcnksIG51bGwsIDIpO1xuICAgICAgICAgICAgdHlwZWRFbC50ZXh0Q29udGVudCA9IGB0eXBlZDoke3R5cGVkSnNvbn1gO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyc0pzb24gPSBKU09OLnN0cmluZ2lmeShlbnRyeS5maWx0ZXJzLCBudWxsLCAyKTtcbiAgICAgICAgICAgIGZpbHRlcnNFbC50ZXh0Q29udGVudCA9IGBmaWx0ZXJzOiR7ZmlsdGVyc0pzb259YDtcbiAgICAgICAgICAgIGNvbnN0IGRpYWcgPSBlbnRyeS5maWx0ZXJEaWFnbm9zdGljcyA/PyBbXTtcbiAgICAgICAgICAgIGZpbHRlckRpYWdFbC50ZXh0Q29udGVudCA9IGBmaWx0ZXJEaWFnbm9zdGljczogJHtkaWFnLmxlbmd0aH1gO1xuICAgICAgICAgICAgLy8gVGltZWxpbmUgbG9nIGlmIHF1ZXJ5IHNlYXJjaCBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAoZW50cnkucmF3U2VhcmNoICE9PSBsYXN0U2VhcmNoKSB7XG4gICAgICAgICAgICAgIGNvbnN0IG5vd1F1ZXJ5ID0gZW50cnkucXVlcnkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBkaWZmUXVlcmllcyhsYXN0UXVlcnksIG5vd1F1ZXJ5KTtcbiAgICAgICAgICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIHJvdy5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICByb3cuc3R5bGUuZmxleERpcmVjdGlvbiA9ICdjb2x1bW4nO1xuICAgICAgICAgICAgICByb3cuc3R5bGUuYm9yZGVyQm90dG9tID0gJzFweCBzb2xpZCAjZTllOWU5JztcbiAgICAgICAgICAgICAgcm93LnN0eWxlLnBhZGRpbmcgPSAnM3B4IDRweCc7XG4gICAgICAgICAgICAgIGNvbnN0IGhlYWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgaGVhZC5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICAgICAgICBoZWFkLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gJ3NwYWNlLWJldHdlZW4nO1xuICAgICAgICAgICAgICBjb25zdCB0cyA9IG5ldyBEYXRlKCkudG9Mb2NhbGVUaW1lU3RyaW5nKCk7XG4gICAgICAgICAgICAgIGxldCBzZWFyY2hEaXNwbGF5ID0gJyhlbXB0eSknO1xuICAgICAgICAgICAgICBpZiAoZW50cnkubG9jYXRpb24uc2VhcmNoICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHNlYXJjaERpc3BsYXkgPSBlbnRyeS5sb2NhdGlvbi5zZWFyY2g7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaGVhZC5pbm5lckhUTUwgPSBgPHN0cm9uZz4ke3RzfTwvc3Ryb25nPiA8Y29kZSBzdHlsZT1cImJhY2tncm91bmQ6I2VlZTtwYWRkaW5nOjFweCAzcHg7Ym9yZGVyLXJhZGl1czozcHg7XCI+JHtzZWFyY2hEaXNwbGF5fTwvY29kZT5gO1xuICAgICAgICAgICAgICBjb25zdCBib2R5ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgIGJvZHkuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5mbGV4V3JhcCA9ICd3cmFwJztcbiAgICAgICAgICAgICAgYm9keS5zdHlsZS5nYXAgPSAnNHB4JztcbiAgICAgICAgICAgICAgLyoqIENyZWF0ZSBhIGNvbG9yZWQgcGlsbCBlbGVtZW50ICovXG4gICAgICAgICAgICAgIGZ1bmN0aW9uIHBpbGwoXG4gICAgICAgICAgICAgICAgbGFiZWw6IHN0cmluZyxcbiAgICAgICAgICAgICAgICBraW5kOiAnYWRkZWQnIHwgJ3JlbW92ZWQnIHwgJ2NoYW5nZWQnIHwgJ3VuY2hhbmdlZCcsXG4gICAgICAgICAgICAgICk6IEhUTUxTcGFuRWxlbWVudCB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICBzcGFuLnRleHRDb250ZW50ID0gbGFiZWw7XG4gICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5wYWRkaW5nID0gJzFweCA0cHgnO1xuICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyUmFkaXVzID0gJzEwcHgnO1xuICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuZm9udFNpemUgPSAnMTBweCc7XG4gICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkJztcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ2FkZGVkJzpcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5iYWNrZ3JvdW5kID0gJyNlNmZmZWQnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJvcmRlckNvbG9yID0gJyMyY2JlNGUnO1xuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmNvbG9yID0gJyMyMjg2M2EnO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlbW92ZWQnOlxuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZWVmMCc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnI2Q3M2E0OSc7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnI2NiMjQzMSc7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgY2FzZSAnY2hhbmdlZCc6XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYmFja2dyb3VuZCA9ICcjZmZmNWIxJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5ib3JkZXJDb2xvciA9ICcjZmZkMzNkJztcbiAgICAgICAgICAgICAgICAgICAgc3Bhbi5zdHlsZS5jb2xvciA9ICcjNzM1YzBmJztcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICBjYXNlICd1bmNoYW5nZWQnOlxuICAgICAgICAgICAgICAgICAgICBzcGFuLnN0eWxlLmJhY2tncm91bmQgPSAnI2YxZjhmZic7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuYm9yZGVyQ29sb3IgPSAnIzc5YjhmZic7XG4gICAgICAgICAgICAgICAgICAgIHNwYW4uc3R5bGUuY29sb3IgPSAnIzAzNjZkNic7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIGV4aGF1c3RpdmVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwYW47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGRpZmYuYWRkZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgLi4uZGlmZi5hZGRlZC5tYXAoKGspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpbGwoYCske2t9YCwgJ2FkZGVkJyk7XG4gICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChkaWZmLmNoYW5nZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGJvZHkuYXBwZW5kKFxuICAgICAgICAgICAgICAgICAgLi4uZGlmZi5jaGFuZ2VkLm1hcCgoaykgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGlsbChgfiR7a31gLCAnY2hhbmdlZCcpO1xuICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoZGlmZi5yZW1vdmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBib2R5LmFwcGVuZChcbiAgICAgICAgICAgICAgICAgIC4uLmRpZmYucmVtb3ZlZC5tYXAoKGspID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBpbGwoYC0ke2t9YCwgJ3JlbW92ZWQnKTtcbiAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY29uc3Qgbm9BZGRzID0gZGlmZi5hZGRlZC5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgIGNvbnN0IG5vQ2hhbmdlcyA9IGRpZmYuY2hhbmdlZC5sZW5ndGggPT09IDA7XG4gICAgICAgICAgICAgIGNvbnN0IG5vUmVtb3ZhbHMgPSBkaWZmLnJlbW92ZWQubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgICBpZiAobm9BZGRzICYmIG5vQ2hhbmdlcyAmJiBub1JlbW92YWxzKSB7XG4gICAgICAgICAgICAgICAgYm9keS5hcHBlbmQocGlsbCgnbm8tY2hhbmdlJywgJ3VuY2hhbmdlZCcpKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByb3cuYXBwZW5kQ2hpbGQoaGVhZCk7XG4gICAgICAgICAgICAgIHJvdy5hcHBlbmRDaGlsZChib2R5KTtcbiAgICAgICAgICAgICAgdGltZWxpbmUuYXBwZW5kQ2hpbGQocm93KTtcbiAgICAgICAgICAgICAgaWYgKHRpbWVsaW5lLmNoaWxkRWxlbWVudENvdW50ID4gNTApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaXJzdCA9IHRpbWVsaW5lLmZpcnN0RWxlbWVudENoaWxkO1xuICAgICAgICAgICAgICAgIGlmIChmaXJzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICB0aW1lbGluZS5yZW1vdmVDaGlsZChmaXJzdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxhc3RRdWVyeSA9IG5vd1F1ZXJ5O1xuICAgICAgICAgICAgICBsYXN0U2VhcmNoID0gZW50cnkucmF3U2VhcmNoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLyogaWdub3JlICovXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlcigpO1xuICAgICAgICB1bnN1YiA9IGNvbnRleHQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICByZW5kZXIoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2KSA9PiB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICAgICAgaWYgKGV2LmFsdEtleSkgcGFydHMucHVzaCgnQWx0Jyk7XG4gICAgICAgICAgICBpZiAoZXYuc2hpZnRLZXkpIHBhcnRzLnB1c2goJ1NoaWZ0Jyk7XG4gICAgICAgICAgICBpZiAoZXYuY3RybEtleSkgcGFydHMucHVzaCgnQ3RybCcpO1xuICAgICAgICAgICAgbGV0IGtleVBhcnQgPSBldi5rZXk7XG4gICAgICAgICAgICBpZiAoZXYua2V5Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICBrZXlQYXJ0ID0gZXYua2V5LnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJ0cy5wdXNoKGtleVBhcnQpO1xuICAgICAgICAgICAgY29uc3QgY29tYm8gPSBwYXJ0cy5qb2luKCcrJyk7XG4gICAgICAgICAgICBpZiAoY29tYm8gPT09IGRldnRvb2xzU2hvcnRjdXQucmVwbGFjZSgvXFxzKy9nLCAnJykpIHtcbiAgICAgICAgICAgICAgaWYgKGhvc3Quc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICAgICAgaG9zdC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBob3N0LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIC8qIGlnbm9yZSAqL1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBpZ25vcmUgKi9cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY2xlYW51cCwgY29udGV4dCB9IGFzIENyZWF0ZVJvdXRlclJldHVybjxhbnk+O1xufVxuIl19
@@ -1,7 +1,11 @@
1
1
  import type { ParamData } from 'path-to-regexp';
2
- import type { PrepareResult, PreparedMatch, Route, RouterMatchedRoute } from './types.js';
2
+ import type { PrepareResult, PreparedMatch, Route, RouterMatchedRoute, QuerySchema, InferQuery } from './types.js';
3
3
  import type { FlatRoute } from './builder.js';
4
4
  export declare function getMatchedRoute<TParams extends ParamData>(routes: FlatRoute<TParams>[], location: Location): RouterMatchedRoute<TParams> | null;
5
5
  export declare function prepareMatch<TParams extends ParamData>(match: RouterMatchedRoute<TParams> | null, query?: Record<string, unknown>): PreparedMatch<TParams>;
6
- export declare function r<TPrepared extends PrepareResult, TVariables extends ParamData = ParamData, TQuery extends Record<string, unknown> = Record<string, unknown>>(route: Route<TPrepared, TVariables, TQuery>): Route<TPrepared, TVariables, TQuery>;
6
+ export declare function r<TPrepared extends PrepareResult = PrepareResult, TVariables extends ParamData = ParamData, TQuery extends Record<string, unknown> = Record<string, unknown>, TSchema extends QuerySchema | undefined = undefined>(route: (TSchema extends QuerySchema ? Omit<Route<TPrepared, TVariables, InferQuery<TSchema>>, 'query'> & {
7
+ query: TSchema;
8
+ } : Route<TPrepared, TVariables, TQuery>) & {
9
+ query?: TSchema;
10
+ }): Route<TPrepared, TVariables, TSchema extends QuerySchema ? InferQuery<TSchema> : TQuery>;
7
11
  //# sourceMappingURL=tools.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEb,KAAK,EACL,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAW9C,wBAAgB,eAAe,CAAC,OAAO,SAAS,SAAS,EACvD,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAC5B,QAAQ,EAAE,QAAQ,GACjB,kBAAkB,CAAC,OAAO,CAAC,GAAG,IAAI,CAepC;AAUD,wBAAgB,YAAY,CAAC,OAAO,SAAS,SAAS,EACpD,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,IAAI,EACzC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,aAAa,CAAC,OAAO,CAAC,CA+CxB;AAmBD,wBAAgB,CAAC,CACf,SAAS,SAAS,aAAa,EAC/B,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAEhE,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,GAC1C,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAEtC"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EACV,aAAa,EACb,aAAa,EAEb,KAAK,EACL,kBAAkB,EAClB,WAAW,EACX,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAW9C,wBAAgB,eAAe,CAAC,OAAO,SAAS,SAAS,EACvD,MAAM,EAAE,SAAS,CAAC,OAAO,CAAC,EAAE,EAC5B,QAAQ,EAAE,QAAQ,GACjB,kBAAkB,CAAC,OAAO,CAAC,GAAG,IAAI,CAepC;AAUD,wBAAgB,YAAY,CAAC,OAAO,SAAS,SAAS,EACpD,KAAK,EAAE,kBAAkB,CAAC,OAAO,CAAC,GAAG,IAAI,EACzC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,aAAa,CAAC,OAAO,CAAC,CAmDxB;AAwBD,wBAAgB,CAAC,CACf,SAAS,SAAS,aAAa,GAAG,aAAa,EAC/C,UAAU,SAAS,SAAS,GAAG,SAAS,EACxC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChE,OAAO,SAAS,WAAW,GAAG,SAAS,GAAG,SAAS,EAEnD,KAAK,EAAE,CAAC,OAAO,SAAS,WAAW,GAC/B,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG;IACjE,KAAK,EAAE,OAAO,CAAC;CAChB,GACD,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAC9D,KAAK,CACN,SAAS,EACT,UAAU,EACV,OAAO,SAAS,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,GAAG,MAAM,CAC3D,CAMA"}
package/lib/esm/tools.js CHANGED
@@ -56,4 +56,4 @@ export function prepareMatch(match, query) {
56
56
  export function r(route) {
57
57
  return route;
58
58
  }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUJBLE1BQU0sVUFBVSxlQUFlLENBQzdCLE1BQTRCLEVBQzVCLFFBQWtCO0lBRWxCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDcEIsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFDL0IsT0FBTztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsSUFBSTtnQkFDSixNQUFNO2FBQ1AsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBVUQsTUFBTSxVQUFVLFlBQVksQ0FDMUIsS0FBeUMsRUFDekMsS0FBK0I7SUFFL0IsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTztZQUNMLEtBQUs7WUFDTCxNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUVqQyxNQUFNLE1BQU0sR0FBeUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDcEUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUV0RCxJQUFJLFNBQWtCLENBQUM7UUFDdkIsSUFBSSxRQUFtQyxDQUFDO1FBRXhDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3BCLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQ2pCLEtBQUs7Z0JBQ0wsWUFBWTtnQkFDWixZQUFZO2dCQUVaLFNBQVMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDOUIsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO2FBQ25CLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQy9CLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUV0QixZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSTtZQUNKLFFBQVE7WUFDUixVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVUsSUFBSSxJQUFJO1lBQzNDLE1BQU07WUFDTixZQUFZO1NBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUFtQkQsTUFBTSxVQUFVLENBQUMsQ0FLZixLQUEyQztJQUUzQyxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcblxuaW1wb3J0IHR5cGUge1xuICBQcmVwYXJlUmVzdWx0LFxuICBQcmVwYXJlZE1hdGNoLFxuICBQcmVwYXJlZE1hdGNoUm91dGUsXG4gIFJvdXRlLFxuICBSb3V0ZXJNYXRjaGVkUm91dGUsXG59IGZyb20gJy4vdHlwZXMuanMnO1xuXG5pbXBvcnQgdHlwZSB7IEZsYXRSb3V0ZSB9IGZyb20gJy4vYnVpbGRlci5qcyc7XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IHJvdXRlIHRoYXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gbG9jYXRpb24uXG4gKiBJdGVyYXRlcyB0aHJvdWdoIGFsbCByb3V0ZXMgYW5kIHJldHVybnMgdGhlIGZpcnN0IG1hdGNoIGZvdW5kLlxuICpcbiAqIEB0ZW1wbGF0ZSBUUGFyYW1zIC0gUm91dGUgcGFyYW1ldGVyIHR5cGVzIGV4dHJhY3RlZCBmcm9tIHRoZSBVUkwgcGF0aFxuICogQHBhcmFtIHJvdXRlcyAtIEFycmF5IG9mIGZsYXQgcm91dGVzIHRvIHNlYXJjaCB0aHJvdWdoXG4gKiBAcGFyYW0gbG9jYXRpb24gLSBCcm93c2VyIGxvY2F0aW9uIG9iamVjdCBjb250YWluaW5nIHBhdGhuYW1lIHRvIG1hdGNoXG4gKiBAcmV0dXJucyBUaGUgbWF0Y2hlZCByb3V0ZSB3aXRoIGV4dHJhY3RlZCBwYXJhbWV0ZXJzLCBvciBudWxsIGlmIG5vIG1hdGNoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNYXRjaGVkUm91dGU8VFBhcmFtcyBleHRlbmRzIFBhcmFtRGF0YT4oXG4gIHJvdXRlczogRmxhdFJvdXRlPFRQYXJhbXM+W10sXG4gIGxvY2F0aW9uOiBMb2NhdGlvbixcbik6IFJvdXRlck1hdGNoZWRSb3V0ZTxUUGFyYW1zPiB8IG51bGwge1xuICBmb3IgKGNvbnN0IHJvdXRlIG9mIHJvdXRlcykge1xuICAgIGNvbnN0IG1hdGNoID0gcm91dGUubWF0Y2hGdW5jdGlvbihsb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgaWYgKG1hdGNoICE9PSBmYWxzZSkge1xuICAgICAgY29uc3QgeyBwYXRoLCBwYXJhbXMgfSA9IG1hdGNoO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF0Y2gsXG4gICAgICAgIHJvdXRlLFxuICAgICAgICBwYXRoLFxuICAgICAgICBwYXJhbXMsXG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIFByZXBhcmVzIGEgbWF0Y2hlZCByb3V0ZSBmb3IgcmVuZGVyaW5nIGJ5IGxvYWRpbmcgY29tcG9uZW50cyBhbmQgZXhlY3V0aW5nIHByZXBhcmUgZnVuY3Rpb25zLlxuICogVGhpcyBmdW5jdGlvbiBwcm9jZXNzZXMgdGhlIHJvdXRlIGhpZXJhcmNoeSBhbmQgbG9hZHMgYW55IHJlcXVpcmVkIGRhdGEgb3IgY29tcG9uZW50cy5cbiAqXG4gKiBAdGVtcGxhdGUgVFBhcmFtcyAtIFJvdXRlIHBhcmFtZXRlciB0eXBlcyBleHRyYWN0ZWQgZnJvbSB0aGUgVVJMIHBhdGhcbiAqIEBwYXJhbSBtYXRjaCAtIFRoZSBtYXRjaGVkIHJvdXRlIHRvIHByZXBhcmUsIG9yIG51bGwgaWYgbm8gcm91dGUgbWF0Y2hlZFxuICogQHJldHVybnMgUHJlcGFyZWQgbWF0Y2ggd2l0aCBsb2FkZWQgY29tcG9uZW50cyBhbmQgZGF0YSByZWFkeSBmb3IgcmVuZGVyaW5nXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlTWF0Y2g8VFBhcmFtcyBleHRlbmRzIFBhcmFtRGF0YT4oXG4gIG1hdGNoOiBSb3V0ZXJNYXRjaGVkUm91dGU8VFBhcmFtcz4gfCBudWxsLFxuICBxdWVyeT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKTogUHJlcGFyZWRNYXRjaDxUUGFyYW1zPiB7XG4gIGlmIChtYXRjaCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoLFxuICAgICAgcm91dGVzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbWF0Y2hlZFJvdXRlID0gbWF0Y2gucm91dGU7XG5cbiAgY29uc3Qgcm91dGVzOiBQcmVwYXJlZE1hdGNoUm91dGVbXSA9IG1hdGNoLnJvdXRlLnJvdXRlcy5tYXAoKHJvdXRlKSA9PiB7XG4gICAgY29uc3QgeyBwYXRoLCBwcmVwYXJlLCByZXNvdXJjZVBhZ2UsIHJlbmRlciB9ID0gcm91dGU7XG5cbiAgICBsZXQgQ29tcG9uZW50OiB1bmtub3duO1xuICAgIGxldCBwcmVwYXJlZDogUHJlcGFyZVJlc3VsdCB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChwcmVwYXJlICE9IG51bGwpIHtcbiAgICAgIHByZXBhcmVkID0gcHJlcGFyZSh7XG4gICAgICAgIG1hdGNoLFxuICAgICAgICBtYXRjaGVkUm91dGUsXG4gICAgICAgIHJlc291cmNlUGFnZSxcbiAgICAgICAgLy8gRml4IE9iamVjdC5jcmVhdGUobnVsbCkgaXNzdWUgaW4gcGF0aC10by1yZWdleHBcbiAgICAgICAgdmFyaWFibGVzOiB7IC4uLm1hdGNoLnBhcmFtcyB9LFxuICAgICAgICBxdWVyeTogcXVlcnkgPz8ge30sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzb3VyY2VQYWdlICE9IG51bGwpIHtcbiAgICAgIENvbXBvbmVudCA9IHJlc291cmNlUGFnZS5nZXQoKTtcbiAgICAgIGlmIChDb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJlc291cmNlUGFnZS5sb2FkKCk7IC8vIGVhZ2VybHkgbG9hZFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aCxcbiAgICAgIHByZXBhcmVkLFxuICAgICAgcmVkaXJlY3RUbzogbWF0Y2hlZFJvdXRlLnJlZGlyZWN0VG8gPz8gbnVsbCxcbiAgICAgIHJlbmRlcixcbiAgICAgIHJlc291cmNlUGFnZSxcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG1hdGNoLFxuICAgIHJvdXRlcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBUeXBlIGhlbHBlciBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgc3Ryb25nbHktdHlwZWQgcm91dGUgZGVmaW5pdGlvbnMuXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgbW9kaWZ5IHRoZSByb3V0ZSwgaXQganVzdCBwcm92aWRlcyBUeXBlU2NyaXB0IHR5cGUgaW5mZXJlbmNlLlxuICpcbiAqIEB0ZW1wbGF0ZSBUUHJlcGFyZWQgLSBUaGUgdHlwZSBvZiBwcmVwYXJlZCBkYXRhIHJldHVybmVkIGJ5IHRoZSByb3V0ZSdzIHByZXBhcmUgZnVuY3Rpb25cbiAqIEB0ZW1wbGF0ZSBUVmFyaWFibGVzIC0gUm91dGUgcGFyYW1ldGVyIHR5cGVzIGV4dHJhY3RlZCBmcm9tIHRoZSBVUkwgcGF0aFxuICogQHBhcmFtIHJvdXRlIC0gVGhlIHJvdXRlIGNvbmZpZ3VyYXRpb24gdG8gdHlwZVxuICogQHJldHVybnMgVGhlIHNhbWUgcm91dGUgd2l0aCBwcm9wZXIgVHlwZVNjcmlwdCB0eXBlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB1c2VyUm91dGUgPSByPHsgdXNlcjogVXNlciB9LCB7IGlkOiBzdHJpbmcgfT4oe1xuICogICBwYXRoOiAnL3VzZXJzLzppZCcsXG4gKiAgIHByZXBhcmU6ICh7IHZhcmlhYmxlcyB9KSA9PiBmZXRjaFVzZXIodmFyaWFibGVzLmlkKSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByPFxuICBUUHJlcGFyZWQgZXh0ZW5kcyBQcmVwYXJlUmVzdWx0LFxuICBUVmFyaWFibGVzIGV4dGVuZHMgUGFyYW1EYXRhID0gUGFyYW1EYXRhLFxuICBUUXVlcnkgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuPihcbiAgcm91dGU6IFJvdXRlPFRQcmVwYXJlZCwgVFZhcmlhYmxlcywgVFF1ZXJ5Pixcbik6IFJvdXRlPFRQcmVwYXJlZCwgVFZhcmlhYmxlcywgVFF1ZXJ5PiB7XG4gIHJldHVybiByb3V0ZTtcbn1cbiJdfQ==
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUJBLE1BQU0sVUFBVSxlQUFlLENBQzdCLE1BQTRCLEVBQzVCLFFBQWtCO0lBRWxCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7UUFDM0IsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckQsSUFBSSxLQUFLLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDcEIsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7WUFDL0IsT0FBTztnQkFDTCxLQUFLO2dCQUNMLEtBQUs7Z0JBQ0wsSUFBSTtnQkFDSixNQUFNO2FBQ1AsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBVUQsTUFBTSxVQUFVLFlBQVksQ0FDMUIsS0FBeUMsRUFDekMsS0FBK0I7SUFNL0IsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbEIsT0FBTztZQUNMLEtBQUs7WUFDTCxNQUFNLEVBQUUsRUFBRTtTQUNYLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztJQUVqQyxNQUFNLE1BQU0sR0FBeUIsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFDcEUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQztRQUV0RCxJQUFJLFNBQWtCLENBQUM7UUFDdkIsSUFBSSxRQUFtQyxDQUFDO1FBRXhDLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3BCLFFBQVEsR0FBRyxPQUFPLENBQUM7Z0JBQ2pCLEtBQUs7Z0JBQ0wsWUFBWTtnQkFDWixZQUFZO2dCQUVaLFNBQVMsRUFBRSxFQUFFLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDOUIsS0FBSyxFQUFFLEtBQUssSUFBSSxFQUFFO2FBQ25CLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLFlBQVksSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixTQUFTLEdBQUcsWUFBWSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQy9CLElBQUksU0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUV0QixZQUFZLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDdEIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPO1lBQ0wsSUFBSTtZQUNKLFFBQVE7WUFDUixVQUFVLEVBQUUsWUFBWSxDQUFDLFVBQVUsSUFBSSxJQUFJO1lBQzNDLE1BQU07WUFDTixZQUFZO1NBQ2IsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTztRQUNMLEtBQUs7UUFDTCxNQUFNO0tBQ1AsQ0FBQztBQUNKLENBQUM7QUF3QkQsTUFBTSxVQUFVLENBQUMsQ0FNZixLQUkrRDtJQU0vRCxPQUFPLEtBSU4sQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcblxuaW1wb3J0IHR5cGUge1xuICBQcmVwYXJlUmVzdWx0LFxuICBQcmVwYXJlZE1hdGNoLFxuICBQcmVwYXJlZE1hdGNoUm91dGUsXG4gIFJvdXRlLFxuICBSb3V0ZXJNYXRjaGVkUm91dGUsXG4gIFF1ZXJ5U2NoZW1hLFxuICBJbmZlclF1ZXJ5LFxufSBmcm9tICcuL3R5cGVzLmpzJztcblxuaW1wb3J0IHR5cGUgeyBGbGF0Um91dGUgfSBmcm9tICcuL2J1aWxkZXIuanMnO1xuXG4vKipcbiAqIEZpbmRzIHRoZSBmaXJzdCByb3V0ZSB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuIGxvY2F0aW9uLlxuICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgcm91dGVzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBtYXRjaCBmb3VuZC5cbiAqXG4gKiBAdGVtcGxhdGUgVFBhcmFtcyAtIFJvdXRlIHBhcmFtZXRlciB0eXBlcyBleHRyYWN0ZWQgZnJvbSB0aGUgVVJMIHBhdGhcbiAqIEBwYXJhbSByb3V0ZXMgLSBBcnJheSBvZiBmbGF0IHJvdXRlcyB0byBzZWFyY2ggdGhyb3VnaFxuICogQHBhcmFtIGxvY2F0aW9uIC0gQnJvd3NlciBsb2NhdGlvbiBvYmplY3QgY29udGFpbmluZyBwYXRobmFtZSB0byBtYXRjaFxuICogQHJldHVybnMgVGhlIG1hdGNoZWQgcm91dGUgd2l0aCBleHRyYWN0ZWQgcGFyYW1ldGVycywgb3IgbnVsbCBpZiBubyBtYXRjaFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWF0Y2hlZFJvdXRlPFRQYXJhbXMgZXh0ZW5kcyBQYXJhbURhdGE+KFxuICByb3V0ZXM6IEZsYXRSb3V0ZTxUUGFyYW1zPltdLFxuICBsb2NhdGlvbjogTG9jYXRpb24sXG4pOiBSb3V0ZXJNYXRjaGVkUm91dGU8VFBhcmFtcz4gfCBudWxsIHtcbiAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICBjb25zdCBtYXRjaCA9IHJvdXRlLm1hdGNoRnVuY3Rpb24obG9jYXRpb24ucGF0aG5hbWUpO1xuICAgIGlmIChtYXRjaCAhPT0gZmFsc2UpIHtcbiAgICAgIGNvbnN0IHsgcGF0aCwgcGFyYW1zIH0gPSBtYXRjaDtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hdGNoLFxuICAgICAgICByb3V0ZSxcbiAgICAgICAgcGF0aCxcbiAgICAgICAgcGFyYW1zLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBQcmVwYXJlcyBhIG1hdGNoZWQgcm91dGUgZm9yIHJlbmRlcmluZyBieSBsb2FkaW5nIGNvbXBvbmVudHMgYW5kIGV4ZWN1dGluZyBwcmVwYXJlIGZ1bmN0aW9ucy5cbiAqIFRoaXMgZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSByb3V0ZSBoaWVyYXJjaHkgYW5kIGxvYWRzIGFueSByZXF1aXJlZCBkYXRhIG9yIGNvbXBvbmVudHMuXG4gKlxuICogQHRlbXBsYXRlIFRQYXJhbXMgLSBSb3V0ZSBwYXJhbWV0ZXIgdHlwZXMgZXh0cmFjdGVkIGZyb20gdGhlIFVSTCBwYXRoXG4gKiBAcGFyYW0gbWF0Y2ggLSBUaGUgbWF0Y2hlZCByb3V0ZSB0byBwcmVwYXJlLCBvciBudWxsIGlmIG5vIHJvdXRlIG1hdGNoZWRcbiAqIEByZXR1cm5zIFByZXBhcmVkIG1hdGNoIHdpdGggbG9hZGVkIGNvbXBvbmVudHMgYW5kIGRhdGEgcmVhZHkgZm9yIHJlbmRlcmluZ1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlcGFyZU1hdGNoPFRQYXJhbXMgZXh0ZW5kcyBQYXJhbURhdGE+KFxuICBtYXRjaDogUm91dGVyTWF0Y2hlZFJvdXRlPFRQYXJhbXM+IHwgbnVsbCxcbiAgcXVlcnk/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFByZXBhcmVkTWF0Y2g8VFBhcmFtcz4ge1xuICAvLyBOT1RFOiBSdW50aW1lIHJldGFpbnMgYSBnZW5lcmljIFByZXBhcmVkUmVzdWx0OyB0eXBlLWxldmVsIG5hcnJvd2luZyBpcyBhY2hpZXZlZCBleHRlcm5hbGx5XG4gIC8vIHRocm91Z2ggdGhlIHJvdXRlIHVuaW9uIGFuZCBQcmVwYXJlZEFjY2VzcyBoZWxwZXJzLiBXZSBpbnRlbnRpb25hbGx5IGF2b2lkIGluamVjdGluZ1xuICAvLyBnZW5lcmljIHBhcmFtZXRlcnMgaGVyZSB0byBrZWVwIHJ1bnRpbWUgbGlnaHR3ZWlnaHQgd2hpbGUgc3RpbGwgZW5hYmxpbmcgY29tcGlsZS10aW1lXG4gIC8vIGRpc2NyaW1pbmF0aW9uIGluIHVzZXJsYW5kIHZpYSBjcmVhdGVSb3V0ZXIgZ2VuZXJpY3MuXG4gIGlmIChtYXRjaCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGNoLFxuICAgICAgcm91dGVzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3QgbWF0Y2hlZFJvdXRlID0gbWF0Y2gucm91dGU7XG5cbiAgY29uc3Qgcm91dGVzOiBQcmVwYXJlZE1hdGNoUm91dGVbXSA9IG1hdGNoLnJvdXRlLnJvdXRlcy5tYXAoKHJvdXRlKSA9PiB7XG4gICAgY29uc3QgeyBwYXRoLCBwcmVwYXJlLCByZXNvdXJjZVBhZ2UsIHJlbmRlciB9ID0gcm91dGU7XG5cbiAgICBsZXQgQ29tcG9uZW50OiB1bmtub3duO1xuICAgIGxldCBwcmVwYXJlZDogUHJlcGFyZVJlc3VsdCB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChwcmVwYXJlICE9IG51bGwpIHtcbiAgICAgIHByZXBhcmVkID0gcHJlcGFyZSh7XG4gICAgICAgIG1hdGNoLFxuICAgICAgICBtYXRjaGVkUm91dGUsXG4gICAgICAgIHJlc291cmNlUGFnZSxcbiAgICAgICAgLy8gRml4IE9iamVjdC5jcmVhdGUobnVsbCkgaXNzdWUgaW4gcGF0aC10by1yZWdleHBcbiAgICAgICAgdmFyaWFibGVzOiB7IC4uLm1hdGNoLnBhcmFtcyB9LFxuICAgICAgICBxdWVyeTogcXVlcnkgPz8ge30sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzb3VyY2VQYWdlICE9IG51bGwpIHtcbiAgICAgIENvbXBvbmVudCA9IHJlc291cmNlUGFnZS5nZXQoKTtcbiAgICAgIGlmIChDb21wb25lbnQgPT0gbnVsbCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJlc291cmNlUGFnZS5sb2FkKCk7IC8vIGVhZ2VybHkgbG9hZFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aCxcbiAgICAgIHByZXBhcmVkLFxuICAgICAgcmVkaXJlY3RUbzogbWF0Y2hlZFJvdXRlLnJlZGlyZWN0VG8gPz8gbnVsbCxcbiAgICAgIHJlbmRlcixcbiAgICAgIHJlc291cmNlUGFnZSxcbiAgICB9O1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIG1hdGNoLFxuICAgIHJvdXRlcyxcbiAgfTtcbn1cblxuLyoqXG4gKiBUeXBlIGhlbHBlciBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgc3Ryb25nbHktdHlwZWQgcm91dGUgZGVmaW5pdGlvbnMuXG4gKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgbW9kaWZ5IHRoZSByb3V0ZSwgaXQganVzdCBwcm92aWRlcyBUeXBlU2NyaXB0IHR5cGUgaW5mZXJlbmNlLlxuICpcbiAqIEB0ZW1wbGF0ZSBUUHJlcGFyZWQgLSBUaGUgdHlwZSBvZiBwcmVwYXJlZCBkYXRhIHJldHVybmVkIGJ5IHRoZSByb3V0ZSdzIHByZXBhcmUgZnVuY3Rpb25cbiAqIEB0ZW1wbGF0ZSBUVmFyaWFibGVzIC0gUm91dGUgcGFyYW1ldGVyIHR5cGVzIGV4dHJhY3RlZCBmcm9tIHRoZSBVUkwgcGF0aFxuICogQHBhcmFtIHJvdXRlIC0gVGhlIHJvdXRlIGNvbmZpZ3VyYXRpb24gdG8gdHlwZVxuICogQHJldHVybnMgVGhlIHNhbWUgcm91dGUgd2l0aCBwcm9wZXIgVHlwZVNjcmlwdCB0eXBlc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB1c2VyUm91dGUgPSByPHsgdXNlcjogVXNlciB9LCB7IGlkOiBzdHJpbmcgfT4oe1xuICogICBwYXRoOiAnL3VzZXJzLzppZCcsXG4gKiAgIHByZXBhcmU6ICh7IHZhcmlhYmxlcyB9KSA9PiBmZXRjaFVzZXIodmFyaWFibGVzLmlkKSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbi8qKlxuICogUm91dGUgaGVscGVyIHdpdGggY29uZGl0aW9uYWwgcXVlcnkgc2NoZW1hIGluZmVyZW5jZS4gSWYgYSBgcXVlcnlgIHNjaGVtYSBvYmplY3QgaXMgcHJlc2VudCxcbiAqIHRoZSByZXN1bHRpbmcgcm91dGUncyB0aGlyZCBnZW5lcmljIHBhcmFtZXRlciBpcyBpbmZlcnJlZCBmcm9tIGRlc2NyaXB0b3IgbWFwOyBvdGhlcndpc2UgaXRcbiAqIGZhbGxzIGJhY2sgdG8gdGhlIHByb3ZpZGVkIGdlbmVyaWMgKGRlZmF1bHQgUmVjb3JkPHN0cmluZyx1bmtub3duPikuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByPFxuICBUUHJlcGFyZWQgZXh0ZW5kcyBQcmVwYXJlUmVzdWx0ID0gUHJlcGFyZVJlc3VsdCxcbiAgVFZhcmlhYmxlcyBleHRlbmRzIFBhcmFtRGF0YSA9IFBhcmFtRGF0YSxcbiAgVFF1ZXJ5IGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgVFNjaGVtYSBleHRlbmRzIFF1ZXJ5U2NoZW1hIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuPihcbiAgcm91dGU6IChUU2NoZW1hIGV4dGVuZHMgUXVlcnlTY2hlbWFcbiAgICA/IE9taXQ8Um91dGU8VFByZXBhcmVkLCBUVmFyaWFibGVzLCBJbmZlclF1ZXJ5PFRTY2hlbWE+PiwgJ3F1ZXJ5Jz4gJiB7XG4gICAgICAgIHF1ZXJ5OiBUU2NoZW1hO1xuICAgICAgfVxuICAgIDogUm91dGU8VFByZXBhcmVkLCBUVmFyaWFibGVzLCBUUXVlcnk+KSAmIHsgcXVlcnk/OiBUU2NoZW1hIH0sXG4pOiBSb3V0ZTxcbiAgVFByZXBhcmVkLFxuICBUVmFyaWFibGVzLFxuICBUU2NoZW1hIGV4dGVuZHMgUXVlcnlTY2hlbWEgPyBJbmZlclF1ZXJ5PFRTY2hlbWE+IDogVFF1ZXJ5XG4+IHtcbiAgcmV0dXJuIHJvdXRlIGFzIHVua25vd24gYXMgUm91dGU8XG4gICAgVFByZXBhcmVkLFxuICAgIFRWYXJpYWJsZXMsXG4gICAgVFNjaGVtYSBleHRlbmRzIFF1ZXJ5U2NoZW1hID8gSW5mZXJRdWVyeTxUU2NoZW1hPiA6IFRRdWVyeVxuICA+O1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=routes-inference.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes-inference.test-d.d.ts","sourceRoot":"","sources":["../../../src/type-tests/routes-inference.test-d.ts"],"names":[],"mappings":""}