@plumile/router 0.2.7 → 0.2.9
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 +18 -0
- package/lib/esm/routing/RouteRedirect.d.ts +9 -0
- package/lib/esm/routing/RouteRedirect.d.ts.map +1 -0
- package/lib/esm/routing/RouteRedirect.js +37 -0
- package/lib/esm/routing/createRouter.d.ts.map +1 -1
- package/lib/esm/routing/createRouter.js +39 -15
- package/lib/esm/routing/index.d.ts +1 -0
- package/lib/esm/routing/index.d.ts.map +1 -1
- package/lib/esm/routing/index.js +2 -1
- package/lib/tsconfig.esm.tsbuildinfo +1 -1
- package/lib/types/routing/RouteRedirect.d.ts +9 -0
- package/lib/types/routing/RouteRedirect.d.ts.map +1 -0
- package/lib/types/routing/createRouter.d.ts.map +1 -1
- package/lib/types/routing/index.d.ts +1 -0
- package/lib/types/routing/index.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -290,6 +290,24 @@ In both cases:
|
|
|
290
290
|
- the route component receives `prepared` only after resolution;
|
|
291
291
|
- no `Promise` is ever exposed as `prepared` to userland consumers.
|
|
292
292
|
|
|
293
|
+
#### `RouteRedirect`
|
|
294
|
+
|
|
295
|
+
For browser-only decisions based on reactive page data, render
|
|
296
|
+
`<RouteRedirect pathname="/login" preparedSegment={preparedSegment} fallback={pendingUi} />`.
|
|
297
|
+
Import it from `@plumile/router` or `@plumile/router/routing/RouteRedirect.js`.
|
|
298
|
+
Pass the exact prepared segment supplied to the page or render callback. The
|
|
299
|
+
component replaces history in an effect, clears the source query, filters and
|
|
300
|
+
hash, and ignores stale displayed segments and superseded navigation. Its
|
|
301
|
+
fallback remains visible until the destination commits. Strict Mode does not
|
|
302
|
+
repeat the replacement.
|
|
303
|
+
|
|
304
|
+
This component does not perform an HTTP redirect during server rendering.
|
|
305
|
+
Universal redirects use declarative routes or throw `HttpRedirect` from
|
|
306
|
+
`prepare`; exceptions thrown from `render` propagate to React error boundaries.
|
|
307
|
+
Pending preparation redirects are ignored after navigation or router cleanup.
|
|
308
|
+
A rejected preload redirects only when its destination is activated; hovering
|
|
309
|
+
alone never redirects, and ordinary preparation errors remain errors.
|
|
310
|
+
|
|
293
311
|
#### `Redirect`
|
|
294
312
|
|
|
295
313
|
Redirect configuration.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { PreparedRouteSegment } from '../types.js';
|
|
3
|
+
export type RouteRedirectProps = {
|
|
4
|
+
pathname: string;
|
|
5
|
+
preparedSegment: Pick<PreparedRouteSegment, 'segmentKey'>;
|
|
6
|
+
fallback?: ReactNode;
|
|
7
|
+
};
|
|
8
|
+
export default function RouteRedirect({ pathname, preparedSegment, fallback, }: RouteRedirectProps): ReactNode;
|
|
9
|
+
//# sourceMappingURL=RouteRedirect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouteRedirect.d.ts","sourceRoot":"","sources":["../../../src/routing/RouteRedirect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,MAAM,kBAAkB,GAAG;IAE/B,QAAQ,EAAE,MAAM,CAAC;IAEjB,eAAe,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;IAE1D,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAGF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,QAAQ,EACR,eAAe,EACf,QAAe,GAChB,EAAE,kBAAkB,GAAG,SAAS,CAyChC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useContext, useEffect } from 'react';
|
|
2
|
+
import RoutingContext from './RoutingContext.js';
|
|
3
|
+
export default function RouteRedirect({ pathname, preparedSegment, fallback = null, }) {
|
|
4
|
+
const router = useContext(RoutingContext);
|
|
5
|
+
const entry = router?.get();
|
|
6
|
+
useEffect(() => {
|
|
7
|
+
if (router == null || entry == null || router.get() !== entry) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (!entry.preparedMatch.segments.some((segment) => {
|
|
11
|
+
return segment === preparedSegment;
|
|
12
|
+
})) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const { location } = router.history;
|
|
16
|
+
if (router.history.navigation.key !== entry.navigation.key ||
|
|
17
|
+
location.pathname !== entry.location.pathname ||
|
|
18
|
+
location.search !== entry.location.search ||
|
|
19
|
+
location.hash !== entry.location.hash) {
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (location.pathname === pathname &&
|
|
23
|
+
location.search === '' &&
|
|
24
|
+
location.hash === '') {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
router.navigate({
|
|
28
|
+
pathname,
|
|
29
|
+
query: {},
|
|
30
|
+
filters: {},
|
|
31
|
+
hash: '',
|
|
32
|
+
replace: true,
|
|
33
|
+
});
|
|
34
|
+
}, [entry, pathname, preparedSegment, router]);
|
|
35
|
+
return fallback;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUm91dGVSZWRpcmVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yb3V0aW5nL1JvdXRlUmVkaXJlY3QudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFrQixNQUFNLE9BQU8sQ0FBQztBQUc5RCxPQUFPLGNBQWMsTUFBTSxxQkFBcUIsQ0FBQztBQVlqRCxNQUFNLENBQUMsT0FBTyxVQUFVLGFBQWEsQ0FBQyxFQUNwQyxRQUFRLEVBQ1IsZUFBZSxFQUNmLFFBQVEsR0FBRyxJQUFJLEdBQ0k7SUFDbkIsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQzFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUU1QixTQUFTLENBQUMsR0FBRyxFQUFFO1FBQ2IsSUFBSSxNQUFNLElBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzlELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFDRSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdDLE9BQU8sT0FBTyxLQUFLLGVBQWUsQ0FBQztRQUNyQyxDQUFDLENBQUMsRUFDRixDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNwQyxJQUNFLE1BQU0sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUc7WUFDdEQsUUFBUSxDQUFDLFFBQVEsS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVE7WUFDN0MsUUFBUSxDQUFDLE1BQU0sS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU07WUFDekMsUUFBUSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFDckMsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFDRSxRQUFRLENBQUMsUUFBUSxLQUFLLFFBQVE7WUFDOUIsUUFBUSxDQUFDLE1BQU0sS0FBSyxFQUFFO1lBQ3RCLFFBQVEsQ0FBQyxJQUFJLEtBQUssRUFBRSxFQUNwQixDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLENBQUMsUUFBUSxDQUFDO1lBQ2QsUUFBUTtZQUNSLEtBQUssRUFBRSxFQUFFO1lBQ1QsT0FBTyxFQUFFLEVBQUU7WUFDWCxJQUFJLEVBQUUsRUFBRTtZQUNSLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUUvQyxPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB0eXBlIFJlYWN0Tm9kZSB9IGZyb20gJ3JlYWN0JztcblxuaW1wb3J0IHR5cGUgeyBQcmVwYXJlZFJvdXRlU2VnbWVudCB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCBSb3V0aW5nQ29udGV4dCBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcblxuZXhwb3J0IHR5cGUgUm91dGVSZWRpcmVjdFByb3BzID0ge1xuICAvKiogRGVzdGluYXRpb24gcGF0aG5hbWUuIFRoZSBzb3VyY2UgcXVlcnksIGZpbHRlcnMgYW5kIGhhc2ggYXJlIGNsZWFyZWQuICovXG4gIHBhdGhuYW1lOiBzdHJpbmc7XG4gIC8qKiBUaGUgZXhhY3QgcHJlcGFyZWQgc2VnbWVudCB3aG9zZSByZW5kZXJlZCBkZWNpc2lvbiByZXF1ZXN0cyBuYXZpZ2F0aW9uLiAqL1xuICBwcmVwYXJlZFNlZ21lbnQ6IFBpY2s8UHJlcGFyZWRSb3V0ZVNlZ21lbnQsICdzZWdtZW50S2V5Jz47XG4gIC8qKiBDb250ZW50IGRpc3BsYXllZCB1bnRpbCB0aGUgZGVzdGluYXRpb24gY29tbWl0cy4gKi9cbiAgZmFsbGJhY2s/OiBSZWFjdE5vZGU7XG59O1xuXG4vKiogUmVwbGFjZXMgYSBjbGllbnQgcm91dGUgb25seSB3aGlsZSB0aGUgcmVxdWVzdGluZyBzZWdtZW50IHJlbWFpbnMgYWN0aXZlLiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gUm91dGVSZWRpcmVjdCh7XG4gIHBhdGhuYW1lLFxuICBwcmVwYXJlZFNlZ21lbnQsXG4gIGZhbGxiYWNrID0gbnVsbCxcbn06IFJvdXRlUmVkaXJlY3RQcm9wcyk6IFJlYWN0Tm9kZSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZUNvbnRleHQoUm91dGluZ0NvbnRleHQpO1xuICBjb25zdCBlbnRyeSA9IHJvdXRlcj8uZ2V0KCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocm91dGVyID09IG51bGwgfHwgZW50cnkgPT0gbnVsbCB8fCByb3V0ZXIuZ2V0KCkgIT09IGVudHJ5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgICFlbnRyeS5wcmVwYXJlZE1hdGNoLnNlZ21lbnRzLnNvbWUoKHNlZ21lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnQgPT09IHByZXBhcmVkU2VnbWVudDtcbiAgICAgIH0pXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHsgbG9jYXRpb24gfSA9IHJvdXRlci5oaXN0b3J5O1xuICAgIGlmIChcbiAgICAgIHJvdXRlci5oaXN0b3J5Lm5hdmlnYXRpb24ua2V5ICE9PSBlbnRyeS5uYXZpZ2F0aW9uLmtleSB8fFxuICAgICAgbG9jYXRpb24ucGF0aG5hbWUgIT09IGVudHJ5LmxvY2F0aW9uLnBhdGhuYW1lIHx8XG4gICAgICBsb2NhdGlvbi5zZWFyY2ggIT09IGVudHJ5LmxvY2F0aW9uLnNlYXJjaCB8fFxuICAgICAgbG9jYXRpb24uaGFzaCAhPT0gZW50cnkubG9jYXRpb24uaGFzaFxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBsb2NhdGlvbi5wYXRobmFtZSA9PT0gcGF0aG5hbWUgJiZcbiAgICAgIGxvY2F0aW9uLnNlYXJjaCA9PT0gJycgJiZcbiAgICAgIGxvY2F0aW9uLmhhc2ggPT09ICcnXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJvdXRlci5uYXZpZ2F0ZSh7XG4gICAgICBwYXRobmFtZSxcbiAgICAgIHF1ZXJ5OiB7fSxcbiAgICAgIGZpbHRlcnM6IHt9LFxuICAgICAgaGFzaDogJycsXG4gICAgICByZXBsYWNlOiB0cnVlLFxuICAgIH0pO1xuICB9LCBbZW50cnksIHBhdGhuYW1lLCBwcmVwYXJlZFNlZ21lbnQsIHJvdXRlcl0pO1xuXG4gIHJldHVybiBmYWxsYmFjaztcbn1cbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAOtB,KAAK,uBAAuB,EAG5B,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAOtB,KAAK,uBAAuB,EAG5B,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EAMxB,MAAM,uCAAuC,CAAC;AAa/C,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kCAAkC,CAAC;AA2C1C,MAAM,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,SAAS,SAAS,EAAE,IAAI;IAEhE,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,OAAO,EAAE,kBAAkB,CACzB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,CACT,GACC,cAAc,CAAC,CAAC,CAAC,GAAG;QAClB,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;KAChC,CAAC;CACL,CAAC;AAwCF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,IAAI;IAE1C,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAExC,OAAO,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEtC,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC;IAE5B,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC7C,CAAC;AAy0CF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAQ,GAAG,OAAO,EAClB,CAAC,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,EAEnC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,EAC5B,OAAO,GAAE,mBAAmB,CAAC,QAAQ,CAAM,GAC1C,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAajC"}
|
|
@@ -21,9 +21,7 @@ function shouldPrepareOnNavigation(input) {
|
|
|
21
21
|
return route.prepare != null && route.prepareSearchBehavior !== 'path';
|
|
22
22
|
});
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
const history = new BrowserHistory();
|
|
26
|
-
const registry = createInstrumentationRegistry(options.instrumentations ?? []);
|
|
24
|
+
function initializeRouter(routes, options, history, registry) {
|
|
27
25
|
let staticContext;
|
|
28
26
|
if (options.getContext == null) {
|
|
29
27
|
if (typeof options.context === 'function') {
|
|
@@ -313,6 +311,7 @@ export default function createRouter(routes, options = {}) {
|
|
|
313
311
|
trigger: 'redirect',
|
|
314
312
|
redirectStatus: status,
|
|
315
313
|
});
|
|
314
|
+
activeEntryId += 1;
|
|
316
315
|
history.set({
|
|
317
316
|
...target,
|
|
318
317
|
debugContext: {
|
|
@@ -544,6 +543,15 @@ export default function createRouter(routes, options = {}) {
|
|
|
544
543
|
refreshActiveLoadState(entryId, source);
|
|
545
544
|
}, (error) => {
|
|
546
545
|
if (error instanceof HttpRedirect) {
|
|
546
|
+
const location = normalizeLocation(history.location);
|
|
547
|
+
if (routerDisposed ||
|
|
548
|
+
entryId !== activeEntryId ||
|
|
549
|
+
history.navigation.key !== entry.navigation.key ||
|
|
550
|
+
location.pathname !== entry.location.pathname ||
|
|
551
|
+
location.search !== entry.location.search ||
|
|
552
|
+
location.hash !== entry.location.hash) {
|
|
553
|
+
return;
|
|
554
|
+
}
|
|
547
555
|
replaceWithRedirect(error.redirectTo, error.statusCode, source);
|
|
548
556
|
return;
|
|
549
557
|
}
|
|
@@ -681,19 +689,19 @@ export default function createRouter(routes, options = {}) {
|
|
|
681
689
|
replaceWithRedirect(error.redirectTo, error.statusCode, origin);
|
|
682
690
|
return;
|
|
683
691
|
}
|
|
684
|
-
const prepareRedirect = nextPreparedMatch.segments
|
|
685
|
-
.map((segment) => {
|
|
686
|
-
return segment.preparedResource?.getError();
|
|
687
|
-
})
|
|
688
|
-
.find((error) => {
|
|
689
|
-
return error instanceof HttpRedirect;
|
|
690
|
-
});
|
|
691
|
-
if (prepareRedirect != null) {
|
|
692
|
-
replaceWithRedirect(prepareRedirect.redirectTo, prepareRedirect.statusCode, origin);
|
|
693
|
-
return;
|
|
694
|
-
}
|
|
695
692
|
}
|
|
696
693
|
}
|
|
694
|
+
const prepareRedirect = nextPreparedMatch.segments
|
|
695
|
+
.map((segment) => {
|
|
696
|
+
return segment.preparedResource?.getError();
|
|
697
|
+
})
|
|
698
|
+
.find((error) => {
|
|
699
|
+
return error instanceof HttpRedirect;
|
|
700
|
+
});
|
|
701
|
+
if (prepareRedirect != null) {
|
|
702
|
+
replaceWithRedirect(prepareRedirect.redirectTo, prepareRedirect.statusCode, origin);
|
|
703
|
+
return;
|
|
704
|
+
}
|
|
697
705
|
loadStateVersion += 1;
|
|
698
706
|
const nextEntry = withLoadState({
|
|
699
707
|
forceRerender: forceRerender || (samePathname && !sameSearch),
|
|
@@ -900,6 +908,9 @@ export default function createRouter(routes, options = {}) {
|
|
|
900
908
|
return disposeCallback;
|
|
901
909
|
},
|
|
902
910
|
navigate({ pathname, query, filters: navFilters, hash, replace, }) {
|
|
911
|
+
if (routerDisposed) {
|
|
912
|
+
return;
|
|
913
|
+
}
|
|
903
914
|
const current = currentEntry;
|
|
904
915
|
let targetPathname = pathname;
|
|
905
916
|
targetPathname ??= current.location.pathname;
|
|
@@ -966,4 +977,17 @@ export default function createRouter(routes, options = {}) {
|
|
|
966
977
|
}
|
|
967
978
|
return { context, cleanup };
|
|
968
979
|
}
|
|
969
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sbUJBQW1CLE1BQU0saUNBQWlDLENBQUM7QUFvQmxFLE9BQU8sRUFDTCw2QkFBNkIsR0FNOUIsTUFBTSx1Q0FBdUMsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsd0JBQXdCLEdBR3pCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsd0JBQXdCLEdBQ3pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxnQkFBZ0IsR0FHakIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQW9CN0QsU0FBUyx5QkFBeUIsQ0FBQyxLQUlsQztJQUNDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0RCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxL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Q0FBQztnQkFDckIsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUU7b0JBQy9DLE9BQU8sRUFBRSxjQUFjO2lCQUN4QixDQUFDLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQztvQkFDVixHQUFHLFdBQVc7b0JBQ2QsWUFBWTtpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sZ0JBQWdCLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUU7b0JBQzVDLE9BQU8sRUFBRSxjQUFjO2lCQUN4QixDQUFDLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLElBQUksQ0FBQztvQkFDWCxHQUFHLFdBQVc7b0JBQ2QsWUFBWTtpQkFDYixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELFdBQVc7UUFDWCxtQkFBbUI7S0FDMEIsQ0FBQztJQUdoRCxTQUFTLE9BQU87UUFDZCxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBQ0QsY0FBYyxHQUFHLElBQUksQ0FBQztRQUN0QixjQUFjLEVBQUUsQ0FBQztRQUNqQixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDbEIsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3BCLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBR0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQztBQUM5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYnVpbGRSb3V0ZXMgfSBmcm9tICcuLi9idWlsZGVyLmpzJztcbmltcG9ydCB7IEJyb3dzZXJIaXN0b3J5IH0gZnJvbSAnLi4vaGlzdG9yeS9pbmRleC5qcyc7XG5pbXBvcnQgeyBnZXRNYXRjaGVkUm91dGUsIHByZXBhcmVNYXRjaCB9IGZyb20gJy4uL3Rvb2xzLmpzJztcbmltcG9ydCBidWlsZENvbWJpbmVkU2VhcmNoIGZyb20gJy4uL3Rvb2xzL2J1aWxkQ29tYmluZWRTZWFyY2guanMnO1xuaW1wb3J0IHR5cGUgeyBQYXJhbURhdGEgfSBmcm9tICdwYXRoLXRvLXJlZ2V4cCc7XG5pbXBvcnQge1xuICB0eXBlIFJvdXRlRW50cnksXG4gIHR5cGUgUm91dGluZ0NvbnRleHRUeXBlLFxuICB0eXBlIFN1YnNjcmliZUNhbGxiYWNrLFxuICB0eXBlIFJvdXRlTm9kZSxcbiAgdHlwZSBQcmVwYXJlZEFjY2VzcyxcbiAgdHlwZSBOYXZpZ2F0ZU92ZXJsb2FkcyxcbiAgdHlwZSBQcmVsb2FkVGFyZ2V0LFxuICB0eXBlIFByZXBhcmVkUm91dGVTZWdtZW50U25hcHNob3QsXG4gIHR5cGUgUmF3UXVlcnksXG4gIHR5cGUgUm91dGVyTWF0Y2hlZFJvdXRlLFxuICB0eXBlIFJvdXRlckFjdGl2ZUxvYWRTdGF0ZSxcbiAgdHlwZSBSb3V0ZXJSZWRpcmVjdFN0YXR1cyxcbiAgdHlwZSBSb3V0ZXJIeWRyYXRpb25TbmFwc2hvdCxcbiAgdHlwZSBSb3V0ZXJKc29uVmFsdWUsXG4gIHR5cGUgVW5rbm93bkZpbHRlcnMsXG4gIHR5cGUgVW5rbm93blF1ZXJ5U2hhcGUsXG59IGZyb20gJy4uL3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUluc3RydW1lbnRhdGlvblJlZ2lzdHJ5LFxuICB0eXBlIEluc3RydW1lbnRhdGlvbkFQSSxcbiAgdHlwZSBSb3V0ZXJFbnRyeVNuYXBzaG90LFxuICB0eXBlIFJvdXRlckxvY2F0aW9uU25hcHNob3QsXG4gIHR5cGUgUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgdHlwZSBSb3V0ZXJFdmVudCxcbn0gZnJvbSAnLi4vaW5zdHJ1bWVudGF0aW9uL0luc3RydW1lbnRhdGlvbi5qcyc7XG5pbXBvcnQgdHlwZSB7IEhpc3RvcnlEZWJ1Z0NvbnRleHQgfSBmcm9tICcuLi9oaXN0b3J5L3R5cGVzLmpzJztcbmltcG9ydCB7XG4gIGlzUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgdHlwZSBSb3V0ZXJIaXN0b3J5QWN0aW9uVmFsdWUsXG4gIHR5cGUgUm91dGVyUHJlbG9hZE1vZGVWYWx1ZSxcbn0gZnJvbSAnLi4vdmFsdWVzLmpzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGVzdGluYXRpb25TZWFyY2gsXG4gIHJlc29sdmVSb3V0ZXJEZXN0aW5hdGlvbixcbn0gZnJvbSAnLi9kZXN0aW5hdGlvbi5qcyc7XG5pbXBvcnQgeyBjYWxjdWxhdGVMb2FkU3RhdGUgfSBmcm9tICcuLi9pbnRlcm5hbC9yb3V0ZXJMb2FkU3RhdGUuanMnO1xuaW1wb3J0IHsgSHR0cFJlZGlyZWN0IH0gZnJvbSAnLi4vZXJyb3JzL2luZGV4LmpzJztcbmltcG9ydCB7XG4gIHBhcnNlU2VhcmNoU3RhdGUsXG4gIHR5cGUgUGFyc2VkU2VhcmNoU3RhdGUsXG4gIHR5cGUgUm91dGVyUXVlcnlTY2hlbWEsXG59IGZyb20gJy4uL2ludGVybmFsL3JvdXRlclNlYXJjaFN0YXRlLmpzJztcbmltcG9ydCB7IGFzc2VydFJvdXRlckpzb25WYWx1ZSB9IGZyb20gJy4vcm91dGVySHlkcmF0aW9uLmpzJztcblxudHlwZSBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PiA9IFJvdXRlRW50cnk8XG4gIFBhcmFtRGF0YSxcbiAgUm91dGVyUXVlcnlTY2hlbWEsXG4gIFRDb250ZXh0XG4+O1xudHlwZSBQcmVwYXJlUXVlcnlJbnB1dCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xudHlwZSBQcmVsb2FkZWRQcmVwYXJlZE1hdGNoPFRDb250ZXh0PiA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIGNvbnRleHQ6IFRDb250ZXh0O1xuICByb3V0ZTogUm91dGVyTWF0Y2hlZFJvdXRlPFBhcmFtRGF0YT4gfCBudWxsO1xuICBwcmVwYXJlZE1hdGNoOiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PlsncHJlcGFyZWRNYXRjaCddO1xuICBxdWVyeVNjaGVtYTogUm91dGVyUXVlcnlTY2hlbWE7XG4gIHNlYXJjaDogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSByb3V0ZSBwcmVwYXJlIGNhbGxiYWNrIHNob3VsZCBydW4gYWZ0ZXIgbmF2aWdhdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkUHJlcGFyZU9uTmF2aWdhdGlvbihpbnB1dDoge1xuICBzYW1lUGF0aG5hbWU6IGJvb2xlYW47XG4gIHNhbWVTZWFyY2g6IGJvb2xlYW47XG4gIHJvdXRlOiBSb3V0ZXJNYXRjaGVkUm91dGU8UGFyYW1EYXRhPiB8IG51bGw7XG59KTogYm9vbGVhbiB7XG4gIGlmICghaW5wdXQuc2FtZVBhdGhuYW1lKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAoaW5wdXQuc2FtZVNlYXJjaCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJvdXRlU2VnbWVudHMgPSBpbnB1dC5yb3V0ZT8ucm91dGUucm91dGVzID8/IFtdO1xuICByZXR1cm4gcm91dGVTZWdtZW50cy5zb21lKChyb3V0ZSkgPT4ge1xuICAgIHJldHVybiByb3V0ZS5wcmVwYXJlICE9IG51bGwgJiYgcm91dGUucHJlcGFyZVNlYXJjaEJlaGF2aW9yICE9PSAncGF0aCc7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybiB0eXBlIGZvciB0aGUgY3JlYXRlUm91dGVyIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVSb3V0ZXJSZXR1cm48VENvbnRleHQsIFIgZXh0ZW5kcyBSb3V0ZU5vZGVbXT4gPSB7XG4gIC8qKiBGdW5jdGlvbiB0byBjbGVhbiB1cCByb3V0ZXIgbGlzdGVuZXJzIGFuZCByZXNvdXJjZXMgKi9cbiAgY2xlYW51cDogKCkgPT4gdm9pZDtcbiAgLyoqIFJvdXRlciBjb250ZXh0IG9iamVjdCBmb3IgdGhlIFJlYWN0IENvbnRleHQgUHJvdmlkZXIgKi9cbiAgY29udGV4dDogUm91dGluZ0NvbnRleHRUeXBlPFxuICAgIFBhcmFtRGF0YSxcbiAgICBSb3V0ZXJRdWVyeVNjaGVtYSxcbiAgICBVbmtub3duUXVlcnlTaGFwZSxcbiAgICBUQ29udGV4dFxuICA+ICZcbiAgICBQcmVwYXJlZEFjY2VzczxSPiAmIHtcbiAgICAgIG5hdmlnYXRlOiBOYXZpZ2F0ZU92ZXJsb2FkczxSPjtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29tcGxldGUgcm91dGVyIHN5c3RlbSBmcm9tIHJvdXRlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIFRoaXMgcm91dGVyIGlzIGJ1aWx0IGZyb20gdGhlIHNhbWUgcHJpbWl0aXZlcyBhcyByZWFjdC1yb3V0ZXIgYnV0IHdpdGggYWRkaXRpb25hbFxuICogZmVhdHVyZXMgZm9yIGRhdGEgcHJlbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmcuIEVhY2ggcm91dGUgY2FuIGNvbnRhaW4gYm90aCBhXG4gKiBDb21wb25lbnQgYW5kIGEgcHJlcGFyZSgpIGZ1bmN0aW9uIHRoYXQgY2FuIHByZWxvYWQgZGF0YSBmb3IgdGhlIGNvbXBvbmVudC5cbiAqXG4gKiBUaGUgcm91dGVyIHdhdGNoZXMgZm9yIGNoYW5nZXMgdG8gdGhlIGN1cnJlbnQgbG9jYXRpb24gdmlhIHRoZSBIVE1MNSBIaXN0b3J5IEFQSSxcbiAqIG1hcHMgdGhlIGxvY2F0aW9uIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdXRlIGVudHJ5LCBhbmQgdGhlbiBwcmVsb2FkcyB0aGUgY29kZVxuICogYW5kIGRhdGEgZm9yIHRoZSByb3V0ZSBiZWZvcmUgcmVuZGVyaW5nLlxuICpcbiAqIEBwYXJhbSByb3V0ZXMgLSBBcnJheSBvZiByb3V0ZSBjb25maWd1cmF0aW9uc1xuICogQHJldHVybnMgT2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJvdXRlciBjb250ZXh0IGFuZCBjbGVhbnVwIGZ1bmN0aW9uXG4gKlxuICBwcmVwYXJlZE1hdGNoOiBwcmVwYXJlTWF0Y2gocm91dGUsIHBhcnNlUmF3UXVlcnkoaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpKSxcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJvdXRlcyA9IFtcbiAqICAge1xuICogICAgIHBhdGg6ICcvdXNlcnMvOmlkJyxcbiAqICAgICByZXNvdXJjZVBhZ2U6IGdldFJlc291cmNlUGFnZSgnVXNlclByb2ZpbGUnLCAoKSA9PiBpbXBvcnQoJy4vVXNlclByb2ZpbGUnKSksXG4gKiAgICAgcHJlcGFyZTogKHsgdmFyaWFibGVzIH0pID0+ICh7IHVzZXJJZDogdmFyaWFibGVzLmlkIH0pXG4gKiAgIH1cbiAqIF07XG4gKlxuICogY29uc3QgeyBjb250ZXh0LCBjbGVhbnVwIH0gPSBjcmVhdGVSb3V0ZXIocm91dGVzKTtcbiAqXG4gKiAvLyBVc2UgaW4gUmVhY3QgYXBwXG4gKiA8Um91dGluZ0NvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICogICA8Um91dGVyUmVuZGVyZXIgZmFsbGJhY2s9ezxkaXY+TG9hZGluZy4uLjwvZGl2Pn0gLz5cbiAqIDwvUm91dGluZ0NvbnRleHQuUHJvdmlkZXI+XG4gKiBgYGBcbiAqL1xuLyoqXG4gKiBDcmVhdGUgYSByb3V0ZXIgKHR5cGVkIG92ZXJsb2FkKS4gV2hlbiBjYWxsZWQgd2l0aCBhIGNvbnN0IHR1cGxlIG9mIHJvdXRlcywgZ2VuZXJpY3MgYXJlIHByZXNlcnZlZC5cbiAqL1xuLyoqXG4gKiBPcHRpb25hbCBjb25maWd1cmF0aW9uIGZvciBgY3JlYXRlUm91dGVyYC5cbiAqL1xuZXhwb3J0IHR5cGUgQ3JlYXRlUm91dGVyT3B0aW9uczxUQ29udGV4dD4gPSB7XG4gIC8qKiBJbnN0cnVtZW50YXRpb25zIHRvIGF0dGFjaCB0byB0aGUgcm91dGVyIChEZXZUb29scyBicmlkZ2UsIGxvZ2dlciwgLi4uKS4gKi9cbiAgaW5zdHJ1bWVudGF0aW9ucz86IEluc3RydW1lbnRhdGlvbkFQSVtdO1xuICAvKiogU3RhdGljIGNvbnRleHQgdmFsdWUgb3IgbGF6eSBpbml0aWFsaXplciBmb3IgdGhlIHJvdXRlci4gKi9cbiAgY29udGV4dD86IFRDb250ZXh0IHwgKCgpID0+IFRDb250ZXh0KTtcbiAgLyoqIFJlc29sdmUgYSBmcmVzaCBjb250ZXh0IHZhbHVlIHBlciBuYXZpZ2F0aW9uLiAqL1xuICBnZXRDb250ZXh0PzogKCkgPT4gVENvbnRleHQ7XG4gIC8qKiBWZXJzaW9uZWQgcHJlcGFyZWQtZGF0YSBzbmFwc2hvdCBwcm9kdWNlZCBmb3IgdGhlIGluaXRpYWwgYnJvd3NlciBVUkwuICovXG4gIGh5ZHJhdGlvblNuYXBzaG90PzogUm91dGVySHlkcmF0aW9uU25hcHNob3Q7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSByb3V0ZXIgaW5zdGFuY2UgZnJvbSBhIHJvdXRlIGNvbmZpZ3VyYXRpb24uXG4gKlxuICogQHBhcmFtIHJvdXRlcyAtIFJvdXRlIGRlZmluaXRpb25zIHRvIHJlZ2lzdGVyLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25hbCBpbnN0cnVtZW50YXRpb24gc2V0dGluZ3MgdXNlZCBmb3IgZXhwb3NpbmcgZGV2ZWxvcG1lbnQgdG9vbGluZy5cbiAqIEBwYXJhbSBvcHRpb25zLmluc3RydW1lbnRhdGlvbnMgLSBJbnN0cnVtZW50YXRpb25zIGludm9rZWQgb24gcm91dGVyIGV2ZW50cyAoZGV2ZWxvcG1lbnQgb25seSkuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZVJvdXRlcjxcbiAgVENvbnRleHQgPSB1bmtub3duLFxuICBSIGV4dGVuZHMgUm91dGVOb2RlW10gPSBSb3V0ZU5vZGVbXSxcbj4oXG4gIHJvdXRlczogWy4uLlJdIHwgUm91dGVOb2RlW10sXG4gIG9wdGlvbnM6IENyZWF0ZVJvdXRlck9wdGlvbnM8VENvbnRleHQ+ID0ge30sXG4pOiBDcmVhdGVSb3V0ZXJSZXR1cm48VENvbnRleHQsIFI+IHtcbiAgLy8gSW5pdGlhbGl6ZSBicm93c2VyIGhpc3RvcnkgbWFuYWdlclxuICBjb25zdCBoaXN0b3J5ID0gbmV3IEJyb3dzZXJIaXN0b3J5KCk7XG5cbiAgY29uc3QgcmVnaXN0cnkgPSBjcmVhdGVJbnN0cnVtZW50YXRpb25SZWdpc3RyeShcbiAgICBvcHRpb25zLmluc3RydW1lbnRhdGlvbnMgPz8gW10sXG4gICk7XG5cbiAgbGV0IHN0YXRpY0NvbnRleHQ6IFRDb250ZXh0IHwgdW5kZWZpbmVkO1xuICBpZiAob3B0aW9ucy5nZXRDb250ZXh0ID09IG51bGwpIHtcbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuY29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgc3RhdGljQ29udGV4dCA9IChvcHRpb25zLmNvbnRleHQgYXMgKCkgPT4gVENvbnRleHQpKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpY0NvbnRleHQgPSBvcHRpb25zLmNvbnRleHQ7XG4gICAgfVxuICB9XG5cbiAgLyoqIFJlc29sdmUgdGhlIGNvbnRleHQgZm9yIHRoZSBjdXJyZW50IG5hdmlnYXRpb24uICovXG4gIGZ1bmN0aW9uIHJlc29sdmVDb250ZXh0KCk6IFRDb250ZXh0IHtcbiAgICBpZiAob3B0aW9ucy5nZXRDb250ZXh0ICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmdldENvbnRleHQoKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0YXRpY0NvbnRleHQgYXMgVENvbnRleHQ7XG4gIH1cblxuICBsZXQgcGVuZGluZ05hdmlnYXRpb25PcmlnaW46IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQ7XG4gIGxldCBsYXN0TmF2aWdhdGlvbk9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSA9ICdleHRlcm5hbCc7XG4gIGxldCBsYXN0UHJlbG9hZFNpZ25hdHVyZToge1xuICAgIGtleTogc3RyaW5nO1xuICAgIHRpbWVzdGFtcDogbnVtYmVyO1xuICB9IHwgbnVsbCA9IG51bGw7XG4gIGxldCByb3V0ZXJEaXNwb3NlZCA9IGZhbHNlO1xuICBsZXQgYWN0aXZlRW50cnlJZCA9IDA7XG4gIGxldCBsb2FkU3RhdGVWZXJzaW9uID0gMDtcbiAgY29uc3QgcHJlbG9hZGVkTWF0Y2hlcyA9IG5ldyBNYXA8c3RyaW5nLCBQcmVsb2FkZWRQcmVwYXJlZE1hdGNoPFRDb250ZXh0Pj4oKTtcblxuICAvKipcbiAgICogQ29udmVydHMgYSBwYXJ0aWFsIGxvY2F0aW9uIG9iamVjdCBpbnRvIGEgZnVsbCBsb2NhdGlvbiBzdHJ1Y3R1cmUgd2l0aCBzdHJpbmcgZmllbGRzLlxuICAgKi9cbiAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYXRpb24obG9jYXRpb246IHtcbiAgICBwYXRobmFtZTogc3RyaW5nO1xuICAgIHNlYXJjaD86IHN0cmluZztcbiAgICBoYXNoPzogc3RyaW5nO1xuICB9KTogeyBwYXRobmFtZTogc3RyaW5nOyBzZWFyY2g6IHN0cmluZzsgaGFzaDogc3RyaW5nIH0ge1xuICAgIGxldCBwYXRobmFtZVZhbHVlID0gJyc7XG4gICAgaWYgKHR5cGVvZiBsb2NhdGlvbi5wYXRobmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHBhdGhuYW1lVmFsdWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICB9XG4gICAgbGV0IHNlYXJjaFZhbHVlID0gJyc7XG4gICAgaWYgKHR5cGVvZiBsb2NhdGlvbi5zZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICBzZWFyY2hWYWx1ZSA9IGxvY2F0aW9uLnNlYXJjaDtcbiAgICB9XG4gICAgbGV0IGhhc2hWYWx1ZSA9ICcnO1xuICAgIGlmICh0eXBlb2YgbG9jYXRpb24uaGFzaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhhc2hWYWx1ZSA9IGxvY2F0aW9uLmhhc2g7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwYXRobmFtZTogcGF0aG5hbWVWYWx1ZSxcbiAgICAgIHNlYXJjaDogc2VhcmNoVmFsdWUsXG4gICAgICBoYXNoOiBoYXNoVmFsdWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhIHJvdXRlciBldmVudCB0byBldmVyeSByZWdpc3RlcmVkIGluc3RydW1lbnRhdGlvbi4gKi9cbiAgZnVuY3Rpb24gZW1pdEV2ZW50KGV2ZW50OiBSb3V0ZXJFdmVudCk6IHZvaWQge1xuICAgIGlmIChyb3V0ZXJEaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZWdpc3RyeS5lbWl0RXZlbnQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGVtcHRzIHRvIGNvZXJjZSBhbiBhcmJpdHJhcnkgc3RyaW5nIGludG8gYSBrbm93biBuYXZpZ2F0aW9uIHNvdXJjZS5cbiAgICovXG4gIGZ1bmN0aW9uIG1hcE9yaWdpbihyYXc/OiBzdHJpbmcpOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoaXNSb3V0ZXJOYXZpZ2F0aW9uU291cmNlKHJhdykpIHtcbiAgICAgIHJldHVybiByYXc7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB0aGUgbW9zdCBhcHByb3ByaWF0ZSBvcmlnaW4gZm9yIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gZXZlbnQuXG4gICAqL1xuICAvKiogUmVzb2x2ZXMgdGhlIG5hdmlnYXRpb24gc291cmNlIGNvbWJpbmluZyBoaXN0b3J5IGNvbnRleHQgYW5kIHBlbmRpbmcgaW50ZW50LiAqL1xuICBmdW5jdGlvbiByZXNvbHZlTmF2aWdhdGlvbk9yaWdpbihcbiAgICBjb250ZXh0PzogSGlzdG9yeURlYnVnQ29udGV4dCB8IG51bGwsXG4gICk6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2Uge1xuICAgIGNvbnN0IGZhbGxiYWNrT3JpZ2luID0gcGVuZGluZ05hdmlnYXRpb25PcmlnaW47XG4gICAgbGV0IG9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSB8IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IGNvbnRleHRPcmlnaW4gPSBjb250ZXh0Py5vcmlnaW47XG4gICAgaWYgKGNvbnRleHRPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgb3JpZ2luID0gbWFwT3JpZ2luKGNvbnRleHRPcmlnaW4pO1xuICAgIH1cblxuICAgIG9yaWdpbiA/Pz0gZmFsbGJhY2tPcmlnaW47XG4gICAgb3JpZ2luID8/PSAnZXh0ZXJuYWwnO1xuICAgIHBlbmRpbmdOYXZpZ2F0aW9uT3JpZ2luID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiBvcmlnaW47XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIGlubmVyLW1vc3QgbWF0Y2hlZCByb3V0ZSBwYXRoIGZyb20gYSByb3V0ZSBlbnRyeSB3aGVuIGF2YWlsYWJsZS5cbiAgICovXG4gIC8qKiBSZXR1cm5zIHRoZSBkZWVwZXN0IG1hdGNoZWQgcm91dGUgcGF0aCBmcm9tIGEgcm91dGUgZW50cnkgaWYgYXZhaWxhYmxlLiAqL1xuICBmdW5jdGlvbiByZWFkTWF0Y2hlZFJvdXRlUGF0aChcbiAgICBlbnRyeTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD4gfCB1bmRlZmluZWQsXG4gICk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGVudHJ5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IG1hdGNoZWRSb3V0ZSA9IGVudHJ5LnJvdXRlO1xuICAgIGlmIChtYXRjaGVkUm91dGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gbWF0Y2hlZFJvdXRlLnJvdXRlLnJvdXRlcztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZFJvdXRlcykpIHtcbiAgICAgIGNvbnN0IGxhc3RDaGlsZCA9IGNoaWxkUm91dGVzLmF0KC0xKTtcbiAgICAgIGlmIChsYXN0Q2hpbGQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBsYXN0Q2hpbGRSZWNvcmQgPSBsYXN0Q2hpbGQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgIGNvbnN0IGNoaWxkUGF0aCA9IGxhc3RDaGlsZFJlY29yZC5wYXRoO1xuICAgICAgICBpZiAodHlwZW9mIGNoaWxkUGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm4gY2hpbGRQYXRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJvb3RQYXRoID0gbWF0Y2hlZFJvdXRlLnJvdXRlLnBhdGg7XG4gICAgaWYgKHR5cGVvZiByb290UGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiByb290UGF0aDtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBkZWVwZXN0IGFjdGl2ZSBxdWVyeSBzY2hlbWEgZm9yIGEgbWF0Y2hlZCByb3V0ZS4gKi9cbiAgZnVuY3Rpb24gcmVhZEFjdGl2ZVF1ZXJ5U2NoZW1hKFxuICAgIHJvdXRlOiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0Plsncm91dGUnXSxcbiAgKTogUm91dGVyUXVlcnlTY2hlbWEge1xuICAgIHJldHVybiByb3V0ZT8ucm91dGUucm91dGVzLmF0KC0xKT8ucXVlcnlTY2hlbWE7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgSFRUUC1vcmllbnRlZCBzdGF0dXMgb2YgdGhlIGRlZXBlc3QgbWF0Y2hlZCByb3V0ZS4gKi9cbiAgZnVuY3Rpb24gcmVhZFJlbmRlclN0YXR1cyhcbiAgICByb3V0ZTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD5bJ3JvdXRlJ10sXG4gICk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+WydzdGF0dXMnXSB7XG4gICAgcmV0dXJuIHJvdXRlPy5yb3V0ZS5yb3V0ZXMuYXQoLTEpPy5zdGF0dXMgPz8gMjAwO1xuICB9XG5cbiAgLyoqIFJlYWRzIGEgcGFnZSBudW1iZXIgZnJvbSBlaXRoZXIgYHBhZ2VgIG9yIGBwYWdlLmVxYCBmaWx0ZXIgc2hhcGVzLiAqL1xuICBmdW5jdGlvbiByZWFkUGFnZVZhbHVlKGZpbHRlcnM/OiBVbmtub3duRmlsdGVycyk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGZpbHRlcnMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCByYXdQYWdlID0gZmlsdGVycy5wYWdlO1xuICAgIGlmICh0eXBlb2YgcmF3UGFnZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiByYXdQYWdlO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICByYXdQYWdlICE9IG51bGwgJiZcbiAgICAgIHR5cGVvZiByYXdQYWdlID09PSAnb2JqZWN0JyAmJlxuICAgICAgIUFycmF5LmlzQXJyYXkocmF3UGFnZSkgJiZcbiAgICAgIHR5cGVvZiAocmF3UGFnZSBhcyB7IGVxPzogdW5rbm93biB9KS5lcSA9PT0gJ251bWJlcidcbiAgICApIHtcbiAgICAgIHJldHVybiAocmF3UGFnZSBhcyB7IGVxOiBudW1iZXIgfSkuZXE7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogTm9ybWFsaXplcyB0aGUgcGFnZSBmaWx0ZXIgdG8gYSBtaW5pbXVtIHZhbHVlIG9mIDEgd2hlbiBwcmVzZW50LiAqL1xuICBmdW5jdGlvbiBub3JtYWxpemVQYWdlRmlsdGVycyhmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnMpOiB7XG4gICAgZmlsdGVycz86IFVua25vd25GaWx0ZXJzO1xuICAgIG5vcm1hbGl6ZWQ6IGJvb2xlYW47XG4gIH0ge1xuICAgIGNvbnN0IHBhZ2VWYWx1ZSA9IHJlYWRQYWdlVmFsdWUoZmlsdGVycyk7XG4gICAgaWYgKHBhZ2VWYWx1ZSA9PSBudWxsIHx8IHBhZ2VWYWx1ZSA+PSAxIHx8IGZpbHRlcnMgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgbm9ybWFsaXplZDogZmFsc2UsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBmaWx0ZXJzOiB7XG4gICAgICAgIC4uLmZpbHRlcnMsXG4gICAgICAgIHBhZ2U6IHsgZXE6IDEgfSxcbiAgICAgIH0sXG4gICAgICBub3JtYWxpemVkOiB0cnVlLFxuICAgIH07XG4gIH1cblxuICAvKiogQ29udmVydHMgcm91dGVyIHNlYXJjaCBzdGF0ZSBpbnRvIHRoZSBvYmplY3QgZm9yd2FyZGVkIHRvIGBwcmVwYXJlYC4gKi9cbiAgZnVuY3Rpb24gYnVpbGRQcmVwYXJlUXVlcnlJbnB1dChzdGF0ZTogUGFyc2VkU2VhcmNoU3RhdGUpOiBQcmVwYXJlUXVlcnlJbnB1dCB7XG4gICAgcmV0dXJuIHN0YXRlLnF1ZXJ5O1xuICB9XG5cbiAgLyoqIEJ1aWxkcyBhIHJvdXRlIGVudHJ5IHdpdGggYSBmcmVzaGx5IGNhbGN1bGF0ZWQgYWN0aXZlIGxvYWQgc3RhdGUuICovXG4gIGZ1bmN0aW9uIHdpdGhMb2FkU3RhdGUoXG4gICAgZW50cnk6IE9taXQ8Um91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD4sICdhY3RpdmVMb2FkU3RhdGUnIHwgJ2xvYWRTdGF0ZSc+LFxuICApOiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PiB7XG4gICAgY29uc3QgeyBhY3RpdmVMb2FkU3RhdGUsIGxvYWRTdGF0ZSB9ID0gY2FsY3VsYXRlTG9hZFN0YXRlKFxuICAgICAgZW50cnkucHJlcGFyZWRNYXRjaCxcbiAgICAgIGxvYWRTdGF0ZVZlcnNpb24sXG4gICAgKTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZW50cnksXG4gICAgICBhY3RpdmVMb2FkU3RhdGUsXG4gICAgICBsb2FkU3RhdGUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGFjdGl2ZSByb3V0ZSBsb2FkIHN0YXRlIGNoYW5nZWQgaW4gYSBtZWFuaW5nZnVsIHdheS4gKi9cbiAgZnVuY3Rpb24gaXNTYW1lQWN0aXZlTG9hZFN0YXRlKFxuICAgIGN1cnJlbnQ6IFJvdXRlckFjdGl2ZUxvYWRTdGF0ZSxcbiAgICBuZXh0OiBSb3V0ZXJBY3RpdmVMb2FkU3RhdGUsXG4gICk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBjdXJyZW50LnN0YXR1cyA9PT0gbmV4dC5zdGF0dXMgJiZcbiAgICAgIGN1cnJlbnQucGVuZGluZ0NvdW50ID09PSBuZXh0LnBlbmRpbmdDb3VudCAmJlxuICAgICAgY3VycmVudC5yZWplY3RlZENvdW50ID09PSBuZXh0LnJlamVjdGVkQ291bnRcbiAgICApO1xuICB9XG5cbiAgLyoqIEJ1aWxkcyBhIHNuYXBzaG90IHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50IHJvdXRlciBlbnRyeS4gKi9cbiAgZnVuY3Rpb24gYnVpbGRFbnRyeVNuYXBzaG90KFxuICAgIGVudHJ5OiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PixcbiAgKTogUm91dGVyRW50cnlTbmFwc2hvdCB7XG4gICAgY29uc3QgcHJlcGFyZWRTZWdtZW50cyA9IGVudHJ5LnByZXBhcmVkTWF0Y2guc2VnbWVudHMubWFwKChzZWdtZW50KSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXRoOiBzZWdtZW50LnBhdGgsXG4gICAgICAgIGZ1bGxQYXRoOiBzZWdtZW50LmZ1bGxQYXRoLFxuICAgICAgICBzZWdtZW50S2V5OiBzZWdtZW50LnNlZ21lbnRLZXksXG4gICAgICAgIHBhcmFtTmFtZXM6IHNlZ21lbnQucGFyYW1OYW1lcyxcbiAgICAgICAgc2VnbWVudEluZGV4OiBzZWdtZW50LnNlZ21lbnRJbmRleCxcbiAgICAgICAgcm91dGVOb2RlOiBzZWdtZW50LnJvdXRlTm9kZSxcbiAgICAgICAgcHJlcGFyZWRSZXNvdXJjZTogc2VnbWVudC5wcmVwYXJlZFJlc291cmNlLFxuICAgICAgICBwcmVwYXJlZEh5ZHJhdGlvbjogc2VnbWVudC5wcmVwYXJlZEh5ZHJhdGlvbixcbiAgICAgICAgcmVuZGVyOiBzZWdtZW50LnJlbmRlcixcbiAgICAgICAgcmVkaXJlY3RUbzogc2VnbWVudC5yZWRpcmVjdFRvLFxuICAgICAgICByZWRpcmVjdFN0YXR1czogc2VnbWVudC5yZWRpcmVjdFN0YXR1cyxcbiAgICAgICAgcmVzb3VyY2VQYWdlOiBzZWdtZW50LnJlc291cmNlUGFnZSxcbiAgICAgICAgc3VzcGVuc2VCb3VuZGFyeTogc2VnbWVudC5zdXNwZW5zZUJvdW5kYXJ5LFxuICAgICAgICBmYWxsYmFjazogc2VnbWVudC5mYWxsYmFjayxcbiAgICAgICAgaGlnaGxpZ2h0SWQ6IHNlZ21lbnQuaGlnaGxpZ2h0SWQsXG4gICAgICAgIHF1ZXJ5U2NoZW1hOiBzZWdtZW50LnF1ZXJ5U2NoZW1hLFxuICAgICAgICBwcmVwYXJlZFN0YXR1czogc2VnbWVudC5wcmVwYXJlZFJlc291cmNlPy5nZXRTdGF0dXMoKSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbG9jYXRpb246IG5vcm1hbGl6ZUxvY2F0aW9uKGVudHJ5LmxvY2F0aW9uKSxcbiAgICAgIHJhd1NlYXJjaDogZW50cnkucmF3U2VhcmNoLFxuICAgICAgcm91dGVQYXRoOiByZWFkTWF0Y2hlZFJvdXRlUGF0aChlbnRyeSksXG4gICAgICBwYXJhbXM6IGVudHJ5LnJvdXRlPy5wYXJhbXMsXG4gICAgICBxdWVyeTogZW50cnkucXVlcnksXG4gICAgICBwcmVwYXJlZE1hdGNoOiB7XG4gICAgICAgIHNlZ21lbnRzOiBwcmVwYXJlZFNlZ21lbnRzLFxuICAgICAgfSxcbiAgICAgIGFjdGl2ZUxvYWRTdGF0ZTogZW50cnkuYWN0aXZlTG9hZFN0YXRlLFxuICAgICAgbG9hZFN0YXRlOiBlbnRyeS5sb2FkU3RhdGUsXG4gICAgICBmaWx0ZXJzOiBlbnRyeS5maWx0ZXJzLFxuICAgICAgZmlsdGVyRGlhZ25vc3RpY3M6IGVudHJ5LmZpbHRlckRpYWdub3N0aWNzLFxuICAgICAgYWN0aXZlUXVlcnlTY2hlbWE6IGVudHJ5LmFjdGl2ZVF1ZXJ5U2NoZW1hLFxuICAgICAgZm9yY2VSZXJlbmRlcjogZW50cnkuZm9yY2VSZXJlbmRlcixcbiAgICAgIHN0YXR1czogZW50cnkuc3RhdHVzLFxuICAgIH07XG4gIH1cblxuICAvKiogTm90aWZpZXMgaW5zdHJ1bWVudGF0aW9ucyBvZiBhIG5ldyBhY3RpdmUgZW50cnkuICovXG4gIGZ1bmN0aW9uIG5vdGlmeUVudHJ5KGVudHJ5OiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0Pik6IHZvaWQge1xuICAgIHJlZ2lzdHJ5Lm5vdGlmeUVudHJ5Q2hhbmdlKGJ1aWxkRW50cnlTbmFwc2hvdChlbnRyeSkpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgYSBkZWR1cGxpY2F0aW9uIGtleSBmb3IgcHJlbG9hZCBldmVudHMuICovXG4gIGZ1bmN0aW9uIGJ1aWxkUHJlbG9hZEtleShcbiAgICBtb2RlOiBSb3V0ZXJQcmVsb2FkTW9kZVZhbHVlLFxuICAgIHBhdGhuYW1lOiBzdHJpbmcsXG4gICAgc2VhcmNoID0gJycsXG4gICk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke21vZGV9OiR7cGF0aG5hbWV9JHtzZWFyY2h9YDtcbiAgfVxuXG4gIC8qKiBCdWlsZHMgYSBub3JtYWxpemVkIGxvb2t1cCBrZXkgZm9yIHByZXBhcmVkIGZ1bGwtcm91dGUgcHJlbG9hZHMuICovXG4gIGZ1bmN0aW9uIGJ1aWxkUHJlbG9hZGVkTWF0Y2hLZXkocGF0aG5hbWU6IHN0cmluZywgc2VhcmNoID0gJycpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtwYXRobmFtZX0ke3NlYXJjaH1gO1xuICB9XG5cbiAgLyoqIENvbXBhcmVzIHBhdGggcGFyYW1ldGVyIHZhbHVlcywgaW5jbHVkaW5nIHdpbGRjYXJkIGFycmF5cy4gKi9cbiAgZnVuY3Rpb24gaXNQYXJhbVZhbHVlRXF1YWwoXG4gICAgbGVmdDogUGFyYW1EYXRhW3N0cmluZ10sXG4gICAgcmlnaHQ6IFBhcmFtRGF0YVtzdHJpbmddLFxuICApOiBib29sZWFuIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShsZWZ0KSB8fCBBcnJheS5pc0FycmF5KHJpZ2h0KSkge1xuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGxlZnQpIHx8ICFBcnJheS5pc0FycmF5KHJpZ2h0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAobGVmdC5sZW5ndGggIT09IHJpZ2h0Lmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGVmdC5ldmVyeSgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gcmlnaHRbaW5kZXhdO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBsZWZ0ID09PSByaWdodDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHdoZXRoZXIgdHdvIG1hdGNoZWQgcm91dGUgc25hcHNob3RzIGRlc2NyaWJlIHRoZSBzYW1lIHJvdXRlIGFuZCBwYXJhbXMuICovXG4gIGZ1bmN0aW9uIGFyZU1hdGNoZWRSb3V0ZXNFcXVpdmFsZW50KFxuICAgIGxlZnQ6IFJvdXRlck1hdGNoZWRSb3V0ZTxQYXJhbURhdGE+IHwgbnVsbCxcbiAgICByaWdodDogUm91dGVyTWF0Y2hlZFJvdXRlPFBhcmFtRGF0YT4gfCBudWxsLFxuICApOiBib29sZWFuIHtcbiAgICBpZiAobGVmdCA9PT0gcmlnaHQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAobGVmdCA9PSBudWxsIHx8IHJpZ2h0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGxlZnQucm91dGUgIT09IHJpZ2h0LnJvdXRlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IGxlZnRFbnRyaWVzID0gT2JqZWN0LmVudHJpZXMobGVmdC5wYXJhbXMpO1xuICAgIGNvbnN0IHJpZ2h0S2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMocmlnaHQucGFyYW1zKSk7XG4gICAgaWYgKGxlZnRFbnRyaWVzLmxlbmd0aCAhPT0gcmlnaHRLZXlzLnNpemUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZnRFbnRyaWVzLmV2ZXJ5KChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiByaWdodEtleXMuaGFzKGtleSkgJiYgaXNQYXJhbVZhbHVlRXF1YWwodmFsdWUsIHJpZ2h0LnBhcmFtc1trZXldKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhIHByZWxvYWQgb3IgcHJlbG9hZC1jb2RlIGluc3RydW1lbnRhdGlvbiBldmVudC4gKi9cbiAgZnVuY3Rpb24gZW1pdFByZWxvYWRFdmVudChcbiAgICBtb2RlOiAnY29kZScgfCAnZnVsbCcsXG4gICAgcGF0aG5hbWU6IHN0cmluZyxcbiAgICBzZWFyY2g6IHN0cmluZyxcbiAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qga2V5ID0gYnVpbGRQcmVsb2FkS2V5KG1vZGUsIHBhdGhuYW1lLCBzZWFyY2gpO1xuICAgIGNvbnN0IHJlY2VudGx5UmVjb3JkZWQgPVxuICAgICAgbGFzdFByZWxvYWRTaWduYXR1cmUgIT09IG51bGwgJiZcbiAgICAgIGxhc3RQcmVsb2FkU2lnbmF0dXJlLmtleSA9PT0ga2V5ICYmXG4gICAgICBub3cgLSBsYXN0UHJlbG9hZFNpZ25hdHVyZS50aW1lc3RhbXAgPCA1MDtcblxuICAgIGlmICghcmVjZW50bHlSZWNvcmRlZCkge1xuICAgICAgZW1pdEV2ZW50KHtcbiAgICAgICAga2luZDogJ3ByZWxvYWQnLFxuICAgICAgICBzb3VyY2UsXG4gICAgICAgIHRpbWVzdGFtcDogbm93LFxuICAgICAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24oaGlzdG9yeS5sb2NhdGlvbiksXG4gICAgICAgIHRhcmdldFBhdGhuYW1lOiBwYXRobmFtZSxcbiAgICAgICAgbW9kZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxhc3RQcmVsb2FkU2lnbmF0dXJlID0geyBrZXksIHRpbWVzdGFtcDogbm93IH07XG4gIH1cblxuICAvKiogRW1pdHMgYSBoaXN0b3J5IG11dGF0aW9uIGV2ZW50IChwdXNoL3JlcGxhY2Uvbm9ybWFsaXplKS4gKi9cbiAgZnVuY3Rpb24gZW1pdEhpc3RvcnlFdmVudChcbiAgICBhY3Rpb246IFJvdXRlckhpc3RvcnlBY3Rpb25WYWx1ZSxcbiAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UsXG4gICAgbG9jYXRpb246IHsgcGF0aG5hbWU6IHN0cmluZzsgc2VhcmNoPzogc3RyaW5nOyBoYXNoPzogc3RyaW5nIH0sXG4gICAgZGV0YWlscz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuICApOiB2b2lkIHtcbiAgICBwZW5kaW5nTmF2aWdhdGlvbk9yaWdpbiA9IHNvdXJjZTtcbiAgICBlbWl0RXZlbnQoe1xuICAgICAga2luZDogJ2hpc3RvcnknLFxuICAgICAgc291cmNlLFxuICAgICAgYWN0aW9uLFxuICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgbG9jYXRpb246IG5vcm1hbGl6ZUxvY2F0aW9uKGxvY2F0aW9uKSxcbiAgICAgIGRldGFpbHMsXG4gICAgfSk7XG4gIH1cblxuICAvLyBCdWlsZCBhIGZsYXQgbGlzdCBvZiByb3V0ZXMgZm9yIGVmZmljaWVudCBtYXRjaGluZy5cbiAgY29uc3QgZmxhdFJvdXRlcyA9IGJ1aWxkUm91dGVzKHJvdXRlcyk7XG5cbiAgLyoqIFNlcmlhbGl6ZXMgYSByZWRpcmVjdCB1c2luZyB0aGUgZGVzdGluYXRpb24gcm91dGUncyBxdWVyeSBzY2hlbWEuICovXG4gIGZ1bmN0aW9uIGJ1aWxkUmVkaXJlY3RTZWFyY2goaW5wdXQ6IHtcbiAgICBwYXRobmFtZTogc3RyaW5nO1xuICAgIHF1ZXJ5PzogVW5rbm93blF1ZXJ5U2hhcGU7XG4gICAgZmlsdGVycz86IFVua25vd25GaWx0ZXJzO1xuICB9KTogc3RyaW5nIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvblJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgIC4uLmhpc3RvcnkubG9jYXRpb24sXG4gICAgICBwYXRobmFtZTogaW5wdXQucGF0aG5hbWUsXG4gICAgfSk7XG4gICAgcmV0dXJuIGJ1aWxkRGVzdGluYXRpb25TZWFyY2goe1xuICAgICAgZmlsdGVyczogaW5wdXQuZmlsdGVycyxcbiAgICAgIHF1ZXJ5OiBpbnB1dC5xdWVyeSxcbiAgICAgIHF1ZXJ5U2NoZW1hOiByZWFkQWN0aXZlUXVlcnlTY2hlbWEoZGVzdGluYXRpb25Sb3V0ZSksXG4gICAgfSk7XG4gIH1cblxuICAvKiogUmVwbGFjZXMgYnJvd3NlciBoaXN0b3J5IGZvciBhIHVuaXZlcnNhbCByZWRpcmVjdCByb3V0ZSBvciBwcmVwYXJhdGlvbi4gKi9cbiAgZnVuY3Rpb24gcmVwbGFjZVdpdGhSZWRpcmVjdChcbiAgICByZWRpcmVjdFRvOiBzdHJpbmcsXG4gICAgc3RhdHVzOiBSb3V0ZXJSZWRpcmVjdFN0YXR1cyxcbiAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnRMb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKGhpc3RvcnkubG9jYXRpb24pO1xuICAgIGNvbnN0IGN1cnJlbnRIcmVmID0gYGh0dHA6Ly9wbHVtaWxlLmxvY2FsJHtjdXJyZW50TG9jYXRpb24ucGF0aG5hbWV9JHtjdXJyZW50TG9jYXRpb24uc2VhcmNofSR7Y3VycmVudExvY2F0aW9uLmhhc2h9YDtcbiAgICBjb25zdCBkZXN0aW5hdGlvbiA9IHJlc29sdmVSb3V0ZXJEZXN0aW5hdGlvbih7XG4gICAgICBkZXN0aW5hdGlvbjogcmVkaXJlY3RUbyxcbiAgICAgIGN1cnJlbnRIcmVmLFxuICAgICAgYnVpbGRTZWFyY2g6IGJ1aWxkUmVkaXJlY3RTZWFyY2gsXG4gICAgfSk7XG4gICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgcGF0aG5hbWU6IGRlc3RpbmF0aW9uLnBhdGhuYW1lLFxuICAgICAgc2VhcmNoOiBkZXN0aW5hdGlvbi5zZWFyY2gsXG4gICAgICBoYXNoOiBkZXN0aW5hdGlvbi5oYXNoLFxuICAgIH07XG4gICAgY29uc3QgY3VycmVudFRhcmdldCA9IGAke2N1cnJlbnRMb2NhdGlvbi5wYXRobmFtZX0ke2N1cnJlbnRMb2NhdGlvbi5zZWFyY2h9JHtjdXJyZW50TG9jYXRpb24uaGFzaH1gO1xuICAgIGNvbnN0IG5leHRUYXJnZXQgPSBgJHt0YXJnZXQucGF0aG5hbWV9JHt0YXJnZXQuc2VhcmNofSR7dGFyZ2V0Lmhhc2h9YDtcbiAgICBpZiAoY3VycmVudFRhcmdldCA9PT0gbmV4dFRhcmdldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBSb3V0ZXIgcmVkaXJlY3QgbG9vcDogJHtuZXh0VGFyZ2V0fWApO1xuICAgIH1cbiAgICBlbWl0SGlzdG9yeUV2ZW50KCdyZXBsYWNlJywgc291cmNlLCB0YXJnZXQsIHtcbiAgICAgIHRyaWdnZXI6ICdyZWRpcmVjdCcsXG4gICAgICByZWRpcmVjdFN0YXR1czogc3RhdHVzLFxuICAgIH0pO1xuICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgIC4uLnRhcmdldCxcbiAgICAgIGRlYnVnQ29udGV4dDoge1xuICAgICAgICBvcmlnaW46IHNvdXJjZSxcbiAgICAgICAgdHJpZ2dlcjogJ3JlZGlyZWN0JyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogRWFnZXJseSBzdGFydHMgZXZlcnkgcmVzb3VyY2UgaW4gYSBwcmVwYXJlZCByb3V0ZSBjaGFpbi4gKi9cbiAgZnVuY3Rpb24gbG9hZFByZXBhcmVkTWF0Y2hSZXNvdXJjZXMoXG4gICAgcHJlcGFyZWRNYXRjaFRvTG9hZDogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD5bJ3ByZXBhcmVkTWF0Y2gnXSxcbiAgKTogdm9pZCB7XG4gICAgcHJlcGFyZWRNYXRjaFRvTG9hZC5zZWdtZW50cy5mb3JFYWNoKChyb3V0ZSkgPT4ge1xuICAgICAgaWYgKHJvdXRlLnByZXBhcmVkUmVzb3VyY2UgIT0gbnVsbCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJvdXRlLnByZXBhcmVkUmVzb3VyY2UubG9hZCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBjYWNoZWQgZnVsbCBwcmVsb2FkIGlmIGl0IGlzIHN0aWxsIHZhbGlkIGZvciB0aGUgbmF2aWdhdGlvbi4gKi9cbiAgZnVuY3Rpb24gY29uc3VtZVByZWxvYWRlZE1hdGNoKGlucHV0OiB7XG4gICAgcGF0aG5hbWU6IHN0cmluZztcbiAgICBzZWFyY2g6IHN0cmluZztcbiAgICBjb250ZXh0OiBUQ29udGV4dDtcbiAgICByb3V0ZTogUm91dGVyTWF0Y2hlZFJvdXRlPFBhcmFtRGF0YT4gfCBudWxsO1xuICAgIHF1ZXJ5U2NoZW1hOiBSb3V0ZXJRdWVyeVNjaGVtYTtcbiAgfSk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+WydwcmVwYXJlZE1hdGNoJ10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGtleSA9IGJ1aWxkUHJlbG9hZGVkTWF0Y2hLZXkoaW5wdXQucGF0aG5hbWUsIGlucHV0LnNlYXJjaCk7XG4gICAgY29uc3QgY2FjaGVkID0gcHJlbG9hZGVkTWF0Y2hlcy5nZXQoa2V5KTtcbiAgICBpZiAoY2FjaGVkID09IG51bGwpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHByZWxvYWRlZE1hdGNoZXMuZGVsZXRlKGtleSk7XG4gICAgaWYgKFxuICAgICAgY2FjaGVkLmNvbnRleHQgIT09IGlucHV0LmNvbnRleHQgfHxcbiAgICAgICFhcmVNYXRjaGVkUm91dGVzRXF1aXZhbGVudChjYWNoZWQucm91dGUsIGlucHV0LnJvdXRlKSB8fFxuICAgICAgY2FjaGVkLnF1ZXJ5U2NoZW1hICE9PSBpbnB1dC5xdWVyeVNjaGVtYSB8fFxuICAgICAgY2FjaGVkLnNlYXJjaCAhPT0gaW5wdXQuc2VhcmNoXG4gICAgKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gY2FjaGVkLnByZXBhcmVkTWF0Y2g7XG4gIH1cblxuICAvLyBGaW5kIHRoZSBpbml0aWFsIHJvdXRlIG1hdGNoIGFuZCBwcmVwYXJlIGl0IGZvciByZW5kZXJpbmdcbiAgY29uc3QgbWF0Y2hlZEluaXRpYWxSb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCBoaXN0b3J5LmxvY2F0aW9uKTtcbiAgY29uc3QgaW5pdGlhbERlY2xhcmF0aXZlUmVkaXJlY3QgPSBtYXRjaGVkSW5pdGlhbFJvdXRlPy5yb3V0ZS5yZWRpcmVjdFRvO1xuICBjb25zdCBpbml0aWFsRGVjbGFyYXRpdmVSZWRpcmVjdFN0YXR1cyA9XG4gICAgbWF0Y2hlZEluaXRpYWxSb3V0ZT8ucm91dGUucmVkaXJlY3RTdGF0dXMgPz8gMzAyO1xuICBpZiAoaW5pdGlhbERlY2xhcmF0aXZlUmVkaXJlY3QgIT0gbnVsbCkge1xuICAgIHJlcGxhY2VXaXRoUmVkaXJlY3QoXG4gICAgICBpbml0aWFsRGVjbGFyYXRpdmVSZWRpcmVjdCxcbiAgICAgIGluaXRpYWxEZWNsYXJhdGl2ZVJlZGlyZWN0U3RhdHVzLFxuICAgICAgJ2V4dGVybmFsJyxcbiAgICApO1xuICB9XG4gIGxldCByb3V0ZSA9IG1hdGNoZWRJbml0aWFsUm91dGU7XG4gIGlmIChpbml0aWFsRGVjbGFyYXRpdmVSZWRpcmVjdCAhPSBudWxsKSB7XG4gICAgcm91dGUgPSBudWxsO1xuICB9XG4gIGNvbnN0IGluaXRpYWxVbmlmaWVkU2NoZW1hID0gcmVhZEFjdGl2ZVF1ZXJ5U2NoZW1hKHJvdXRlKTtcbiAgY29uc3QgaW5pdGlhbFNlYXJjaFN0YXRlID0gcGFyc2VTZWFyY2hTdGF0ZShcbiAgICBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCxcbiAgICBpbml0aWFsVW5pZmllZFNjaGVtYSxcbiAgKTtcbiAgY29uc3Qgbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzID0gbm9ybWFsaXplUGFnZUZpbHRlcnMoXG4gICAgaW5pdGlhbFNlYXJjaFN0YXRlLmZpbHRlcnMsXG4gICk7XG4gIGNvbnN0IGluaXRpYWxMb2NhdGlvblNuYXBzaG90ID0gbm9ybWFsaXplTG9jYXRpb24oaGlzdG9yeS5sb2NhdGlvbik7XG4gIGxldCBoeWRyYXRpb25WYWx1ZXM6IE1hcDxzdHJpbmcsIFJvdXRlckpzb25WYWx1ZT4gfCB1bmRlZmluZWQ7XG4gIGlmIChvcHRpb25zLmh5ZHJhdGlvblNuYXBzaG90ICE9IG51bGwpIHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IG9wdGlvbnMuaHlkcmF0aW9uU25hcHNob3Q7XG4gICAgY29uc3Qgc25hcHNob3RWZXJzaW9uOiB1bmtub3duID0gc25hcHNob3QudmVyc2lvbjtcbiAgICBjb25zdCBzbmFwc2hvdFNlZ21lbnRzOiB1bmtub3duID0gc25hcHNob3Quc2VnbWVudHM7XG4gICAgaWYgKHNuYXBzaG90VmVyc2lvbiAhPT0gMSB8fCAhQXJyYXkuaXNBcnJheShzbmFwc2hvdFNlZ21lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3V0ZXIgaHlkcmF0aW9uIHNuYXBzaG90IGlzIG1hbGZvcm1lZCcpO1xuICAgIH1cbiAgICBjb25zdCBzbmFwc2hvdExvY2F0aW9uID0gbm9ybWFsaXplTG9jYXRpb24oc25hcHNob3QubG9jYXRpb24pO1xuICAgIGlmIChcbiAgICAgIHNuYXBzaG90TG9jYXRpb24ucGF0aG5hbWUgIT09IGluaXRpYWxMb2NhdGlvblNuYXBzaG90LnBhdGhuYW1lIHx8XG4gICAgICBzbmFwc2hvdExvY2F0aW9uLnNlYXJjaCAhPT0gaW5pdGlhbExvY2F0aW9uU25hcHNob3Quc2VhcmNoIHx8XG4gICAgICBzbmFwc2hvdExvY2F0aW9uLmhhc2ggIT09IGluaXRpYWxMb2NhdGlvblNuYXBzaG90Lmhhc2hcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1JvdXRlciBoeWRyYXRpb24gbG9jYXRpb24gZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgbG9jYXRpb24nLFxuICAgICAgKTtcbiAgICB9XG4gICAgY29uc3QgdmFsdWVzID0gbmV3IE1hcDxzdHJpbmcsIFJvdXRlckpzb25WYWx1ZT4oKTtcbiAgICBoeWRyYXRpb25WYWx1ZXMgPSB2YWx1ZXM7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBzbmFwc2hvdFNlZ21lbnRzIGFzIHVua25vd25bXTtcbiAgICBzZWdtZW50cy5mb3JFYWNoKChzZWdtZW50KSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBzZWdtZW50ICE9PSAnb2JqZWN0JyB8fFxuICAgICAgICBzZWdtZW50ID09IG51bGwgfHxcbiAgICAgICAgISgncHJlcGFyZWQnIGluIHNlZ21lbnQpXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3V0ZXIgaHlkcmF0aW9uIHNuYXBzaG90IGlzIG1hbGZvcm1lZCcpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VnbWVudFJlY29yZCA9IHNlZ21lbnQgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICBjb25zdCBzZWdtZW50S2V5ID0gc2VnbWVudFJlY29yZC5rZXk7XG4gICAgICBpZiAodHlwZW9mIHNlZ21lbnRLZXkgIT09ICdzdHJpbmcnIHx8IHNlZ21lbnRLZXkgPT09ICcnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm91dGVyIGh5ZHJhdGlvbiBzbmFwc2hvdCBpcyBtYWxmb3JtZWQnKTtcbiAgICAgIH1cbiAgICAgIGlmICh2YWx1ZXMuaGFzKHNlZ21lbnRLZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRHVwbGljYXRlIHJvdXRlciBoeWRyYXRpb24gc2VnbWVudDogJHtzZWdtZW50S2V5fWApO1xuICAgICAgfVxuICAgICAgYXNzZXJ0Um91dGVySnNvblZhbHVlKHNlZ21lbnRSZWNvcmQucHJlcGFyZWQpO1xuICAgICAgdmFsdWVzLnNldChzZWdtZW50S2V5LCBzZWdtZW50UmVjb3JkLnByZXBhcmVkKTtcbiAgICB9KTtcbiAgfVxuICBsZXQgaW5pdGlhbEluc3RydW1lbnRhdGlvbjpcbiAgICB8IHtcbiAgICAgICAgZW1pdDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4gdm9pZDtcbiAgICAgICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICAgICAgICBsb2NhdGlvbjogUm91dGVyTG9jYXRpb25TbmFwc2hvdDtcbiAgICAgIH1cbiAgICB8IHVuZGVmaW5lZDtcbiAgaWYgKHJvdXRlICE9IG51bGwpIHtcbiAgICBpbml0aWFsSW5zdHJ1bWVudGF0aW9uID0ge1xuICAgICAgZW1pdDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4ge1xuICAgICAgICBlbWl0RXZlbnQoZXZlbnQpO1xuICAgICAgfSxcbiAgICAgIHNvdXJjZTogbGFzdE5hdmlnYXRpb25PcmlnaW4sXG4gICAgICBsb2NhdGlvbjogaW5pdGlhbExvY2F0aW9uU25hcHNob3QsXG4gICAgfTtcbiAgfVxuICBjb25zdCBpbml0aWFsQ29udGV4dCA9IHJlc29sdmVDb250ZXh0KCk7XG4gIGNvbnN0IGh5ZHJhdGlvbkNvbnN1bWVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIGxldCBoeWRyYXRpb246XG4gICAgeyB2YWx1ZXM6IE1hcDxzdHJpbmcsIFJvdXRlckpzb25WYWx1ZT47IGNvbnN1bWVkOiBTZXQ8c3RyaW5nPiB9IHwgdW5kZWZpbmVkO1xuICBpZiAoaHlkcmF0aW9uVmFsdWVzICE9IG51bGwpIHtcbiAgICBoeWRyYXRpb24gPSB7IHZhbHVlczogaHlkcmF0aW9uVmFsdWVzLCBjb25zdW1lZDogaHlkcmF0aW9uQ29uc3VtZWQgfTtcbiAgfVxuICBsZXQgcHJlcGFyZWRNYXRjaDogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD5bJ3ByZXBhcmVkTWF0Y2gnXTtcbiAgdHJ5IHtcbiAgICBwcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKFxuICAgICAgcm91dGUsXG4gICAgICBidWlsZFByZXBhcmVRdWVyeUlucHV0KHtcbiAgICAgICAgLi4uaW5pdGlhbFNlYXJjaFN0YXRlLFxuICAgICAgICBmaWx0ZXJzOiBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMuZmlsdGVycyxcbiAgICAgIH0pLFxuICAgICAgaW5pdGlhbEluc3RydW1lbnRhdGlvbixcbiAgICAgIGluaXRpYWxDb250ZXh0LFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICByYXdRdWVyeTogaW5pdGlhbFNlYXJjaFN0YXRlLnF1ZXJ5LFxuICAgICAgICBmaWx0ZXJzOiBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMuZmlsdGVycyxcbiAgICAgIH0sXG4gICAgICBoeWRyYXRpb24sXG4gICAgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIShlcnJvciBpbnN0YW5jZW9mIEh0dHBSZWRpcmVjdCkpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgICByZXBsYWNlV2l0aFJlZGlyZWN0KGVycm9yLnJlZGlyZWN0VG8sIGVycm9yLnN0YXR1c0NvZGUsICdleHRlcm5hbCcpO1xuICAgIHByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2gobnVsbCk7XG4gIH1cbiAgaWYgKGh5ZHJhdGlvblZhbHVlcyAhPSBudWxsKSB7XG4gICAgaHlkcmF0aW9uVmFsdWVzLmZvckVhY2goKF92YWx1ZSwga2V5KSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ1NlZ21lbnRzID0gcHJlcGFyZWRNYXRjaC5zZWdtZW50cy5maWx0ZXIoKHNlZ21lbnQpID0+IHtcbiAgICAgICAgcmV0dXJuIHNlZ21lbnQuc2VnbWVudEtleSA9PT0ga2V5O1xuICAgICAgfSk7XG4gICAgICBpZiAobWF0Y2hpbmdTZWdtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJvdXRlciBoeWRyYXRpb24gc2VnbWVudDogJHtrZXl9YCk7XG4gICAgICB9XG4gICAgICBpZiAobWF0Y2hpbmdTZWdtZW50cy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBbWJpZ3VvdXMgcm91dGVyIGh5ZHJhdGlvbiBzZWdtZW50OiAke2tleX1gKTtcbiAgICAgIH1cbiAgICAgIGlmICghaHlkcmF0aW9uQ29uc3VtZWQuaGFzKGtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBSb3V0ZXIgaHlkcmF0aW9uIHNlZ21lbnQgd2FzIG5vdCBjb25zdW1lZDogJHtrZXl9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgaW5pdGlhbFByZXBhcmVSZWRpcmVjdCA9IHByZXBhcmVkTWF0Y2guc2VnbWVudHNcbiAgICAubWFwKChzZWdtZW50KSA9PiB7XG4gICAgICByZXR1cm4gc2VnbWVudC5wcmVwYXJlZFJlc291cmNlPy5nZXRFcnJvcigpO1xuICAgIH0pXG4gICAgLmZpbmQoKGVycm9yKTogZXJyb3IgaXMgSHR0cFJlZGlyZWN0ID0+IHtcbiAgICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEh0dHBSZWRpcmVjdDtcbiAgICB9KTtcbiAgaWYgKGluaXRpYWxQcmVwYXJlUmVkaXJlY3QgIT0gbnVsbCkge1xuICAgIHJlcGxhY2VXaXRoUmVkaXJlY3QoXG4gICAgICBpbml0aWFsUHJlcGFyZVJlZGlyZWN0LnJlZGlyZWN0VG8sXG4gICAgICBpbml0aWFsUHJlcGFyZVJlZGlyZWN0LnN0YXR1c0NvZGUsXG4gICAgICAnZXh0ZXJuYWwnLFxuICAgICk7XG4gICAgcHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChudWxsKTtcbiAgfVxuXG4gIC8vIE1haW50YWluIGEgc2V0IG9mIHN1YnNjcmliZXJzIHRvIHRoZSBhY3RpdmUgcm91dGUgZW50cnlcbiAgbGV0IG5leHRJZCA9IDA7XG4gIGNvbnN0IHN1YnNjcmliZXJzID0gbmV3IE1hcDxcbiAgICBudW1iZXIsXG4gICAgU3Vic2NyaWJlQ2FsbGJhY2s8UGFyYW1EYXRhLCBSb3V0ZXJRdWVyeVNjaGVtYSwgVENvbnRleHQ+XG4gID4oKTtcbiAgLy8gSGVscGVyIHRvIGJ1aWxkIHRoZSByYXcgcXVlcnkgb2JqZWN0IGZyb20gYSBzZWFyY2ggc3RyaW5nXG4gIGxldCBjdXJyZW50RW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+ID0gd2l0aExvYWRTdGF0ZSh7XG4gICAgZm9yY2VSZXJlbmRlcjogZmFsc2UsXG4gICAgbG9jYXRpb246IGhpc3RvcnkubG9jYXRpb24sXG4gICAgcm91dGUsXG4gICAgcHJlcGFyZWRNYXRjaCxcbiAgICBjb250ZXh0OiBpbml0aWFsQ29udGV4dCxcbiAgICByYXdTZWFyY2g6IGhpc3RvcnkubG9jYXRpb24uc2VhcmNoLFxuICAgIHF1ZXJ5OiBpbml0aWFsU2VhcmNoU3RhdGUucXVlcnksXG4gICAgLy8gdHlwZWRRdWVyeSByZW1vdmVkICh1bmlmaWVkIGludG8gZmlsdGVycy9xdWVyeSlcbiAgICBmaWx0ZXJzOiBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMuZmlsdGVycyxcbiAgICBmaWx0ZXJEaWFnbm9zdGljczogaW5pdGlhbFNlYXJjaFN0YXRlLmZpbHRlckRpYWdub3N0aWNzLFxuICAgIGFjdGl2ZVF1ZXJ5U2NoZW1hOiBpbml0aWFsVW5pZmllZFNjaGVtYSxcbiAgICBzdGF0dXM6IHJlYWRSZW5kZXJTdGF0dXMocm91dGUpLFxuICAgIG5hdmlnYXRpb246IGhpc3RvcnkubmF2aWdhdGlvbixcbiAgfSk7XG5cbiAgLy8gSW5pdGlhbCBub3JtYWxpemF0aW9uIHBhc3MgKGUuZy4sIGNsYW1wIHBhZ2UpXG4gIGlmIChcbiAgICBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMubm9ybWFsaXplZCAmJlxuICAgIGluaXRpYWxVbmlmaWVkU2NoZW1hICE9IG51bGwgJiZcbiAgICBub3JtYWxpemVkSW5pdGlhbEZpbHRlcnMuZmlsdGVycyAhPSBudWxsXG4gICkge1xuICAgIGN1cnJlbnRFbnRyeS5maWx0ZXJzID0gbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLmZpbHRlcnM7XG4gICAgY29uc3Qgbm9ybWFsaXplZFNlYXJjaCA9IGJ1aWxkQ29tYmluZWRTZWFyY2goe1xuICAgICAgZmlsdGVyczogbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLmZpbHRlcnMsXG4gICAgICBxdWVyeTogaW5pdGlhbFNlYXJjaFN0YXRlLnF1ZXJ5LFxuICAgICAgcXVlcnlTY2hlbWE6IGluaXRpYWxVbmlmaWVkU2NoZW1hLFxuICAgIH0pOyAvLyByZXR1cm5zICcnIG9yIHN0cmluZyBzdGFydGluZyB3aXRoICc/J1xuICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkge1xuICAgICAgZW1pdEhpc3RvcnlFdmVudChcbiAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICB7XG4gICAgICAgICAgcGF0aG5hbWU6IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICB9LFxuICAgICAgICB7IHJlYXNvbjogJ2luaXRpYWwtcGFnZS1jbGFtcCcgfSxcbiAgICAgICk7XG4gICAgICBjb25zdCBub3JtYWxpemVEZWJ1Z0NvbnRleHQ6IEhpc3RvcnlEZWJ1Z0NvbnRleHQgPSB7XG4gICAgICAgIG9yaWdpbjogJ25vcm1hbGl6ZScsXG4gICAgICAgIHRyaWdnZXI6ICdub3JtYWxpemUnLFxuICAgICAgfTtcbiAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgcGF0aG5hbWU6IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgICAgaGFzaDogJycsXG4gICAgICAgIGRlYnVnQ29udGV4dDogbm9ybWFsaXplRGVidWdDb250ZXh0LFxuICAgICAgfSk7XG4gICAgICAvLyBVcGRhdGUgY3VycmVudEVudHJ5LmxvY2F0aW9uIHRvIHJlZmxlY3QgbmV3IHNlYXJjaCBkaXJlY3RseSAoaGlzdG9yeS5zZXQgdHJpZ2dlcnMgYXN5bmMgc3Vic2NyaWJlcilcbiAgICAgIGN1cnJlbnRFbnRyeSA9IHdpdGhMb2FkU3RhdGUoe1xuICAgICAgICAuLi5jdXJyZW50RW50cnksXG4gICAgICAgIGxvY2F0aW9uOiB7IC4uLmN1cnJlbnRFbnRyeS5sb2NhdGlvbiwgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoIH0sXG4gICAgICAgIHJhd1NlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBFbWl0cyB0aGUgYWN0aXZlIHJvdXRlIGxvYWQtc3RhdGUgZXZlbnQuICovXG4gIGZ1bmN0aW9uIGVtaXRBY3RpdmVMb2FkU3RhdGVFdmVudChcbiAgICBlbnRyeTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD4sXG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlLFxuICApOiB2b2lkIHtcbiAgICBlbWl0RXZlbnQoe1xuICAgICAga2luZDogJ2FjdGl2ZS1sb2FkLXN0YXRlJyxcbiAgICAgIHNvdXJjZSxcbiAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIGxvY2F0aW9uOiBub3JtYWxpemVMb2NhdGlvbihlbnRyeS5sb2NhdGlvbiksXG4gICAgICByb3V0ZVBhdGg6IHJlYWRNYXRjaGVkUm91dGVQYXRoKGVudHJ5KSxcbiAgICAgIHN0YXR1czogZW50cnkuYWN0aXZlTG9hZFN0YXRlLnN0YXR1cyxcbiAgICAgIHBlbmRpbmdDb3VudDogZW50cnkuYWN0aXZlTG9hZFN0YXRlLnBlbmRpbmdDb3VudCxcbiAgICAgIHJlamVjdGVkQ291bnQ6IGVudHJ5LmFjdGl2ZUxvYWRTdGF0ZS5yZWplY3RlZENvdW50LFxuICAgICAgdmVyc2lvbjogZW50cnkuYWN0aXZlTG9hZFN0YXRlLnZlcnNpb24sXG4gICAgfSk7XG4gIH1cblxuICAvKiogTm90aWZpZXMgUmVhY3Qgc3Vic2NyaWJlcnMgYW5kIGluc3RydW1lbnRhdGlvbiBlbnRyeSBvYnNlcnZlcnMuICovXG4gIGZ1bmN0aW9uIG5vdGlmeVN1YnNjcmliZXJzKGVudHJ5OiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0Pik6IHZvaWQge1xuICAgIHN1YnNjcmliZXJzLmZvckVhY2goKGNhbGxiYWNrKSA9PiB7XG4gICAgICBjYWxsYmFjayhlbnRyeSk7XG4gICAgfSk7XG4gICAgbm90aWZ5RW50cnkoZW50cnkpO1xuICB9XG5cbiAgLyoqIFJlZnJlc2hlcyB0aGUgYWN0aXZlIGVudHJ5IGFmdGVyIGEgcm91dGUgcmVzb3VyY2Ugc2V0dGxlcy4gKi9cbiAgZnVuY3Rpb24gcmVmcmVzaEFjdGl2ZUxvYWRTdGF0ZShcbiAgICBlbnRyeUlkOiBudW1iZXIsXG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlLFxuICApOiB2b2lkIHtcbiAgICBpZiAocm91dGVyRGlzcG9zZWQgfHwgZW50cnlJZCAhPT0gYWN0aXZlRW50cnlJZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0ID0gY2FsY3VsYXRlTG9hZFN0YXRlKFxuICAgICAgY3VycmVudEVudHJ5LnByZXBhcmVkTWF0Y2gsXG4gICAgICBsb2FkU3RhdGVWZXJzaW9uLFxuICAgICk7XG4gICAgaWYgKFxuICAgICAgaXNTYW1lQWN0aXZlTG9hZFN0YXRlKGN1cnJlbnRFbnRyeS5hY3RpdmVMb2FkU3RhdGUsIG5leHQuYWN0aXZlTG9hZFN0YXRlKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb2FkU3RhdGVWZXJzaW9uICs9IDE7XG4gICAgY29uc3QgcmVmcmVzaGVkID0gY2FsY3VsYXRlTG9hZFN0YXRlKFxuICAgICAgY3VycmVudEVudHJ5LnByZXBhcmVkTWF0Y2gsXG4gICAgICBsb2FkU3RhdGVWZXJzaW9uLFxuICAgICk7XG4gICAgY3VycmVudEVudHJ5ID0ge1xuICAgICAgLi4uY3VycmVudEVudHJ5LFxuICAgICAgYWN0aXZlTG9hZFN0YXRlOiByZWZyZXNoZWQuYWN0aXZlTG9hZFN0YXRlLFxuICAgICAgbG9hZFN0YXRlOiByZWZyZXNoZWQubG9hZFN0YXRlLFxuICAgIH07XG4gICAgbm90aWZ5U3Vic2NyaWJlcnMoY3VycmVudEVudHJ5KTtcbiAgICBlbWl0QWN0aXZlTG9hZFN0YXRlRXZlbnQoY3VycmVudEVudHJ5LCBzb3VyY2UpO1xuICB9XG5cbiAgLyoqIE9ic2VydmVzIHBlbmRpbmcgcmVzb3VyY2VzIGZvciB0aGUgYWN0aXZlIGVudHJ5IGFuZCByZXB1Ymxpc2hlcyBvbiBzZXR0bGUuICovXG4gIGZ1bmN0aW9uIG9ic2VydmVBY3RpdmVFbnRyeUxvYWQoXG4gICAgZW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+LFxuICAgIGVudHJ5SWQ6IG51bWJlcixcbiAgICBzb3VyY2U6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UsXG4gICk6IHZvaWQge1xuICAgIGVudHJ5LnByZXBhcmVkTWF0Y2guc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCkgPT4ge1xuICAgICAgaWYgKHNlZ21lbnQucHJlcGFyZWRSZXNvdXJjZT8uZ2V0U3RhdHVzKCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICBzZWdtZW50LnByZXBhcmVkUmVzb3VyY2UubG9hZCgpLnRoZW4oXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVmcmVzaEFjdGl2ZUxvYWRTdGF0ZShlbnRyeUlkLCBzb3VyY2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVkaXJlY3QpIHtcbiAgICAgICAgICAgICAgcmVwbGFjZVdpdGhSZWRpcmVjdChlcnJvci5yZWRpcmVjdFRvLCBlcnJvci5zdGF0dXNDb2RlLCBzb3VyY2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZyZXNoQWN0aXZlTG9hZFN0YXRlKGVudHJ5SWQsIHNvdXJjZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWdtZW50LnJlc291cmNlUGFnZT8uZ2V0U3RhdHVzKCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICBzZWdtZW50LnJlc291cmNlUGFnZS5sb2FkKCkudGhlbihcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoQWN0aXZlTG9hZFN0YXRlKGVudHJ5SWQsIHNvdXJjZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoQWN0aXZlTG9hZFN0YXRlKGVudHJ5SWQsIHNvdXJjZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQdWJsaXNoZXMgYSBuZXcgYWN0aXZlIHJvdXRlIGVudHJ5IGFuZCBzdGFydHMgb2JzZXJ2aW5nIGl0cyByb3V0ZSB3b3JrLiAqL1xuICBmdW5jdGlvbiBwdWJsaXNoRW50cnkoaW5wdXQ6IHtcbiAgICBlbnRyeTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD47XG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICAgIGVtaXRTbmFwc2hvdDogYm9vbGVhbjtcbiAgfSk6IHZvaWQge1xuICAgIGFjdGl2ZUVudHJ5SWQgKz0gMTtcbiAgICBjdXJyZW50RW50cnkgPSBpbnB1dC5lbnRyeTtcbiAgICBub3RpZnlTdWJzY3JpYmVycyhpbnB1dC5lbnRyeSk7XG4gICAgZW1pdEFjdGl2ZUxvYWRTdGF0ZUV2ZW50KGlucHV0LmVudHJ5LCBpbnB1dC5zb3VyY2UpO1xuICAgIGlmIChpbnB1dC5lbWl0U25hcHNob3QpIHtcbiAgICAgIGVtaXRFdmVudCh7XG4gICAgICAgIGtpbmQ6ICdzbmFwc2hvdCcsXG4gICAgICAgIHNvdXJjZTogaW5wdXQuc291cmNlLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGxvY2F0aW9uOiBub3JtYWxpemVMb2NhdGlvbihpbnB1dC5lbnRyeS5sb2NhdGlvbiksXG4gICAgICAgIHJvdXRlUGF0aDogcmVhZE1hdGNoZWRSb3V0ZVBhdGgoaW5wdXQuZW50cnkpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIG9ic2VydmVBY3RpdmVFbnRyeUxvYWQoaW5wdXQuZW50cnksIGFjdGl2ZUVudHJ5SWQsIGlucHV0LnNvdXJjZSk7XG4gIH1cblxuICBwdWJsaXNoRW50cnkoe1xuICAgIGVudHJ5OiBjdXJyZW50RW50cnksXG4gICAgc291cmNlOiBsYXN0TmF2aWdhdGlvbk9yaWdpbixcbiAgICBlbWl0U25hcHNob3Q6IHRydWUsXG4gIH0pO1xuXG4gIC8vIExpc3RlbiBmb3IgbG9jYXRpb24gY2hhbmdlcywgbWF0Y2ggdG8gdGhlIHJvdXRlIGVudHJ5LCBwcmVwYXJlIHRoZSBlbnRyeSxcbiAgLy8gYW5kIG5vdGlmeSBzdWJzY3JpYmVycy4gVGhpcyBwYXR0ZXJuIGVuc3VyZXMgdGhhdCBkYXRhLWxvYWRpbmdcbiAgLy8gb2NjdXJzICpvdXRzaWRlKiBvZiAtIGFuZCAqYmVmb3JlKiAtIHJlbmRlcmluZy5cbiAgY29uc3QgZGlzcG9zZUhpc3RvcnkgPSBoaXN0b3J5LnN1YnNjcmliZShcbiAgICAobG9jYXRpb24sIGZvcmNlUmVyZW5kZXIsIGRlYnVnQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luID0gcmVzb2x2ZU5hdmlnYXRpb25PcmlnaW4oZGVidWdDb250ZXh0KTtcbiAgICAgIGxhc3ROYXZpZ2F0aW9uT3JpZ2luID0gb3JpZ2luO1xuICAgICAgY29uc3QgbG9jYXRpb25QYXlsb2FkID0gbm9ybWFsaXplTG9jYXRpb24obG9jYXRpb24pO1xuXG4gICAgICBjb25zdCBkZWJ1Z0NvbnRleHRPcmlnaW4gPSBkZWJ1Z0NvbnRleHQ/Lm9yaWdpbjtcbiAgICAgIGlmIChkZWJ1Z0NvbnRleHRPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgaGlzdG9yeURldGFpbHM6IHsgaGlzdG9yeUluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWJ1Z0NvbnRleHQ/Lmhpc3RvcnlJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBoaXN0b3J5RGV0YWlscyA9IHsgaGlzdG9yeUluZGV4OiBkZWJ1Z0NvbnRleHQuaGlzdG9yeUluZGV4IH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtYmFjaycgfHxcbiAgICAgICAgICBkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdwb3BzdGF0ZS1mb3J3YXJkJyB8fFxuICAgICAgICAgIGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ3BvcHN0YXRlLXVua25vd24nIHx8XG4gICAgICAgICAgZGVidWdDb250ZXh0T3JpZ2luID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBkaXJlY3Rpb246ICdiYWNrJyB8ICdmb3J3YXJkJyB8ICd1bmtub3duJyA9ICd1bmtub3duJztcbiAgICAgICAgICBpZiAoZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtYmFjaycpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9ICdiYWNrJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ3BvcHN0YXRlLWZvcndhcmQnKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSAnZm9yd2FyZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVtaXRFdmVudCh7XG4gICAgICAgICAgICBraW5kOiAncG9wc3RhdGUnLFxuICAgICAgICAgICAgc291cmNlOiBvcmlnaW4sXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25QYXlsb2FkLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgZGV0YWlsczogaGlzdG9yeURldGFpbHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2FtZVBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWUgPT09IGN1cnJlbnRFbnRyeS5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgIGNvbnN0IHNhbWVTZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2ggPT09IGN1cnJlbnRFbnRyeS5yYXdTZWFyY2g7XG5cbiAgICAgIGlmICghZm9yY2VSZXJlbmRlciAmJiBzYW1lUGF0aG5hbWUgJiYgc2FtZVNlYXJjaCkge1xuICAgICAgICAvLyBOb3RoaW5nIGNoYW5nZWQgdGhhdCB3ZSBjYXJlIGFib3V0XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dENvbnRleHQgPSByZXNvbHZlQ29udGV4dCgpO1xuXG4gICAgICAvLyBJZiBvbmx5IHRoZSBzZWFyY2ggY2hhbmdlZCB3ZSBzdGlsbCB3YW50IHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlLlxuICAgICAgLy8gS2VlcCB0aGUgZXhpc3RpbmcgcHJlcGFyZWRNYXRjaCB3aGVuIHBhdGhuYW1lIGlzIGlkZW50aWNhbCB0byBhdm9pZCByZWR1bmRhbnQgd29yay5cbiAgICAgIGxldCBuZXh0UHJlcGFyZWRNYXRjaCA9IGN1cnJlbnRFbnRyeS5wcmVwYXJlZE1hdGNoO1xuICAgICAgbGV0IG5leHRSb3V0ZSA9IGN1cnJlbnRFbnRyeS5yb3V0ZTtcblxuICAgICAgaWYgKCFzYW1lUGF0aG5hbWUpIHtcbiAgICAgICAgbmV4dFJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGxvY2F0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVjbGFyYXRpdmVSZWRpcmVjdCA9IG5leHRSb3V0ZT8ucm91dGUucmVkaXJlY3RUbztcbiAgICAgIGlmIChkZWNsYXJhdGl2ZVJlZGlyZWN0ICE9IG51bGwpIHtcbiAgICAgICAgcmVwbGFjZVdpdGhSZWRpcmVjdChcbiAgICAgICAgICBkZWNsYXJhdGl2ZVJlZGlyZWN0LFxuICAgICAgICAgIG5leHRSb3V0ZT8ucm91dGUucmVkaXJlY3RTdGF0dXMgPz8gMzAyLFxuICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCByYXcgcXVlcnkgb2JqZWN0IChiYXNpYyBhZ2dyZWdhdGlvbikgZnJvbSBsb2NhdGlvbi5zZWFyY2hcbiAgICAgIGNvbnN0IHF1ZXJ5U2NoZW1hID0gcmVhZEFjdGl2ZVF1ZXJ5U2NoZW1hKG5leHRSb3V0ZSk7XG4gICAgICBjb25zdCBwYXJzZWRTZWFyY2hTdGF0ZSA9IHBhcnNlU2VhcmNoU3RhdGUobG9jYXRpb24uc2VhcmNoLCBxdWVyeVNjaGVtYSk7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsdGVycyA9IG5vcm1hbGl6ZVBhZ2VGaWx0ZXJzKHBhcnNlZFNlYXJjaFN0YXRlLmZpbHRlcnMpO1xuXG4gICAgICBjb25zdCBzaG91bGRSZXByZXBhcmUgPSBzaG91bGRQcmVwYXJlT25OYXZpZ2F0aW9uKHtcbiAgICAgICAgc2FtZVBhdGhuYW1lLFxuICAgICAgICBzYW1lU2VhcmNoLFxuICAgICAgICByb3V0ZTogbmV4dFJvdXRlLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzaG91bGRSZXByZXBhcmUpIHtcbiAgICAgICAgY29uc3QgcHJlbG9hZGVkTWF0Y2ggPSBjb25zdW1lUHJlbG9hZGVkTWF0Y2goe1xuICAgICAgICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICBzZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgICBjb250ZXh0OiBuZXh0Q29udGV4dCxcbiAgICAgICAgICByb3V0ZTogbmV4dFJvdXRlLFxuICAgICAgICAgIHF1ZXJ5U2NoZW1hLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByZWxvYWRlZE1hdGNoICE9IG51bGwpIHtcbiAgICAgICAgICBuZXh0UHJlcGFyZWRNYXRjaCA9IHByZWxvYWRlZE1hdGNoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB1cGRhdGVJbnN0cnVtZW50YXRpb246XG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB2b2lkO1xuICAgICAgICAgICAgICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogUm91dGVyTG9jYXRpb25TbmFwc2hvdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKG5leHRSb3V0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB1cGRhdGVJbnN0cnVtZW50YXRpb24gPSB7XG4gICAgICAgICAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBlbWl0RXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzb3VyY2U6IG9yaWdpbixcbiAgICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uUGF5bG9hZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCByZXVzZVByZXBhcmVkU2VnbWVudHM6XG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1NlZ21lbnRzOiB0eXBlb2YgY3VycmVudEVudHJ5LnByZXBhcmVkTWF0Y2guc2VnbWVudHM7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNQYXJhbXM6IFBhcmFtRGF0YSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBzYW1lU2VhcmNoOiBib29sZWFuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoIXNhbWVQYXRobmFtZSkge1xuICAgICAgICAgICAgcmV1c2VQcmVwYXJlZFNlZ21lbnRzID0ge1xuICAgICAgICAgICAgICBwcmV2aW91c1NlZ21lbnRzOiBjdXJyZW50RW50cnkucHJlcGFyZWRNYXRjaC5zZWdtZW50cyxcbiAgICAgICAgICAgICAgcHJldmlvdXNQYXJhbXM6IGN1cnJlbnRFbnRyeS5yb3V0ZT8ucGFyYW1zLFxuICAgICAgICAgICAgICBzYW1lU2VhcmNoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV4dFByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2goXG4gICAgICAgICAgICAgIG5leHRSb3V0ZSxcbiAgICAgICAgICAgICAgYnVpbGRQcmVwYXJlUXVlcnlJbnB1dCh7XG4gICAgICAgICAgICAgICAgLi4ucGFyc2VkU2VhcmNoU3RhdGUsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogbm9ybWFsaXplZEZpbHRlcnMuZmlsdGVycyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHVwZGF0ZUluc3RydW1lbnRhdGlvbixcbiAgICAgICAgICAgICAgbmV4dENvbnRleHQsXG4gICAgICAgICAgICAgIHJldXNlUHJlcGFyZWRTZWdtZW50cyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJhd1F1ZXJ5OiBwYXJzZWRTZWFyY2hTdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBub3JtYWxpemVkRmlsdGVycy5maWx0ZXJzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVkaXJlY3QpKSB7XG4gICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGFjZVdpdGhSZWRpcmVjdChlcnJvci5yZWRpcmVjdFRvLCBlcnJvci5zdGF0dXNDb2RlLCBvcmlnaW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBwcmVwYXJlUmVkaXJlY3QgPSBuZXh0UHJlcGFyZWRNYXRjaC5zZWdtZW50c1xuICAgICAgICAgICAgLm1hcCgoc2VnbWVudCkgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gc2VnbWVudC5wcmVwYXJlZFJlc291cmNlPy5nZXRFcnJvcigpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5maW5kKChlcnJvcik6IGVycm9yIGlzIEh0dHBSZWRpcmVjdCA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBlcnJvciBpbnN0YW5jZW9mIEh0dHBSZWRpcmVjdDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChwcmVwYXJlUmVkaXJlY3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmVwbGFjZVdpdGhSZWRpcmVjdChcbiAgICAgICAgICAgICAgcHJlcGFyZVJlZGlyZWN0LnJlZGlyZWN0VG8sXG4gICAgICAgICAgICAgIHByZXBhcmVSZWRpcmVjdC5zdGF0dXNDb2RlLFxuICAgICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsb2FkU3RhdGVWZXJzaW9uICs9IDE7XG4gICAgICBjb25zdCBuZXh0RW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+ID0gd2l0aExvYWRTdGF0ZSh7XG4gICAgICAgIGZvcmNlUmVyZW5kZXI6IGZvcmNlUmVyZW5kZXIgfHwgKHNhbWVQYXRobmFtZSAmJiAhc2FtZVNlYXJjaCksXG4gICAgICAgIGxvY2F0aW9uLFxuICAgICAgICByb3V0ZTogbmV4dFJvdXRlLFxuICAgICAgICBwcmVwYXJlZE1hdGNoOiBuZXh0UHJlcGFyZWRNYXRjaCxcbiAgICAgICAgY29udGV4dDogbmV4dENvbnRleHQsXG4gICAgICAgIHJhd1NlYXJjaDogbG9jYXRpb24uc2VhcmNoLFxuICAgICAgICBxdWVyeTogcGFyc2VkU2VhcmNoU3RhdGUucXVlcnksXG4gICAgICAgIGZpbHRlcnM6IG5vcm1hbGl6ZWRGaWx0ZXJzLmZpbHRlcnMsXG4gICAgICAgIGZpbHRlckRpYWdub3N0aWNzOiBwYXJzZWRTZWFyY2hTdGF0ZS5maWx0ZXJEaWFnbm9zdGljcyxcbiAgICAgICAgYWN0aXZlUXVlcnlTY2hlbWE6IHF1ZXJ5U2NoZW1hLFxuICAgICAgICBzdGF0dXM6IHJlYWRSZW5kZXJTdGF0dXMobmV4dFJvdXRlKSxcbiAgICAgICAgbmF2aWdhdGlvbjogaGlzdG9yeS5uYXZpZ2F0aW9uLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIG5vcm1hbGl6YXRpb24gY2hhbmdlZCB0aGUgdHlwZWQgcXVlcnkgd2UgdHJpZ2dlciBhIHJlcGxhY2Ugd2l0aCBub3JtYWxpemVkIHNlYXJjaFxuICAgICAgaWYgKG5vcm1hbGl6ZWRGaWx0ZXJzLm5vcm1hbGl6ZWQgJiYgcXVlcnlTY2hlbWEgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkU2VhcmNoID0gYnVpbGRDb21iaW5lZFNlYXJjaCh7XG4gICAgICAgICAgZmlsdGVyczogbm9ybWFsaXplZEZpbHRlcnMuZmlsdGVycyxcbiAgICAgICAgICBxdWVyeTogcGFyc2VkU2VhcmNoU3RhdGUucXVlcnksXG4gICAgICAgICAgcXVlcnlTY2hlbWEsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAobm9ybWFsaXplZFNlYXJjaCAhPT0gbG9jYXRpb24uc2VhcmNoKSB7XG4gICAgICAgICAgbGV0IG5leHRTZWFyY2hTdHIgPSBub3JtYWxpemVkU2VhcmNoO1xuICAgICAgICAgIGlmICghbmV4dFNlYXJjaFN0ci5zdGFydHNXaXRoKCc/JykgJiYgbmV4dFNlYXJjaFN0ci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBuZXh0U2VhcmNoU3RyID0gYD8ke25leHRTZWFyY2hTdHJ9YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgZW1pdEhpc3RvcnlFdmVudChcbiAgICAgICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICAgICAgc2VhcmNoOiBuZXh0U2VhcmNoU3RyLFxuICAgICAgICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IHJlYXNvbjogJ3J1bnRpbWUtcGFnZS1jbGFtcCcgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHJ1bnRpbWVOb3JtYWxpemVDb250ZXh0OiBIaXN0b3J5RGVidWdDb250ZXh0ID0ge1xuICAgICAgICAgICAgb3JpZ2luOiAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgIHRyaWdnZXI6ICdub3JtYWxpemUnLFxuICAgICAgICAgIH07XG4gICAgICAgICAgaGlzdG9yeS5zZXQoe1xuICAgICAgICAgICAgcGF0aG5hbWU6IGxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgICAgc2VhcmNoOiBuZXh0U2VhcmNoU3RyLFxuICAgICAgICAgICAgaGFzaDogJycsXG4gICAgICAgICAgICBkZWJ1Z0NvbnRleHQ6IHJ1bnRpbWVOb3JtYWxpemVDb250ZXh0LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybjsgLy8gZWFybHk6IHN1YnNlcXVlbnQgc2V0IHdpbGwgdHJpZ2dlciByZXJ1blxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHB1Ymxpc2hFbnRyeSh7XG4gICAgICAgIGVudHJ5OiBuZXh0RW50cnksXG4gICAgICAgIHNvdXJjZTogb3JpZ2luLFxuICAgICAgICBlbWl0U25hcHNob3Q6IHRydWUsXG4gICAgICB9KTtcbiAgICB9LFxuICApO1xuXG4gIC8qKiBOb3JtYWxpemVzIHVzZXItcHJvdmlkZWQgcHJlbG9hZCB0YXJnZXRzIGludG8gY29uc2lzdGVudCBzdHJ1Y3R1cmVzLiAqL1xuICBmdW5jdGlvbiBub3JtYWxpemVQcmVsb2FkVGFyZ2V0KHRhcmdldDogUHJlbG9hZFRhcmdldCk6IHtcbiAgICBwYXRobmFtZTogc3RyaW5nO1xuICAgIHNlYXJjaDogc3RyaW5nO1xuICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgfSB7XG4gICAgbGV0IG5vcm1hbGl6ZWRQYXRobmFtZSA9IGhpc3RvcnkubG9jYXRpb24ucGF0aG5hbWU7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQucGF0aG5hbWUgPT09ICdzdHJpbmcnICYmIHRhcmdldC5wYXRobmFtZS5sZW5ndGggPiAwKSB7XG4gICAgICBub3JtYWxpemVkUGF0aG5hbWUgPSB0YXJnZXQucGF0aG5hbWU7XG4gICAgfVxuXG4gICAgbGV0IG5vcm1hbGl6ZWRTZWFyY2ggPSAnJztcbiAgICBpZiAodHlwZW9mIHRhcmdldC5zZWFyY2ggPT09ICdzdHJpbmcnKSB7XG4gICAgICBub3JtYWxpemVkU2VhcmNoID0gdGFyZ2V0LnNlYXJjaDtcbiAgICB9XG5cbiAgICBsZXQgbm9ybWFsaXplZFNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSA9ICdwcm9ncmFtbWF0aWMnO1xuICAgIGNvbnN0IG1hcHBlZFNvdXJjZSA9IG1hcE9yaWdpbih0YXJnZXQuc291cmNlKTtcbiAgICBpZiAobWFwcGVkU291cmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG5vcm1hbGl6ZWRTb3VyY2UgPSBtYXBwZWRTb3VyY2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBwYXRobmFtZTogbm9ybWFsaXplZFBhdGhuYW1lLFxuICAgICAgc2VhcmNoOiBub3JtYWxpemVkU2VhcmNoLFxuICAgICAgc291cmNlOiBub3JtYWxpemVkU291cmNlLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJlcGFyZWQgdmFsdWUgZm9yIHRoZSBmaXJzdCBhY3RpdmUgc2VnbWVudCBtYXRjaGluZyB0aGUgcHJvdmlkZWQgcGF0aC5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBSb3V0ZSBzZWdtZW50IHBhdGggb3IgZnVsbCBwYXRoIHRvIGluc3BlY3QuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRQcmVwYXJlZChwYXRoOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZW50cnkgPSBjdXJyZW50RW50cnk7XG4gICAgICBmb3IgKGNvbnN0IHByZXBhcmVkUm91dGUgb2YgZW50cnkucHJlcGFyZWRNYXRjaC5zZWdtZW50cykge1xuICAgICAgICBpZiAocHJlcGFyZWRSb3V0ZS5wYXRoID09PSBwYXRoIHx8IHByZXBhcmVkUm91dGUuZnVsbFBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICByZXR1cm4gcHJlcGFyZWRSb3V0ZS5wcmVwYXJlZFJlc291cmNlPy5nZXQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgZXZlcnkgYWN0aXZlIHByZXBhcmVkIHNlZ21lbnQgbWF0Y2hpbmcgdGhlIHByb3ZpZGVkIHBhdGguXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoIC0gUm91dGUgc2VnbWVudCBwYXRoIG9yIGZ1bGwgcGF0aCB0byBpbnNwZWN0LlxuICAgKi9cbiAgZnVuY3Rpb24gZ2V0UHJlcGFyZWRTZWdtZW50cyhwYXRoOiBzdHJpbmcpOiBQcmVwYXJlZFJvdXRlU2VnbWVudFNuYXBzaG90W10ge1xuICAgIHJldHVybiBjdXJyZW50RW50cnkucHJlcGFyZWRNYXRjaC5zZWdtZW50c1xuICAgICAgLmZpbHRlcigocHJlcGFyZWRSb3V0ZSkgPT4ge1xuICAgICAgICByZXR1cm4gcHJlcGFyZWRSb3V0ZS5wYXRoID09PSBwYXRoIHx8IHByZXBhcmVkUm91dGUuZnVsbFBhdGggPT09IHBhdGg7XG4gICAgICB9KVxuICAgICAgLm1hcCgocHJlcGFyZWRSb3V0ZSkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhdGg6IHByZXBhcmVkUm91dGUucGF0aCxcbiAgICAgICAgICBmdWxsUGF0aDogcHJlcGFyZWRSb3V0ZS5mdWxsUGF0aCxcbiAgICAgICAgICBzZWdtZW50S2V5OiBwcmVwYXJlZFJvdXRlLnNlZ21lbnRLZXksXG4gICAgICAgICAgcGFyYW1OYW1lczogcHJlcGFyZWRSb3V0ZS5wYXJhbU5hbWVzLFxuICAgICAgICAgIHNlZ21lbnRJbmRleDogcHJlcGFyZWRSb3V0ZS5zZWdtZW50SW5kZXgsXG4gICAgICAgICAgcm91dGVOb2RlOiBwcmVwYXJlZFJvdXRlLnJvdXRlTm9kZSxcbiAgICAgICAgICBwcmVwYXJlZFJlc291cmNlOiBwcmVwYXJlZFJvdXRlLnByZXBhcmVkUmVzb3VyY2UsXG4gICAgICAgICAgcHJlcGFyZWRIeWRyYXRpb246IHByZXBhcmVkUm91dGUucHJlcGFyZWRIeWRyYXRpb24sXG4gICAgICAgICAgcmVkaXJlY3RUbzogcHJlcGFyZWRSb3V0ZS5yZWRpcmVjdFRvLFxuICAgICAgICAgIHJlZGlyZWN0U3RhdHVzOiBwcmVwYXJlZFJvdXRlLnJlZGlyZWN0U3RhdHVzLFxuICAgICAgICAgIHJlc291cmNlUGFnZTogcHJlcGFyZWRSb3V0ZS5yZXNvdXJjZVBhZ2UsXG4gICAgICAgICAgc3VzcGVuc2VCb3VuZGFyeTogcHJlcGFyZWRSb3V0ZS5zdXNwZW5zZUJvdW5kYXJ5LFxuICAgICAgICAgIGZhbGxiYWNrOiBwcmVwYXJlZFJvdXRlLmZhbGxiYWNrLFxuICAgICAgICAgIGhpZ2hsaWdodElkOiBwcmVwYXJlZFJvdXRlLmhpZ2hsaWdodElkLFxuICAgICAgICAgIHF1ZXJ5U2NoZW1hOiBwcmVwYXJlZFJvdXRlLnF1ZXJ5U2NoZW1hLFxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgcXVlcnkgc2NoZW1hIGdvdmVybmluZyBhIG5hdmlnYXRpb24gZGVzdGluYXRpb24uICovXG4gIGZ1bmN0aW9uIHJlc29sdmVEZXN0aW5hdGlvblF1ZXJ5U2NoZW1hKHBhdGhuYW1lOiBzdHJpbmcpOiBSb3V0ZXJRdWVyeVNjaGVtYSB7XG4gICAgY29uc3QgZGVzdGluYXRpb25Sb3V0ZSA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAuLi5oaXN0b3J5LmxvY2F0aW9uLFxuICAgICAgcGF0aG5hbWUsXG4gICAgfSk7XG4gICAgaWYgKGRlc3RpbmF0aW9uUm91dGUgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRFbnRyeS5hY3RpdmVRdWVyeVNjaGVtYTtcbiAgICB9XG4gICAgcmV0dXJuIHJlYWRBY3RpdmVRdWVyeVNjaGVtYShkZXN0aW5hdGlvblJvdXRlKTtcbiAgfVxuXG4gIC8qKiBTZXJpYWxpemVzIG5hdmlnYXRpb24gc3RhdGUgd2l0aCB0aGUgZGVzdGluYXRpb24gcm91dGUgc2NoZW1hLiAqL1xuICBmdW5jdGlvbiBidWlsZE5hdmlnYXRpb25TZWFyY2goaW5wdXQ6IHtcbiAgICBwYXRobmFtZTogc3RyaW5nO1xuICAgIHF1ZXJ5PzogVW5rbm93blF1ZXJ5U2hhcGU7XG4gICAgZmlsdGVycz86IFVua25vd25GaWx0ZXJzO1xuICB9KTogc3RyaW5nIHtcbiAgICBjb25zdCBxdWVyeVNjaGVtYSA9IHJlc29sdmVEZXN0aW5hdGlvblF1ZXJ5U2NoZW1hKGlucHV0LnBhdGhuYW1lKTtcbiAgICByZXR1cm4gYnVpbGREZXN0aW5hdGlvblNlYXJjaCh7XG4gICAgICBmaWx0ZXJzOiBpbnB1dC5maWx0ZXJzLFxuICAgICAgcXVlcnk6IGlucHV0LnF1ZXJ5LFxuICAgICAgcXVlcnlTY2hlbWEsXG4gICAgfSk7XG4gIH1cblxuICAvLyBUaGUgcm91dGVyIGNvbnRleHQgb2JqZWN0IHRoYXQgd2lsbCBiZSBwYXNzZWQgdG8gUmVhY3QgQ29udGV4dFxuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIGJ1aWxkU2VhcmNoKHtcbiAgICAgIHBhdGhuYW1lLFxuICAgICAgcXVlcnksXG4gICAgICBmaWx0ZXJzLFxuICAgIH06IHtcbiAgICAgIHBhdGhuYW1lPzogc3RyaW5nO1xuICAgICAgcXVlcnk/OiBVbmtub3duUXVlcnlTaGFwZTtcbiAgICAgIGZpbHRlcnM/OiBVbmtub3duRmlsdGVycztcbiAgICB9KSB7XG4gICAgICByZXR1cm4gYnVpbGROYXZpZ2F0aW9uU2VhcmNoKHtcbiAgICAgICAgcGF0aG5hbWU6IHBhdGhuYW1lID8/IGN1cnJlbnRFbnRyeS5sb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIGhpc3RvcnksXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRFbnRyeTtcbiAgICB9LFxuICAgIHByZWxvYWRDb2RlKHRhcmdldCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVByZWxvYWRUYXJnZXQodGFyZ2V0KTtcbiAgICAgIGVtaXRQcmVsb2FkRXZlbnQoXG4gICAgICAgICdjb2RlJyxcbiAgICAgICAgbm9ybWFsaXplZC5wYXRobmFtZSxcbiAgICAgICAgbm9ybWFsaXplZC5zZWFyY2gsXG4gICAgICAgIG5vcm1hbGl6ZWQuc291cmNlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi5oaXN0b3J5LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZTogbm9ybWFsaXplZC5wYXRobmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICBpZiAobWF0Y2hlcyA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbWF0Y2hlcy5yb3V0ZS5yb3V0ZXMuZm9yRWFjaCgoeyByZXNvdXJjZVBhZ2UgfSkgPT4ge1xuICAgICAgICBpZiAocmVzb3VyY2VQYWdlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgICByZXNvdXJjZVBhZ2UubG9hZCgpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBwcmVsb2FkKHRhcmdldCkge1xuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IG5vcm1hbGl6ZVByZWxvYWRUYXJnZXQodGFyZ2V0KTtcbiAgICAgIGVtaXRQcmVsb2FkRXZlbnQoXG4gICAgICAgICdmdWxsJyxcbiAgICAgICAgbm9ybWFsaXplZC5wYXRobmFtZSxcbiAgICAgICAgbm9ybWFsaXplZC5zZWFyY2gsXG4gICAgICAgIG5vcm1hbGl6ZWQuc291cmNlLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IG1hdGNoZXMgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgICAuLi5oaXN0b3J5LmxvY2F0aW9uLFxuICAgICAgICBwYXRobmFtZTogbm9ybWFsaXplZC5wYXRobmFtZSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbG9jYXRpb25TbmFwc2hvdDogUm91dGVyTG9jYXRpb25TbmFwc2hvdCA9IHtcbiAgICAgICAgcGF0aG5hbWU6IG5vcm1hbGl6ZWQucGF0aG5hbWUsXG4gICAgICAgIHNlYXJjaDogbm9ybWFsaXplZC5zZWFyY2gsXG4gICAgICAgIGhhc2g6ICcnLFxuICAgICAgfTtcbiAgICAgIGxldCBpbnN0cnVtZW50YXRpb246XG4gICAgICAgIHwge1xuICAgICAgICAgICAgZW1pdDogKGV2ZW50OiBSb3V0ZXJFdmVudCkgPT4gdm9pZDtcbiAgICAgICAgICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgICAgICAgICAgIGxvY2F0aW9uOiBSb3V0ZXJMb2NhdGlvblNuYXBzaG90O1xuICAgICAgICAgIH1cbiAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAobWF0Y2hlcyAhPSBudWxsKSB7XG4gICAgICAgIGluc3RydW1lbnRhdGlvbiA9IHtcbiAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB7XG4gICAgICAgICAgICBlbWl0RXZlbnQoZXZlbnQpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc291cmNlOiBub3JtYWxpemVkLnNvdXJjZSxcbiAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25TbmFwc2hvdCxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHByZWxvYWRDb250ZXh0ID0gcmVzb2x2ZUNvbnRleHQoKTtcbiAgICAgIGNvbnN0IHByZWxvYWRRdWVyeVNjaGVtYSA9IHJlYWRBY3RpdmVRdWVyeVNjaGVtYShtYXRjaGVzKTtcbiAgICAgIGNvbnN0IHByZWxvYWRTZWFyY2hTdGF0ZSA9IHBhcnNlU2VhcmNoU3RhdGUoXG4gICAgICAgIG5vcm1hbGl6ZWQuc2VhcmNoLFxuICAgICAgICBwcmVsb2FkUXVlcnlTY2hlbWEsXG4gICAgICApO1xuICAgICAgY29uc3QgcHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChcbiAgICAgICAgbWF0Y2hlcyxcbiAgICAgICAgYnVpbGRQcmVwYXJlUXVlcnlJbnB1dChwcmVsb2FkU2VhcmNoU3RhdGUpLFxuICAgICAgICBpbnN0cnVtZW50YXRpb24sXG4gICAgICAgIHByZWxvYWRDb250ZXh0LFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHtcbiAgICAgICAgICByYXdRdWVyeTogcHJlbG9hZFNlYXJjaFN0YXRlLnF1ZXJ5LFxuICAgICAgICAgIGZpbHRlcnM6IHByZWxvYWRTZWFyY2hTdGF0ZS5maWx0ZXJzLFxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIGxvYWRQcmVwYXJlZE1hdGNoUmVzb3VyY2VzKHByZXBhcmVkTWF0Y2gpO1xuICAgICAgY29uc3QgcHJlbG9hZEtleSA9IGJ1aWxkUHJlbG9hZGVkTWF0Y2hLZXkoXG4gICAgICAgIG5vcm1hbGl6ZWQucGF0aG5hbWUsXG4gICAgICAgIG5vcm1hbGl6ZWQuc2VhcmNoLFxuICAgICAgKTtcbiAgICAgIHByZWxvYWRlZE1hdGNoZXMuc2V0KHByZWxvYWRLZXksIHtcbiAgICAgICAga2V5OiBwcmVsb2FkS2V5LFxuICAgICAgICBjb250ZXh0OiBwcmVsb2FkQ29udGV4dCxcbiAgICAgICAgcm91dGU6IG1hdGNoZXMsXG4gICAgICAgIHByZXBhcmVkTWF0Y2gsXG4gICAgICAgIHF1ZXJ5U2NoZW1hOiBwcmVsb2FkUXVlcnlTY2hlbWEsXG4gICAgICAgIHNlYXJjaDogbm9ybWFsaXplZC5zZWFyY2gsXG4gICAgICB9KTtcbiAgICB9LFxuICAgIHN1YnNjcmliZShjYWxsYmFjaykge1xuICAgICAgbmV4dElkICs9IDE7XG4gICAgICBjb25zdCBpZCA9IG5leHRJZDtcbiAgICAgIC8qKiBSZW1vdmVzIHRoZSBzdWJzY3JpYmVyIHByZXZpb3VzbHkgcmVnaXN0ZXJlZCB2aWEgc3Vic2NyaWJlLiAqL1xuICAgICAgZnVuY3Rpb24gZGlzcG9zZUNhbGxiYWNrKCkge1xuICAgICAgICBzdWJzY3JpYmVycy5kZWxldGUoaWQpO1xuICAgICAgfVxuICAgICAgc3Vic2NyaWJlcnMuc2V0KGlkLCBjYWxsYmFjayk7XG4gICAgICByZXR1cm4gZGlzcG9zZUNhbGxiYWNrO1xuICAgIH0sXG4gICAgbmF2aWdhdGUoe1xuICAgICAgcGF0aG5hbWUsXG4gICAgICBxdWVyeSxcbiAgICAgIGZpbHRlcnM6IG5hdkZpbHRlcnMsXG4gICAgICBoYXNoLFxuICAgICAgcmVwbGFjZSxcbiAgICB9OiB7XG4gICAgICBwYXRobmFtZT86IHN0cmluZztcbiAgICAgIHF1ZXJ5PzogVW5rbm93blF1ZXJ5U2hhcGU7XG4gICAgICBmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnM7XG4gICAgICBoYXNoPzogc3RyaW5nO1xuICAgICAgcmVwbGFjZT86IGJvb2xlYW47XG4gICAgfSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRFbnRyeTtcbiAgICAgIGxldCB0YXJnZXRQYXRobmFtZSA9IHBhdGhuYW1lO1xuICAgICAgdGFyZ2V0UGF0aG5hbWUgPz89IGN1cnJlbnQubG9jYXRpb24ucGF0aG5hbWU7XG5cbiAgICAgIGNvbnN0IGZpbHRlcnNJbnB1dCA9IG5hdkZpbHRlcnMgPz8gY3VycmVudC5maWx0ZXJzO1xuICAgICAgY29uc3QgcmF3UXVlcnlJbnB1dDogVW5rbm93blF1ZXJ5U2hhcGUgfCBSYXdRdWVyeSB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHF1ZXJ5ID8/IGN1cnJlbnQucXVlcnk7XG4gICAgICBjb25zdCBzZWFyY2ggPSBidWlsZE5hdmlnYXRpb25TZWFyY2goe1xuICAgICAgICBwYXRobmFtZTogdGFyZ2V0UGF0aG5hbWUsXG4gICAgICAgIGZpbHRlcnM6IGZpbHRlcnNJbnB1dCxcbiAgICAgICAgcXVlcnk6IHJhd1F1ZXJ5SW5wdXQsXG4gICAgICB9KTtcbiAgICAgIGxldCBjdXJyZW50SHJlZjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSBjdXJyZW50SHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgY29uc3QgcmVzb2x2ZWREZXN0aW5hdGlvbiA9IHJlc29sdmVSb3V0ZXJEZXN0aW5hdGlvbih7XG4gICAgICAgIGRlc3RpbmF0aW9uOiB7XG4gICAgICAgICAgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLFxuICAgICAgICAgIHNlYXJjaCxcbiAgICAgICAgICBoYXNoOiBoYXNoID8/IGN1cnJlbnQubG9jYXRpb24uaGFzaCxcbiAgICAgICAgfSxcbiAgICAgICAgY3VycmVudEhyZWYsXG4gICAgICAgIGJ1aWxkU2VhcmNoOiBidWlsZE5hdmlnYXRpb25TZWFyY2gsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uT2JqID0ge1xuICAgICAgICBwYXRobmFtZTogcmVzb2x2ZWREZXN0aW5hdGlvbi5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiByZXNvbHZlZERlc3RpbmF0aW9uLnNlYXJjaCxcbiAgICAgICAgaGFzaDogcmVzb2x2ZWREZXN0aW5hdGlvbi5oYXNoLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSA9ICdwcm9ncmFtbWF0aWMnO1xuICAgICAgY29uc3QgZGVidWdDb250ZXh0OiBIaXN0b3J5RGVidWdDb250ZXh0ID0ge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHRyaWdnZXI6ICdwcm9ncmFtbWF0aWMnLFxuICAgICAgfTtcblxuICAgICAgaWYgKHJlcGxhY2UgPT09IHRydWUpIHtcbiAgICAgICAgZW1pdEhpc3RvcnlFdmVudCgncmVwbGFjZScsIG9yaWdpbiwgbG9jYXRpb25PYmosIHtcbiAgICAgICAgICB0cmlnZ2VyOiAncHJvZ3JhbW1hdGljJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgICAuLi5sb2NhdGlvbk9iaixcbiAgICAgICAgICBkZWJ1Z0NvbnRleHQsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdEhpc3RvcnlFdmVudCgncHVzaCcsIG9yaWdpbiwgbG9jYXRpb25PYmosIHtcbiAgICAgICAgICB0cmlnZ2VyOiAncHJvZ3JhbW1hdGljJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGhpc3RvcnkucHVzaCh7XG4gICAgICAgICAgLi4ubG9jYXRpb25PYmosXG4gICAgICAgICAgZGVidWdDb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFByZXBhcmVkLFxuICAgIGdldFByZXBhcmVkU2VnbWVudHMsXG4gIH0gYXMgQ3JlYXRlUm91dGVyUmV0dXJuPFRDb250ZXh0LCBSPlsnY29udGV4dCddO1xuXG4gIC8qKiBSZWxlYXNlcyByb3V0ZXIgcmVzb3VyY2VzIGFuZCBkZXRhY2hlcyBhbGwgaW5zdHJ1bWVudGF0aW9ucy4gKi9cbiAgZnVuY3Rpb24gY2xlYW51cCgpOiB2b2lkIHtcbiAgICBpZiAocm91dGVyRGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcm91dGVyRGlzcG9zZWQgPSB0cnVlO1xuICAgIGRpc3Bvc2VIaXN0b3J5KCk7XG4gICAgaGlzdG9yeS5kaXNwb3NlKCk7XG4gICAgc3Vic2NyaWJlcnMuY2xlYXIoKTtcbiAgICByZWdpc3RyeS5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBSZXR1cm4gYm90aCB0aGUgY29udGV4dCBvYmplY3QgYW5kIGEgY2xlYW51cCBmdW5jdGlvblxuICByZXR1cm4geyBjb250ZXh0LCBjbGVhbnVwIH07XG59XG4iXX0=
|
|
980
|
+
export default function createRouter(routes, options = {}) {
|
|
981
|
+
const registry = createInstrumentationRegistry(options.instrumentations ?? []);
|
|
982
|
+
let history;
|
|
983
|
+
try {
|
|
984
|
+
history = new BrowserHistory();
|
|
985
|
+
return initializeRouter(routes, options, history, registry);
|
|
986
|
+
}
|
|
987
|
+
catch (error) {
|
|
988
|
+
history?.dispose();
|
|
989
|
+
registry.dispose();
|
|
990
|
+
throw error;
|
|
991
|
+
}
|
|
992
|
+
}
|
|
993
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlUm91dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3JvdXRpbmcvY3JlYXRlUm91dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzVELE9BQU8sbUJBQW1CLE1BQU0saUNBQWlDLENBQUM7QUFvQmxFLE9BQU8sRUFDTCw2QkFBNkIsR0FPOUIsTUFBTSx1Q0FBdUMsQ0FBQztBQUUvQyxPQUFPLEVBQ0wsd0JBQXdCLEdBR3pCLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsd0JBQXdCLEdBQ3pCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDcEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFDTCxnQkFBZ0IsR0FHakIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQW9CN0QsU0FBUyx5QkFBeUIsQ0FBQyxLQUlsQztJQUNDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDeEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDckIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztJQUN0RCxPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNsQyxPQUFPLEtBQUssQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsS0FBSyxNQUFNLENBQUM7SUFDekUsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBc0VELFNBQVMsZ0JBQWdCLENBQ3ZCLE1BQTRCLEVBQzVCLE9BQXNDLEVBQ3RDLE9BQXVCLEVBQ3ZCLFFBQWlDO0lBRWpDLElBQUksYUFBbUMsQ0FBQztJQUN4QyxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxPQUFPLE9BQU8sQ0FBQyxPQUFPLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDMUMsYUFBYSxHQUFJLE9BQU8sQ0FBQyxPQUEwQixFQUFFLENBQUM7UUFDeEQsQ0FBQzthQUFNLENBQUM7WUFDTixhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsY0FBYztRQUNyQixJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFLENBQUM7WUFDL0IsT0FBTyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDOUIsQ0FBQztRQUNELE9BQU8sYUFBeUIsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSx1QkFBMkQsQ0FBQztJQUNoRSxJQUFJLG9CQUFvQixHQUEyQixVQUFVLENBQUM7SUFDOUQsSUFBSSxvQkFBb0IsR0FHYixJQUFJLENBQUM7SUFDaEIsSUFBSSxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQzNCLElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQztJQUN0QixJQUFJLGdCQUFnQixHQUFHLENBQUMsQ0FBQztJQUN6QixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxFQUE0QyxDQUFDO0lBSzdFLFNBQVMsaUJBQWlCLENBQUMsUUFJMUI7UUFDQyxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxPQUFPLFFBQVEsQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDMUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLE9BQU8sUUFBUSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN4QyxXQUFXLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUNoQyxDQUFDO1FBQ0QsSUFBSSxTQUFTLEdBQUcsRUFBRSxDQUFDO1FBQ25CLElBQUksT0FBTyxRQUFRLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLFNBQVMsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQzVCLENBQUM7UUFDRCxPQUFPO1lBQ0wsUUFBUSxFQUFFLGFBQWE7WUFDdkIsTUFBTSxFQUFFLFdBQVc7WUFDbkIsSUFBSSxFQUFFLFNBQVM7U0FDaEIsQ0FBQztJQUNKLENBQUM7SUFHRCxTQUFTLFNBQVMsQ0FBQyxLQUFrQjtRQUNuQyxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLE9BQU87UUFDVCxDQUFDO1FBQ0QsUUFBUSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBS0QsU0FBUyxTQUFTLENBQUMsR0FBWTtRQUM3QixJQUFJLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbEMsT0FBTyxHQUFHLENBQUM7UUFDYixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQU1ELFNBQVMsdUJBQXVCLENBQzlCLE9BQW9DO1FBRXBDLE1BQU0sY0FBYyxHQUFHLHVCQUF1QixDQUFDO1FBQy9DLElBQUksTUFBMEMsQ0FBQztRQUUvQyxNQUFNLGFBQWEsR0FBRyxPQUFPLEVBQUUsTUFBTSxDQUFDO1FBQ3RDLElBQUksYUFBYSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sR0FBRyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELE1BQU0sS0FBSyxjQUFjLENBQUM7UUFDMUIsTUFBTSxLQUFLLFVBQVUsQ0FBQztRQUN0Qix1QkFBdUIsR0FBRyxTQUFTLENBQUM7UUFDcEMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQU1ELFNBQVMsb0JBQW9CLENBQzNCLEtBQTZDO1FBRTdDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ2pDLElBQUksWUFBWSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM5QyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMvQixNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsSUFBSSxTQUFTLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQzVCLE1BQU0sZUFBZSxHQUFHLFNBQW9DLENBQUM7Z0JBQzdELE1BQU0sU0FBUyxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFLENBQUM7b0JBQ2xDLE9BQU8sU0FBUyxDQUFDO2dCQUNuQixDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN6QyxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBR0QsU0FBUyxxQkFBcUIsQ0FDNUIsS0FBMEM7UUFFMUMsT0FBTyxLQUFLLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUM7SUFDakQsQ0FBQztJQUdELFNBQVMsZ0JBQWdCLENBQ3ZCLEtBQTBDO1FBRTFDLE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxJQUFJLEdBQUcsQ0FBQztJQUNuRCxDQUFDO0lBR0QsU0FBUyxhQUFhLENBQUMsT0FBd0I7UUFDN0MsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDcEIsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDN0IsSUFBSSxPQUFPLE9BQU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDO1FBQ0QsSUFDRSxPQUFPLElBQUksSUFBSTtZQUNmLE9BQU8sT0FBTyxLQUFLLFFBQVE7WUFDM0IsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztZQUN2QixPQUFRLE9BQTRCLENBQUMsRUFBRSxLQUFLLFFBQVEsRUFDcEQsQ0FBQztZQUNELE9BQVEsT0FBMEIsQ0FBQyxFQUFFLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFHRCxTQUFTLG9CQUFvQixDQUFDLE9BQXdCO1FBSXBELE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxJQUFJLFNBQVMsSUFBSSxJQUFJLElBQUksU0FBUyxJQUFJLENBQUMsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7WUFDM0QsT0FBTztnQkFDTCxPQUFPO2dCQUNQLFVBQVUsRUFBRSxLQUFLO2FBQ2xCLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTztZQUNMLE9BQU8sRUFBRTtnQkFDUCxHQUFHLE9BQU87Z0JBQ1YsSUFBSSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRTthQUNoQjtZQUNELFVBQVUsRUFBRSxJQUFJO1NBQ2pCLENBQUM7SUFDSixDQUFDO0lBR0QsU0FBUyxzQkFBc0IsQ0FBQyxLQUF3QjtRQUN0RCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDckIsQ0FBQztJQUdELFNBQVMsYUFBYSxDQUNwQixLQUF3RTtRQUV4RSxNQUFNLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxHQUFHLGtCQUFrQixDQUN2RCxLQUFLLENBQUMsYUFBYSxFQUNuQixnQkFBZ0IsQ0FDakIsQ0FBQztRQUNGLE9BQU87WUFDTCxHQUFHLEtBQUs7WUFDUixlQUFlO1lBQ2YsU0FBUztTQUNWLENBQUM7SUFDSixDQUFDO0lBR0QsU0FBUyxxQkFBcUIsQ0FDNUIsT0FBOEIsRUFDOUIsSUFBMkI7UUFFM0IsT0FBTyxDQUNMLE9BQU8sQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLE1BQU07WUFDOUIsT0FBTyxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWTtZQUMxQyxPQUFPLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxhQUFhLENBQzdDLENBQUM7SUFDSixDQUFDO0lBR0QsU0FBUyxrQkFBa0IsQ0FDekIsS0FBaUM7UUFFakMsTUFBTSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUNwRSxPQUFPO2dCQUNMLElBQUksRUFBRSxPQUFPLENBQUMsSUFBSTtnQkFDbEIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO2dCQUMxQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7Z0JBQzlCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDOUIsWUFBWSxFQUFFLE9BQU8sQ0FBQyxZQUFZO2dCQUNsQyxTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVM7Z0JBQzVCLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7Z0JBQzFDLGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7Z0JBQzVDLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtnQkFDdEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO2dCQUM5QixjQUFjLEVBQUUsT0FBTyxDQUFDLGNBQWM7Z0JBQ3RDLFlBQVksRUFBRSxPQUFPLENBQUMsWUFBWTtnQkFDbEMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtnQkFDMUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRO2dCQUMxQixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVc7Z0JBQ2hDLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztnQkFDaEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxTQUFTLEVBQUU7YUFDdEQsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNMLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQzNDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixTQUFTLEVBQUUsb0JBQW9CLENBQUMsS0FBSyxDQUFDO1lBQ3RDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU07WUFDM0IsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLGFBQWEsRUFBRTtnQkFDYixRQUFRLEVBQUUsZ0JBQWdCO2FBQzNCO1lBQ0QsZUFBZSxFQUFFLEtBQUssQ0FBQyxlQUFlO1lBQ3RDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztZQUMxQixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQjtZQUMxQyxpQkFBaUIsRUFBRSxLQUFLLENBQUMsaUJBQWlCO1lBQzFDLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtZQUNsQyxNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07U0FDckIsQ0FBQztJQUNKLENBQUM7SUFHRCxTQUFTLFdBQVcsQ0FBQyxLQUFpQztRQUNwRCxRQUFRLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBR0QsU0FBUyxlQUFlLENBQ3RCLElBQTRCLEVBQzVCLFFBQWdCLEVBQ2hCLE1BQU0sR0FBRyxFQUFFO1FBRVgsT0FBTyxHQUFHLElBQUksSUFBSSxRQUFRLEdBQUcsTUFBTSxFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUdELFNBQVMsc0JBQXNCLENBQUMsUUFBZ0IsRUFBRSxNQUFNLEdBQUcsRUFBRTtRQUMzRCxPQUFPLEdBQUcsUUFBUSxHQUFHLE1BQU0sRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFHRCxTQUFTLGlCQUFpQixDQUN4QixJQUF1QixFQUN2QixLQUF3QjtRQUV4QixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNqQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoQyxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLElBQUksS0FBSyxLQUFLLENBQUM7SUFDeEIsQ0FBQztJQUdELFNBQVMsMEJBQTBCLENBQ2pDLElBQTBDLEVBQzFDLEtBQTJDO1FBRTNDLElBQUksSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFLENBQUM7WUFDbEMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1FBQ3JELElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUMsT0FBTyxLQUFLLENBQUM7UUFDZixDQUFDO1FBQ0QsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUN4QyxPQUFPLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksaUJBQWlCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUMzRSxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxTQUFTLGdCQUFnQixDQUN2QixJQUFxQixFQUNyQixRQUFnQixFQUNoQixNQUFjLEVBQ2QsTUFBOEI7UUFFOUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3BELE1BQU0sZ0JBQWdCLEdBQ3BCLG9CQUFvQixLQUFLLElBQUk7WUFDN0Isb0JBQW9CLENBQUMsR0FBRyxLQUFLLEdBQUc7WUFDaEMsR0FBRyxHQUFHLG9CQUFvQixDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFNUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDdEIsU0FBUyxDQUFDO2dCQUNSLElBQUksRUFBRSxTQUFTO2dCQUNmLE1BQU07Z0JBQ04sU0FBUyxFQUFFLEdBQUc7Z0JBQ2QsUUFBUSxFQUFFLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUM7Z0JBQzdDLGNBQWMsRUFBRSxRQUFRO2dCQUN4QixJQUFJO2FBQ0wsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELG9CQUFvQixHQUFHLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztJQUNqRCxDQUFDO0lBR0QsU0FBUyxnQkFBZ0IsQ0FDdkIsTUFBZ0MsRUFDaEMsTUFBOEIsRUFDOUIsUUFBOEQsRUFDOUQsT0FBaUM7UUFFakMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDO1FBQ2pDLFNBQVMsQ0FBQztZQUNSLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTTtZQUNOLE1BQU07WUFDTixTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNyQixRQUFRLEVBQUUsaUJBQWlCLENBQUMsUUFBUSxDQUFDO1lBQ3JDLE9BQU87U0FDUixDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsTUFBTSxVQUFVLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBR3ZDLFNBQVMsbUJBQW1CLENBQUMsS0FJNUI7UUFDQyxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUU7WUFDbkQsR0FBRyxPQUFPLENBQUMsUUFBUTtZQUNuQixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7U0FDekIsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxzQkFBc0IsQ0FBQztZQUM1QixPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87WUFDdEIsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLO1lBQ2xCLFdBQVcsRUFBRSxxQkFBcUIsQ0FBQyxnQkFBZ0IsQ0FBQztTQUNyRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsU0FBUyxtQkFBbUIsQ0FDMUIsVUFBa0IsRUFDbEIsTUFBNEIsRUFDNUIsTUFBOEI7UUFFOUIsTUFBTSxlQUFlLEdBQUcsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVELE1BQU0sV0FBVyxHQUFHLHVCQUF1QixlQUFlLENBQUMsUUFBUSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RILE1BQU0sV0FBVyxHQUFHLHdCQUF3QixDQUFDO1lBQzNDLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLFdBQVc7WUFDWCxXQUFXLEVBQUUsbUJBQW1CO1NBQ2pDLENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHO1lBQ2IsUUFBUSxFQUFFLFdBQVcsQ0FBQyxRQUFRO1lBQzlCLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtZQUMxQixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUk7U0FDdkIsQ0FBQztRQUNGLE1BQU0sYUFBYSxHQUFHLEdBQUcsZUFBZSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRyxNQUFNLFVBQVUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDdEUsSUFBSSxhQUFhLEtBQUssVUFBVSxFQUFFLENBQUM7WUFDakMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsVUFBVSxFQUFFLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBQ0QsZ0JBQWdCLENBQUMsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUU7WUFDMUMsT0FBTyxFQUFFLFVBQVU7WUFDbkIsY0FBYyxFQUFFLE1BQU07U0FDdkIsQ0FBQyxDQUFDO1FBRUgsYUFBYSxJQUFJLENBQUMsQ0FBQztRQUNuQixPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ1YsR0FBRyxNQUFNO1lBQ1QsWUFBWSxFQUFFO2dCQUNaLE1BQU0sRUFBRSxNQUFNO2dCQUNkLE9BQU8sRUFBRSxVQUFVO2FBQ3BCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUdELFNBQVMsMEJBQTBCLENBQ2pDLG1CQUFnRTtRQUVoRSxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDN0MsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBRW5DLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNoQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsU0FBUyxxQkFBcUIsQ0FBQyxLQU05QjtRQUNDLE1BQU0sR0FBRyxHQUFHLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QyxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdCLElBQ0UsTUFBTSxDQUFDLE9BQU8sS0FBSyxLQUFLLENBQUMsT0FBTztZQUNoQyxDQUFDLDBCQUEwQixDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN0RCxNQUFNLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxXQUFXO1lBQ3hDLE1BQU0sQ0FBQyxNQUFNLEtBQUssS0FBSyxDQUFDLE1BQU0sRUFDOUIsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ25CLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUM7SUFDOUIsQ0FBQztJQUdELE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUUsTUFBTSwwQkFBMEIsR0FBRyxtQkFBbUIsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQ3pFLE1BQU0sZ0NBQWdDLEdBQ3BDLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxjQUFjLElBQUksR0FBRyxDQUFDO0lBQ25ELElBQUksMEJBQTBCLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkMsbUJBQW1CLENBQ2pCLDBCQUEwQixFQUMxQixnQ0FBZ0MsRUFDaEMsVUFBVSxDQUNYLENBQUM7SUFDSixDQUFDO0lBQ0QsSUFBSSxLQUFLLEdBQUcsbUJBQW1CLENBQUM7SUFDaEMsSUFBSSwwQkFBMEIsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN2QyxLQUFLLEdBQUcsSUFBSSxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sb0JBQW9CLEdBQUcscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUQsTUFBTSxrQkFBa0IsR0FBRyxnQkFBZ0IsQ0FDekMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQ3ZCLG9CQUFvQixDQUNyQixDQUFDO0lBQ0YsTUFBTSx3QkFBd0IsR0FBRyxvQkFBb0IsQ0FDbkQsa0JBQWtCLENBQUMsT0FBTyxDQUMzQixDQUFDO0lBQ0YsTUFBTSx1QkFBdUIsR0FBRyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEUsSUFBSSxlQUF5RCxDQUFDO0lBQzlELElBQUksT0FBTyxDQUFDLGlCQUFpQixJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUMzQyxNQUFNLGVBQWUsR0FBWSxRQUFRLENBQUMsT0FBTyxDQUFDO1FBQ2xELE1BQU0sZ0JBQWdCLEdBQVksUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNwRCxJQUFJLGVBQWUsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUM5RCxNQUFNLElBQUksS0FBSyxDQUFDLHdDQUF3QyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELE1BQU0sZ0JBQWdCLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlELElBQ0UsZ0JBQWdCLENBQUMsUUFBUSxLQUFLLHVCQUF1QixDQUFDLFFBQVE7WUFDOUQsZ0JBQWdCLENBQUMsTUFBTSxLQUFLLHVCQUF1QixDQUFDLE1BQU07WUFDMUQsZ0JBQWdCLENBQUMsSUFBSSxLQUFLLHVCQUF1QixDQUFDLElBQUksRUFDdEQsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsK0RBQStELENBQ2hFLENBQUM7UUFDSixDQUFDO1FBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQTJCLENBQUM7UUFDbEQsZUFBZSxHQUFHLE1BQU0sQ0FBQztRQUN6QixNQUFNLFFBQVEsR0FBRyxnQkFBNkIsQ0FBQztRQUMvQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDM0IsSUFDRSxPQUFPLE9BQU8sS0FBSyxRQUFRO2dCQUMzQixPQUFPLElBQUksSUFBSTtnQkFDZixDQUFDLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxFQUN4QixDQUFDO2dCQUNELE1BQU0sSUFBSSxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQztZQUM1RCxDQUFDO1lBQ0QsTUFBTSxhQUFhLEdBQUcsT0FBa0MsQ0FBQztZQUN6RCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDO1lBQ3JDLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsS0FBSyxFQUFFLEVBQUUsQ0FBQztnQkFDeEQsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUN2RSxDQUFDO1lBQ0QscUJBQXFCLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNqRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLHNCQU1TLENBQUM7SUFDZCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUNsQixzQkFBc0IsR0FBRztZQUN2QixJQUFJLEVBQUUsQ0FBQyxLQUFrQixFQUFFLEVBQUU7Z0JBQzNCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixDQUFDO1lBQ0QsTUFBTSxFQUFFLG9CQUFvQjtZQUM1QixRQUFRLEVBQUUsdUJBQXVCO1NBQ2xDLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxjQUFjLEdBQUcsY0FBYyxFQUFFLENBQUM7SUFDeEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQzVDLElBQUksU0FDeUUsQ0FBQztJQUM5RSxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixTQUFTLEdBQUcsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFDRCxJQUFJLGFBQTBELENBQUM7SUFDL0QsSUFBSSxDQUFDO1FBQ0gsYUFBYSxHQUFHLFlBQVksQ0FDMUIsS0FBSyxFQUNMLHNCQUFzQixDQUFDO1lBQ3JCLEdBQUcsa0JBQWtCO1lBQ3JCLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxPQUFPO1NBQzFDLENBQUMsRUFDRixzQkFBc0IsRUFDdEIsY0FBYyxFQUNkLFNBQVMsRUFDVDtZQUNFLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxLQUFLO1lBQ2xDLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxPQUFPO1NBQzFDLEVBQ0QsU0FBUyxDQUNWLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3JDLE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztRQUNELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwRSxhQUFhLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFDRCxJQUFJLGVBQWUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUM1QixlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ3RDLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtnQkFDakUsT0FBTyxPQUFPLENBQUMsVUFBVSxLQUFLLEdBQUcsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksZ0JBQWdCLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO2dCQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztnQkFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNoRSxDQUFDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNoQyxNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZFLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDRCxNQUFNLHNCQUFzQixHQUFHLGFBQWEsQ0FBQyxRQUFRO1NBQ2xELEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1FBQ2YsT0FBTyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDOUMsQ0FBQyxDQUFDO1NBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUF5QixFQUFFO1FBQ3JDLE9BQU8sS0FBSyxZQUFZLFlBQVksQ0FBQztJQUN2QyxDQUFDLENBQUMsQ0FBQztJQUNMLElBQUksc0JBQXNCLElBQUksSUFBSSxFQUFFLENBQUM7UUFDbkMsbUJBQW1CLENBQ2pCLHNCQUFzQixDQUFDLFVBQVUsRUFDakMsc0JBQXNCLENBQUMsVUFBVSxFQUNqQyxVQUFVLENBQ1gsQ0FBQztRQUNGLGFBQWEsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUdELElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNmLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUd4QixDQUFDO0lBRUosSUFBSSxZQUFZLEdBQStCLGFBQWEsQ0FBQztRQUMzRCxhQUFhLEVBQUUsS0FBSztRQUNwQixRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7UUFDMUIsS0FBSztRQUNMLGFBQWE7UUFDYixPQUFPLEVBQUUsY0FBYztRQUN2QixTQUFTLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNO1FBQ2xDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxLQUFLO1FBRS9CLE9BQU8sRUFBRSx3QkFBd0IsQ0FBQyxPQUFPO1FBQ3pDLGlCQUFpQixFQUFFLGtCQUFrQixDQUFDLGlCQUFpQjtRQUN2RCxpQkFBaUIsRUFBRSxvQkFBb0I7UUFDdkMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQztRQUMvQixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7S0FDL0IsQ0FBQyxDQUFDO0lBR0gsSUFDRSx3QkFBd0IsQ0FBQyxVQUFVO1FBQ25DLG9CQUFvQixJQUFJLElBQUk7UUFDNUIsd0JBQXdCLENBQUMsT0FBTyxJQUFJLElBQUksRUFDeEMsQ0FBQztRQUNELFlBQVksQ0FBQyxPQUFPLEdBQUcsd0JBQXdCLENBQUMsT0FBTyxDQUFDO1FBQ3hELE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7WUFDM0MsT0FBTyxFQUFFLHdCQUF3QixDQUFDLE9BQU87WUFDekMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEtBQUs7WUFDL0IsV0FBVyxFQUFFLG9CQUFvQjtTQUNsQyxDQUFDLENBQUM7UUFDSCxJQUFJLGdCQUFnQixLQUFLLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakQsZ0JBQWdCLENBQ2QsV0FBVyxFQUNYLFdBQVcsRUFDWDtnQkFDRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRO2dCQUNuQyxNQUFNLEVBQUUsZ0JBQWdCO2dCQUN4QixJQUFJLEVBQUUsRUFBRTthQUNULEVBQ0QsRUFBRSxNQUFNLEVBQUUsb0JBQW9CLEVBQUUsQ0FDakMsQ0FBQztZQUNGLE1BQU0scUJBQXFCLEdBQXdCO2dCQUNqRCxNQUFNLEVBQUUsV0FBVztnQkFDbkIsT0FBTyxFQUFFLFdBQVc7YUFDckIsQ0FBQztZQUNGLE9BQU8sQ0FBQyxHQUFHLENBQUM7Z0JBQ1YsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUTtnQkFDbkMsTUFBTSxFQUFFLGdCQUFnQjtnQkFDeEIsSUFBSSxFQUFFLEVBQUU7Z0JBQ1IsWUFBWSxFQUFFLHFCQUFxQjthQUNwQyxDQUFDLENBQUM7WUFFSCxZQUFZLEdBQUcsYUFBYSxDQUFDO2dCQUMzQixHQUFHLFlBQVk7Z0JBQ2YsUUFBUSxFQUFFLEVBQUUsR0FBRyxZQUFZLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRTtnQkFDaEUsU0FBUyxFQUFFLGdCQUFnQjthQUM1QixDQUFDLENBQUM7UUFDTCxDQUFDO0lBQ0gsQ0FBQztJQUdELFNBQVMsd0JBQXdCLENBQy9CLEtBQWlDLEVBQ2pDLE1BQThCO1FBRTlCLFNBQVMsQ0FBQztZQUNSLElBQUksRUFBRSxtQkFBbUI7WUFDekIsTUFBTTtZQUNOLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3JCLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO1lBQzNDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7WUFDdEMsTUFBTSxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsTUFBTTtZQUNwQyxZQUFZLEVBQUUsS0FBSyxDQUFDLGVBQWUsQ0FBQyxZQUFZO1lBQ2hELGFBQWEsRUFBRSxLQUFLLENBQUMsZUFBZSxDQUFDLGFBQWE7WUFDbEQsT0FBTyxFQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsT0FBTztTQUN2QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsU0FBUyxpQkFBaUIsQ0FBQyxLQUFpQztRQUMxRCxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDL0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JCLENBQUM7SUFHRCxTQUFTLHNCQUFzQixDQUM3QixPQUFlLEVBQ2YsTUFBOEI7UUFFOUIsSUFBSSxjQUFjLElBQUksT0FBTyxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQ2hELE9BQU87UUFDVCxDQUFDO1FBQ0QsTUFBTSxJQUFJLEdBQUcsa0JBQWtCLENBQzdCLFlBQVksQ0FBQyxhQUFhLEVBQzFCLGdCQUFnQixDQUNqQixDQUFDO1FBQ0YsSUFDRSxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsRUFDekUsQ0FBQztZQUNELE9BQU87UUFDVCxDQUFDO1FBQ0QsZ0JBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sU0FBUyxHQUFHLGtCQUFrQixDQUNsQyxZQUFZLENBQUMsYUFBYSxFQUMxQixnQkFBZ0IsQ0FDakIsQ0FBQztRQUNGLFlBQVksR0FBRztZQUNiLEdBQUcsWUFBWTtZQUNmLGVBQWUsRUFBRSxTQUFTLENBQUMsZUFBZTtZQUMxQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7U0FDL0IsQ0FBQztRQUNGLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2hDLHdCQUF3QixDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBR0QsU0FBUyxzQkFBc0IsQ0FDN0IsS0FBaUMsRUFDakMsT0FBZSxFQUNmLE1BQThCO1FBRTlCLEtBQUssQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQy9DLElBQUksT0FBTyxDQUFDLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN4RCxPQUFPLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUNsQyxHQUFHLEVBQUU7b0JBQ0gsc0JBQXNCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLEVBQ0QsQ0FBQyxLQUFjLEVBQUUsRUFBRTtvQkFDakIsSUFBSSxLQUFLLFlBQVksWUFBWSxFQUFFLENBQUM7d0JBQ2xDLE1BQU0sUUFBUSxHQUFHLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQzt3QkFDckQsSUFDRSxjQUFjOzRCQUNkLE9BQU8sS0FBSyxhQUFhOzRCQUN6QixPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUc7NEJBQy9DLFFBQVEsQ0FBQyxRQUFRLEtBQUssS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFROzRCQUM3QyxRQUFRLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTTs0QkFDekMsUUFBUSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksRUFDckMsQ0FBQzs0QkFDRCxPQUFPO3dCQUNULENBQUM7d0JBQ0QsbUJBQW1CLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO3dCQUNoRSxPQUFPO29CQUNULENBQUM7b0JBQ0Qsc0JBQXNCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLENBQ0YsQ0FBQztZQUNKLENBQUM7WUFDRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsU0FBUyxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7Z0JBQ3BELE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUM5QixHQUFHLEVBQUU7b0JBQ0gsc0JBQXNCLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2dCQUMxQyxDQUFDLEVBQ0QsR0FBRyxFQUFFO29CQUNILHNCQUFzQixDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDMUMsQ0FBQyxDQUNGLENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBR0QsU0FBUyxZQUFZLENBQUMsS0FJckI7UUFDQyxhQUFhLElBQUksQ0FBQyxDQUFDO1FBQ25CLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzNCLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMvQix3QkFBd0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwRCxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN2QixTQUFTLENBQUM7Z0JBQ1IsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtnQkFDcEIsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQ3JCLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztnQkFDakQsU0FBUyxFQUFFLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7YUFDN0MsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELHNCQUFzQixDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRUQsWUFBWSxDQUFDO1FBQ1gsS0FBSyxFQUFFLFlBQVk7UUFDbkIsTUFBTSxFQUFFLG9CQUFvQjtRQUM1QixZQUFZLEVBQUUsSUFBSTtLQUNuQixDQUFDLENBQUM7SUFLSCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUN0QyxDQUFDLFFBQVEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEVBQUU7UUFDeEMsTUFBTSxNQUFNLEdBQUcsdUJBQXVCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDckQsb0JBQW9CLEdBQUcsTUFBTSxDQUFDO1FBQzlCLE1BQU0sZUFBZSxHQUFHLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXBELE1BQU0sa0JBQWtCLEdBQUcsWUFBWSxFQUFFLE1BQU0sQ0FBQztRQUNoRCxJQUFJLGtCQUFrQixLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3JDLElBQUksY0FBb0QsQ0FBQztZQUN6RCxJQUFJLE9BQU8sWUFBWSxFQUFFLFlBQVksS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDbkQsY0FBYyxHQUFHLEVBQUUsWUFBWSxFQUFFLFlBQVksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUMvRCxDQUFDO1lBRUQsSUFDRSxrQkFBa0IsS0FBSyxlQUFlO2dCQUN0QyxrQkFBa0IsS0FBSyxrQkFBa0I7Z0JBQ3pDLGtCQUFrQixLQUFLLGtCQUFrQjtnQkFDekMsa0JBQWtCLEtBQUssVUFBVSxFQUNqQyxDQUFDO2dCQUNELElBQUksU0FBUyxHQUFtQyxTQUFTLENBQUM7Z0JBQzFELElBQUksa0JBQWtCLEtBQUssZUFBZSxFQUFFLENBQUM7b0JBQzNDLFNBQVMsR0FBRyxNQUFNLENBQUM7Z0JBQ3JCLENBQUM7cUJBQU0sSUFBSSxrQkFBa0IsS0FBSyxrQkFBa0IsRUFBRSxDQUFDO29CQUNyRCxTQUFTLEdBQUcsU0FBUyxDQUFDO2dCQUN4QixDQUFDO2dCQUNELFNBQVMsQ0FBQztvQkFDUixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsTUFBTSxFQUFFLE1BQU07b0JBQ2QsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7b0JBQ3JCLFFBQVEsRUFBRSxlQUFlO29CQUN6QixTQUFTO29CQUNULE9BQU8sRUFBRSxjQUFjO2lCQUN4QixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxRQUFRLEtBQUssWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDMUUsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLE1BQU0sS0FBSyxZQUFZLENBQUMsU0FBUyxDQUFDO1FBRTlELElBQUksQ0FBQyxhQUFhLElBQUksWUFBWSxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBRWpELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxXQUFXLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFJckMsSUFBSSxpQkFBaUIsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDO1FBQ25ELElBQUksU0FBUyxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUM7UUFFbkMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLFNBQVMsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxNQUFNLG1CQUFtQixHQUFHLFNBQVMsRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDO1FBQ3hELElBQUksbUJBQW1CLElBQUksSUFBSSxFQUFFLENBQUM7WUFDaEMsbUJBQW1CLENBQ2pCLG1CQUFtQixFQUNuQixTQUFTLEVBQUUsS0FBSyxDQUFDLGNBQWMsSUFBSSxHQUFHLEVBQ3RDLE1BQU0sQ0FDUCxDQUFDO1lBQ0YsT0FBTztRQUNULENBQUM7UUFHRCxNQUFNLFdBQVcsR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRCxNQUFNLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDekUsTUFBTSxpQkFBaUIsR0FBRyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUUxRSxNQUFNLGVBQWUsR0FBRyx5QkFBeUIsQ0FBQztZQUNoRCxZQUFZO1lBQ1osVUFBVTtZQUNWLEtBQUssRUFBRSxTQUFTO1NBQ2pCLENBQUMsQ0FBQztRQUVILElBQUksZUFBZSxFQUFFLENBQUM7WUFDcEIsTUFBTSxjQUFjLEdBQUcscUJBQXFCLENBQUM7Z0JBQzNDLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtnQkFDM0IsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNO2dCQUN2QixPQUFPLEVBQUUsV0FBVztnQkFDcEIsS0FBSyxFQUFFLFNBQVM7Z0JBQ2hCLFdBQVc7YUFDWixDQUFDLENBQUM7WUFDSCxJQUFJLGNBQWMsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDM0IsaUJBQWlCLEdBQUcsY0FBYyxDQUFDO1lBQ3JDLENBQUM7aUJBQU0sQ0FBQztnQkFDTixJQUFJLHFCQU1TLENBQUM7Z0JBQ2QsSUFBSSxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7b0JBQ3RCLHFCQUFxQixHQUFHO3dCQUN0QixJQUFJLEVBQUUsQ0FBQyxLQUFrQixFQUFFLEVBQUU7NEJBQzNCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQzt3QkFDbkIsQ0FBQzt3QkFDRCxNQUFNLEVBQUUsTUFBTTt3QkFDZCxRQUFRLEVBQUUsZUFBZTtxQkFDMUIsQ0FBQztnQkFDSixDQUFDO2dCQUNELElBQUkscUJBTVMsQ0FBQztnQkFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7b0JBQ2xCLHFCQUFxQixHQUFHO3dCQUN0QixnQkFBZ0IsRUFBRSxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVE7d0JBQ3JELGNBQWMsRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLE1BQU07d0JBQzFDLFVBQVU7cUJBQ1gsQ0FBQztnQkFDSixDQUFDO2dCQUVELElBQUksQ0FBQztvQkFDSCxpQkFBaUIsR0FBRyxZQUFZLENBQzlCLFNBQVMsRUFDVCxzQkFBc0IsQ0FBQzt3QkFDckIsR0FBRyxpQkFBaUI7d0JBQ3BCLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxPQUFPO3FCQUNuQyxDQUFDLEVBQ0YscUJBQXFCLEVBQ3JCLFdBQVcsRUFDWCxxQkFBcUIsRUFDckI7d0JBQ0UsUUFBUSxFQUFFLGlCQUFpQixDQUFDLEtBQUs7d0JBQ2pDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxPQUFPO3FCQUNuQyxDQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO29CQUNmLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxZQUFZLENBQUMsRUFBRSxDQUFDO3dCQUNyQyxNQUFNLEtBQUssQ0FBQztvQkFDZCxDQUFDO29CQUNELG1CQUFtQixDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztvQkFDaEUsT0FBTztnQkFDVCxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7UUFFRCxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRO2FBQy9DLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2YsT0FBTyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDOUMsQ0FBQyxDQUFDO2FBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUF5QixFQUFFO1lBQ3JDLE9BQU8sS0FBSyxZQUFZLFlBQVksQ0FBQztRQUN2QyxDQUFDLENBQUMsQ0FBQztRQUNMLElBQUksZUFBZSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzVCLG1CQUFtQixDQUNqQixlQUFlLENBQUMsVUFBVSxFQUMxQixlQUFlLENBQUMsVUFBVSxFQUMxQixNQUFNLENBQ1AsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsZ0JBQWdCLElBQUksQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sU0FBUyxHQUErQixhQUFhLENBQUM7WUFDMUQsYUFBYSxFQUFFLGFBQWEsSUFBSSxDQUFDLFlBQVksSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUM3RCxRQUFRO1lBQ1IsS0FBSyxFQUFFLFNBQVM7WUFDaEIsYUFBYSxFQUFFLGlCQUFpQjtZQUNoQyxPQUFPLEVBQUUsV0FBVztZQUNwQixTQUFTLEVBQUUsUUFBUSxDQUFDLE1BQU07WUFDMUIsS0FBSyxFQUFFLGlCQUFpQixDQUFDLEtBQUs7WUFDOUIsT0FBTyxFQUFFLGlCQUFpQixDQUFDLE9BQU87WUFDbEMsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsaUJBQWlCO1lBQ3RELGlCQUFpQixFQUFFLFdBQVc7WUFDOUIsTUFBTSxFQUFFLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztZQUNuQyxVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVU7U0FDL0IsQ0FBQyxDQUFDO1FBR0gsSUFBSSxpQkFBaUIsQ0FBQyxVQUFVLElBQUksV0FBVyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3hELE1BQU0sZ0JBQWdCLEdBQUcsbUJBQW1CLENBQUM7Z0JBQzNDLE9BQU8sRUFBRSxpQkFBaUIsQ0FBQyxPQUFPO2dCQUNsQyxLQUFLLEVBQUUsaUJBQWlCLENBQUMsS0FBSztnQkFDOUIsV0FBVzthQUNaLENBQUMsQ0FBQztZQUNILElBQUksZ0JBQWdCLEtBQUssUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUN6QyxJQUFJLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztvQkFDL0QsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7Z0JBQ3RDLENBQUM7Z0JBQ0QsZ0JBQWdCLENBQ2QsV0FBVyxFQUNYLFdBQVcsRUFDWDtvQkFDRSxRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7b0JBQzNCLE1BQU0sRUFBRSxhQUFhO29CQUNyQixJQUFJLEVBQUUsRUFBRTtpQkFDVCxFQUNELEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLENBQ2pDLENBQUM7Z0JBQ0YsTUFBTSx1QkFBdUIsR0FBd0I7b0JBQ25ELE1BQU0sRUFBRSxXQUFXO29CQUNuQixPQUFPLEVBQUUsV0FBVztpQkFDckIsQ0FBQztnQkFDRixPQUFPLENBQUMsR0FBRyxDQUFDO29CQUNWLFFBQVEsRUFBRSxRQUFRLENBQUMsUUFBUTtvQkFDM0IsTUFBTSxFQUFFLGFBQWE7b0JBQ3JCLElBQUksRUFBRSxFQUFFO29CQUNSLFlBQVksRUFBRSx1QkFBdUI7aUJBQ3RDLENBQUMsQ0FBQztnQkFDSCxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFFRCxZQUFZLENBQUM7WUFDWCxLQUFLLEVBQUUsU0FBUztZQUNoQixNQUFNLEVBQUUsTUFBTTtZQUNkLFlBQVksRUFBRSxJQUFJO1NBQ25CLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FDRixDQUFDO0lBR0YsU0FBUyxzQkFBc0IsQ0FBQyxNQUFxQjtRQUtuRCxJQUFJLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ25ELElBQUksT0FBTyxNQUFNLENBQUMsUUFBUSxLQUFLLFFBQVEsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0RSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxJQUFJLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMxQixJQUFJLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUN0QyxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQ25DLENBQUM7UUFFRCxJQUFJLGdCQUFnQixHQUEyQixjQUFjLENBQUM7UUFDOUQsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM5QyxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUMvQixnQkFBZ0IsR0FBRyxZQUFZLENBQUM7UUFDbEMsQ0FBQztRQUNELE9BQU87WUFDTCxRQUFRLEVBQUUsa0JBQWtCO1lBQzVCLE1BQU0sRUFBRSxnQkFBZ0I7WUFDeEIsTUFBTSxFQUFFLGdCQUFnQjtTQUN6QixDQUFDO0lBQ0osQ0FBQztJQU9ELFNBQVMsV0FBVyxDQUFDLElBQVk7UUFDL0IsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDO1lBQzNCLEtBQUssTUFBTSxhQUFhLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDekQsSUFBSSxhQUFhLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUNuRSxPQUFPLGFBQWEsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQztnQkFDL0MsQ0FBQztZQUNILENBQUM7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFPRCxTQUFTLG1CQUFtQixDQUFDLElBQVk7UUFDdkMsT0FBTyxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVE7YUFDdkMsTUFBTSxDQUFDLENBQUMsYUFBYSxFQUFFLEVBQUU7WUFDeEIsT0FBTyxhQUFhLENBQUMsSUFBSSxLQUFLLElBQUksSUFBSSxhQUFhLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQztRQUN4RSxDQUFDLENBQUM7YUFDRCxHQUFHLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRTtZQUNyQixPQUFPO2dCQUNMLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSTtnQkFDeEIsUUFBUSxFQUFFLGFBQWEsQ0FBQyxRQUFRO2dCQUNoQyxVQUFVLEVBQUUsYUFBYSxDQUFDLFVBQVU7Z0JBQ3BDLFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVTtnQkFDcEMsWUFBWSxFQUFFLGFBQWEsQ0FBQyxZQUFZO2dCQUN4QyxTQUFTLEVBQUUsYUFBYSxDQUFDLFNBQVM7Z0JBQ2xDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxnQkFBZ0I7Z0JBQ2hELGlCQUFpQixFQUFFLGFBQWEsQ0FBQyxpQkFBaUI7Z0JBQ2xELFVBQVUsRUFBRSxhQUFhLENBQUMsVUFBVTtnQkFDcEMsY0FBYyxFQUFFLGFBQWEsQ0FBQyxjQUFjO2dCQUM1QyxZQUFZLEVBQUUsYUFBYSxDQUFDLFlBQVk7Z0JBQ3hDLGdCQUFnQixFQUFFLGFBQWEsQ0FBQyxnQkFBZ0I7Z0JBQ2hELFFBQVEsRUFBRSxhQUFhLENBQUMsUUFBUTtnQkFDaEMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxXQUFXO2dCQUN0QyxXQUFXLEVBQUUsYUFBYSxDQUFDLFdBQVc7YUFDdkMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUdELFNBQVMsNkJBQTZCLENBQUMsUUFBZ0I7UUFDckQsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFO1lBQ25ELEdBQUcsT0FBTyxDQUFDLFFBQVE7WUFDbkIsUUFBUTtTQUNULENBQUMsQ0FBQztRQUNILElBQUksZ0JBQWdCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDN0IsT0FBTyxZQUFZLENBQUMsaUJBQWlCLENBQUM7UUFDeEMsQ0FBQztRQUNELE9BQU8scUJBQXFCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBR0QsU0FBUyxxQkFBcUIsQ0FBQyxLQUk5QjtRQUNDLE1BQU0sV0FBVyxHQUFHLDZCQUE2QixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsRSxPQUFPLHNCQUFzQixDQUFDO1lBQzVCLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztZQUN0QixLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDbEIsV0FBVztTQUNaLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxNQUFNLE9BQU8sR0FBRztRQUNkLFdBQVcsQ0FBQyxFQUNWLFFBQVEsRUFDUixLQUFLLEVBQ0wsT0FBTyxHQUtSO1lBQ0MsT0FBTyxxQkFBcUIsQ0FBQztnQkFDM0IsUUFBUSxFQUFFLFFBQVEsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVE7Z0JBQ3BELEtBQUs7Z0JBQ0wsT0FBTzthQUNSLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPO1FBQ1AsR0FBRztZQUNELE9BQU8sWUFBWSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxXQUFXLENBQUMsTUFBTTtZQUNoQixNQUFNLFVBQVUsR0FBRyxzQkFBc0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNsRCxnQkFBZ0IsQ0FDZCxNQUFNLEVBQ04sVUFBVSxDQUFDLFFBQVEsRUFDbkIsVUFBVSxDQUFDLE1BQU0sRUFDakIsVUFBVSxDQUFDLE1BQU0sQ0FDbEIsQ0FBQztZQUNGLE1BQU0sT0FBTyxHQUFHLGVBQWUsQ0FBQyxVQUFVLEVBQUU7Z0JBQzFDLEdBQUcsT0FBTyxDQUFDLFFBQVE7Z0JBQ25CLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTthQUM5QixDQUFDLENBQUM7WUFFSCxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsT0FBTztZQUNULENBQUM7WUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUU7Z0JBQ2hELElBQUksWUFBWSxJQUFJLElBQUksRUFBRSxDQUFDO29CQUN6QixPQUFPO2dCQUNULENBQUM7Z0JBRUQsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELE9BQU8sQ0FBQyxNQUFNO1lBQ1osTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbEQsZ0JBQWdCLENBQ2QsTUFBTSxFQUNOLFVBQVUsQ0FBQyxRQUFRLEVBQ25CLFVBQVUsQ0FBQyxNQUFNLEVBQ2pCLFVBQVUsQ0FBQyxNQUFNLENBQ2xCLENBQUM7WUFDRixNQUFNLE9BQU8sR0FBRyxlQUFlLENBQUMsVUFBVSxFQUFFO2dCQUMxQyxHQUFHLE9BQU8sQ0FBQyxRQUFRO2dCQUNuQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7YUFDOUIsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxnQkFBZ0IsR0FBMkI7Z0JBQy9DLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUTtnQkFDN0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2dCQUN6QixJQUFJLEVBQUUsRUFBRTthQUNULENBQUM7WUFDRixJQUFJLGVBTVMsQ0FBQztZQUNkLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNwQixlQUFlLEdBQUc7b0JBQ2hCLElBQUksRUFBRSxDQUFDLEtBQWtCLEVBQUUsRUFBRTt3QkFDM0IsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUNuQixDQUFDO29CQUNELE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtvQkFDekIsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0IsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLGNBQWMsR0FBRyxjQUFjLEVBQUUsQ0FBQztZQUN4QyxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzFELE1BQU0sa0JBQWtCLEdBQUcsZ0JBQWdCLENBQ3pDLFVBQVUsQ0FBQyxNQUFNLEVBQ2pCLGtCQUFrQixDQUNuQixDQUFDO1lBQ0YsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUNoQyxPQUFPLEVBQ1Asc0JBQXNCLENBQUMsa0JBQWtCLENBQUMsRUFDMUMsZUFBZSxFQUNmLGNBQWMsRUFDZCxTQUFTLEVBQ1Q7Z0JBQ0UsUUFBUSxFQUFFLGtCQUFrQixDQUFDLEtBQUs7Z0JBQ2xDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxPQUFPO2FBQ3BDLENBQ0YsQ0FBQztZQUNGLDBCQUEwQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQzFDLE1BQU0sVUFBVSxHQUFHLHNCQUFzQixDQUN2QyxVQUFVLENBQUMsUUFBUSxFQUNuQixVQUFVLENBQUMsTUFBTSxDQUNsQixDQUFDO1lBQ0YsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRTtnQkFDL0IsR0FBRyxFQUFFLFVBQVU7Z0JBQ2YsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLEtBQUssRUFBRSxPQUFPO2dCQUNkLGFBQWE7Z0JBQ2IsV0FBVyxFQUFFLGtCQUFrQjtnQkFDL0IsTUFBTSxFQUFFLFVBQVUsQ0FBQyxNQUFNO2FBQzFCLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxTQUFTLENBQUMsUUFBUTtZQUNoQixNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ1osTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBRWxCLFNBQVMsZUFBZTtnQkFDdEIsV0FBVyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QixDQUFDO1lBQ0QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDOUIsT0FBTyxlQUFlLENBQUM7UUFDekIsQ0FBQztRQUNELFFBQVEsQ0FBQyxFQUNQLFFBQVEsRUFDUixLQUFLLEVBQ0wsT0FBTyxFQUFFLFVBQVUsRUFDbkIsSUFBSSxFQUNKLE9BQU8sR0FPUjtZQUNDLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxPQUFPLEdBQUcsWUFBWSxDQUFDO1lBQzdCLElBQUksY0FBYyxHQUFHLFFBQVEsQ0FBQztZQUM5QixjQUFjLEtBQUssT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFFN0MsTUFBTSxZQUFZLEdBQUcsVUFBVSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUM7WUFDbkQsTUFBTSxhQUFhLEdBQ2pCLEtBQUssSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUFDO2dCQUNuQyxRQUFRLEVBQUUsY0FBYztnQkFDeEIsT0FBTyxFQUFFLFlBQVk7Z0JBQ3JCLEtBQUssRUFBRSxhQUFhO2FBQ3JCLENBQUMsQ0FBQztZQUNILElBQUksV0FBK0IsQ0FBQztZQUNwQyxJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVc7Z0JBQUUsV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO1lBQ3RFLE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUM7Z0JBQ25ELFdBQVcsRUFBRTtvQkFDWCxRQUFRLEVBQUUsY0FBYztvQkFDeEIsTUFBTTtvQkFDTixJQUFJLEVBQUUsSUFBSSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSTtpQkFDcEM7Z0JBQ0QsV0FBVztnQkFDWCxXQUFXLEVBQUUscUJBQXFCO2FBQ25DLENBQUMsQ0FBQztZQUNILE1BQU0sV0FBVyxHQUFHO2dCQUNsQixRQUFRLEVBQUUsbUJBQW1CLENBQUMsUUFBUTtnQkFDdEMsTUFBTSxFQUFFLG1CQUFtQixDQUFDLE1BQU07Z0JBQ2xDLElBQUksRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO2FBQy9CLENBQUM7WUFDRixNQUFNLE1BQU0sR0FBMkIsY0FBYyxDQUFDO1lBQ3RELE1BQU0sWUFBWSxHQUF3QjtnQkFDeEMsTUFBTTtnQkFDTixPQUFPLEVBQUUsY0FBYzthQUN4QixDQUFDO1lBRUYsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3JCLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO29CQUMvQyxPQUFPLEVBQUUsY0FBYztpQkFDeEIsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxHQUFHLENBQUM7b0JBQ1YsR0FBRyxXQUFXO29CQUNkLFlBQVk7aUJBQ2IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFO29CQUM1QyxPQUFPLEVBQUUsY0FBYztpQkFDeEIsQ0FBQyxDQUFDO2dCQUNILE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsR0FBRyxXQUFXO29CQUNkLFlBQVk7aUJBQ2IsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztRQUNILENBQUM7UUFDRCxXQUFXO1FBQ1gsbUJBQW1CO0tBQzBCLENBQUM7SUFHaEQsU0FBUyxPQUFPO1FBQ2QsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1QsQ0FBQztRQUNELGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsY0FBYyxFQUFFLENBQUM7UUFDakIsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2xCLFdBQVcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwQixRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUdELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDOUIsQ0FBQztBQVNELE1BQU0sQ0FBQyxPQUFPLFVBQVUsWUFBWSxDQUlsQyxNQUE0QixFQUM1QixPQUFPLEdBQWtDLEVBQUU7SUFFM0MsTUFBTSxRQUFRLEdBQUcsNkJBQTZCLENBQzVDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQy9CLENBQUM7SUFDRixJQUFJLE9BQW1DLENBQUM7SUFDeEMsSUFBSSxDQUFDO1FBQ0gsT0FBTyxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7UUFDL0IsT0FBTyxnQkFBZ0IsQ0FBYyxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBQUMsT0FBTyxLQUFjLEVBQUUsQ0FBQztRQUN4QixPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDbkIsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLE1BQU0sS0FBSyxDQUFDO0lBQ2QsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBidWlsZFJvdXRlcyB9IGZyb20gJy4uL2J1aWxkZXIuanMnO1xuaW1wb3J0IHsgQnJvd3Nlckhpc3RvcnkgfSBmcm9tICcuLi9oaXN0b3J5L2luZGV4LmpzJztcbmltcG9ydCB7IGdldE1hdGNoZWRSb3V0ZSwgcHJlcGFyZU1hdGNoIH0gZnJvbSAnLi4vdG9vbHMuanMnO1xuaW1wb3J0IGJ1aWxkQ29tYmluZWRTZWFyY2ggZnJvbSAnLi4vdG9vbHMvYnVpbGRDb21iaW5lZFNlYXJjaC5qcyc7XG5pbXBvcnQgdHlwZSB7IFBhcmFtRGF0YSB9IGZyb20gJ3BhdGgtdG8tcmVnZXhwJztcbmltcG9ydCB7XG4gIHR5cGUgUm91dGVFbnRyeSxcbiAgdHlwZSBSb3V0aW5nQ29udGV4dFR5cGUsXG4gIHR5cGUgU3Vic2NyaWJlQ2FsbGJhY2ssXG4gIHR5cGUgUm91dGVOb2RlLFxuICB0eXBlIFByZXBhcmVkQWNjZXNzLFxuICB0eXBlIE5hdmlnYXRlT3ZlcmxvYWRzLFxuICB0eXBlIFByZWxvYWRUYXJnZXQsXG4gIHR5cGUgUHJlcGFyZWRSb3V0ZVNlZ21lbnRTbmFwc2hvdCxcbiAgdHlwZSBSYXdRdWVyeSxcbiAgdHlwZSBSb3V0ZXJNYXRjaGVkUm91dGUsXG4gIHR5cGUgUm91dGVyQWN0aXZlTG9hZFN0YXRlLFxuICB0eXBlIFJvdXRlclJlZGlyZWN0U3RhdHVzLFxuICB0eXBlIFJvdXRlckh5ZHJhdGlvblNuYXBzaG90LFxuICB0eXBlIFJvdXRlckpzb25WYWx1ZSxcbiAgdHlwZSBVbmtub3duRmlsdGVycyxcbiAgdHlwZSBVbmtub3duUXVlcnlTaGFwZSxcbn0gZnJvbSAnLi4vdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgY3JlYXRlSW5zdHJ1bWVudGF0aW9uUmVnaXN0cnksXG4gIHR5cGUgSW5zdHJ1bWVudGF0aW9uQVBJLFxuICB0eXBlIEluc3RydW1lbnRhdGlvblJlZ2lzdHJ5LFxuICB0eXBlIFJvdXRlckVudHJ5U25hcHNob3QsXG4gIHR5cGUgUm91dGVyTG9jYXRpb25TbmFwc2hvdCxcbiAgdHlwZSBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlLFxuICB0eXBlIFJvdXRlckV2ZW50LFxufSBmcm9tICcuLi9pbnN0cnVtZW50YXRpb24vSW5zdHJ1bWVudGF0aW9uLmpzJztcbmltcG9ydCB0eXBlIHsgSGlzdG9yeURlYnVnQ29udGV4dCB9IGZyb20gJy4uL2hpc3RvcnkvdHlwZXMuanMnO1xuaW1wb3J0IHtcbiAgaXNSb3V0ZXJOYXZpZ2F0aW9uU291cmNlLFxuICB0eXBlIFJvdXRlckhpc3RvcnlBY3Rpb25WYWx1ZSxcbiAgdHlwZSBSb3V0ZXJQcmVsb2FkTW9kZVZhbHVlLFxufSBmcm9tICcuLi92YWx1ZXMuanMnO1xuaW1wb3J0IHtcbiAgYnVpbGREZXN0aW5hdGlvblNlYXJjaCxcbiAgcmVzb2x2ZVJvdXRlckRlc3RpbmF0aW9uLFxufSBmcm9tICcuL2Rlc3RpbmF0aW9uLmpzJztcbmltcG9ydCB7IGNhbGN1bGF0ZUxvYWRTdGF0ZSB9IGZyb20gJy4uL2ludGVybmFsL3JvdXRlckxvYWRTdGF0ZS5qcyc7XG5pbXBvcnQgeyBIdHRwUmVkaXJlY3QgfSBmcm9tICcuLi9lcnJvcnMvaW5kZXguanMnO1xuaW1wb3J0IHtcbiAgcGFyc2VTZWFyY2hTdGF0ZSxcbiAgdHlwZSBQYXJzZWRTZWFyY2hTdGF0ZSxcbiAgdHlwZSBSb3V0ZXJRdWVyeVNjaGVtYSxcbn0gZnJvbSAnLi4vaW50ZXJuYWwvcm91dGVyU2VhcmNoU3RhdGUuanMnO1xuaW1wb3J0IHsgYXNzZXJ0Um91dGVySnNvblZhbHVlIH0gZnJvbSAnLi9yb3V0ZXJIeWRyYXRpb24uanMnO1xuXG50eXBlIFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+ID0gUm91dGVFbnRyeTxcbiAgUGFyYW1EYXRhLFxuICBSb3V0ZXJRdWVyeVNjaGVtYSxcbiAgVENvbnRleHRcbj47XG50eXBlIFByZXBhcmVRdWVyeUlucHV0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG50eXBlIFByZWxvYWRlZFByZXBhcmVkTWF0Y2g8VENvbnRleHQ+ID0ge1xuICBrZXk6IHN0cmluZztcbiAgY29udGV4dDogVENvbnRleHQ7XG4gIHJvdXRlOiBSb3V0ZXJNYXRjaGVkUm91dGU8UGFyYW1EYXRhPiB8IG51bGw7XG4gIHByZXBhcmVkTWF0Y2g6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+WydwcmVwYXJlZE1hdGNoJ107XG4gIHF1ZXJ5U2NoZW1hOiBSb3V0ZXJRdWVyeVNjaGVtYTtcbiAgc2VhcmNoOiBzdHJpbmc7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHJvdXRlIHByZXBhcmUgY2FsbGJhY2sgc2hvdWxkIHJ1biBhZnRlciBuYXZpZ2F0aW9uLlxuICovXG5mdW5jdGlvbiBzaG91bGRQcmVwYXJlT25OYXZpZ2F0aW9uKGlucHV0OiB7XG4gIHNhbWVQYXRobmFtZTogYm9vbGVhbjtcbiAgc2FtZVNlYXJjaDogYm9vbGVhbjtcbiAgcm91dGU6IFJvdXRlck1hdGNoZWRSb3V0ZTxQYXJhbURhdGE+IHwgbnVsbDtcbn0pOiBib29sZWFuIHtcbiAgaWYgKCFpbnB1dC5zYW1lUGF0aG5hbWUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpbnB1dC5zYW1lU2VhcmNoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3Qgcm91dGVTZWdtZW50cyA9IGlucHV0LnJvdXRlPy5yb3V0ZS5yb3V0ZXMgPz8gW107XG4gIHJldHVybiByb3V0ZVNlZ21lbnRzLnNvbWUoKHJvdXRlKSA9PiB7XG4gICAgcmV0dXJuIHJvdXRlLnByZXBhcmUgIT0gbnVsbCAmJiByb3V0ZS5wcmVwYXJlU2VhcmNoQmVoYXZpb3IgIT09ICdwYXRoJztcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0dXJuIHR5cGUgZm9yIHRoZSBjcmVhdGVSb3V0ZXIgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIENyZWF0ZVJvdXRlclJldHVybjxUQ29udGV4dCwgUiBleHRlbmRzIFJvdXRlTm9kZVtdPiA9IHtcbiAgLyoqIEZ1bmN0aW9uIHRvIGNsZWFuIHVwIHJvdXRlciBsaXN0ZW5lcnMgYW5kIHJlc291cmNlcyAqL1xuICBjbGVhbnVwOiAoKSA9PiB2b2lkO1xuICAvKiogUm91dGVyIGNvbnRleHQgb2JqZWN0IGZvciB0aGUgUmVhY3QgQ29udGV4dCBQcm92aWRlciAqL1xuICBjb250ZXh0OiBSb3V0aW5nQ29udGV4dFR5cGU8XG4gICAgUGFyYW1EYXRhLFxuICAgIFJvdXRlclF1ZXJ5U2NoZW1hLFxuICAgIFVua25vd25RdWVyeVNoYXBlLFxuICAgIFRDb250ZXh0XG4gID4gJlxuICAgIFByZXBhcmVkQWNjZXNzPFI+ICYge1xuICAgICAgbmF2aWdhdGU6IE5hdmlnYXRlT3ZlcmxvYWRzPFI+O1xuICAgIH07XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb21wbGV0ZSByb3V0ZXIgc3lzdGVtIGZyb20gcm91dGUgY29uZmlndXJhdGlvbnMuXG4gKlxuICogVGhpcyByb3V0ZXIgaXMgYnVpbHQgZnJvbSB0aGUgc2FtZSBwcmltaXRpdmVzIGFzIHJlYWN0LXJvdXRlciBidXQgd2l0aCBhZGRpdGlvbmFsXG4gKiBmZWF0dXJlcyBmb3IgZGF0YSBwcmVsb2FkaW5nIGFuZCBjb2RlIHNwbGl0dGluZy4gRWFjaCByb3V0ZSBjYW4gY29udGFpbiBib3RoIGFcbiAqIENvbXBvbmVudCBhbmQgYSBwcmVwYXJlKCkgZnVuY3Rpb24gdGhhdCBjYW4gcHJlbG9hZCBkYXRhIGZvciB0aGUgY29tcG9uZW50LlxuICpcbiAqIFRoZSByb3V0ZXIgd2F0Y2hlcyBmb3IgY2hhbmdlcyB0byB0aGUgY3VycmVudCBsb2NhdGlvbiB2aWEgdGhlIEhUTUw1IEhpc3RvcnkgQVBJLFxuICogbWFwcyB0aGUgbG9jYXRpb24gdG8gdGhlIGNvcnJlc3BvbmRpbmcgcm91dGUgZW50cnksIGFuZCB0aGVuIHByZWxvYWRzIHRoZSBjb2RlXG4gKiBhbmQgZGF0YSBmb3IgdGhlIHJvdXRlIGJlZm9yZSByZW5kZXJpbmcuXG4gKlxuICogQHBhcmFtIHJvdXRlcyAtIEFycmF5IG9mIHJvdXRlIGNvbmZpZ3VyYXRpb25zXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyB0aGUgcm91dGVyIGNvbnRleHQgYW5kIGNsZWFudXAgZnVuY3Rpb25cbiAqXG4gIHByZXBhcmVkTWF0Y2g6IHByZXBhcmVNYXRjaChyb3V0ZSwgcGFyc2VSYXdRdWVyeShoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCkpLFxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgcm91dGVzID0gW1xuICogICB7XG4gKiAgICAgcGF0aDogJy91c2Vycy86aWQnLFxuICogICAgIHJlc291cmNlUGFnZTogZ2V0UmVzb3VyY2VQYWdlKCdVc2VyUHJvZmlsZScsICgpID0+IGltcG9ydCgnLi9Vc2VyUHJvZmlsZScpKSxcbiAqICAgICBwcmVwYXJlOiAoeyB2YXJpYWJsZXMgfSkgPT4gKHsgdXNlcklkOiB2YXJpYWJsZXMuaWQgfSlcbiAqICAgfVxuICogXTtcbiAqXG4gKiBjb25zdCB7IGNvbnRleHQsIGNsZWFudXAgfSA9IGNyZWF0ZVJvdXRlcihyb3V0ZXMpO1xuICpcbiAqIC8vIFVzZSBpbiBSZWFjdCBhcHBcbiAqIDxSb3V0aW5nQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dH0+XG4gKiAgIDxSb3V0ZXJSZW5kZXJlciBmYWxsYmFjaz17PGRpdj5Mb2FkaW5nLi4uPC9kaXY+fSAvPlxuICogPC9Sb3V0aW5nQ29udGV4dC5Qcm92aWRlcj5cbiAqIGBgYFxuICovXG4vKipcbiAqIENyZWF0ZSBhIHJvdXRlciAodHlwZWQgb3ZlcmxvYWQpLiBXaGVuIGNhbGxlZCB3aXRoIGEgY29uc3QgdHVwbGUgb2Ygcm91dGVzLCBnZW5lcmljcyBhcmUgcHJlc2VydmVkLlxuICovXG4vKipcbiAqIE9wdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIGBjcmVhdGVSb3V0ZXJgLlxuICovXG5leHBvcnQgdHlwZSBDcmVhdGVSb3V0ZXJPcHRpb25zPFRDb250ZXh0PiA9IHtcbiAgLyoqIEluc3RydW1lbnRhdGlvbnMgdG8gYXR0YWNoIHRvIHRoZSByb3V0ZXIgKERldlRvb2xzIGJyaWRnZSwgbG9nZ2VyLCAuLi4pLiAqL1xuICBpbnN0cnVtZW50YXRpb25zPzogSW5zdHJ1bWVudGF0aW9uQVBJW107XG4gIC8qKiBTdGF0aWMgY29udGV4dCB2YWx1ZSBvciBsYXp5IGluaXRpYWxpemVyIGZvciB0aGUgcm91dGVyLiAqL1xuICBjb250ZXh0PzogVENvbnRleHQgfCAoKCkgPT4gVENvbnRleHQpO1xuICAvKiogUmVzb2x2ZSBhIGZyZXNoIGNvbnRleHQgdmFsdWUgcGVyIG5hdmlnYXRpb24uICovXG4gIGdldENvbnRleHQ/OiAoKSA9PiBUQ29udGV4dDtcbiAgLyoqIFZlcnNpb25lZCBwcmVwYXJlZC1kYXRhIHNuYXBzaG90IHByb2R1Y2VkIGZvciB0aGUgaW5pdGlhbCBicm93c2VyIFVSTC4gKi9cbiAgaHlkcmF0aW9uU25hcHNob3Q/OiBSb3V0ZXJIeWRyYXRpb25TbmFwc2hvdDtcbn07XG5cbi8qKiBJbml0aWFsaXplcyBhIHJvdXRlciB3aGlsZSB0aGUgY2FsbGVyIG93bnMgcm9sbGJhY2sgb2YgYnJvd3NlciByZXNvdXJjZXMuICovXG5mdW5jdGlvbiBpbml0aWFsaXplUm91dGVyPFRDb250ZXh0LCBSIGV4dGVuZHMgUm91dGVOb2RlW10+KFxuICByb3V0ZXM6IFsuLi5SXSB8IFJvdXRlTm9kZVtdLFxuICBvcHRpb25zOiBDcmVhdGVSb3V0ZXJPcHRpb25zPFRDb250ZXh0PixcbiAgaGlzdG9yeTogQnJvd3Nlckhpc3RvcnksXG4gIHJlZ2lzdHJ5OiBJbnN0cnVtZW50YXRpb25SZWdpc3RyeSxcbik6IENyZWF0ZVJvdXRlclJldHVybjxUQ29udGV4dCwgUj4ge1xuICBsZXQgc3RhdGljQ29udGV4dDogVENvbnRleHQgfCB1bmRlZmluZWQ7XG4gIGlmIChvcHRpb25zLmdldENvbnRleHQgPT0gbnVsbCkge1xuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5jb250ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBzdGF0aWNDb250ZXh0ID0gKG9wdGlvbnMuY29udGV4dCBhcyAoKSA9PiBUQ29udGV4dCkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhdGljQ29udGV4dCA9IG9wdGlvbnMuY29udGV4dDtcbiAgICB9XG4gIH1cblxuICAvKiogUmVzb2x2ZSB0aGUgY29udGV4dCBmb3IgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbi4gKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZUNvbnRleHQoKTogVENvbnRleHQge1xuICAgIGlmIChvcHRpb25zLmdldENvbnRleHQgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMuZ2V0Q29udGV4dCgpO1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGljQ29udGV4dCBhcyBUQ29udGV4dDtcbiAgfVxuXG4gIGxldCBwZW5kaW5nTmF2aWdhdGlvbk9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSB8IHVuZGVmaW5lZDtcbiAgbGV0IGxhc3ROYXZpZ2F0aW9uT3JpZ2luOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlID0gJ2V4dGVybmFsJztcbiAgbGV0IGxhc3RQcmVsb2FkU2lnbmF0dXJlOiB7XG4gICAga2V5OiBzdHJpbmc7XG4gICAgdGltZXN0YW1wOiBudW1iZXI7XG4gIH0gfCBudWxsID0gbnVsbDtcbiAgbGV0IHJvdXRlckRpc3Bvc2VkID0gZmFsc2U7XG4gIGxldCBhY3RpdmVFbnRyeUlkID0gMDtcbiAgbGV0IGxvYWRTdGF0ZVZlcnNpb24gPSAwO1xuICBjb25zdCBwcmVsb2FkZWRNYXRjaGVzID0gbmV3IE1hcDxzdHJpbmcsIFByZWxvYWRlZFByZXBhcmVkTWF0Y2g8VENvbnRleHQ+PigpO1xuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHBhcnRpYWwgbG9jYXRpb24gb2JqZWN0IGludG8gYSBmdWxsIGxvY2F0aW9uIHN0cnVjdHVyZSB3aXRoIHN0cmluZyBmaWVsZHMuXG4gICAqL1xuICBmdW5jdGlvbiBub3JtYWxpemVMb2NhdGlvbihsb2NhdGlvbjoge1xuICAgIHBhdGhuYW1lOiBzdHJpbmc7XG4gICAgc2VhcmNoPzogc3RyaW5nO1xuICAgIGhhc2g/OiBzdHJpbmc7XG4gIH0pOiB7IHBhdGhuYW1lOiBzdHJpbmc7IHNlYXJjaDogc3RyaW5nOyBoYXNoOiBzdHJpbmcgfSB7XG4gICAgbGV0IHBhdGhuYW1lVmFsdWUgPSAnJztcbiAgICBpZiAodHlwZW9mIGxvY2F0aW9uLnBhdGhuYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgcGF0aG5hbWVWYWx1ZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICAgIH1cbiAgICBsZXQgc2VhcmNoVmFsdWUgPSAnJztcbiAgICBpZiAodHlwZW9mIGxvY2F0aW9uLnNlYXJjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHNlYXJjaFZhbHVlID0gbG9jYXRpb24uc2VhcmNoO1xuICAgIH1cbiAgICBsZXQgaGFzaFZhbHVlID0gJyc7XG4gICAgaWYgKHR5cGVvZiBsb2NhdGlvbi5oYXNoID09PSAnc3RyaW5nJykge1xuICAgICAgaGFzaFZhbHVlID0gbG9jYXRpb24uaGFzaDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhuYW1lOiBwYXRobmFtZVZhbHVlLFxuICAgICAgc2VhcmNoOiBzZWFyY2hWYWx1ZSxcbiAgICAgIGhhc2g6IGhhc2hWYWx1ZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIEVtaXRzIGEgcm91dGVyIGV2ZW50IHRvIGV2ZXJ5IHJlZ2lzdGVyZWQgaW5zdHJ1bWVudGF0aW9uLiAqL1xuICBmdW5jdGlvbiBlbWl0RXZlbnQoZXZlbnQ6IFJvdXRlckV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHJvdXRlckRpc3Bvc2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJlZ2lzdHJ5LmVtaXRFdmVudChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQXR0ZW1wdHMgdG8gY29lcmNlIGFuIGFyYml0cmFyeSBzdHJpbmcgaW50byBhIGtub3duIG5hdmlnYXRpb24gc291cmNlLlxuICAgKi9cbiAgZnVuY3Rpb24gbWFwT3JpZ2luKHJhdz86IHN0cmluZyk6IFJvdXRlck5hdmlnYXRpb25Tb3VyY2UgfCB1bmRlZmluZWQge1xuICAgIGlmIChpc1JvdXRlck5hdmlnYXRpb25Tb3VyY2UocmF3KSkge1xuICAgICAgcmV0dXJuIHJhdztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIG9yaWdpbiBmb3IgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBldmVudC5cbiAgICovXG4gIC8qKiBSZXNvbHZlcyB0aGUgbmF2aWdhdGlvbiBzb3VyY2UgY29tYmluaW5nIGhpc3RvcnkgY29udGV4dCBhbmQgcGVuZGluZyBpbnRlbnQuICovXG4gIGZ1bmN0aW9uIHJlc29sdmVOYXZpZ2F0aW9uT3JpZ2luKFxuICAgIGNvbnRleHQ/OiBIaXN0b3J5RGVidWdDb250ZXh0IHwgbnVsbCxcbiAgKTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSB7XG4gICAgY29uc3QgZmFsbGJhY2tPcmlnaW4gPSBwZW5kaW5nTmF2aWdhdGlvbk9yaWdpbjtcbiAgICBsZXQgb3JpZ2luOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlIHwgdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgY29udGV4dE9yaWdpbiA9IGNvbnRleHQ/Lm9yaWdpbjtcbiAgICBpZiAoY29udGV4dE9yaWdpbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcmlnaW4gPSBtYXBPcmlnaW4oY29udGV4dE9yaWdpbik7XG4gICAgfVxuXG4gICAgb3JpZ2luID8/PSBmYWxsYmFja09yaWdpbjtcbiAgICBvcmlnaW4gPz89ICdleHRlcm5hbCc7XG4gICAgcGVuZGluZ05hdmlnYXRpb25PcmlnaW4gPSB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIG9yaWdpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRyYWN0cyB0aGUgaW5uZXItbW9zdCBtYXRjaGVkIHJvdXRlIHBhdGggZnJvbSBhIHJvdXRlIGVudHJ5IHdoZW4gYXZhaWxhYmxlLlxuICAgKi9cbiAgLyoqIFJldHVybnMgdGhlIGRlZXBlc3QgbWF0Y2hlZCByb3V0ZSBwYXRoIGZyb20gYSByb3V0ZSBlbnRyeSBpZiBhdmFpbGFibGUuICovXG4gIGZ1bmN0aW9uIHJlYWRNYXRjaGVkUm91dGVQYXRoKFxuICAgIGVudHJ5OiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PiB8IHVuZGVmaW5lZCxcbiAgKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZW50cnkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgbWF0Y2hlZFJvdXRlID0gZW50cnkucm91dGU7XG4gICAgaWYgKG1hdGNoZWRSb3V0ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgY2hpbGRSb3V0ZXMgPSBtYXRjaGVkUm91dGUucm91dGUucm91dGVzO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkUm91dGVzKSkge1xuICAgICAgY29uc3QgbGFzdENoaWxkID0gY2hpbGRSb3V0ZXMuYXQoLTEpO1xuICAgICAgaWYgKGxhc3RDaGlsZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGxhc3RDaGlsZFJlY29yZCA9IGxhc3RDaGlsZCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgY29uc3QgY2hpbGRQYXRoID0gbGFzdENoaWxkUmVjb3JkLnBhdGg7XG4gICAgICAgIGlmICh0eXBlb2YgY2hpbGRQYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiBjaGlsZFBhdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3Qgcm9vdFBhdGggPSBtYXRjaGVkUm91dGUucm91dGUucGF0aDtcbiAgICBpZiAodHlwZW9mIHJvb3RQYXRoID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJvb3RQYXRoO1xuICAgIH1cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGRlZXBlc3QgYWN0aXZlIHF1ZXJ5IHNjaGVtYSBmb3IgYSBtYXRjaGVkIHJvdXRlLiAqL1xuICBmdW5jdGlvbiByZWFkQWN0aXZlUXVlcnlTY2hlbWEoXG4gICAgcm91dGU6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+Wydyb3V0ZSddLFxuICApOiBSb3V0ZXJRdWVyeVNjaGVtYSB7XG4gICAgcmV0dXJuIHJvdXRlPy5yb3V0ZS5yb3V0ZXMuYXQoLTEpPy5xdWVyeVNjaGVtYTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBIVFRQLW9yaWVudGVkIHN0YXR1cyBvZiB0aGUgZGVlcGVzdCBtYXRjaGVkIHJvdXRlLiAqL1xuICBmdW5jdGlvbiByZWFkUmVuZGVyU3RhdHVzKFxuICAgIHJvdXRlOiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0Plsncm91dGUnXSxcbiAgKTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD5bJ3N0YXR1cyddIHtcbiAgICByZXR1cm4gcm91dGU/LnJvdXRlLnJvdXRlcy5hdCgtMSk/LnN0YXR1cyA/PyAyMDA7XG4gIH1cblxuICAvKiogUmVhZHMgYSBwYWdlIG51bWJlciBmcm9tIGVpdGhlciBgcGFnZWAgb3IgYHBhZ2UuZXFgIGZpbHRlciBzaGFwZXMuICovXG4gIGZ1bmN0aW9uIHJlYWRQYWdlVmFsdWUoZmlsdGVycz86IFVua25vd25GaWx0ZXJzKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoZmlsdGVycyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHJhd1BhZ2UgPSBmaWx0ZXJzLnBhZ2U7XG4gICAgaWYgKHR5cGVvZiByYXdQYWdlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIHJhd1BhZ2U7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHJhd1BhZ2UgIT0gbnVsbCAmJlxuICAgICAgdHlwZW9mIHJhd1BhZ2UgPT09ICdvYmplY3QnICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShyYXdQYWdlKSAmJlxuICAgICAgdHlwZW9mIChyYXdQYWdlIGFzIHsgZXE/OiB1bmtub3duIH0pLmVxID09PSAnbnVtYmVyJ1xuICAgICkge1xuICAgICAgcmV0dXJuIChyYXdQYWdlIGFzIHsgZXE6IG51bWJlciB9KS5lcTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBOb3JtYWxpemVzIHRoZSBwYWdlIGZpbHRlciB0byBhIG1pbmltdW0gdmFsdWUgb2YgMSB3aGVuIHByZXNlbnQuICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVBhZ2VGaWx0ZXJzKGZpbHRlcnM/OiBVbmtub3duRmlsdGVycyk6IHtcbiAgICBmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnM7XG4gICAgbm9ybWFsaXplZDogYm9vbGVhbjtcbiAgfSB7XG4gICAgY29uc3QgcGFnZVZhbHVlID0gcmVhZFBhZ2VWYWx1ZShmaWx0ZXJzKTtcbiAgICBpZiAocGFnZVZhbHVlID09IG51bGwgfHwgcGFnZVZhbHVlID49IDEgfHwgZmlsdGVycyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBub3JtYWxpemVkOiBmYWxzZSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgLi4uZmlsdGVycyxcbiAgICAgICAgcGFnZTogeyBlcTogMSB9LFxuICAgICAgfSxcbiAgICAgIG5vcm1hbGl6ZWQ6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBDb252ZXJ0cyByb3V0ZXIgc2VhcmNoIHN0YXRlIGludG8gdGhlIG9iamVjdCBmb3J3YXJkZWQgdG8gYHByZXBhcmVgLiAqL1xuICBmdW5jdGlvbiBidWlsZFByZXBhcmVRdWVyeUlucHV0KHN0YXRlOiBQYXJzZWRTZWFyY2hTdGF0ZSk6IFByZXBhcmVRdWVyeUlucHV0IHtcbiAgICByZXR1cm4gc3RhdGUucXVlcnk7XG4gIH1cblxuICAvKiogQnVpbGRzIGEgcm91dGUgZW50cnkgd2l0aCBhIGZyZXNobHkgY2FsY3VsYXRlZCBhY3RpdmUgbG9hZCBzdGF0ZS4gKi9cbiAgZnVuY3Rpb24gd2l0aExvYWRTdGF0ZShcbiAgICBlbnRyeTogT21pdDxSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PiwgJ2FjdGl2ZUxvYWRTdGF0ZScgfCAnbG9hZFN0YXRlJz4sXG4gICk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+IHtcbiAgICBjb25zdCB7IGFjdGl2ZUxvYWRTdGF0ZSwgbG9hZFN0YXRlIH0gPSBjYWxjdWxhdGVMb2FkU3RhdGUoXG4gICAgICBlbnRyeS5wcmVwYXJlZE1hdGNoLFxuICAgICAgbG9hZFN0YXRlVmVyc2lvbixcbiAgICApO1xuICAgIHJldHVybiB7XG4gICAgICAuLi5lbnRyeSxcbiAgICAgIGFjdGl2ZUxvYWRTdGF0ZSxcbiAgICAgIGxvYWRTdGF0ZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqIFJldHVybnMgd2hldGhlciB0aGUgYWN0aXZlIHJvdXRlIGxvYWQgc3RhdGUgY2hhbmdlZCBpbiBhIG1lYW5pbmdmdWwgd2F5LiAqL1xuICBmdW5jdGlvbiBpc1NhbWVBY3RpdmVMb2FkU3RhdGUoXG4gICAgY3VycmVudDogUm91dGVyQWN0aXZlTG9hZFN0YXRlLFxuICAgIG5leHQ6IFJvdXRlckFjdGl2ZUxvYWRTdGF0ZSxcbiAgKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGN1cnJlbnQuc3RhdHVzID09PSBuZXh0LnN0YXR1cyAmJlxuICAgICAgY3VycmVudC5wZW5kaW5nQ291bnQgPT09IG5leHQucGVuZGluZ0NvdW50ICYmXG4gICAgICBjdXJyZW50LnJlamVjdGVkQ291bnQgPT09IG5leHQucmVqZWN0ZWRDb3VudFxuICAgICk7XG4gIH1cblxuICAvKiogQnVpbGRzIGEgc25hcHNob3QgcmVwcmVzZW50YXRpb24gb2YgdGhlIGN1cnJlbnQgcm91dGVyIGVudHJ5LiAqL1xuICBmdW5jdGlvbiBidWlsZEVudHJ5U25hcHNob3QoXG4gICAgZW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+LFxuICApOiBSb3V0ZXJFbnRyeVNuYXBzaG90IHtcbiAgICBjb25zdCBwcmVwYXJlZFNlZ21lbnRzID0gZW50cnkucHJlcGFyZWRNYXRjaC5zZWdtZW50cy5tYXAoKHNlZ21lbnQpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGg6IHNlZ21lbnQucGF0aCxcbiAgICAgICAgZnVsbFBhdGg6IHNlZ21lbnQuZnVsbFBhdGgsXG4gICAgICAgIHNlZ21lbnRLZXk6IHNlZ21lbnQuc2VnbWVudEtleSxcbiAgICAgICAgcGFyYW1OYW1lczogc2VnbWVudC5wYXJhbU5hbWVzLFxuICAgICAgICBzZWdtZW50SW5kZXg6IHNlZ21lbnQuc2VnbWVudEluZGV4LFxuICAgICAgICByb3V0ZU5vZGU6IHNlZ21lbnQucm91dGVOb2RlLFxuICAgICAgICBwcmVwYXJlZFJlc291cmNlOiBzZWdtZW50LnByZXBhcmVkUmVzb3VyY2UsXG4gICAgICAgIHByZXBhcmVkSHlkcmF0aW9uOiBzZWdtZW50LnByZXBhcmVkSHlkcmF0aW9uLFxuICAgICAgICByZW5kZXI6IHNlZ21lbnQucmVuZGVyLFxuICAgICAgICByZWRpcmVjdFRvOiBzZWdtZW50LnJlZGlyZWN0VG8sXG4gICAgICAgIHJlZGlyZWN0U3RhdHVzOiBzZWdtZW50LnJlZGlyZWN0U3RhdHVzLFxuICAgICAgICByZXNvdXJjZVBhZ2U6IHNlZ21lbnQucmVzb3VyY2VQYWdlLFxuICAgICAgICBzdXNwZW5zZUJvdW5kYXJ5OiBzZWdtZW50LnN1c3BlbnNlQm91bmRhcnksXG4gICAgICAgIGZhbGxiYWNrOiBzZWdtZW50LmZhbGxiYWNrLFxuICAgICAgICBoaWdobGlnaHRJZDogc2VnbWVudC5oaWdobGlnaHRJZCxcbiAgICAgICAgcXVlcnlTY2hlbWE6IHNlZ21lbnQucXVlcnlTY2hlbWEsXG4gICAgICAgIHByZXBhcmVkU3RhdHVzOiBzZWdtZW50LnByZXBhcmVkUmVzb3VyY2U/LmdldFN0YXR1cygpLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24oZW50cnkubG9jYXRpb24pLFxuICAgICAgcmF3U2VhcmNoOiBlbnRyeS5yYXdTZWFyY2gsXG4gICAgICByb3V0ZVBhdGg6IHJlYWRNYXRjaGVkUm91dGVQYXRoKGVudHJ5KSxcbiAgICAgIHBhcmFtczogZW50cnkucm91dGU/LnBhcmFtcyxcbiAgICAgIHF1ZXJ5OiBlbnRyeS5xdWVyeSxcbiAgICAgIHByZXBhcmVkTWF0Y2g6IHtcbiAgICAgICAgc2VnbWVudHM6IHByZXBhcmVkU2VnbWVudHMsXG4gICAgICB9LFxuICAgICAgYWN0aXZlTG9hZFN0YXRlOiBlbnRyeS5hY3RpdmVMb2FkU3RhdGUsXG4gICAgICBsb2FkU3RhdGU6IGVudHJ5LmxvYWRTdGF0ZSxcbiAgICAgIGZpbHRlcnM6IGVudHJ5LmZpbHRlcnMsXG4gICAgICBmaWx0ZXJEaWFnbm9zdGljczogZW50cnkuZmlsdGVyRGlhZ25vc3RpY3MsXG4gICAgICBhY3RpdmVRdWVyeVNjaGVtYTogZW50cnkuYWN0aXZlUXVlcnlTY2hlbWEsXG4gICAgICBmb3JjZVJlcmVuZGVyOiBlbnRyeS5mb3JjZVJlcmVuZGVyLFxuICAgICAgc3RhdHVzOiBlbnRyeS5zdGF0dXMsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBOb3RpZmllcyBpbnN0cnVtZW50YXRpb25zIG9mIGEgbmV3IGFjdGl2ZSBlbnRyeS4gKi9cbiAgZnVuY3Rpb24gbm90aWZ5RW50cnkoZW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+KTogdm9pZCB7XG4gICAgcmVnaXN0cnkubm90aWZ5RW50cnlDaGFuZ2UoYnVpbGRFbnRyeVNuYXBzaG90KGVudHJ5KSk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyBhIGRlZHVwbGljYXRpb24ga2V5IGZvciBwcmVsb2FkIGV2ZW50cy4gKi9cbiAgZnVuY3Rpb24gYnVpbGRQcmVsb2FkS2V5KFxuICAgIG1vZGU6IFJvdXRlclByZWxvYWRNb2RlVmFsdWUsXG4gICAgcGF0aG5hbWU6IHN0cmluZyxcbiAgICBzZWFyY2ggPSAnJyxcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bW9kZX06JHtwYXRobmFtZX0ke3NlYXJjaH1gO1xuICB9XG5cbiAgLyoqIEJ1aWxkcyBhIG5vcm1hbGl6ZWQgbG9va3VwIGtleSBmb3IgcHJlcGFyZWQgZnVsbC1yb3V0ZSBwcmVsb2Fkcy4gKi9cbiAgZnVuY3Rpb24gYnVpbGRQcmVsb2FkZWRNYXRjaEtleShwYXRobmFtZTogc3RyaW5nLCBzZWFyY2ggPSAnJyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3BhdGhuYW1lfSR7c2VhcmNofWA7XG4gIH1cblxuICAvKiogQ29tcGFyZXMgcGF0aCBwYXJhbWV0ZXIgdmFsdWVzLCBpbmNsdWRpbmcgd2lsZGNhcmQgYXJyYXlzLiAqL1xuICBmdW5jdGlvbiBpc1BhcmFtVmFsdWVFcXVhbChcbiAgICBsZWZ0OiBQYXJhbURhdGFbc3RyaW5nXSxcbiAgICByaWdodDogUGFyYW1EYXRhW3N0cmluZ10sXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGxlZnQpIHx8IEFycmF5LmlzQXJyYXkocmlnaHQpKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkobGVmdCkgfHwgIUFycmF5LmlzQXJyYXkocmlnaHQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChsZWZ0Lmxlbmd0aCAhPT0gcmlnaHQubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZWZ0LmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSByaWdodFtpbmRleF07XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIGxlZnQgPT09IHJpZ2h0O1xuICB9XG5cbiAgLyoqIFJldHVybnMgd2hldGhlciB0d28gbWF0Y2hlZCByb3V0ZSBzbmFwc2hvdHMgZGVzY3JpYmUgdGhlIHNhbWUgcm91dGUgYW5kIHBhcmFtcy4gKi9cbiAgZnVuY3Rpb24gYXJlTWF0Y2hlZFJvdXRlc0VxdWl2YWxlbnQoXG4gICAgbGVmdDogUm91dGVyTWF0Y2hlZFJvdXRlPFBhcmFtRGF0YT4gfCBudWxsLFxuICAgIHJpZ2h0OiBSb3V0ZXJNYXRjaGVkUm91dGU8UGFyYW1EYXRhPiB8IG51bGwsXG4gICk6IGJvb2xlYW4ge1xuICAgIGlmIChsZWZ0ID09PSByaWdodCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChsZWZ0ID09IG51bGwgfHwgcmlnaHQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAobGVmdC5yb3V0ZSAhPT0gcmlnaHQucm91dGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgbGVmdEVudHJpZXMgPSBPYmplY3QuZW50cmllcyhsZWZ0LnBhcmFtcyk7XG4gICAgY29uc3QgcmlnaHRLZXlzID0gbmV3IFNldChPYmplY3Qua2V5cyhyaWdodC5wYXJhbXMpKTtcbiAgICBpZiAobGVmdEVudHJpZXMubGVuZ3RoICE9PSByaWdodEtleXMuc2l6ZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gbGVmdEVudHJpZXMuZXZlcnkoKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIHJpZ2h0S2V5cy5oYXMoa2V5KSAmJiBpc1BhcmFtVmFsdWVFcXVhbCh2YWx1ZSwgcmlnaHQucGFyYW1zW2tleV0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEVtaXRzIGEgcHJlbG9hZCBvciBwcmVsb2FkLWNvZGUgaW5zdHJ1bWVudGF0aW9uIGV2ZW50LiAqL1xuICBmdW5jdGlvbiBlbWl0UHJlbG9hZEV2ZW50KFxuICAgIG1vZGU6ICdjb2RlJyB8ICdmdWxsJyxcbiAgICBwYXRobmFtZTogc3RyaW5nLFxuICAgIHNlYXJjaDogc3RyaW5nLFxuICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBrZXkgPSBidWlsZFByZWxvYWRLZXkobW9kZSwgcGF0aG5hbWUsIHNlYXJjaCk7XG4gICAgY29uc3QgcmVjZW50bHlSZWNvcmRlZCA9XG4gICAgICBsYXN0UHJlbG9hZFNpZ25hdHVyZSAhPT0gbnVsbCAmJlxuICAgICAgbGFzdFByZWxvYWRTaWduYXR1cmUua2V5ID09PSBrZXkgJiZcbiAgICAgIG5vdyAtIGxhc3RQcmVsb2FkU2lnbmF0dXJlLnRpbWVzdGFtcCA8IDUwO1xuXG4gICAgaWYgKCFyZWNlbnRseVJlY29yZGVkKSB7XG4gICAgICBlbWl0RXZlbnQoe1xuICAgICAgICBraW5kOiAncHJlbG9hZCcsXG4gICAgICAgIHNvdXJjZSxcbiAgICAgICAgdGltZXN0YW1wOiBub3csXG4gICAgICAgIGxvY2F0aW9uOiBub3JtYWxpemVMb2NhdGlvbihoaXN0b3J5LmxvY2F0aW9uKSxcbiAgICAgICAgdGFyZ2V0UGF0aG5hbWU6IHBhdGhuYW1lLFxuICAgICAgICBtb2RlLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGFzdFByZWxvYWRTaWduYXR1cmUgPSB7IGtleSwgdGltZXN0YW1wOiBub3cgfTtcbiAgfVxuXG4gIC8qKiBFbWl0cyBhIGhpc3RvcnkgbXV0YXRpb24gZXZlbnQgKHB1c2gvcmVwbGFjZS9ub3JtYWxpemUpLiAqL1xuICBmdW5jdGlvbiBlbWl0SGlzdG9yeUV2ZW50KFxuICAgIGFjdGlvbjogUm91dGVySGlzdG9yeUFjdGlvblZhbHVlLFxuICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgICBsb2NhdGlvbjogeyBwYXRobmFtZTogc3RyaW5nOyBzZWFyY2g/OiBzdHJpbmc7IGhhc2g/OiBzdHJpbmcgfSxcbiAgICBkZXRhaWxzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gICk6IHZvaWQge1xuICAgIHBlbmRpbmdOYXZpZ2F0aW9uT3JpZ2luID0gc291cmNlO1xuICAgIGVtaXRFdmVudCh7XG4gICAgICBraW5kOiAnaGlzdG9yeScsXG4gICAgICBzb3VyY2UsXG4gICAgICBhY3Rpb24sXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24obG9jYXRpb24pLFxuICAgICAgZGV0YWlscyxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIEJ1aWxkIGEgZmxhdCBsaXN0IG9mIHJvdXRlcyBmb3IgZWZmaWNpZW50IG1hdGNoaW5nLlxuICBjb25zdCBmbGF0Um91dGVzID0gYnVpbGRSb3V0ZXMocm91dGVzKTtcblxuICAvKiogU2VyaWFsaXplcyBhIHJlZGlyZWN0IHVzaW5nIHRoZSBkZXN0aW5hdGlvbiByb3V0ZSdzIHF1ZXJ5IHNjaGVtYS4gKi9cbiAgZnVuY3Rpb24gYnVpbGRSZWRpcmVjdFNlYXJjaChpbnB1dDoge1xuICAgIHBhdGhuYW1lOiBzdHJpbmc7XG4gICAgcXVlcnk/OiBVbmtub3duUXVlcnlTaGFwZTtcbiAgICBmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnM7XG4gIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uUm91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywge1xuICAgICAgLi4uaGlzdG9yeS5sb2NhdGlvbixcbiAgICAgIHBhdGhuYW1lOiBpbnB1dC5wYXRobmFtZSxcbiAgICB9KTtcbiAgICByZXR1cm4gYnVpbGREZXN0aW5hdGlvblNlYXJjaCh7XG4gICAgICBmaWx0ZXJzOiBpbnB1dC5maWx0ZXJzLFxuICAgICAgcXVlcnk6IGlucHV0LnF1ZXJ5LFxuICAgICAgcXVlcnlTY2hlbWE6IHJlYWRBY3RpdmVRdWVyeVNjaGVtYShkZXN0aW5hdGlvblJvdXRlKSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXBsYWNlcyBicm93c2VyIGhpc3RvcnkgZm9yIGEgdW5pdmVyc2FsIHJlZGlyZWN0IHJvdXRlIG9yIHByZXBhcmF0aW9uLiAqL1xuICBmdW5jdGlvbiByZXBsYWNlV2l0aFJlZGlyZWN0KFxuICAgIHJlZGlyZWN0VG86IHN0cmluZyxcbiAgICBzdGF0dXM6IFJvdXRlclJlZGlyZWN0U3RhdHVzLFxuICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudExvY2F0aW9uID0gbm9ybWFsaXplTG9jYXRpb24oaGlzdG9yeS5sb2NhdGlvbik7XG4gICAgY29uc3QgY3VycmVudEhyZWYgPSBgaHR0cDovL3BsdW1pbGUubG9jYWwke2N1cnJlbnRMb2NhdGlvbi5wYXRobmFtZX0ke2N1cnJlbnRMb2NhdGlvbi5zZWFyY2h9JHtjdXJyZW50TG9jYXRpb24uaGFzaH1gO1xuICAgIGNvbnN0IGRlc3RpbmF0aW9uID0gcmVzb2x2ZVJvdXRlckRlc3RpbmF0aW9uKHtcbiAgICAgIGRlc3RpbmF0aW9uOiByZWRpcmVjdFRvLFxuICAgICAgY3VycmVudEhyZWYsXG4gICAgICBidWlsZFNlYXJjaDogYnVpbGRSZWRpcmVjdFNlYXJjaCxcbiAgICB9KTtcbiAgICBjb25zdCB0YXJnZXQgPSB7XG4gICAgICBwYXRobmFtZTogZGVzdGluYXRpb24ucGF0aG5hbWUsXG4gICAgICBzZWFyY2g6IGRlc3RpbmF0aW9uLnNlYXJjaCxcbiAgICAgIGhhc2g6IGRlc3RpbmF0aW9uLmhhc2gsXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGFyZ2V0ID0gYCR7Y3VycmVudExvY2F0aW9uLnBhdGhuYW1lfSR7Y3VycmVudExvY2F0aW9uLnNlYXJjaH0ke2N1cnJlbnRMb2NhdGlvbi5oYXNofWA7XG4gICAgY29uc3QgbmV4dFRhcmdldCA9IGAke3RhcmdldC5wYXRobmFtZX0ke3RhcmdldC5zZWFyY2h9JHt0YXJnZXQuaGFzaH1gO1xuICAgIGlmIChjdXJyZW50VGFyZ2V0ID09PSBuZXh0VGFyZ2V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFJvdXRlciByZWRpcmVjdCBsb29wOiAke25leHRUYXJnZXR9YCk7XG4gICAgfVxuICAgIGVtaXRIaXN0b3J5RXZlbnQoJ3JlcGxhY2UnLCBzb3VyY2UsIHRhcmdldCwge1xuICAgICAgdHJpZ2dlcjogJ3JlZGlyZWN0JyxcbiAgICAgIHJlZGlyZWN0U3RhdHVzOiBzdGF0dXMsXG4gICAgfSk7XG4gICAgLy8gSW52YWxpZGF0ZSBwZW5kaW5nIGNhbGxiYWNrcyBiZWZvcmUgdGhlIGRlZmVycmVkIGhpc3Rvcnkgbm90aWZpY2F0aW9uLlxuICAgIGFjdGl2ZUVudHJ5SWQgKz0gMTtcbiAgICBoaXN0b3J5LnNldCh7XG4gICAgICAuLi50YXJnZXQsXG4gICAgICBkZWJ1Z0NvbnRleHQ6IHtcbiAgICAgICAgb3JpZ2luOiBzb3VyY2UsXG4gICAgICAgIHRyaWdnZXI6ICdyZWRpcmVjdCcsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIEVhZ2VybHkgc3RhcnRzIGV2ZXJ5IHJlc291cmNlIGluIGEgcHJlcGFyZWQgcm91dGUgY2hhaW4uICovXG4gIGZ1bmN0aW9uIGxvYWRQcmVwYXJlZE1hdGNoUmVzb3VyY2VzKFxuICAgIHByZXBhcmVkTWF0Y2hUb0xvYWQ6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+WydwcmVwYXJlZE1hdGNoJ10sXG4gICk6IHZvaWQge1xuICAgIHByZXBhcmVkTWF0Y2hUb0xvYWQuc2VnbWVudHMuZm9yRWFjaCgocm91dGUpID0+IHtcbiAgICAgIGlmIChyb3V0ZS5wcmVwYXJlZFJlc291cmNlICE9IG51bGwpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgICByb3V0ZS5wcmVwYXJlZFJlc291cmNlLmxvYWQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGEgY2FjaGVkIGZ1bGwgcHJlbG9hZCBpZiBpdCBpcyBzdGlsbCB2YWxpZCBmb3IgdGhlIG5hdmlnYXRpb24uICovXG4gIGZ1bmN0aW9uIGNvbnN1bWVQcmVsb2FkZWRNYXRjaChpbnB1dDoge1xuICAgIHBhdGhuYW1lOiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgY29udGV4dDogVENvbnRleHQ7XG4gICAgcm91dGU6IFJvdXRlck1hdGNoZWRSb3V0ZTxQYXJhbURhdGE+IHwgbnVsbDtcbiAgICBxdWVyeVNjaGVtYTogUm91dGVyUXVlcnlTY2hlbWE7XG4gIH0pOiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PlsncHJlcGFyZWRNYXRjaCddIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBrZXkgPSBidWlsZFByZWxvYWRlZE1hdGNoS2V5KGlucHV0LnBhdGhuYW1lLCBpbnB1dC5zZWFyY2gpO1xuICAgIGNvbnN0IGNhY2hlZCA9IHByZWxvYWRlZE1hdGNoZXMuZ2V0KGtleSk7XG4gICAgaWYgKGNhY2hlZCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBwcmVsb2FkZWRNYXRjaGVzLmRlbGV0ZShrZXkpO1xuICAgIGlmIChcbiAgICAgIGNhY2hlZC5jb250ZXh0ICE9PSBpbnB1dC5jb250ZXh0IHx8XG4gICAgICAhYXJlTWF0Y2hlZFJvdXRlc0VxdWl2YWxlbnQoY2FjaGVkLnJvdXRlLCBpbnB1dC5yb3V0ZSkgfHxcbiAgICAgIGNhY2hlZC5xdWVyeVNjaGVtYSAhPT0gaW5wdXQucXVlcnlTY2hlbWEgfHxcbiAgICAgIGNhY2hlZC5zZWFyY2ggIT09IGlucHV0LnNlYXJjaFxuICAgICkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlZC5wcmVwYXJlZE1hdGNoO1xuICB9XG5cbiAgLy8gRmluZCB0aGUgaW5pdGlhbCByb3V0ZSBtYXRjaCBhbmQgcHJlcGFyZSBpdCBmb3IgcmVuZGVyaW5nXG4gIGNvbnN0IG1hdGNoZWRJbml0aWFsUm91dGUgPSBnZXRNYXRjaGVkUm91dGUoZmxhdFJvdXRlcywgaGlzdG9yeS5sb2NhdGlvbik7XG4gIGNvbnN0IGluaXRpYWxEZWNsYXJhdGl2ZVJlZGlyZWN0ID0gbWF0Y2hlZEluaXRpYWxSb3V0ZT8ucm91dGUucmVkaXJlY3RUbztcbiAgY29uc3QgaW5pdGlhbERlY2xhcmF0aXZlUmVkaXJlY3RTdGF0dXMgPVxuICAgIG1hdGNoZWRJbml0aWFsUm91dGU/LnJvdXRlLnJlZGlyZWN0U3RhdHVzID8/IDMwMjtcbiAgaWYgKGluaXRpYWxEZWNsYXJhdGl2ZVJlZGlyZWN0ICE9IG51bGwpIHtcbiAgICByZXBsYWNlV2l0aFJlZGlyZWN0KFxuICAgICAgaW5pdGlhbERlY2xhcmF0aXZlUmVkaXJlY3QsXG4gICAgICBpbml0aWFsRGVjbGFyYXRpdmVSZWRpcmVjdFN0YXR1cyxcbiAgICAgICdleHRlcm5hbCcsXG4gICAgKTtcbiAgfVxuICBsZXQgcm91dGUgPSBtYXRjaGVkSW5pdGlhbFJvdXRlO1xuICBpZiAoaW5pdGlhbERlY2xhcmF0aXZlUmVkaXJlY3QgIT0gbnVsbCkge1xuICAgIHJvdXRlID0gbnVsbDtcbiAgfVxuICBjb25zdCBpbml0aWFsVW5pZmllZFNjaGVtYSA9IHJlYWRBY3RpdmVRdWVyeVNjaGVtYShyb3V0ZSk7XG4gIGNvbnN0IGluaXRpYWxTZWFyY2hTdGF0ZSA9IHBhcnNlU2VhcmNoU3RhdGUoXG4gICAgaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gsXG4gICAgaW5pdGlhbFVuaWZpZWRTY2hlbWEsXG4gICk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRJbml0aWFsRmlsdGVycyA9IG5vcm1hbGl6ZVBhZ2VGaWx0ZXJzKFxuICAgIGluaXRpYWxTZWFyY2hTdGF0ZS5maWx0ZXJzLFxuICApO1xuICBjb25zdCBpbml0aWFsTG9jYXRpb25TbmFwc2hvdCA9IG5vcm1hbGl6ZUxvY2F0aW9uKGhpc3RvcnkubG9jYXRpb24pO1xuICBsZXQgaHlkcmF0aW9uVmFsdWVzOiBNYXA8c3RyaW5nLCBSb3V0ZXJKc29uVmFsdWU+IHwgdW5kZWZpbmVkO1xuICBpZiAob3B0aW9ucy5oeWRyYXRpb25TbmFwc2hvdCAhPSBudWxsKSB7XG4gICAgY29uc3Qgc25hcHNob3QgPSBvcHRpb25zLmh5ZHJhdGlvblNuYXBzaG90O1xuICAgIGNvbnN0IHNuYXBzaG90VmVyc2lvbjogdW5rbm93biA9IHNuYXBzaG90LnZlcnNpb247XG4gICAgY29uc3Qgc25hcHNob3RTZWdtZW50czogdW5rbm93biA9IHNuYXBzaG90LnNlZ21lbnRzO1xuICAgIGlmIChzbmFwc2hvdFZlcnNpb24gIT09IDEgfHwgIUFycmF5LmlzQXJyYXkoc25hcHNob3RTZWdtZW50cykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm91dGVyIGh5ZHJhdGlvbiBzbmFwc2hvdCBpcyBtYWxmb3JtZWQnKTtcbiAgICB9XG4gICAgY29uc3Qgc25hcHNob3RMb2NhdGlvbiA9IG5vcm1hbGl6ZUxvY2F0aW9uKHNuYXBzaG90LmxvY2F0aW9uKTtcbiAgICBpZiAoXG4gICAgICBzbmFwc2hvdExvY2F0aW9uLnBhdGhuYW1lICE9PSBpbml0aWFsTG9jYXRpb25TbmFwc2hvdC5wYXRobmFtZSB8fFxuICAgICAgc25hcHNob3RMb2NhdGlvbi5zZWFyY2ggIT09IGluaXRpYWxMb2NhdGlvblNuYXBzaG90LnNlYXJjaCB8fFxuICAgICAgc25hcHNob3RMb2NhdGlvbi5oYXNoICE9PSBpbml0aWFsTG9jYXRpb25TbmFwc2hvdC5oYXNoXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdSb3V0ZXIgaHlkcmF0aW9uIGxvY2F0aW9uIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGxvY2F0aW9uJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IHZhbHVlcyA9IG5ldyBNYXA8c3RyaW5nLCBSb3V0ZXJKc29uVmFsdWU+KCk7XG4gICAgaHlkcmF0aW9uVmFsdWVzID0gdmFsdWVzO1xuICAgIGNvbnN0IHNlZ21lbnRzID0gc25hcHNob3RTZWdtZW50cyBhcyB1bmtub3duW107XG4gICAgc2VnbWVudHMuZm9yRWFjaCgoc2VnbWVudCkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2Ygc2VnbWVudCAhPT0gJ29iamVjdCcgfHxcbiAgICAgICAgc2VnbWVudCA9PSBudWxsIHx8XG4gICAgICAgICEoJ3ByZXBhcmVkJyBpbiBzZWdtZW50KVxuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm91dGVyIGh5ZHJhdGlvbiBzbmFwc2hvdCBpcyBtYWxmb3JtZWQnKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNlZ21lbnRSZWNvcmQgPSBzZWdtZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3Qgc2VnbWVudEtleSA9IHNlZ21lbnRSZWNvcmQua2V5O1xuICAgICAgaWYgKHR5cGVvZiBzZWdtZW50S2V5ICE9PSAnc3RyaW5nJyB8fCBzZWdtZW50S2V5ID09PSAnJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JvdXRlciBoeWRyYXRpb24gc25hcHNob3QgaXMgbWFsZm9ybWVkJyk7XG4gICAgICB9XG4gICAgICBpZiAodmFsdWVzLmhhcyhzZWdtZW50S2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYER1cGxpY2F0ZSByb3V0ZXIgaHlkcmF0aW9uIHNlZ21lbnQ6ICR7c2VnbWVudEtleX1gKTtcbiAgICAgIH1cbiAgICAgIGFzc2VydFJvdXRlckpzb25WYWx1ZShzZWdtZW50UmVjb3JkLnByZXBhcmVkKTtcbiAgICAgIHZhbHVlcy5zZXQoc2VnbWVudEtleSwgc2VnbWVudFJlY29yZC5wcmVwYXJlZCk7XG4gICAgfSk7XG4gIH1cbiAgbGV0IGluaXRpYWxJbnN0cnVtZW50YXRpb246XG4gICAgfCB7XG4gICAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHZvaWQ7XG4gICAgICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgICAgICAgbG9jYXRpb246IFJvdXRlckxvY2F0aW9uU25hcHNob3Q7XG4gICAgICB9XG4gICAgfCB1bmRlZmluZWQ7XG4gIGlmIChyb3V0ZSAhPSBudWxsKSB7XG4gICAgaW5pdGlhbEluc3RydW1lbnRhdGlvbiA9IHtcbiAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHtcbiAgICAgICAgZW1pdEV2ZW50KGV2ZW50KTtcbiAgICAgIH0sXG4gICAgICBzb3VyY2U6IGxhc3ROYXZpZ2F0aW9uT3JpZ2luLFxuICAgICAgbG9jYXRpb246IGluaXRpYWxMb2NhdGlvblNuYXBzaG90LFxuICAgIH07XG4gIH1cbiAgY29uc3QgaW5pdGlhbENvbnRleHQgPSByZXNvbHZlQ29udGV4dCgpO1xuICBjb25zdCBoeWRyYXRpb25Db25zdW1lZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBsZXQgaHlkcmF0aW9uOlxuICAgIHsgdmFsdWVzOiBNYXA8c3RyaW5nLCBSb3V0ZXJKc29uVmFsdWU+OyBjb25zdW1lZDogU2V0PHN0cmluZz4gfSB8IHVuZGVmaW5lZDtcbiAgaWYgKGh5ZHJhdGlvblZhbHVlcyAhPSBudWxsKSB7XG4gICAgaHlkcmF0aW9uID0geyB2YWx1ZXM6IGh5ZHJhdGlvblZhbHVlcywgY29uc3VtZWQ6IGh5ZHJhdGlvbkNvbnN1bWVkIH07XG4gIH1cbiAgbGV0IHByZXBhcmVkTWF0Y2g6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+WydwcmVwYXJlZE1hdGNoJ107XG4gIHRyeSB7XG4gICAgcHJlcGFyZWRNYXRjaCA9IHByZXBhcmVNYXRjaChcbiAgICAgIHJvdXRlLFxuICAgICAgYnVpbGRQcmVwYXJlUXVlcnlJbnB1dCh7XG4gICAgICAgIC4uLmluaXRpYWxTZWFyY2hTdGF0ZSxcbiAgICAgICAgZmlsdGVyczogbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLmZpbHRlcnMsXG4gICAgICB9KSxcbiAgICAgIGluaXRpYWxJbnN0cnVtZW50YXRpb24sXG4gICAgICBpbml0aWFsQ29udGV4dCxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgcmF3UXVlcnk6IGluaXRpYWxTZWFyY2hTdGF0ZS5xdWVyeSxcbiAgICAgICAgZmlsdGVyczogbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLmZpbHRlcnMsXG4gICAgICB9LFxuICAgICAgaHlkcmF0aW9uLFxuICAgICk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVkaXJlY3QpKSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmVwbGFjZVdpdGhSZWRpcmVjdChlcnJvci5yZWRpcmVjdFRvLCBlcnJvci5zdGF0dXNDb2RlLCAnZXh0ZXJuYWwnKTtcbiAgICBwcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKG51bGwpO1xuICB9XG4gIGlmIChoeWRyYXRpb25WYWx1ZXMgIT0gbnVsbCkge1xuICAgIGh5ZHJhdGlvblZhbHVlcy5mb3JFYWNoKChfdmFsdWUsIGtleSkgPT4ge1xuICAgICAgY29uc3QgbWF0Y2hpbmdTZWdtZW50cyA9IHByZXBhcmVkTWF0Y2guc2VnbWVudHMuZmlsdGVyKChzZWdtZW50KSA9PiB7XG4gICAgICAgIHJldHVybiBzZWdtZW50LnNlZ21lbnRLZXkgPT09IGtleTtcbiAgICAgIH0pO1xuICAgICAgaWYgKG1hdGNoaW5nU2VnbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByb3V0ZXIgaHlkcmF0aW9uIHNlZ21lbnQ6ICR7a2V5fWApO1xuICAgICAgfVxuICAgICAgaWYgKG1hdGNoaW5nU2VnbWVudHMubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQW1iaWd1b3VzIHJvdXRlciBoeWRyYXRpb24gc2VnbWVudDogJHtrZXl9YCk7XG4gICAgICB9XG4gICAgICBpZiAoIWh5ZHJhdGlvbkNvbnN1bWVkLmhhcyhrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgUm91dGVyIGh5ZHJhdGlvbiBzZWdtZW50IHdhcyBub3QgY29uc3VtZWQ6ICR7a2V5fWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGNvbnN0IGluaXRpYWxQcmVwYXJlUmVkaXJlY3QgPSBwcmVwYXJlZE1hdGNoLnNlZ21lbnRzXG4gICAgLm1hcCgoc2VnbWVudCkgPT4ge1xuICAgICAgcmV0dXJuIHNlZ21lbnQucHJlcGFyZWRSZXNvdXJjZT8uZ2V0RXJyb3IoKTtcbiAgICB9KVxuICAgIC5maW5kKChlcnJvcik6IGVycm9yIGlzIEh0dHBSZWRpcmVjdCA9PiB7XG4gICAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVkaXJlY3Q7XG4gICAgfSk7XG4gIGlmIChpbml0aWFsUHJlcGFyZVJlZGlyZWN0ICE9IG51bGwpIHtcbiAgICByZXBsYWNlV2l0aFJlZGlyZWN0KFxuICAgICAgaW5pdGlhbFByZXBhcmVSZWRpcmVjdC5yZWRpcmVjdFRvLFxuICAgICAgaW5pdGlhbFByZXBhcmVSZWRpcmVjdC5zdGF0dXNDb2RlLFxuICAgICAgJ2V4dGVybmFsJyxcbiAgICApO1xuICAgIHByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2gobnVsbCk7XG4gIH1cblxuICAvLyBNYWludGFpbiBhIHNldCBvZiBzdWJzY3JpYmVycyB0byB0aGUgYWN0aXZlIHJvdXRlIGVudHJ5XG4gIGxldCBuZXh0SWQgPSAwO1xuICBjb25zdCBzdWJzY3JpYmVycyA9IG5ldyBNYXA8XG4gICAgbnVtYmVyLFxuICAgIFN1YnNjcmliZUNhbGxiYWNrPFBhcmFtRGF0YSwgUm91dGVyUXVlcnlTY2hlbWEsIFRDb250ZXh0PlxuICA+KCk7XG4gIC8vIEhlbHBlciB0byBidWlsZCB0aGUgcmF3IHF1ZXJ5IG9iamVjdCBmcm9tIGEgc2VhcmNoIHN0cmluZ1xuICBsZXQgY3VycmVudEVudHJ5OiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PiA9IHdpdGhMb2FkU3RhdGUoe1xuICAgIGZvcmNlUmVyZW5kZXI6IGZhbHNlLFxuICAgIGxvY2F0aW9uOiBoaXN0b3J5LmxvY2F0aW9uLFxuICAgIHJvdXRlLFxuICAgIHByZXBhcmVkTWF0Y2gsXG4gICAgY29udGV4dDogaW5pdGlhbENvbnRleHQsXG4gICAgcmF3U2VhcmNoOiBoaXN0b3J5LmxvY2F0aW9uLnNlYXJjaCxcbiAgICBxdWVyeTogaW5pdGlhbFNlYXJjaFN0YXRlLnF1ZXJ5LFxuICAgIC8vIHR5cGVkUXVlcnkgcmVtb3ZlZCAodW5pZmllZCBpbnRvIGZpbHRlcnMvcXVlcnkpXG4gICAgZmlsdGVyczogbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLmZpbHRlcnMsXG4gICAgZmlsdGVyRGlhZ25vc3RpY3M6IGluaXRpYWxTZWFyY2hTdGF0ZS5maWx0ZXJEaWFnbm9zdGljcyxcbiAgICBhY3RpdmVRdWVyeVNjaGVtYTogaW5pdGlhbFVuaWZpZWRTY2hlbWEsXG4gICAgc3RhdHVzOiByZWFkUmVuZGVyU3RhdHVzKHJvdXRlKSxcbiAgICBuYXZpZ2F0aW9uOiBoaXN0b3J5Lm5hdmlnYXRpb24sXG4gIH0pO1xuXG4gIC8vIEluaXRpYWwgbm9ybWFsaXphdGlvbiBwYXNzIChlLmcuLCBjbGFtcCBwYWdlKVxuICBpZiAoXG4gICAgbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLm5vcm1hbGl6ZWQgJiZcbiAgICBpbml0aWFsVW5pZmllZFNjaGVtYSAhPSBudWxsICYmXG4gICAgbm9ybWFsaXplZEluaXRpYWxGaWx0ZXJzLmZpbHRlcnMgIT0gbnVsbFxuICApIHtcbiAgICBjdXJyZW50RW50cnkuZmlsdGVycyA9IG5vcm1hbGl6ZWRJbml0aWFsRmlsdGVycy5maWx0ZXJzO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSBidWlsZENvbWJpbmVkU2VhcmNoKHtcbiAgICAgIGZpbHRlcnM6IG5vcm1hbGl6ZWRJbml0aWFsRmlsdGVycy5maWx0ZXJzLFxuICAgICAgcXVlcnk6IGluaXRpYWxTZWFyY2hTdGF0ZS5xdWVyeSxcbiAgICAgIHF1ZXJ5U2NoZW1hOiBpbml0aWFsVW5pZmllZFNjaGVtYSxcbiAgICB9KTsgLy8gcmV0dXJucyAnJyBvciBzdHJpbmcgc3RhcnRpbmcgd2l0aCAnPydcbiAgICBpZiAobm9ybWFsaXplZFNlYXJjaCAhPT0gaGlzdG9yeS5sb2NhdGlvbi5zZWFyY2gpIHtcbiAgICAgIGVtaXRIaXN0b3J5RXZlbnQoXG4gICAgICAgICdub3JtYWxpemUnLFxuICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAge1xuICAgICAgICAgIHBhdGhuYW1lOiBoaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCxcbiAgICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgfSxcbiAgICAgICAgeyByZWFzb246ICdpbml0aWFsLXBhZ2UtY2xhbXAnIH0sXG4gICAgICApO1xuICAgICAgY29uc3Qgbm9ybWFsaXplRGVidWdDb250ZXh0OiBIaXN0b3J5RGVidWdDb250ZXh0ID0ge1xuICAgICAgICBvcmlnaW46ICdub3JtYWxpemUnLFxuICAgICAgICB0cmlnZ2VyOiAnbm9ybWFsaXplJyxcbiAgICAgIH07XG4gICAgICBoaXN0b3J5LnNldCh7XG4gICAgICAgIHBhdGhuYW1lOiBoaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICBzZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICAgIGhhc2g6ICcnLFxuICAgICAgICBkZWJ1Z0NvbnRleHQ6IG5vcm1hbGl6ZURlYnVnQ29udGV4dCxcbiAgICAgIH0pO1xuICAgICAgLy8gVXBkYXRlIGN1cnJlbnRFbnRyeS5sb2NhdGlvbiB0byByZWZsZWN0IG5ldyBzZWFyY2ggZGlyZWN0bHkgKGhpc3Rvcnkuc2V0IHRyaWdnZXJzIGFzeW5jIHN1YnNjcmliZXIpXG4gICAgICBjdXJyZW50RW50cnkgPSB3aXRoTG9hZFN0YXRlKHtcbiAgICAgICAgLi4uY3VycmVudEVudHJ5LFxuICAgICAgICBsb2NhdGlvbjogeyAuLi5jdXJyZW50RW50cnkubG9jYXRpb24sIHNlYXJjaDogbm9ybWFsaXplZFNlYXJjaCB9LFxuICAgICAgICByYXdTZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKiogRW1pdHMgdGhlIGFjdGl2ZSByb3V0ZSBsb2FkLXN0YXRlIGV2ZW50LiAqL1xuICBmdW5jdGlvbiBlbWl0QWN0aXZlTG9hZFN0YXRlRXZlbnQoXG4gICAgZW50cnk6IFJvdXRlckVudHJ5U3RhdGU8VENvbnRleHQ+LFxuICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgKTogdm9pZCB7XG4gICAgZW1pdEV2ZW50KHtcbiAgICAgIGtpbmQ6ICdhY3RpdmUtbG9hZC1zdGF0ZScsXG4gICAgICBzb3VyY2UsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICBsb2NhdGlvbjogbm9ybWFsaXplTG9jYXRpb24oZW50cnkubG9jYXRpb24pLFxuICAgICAgcm91dGVQYXRoOiByZWFkTWF0Y2hlZFJvdXRlUGF0aChlbnRyeSksXG4gICAgICBzdGF0dXM6IGVudHJ5LmFjdGl2ZUxvYWRTdGF0ZS5zdGF0dXMsXG4gICAgICBwZW5kaW5nQ291bnQ6IGVudHJ5LmFjdGl2ZUxvYWRTdGF0ZS5wZW5kaW5nQ291bnQsXG4gICAgICByZWplY3RlZENvdW50OiBlbnRyeS5hY3RpdmVMb2FkU3RhdGUucmVqZWN0ZWRDb3VudCxcbiAgICAgIHZlcnNpb246IGVudHJ5LmFjdGl2ZUxvYWRTdGF0ZS52ZXJzaW9uLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqIE5vdGlmaWVzIFJlYWN0IHN1YnNjcmliZXJzIGFuZCBpbnN0cnVtZW50YXRpb24gZW50cnkgb2JzZXJ2ZXJzLiAqL1xuICBmdW5jdGlvbiBub3RpZnlTdWJzY3JpYmVycyhlbnRyeTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD4pOiB2b2lkIHtcbiAgICBzdWJzY3JpYmVycy5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgY2FsbGJhY2soZW50cnkpO1xuICAgIH0pO1xuICAgIG5vdGlmeUVudHJ5KGVudHJ5KTtcbiAgfVxuXG4gIC8qKiBSZWZyZXNoZXMgdGhlIGFjdGl2ZSBlbnRyeSBhZnRlciBhIHJvdXRlIHJlc291cmNlIHNldHRsZXMuICovXG4gIGZ1bmN0aW9uIHJlZnJlc2hBY3RpdmVMb2FkU3RhdGUoXG4gICAgZW50cnlJZDogbnVtYmVyLFxuICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZSxcbiAgKTogdm9pZCB7XG4gICAgaWYgKHJvdXRlckRpc3Bvc2VkIHx8IGVudHJ5SWQgIT09IGFjdGl2ZUVudHJ5SWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dCA9IGNhbGN1bGF0ZUxvYWRTdGF0ZShcbiAgICAgIGN1cnJlbnRFbnRyeS5wcmVwYXJlZE1hdGNoLFxuICAgICAgbG9hZFN0YXRlVmVyc2lvbixcbiAgICApO1xuICAgIGlmIChcbiAgICAgIGlzU2FtZUFjdGl2ZUxvYWRTdGF0ZShjdXJyZW50RW50cnkuYWN0aXZlTG9hZFN0YXRlLCBuZXh0LmFjdGl2ZUxvYWRTdGF0ZSlcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbG9hZFN0YXRlVmVyc2lvbiArPSAxO1xuICAgIGNvbnN0IHJlZnJlc2hlZCA9IGNhbGN1bGF0ZUxvYWRTdGF0ZShcbiAgICAgIGN1cnJlbnRFbnRyeS5wcmVwYXJlZE1hdGNoLFxuICAgICAgbG9hZFN0YXRlVmVyc2lvbixcbiAgICApO1xuICAgIGN1cnJlbnRFbnRyeSA9IHtcbiAgICAgIC4uLmN1cnJlbnRFbnRyeSxcbiAgICAgIGFjdGl2ZUxvYWRTdGF0ZTogcmVmcmVzaGVkLmFjdGl2ZUxvYWRTdGF0ZSxcbiAgICAgIGxvYWRTdGF0ZTogcmVmcmVzaGVkLmxvYWRTdGF0ZSxcbiAgICB9O1xuICAgIG5vdGlmeVN1YnNjcmliZXJzKGN1cnJlbnRFbnRyeSk7XG4gICAgZW1pdEFjdGl2ZUxvYWRTdGF0ZUV2ZW50KGN1cnJlbnRFbnRyeSwgc291cmNlKTtcbiAgfVxuXG4gIC8qKiBPYnNlcnZlcyBwZW5kaW5nIHJlc291cmNlcyBmb3IgdGhlIGFjdGl2ZSBlbnRyeSBhbmQgcmVwdWJsaXNoZXMgb24gc2V0dGxlLiAqL1xuICBmdW5jdGlvbiBvYnNlcnZlQWN0aXZlRW50cnlMb2FkKFxuICAgIGVudHJ5OiBSb3V0ZXJFbnRyeVN0YXRlPFRDb250ZXh0PixcbiAgICBlbnRyeUlkOiBudW1iZXIsXG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlLFxuICApOiB2b2lkIHtcbiAgICBlbnRyeS5wcmVwYXJlZE1hdGNoLnNlZ21lbnRzLmZvckVhY2goKHNlZ21lbnQpID0+IHtcbiAgICAgIGlmIChzZWdtZW50LnByZXBhcmVkUmVzb3VyY2U/LmdldFN0YXR1cygpID09PSAncGVuZGluZycpIHtcbiAgICAgICAgc2VnbWVudC5wcmVwYXJlZFJlc291cmNlLmxvYWQoKS50aGVuKFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHJlZnJlc2hBY3RpdmVMb2FkU3RhdGUoZW50cnlJZCwgc291cmNlKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgSHR0cFJlZGlyZWN0KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGxvY2F0aW9uID0gbm9ybWFsaXplTG9jYXRpb24oaGlzdG9yeS5sb2NhdGlvbik7XG4gICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICByb3V0ZXJEaXNwb3NlZCB8fFxuICAgICAgICAgICAgICAgIGVudHJ5SWQgIT09IGFjdGl2ZUVudHJ5SWQgfHxcbiAgICAgICAgICAgICAgICBoaXN0b3J5Lm5hdmlnYXRpb24ua2V5ICE9PSBlbnRyeS5uYXZpZ2F0aW9uLmtleSB8fFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnBhdGhuYW1lICE9PSBlbnRyeS5sb2NhdGlvbi5wYXRobmFtZSB8fFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLnNlYXJjaCAhPT0gZW50cnkubG9jYXRpb24uc2VhcmNoIHx8XG4gICAgICAgICAgICAgICAgbG9jYXRpb24uaGFzaCAhPT0gZW50cnkubG9jYXRpb24uaGFzaFxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmVwbGFjZVdpdGhSZWRpcmVjdChlcnJvci5yZWRpcmVjdFRvLCBlcnJvci5zdGF0dXNDb2RlLCBzb3VyY2UpO1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZyZXNoQWN0aXZlTG9hZFN0YXRlKGVudHJ5SWQsIHNvdXJjZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWdtZW50LnJlc291cmNlUGFnZT8uZ2V0U3RhdHVzKCkgPT09ICdwZW5kaW5nJykge1xuICAgICAgICBzZWdtZW50LnJlc291cmNlUGFnZS5sb2FkKCkudGhlbihcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoQWN0aXZlTG9hZFN0YXRlKGVudHJ5SWQsIHNvdXJjZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoQWN0aXZlTG9hZFN0YXRlKGVudHJ5SWQsIHNvdXJjZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBQdWJsaXNoZXMgYSBuZXcgYWN0aXZlIHJvdXRlIGVudHJ5IGFuZCBzdGFydHMgb2JzZXJ2aW5nIGl0cyByb3V0ZSB3b3JrLiAqL1xuICBmdW5jdGlvbiBwdWJsaXNoRW50cnkoaW5wdXQ6IHtcbiAgICBlbnRyeTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD47XG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICAgIGVtaXRTbmFwc2hvdDogYm9vbGVhbjtcbiAgfSk6IHZvaWQge1xuICAgIGFjdGl2ZUVudHJ5SWQgKz0gMTtcbiAgICBjdXJyZW50RW50cnkgPSBpbnB1dC5lbnRyeTtcbiAgICBub3RpZnlTdWJzY3JpYmVycyhpbnB1dC5lbnRyeSk7XG4gICAgZW1pdEFjdGl2ZUxvYWRTdGF0ZUV2ZW50KGlucHV0LmVudHJ5LCBpbnB1dC5zb3VyY2UpO1xuICAgIGlmIChpbnB1dC5lbWl0U25hcHNob3QpIHtcbiAgICAgIGVtaXRFdmVudCh7XG4gICAgICAgIGtpbmQ6ICdzbmFwc2hvdCcsXG4gICAgICAgIHNvdXJjZTogaW5wdXQuc291cmNlLFxuICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIGxvY2F0aW9uOiBub3JtYWxpemVMb2NhdGlvbihpbnB1dC5lbnRyeS5sb2NhdGlvbiksXG4gICAgICAgIHJvdXRlUGF0aDogcmVhZE1hdGNoZWRSb3V0ZVBhdGgoaW5wdXQuZW50cnkpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIG9ic2VydmVBY3RpdmVFbnRyeUxvYWQoaW5wdXQuZW50cnksIGFjdGl2ZUVudHJ5SWQsIGlucHV0LnNvdXJjZSk7XG4gIH1cblxuICBwdWJsaXNoRW50cnkoe1xuICAgIGVudHJ5OiBjdXJyZW50RW50cnksXG4gICAgc291cmNlOiBsYXN0TmF2aWdhdGlvbk9yaWdpbixcbiAgICBlbWl0U25hcHNob3Q6IHRydWUsXG4gIH0pO1xuXG4gIC8vIExpc3RlbiBmb3IgbG9jYXRpb24gY2hhbmdlcywgbWF0Y2ggdG8gdGhlIHJvdXRlIGVudHJ5LCBwcmVwYXJlIHRoZSBlbnRyeSxcbiAgLy8gYW5kIG5vdGlmeSBzdWJzY3JpYmVycy4gVGhpcyBwYXR0ZXJuIGVuc3VyZXMgdGhhdCBkYXRhLWxvYWRpbmdcbiAgLy8gb2NjdXJzICpvdXRzaWRlKiBvZiAtIGFuZCAqYmVmb3JlKiAtIHJlbmRlcmluZy5cbiAgY29uc3QgZGlzcG9zZUhpc3RvcnkgPSBoaXN0b3J5LnN1YnNjcmliZShcbiAgICAobG9jYXRpb24sIGZvcmNlUmVyZW5kZXIsIGRlYnVnQ29udGV4dCkgPT4ge1xuICAgICAgY29uc3Qgb3JpZ2luID0gcmVzb2x2ZU5hdmlnYXRpb25PcmlnaW4oZGVidWdDb250ZXh0KTtcbiAgICAgIGxhc3ROYXZpZ2F0aW9uT3JpZ2luID0gb3JpZ2luO1xuICAgICAgY29uc3QgbG9jYXRpb25QYXlsb2FkID0gbm9ybWFsaXplTG9jYXRpb24obG9jYXRpb24pO1xuXG4gICAgICBjb25zdCBkZWJ1Z0NvbnRleHRPcmlnaW4gPSBkZWJ1Z0NvbnRleHQ/Lm9yaWdpbjtcbiAgICAgIGlmIChkZWJ1Z0NvbnRleHRPcmlnaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBsZXQgaGlzdG9yeURldGFpbHM6IHsgaGlzdG9yeUluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWJ1Z0NvbnRleHQ/Lmhpc3RvcnlJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBoaXN0b3J5RGV0YWlscyA9IHsgaGlzdG9yeUluZGV4OiBkZWJ1Z0NvbnRleHQuaGlzdG9yeUluZGV4IH07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtYmFjaycgfHxcbiAgICAgICAgICBkZWJ1Z0NvbnRleHRPcmlnaW4gPT09ICdwb3BzdGF0ZS1mb3J3YXJkJyB8fFxuICAgICAgICAgIGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ3BvcHN0YXRlLXVua25vd24nIHx8XG4gICAgICAgICAgZGVidWdDb250ZXh0T3JpZ2luID09PSAnZXh0ZXJuYWwnXG4gICAgICAgICkge1xuICAgICAgICAgIGxldCBkaXJlY3Rpb246ICdiYWNrJyB8ICdmb3J3YXJkJyB8ICd1bmtub3duJyA9ICd1bmtub3duJztcbiAgICAgICAgICBpZiAoZGVidWdDb250ZXh0T3JpZ2luID09PSAncG9wc3RhdGUtYmFjaycpIHtcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9ICdiYWNrJztcbiAgICAgICAgICB9IGVsc2UgaWYgKGRlYnVnQ29udGV4dE9yaWdpbiA9PT0gJ3BvcHN0YXRlLWZvcndhcmQnKSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24gPSAnZm9yd2FyZCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVtaXRFdmVudCh7XG4gICAgICAgICAgICBraW5kOiAncG9wc3RhdGUnLFxuICAgICAgICAgICAgc291cmNlOiBvcmlnaW4sXG4gICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICBsb2NhdGlvbjogbG9jYXRpb25QYXlsb2FkLFxuICAgICAgICAgICAgZGlyZWN0aW9uLFxuICAgICAgICAgICAgZGV0YWlsczogaGlzdG9yeURldGFpbHMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3Qgc2FtZVBhdGhuYW1lID0gbG9jYXRpb24ucGF0aG5hbWUgPT09IGN1cnJlbnRFbnRyeS5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgIGNvbnN0IHNhbWVTZWFyY2ggPSBsb2NhdGlvbi5zZWFyY2ggPT09IGN1cnJlbnRFbnRyeS5yYXdTZWFyY2g7XG5cbiAgICAgIGlmICghZm9yY2VSZXJlbmRlciAmJiBzYW1lUGF0aG5hbWUgJiYgc2FtZVNlYXJjaCkge1xuICAgICAgICAvLyBOb3RoaW5nIGNoYW5nZWQgdGhhdCB3ZSBjYXJlIGFib3V0XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dENvbnRleHQgPSByZXNvbHZlQ29udGV4dCgpO1xuXG4gICAgICAvLyBJZiBvbmx5IHRoZSBzZWFyY2ggY2hhbmdlZCB3ZSBzdGlsbCB3YW50IHRvIHByb3BhZ2F0ZSB0aGUgY2hhbmdlLlxuICAgICAgLy8gS2VlcCB0aGUgZXhpc3RpbmcgcHJlcGFyZWRNYXRjaCB3aGVuIHBhdGhuYW1lIGlzIGlkZW50aWNhbCB0byBhdm9pZCByZWR1bmRhbnQgd29yay5cbiAgICAgIGxldCBuZXh0UHJlcGFyZWRNYXRjaCA9IGN1cnJlbnRFbnRyeS5wcmVwYXJlZE1hdGNoO1xuICAgICAgbGV0IG5leHRSb3V0ZSA9IGN1cnJlbnRFbnRyeS5yb3V0ZTtcblxuICAgICAgaWYgKCFzYW1lUGF0aG5hbWUpIHtcbiAgICAgICAgbmV4dFJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIGxvY2F0aW9uKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZGVjbGFyYXRpdmVSZWRpcmVjdCA9IG5leHRSb3V0ZT8ucm91dGUucmVkaXJlY3RUbztcbiAgICAgIGlmIChkZWNsYXJhdGl2ZVJlZGlyZWN0ICE9IG51bGwpIHtcbiAgICAgICAgcmVwbGFjZVdpdGhSZWRpcmVjdChcbiAgICAgICAgICBkZWNsYXJhdGl2ZVJlZGlyZWN0LFxuICAgICAgICAgIG5leHRSb3V0ZT8ucm91dGUucmVkaXJlY3RTdGF0dXMgPz8gMzAyLFxuICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBCdWlsZCByYXcgcXVlcnkgb2JqZWN0IChiYXNpYyBhZ2dyZWdhdGlvbikgZnJvbSBsb2NhdGlvbi5zZWFyY2hcbiAgICAgIGNvbnN0IHF1ZXJ5U2NoZW1hID0gcmVhZEFjdGl2ZVF1ZXJ5U2NoZW1hKG5leHRSb3V0ZSk7XG4gICAgICBjb25zdCBwYXJzZWRTZWFyY2hTdGF0ZSA9IHBhcnNlU2VhcmNoU3RhdGUobG9jYXRpb24uc2VhcmNoLCBxdWVyeVNjaGVtYSk7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsdGVycyA9IG5vcm1hbGl6ZVBhZ2VGaWx0ZXJzKHBhcnNlZFNlYXJjaFN0YXRlLmZpbHRlcnMpO1xuXG4gICAgICBjb25zdCBzaG91bGRSZXByZXBhcmUgPSBzaG91bGRQcmVwYXJlT25OYXZpZ2F0aW9uKHtcbiAgICAgICAgc2FtZVBhdGhuYW1lLFxuICAgICAgICBzYW1lU2VhcmNoLFxuICAgICAgICByb3V0ZTogbmV4dFJvdXRlLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChzaG91bGRSZXByZXBhcmUpIHtcbiAgICAgICAgY29uc3QgcHJlbG9hZGVkTWF0Y2ggPSBjb25zdW1lUHJlbG9hZGVkTWF0Y2goe1xuICAgICAgICAgIHBhdGhuYW1lOiBsb2NhdGlvbi5wYXRobmFtZSxcbiAgICAgICAgICBzZWFyY2g6IGxvY2F0aW9uLnNlYXJjaCxcbiAgICAgICAgICBjb250ZXh0OiBuZXh0Q29udGV4dCxcbiAgICAgICAgICByb3V0ZTogbmV4dFJvdXRlLFxuICAgICAgICAgIHF1ZXJ5U2NoZW1hLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKHByZWxvYWRlZE1hdGNoICE9IG51bGwpIHtcbiAgICAgICAgICBuZXh0UHJlcGFyZWRNYXRjaCA9IHByZWxvYWRlZE1hdGNoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCB1cGRhdGVJbnN0cnVtZW50YXRpb246XG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB2b2lkO1xuICAgICAgICAgICAgICAgIHNvdXJjZTogUm91dGVyTmF2aWdhdGlvblNvdXJjZTtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogUm91dGVyTG9jYXRpb25TbmFwc2hvdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKG5leHRSb3V0ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICB1cGRhdGVJbnN0cnVtZW50YXRpb24gPSB7XG4gICAgICAgICAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBlbWl0RXZlbnQoZXZlbnQpO1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBzb3VyY2U6IG9yaWdpbixcbiAgICAgICAgICAgICAgbG9jYXRpb246IGxvY2F0aW9uUGF5bG9hZCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCByZXVzZVByZXBhcmVkU2VnbWVudHM6XG4gICAgICAgICAgICB8IHtcbiAgICAgICAgICAgICAgICBwcmV2aW91c1NlZ21lbnRzOiB0eXBlb2YgY3VycmVudEVudHJ5LnByZXBhcmVkTWF0Y2guc2VnbWVudHM7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNQYXJhbXM6IFBhcmFtRGF0YSB8IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBzYW1lU2VhcmNoOiBib29sZWFuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgICAgICBpZiAoIXNhbWVQYXRobmFtZSkge1xuICAgICAgICAgICAgcmV1c2VQcmVwYXJlZFNlZ21lbnRzID0ge1xuICAgICAgICAgICAgICBwcmV2aW91c1NlZ21lbnRzOiBjdXJyZW50RW50cnkucHJlcGFyZWRNYXRjaC5zZWdtZW50cyxcbiAgICAgICAgICAgICAgcHJldmlvdXNQYXJhbXM6IGN1cnJlbnRFbnRyeS5yb3V0ZT8ucGFyYW1zLFxuICAgICAgICAgICAgICBzYW1lU2VhcmNoLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbmV4dFByZXBhcmVkTWF0Y2ggPSBwcmVwYXJlTWF0Y2goXG4gICAgICAgICAgICAgIG5leHRSb3V0ZSxcbiAgICAgICAgICAgICAgYnVpbGRQcmVwYXJlUXVlcnlJbnB1dCh7XG4gICAgICAgICAgICAgICAgLi4ucGFyc2VkU2VhcmNoU3RhdGUsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogbm9ybWFsaXplZEZpbHRlcnMuZmlsdGVycyxcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHVwZGF0ZUluc3RydW1lbnRhdGlvbixcbiAgICAgICAgICAgICAgbmV4dENvbnRleHQsXG4gICAgICAgICAgICAgIHJldXNlUHJlcGFyZWRTZWdtZW50cyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJhd1F1ZXJ5OiBwYXJzZWRTZWFyY2hTdGF0ZS5xdWVyeSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBub3JtYWxpemVkRmlsdGVycy5maWx0ZXJzLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKCEoZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVkaXJlY3QpKSB7XG4gICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVwbGFjZVdpdGhSZWRpcmVjdChlcnJvci5yZWRpcmVjdFRvLCBlcnJvci5zdGF0dXNDb2RlLCBvcmlnaW4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBwcmVwYXJlUmVkaXJlY3QgPSBuZXh0UHJlcGFyZWRNYXRjaC5zZWdtZW50c1xuICAgICAgICAubWFwKChzZWdtZW50KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHNlZ21lbnQucHJlcGFyZWRSZXNvdXJjZT8uZ2V0RXJyb3IoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbmQoKGVycm9yKTogZXJyb3IgaXMgSHR0cFJlZGlyZWN0ID0+IHtcbiAgICAgICAgICByZXR1cm4gZXJyb3IgaW5zdGFuY2VvZiBIdHRwUmVkaXJlY3Q7XG4gICAgICAgIH0pO1xuICAgICAgaWYgKHByZXBhcmVSZWRpcmVjdCAhPSBudWxsKSB7XG4gICAgICAgIHJlcGxhY2VXaXRoUmVkaXJlY3QoXG4gICAgICAgICAgcHJlcGFyZVJlZGlyZWN0LnJlZGlyZWN0VG8sXG4gICAgICAgICAgcHJlcGFyZVJlZGlyZWN0LnN0YXR1c0NvZGUsXG4gICAgICAgICAgb3JpZ2luLFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxvYWRTdGF0ZVZlcnNpb24gKz0gMTtcbiAgICAgIGNvbnN0IG5leHRFbnRyeTogUm91dGVyRW50cnlTdGF0ZTxUQ29udGV4dD4gPSB3aXRoTG9hZFN0YXRlKHtcbiAgICAgICAgZm9yY2VSZXJlbmRlcjogZm9yY2VSZXJlbmRlciB8fCAoc2FtZVBhdGhuYW1lICYmICFzYW1lU2VhcmNoKSxcbiAgICAgICAgbG9jYXRpb24sXG4gICAgICAgIHJvdXRlOiBuZXh0Um91dGUsXG4gICAgICAgIHByZXBhcmVkTWF0Y2g6IG5leHRQcmVwYXJlZE1hdGNoLFxuICAgICAgICBjb250ZXh0OiBuZXh0Q29udGV4dCxcbiAgICAgICAgcmF3U2VhcmNoOiBsb2NhdGlvbi5zZWFyY2gsXG4gICAgICAgIHF1ZXJ5OiBwYXJzZWRTZWFyY2hTdGF0ZS5xdWVyeSxcbiAgICAgICAgZmlsdGVyczogbm9ybWFsaXplZEZpbHRlcnMuZmlsdGVycyxcbiAgICAgICAgZmlsdGVyRGlhZ25vc3RpY3M6IHBhcnNlZFNlYXJjaFN0YXRlLmZpbHRlckRpYWdub3N0aWNzLFxuICAgICAgICBhY3RpdmVRdWVyeVNjaGVtYTogcXVlcnlTY2hlbWEsXG4gICAgICAgIHN0YXR1czogcmVhZFJlbmRlclN0YXR1cyhuZXh0Um91dGUpLFxuICAgICAgICBuYXZpZ2F0aW9uOiBoaXN0b3J5Lm5hdmlnYXRpb24sXG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgbm9ybWFsaXphdGlvbiBjaGFuZ2VkIHRoZSB0eXBlZCBxdWVyeSB3ZSB0cmlnZ2VyIGEgcmVwbGFjZSB3aXRoIG5vcm1hbGl6ZWQgc2VhcmNoXG4gICAgICBpZiAobm9ybWFsaXplZEZpbHRlcnMubm9ybWFsaXplZCAmJiBxdWVyeVNjaGVtYSAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRTZWFyY2ggPSBidWlsZENvbWJpbmVkU2VhcmNoKHtcbiAgICAgICAgICBmaWx0ZXJzOiBub3JtYWxpemVkRmlsdGVycy5maWx0ZXJzLFxuICAgICAgICAgIHF1ZXJ5OiBwYXJzZWRTZWFyY2hTdGF0ZS5xdWVyeSxcbiAgICAgICAgICBxdWVyeVNjaGVtYSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChub3JtYWxpemVkU2VhcmNoICE9PSBsb2NhdGlvbi5zZWFyY2gpIHtcbiAgICAgICAgICBsZXQgbmV4dFNlYXJjaFN0ciA9IG5vcm1hbGl6ZWRTZWFyY2g7XG4gICAgICAgICAgaWYgKCFuZXh0U2VhcmNoU3RyLnN0YXJ0c1dpdGgoJz8nKSAmJiBuZXh0U2VhcmNoU3RyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG5leHRTZWFyY2hTdHIgPSBgPyR7bmV4dFNlYXJjaFN0cn1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbWl0SGlzdG9yeUV2ZW50KFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcGF0aG5hbWU6IGxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICAgICAgICBzZWFyY2g6IG5leHRTZWFyY2hTdHIsXG4gICAgICAgICAgICAgIGhhc2g6ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgcmVhc29uOiAncnVudGltZS1wYWdlLWNsYW1wJyB9LFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3QgcnVudGltZU5vcm1hbGl6ZUNvbnRleHQ6IEhpc3RvcnlEZWJ1Z0NvbnRleHQgPSB7XG4gICAgICAgICAgICBvcmlnaW46ICdub3JtYWxpemUnLFxuICAgICAgICAgICAgdHJpZ2dlcjogJ25vcm1hbGl6ZScsXG4gICAgICAgICAgfTtcbiAgICAgICAgICBoaXN0b3J5LnNldCh7XG4gICAgICAgICAgICBwYXRobmFtZTogbG9jYXRpb24ucGF0aG5hbWUsXG4gICAgICAgICAgICBzZWFyY2g6IG5leHRTZWFyY2hTdHIsXG4gICAgICAgICAgICBoYXNoOiAnJyxcbiAgICAgICAgICAgIGRlYnVnQ29udGV4dDogcnVudGltZU5vcm1hbGl6ZUNvbnRleHQsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuOyAvLyBlYXJseTogc3Vic2VxdWVudCBzZXQgd2lsbCB0cmlnZ2VyIHJlcnVuXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcHVibGlzaEVudHJ5KHtcbiAgICAgICAgZW50cnk6IG5leHRFbnRyeSxcbiAgICAgICAgc291cmNlOiBvcmlnaW4sXG4gICAgICAgIGVtaXRTbmFwc2hvdDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0sXG4gICk7XG5cbiAgLyoqIE5vcm1hbGl6ZXMgdXNlci1wcm92aWRlZCBwcmVsb2FkIHRhcmdldHMgaW50byBjb25zaXN0ZW50IHN0cnVjdHVyZXMuICovXG4gIGZ1bmN0aW9uIG5vcm1hbGl6ZVByZWxvYWRUYXJnZXQodGFyZ2V0OiBQcmVsb2FkVGFyZ2V0KToge1xuICAgIHBhdGhuYW1lOiBzdHJpbmc7XG4gICAgc2VhcmNoOiBzdHJpbmc7XG4gICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICB9IHtcbiAgICBsZXQgbm9ybWFsaXplZFBhdGhuYW1lID0gaGlzdG9yeS5sb2NhdGlvbi5wYXRobmFtZTtcbiAgICBpZiAodHlwZW9mIHRhcmdldC5wYXRobmFtZSA9PT0gJ3N0cmluZycgJiYgdGFyZ2V0LnBhdGhuYW1lLmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRQYXRobmFtZSA9IHRhcmdldC5wYXRobmFtZTtcbiAgICB9XG5cbiAgICBsZXQgbm9ybWFsaXplZFNlYXJjaCA9ICcnO1xuICAgIGlmICh0eXBlb2YgdGFyZ2V0LnNlYXJjaCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG5vcm1hbGl6ZWRTZWFyY2ggPSB0YXJnZXQuc2VhcmNoO1xuICAgIH1cblxuICAgIGxldCBub3JtYWxpemVkU291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlID0gJ3Byb2dyYW1tYXRpYyc7XG4gICAgY29uc3QgbWFwcGVkU291cmNlID0gbWFwT3JpZ2luKHRhcmdldC5zb3VyY2UpO1xuICAgIGlmIChtYXBwZWRTb3VyY2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbm9ybWFsaXplZFNvdXJjZSA9IG1hcHBlZFNvdXJjZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhuYW1lOiBub3JtYWxpemVkUGF0aG5hbWUsXG4gICAgICBzZWFyY2g6IG5vcm1hbGl6ZWRTZWFyY2gsXG4gICAgICBzb3VyY2U6IG5vcm1hbGl6ZWRTb3VyY2UsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcmVwYXJlZCB2YWx1ZSBmb3IgdGhlIGZpcnN0IGFjdGl2ZSBzZWdtZW50IG1hdGNoaW5nIHRoZSBwcm92aWRlZCBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIFJvdXRlIHNlZ21lbnQgcGF0aCBvciBmdWxsIHBhdGggdG8gaW5zcGVjdC5cbiAgICovXG4gIGZ1bmN0aW9uIGdldFByZXBhcmVkKHBhdGg6IHN0cmluZyk6IHVua25vd24ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBlbnRyeSA9IGN1cnJlbnRFbnRyeTtcbiAgICAgIGZvciAoY29uc3QgcHJlcGFyZWRSb3V0ZSBvZiBlbnRyeS5wcmVwYXJlZE1hdGNoLnNlZ21lbnRzKSB7XG4gICAgICAgIGlmIChwcmVwYXJlZFJvdXRlLnBhdGggPT09IHBhdGggfHwgcHJlcGFyZWRSb3V0ZS5mdWxsUGF0aCA9PT0gcGF0aCkge1xuICAgICAgICAgIHJldHVybiBwcmVwYXJlZFJvdXRlLnByZXBhcmVkUmVzb3VyY2U/LmdldCgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBldmVyeSBhY3RpdmUgcHJlcGFyZWQgc2VnbWVudCBtYXRjaGluZyB0aGUgcHJvdmlkZWQgcGF0aC5cbiAgICpcbiAgICogQHBhcmFtIHBhdGggLSBSb3V0ZSBzZWdtZW50IHBhdGggb3IgZnVsbCBwYXRoIHRvIGluc3BlY3QuXG4gICAqL1xuICBmdW5jdGlvbiBnZXRQcmVwYXJlZFNlZ21lbnRzKHBhdGg6IHN0cmluZyk6IFByZXBhcmVkUm91dGVTZWdtZW50U25hcHNob3RbXSB7XG4gICAgcmV0dXJuIGN1cnJlbnRFbnRyeS5wcmVwYXJlZE1hdGNoLnNlZ21lbnRzXG4gICAgICAuZmlsdGVyKChwcmVwYXJlZFJvdXRlKSA9PiB7XG4gICAgICAgIHJldHVybiBwcmVwYXJlZFJvdXRlLnBhdGggPT09IHBhdGggfHwgcHJlcGFyZWRSb3V0ZS5mdWxsUGF0aCA9PT0gcGF0aDtcbiAgICAgIH0pXG4gICAgICAubWFwKChwcmVwYXJlZFJvdXRlKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGF0aDogcHJlcGFyZWRSb3V0ZS5wYXRoLFxuICAgICAgICAgIGZ1bGxQYXRoOiBwcmVwYXJlZFJvdXRlLmZ1bGxQYXRoLFxuICAgICAgICAgIHNlZ21lbnRLZXk6IHByZXBhcmVkUm91dGUuc2VnbWVudEtleSxcbiAgICAgICAgICBwYXJhbU5hbWVzOiBwcmVwYXJlZFJvdXRlLnBhcmFtTmFtZXMsXG4gICAgICAgICAgc2VnbWVudEluZGV4OiBwcmVwYXJlZFJvdXRlLnNlZ21lbnRJbmRleCxcbiAgICAgICAgICByb3V0ZU5vZGU6IHByZXBhcmVkUm91dGUucm91dGVOb2RlLFxuICAgICAgICAgIHByZXBhcmVkUmVzb3VyY2U6IHByZXBhcmVkUm91dGUucHJlcGFyZWRSZXNvdXJjZSxcbiAgICAgICAgICBwcmVwYXJlZEh5ZHJhdGlvbjogcHJlcGFyZWRSb3V0ZS5wcmVwYXJlZEh5ZHJhdGlvbixcbiAgICAgICAgICByZWRpcmVjdFRvOiBwcmVwYXJlZFJvdXRlLnJlZGlyZWN0VG8sXG4gICAgICAgICAgcmVkaXJlY3RTdGF0dXM6IHByZXBhcmVkUm91dGUucmVkaXJlY3RTdGF0dXMsXG4gICAgICAgICAgcmVzb3VyY2VQYWdlOiBwcmVwYXJlZFJvdXRlLnJlc291cmNlUGFnZSxcbiAgICAgICAgICBzdXNwZW5zZUJvdW5kYXJ5OiBwcmVwYXJlZFJvdXRlLnN1c3BlbnNlQm91bmRhcnksXG4gICAgICAgICAgZmFsbGJhY2s6IHByZXBhcmVkUm91dGUuZmFsbGJhY2ssXG4gICAgICAgICAgaGlnaGxpZ2h0SWQ6IHByZXBhcmVkUm91dGUuaGlnaGxpZ2h0SWQsXG4gICAgICAgICAgcXVlcnlTY2hlbWE6IHByZXBhcmVkUm91dGUucXVlcnlTY2hlbWEsXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBxdWVyeSBzY2hlbWEgZ292ZXJuaW5nIGEgbmF2aWdhdGlvbiBkZXN0aW5hdGlvbi4gKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZURlc3RpbmF0aW9uUXVlcnlTY2hlbWEocGF0aG5hbWU6IHN0cmluZyk6IFJvdXRlclF1ZXJ5U2NoZW1hIHtcbiAgICBjb25zdCBkZXN0aW5hdGlvblJvdXRlID0gZ2V0TWF0Y2hlZFJvdXRlKGZsYXRSb3V0ZXMsIHtcbiAgICAgIC4uLmhpc3RvcnkubG9jYXRpb24sXG4gICAgICBwYXRobmFtZSxcbiAgICB9KTtcbiAgICBpZiAoZGVzdGluYXRpb25Sb3V0ZSA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gY3VycmVudEVudHJ5LmFjdGl2ZVF1ZXJ5U2NoZW1hO1xuICAgIH1cbiAgICByZXR1cm4gcmVhZEFjdGl2ZVF1ZXJ5U2NoZW1hKGRlc3RpbmF0aW9uUm91dGUpO1xuICB9XG5cbiAgLyoqIFNlcmlhbGl6ZXMgbmF2aWdhdGlvbiBzdGF0ZSB3aXRoIHRoZSBkZXN0aW5hdGlvbiByb3V0ZSBzY2hlbWEuICovXG4gIGZ1bmN0aW9uIGJ1aWxkTmF2aWdhdGlvblNlYXJjaChpbnB1dDoge1xuICAgIHBhdGhuYW1lOiBzdHJpbmc7XG4gICAgcXVlcnk/OiBVbmtub3duUXVlcnlTaGFwZTtcbiAgICBmaWx0ZXJzPzogVW5rbm93bkZpbHRlcnM7XG4gIH0pOiBzdHJpbmcge1xuICAgIGNvbnN0IHF1ZXJ5U2NoZW1hID0gcmVzb2x2ZURlc3RpbmF0aW9uUXVlcnlTY2hlbWEoaW5wdXQucGF0aG5hbWUpO1xuICAgIHJldHVybiBidWlsZERlc3RpbmF0aW9uU2VhcmNoKHtcbiAgICAgIGZpbHRlcnM6IGlucHV0LmZpbHRlcnMsXG4gICAgICBxdWVyeTogaW5wdXQucXVlcnksXG4gICAgICBxdWVyeVNjaGVtYSxcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFRoZSByb3V0ZXIgY29udGV4dCBvYmplY3QgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byBSZWFjdCBDb250ZXh0XG4gIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgYnVpbGRTZWFyY2goe1xuICAgICAgcGF0aG5hbWUsXG4gICAgICBxdWVyeSxcbiAgICAgIGZpbHRlcnMsXG4gICAgfToge1xuICAgICAgcGF0aG5hbWU/OiBzdHJpbmc7XG4gICAgICBxdWVyeT86IFVua25vd25RdWVyeVNoYXBlO1xuICAgICAgZmlsdGVycz86IFVua25vd25GaWx0ZXJzO1xuICAgIH0pIHtcbiAgICAgIHJldHVybiBidWlsZE5hdmlnYXRpb25TZWFyY2goe1xuICAgICAgICBwYXRobmFtZTogcGF0aG5hbWUgPz8gY3VycmVudEVudHJ5LmxvY2F0aW9uLnBhdGhuYW1lLFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaGlzdG9yeSxcbiAgICBnZXQoKSB7XG4gICAgICByZXR1cm4gY3VycmVudEVudHJ5O1xuICAgIH0sXG4gICAgcHJlbG9hZENvZGUodGFyZ2V0KSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJlbG9hZFRhcmdldCh0YXJnZXQpO1xuICAgICAgZW1pdFByZWxvYWRFdmVudChcbiAgICAgICAgJ2NvZGUnLFxuICAgICAgICBub3JtYWxpemVkLnBhdGhuYW1lLFxuICAgICAgICBub3JtYWxpemVkLnNlYXJjaCxcbiAgICAgICAgbm9ybWFsaXplZC5zb3VyY2UsXG4gICAgICApO1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLmhpc3RvcnkubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lOiBub3JtYWxpemVkLnBhdGhuYW1lLFxuICAgICAgfSk7XG5cbiAgICAgIGlmIChtYXRjaGVzID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBtYXRjaGVzLnJvdXRlLnJvdXRlcy5mb3JFYWNoKCh7IHJlc291cmNlUGFnZSB9KSA9PiB7XG4gICAgICAgIGlmIChyZXNvdXJjZVBhZ2UgPT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzXG4gICAgICAgIHJlc291cmNlUGFnZS5sb2FkKCk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgIHByZWxvYWQodGFyZ2V0KSB7XG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUHJlbG9hZFRhcmdldCh0YXJnZXQpO1xuICAgICAgZW1pdFByZWxvYWRFdmVudChcbiAgICAgICAgJ2Z1bGwnLFxuICAgICAgICBub3JtYWxpemVkLnBhdGhuYW1lLFxuICAgICAgICBub3JtYWxpemVkLnNlYXJjaCxcbiAgICAgICAgbm9ybWFsaXplZC5zb3VyY2UsXG4gICAgICApO1xuICAgICAgY29uc3QgbWF0Y2hlcyA9IGdldE1hdGNoZWRSb3V0ZShmbGF0Um91dGVzLCB7XG4gICAgICAgIC4uLmhpc3RvcnkubG9jYXRpb24sXG4gICAgICAgIHBhdGhuYW1lOiBub3JtYWxpemVkLnBhdGhuYW1lLFxuICAgICAgfSk7XG4gICAgICBjb25zdCBsb2NhdGlvblNuYXBzaG90OiBSb3V0ZXJMb2NhdGlvblNuYXBzaG90ID0ge1xuICAgICAgICBwYXRobmFtZTogbm9ybWFsaXplZC5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkLnNlYXJjaCxcbiAgICAgICAgaGFzaDogJycsXG4gICAgICB9O1xuICAgICAgbGV0IGluc3RydW1lbnRhdGlvbjpcbiAgICAgICAgfCB7XG4gICAgICAgICAgICBlbWl0OiAoZXZlbnQ6IFJvdXRlckV2ZW50KSA9PiB2b2lkO1xuICAgICAgICAgICAgc291cmNlOiBSb3V0ZXJOYXZpZ2F0aW9uU291cmNlO1xuICAgICAgICAgICAgbG9jYXRpb246IFJvdXRlckxvY2F0aW9uU25hcHNob3Q7XG4gICAgICAgICAgfVxuICAgICAgICB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChtYXRjaGVzICE9IG51bGwpIHtcbiAgICAgICAgaW5zdHJ1bWVudGF0aW9uID0ge1xuICAgICAgICAgIGVtaXQ6IChldmVudDogUm91dGVyRXZlbnQpID0+IHtcbiAgICAgICAgICAgIGVtaXRFdmVudChldmVudCk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzb3VyY2U6IG5vcm1hbGl6ZWQuc291cmNlLFxuICAgICAgICAgIGxvY2F0aW9uOiBsb2NhdGlvblNuYXBzaG90LFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcHJlbG9hZENvbnRleHQgPSByZXNvbHZlQ29udGV4dCgpO1xuICAgICAgY29uc3QgcHJlbG9hZFF1ZXJ5U2NoZW1hID0gcmVhZEFjdGl2ZVF1ZXJ5U2NoZW1hKG1hdGNoZXMpO1xuICAgICAgY29uc3QgcHJlbG9hZFNlYXJjaFN0YXRlID0gcGFyc2VTZWFyY2hTdGF0ZShcbiAgICAgICAgbm9ybWFsaXplZC5zZWFyY2gsXG4gICAgICAgIHByZWxvYWRRdWVyeVNjaGVtYSxcbiAgICAgICk7XG4gICAgICBjb25zdCBwcmVwYXJlZE1hdGNoID0gcHJlcGFyZU1hdGNoKFxuICAgICAgICBtYXRjaGVzLFxuICAgICAgICBidWlsZFByZXBhcmVRdWVyeUlucHV0KHByZWxvYWRTZWFyY2hTdGF0ZSksXG4gICAgICAgIGluc3RydW1lbnRhdGlvbixcbiAgICAgICAgcHJlbG9hZENvbnRleHQsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAge1xuICAgICAgICAgIHJhd1F1ZXJ5OiBwcmVsb2FkU2VhcmNoU3RhdGUucXVlcnksXG4gICAgICAgICAgZmlsdGVyczogcHJlbG9hZFNlYXJjaFN0YXRlLmZpbHRlcnMsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgbG9hZFByZXBhcmVkTWF0Y2hSZXNvdXJjZXMocHJlcGFyZWRNYXRjaCk7XG4gICAgICBjb25zdCBwcmVsb2FkS2V5ID0gYnVpbGRQcmVsb2FkZWRNYXRjaEtleShcbiAgICAgICAgbm9ybWFsaXplZC5wYXRobmFtZSxcbiAgICAgICAgbm9ybWFsaXplZC5zZWFyY2gsXG4gICAgICApO1xuICAgICAgcHJlbG9hZGVkTWF0Y2hlcy5zZXQocHJlbG9hZEtleSwge1xuICAgICAgICBrZXk6IHByZWxvYWRLZXksXG4gICAgICAgIGNvbnRleHQ6IHByZWxvYWRDb250ZXh0LFxuICAgICAgICByb3V0ZTogbWF0Y2hlcyxcbiAgICAgICAgcHJlcGFyZWRNYXRjaCxcbiAgICAgICAgcXVlcnlTY2hlbWE6IHByZWxvYWRRdWVyeVNjaGVtYSxcbiAgICAgICAgc2VhcmNoOiBub3JtYWxpemVkLnNlYXJjaCxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgc3Vic2NyaWJlKGNhbGxiYWNrKSB7XG4gICAgICBuZXh0SWQgKz0gMTtcbiAgICAgIGNvbnN0IGlkID0gbmV4dElkO1xuICAgICAgLyoqIFJlbW92ZXMgdGhlIHN1YnNjcmliZXIgcHJldmlvdXNseSByZWdpc3RlcmVkIHZpYSBzdWJzY3JpYmUuICovXG4gICAgICBmdW5jdGlvbiBkaXNwb3NlQ2FsbGJhY2soKSB7XG4gICAgICAgIHN1YnNjcmliZXJzLmRlbGV0ZShpZCk7XG4gICAgICB9XG4gICAgICBzdWJzY3JpYmVycy5zZXQoaWQsIGNhbGxiYWNrKTtcbiAgICAgIHJldHVybiBkaXNwb3NlQ2FsbGJhY2s7XG4gICAgfSxcbiAgICBuYXZpZ2F0ZSh7XG4gICAgICBwYXRobmFtZSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZmlsdGVyczogbmF2RmlsdGVycyxcbiAgICAgIGhhc2gsXG4gICAgICByZXBsYWNlLFxuICAgIH06IHtcbiAgICAgIHBhdGhuYW1lPzogc3RyaW5nO1xuICAgICAgcXVlcnk/OiBVbmtub3duUXVlcnlTaGFwZTtcbiAgICAgIGZpbHRlcnM/OiBVbmtub3duRmlsdGVycztcbiAgICAgIGhhc2g/OiBzdHJpbmc7XG4gICAgICByZXBsYWNlPzogYm9vbGVhbjtcbiAgICB9KSB7XG4gICAgICBpZiAocm91dGVyRGlzcG9zZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY3VycmVudCA9IGN1cnJlbnRFbnRyeTtcbiAgICAgIGxldCB0YXJnZXRQYXRobmFtZSA9IHBhdGhuYW1lO1xuICAgICAgdGFyZ2V0UGF0aG5hbWUgPz89IGN1cnJlbnQubG9jYXRpb24ucGF0aG5hbWU7XG5cbiAgICAgIGNvbnN0IGZpbHRlcnNJbnB1dCA9IG5hdkZpbHRlcnMgPz8gY3VycmVudC5maWx0ZXJzO1xuICAgICAgY29uc3QgcmF3UXVlcnlJbnB1dDogVW5rbm93blF1ZXJ5U2hhcGUgfCBSYXdRdWVyeSB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHF1ZXJ5ID8/IGN1cnJlbnQucXVlcnk7XG4gICAgICBjb25zdCBzZWFyY2ggPSBidWlsZE5hdmlnYXRpb25TZWFyY2goe1xuICAgICAgICBwYXRobmFtZTogdGFyZ2V0UGF0aG5hbWUsXG4gICAgICAgIGZpbHRlcnM6IGZpbHRlcnNJbnB1dCxcbiAgICAgICAgcXVlcnk6IHJhd1F1ZXJ5SW5wdXQsXG4gICAgICB9KTtcbiAgICAgIGxldCBjdXJyZW50SHJlZjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSBjdXJyZW50SHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgY29uc3QgcmVzb2x2ZWREZXN0aW5hdGlvbiA9IHJlc29sdmVSb3V0ZXJEZXN0aW5hdGlvbih7XG4gICAgICAgIGRlc3RpbmF0aW9uOiB7XG4gICAgICAgICAgcGF0aG5hbWU6IHRhcmdldFBhdGhuYW1lLFxuICAgICAgICAgIHNlYXJjaCxcbiAgICAgICAgICBoYXNoOiBoYXNoID8/IGN1cnJlbnQubG9jYXRpb24uaGFzaCxcbiAgICAgICAgfSxcbiAgICAgICAgY3VycmVudEhyZWYsXG4gICAgICAgIGJ1aWxkU2VhcmNoOiBidWlsZE5hdmlnYXRpb25TZWFyY2gsXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGxvY2F0aW9uT2JqID0ge1xuICAgICAgICBwYXRobmFtZTogcmVzb2x2ZWREZXN0aW5hdGlvbi5wYXRobmFtZSxcbiAgICAgICAgc2VhcmNoOiByZXNvbHZlZERlc3RpbmF0aW9uLnNlYXJjaCxcbiAgICAgICAgaGFzaDogcmVzb2x2ZWREZXN0aW5hdGlvbi5oYXNoLFxuICAgICAgfTtcbiAgICAgIGNvbnN0IG9yaWdpbjogUm91dGVyTmF2aWdhdGlvblNvdXJjZSA9ICdwcm9ncmFtbWF0aWMnO1xuICAgICAgY29uc3QgZGVidWdDb250ZXh0OiBIaXN0b3J5RGVidWdDb250ZXh0ID0ge1xuICAgICAgICBvcmlnaW4sXG4gICAgICAgIHRyaWdnZXI6ICdwcm9ncmFtbWF0aWMnLFxuICAgICAgfTtcblxuICAgICAgaWYgKHJlcGxhY2UgPT09IHRydWUpIHtcbiAgICAgICAgZW1pdEhpc3RvcnlFdmVudCgncmVwbGFjZScsIG9yaWdpbiwgbG9jYXRpb25PYmosIHtcbiAgICAgICAgICB0cmlnZ2VyOiAncHJvZ3JhbW1hdGljJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGhpc3Rvcnkuc2V0KHtcbiAgICAgICAgICAuLi5sb2NhdGlvbk9iaixcbiAgICAgICAgICBkZWJ1Z0NvbnRleHQsXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdEhpc3RvcnlFdmVudCgncHVzaCcsIG9yaWdpbiwgbG9jYXRpb25PYmosIHtcbiAgICAgICAgICB0cmlnZ2VyOiAncHJvZ3JhbW1hdGljJyxcbiAgICAgICAgfSk7XG4gICAgICAgIGhpc3RvcnkucHVzaCh7XG4gICAgICAgICAgLi4ubG9jYXRpb25PYmosXG4gICAgICAgICAgZGVidWdDb250ZXh0LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldFByZXBhcmVkLFxuICAgIGdldFByZXBhcmVkU2VnbWVudHMsXG4gIH0gYXMgQ3JlYXRlUm91dGVyUmV0dXJuPFRDb250ZXh0LCBSPlsnY29udGV4dCddO1xuXG4gIC8qKiBSZWxlYXNlcyByb3V0ZXIgcmVzb3VyY2VzIGFuZCBkZXRhY2hlcyBhbGwgaW5zdHJ1bWVudGF0aW9ucy4gKi9cbiAgZnVuY3Rpb24gY2xlYW51cCgpOiB2b2lkIHtcbiAgICBpZiAocm91dGVyRGlzcG9zZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgcm91dGVyRGlzcG9zZWQgPSB0cnVlO1xuICAgIGRpc3Bvc2VIaXN0b3J5KCk7XG4gICAgaGlzdG9yeS5kaXNwb3NlKCk7XG4gICAgc3Vic2NyaWJlcnMuY2xlYXIoKTtcbiAgICByZWdpc3RyeS5kaXNwb3NlKCk7XG4gIH1cblxuICAvLyBSZXR1cm4gYm90aCB0aGUgY29udGV4dCBvYmplY3QgYW5kIGEgY2xlYW51cCBmdW5jdGlvblxuICByZXR1cm4geyBjb250ZXh0LCBjbGVhbnVwIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJvdXRlciBpbnN0YW5jZSBmcm9tIGEgcm91dGUgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcm91dGVzIC0gUm91dGUgZGVmaW5pdGlvbnMgdG8gcmVnaXN0ZXIuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbmFsIGluc3RydW1lbnRhdGlvbiBzZXR0aW5ncyB1c2VkIGZvciBleHBvc2luZyBkZXZlbG9wbWVudCB0b29saW5nLlxuICogQHBhcmFtIG9wdGlvbnMuaW5zdHJ1bWVudGF0aW9ucyAtIEluc3RydW1lbnRhdGlvbnMgaW52b2tlZCBvbiByb3V0ZXIgZXZlbnRzIChkZXZlbG9wbWVudCBvbmx5KS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlUm91dGVyPFxuICBUQ29udGV4dCA9IHVua25vd24sXG4gIFIgZXh0ZW5kcyBSb3V0ZU5vZGVbXSA9IFJvdXRlTm9kZVtdLFxuPihcbiAgcm91dGVzOiBbLi4uUl0gfCBSb3V0ZU5vZGVbXSxcbiAgb3B0aW9uczogQ3JlYXRlUm91dGVyT3B0aW9uczxUQ29udGV4dD4gPSB7fSxcbik6IENyZWF0ZVJvdXRlclJldHVybjxUQ29udGV4dCwgUj4ge1xuICBjb25zdCByZWdpc3RyeSA9IGNyZWF0ZUluc3RydW1lbnRhdGlvblJlZ2lzdHJ5KFxuICAgIG9wdGlvbnMuaW5zdHJ1bWVudGF0aW9ucyA/PyBbXSxcbiAgKTtcbiAgbGV0IGhpc3Rvcnk6IEJyb3dzZXJIaXN0b3J5IHwgdW5kZWZpbmVkO1xuICB0cnkge1xuICAgIGhpc3RvcnkgPSBuZXcgQnJvd3Nlckhpc3RvcnkoKTtcbiAgICByZXR1cm4gaW5pdGlhbGl6ZVJvdXRlcjxUQ29udGV4dCwgUj4ocm91dGVzLCBvcHRpb25zLCBoaXN0b3J5LCByZWdpc3RyeSk7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgaGlzdG9yeT8uZGlzcG9zZSgpO1xuICAgIHJlZ2lzdHJ5LmRpc3Bvc2UoKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuIl19
|
|
@@ -16,4 +16,5 @@ export { default as useFilterDiagnostics } from './useFilterDiagnostics.js';
|
|
|
16
16
|
export { default as useSearchParams } from './useSearchParams.js';
|
|
17
17
|
export { useRouteTelemetry, type RouteTelemetryEvent, type UseRouteTelemetryOptions, } from './useRouteTelemetry.js';
|
|
18
18
|
export { default as buildCombinedSearch } from '../tools/buildCombinedSearch.js';
|
|
19
|
+
export { default as RouteRedirect, type RouteRedirectProps, } from './RouteRedirect.js';
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,OAAO,IAAI,yBAAyB,EACpC,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,OAAO,IAAI,IAAI,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAGrE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAE5E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,OAAO,IAAI,yBAAyB,EACpC,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,OAAO,IAAI,IAAI,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAGrE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAE5E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EACL,OAAO,IAAI,aAAa,EACxB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC"}
|
package/lib/esm/routing/index.js
CHANGED
|
@@ -16,4 +16,5 @@ export { default as useFilterDiagnostics } from './useFilterDiagnostics.js';
|
|
|
16
16
|
export { default as useSearchParams } from './useSearchParams.js';
|
|
17
17
|
export { useRouteTelemetry, } from './useRouteTelemetry.js';
|
|
18
18
|
export { default as buildCombinedSearch } from '../tools/buildCombinedSearch.js';
|
|
19
|
-
|
|
19
|
+
export { default as RouteRedirect, } from './RouteRedirect.js';
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcm91dGluZy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxJQUFJLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzVELE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsT0FBTyxJQUFJLHlCQUF5QixHQU9yQyxNQUFNLHlCQUF5QixDQUFDO0FBSWpDLE9BQU8sRUFDTCxPQUFPLElBQUksSUFBSSxHQUloQixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQ0wsd0JBQXdCLEdBRXpCLE1BQU0sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFHckUsT0FBTyxFQUFFLE9BQU8sSUFBSSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzlFLE9BQU8sRUFDTCxPQUFPLElBQUksY0FBYyxHQUUxQixNQUFNLHFCQUFxQixDQUFDO0FBRzdCLE9BQU8sRUFBRSxPQUFPLElBQUksY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFaEUsT0FBTyxFQUFFLE9BQU8sSUFBSSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEQsT0FBTyxFQUFFLE9BQU8sSUFBSSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUxRCxPQUFPLEVBQUUsT0FBTyxJQUFJLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRzFELE9BQU8sRUFBRSxPQUFPLElBQUksV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFMUQsT0FBTyxFQUFFLE9BQU8sSUFBSSxhQUFhLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsT0FBTyxJQUFJLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXhELE9BQU8sRUFBRSxPQUFPLElBQUksb0JBQW9CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU1RSxPQUFPLEVBQUUsT0FBTyxJQUFJLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xFLE9BQU8sRUFDTCxpQkFBaUIsR0FHbEIsTUFBTSx3QkFBd0IsQ0FBQztBQUdoQyxPQUFPLEVBQUUsT0FBTyxJQUFJLG1CQUFtQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFakYsT0FBTyxFQUNMLE9BQU8sSUFBSSxhQUFhLEdBRXpCLE1BQU0sb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBNYWluIHJvdXRlciBmYWN0b3J5IGZ1bmN0aW9uXG5leHBvcnQgeyBkZWZhdWx0IGFzIGNyZWF0ZVJvdXRlciB9IGZyb20gJy4vY3JlYXRlUm91dGVyLmpzJztcbmV4cG9ydCB7XG4gIGNyZWF0ZVN0YXRpY1JvdXRlcixcbiAgZGVmYXVsdCBhcyBjcmVhdGVTdGF0aWNSb3V0ZXJEZWZhdWx0LFxuICB0eXBlIENyZWF0ZVN0YXRpY1JvdXRlck9wdGlvbnMsXG4gIHR5cGUgQ3JlYXRlU3RhdGljUm91dGVyUmV0dXJuLFxuICB0eXBlIFN0YXRpY1JvdXRlck5vdEZvdW5kUmVzdWx0LFxuICB0eXBlIFN0YXRpY1JvdXRlclJlZGlyZWN0UmVzdWx0LFxuICB0eXBlIFN0YXRpY1JvdXRlclJlbmRlclJlc3VsdCxcbiAgdHlwZSBTdGF0aWNSb3V0ZXJMb2NhdGlvbixcbn0gZnJvbSAnLi9jcmVhdGVTdGF0aWNSb3V0ZXIuanMnO1xuXG4vLyBOYXZpZ2F0aW9uIGNvbXBvbmVudCB3aXRoIHByZWxvYWRpbmcgc3VwcG9ydFxuLy8gU3RhbmRhcmQgLmpzIHNwZWNpZmllciAoYnVpbGQgcGlwZWxpbmUgcmV3cml0ZXMgZnJvbSBUUyBzb3VyY2UpXG5leHBvcnQge1xuICBkZWZhdWx0IGFzIExpbmssXG4gIHR5cGUgTGlua1Byb3BzLFxuICB0eXBlIExpbmtIb3ZlclByZWxvYWQsXG4gIHR5cGUgTGlua01vdXNlRG93blByZWxvYWQsXG59IGZyb20gJy4vTGluay5qcyc7XG5leHBvcnQge1xuICByZXNvbHZlUm91dGVyRGVzdGluYXRpb24sXG4gIHR5cGUgUmVzb2x2ZWRSb3V0ZXJEZXN0aW5hdGlvbixcbn0gZnJvbSAnLi9kZXN0aW5hdGlvbi5qcyc7XG5leHBvcnQgeyBjcmVhdGVSb3V0ZXJIeWRyYXRpb25TbmFwc2hvdCB9IGZyb20gJy4vcm91dGVySHlkcmF0aW9uLmpzJztcblxuLy8gSW50ZXJuYWwgd3JhcHBlciBjb21wb25lbnQgZm9yIHJvdXRlIHJlbmRlcmluZ1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBSb3V0ZUNvbXBvbmVudFdyYXBwZXIgfSBmcm9tICcuL1JvdXRlQ29tcG9uZW50V3JhcHBlci5qcyc7XG5cbi8vIE1haW4gcmVuZGVyZXIgY29tcG9uZW50IHRoYXQgZGlzcGxheXMgY3VycmVudCByb3V0ZVxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBSb3V0ZXJSZW5kZXJlcixcbiAgdHlwZSBSb3V0ZXJSZW5kZXJlclByb3BzLFxufSBmcm9tICcuL1JvdXRlclJlbmRlcmVyLmpzJztcblxuLy8gUmVhY3QgY29udGV4dCBmb3Igc2hhcmluZyByb3V0ZXIgc3RhdGVcbmV4cG9ydCB7IGRlZmF1bHQgYXMgUm91dGluZ0NvbnRleHQgfSBmcm9tICcuL1JvdXRpbmdDb250ZXh0LmpzJztcbi8vIEhvb2sgdG8gYWNjZXNzIHJhdyBxdWVyeSBwYXJhbWV0ZXJzXG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVF1ZXJ5IH0gZnJvbSAnLi91c2VRdWVyeS5qcyc7XG4vLyBIb29rIHRvIGFjY2VzcyB0aGUgY3VycmVudCBsb2NhdGlvblxuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VMb2NhdGlvbiB9IGZyb20gJy4vdXNlTG9jYXRpb24uanMnO1xuLy8gSG9vayB0byBhY2Nlc3MgdGhlIGN1cnJlbnQgcGF0aG5hbWVcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlUGF0aG5hbWUgfSBmcm9tICcuL3VzZVBhdGhuYW1lLmpzJztcbi8vIEhvb2sgdG8gYWNjZXNzIHR5cGVkIHF1ZXJ5IHBhcmFtZXRlcnNcbi8vIEhvb2sgdG8gbmF2aWdhdGUgcHJvZ3JhbW1hdGljYWxseVxuZXhwb3J0IHsgZGVmYXVsdCBhcyB1c2VOYXZpZ2F0ZSB9IGZyb20gJy4vdXNlTmF2aWdhdGUuanMnO1xuLy8gSG9vayB0byBiaW5kIGEgc3BlY2lmaWMgcXVlcnkgcGFyYW0gdG8gY29tcG9uZW50IHN0YXRlXG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZVF1ZXJ5U3RhdGUgfSBmcm9tICcuL3VzZVF1ZXJ5U3RhdGUuanMnO1xuLy8gSG9vayB0byBhY2Nlc3MgYW5kIG11dGF0ZSBmaWx0ZXJzXG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUZpbHRlcnMgfSBmcm9tICcuL3VzZUZpbHRlcnMuanMnO1xuLy8gSG9vayB0byBhY2Nlc3MgZmlsdGVyIGRpYWdub3N0aWNzXG5leHBvcnQgeyBkZWZhdWx0IGFzIHVzZUZpbHRlckRpYWdub3N0aWNzIH0gZnJvbSAnLi91c2VGaWx0ZXJEaWFnbm9zdGljcy5qcyc7XG4vLyBIb29rIHRvIG1hbmFnZSBVUkxTZWFyY2hQYXJhbXNcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdXNlU2VhcmNoUGFyYW1zIH0gZnJvbSAnLi91c2VTZWFyY2hQYXJhbXMuanMnO1xuZXhwb3J0IHtcbiAgdXNlUm91dGVUZWxlbWV0cnksXG4gIHR5cGUgUm91dGVUZWxlbWV0cnlFdmVudCxcbiAgdHlwZSBVc2VSb3V0ZVRlbGVtZXRyeU9wdGlvbnMsXG59IGZyb20gJy4vdXNlUm91dGVUZWxlbWV0cnkuanMnO1xuXG4vLyBQdWJsaWMgaGVscGVyIGZvciB1bmlmaWVkIGZpbHRlci1iYXNlZCBzZWFyY2ggYnVpbGRpbmcgKFBoYXNlIDIpXG5leHBvcnQgeyBkZWZhdWx0IGFzIGJ1aWxkQ29tYmluZWRTZWFyY2ggfSBmcm9tICcuLi90b29scy9idWlsZENvbWJpbmVkU2VhcmNoLmpzJztcblxuZXhwb3J0IHtcbiAgZGVmYXVsdCBhcyBSb3V0ZVJlZGlyZWN0LFxuICB0eXBlIFJvdXRlUmVkaXJlY3RQcm9wcyxcbn0gZnJvbSAnLi9Sb3V0ZVJlZGlyZWN0LmpzJztcbiJdfQ==
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":"7.0.2","root":[[104,116],[118,119],[121,136],[138,148],[155,157]],"packageJsons":["../../../node_modules/@eslint/core/package.json","../../../node_modules/@eslint/plugin-kit/package.json","../../../node_modules/@types/estree/package.json","../../../node_modules/@types/json-schema/package.json","../../../node_modules/@types/react/package.json","../../../node_modules/csstype/package.json","../../../node_modules/eslint/package.json","../../../node_modules/jiti/package.json","../../../node_modules/path-to-regexp/package.json","../../../node_modules/react/package.json","../../../node_modules/tslib/modules/package.json","../../../node_modules/tslib/package.json","../../filter-query/package.json","../package.json"],"missingPackageJsons":["../../../node_modules/@eslint/core/dist/cjs/package.json","../../../node_modules/@eslint/core/dist/package.json","../../../node_modules/@eslint/plugin-kit/dist/cjs/package.json","../../../node_modules/@eslint/plugin-kit/dist/package.json","../../../node_modules/@types/react/jsx-runtime/package.json","../../../node_modules/eslint/lib/package.json","../../../node_modules/eslint/lib/types/package.json","../../../node_modules/eslint/node_modules/@eslint/core/package.json","../../../node_modules/eslint/node_modules/@eslint/plugin-kit/package.json","../../../node_modules/eslint/node_modules/estree/package.json","../../../node_modules/estree/package.json","../../../node_modules/json-schema/package.json","../../../node_modules/path-to-regexp/dist/package.json","../../../node_modules/react/jsx-runtime/package.json"],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.es2023.d.ts","lib.es2024.d.ts","lib.es2025.d.ts","lib.esnext.d.ts","lib.dom.d.ts","lib.dom.iterable.d.ts","lib.dom.asynciterable.d.ts","lib.webworker.importscripts.d.ts","lib.scripthost.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.es2023.array.d.ts","lib.es2023.collection.d.ts","lib.es2023.intl.d.ts","lib.es2024.arraybuffer.d.ts","lib.es2024.collection.d.ts","lib.es2024.object.d.ts","lib.es2024.promise.d.ts","lib.es2024.regexp.d.ts","lib.es2024.sharedmemory.d.ts","lib.es2024.string.d.ts","lib.es2025.collection.d.ts","lib.es2025.float16.d.ts","lib.es2025.intl.d.ts","lib.es2025.iterator.d.ts","lib.es2025.promise.d.ts","lib.es2025.regexp.d.ts","lib.esnext.array.d.ts","lib.esnext.collection.d.ts","lib.esnext.date.d.ts","lib.esnext.decorators.d.ts","lib.esnext.disposable.d.ts","lib.esnext.error.d.ts","lib.esnext.intl.d.ts","lib.esnext.sharedmemory.d.ts","lib.esnext.temporal.d.ts","lib.esnext.typedarrays.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","lib.esnext.full.d.ts","../../../node_modules/tslib/tslib.d.ts","../../../node_modules/tslib/modules/index.d.ts","../../../node_modules/@types/react/global.d.ts","../../../node_modules/csstype/index.d.ts","../../../node_modules/@types/react/index.d.ts","../../../node_modules/@types/react/jsx-runtime.d.ts","../../filter-query/lib/esm/errors.d.ts","../../filter-query/lib/esm/values.d.ts","../../filter-query/lib/esm/types.d.ts","../../../node_modules/path-to-regexp/dist/index.d.ts","../src/builder.ts","../src/history/types.ts","../src/types.ts","../src/asyncResource.ts","../src/ResourcePage.tsx","../src/errors/HttpRedirect.ts","../src/errors/index.ts","../src/history/BrowserHistory.ts","../src/history/index.ts","../src/values.ts","../src/instrumentation/Instrumentation.ts","../src/prepareResource.ts","../src/tools.ts","../../filter-query/lib/esm/stringify.d.ts","../src/tools/buildCombinedSearch.ts","../src/routing/destination.ts","../../filter-query/lib/esm/parse.d.ts","../src/tools/query.ts","../src/internal/routerSearchState.ts","../src/internal/routerLoadState.ts","../src/routing/routerHydration.ts","../src/routing/createRouter.ts","../src/routing/createStaticRouter.ts","../src/tools/index.ts","../src/routing/RoutingContext.ts","../src/routing/Link.tsx","../src/routing/RouteComponentWrapper.tsx","../src/routing/RouterRenderer.tsx","../src/routing/useQuery.ts","../src/routing/useLocation.ts","../src/routing/usePathname.ts","../src/routing/useNavigate.ts","../src/routing/useQueryState.ts","../../filter-query/lib/esm/mutate.d.ts","../src/routing/useFilters.ts","../src/routing/useFilterDiagnostics.ts","../src/routing/useSearchParams.ts","../src/routing/useRouteTelemetry.ts","../src/routing/index.ts","../src/instrumentation/adapters/logger.ts","../src/instrumentation/adapters/devtoolsBridge.ts","../src/instrumentation/adapters/performanceTimeline.ts","../src/instrumentation/adapters/browserTelemetry.ts","../src/instrumentation/index.ts","../src/index.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/@eslint/core/dist/cjs/types.d.cts","../../../node_modules/@eslint/plugin-kit/dist/cjs/types.cts","../../../node_modules/@eslint/plugin-kit/dist/cjs/index.d.cts","../../../node_modules/eslint/lib/types/index.d.ts","../src/eslint-rules/no-direct-window-location-search.ts","../src/eslint-rules/index.ts","../src/routing/useAllQuery.ts"],"fileInfos":[{"version":"16934abaab7026ac114da441aabea1a0","affectsGlobalScope":true,"impliedNodeFormat":1},"d4306fb2e47f74835e8674ffac07d76f","e437c5c1302869326c3bb93da85bbbcf","e4324975a566567b21d350615f1fc6ac","333b1b9a2a9ac3b8497dba5c63b5ba50","6cffacd662b6eb5fa7a36aa2ea366bfa","b4c34f9c23304dbef2d23698637ed638","e5cb86a5fc491796ecd1d2dd348d208f","feb6c6fb19cdb246a5d8acb36a6901c7","9443a7f109277ffaa79d893ed2549995","793cee405385076e27c24f409659dccd","09f69c6610266eaee1ac9e3e30df2c71","62bad718844246b8e17547f37bad6085",{"version":"aae8996e8b5684814785a42cbbefcd79","affectsGlobalScope":true,"impliedNodeFormat":1},"abad6dd56cc8caf095c165df8124d237","abad6dd56cc8caf095c165df8124d237",{"version":"2a9941db0809c9ad0e8837ed629b1dcc","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d051b93324f36bcc68d152a5ca0988cd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"926204c28cd3d073865348473ae28d2e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f25e42c801b2cb3cf2b39792006a9beb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1708ea4d34dc37fadadc63ca01127e80","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2b056277dd138e8f5650fc04e20eaa8d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1da2c1f258970fd3cc91184f69e91a9d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8cf777fe00349b71ee9c4b6f3fe7fd19","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"74f96bc192530c9723f572bfff3d3078","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1df91c56b25955c56387426f378173c5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"38856f70edcd2115c355d96ec77cc09e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"de8700156c1275465bcd473c28b359aa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d47cfdb6ede40518357bb5a4cd7cd9fb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6e5773860cd9e5b15e683113f642ab47","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"30ff5fe1682f7fcd629880476ca3c2e0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf23d7d1b40b9015b694ddc2f011752f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2cc585d42e2c548f9f24a30a1989fd33","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"713906ce9d332d2242b7f05ed9304be3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0219894bfe5042c7e1aa2d22e4a91ed0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6009ffff7e43c93318804d2d28e37fe3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"03be89b227587594fbb50509fc1c2e45","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b30df52dc24740c0bad7c55c3511df7d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ab8d3c9b5ed5c2ab8f383607eef439f0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d950ec671d0a8e07f3c1a31e94abed86","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1abef2ace5eccb02d60dd73cd5a5ee4c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5f0a3044029d1cc081b5887eb4deb07","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d57c697f1446940ec4bfe669c962e2c4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"be41035d7b941482a1e1ae6a5c5dcca5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"10f7d9da7564f27f8ddf4a162b6da6d3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1d0520af549e0c3581f15173cc713ca1","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d65083f97fd741cff028472563eddb79","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"da7f24f00653ebac660ac1c0821ed33d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7cb5ae9e65516ea2235f0721f6aac43c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":1},"2bccd8eaa1dc27e6e29feb6b1baad635","68565f078f6cbaa18bac7ac1aee706a4",{"version":"6df9988546b1b8e15cb137c4ed46c629","impliedNodeFormat":99},{"version":"086b8ccc1aa2a8df8144951e6a412a39","affectsGlobalScope":true,"impliedNodeFormat":1},"8244c8f803a86fcac606483469eb85c3","e644181676469d5cd6b0031bbda670e9","c8b6a8a818c9ae9670eac052d143a588","4f2701ccb61cc4ffd39861a407246c6e","76f3d785b1cde81a78ef2d822e728841","1b5ba73eb6aed9aa3acde7d10132c8e7","13a4e4438a3c0012d9013d18d8745cf2",{"version":"1482fd98f74376a7cf0c770ea627deed","signature":"57847e196ebef936857e1868ed3ad6e0","impliedNodeFormat":1},{"version":"331872e51d479f44b43cecc8d2d782b5","signature":"dc2207b82e0af79f1869ec0e97bd12e1","impliedNodeFormat":1},{"version":"49eeb56db05eb13a42f956565a24c431","signature":"e866cd7894260611cdbf47ec706c7ea2","impliedNodeFormat":1},{"version":"c09990d271770a11d9e3ccaf4113cec0","signature":"242bb968bd59c965895a7ef0b8493a78","impliedNodeFormat":1},{"version":"a786930b2086d6f9c3438d3d310fd3ac","signature":"1d9302d8e1129cee2813a85eb89e8094","impliedNodeFormat":1},{"version":"b7a13ffb150a2e88aeaaae51fc204300","signature":"24f2891c4ab32ee28442ea33745a4757","impliedNodeFormat":1},{"version":"959f19f91a8ba2e388cf4d9359d55eff","signature":"d92d8e5c090a3eac3ed9e58e96de0957","impliedNodeFormat":1},{"version":"08cb96858780d7dc7a554f287a28f476","signature":"9a320439aa086057b44538c2b10a7c9e","impliedNodeFormat":1},{"version":"e9e2a0af065923bedf980299ded10275","signature":"d327008ce5aa0cdc2ee03da8124a49ca","impliedNodeFormat":1},{"version":"1e04d46f2bdc31bb13e9bc21e362f4bd","signature":"a53ae9e8e0fb12e691d2312f45c95000","impliedNodeFormat":1},{"version":"9c37f0a5195e4ce9212884c82d845d94","signature":"e5accfd7b51572d642fb33038474ef52","impliedNodeFormat":1},{"version":"d7d21512726c6bf39322aa66ceb70c88","signature":"42efec2628eb78a9963d21c1ce5dd8bf","impliedNodeFormat":1},{"version":"b978a0eba07d06ee71da311ed75176c9","signature":"a59aa24f165d1afc6fbfd586bd2adbbf","impliedNodeFormat":1},"532afd78c1a0d3fe12d9aa3bda2a273f",{"version":"511e42c2bc66359443544a59e6e3475c","signature":"d068a4c6cd4f9d62f6110836f570cbe3","impliedNodeFormat":1},{"version":"d8e3b75b3f239e2a43af3b8d628c164a","signature":"38969a2870caf7ddde19a9efe6dce38d","impliedNodeFormat":1},"100fa458f56f2cc54e83b37ac6d4217d",{"version":"a9bce968be0f2e3e1abc76d62f13a5c7","signature":"c9b163819a49e9689029ed93b39c9aed","impliedNodeFormat":1},{"version":"a14b0e2bd28b4a555e14550f1a73dcc2","signature":"db34e218fee4b70e355fa323e4b208b6","impliedNodeFormat":1},{"version":"28aa580f5149149b34afe9b5f7bdd4f4","signature":"41847ef2cb29dc8c2111d6ade554d0af","impliedNodeFormat":1},{"version":"20da6992b7a0c1aa28605dfcfde14202","signature":"6edaad61d1fe890d5eea79ab87cc2ee0","impliedNodeFormat":1},{"version":"8408ed4d7775fab696bf0916e5f7406f","signature":"6a7056a00f25ba7e7eb96669c89f50f7","impliedNodeFormat":1},{"version":"efd6020080594b5254d722d1c9cee239","signature":"849f7aaf062d9e70d6a01f7bbbca8fbf","impliedNodeFormat":1},{"version":"0c567e5e74e022e44229d0c148c1ff1a","signature":"1adb62a928c72fb17ec66f28f08eb244","impliedNodeFormat":1},{"version":"3c61367981a9215071b53ab83a2b5b83","signature":"f5d4d027f240e9cc42f0e59c48ce0c3c","impliedNodeFormat":1},{"version":"ace5527b397ae3c3389e46acd5bf9e34","signature":"a84c7affddc5e23deeaba5163bf542e0","impliedNodeFormat":1},{"version":"4e403b89cdfe38aea36dad3131df63c3","signature":"51d5a259fe5bb9c73820ac1a96b71838","impliedNodeFormat":1},{"version":"0c1389b8496999bc7cd97e522cf354d0","signature":"21358f7ae724d3347b69db4448f21963","impliedNodeFormat":1},{"version":"29dba63393adbd33997d3466e7b91606","signature":"b85c5fa0941ce2fbe5bcf6ae4d844b5a","impliedNodeFormat":1},{"version":"fbea640a980a53d67892a14e513dc021","signature":"952e5412b2e7f70738b09329155a10c8","impliedNodeFormat":1},{"version":"e6f04c467413a43c16955d6975ce971e","signature":"1ef746de5bfc795d65c88e2eb0c883bf","impliedNodeFormat":1},{"version":"9265bac5d969e4da99a81b2d658af30e","signature":"9f04146777671a2773bb8e41e82c4fd3","impliedNodeFormat":1},{"version":"1b37e4f8b4dd4cae1b7ca15c294382cb","signature":"3785f58ec10713f5d1f36b37c75ad4a7","impliedNodeFormat":1},"510e7cbf328f175b3ecffc566a6833f8",{"version":"69a2a9d3e839657e153b0849d2fc1fbf","signature":"017161f4a1ea838d35a411174204c9ee","impliedNodeFormat":1},{"version":"7d87cf87618c5a834722b39c9252cb6b","signature":"6bf44a232a29a17a18e318bb5c5c7262","impliedNodeFormat":1},{"version":"d1333894f106b29cac267f639afc4863","signature":"9fda1ce5e9ac9b4f12964bb519096f0b","impliedNodeFormat":1},{"version":"109eb12f4aa0261c968deccc5234a14e","signature":"19701e3323cebc1bfcc3929b58f8a96d","impliedNodeFormat":1},{"version":"7e260fda33075ff5da3fd9f16be23d69","signature":"a1ae870b229c6c8523bcde9299f16c1b","impliedNodeFormat":1},{"version":"cb6503d7c5fdabe62080a64e89b240fd","signature":"00c7afa6b18408bbbcd973f8c78dffcc","impliedNodeFormat":1},{"version":"f9b639b5ada0b044bfba683f76601ad2","signature":"65d6a17d075f34849c27d0382f67186f","impliedNodeFormat":1},{"version":"ce55dd794d58104700f1bb20d5227032","signature":"5054b6257f188006c198de02081ea2f7","impliedNodeFormat":1},{"version":"5e92c4578d2fb45c6011eb2402a37c86","signature":"f9c20d428ab6f16756f31dd43b893a20","impliedNodeFormat":1},"dae9e48e154b1a0b68c4012ff3fdb3df",{"version":"f94ae9e32401f7393aa3132187522bde","signature":"dcb541e57614143c07f0013de98a6c68","impliedNodeFormat":1},"8fcdcc24fc679b8192ec2d0c20bdb0a2","295c0cb8891e7424d3a27dc56dc1b430","950dedac1dbff4ede534c27da0f7a26f","37ed981dd17728a751af627579e7485e","009a7a9e9bc2960664c84008155dc0ff","513e57a4aa6e02efae2153f1a1c391c4",{"version":"21985a47af8cbbe540818dcde48b6f6b","signature":"0d924839e9cd6ab3211db67a0da66dde","impliedNodeFormat":1},"a914c17da84c343c31678c58b5eaa51d",{"version":"6773e3a4d6fd71f2b311fcb8b68ee68a","signature":"21594cbba05ccf7a24e0c7065a8ddda5","impliedNodeFormat":1}],"fileIdsList":[[150],[151,152],[151],[96,97],[98],[149,151,153],[94],[102],[100,101],[98,106,107],[106],[103,106],[109],[155],[154],[105],[105,111],[104,106,108,110,112,113,116,142,147],[102,103,106,113],[114],[114,143,144,145,146],[103,106,122],[100,102,106,120,121],[106,107],[98,105,106,119,127,128],[98,103,106,107,110,115,128],[98,103,106,128,130],[98,103,106],[103,104,105,106,110,112,113,114,116,118,119,122,123,124],[103,104,105,106,110,116,119,122,123],[106,118],[118,119,124,125,126,128,129,130,131,132,133,134,135,136,138,139,140,141],[98,128],[98,106,128,137],[98,105,128],[133],[98,105,114,133],[98,128,133],[103,104,105,106,114,115],[102,117],[98,100,102,103,104,105,108]],"options":{"allowJs":true,"composite":true,"declaration":true,"declarationMap":true,"importHelpers":true,"inlineSourceMap":true,"inlineSources":true,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitThis":true,"noImplicitReturns":true,"noEmitHelpers":true,"noUncheckedIndexedAccess":true,"noEmitOnError":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./esm","removeComments":true,"rootDir":"../src","skipLibCheck":true,"strict":true,"strictNullChecks":true,"target":99},"referencedMap":[[151,1],[153,2],[152,3],[98,4],[99,5],[154,6],[95,7],[137,8],[120,8],[117,8],[102,9],[108,10],[107,11],[104,12],[109,11],[110,13],[156,14],[155,15],[111,16],[112,17],[148,18],[114,19],[146,20],[144,20],[143,20],[145,20],[147,21],[123,22],[122,23],[115,24],[129,25],[130,26],[131,27],[128,28],[125,29],[126,30],[119,31],[142,32],[124,12],[157,33],[139,33],[138,34],[133,35],[135,33],[134,36],[132,33],[136,33],[141,37],[140,38],[116,39],[118,40],[106,41]],"latestChangedDtsFile":"./esm/routing/useAllQuery.d.ts"}
|
|
1
|
+
{"version":"7.0.2","root":[[104,116],[118,119],[121,136],[138,149],[156,158]],"packageJsons":["../../../node_modules/@eslint/core/package.json","../../../node_modules/@eslint/plugin-kit/package.json","../../../node_modules/@types/estree/package.json","../../../node_modules/@types/json-schema/package.json","../../../node_modules/@types/react/package.json","../../../node_modules/csstype/package.json","../../../node_modules/eslint/package.json","../../../node_modules/jiti/package.json","../../../node_modules/path-to-regexp/package.json","../../../node_modules/react/package.json","../../../node_modules/tslib/modules/package.json","../../../node_modules/tslib/package.json","../../filter-query/package.json","../package.json"],"missingPackageJsons":["../../../node_modules/@eslint/core/dist/cjs/package.json","../../../node_modules/@eslint/core/dist/package.json","../../../node_modules/@eslint/plugin-kit/dist/cjs/package.json","../../../node_modules/@eslint/plugin-kit/dist/package.json","../../../node_modules/@types/react/jsx-runtime/package.json","../../../node_modules/eslint/lib/package.json","../../../node_modules/eslint/lib/types/package.json","../../../node_modules/eslint/node_modules/@eslint/core/package.json","../../../node_modules/eslint/node_modules/@eslint/plugin-kit/package.json","../../../node_modules/eslint/node_modules/estree/package.json","../../../node_modules/estree/package.json","../../../node_modules/json-schema/package.json","../../../node_modules/path-to-regexp/dist/package.json","../../../node_modules/react/jsx-runtime/package.json"],"fileNames":["lib.es5.d.ts","lib.es2015.d.ts","lib.es2016.d.ts","lib.es2017.d.ts","lib.es2018.d.ts","lib.es2019.d.ts","lib.es2020.d.ts","lib.es2021.d.ts","lib.es2022.d.ts","lib.es2023.d.ts","lib.es2024.d.ts","lib.es2025.d.ts","lib.esnext.d.ts","lib.dom.d.ts","lib.dom.iterable.d.ts","lib.dom.asynciterable.d.ts","lib.webworker.importscripts.d.ts","lib.scripthost.d.ts","lib.es2015.core.d.ts","lib.es2015.collection.d.ts","lib.es2015.generator.d.ts","lib.es2015.iterable.d.ts","lib.es2015.promise.d.ts","lib.es2015.proxy.d.ts","lib.es2015.reflect.d.ts","lib.es2015.symbol.d.ts","lib.es2015.symbol.wellknown.d.ts","lib.es2016.array.include.d.ts","lib.es2016.intl.d.ts","lib.es2017.arraybuffer.d.ts","lib.es2017.date.d.ts","lib.es2017.object.d.ts","lib.es2017.sharedmemory.d.ts","lib.es2017.string.d.ts","lib.es2017.intl.d.ts","lib.es2017.typedarrays.d.ts","lib.es2018.asyncgenerator.d.ts","lib.es2018.asynciterable.d.ts","lib.es2018.intl.d.ts","lib.es2018.promise.d.ts","lib.es2018.regexp.d.ts","lib.es2019.array.d.ts","lib.es2019.object.d.ts","lib.es2019.string.d.ts","lib.es2019.symbol.d.ts","lib.es2019.intl.d.ts","lib.es2020.bigint.d.ts","lib.es2020.date.d.ts","lib.es2020.promise.d.ts","lib.es2020.sharedmemory.d.ts","lib.es2020.string.d.ts","lib.es2020.symbol.wellknown.d.ts","lib.es2020.intl.d.ts","lib.es2020.number.d.ts","lib.es2021.promise.d.ts","lib.es2021.string.d.ts","lib.es2021.weakref.d.ts","lib.es2021.intl.d.ts","lib.es2022.array.d.ts","lib.es2022.error.d.ts","lib.es2022.intl.d.ts","lib.es2022.object.d.ts","lib.es2022.string.d.ts","lib.es2022.regexp.d.ts","lib.es2023.array.d.ts","lib.es2023.collection.d.ts","lib.es2023.intl.d.ts","lib.es2024.arraybuffer.d.ts","lib.es2024.collection.d.ts","lib.es2024.object.d.ts","lib.es2024.promise.d.ts","lib.es2024.regexp.d.ts","lib.es2024.sharedmemory.d.ts","lib.es2024.string.d.ts","lib.es2025.collection.d.ts","lib.es2025.float16.d.ts","lib.es2025.intl.d.ts","lib.es2025.iterator.d.ts","lib.es2025.promise.d.ts","lib.es2025.regexp.d.ts","lib.esnext.array.d.ts","lib.esnext.collection.d.ts","lib.esnext.date.d.ts","lib.esnext.decorators.d.ts","lib.esnext.disposable.d.ts","lib.esnext.error.d.ts","lib.esnext.intl.d.ts","lib.esnext.sharedmemory.d.ts","lib.esnext.temporal.d.ts","lib.esnext.typedarrays.d.ts","lib.decorators.d.ts","lib.decorators.legacy.d.ts","lib.esnext.full.d.ts","../../../node_modules/tslib/tslib.d.ts","../../../node_modules/tslib/modules/index.d.ts","../../../node_modules/@types/react/global.d.ts","../../../node_modules/csstype/index.d.ts","../../../node_modules/@types/react/index.d.ts","../../../node_modules/@types/react/jsx-runtime.d.ts","../../filter-query/lib/esm/errors.d.ts","../../filter-query/lib/esm/values.d.ts","../../filter-query/lib/esm/types.d.ts","../../../node_modules/path-to-regexp/dist/index.d.ts","../src/builder.ts","../src/history/types.ts","../src/types.ts","../src/asyncResource.ts","../src/ResourcePage.tsx","../src/errors/HttpRedirect.ts","../src/errors/index.ts","../src/history/BrowserHistory.ts","../src/history/index.ts","../src/values.ts","../src/instrumentation/Instrumentation.ts","../src/prepareResource.ts","../src/tools.ts","../../filter-query/lib/esm/stringify.d.ts","../src/tools/buildCombinedSearch.ts","../src/routing/destination.ts","../../filter-query/lib/esm/parse.d.ts","../src/tools/query.ts","../src/internal/routerSearchState.ts","../src/internal/routerLoadState.ts","../src/routing/routerHydration.ts","../src/routing/createRouter.ts","../src/routing/createStaticRouter.ts","../src/tools/index.ts","../src/routing/RoutingContext.ts","../src/routing/Link.tsx","../src/routing/RouteComponentWrapper.tsx","../src/routing/RouterRenderer.tsx","../src/routing/useQuery.ts","../src/routing/useLocation.ts","../src/routing/usePathname.ts","../src/routing/useNavigate.ts","../src/routing/useQueryState.ts","../../filter-query/lib/esm/mutate.d.ts","../src/routing/useFilters.ts","../src/routing/useFilterDiagnostics.ts","../src/routing/useSearchParams.ts","../src/routing/useRouteTelemetry.ts","../src/routing/RouteRedirect.tsx","../src/routing/index.ts","../src/instrumentation/adapters/logger.ts","../src/instrumentation/adapters/devtoolsBridge.ts","../src/instrumentation/adapters/performanceTimeline.ts","../src/instrumentation/adapters/browserTelemetry.ts","../src/instrumentation/index.ts","../src/index.ts","../../../node_modules/@types/estree/index.d.ts","../../../node_modules/@types/json-schema/index.d.ts","../../../node_modules/@eslint/core/dist/cjs/types.d.cts","../../../node_modules/@eslint/plugin-kit/dist/cjs/types.cts","../../../node_modules/@eslint/plugin-kit/dist/cjs/index.d.cts","../../../node_modules/eslint/lib/types/index.d.ts","../src/eslint-rules/no-direct-window-location-search.ts","../src/eslint-rules/index.ts","../src/routing/useAllQuery.ts"],"fileInfos":[{"version":"16934abaab7026ac114da441aabea1a0","affectsGlobalScope":true,"impliedNodeFormat":1},"d4306fb2e47f74835e8674ffac07d76f","e437c5c1302869326c3bb93da85bbbcf","e4324975a566567b21d350615f1fc6ac","333b1b9a2a9ac3b8497dba5c63b5ba50","6cffacd662b6eb5fa7a36aa2ea366bfa","b4c34f9c23304dbef2d23698637ed638","e5cb86a5fc491796ecd1d2dd348d208f","feb6c6fb19cdb246a5d8acb36a6901c7","9443a7f109277ffaa79d893ed2549995","793cee405385076e27c24f409659dccd","09f69c6610266eaee1ac9e3e30df2c71","62bad718844246b8e17547f37bad6085",{"version":"aae8996e8b5684814785a42cbbefcd79","affectsGlobalScope":true,"impliedNodeFormat":1},"abad6dd56cc8caf095c165df8124d237","abad6dd56cc8caf095c165df8124d237",{"version":"2a9941db0809c9ad0e8837ed629b1dcc","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d051b93324f36bcc68d152a5ca0988cd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"926204c28cd3d073865348473ae28d2e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f25e42c801b2cb3cf2b39792006a9beb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6344b55f26a4e81d9608777dbfb877dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3c0ed28e53d3695b363e256ec1c023fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4c2761daba7f17141c25baa0821ac5da","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b87656acabd63e69379ff6ffcfe52fc7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"597469522da047a5af5222cc6989f405","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1708ea4d34dc37fadadc63ca01127e80","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"55d97a8c6fbf34a30450a7b1e5f7a298","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0ee05eb59426d33e374226d8dcfa708b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e347c14030993906efcfbb88915b6a05","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b0231263857c9b6a03641acdc9280ceb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3b15c4a83b598cacb4067676e6f0abed","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b417d97b7934cef63b1889abec0bbfbf","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"09a6cf4032ebba60ce22a501e663f881","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2b056277dd138e8f5650fc04e20eaa8d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"e22cc07e3f3cc242ba52fa3f8ea1fc58","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2c45da767a1bfbb220848df1bc4029e4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b44c3e0fbaf2130cdcf6ac38b120ffa1","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b612fb5cf8e5d964b92063a75207632a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"02705151a5e1551b9162a9ed8ab763f7","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"41025e398be9215d32e4337335da8f0b","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"52684c2b1f353a5538e4f275182a54cd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6dedb6a4f90d1df3a6fbe5693e44886c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ca3f36fe3562c07e0f0d71c2bebd3f6d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"409974d6129befbb8226ddd1c6558568","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4d9cfde2a1ae1b4925f1f9bc10848e5d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7e1daecc66dd564144e3bb1a0266b5fd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a8e1d9bb35fd0637f2f9fd2b2a54f2ec","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4f168501772a6543182765bfd5f2fbfe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a19c80aad1b2162103496f5ba293a732","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b69afa63cd5d059851c78adb2856ee09","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ae2fc5d954e9b0f5feee3d481b953c27","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1cfd3091a071d8b6feec15277643bafe","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1da2c1f258970fd3cc91184f69e91a9d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"a0d87491913d843139e0c993650a3235","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4ef72aa378127e7b7abba915b0110b1e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"3ec74c6a7d4463f0254db3a74cf75646","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"84c2bdfa470d075526cce6322d81b0b6","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0b3844c2b8c73e4e1ab91431411cad11","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"4fc71cf4a15b8d99675a31df77f26e07","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d1b49564ddaeca3df5b6dbae925d2242","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6a25be566d60ccfc2d6e8b7bfdeefa83","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8a20e27646985dfd58c57ca6566553dd","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9969f02ad3cdcbf4f709405cda44167f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"9c9be4792a7a4f42c15ae7360bf28779","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"8cf777fe00349b71ee9c4b6f3fe7fd19","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"74f96bc192530c9723f572bfff3d3078","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1df91c56b25955c56387426f378173c5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"38856f70edcd2115c355d96ec77cc09e","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"de8700156c1275465bcd473c28b359aa","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d47cfdb6ede40518357bb5a4cd7cd9fb","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6e5773860cd9e5b15e683113f642ab47","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"30ff5fe1682f7fcd629880476ca3c2e0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"bf23d7d1b40b9015b694ddc2f011752f","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"2cc585d42e2c548f9f24a30a1989fd33","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"713906ce9d332d2242b7f05ed9304be3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"0219894bfe5042c7e1aa2d22e4a91ed0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"6009ffff7e43c93318804d2d28e37fe3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"03be89b227587594fbb50509fc1c2e45","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"b30df52dc24740c0bad7c55c3511df7d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"ab8d3c9b5ed5c2ab8f383607eef439f0","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d950ec671d0a8e07f3c1a31e94abed86","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1abef2ace5eccb02d60dd73cd5a5ee4c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f5f0a3044029d1cc081b5887eb4deb07","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d57c697f1446940ec4bfe669c962e2c4","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"be41035d7b941482a1e1ae6a5c5dcca5","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"10f7d9da7564f27f8ddf4a162b6da6d3","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"1d0520af549e0c3581f15173cc713ca1","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"d65083f97fd741cff028472563eddb79","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"da7f24f00653ebac660ac1c0821ed33d","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"7cb5ae9e65516ea2235f0721f6aac43c","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"f64453cbf9671f28158677fa5c43967a","affectsGlobalScope":true,"impliedNodeFormat":1},{"version":"33f317af5428801f944a478d2c1e38e5","affectsGlobalScope":true,"impliedNodeFormat":1},"2bccd8eaa1dc27e6e29feb6b1baad635","68565f078f6cbaa18bac7ac1aee706a4",{"version":"6df9988546b1b8e15cb137c4ed46c629","impliedNodeFormat":99},{"version":"086b8ccc1aa2a8df8144951e6a412a39","affectsGlobalScope":true,"impliedNodeFormat":1},"8244c8f803a86fcac606483469eb85c3","e644181676469d5cd6b0031bbda670e9","c8b6a8a818c9ae9670eac052d143a588","4f2701ccb61cc4ffd39861a407246c6e","76f3d785b1cde81a78ef2d822e728841","1b5ba73eb6aed9aa3acde7d10132c8e7","13a4e4438a3c0012d9013d18d8745cf2",{"version":"1482fd98f74376a7cf0c770ea627deed","signature":"57847e196ebef936857e1868ed3ad6e0","impliedNodeFormat":1},{"version":"331872e51d479f44b43cecc8d2d782b5","signature":"dc2207b82e0af79f1869ec0e97bd12e1","impliedNodeFormat":1},{"version":"49eeb56db05eb13a42f956565a24c431","signature":"e866cd7894260611cdbf47ec706c7ea2","impliedNodeFormat":1},{"version":"c09990d271770a11d9e3ccaf4113cec0","signature":"242bb968bd59c965895a7ef0b8493a78","impliedNodeFormat":1},{"version":"a786930b2086d6f9c3438d3d310fd3ac","signature":"1d9302d8e1129cee2813a85eb89e8094","impliedNodeFormat":1},{"version":"b7a13ffb150a2e88aeaaae51fc204300","signature":"24f2891c4ab32ee28442ea33745a4757","impliedNodeFormat":1},{"version":"959f19f91a8ba2e388cf4d9359d55eff","signature":"d92d8e5c090a3eac3ed9e58e96de0957","impliedNodeFormat":1},{"version":"08cb96858780d7dc7a554f287a28f476","signature":"9a320439aa086057b44538c2b10a7c9e","impliedNodeFormat":1},{"version":"e9e2a0af065923bedf980299ded10275","signature":"d327008ce5aa0cdc2ee03da8124a49ca","impliedNodeFormat":1},{"version":"1e04d46f2bdc31bb13e9bc21e362f4bd","signature":"a53ae9e8e0fb12e691d2312f45c95000","impliedNodeFormat":1},{"version":"9c37f0a5195e4ce9212884c82d845d94","signature":"e5accfd7b51572d642fb33038474ef52","impliedNodeFormat":1},{"version":"d7d21512726c6bf39322aa66ceb70c88","signature":"42efec2628eb78a9963d21c1ce5dd8bf","impliedNodeFormat":1},{"version":"b978a0eba07d06ee71da311ed75176c9","signature":"a59aa24f165d1afc6fbfd586bd2adbbf","impliedNodeFormat":1},"532afd78c1a0d3fe12d9aa3bda2a273f",{"version":"511e42c2bc66359443544a59e6e3475c","signature":"d068a4c6cd4f9d62f6110836f570cbe3","impliedNodeFormat":1},{"version":"d8e3b75b3f239e2a43af3b8d628c164a","signature":"38969a2870caf7ddde19a9efe6dce38d","impliedNodeFormat":1},"100fa458f56f2cc54e83b37ac6d4217d",{"version":"a9bce968be0f2e3e1abc76d62f13a5c7","signature":"c9b163819a49e9689029ed93b39c9aed","impliedNodeFormat":1},{"version":"a14b0e2bd28b4a555e14550f1a73dcc2","signature":"db34e218fee4b70e355fa323e4b208b6","impliedNodeFormat":1},{"version":"28aa580f5149149b34afe9b5f7bdd4f4","signature":"41847ef2cb29dc8c2111d6ade554d0af","impliedNodeFormat":1},{"version":"20da6992b7a0c1aa28605dfcfde14202","signature":"6edaad61d1fe890d5eea79ab87cc2ee0","impliedNodeFormat":1},{"version":"09b66ef552f6a9543a33b1ced55289be","signature":"6a7056a00f25ba7e7eb96669c89f50f7","impliedNodeFormat":1},{"version":"efd6020080594b5254d722d1c9cee239","signature":"849f7aaf062d9e70d6a01f7bbbca8fbf","impliedNodeFormat":1},{"version":"0c567e5e74e022e44229d0c148c1ff1a","signature":"1adb62a928c72fb17ec66f28f08eb244","impliedNodeFormat":1},{"version":"3c61367981a9215071b53ab83a2b5b83","signature":"f5d4d027f240e9cc42f0e59c48ce0c3c","impliedNodeFormat":1},{"version":"ace5527b397ae3c3389e46acd5bf9e34","signature":"a84c7affddc5e23deeaba5163bf542e0","impliedNodeFormat":1},{"version":"4e403b89cdfe38aea36dad3131df63c3","signature":"51d5a259fe5bb9c73820ac1a96b71838","impliedNodeFormat":1},{"version":"0c1389b8496999bc7cd97e522cf354d0","signature":"21358f7ae724d3347b69db4448f21963","impliedNodeFormat":1},{"version":"29dba63393adbd33997d3466e7b91606","signature":"b85c5fa0941ce2fbe5bcf6ae4d844b5a","impliedNodeFormat":1},{"version":"fbea640a980a53d67892a14e513dc021","signature":"952e5412b2e7f70738b09329155a10c8","impliedNodeFormat":1},{"version":"e6f04c467413a43c16955d6975ce971e","signature":"1ef746de5bfc795d65c88e2eb0c883bf","impliedNodeFormat":1},{"version":"9265bac5d969e4da99a81b2d658af30e","signature":"9f04146777671a2773bb8e41e82c4fd3","impliedNodeFormat":1},{"version":"1b37e4f8b4dd4cae1b7ca15c294382cb","signature":"3785f58ec10713f5d1f36b37c75ad4a7","impliedNodeFormat":1},"510e7cbf328f175b3ecffc566a6833f8",{"version":"69a2a9d3e839657e153b0849d2fc1fbf","signature":"017161f4a1ea838d35a411174204c9ee","impliedNodeFormat":1},{"version":"7d87cf87618c5a834722b39c9252cb6b","signature":"6bf44a232a29a17a18e318bb5c5c7262","impliedNodeFormat":1},{"version":"d1333894f106b29cac267f639afc4863","signature":"9fda1ce5e9ac9b4f12964bb519096f0b","impliedNodeFormat":1},{"version":"109eb12f4aa0261c968deccc5234a14e","signature":"19701e3323cebc1bfcc3929b58f8a96d","impliedNodeFormat":1},{"version":"4f258cee3b4aa8761a577ff11fa90020","signature":"8c1e6f05278a182a41c1a89a8f889afc","impliedNodeFormat":1},{"version":"bf4b64284325cb1a15467c595dd42be5","signature":"a3bbd7feab9edc48fd94854d8a85fa93","impliedNodeFormat":1},{"version":"cb6503d7c5fdabe62080a64e89b240fd","signature":"00c7afa6b18408bbbcd973f8c78dffcc","impliedNodeFormat":1},{"version":"f9b639b5ada0b044bfba683f76601ad2","signature":"65d6a17d075f34849c27d0382f67186f","impliedNodeFormat":1},{"version":"ce55dd794d58104700f1bb20d5227032","signature":"5054b6257f188006c198de02081ea2f7","impliedNodeFormat":1},{"version":"5e92c4578d2fb45c6011eb2402a37c86","signature":"f9c20d428ab6f16756f31dd43b893a20","impliedNodeFormat":1},"dae9e48e154b1a0b68c4012ff3fdb3df",{"version":"f94ae9e32401f7393aa3132187522bde","signature":"dcb541e57614143c07f0013de98a6c68","impliedNodeFormat":1},"8fcdcc24fc679b8192ec2d0c20bdb0a2","295c0cb8891e7424d3a27dc56dc1b430","950dedac1dbff4ede534c27da0f7a26f","37ed981dd17728a751af627579e7485e","009a7a9e9bc2960664c84008155dc0ff","513e57a4aa6e02efae2153f1a1c391c4",{"version":"21985a47af8cbbe540818dcde48b6f6b","signature":"0d924839e9cd6ab3211db67a0da66dde","impliedNodeFormat":1},"a914c17da84c343c31678c58b5eaa51d",{"version":"6773e3a4d6fd71f2b311fcb8b68ee68a","signature":"21594cbba05ccf7a24e0c7065a8ddda5","impliedNodeFormat":1}],"fileIdsList":[[151],[152,153],[152],[96,97],[98],[150,152,154],[94],[102],[100,101],[98,106,107],[106],[103,106],[109],[156],[155],[105],[105,111],[104,106,108,110,112,113,116,143,148],[102,103,106,113],[114],[114,144,145,146,147],[103,106,122],[100,102,106,120,121],[106,107],[98,105,106,119,127,128],[98,103,106,107,110,115,128],[98,106,128],[98,103,106,128,130],[98,103,106],[103,104,105,106,110,112,113,114,116,118,119,122,123,124],[103,104,105,106,110,116,119,122,123],[106,118],[118,119,124,125,126,128,129,130,131,132,133,134,135,136,138,139,140,141,142],[98,128],[98,106,128,137],[98,105,128],[133],[98,105,114,133],[98,128,133],[103,104,105,106,114,115],[102,117],[98,100,102,103,104,105,108]],"options":{"allowJs":true,"composite":true,"declaration":true,"declarationMap":true,"importHelpers":true,"inlineSourceMap":true,"inlineSources":true,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noImplicitAny":true,"noImplicitThis":true,"noImplicitReturns":true,"noEmitHelpers":true,"noUncheckedIndexedAccess":true,"noEmitOnError":true,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./esm","removeComments":true,"rootDir":"../src","skipLibCheck":true,"strict":true,"strictNullChecks":true,"target":99},"referencedMap":[[152,1],[154,2],[153,3],[98,4],[99,5],[155,6],[95,7],[137,8],[120,8],[117,8],[102,9],[108,10],[107,11],[104,12],[109,11],[110,13],[157,14],[156,15],[111,16],[112,17],[149,18],[114,19],[147,20],[145,20],[144,20],[146,20],[148,21],[123,22],[122,23],[115,24],[129,25],[130,26],[142,27],[131,28],[128,29],[125,30],[126,31],[119,32],[143,33],[124,12],[158,34],[139,34],[138,35],[133,36],[135,34],[134,37],[132,34],[136,34],[141,38],[140,39],[116,40],[118,41],[106,42]],"latestChangedDtsFile":"./esm/routing/useAllQuery.d.ts"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
import type { PreparedRouteSegment } from '../types.js';
|
|
3
|
+
export type RouteRedirectProps = {
|
|
4
|
+
pathname: string;
|
|
5
|
+
preparedSegment: Pick<PreparedRouteSegment, 'segmentKey'>;
|
|
6
|
+
fallback?: ReactNode;
|
|
7
|
+
};
|
|
8
|
+
export default function RouteRedirect({ pathname, preparedSegment, fallback, }: RouteRedirectProps): ReactNode;
|
|
9
|
+
//# sourceMappingURL=RouteRedirect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RouteRedirect.d.ts","sourceRoot":"","sources":["../../../src/routing/RouteRedirect.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAE9D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGxD,MAAM,MAAM,kBAAkB,GAAG;IAE/B,QAAQ,EAAE,MAAM,CAAC;IAEjB,eAAe,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;IAE1D,QAAQ,CAAC,EAAE,SAAS,CAAC;CACtB,CAAC;AAGF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EACpC,QAAQ,EACR,eAAe,EACf,QAAe,GAChB,EAAE,kBAAkB,GAAG,SAAS,CAyChC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAOtB,KAAK,uBAAuB,EAG5B,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"createRouter.d.ts","sourceRoot":"","sources":["../../../src/routing/createRouter.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAEL,KAAK,kBAAkB,EAEvB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,iBAAiB,EAOtB,KAAK,uBAAuB,EAG5B,KAAK,iBAAiB,EACvB,MAAM,aAAa,CAAC;AACrB,OAAO,EAEL,KAAK,kBAAkB,EAMxB,MAAM,uCAAuC,CAAC;AAa/C,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,kCAAkC,CAAC;AA2C1C,MAAM,MAAM,kBAAkB,CAAC,QAAQ,EAAE,CAAC,SAAS,SAAS,EAAE,IAAI;IAEhE,OAAO,EAAE,MAAM,IAAI,CAAC;IAEpB,OAAO,EAAE,kBAAkB,CACzB,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,QAAQ,CACT,GACC,cAAc,CAAC,CAAC,CAAC,GAAG;QAClB,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC;KAChC,CAAC;CACL,CAAC;AAwCF,MAAM,MAAM,mBAAmB,CAAC,QAAQ,IAAI;IAE1C,gBAAgB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAExC,OAAO,CAAC,EAAE,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,CAAC;IAEtC,UAAU,CAAC,EAAE,MAAM,QAAQ,CAAC;IAE5B,iBAAiB,CAAC,EAAE,uBAAuB,CAAC;CAC7C,CAAC;AAy0CF,MAAM,CAAC,OAAO,UAAU,YAAY,CAClC,QAAQ,GAAG,OAAO,EAClB,CAAC,SAAS,SAAS,EAAE,GAAG,SAAS,EAAE,EAEnC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,EAAE,EAC5B,OAAO,GAAE,mBAAmB,CAAC,QAAQ,CAAM,GAC1C,kBAAkB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAajC"}
|
|
@@ -16,4 +16,5 @@ export { default as useFilterDiagnostics } from './useFilterDiagnostics.js';
|
|
|
16
16
|
export { default as useSearchParams } from './useSearchParams.js';
|
|
17
17
|
export { useRouteTelemetry, type RouteTelemetryEvent, type UseRouteTelemetryOptions, } from './useRouteTelemetry.js';
|
|
18
18
|
export { default as buildCombinedSearch } from '../tools/buildCombinedSearch.js';
|
|
19
|
+
export { default as RouteRedirect, type RouteRedirectProps, } from './RouteRedirect.js';
|
|
19
20
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,OAAO,IAAI,yBAAyB,EACpC,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,OAAO,IAAI,IAAI,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAGrE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAE5E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routing/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EACL,kBAAkB,EAClB,OAAO,IAAI,yBAAyB,EACpC,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AAIjC,OAAO,EACL,OAAO,IAAI,IAAI,EACf,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,GAC1B,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,wBAAwB,EACxB,KAAK,yBAAyB,GAC/B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAGrE,OAAO,EAAE,OAAO,IAAI,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAG9E,OAAO,EACL,OAAO,IAAI,cAAc,EACzB,KAAK,mBAAmB,GACzB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEpD,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG1D,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAE5E,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EACL,iBAAiB,EACjB,KAAK,mBAAmB,EACxB,KAAK,wBAAwB,GAC9B,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,OAAO,EACL,OAAO,IAAI,aAAa,EACxB,KAAK,kBAAkB,GACxB,MAAM,oBAAoB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plumile/router",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.9",
|
|
4
4
|
"description": "A modern, type-safe React router with code splitting, data preloading, and Suspense integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -131,14 +131,14 @@
|
|
|
131
131
|
"tslib": "^2.8.1"
|
|
132
132
|
},
|
|
133
133
|
"devDependencies": {
|
|
134
|
-
"@plumile/filter-query": "^0.2.
|
|
134
|
+
"@plumile/filter-query": "^0.2.9",
|
|
135
135
|
"@typescript/native": "npm:typescript@7.0.2",
|
|
136
136
|
"react": "19.2.8",
|
|
137
137
|
"react-dom": "19.2.8",
|
|
138
138
|
"rimraf": "6.1.3"
|
|
139
139
|
},
|
|
140
140
|
"peerDependencies": {
|
|
141
|
-
"@plumile/filter-query": "^0.2.
|
|
141
|
+
"@plumile/filter-query": "^0.2.7",
|
|
142
142
|
"react": "^19.2.8"
|
|
143
143
|
},
|
|
144
144
|
"files": [
|