@angular/router 17.2.0-next.1 → 17.2.0-rc.1

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.
Files changed (59) hide show
  1. package/esm2022/src/apply_redirects.mjs +4 -3
  2. package/esm2022/src/components/empty_outlet.mjs +4 -4
  3. package/esm2022/src/create_router_state.mjs +5 -5
  4. package/esm2022/src/create_url_tree.mjs +17 -15
  5. package/esm2022/src/directives/router_link.mjs +29 -23
  6. package/esm2022/src/directives/router_link_active.mjs +18 -14
  7. package/esm2022/src/directives/router_outlet.mjs +14 -12
  8. package/esm2022/src/events.mjs +8 -6
  9. package/esm2022/src/index.mjs +9 -9
  10. package/esm2022/src/models.mjs +1 -1
  11. package/esm2022/src/models_deprecated.mjs +1 -1
  12. package/esm2022/src/navigation_canceling_error.mjs +6 -4
  13. package/esm2022/src/navigation_transition.mjs +64 -66
  14. package/esm2022/src/operators/activate_routes.mjs +10 -9
  15. package/esm2022/src/operators/check_guards.mjs +36 -38
  16. package/esm2022/src/operators/prioritized_guard_value.mjs +3 -4
  17. package/esm2022/src/operators/recognize.mjs +2 -3
  18. package/esm2022/src/operators/resolve_data.mjs +13 -15
  19. package/esm2022/src/operators/switch_tap.mjs +2 -2
  20. package/esm2022/src/page_title_strategy.mjs +8 -8
  21. package/esm2022/src/private_export.mjs +1 -1
  22. package/esm2022/src/provide_router.mjs +39 -34
  23. package/esm2022/src/recognize.mjs +28 -40
  24. package/esm2022/src/route_reuse_strategy.mjs +7 -7
  25. package/esm2022/src/router.mjs +21 -19
  26. package/esm2022/src/router_config.mjs +2 -2
  27. package/esm2022/src/router_config_loader.mjs +8 -11
  28. package/esm2022/src/router_module.mjs +24 -20
  29. package/esm2022/src/router_outlet_context.mjs +4 -4
  30. package/esm2022/src/router_preloader.mjs +15 -17
  31. package/esm2022/src/router_scroller.mjs +7 -7
  32. package/esm2022/src/router_state.mjs +9 -9
  33. package/esm2022/src/shared.mjs +1 -1
  34. package/esm2022/src/statemanager/state_manager.mjs +12 -14
  35. package/esm2022/src/url_handling_strategy.mjs +6 -6
  36. package/esm2022/src/url_tree.mjs +25 -22
  37. package/esm2022/src/utils/collection.mjs +1 -1
  38. package/esm2022/src/utils/config.mjs +22 -12
  39. package/esm2022/src/utils/config_matching.mjs +10 -11
  40. package/esm2022/src/utils/functional_guards.mjs +5 -5
  41. package/esm2022/src/utils/navigations.mjs +10 -8
  42. package/esm2022/src/utils/preactivation.mjs +9 -11
  43. package/esm2022/src/utils/tree.mjs +6 -6
  44. package/esm2022/src/utils/type_guards.mjs +1 -1
  45. package/esm2022/src/utils/view_transition.mjs +3 -3
  46. package/esm2022/src/version.mjs +1 -1
  47. package/esm2022/testing/src/router_testing_harness.mjs +9 -9
  48. package/esm2022/testing/src/router_testing_module.mjs +8 -8
  49. package/esm2022/upgrade/src/upgrade.mjs +6 -6
  50. package/fesm2022/router.mjs +449 -433
  51. package/fesm2022/router.mjs.map +1 -1
  52. package/fesm2022/testing.mjs +15 -15
  53. package/fesm2022/testing.mjs.map +1 -1
  54. package/fesm2022/upgrade.mjs +6 -6
  55. package/fesm2022/upgrade.mjs.map +1 -1
  56. package/index.d.ts +1 -1
  57. package/package.json +4 -4
  58. package/testing/index.d.ts +1 -1
  59. package/upgrade/index.d.ts +1 -1
@@ -9,7 +9,9 @@ import { NavigationCancellationCode } from './events';
9
9
  import { isUrlTree } from './url_tree';
10
10
  export const NAVIGATION_CANCELING_ERROR = 'ngNavigationCancelingError';
11
11
  export function redirectingNavigationError(urlSerializer, redirect) {
12
- const { redirectTo, navigationBehaviorOptions } = isUrlTree(redirect) ? { redirectTo: redirect, navigationBehaviorOptions: undefined } : redirect;
12
+ const { redirectTo, navigationBehaviorOptions } = isUrlTree(redirect)
13
+ ? { redirectTo: redirect, navigationBehaviorOptions: undefined }
14
+ : redirect;
13
15
  const error = navigationCancelingError(ngDevMode && `Redirecting to "${urlSerializer.serialize(redirectTo)}"`, NavigationCancellationCode.Redirect);
14
16
  error.url = redirectTo;
15
17
  error.navigationBehaviorOptions = navigationBehaviorOptions;
@@ -22,10 +24,10 @@ export function navigationCancelingError(message, code) {
22
24
  return error;
23
25
  }
24
26
  export function isRedirectingNavigationCancelingError(error) {
25
- return isNavigationCancelingError(error) &&
26
- isUrlTree(error.url);
27
+ return (isNavigationCancelingError(error) &&
28
+ isUrlTree(error.url));
27
29
  }
28
30
  export function isNavigationCancelingError(error) {
29
31
  return !!error && error[NAVIGATION_CANCELING_ERROR];
30
32
  }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbl9jYW5jZWxpbmdfZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvc3JjL25hdmlnYXRpb25fY2FuY2VsaW5nX2Vycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVwRCxPQUFPLEVBQUMsU0FBUyxFQUF5QixNQUFNLFlBQVksQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyw0QkFBNEIsQ0FBQztBQVV2RSxNQUFNLFVBQVUsMEJBQTBCLENBQ3RDLGFBQTRCLEVBQUUsUUFBaUI7SUFDakQsTUFBTSxFQUFDLFVBQVUsRUFBRSx5QkFBeUIsRUFBQyxHQUN6QyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSx5QkFBeUIsRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0lBQ2xHLE1BQU0sS0FBSyxHQUFHLHdCQUF3QixDQUNwQixTQUFTLElBQUksbUJBQW1CLGFBQWEsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFDdEUsMEJBQTBCLENBQUMsUUFBUSxDQUF3QyxDQUFDO0lBQzlGLEtBQUssQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDO0lBQ3ZCLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyx5QkFBeUIsQ0FBQztJQUM1RCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3BDLE9BQTBCLEVBQUUsSUFBZ0M7SUFDOUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsNkJBQTZCLE9BQU8sSUFBSSxFQUFFLEVBQUUsQ0FBNkIsQ0FBQztJQUNsRyxLQUFLLENBQUMsMEJBQTBCLENBQUMsR0FBRyxJQUFJLENBQUM7SUFDekMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztJQUM5QixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUscUNBQXFDLENBQ2pELEtBQ21DO0lBQ3JDLE9BQU8sMEJBQTBCLENBQUMsS0FBSyxDQUFDO1FBQ3BDLFNBQVMsQ0FBRSxLQUE2QyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFFRCxNQUFNLFVBQVUsMEJBQTBCLENBQUMsS0FBYztJQUN2RCxPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUssS0FBa0MsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQ3BGLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZX0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHtOYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zfSBmcm9tICcuL21vZGVscyc7XG5pbXBvcnQge2lzVXJsVHJlZSwgVXJsU2VyaWFsaXplciwgVXJsVHJlZX0gZnJvbSAnLi91cmxfdHJlZSc7XG5cbmV4cG9ydCBjb25zdCBOQVZJR0FUSU9OX0NBTkNFTElOR19FUlJPUiA9ICduZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcic7XG5cbmV4cG9ydCB0eXBlIE5hdmlnYXRpb25DYW5jZWxpbmdFcnJvciA9XG4gICAgRXJyb3Ime1tOQVZJR0FUSU9OX0NBTkNFTElOR19FUlJPUl06IHRydWUsIGNhbmNlbGxhdGlvbkNvZGU6IE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlfTtcbmV4cG9ydCB0eXBlIFJlZGlyZWN0aW5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yID0gTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yJntcbiAgdXJsOiBVcmxUcmVlO1xuICBuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zPzogTmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucztcbiAgY2FuY2VsbGF0aW9uQ29kZTogTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGUuUmVkaXJlY3Q7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVkaXJlY3RpbmdOYXZpZ2F0aW9uRXJyb3IoXG4gICAgdXJsU2VyaWFsaXplcjogVXJsU2VyaWFsaXplciwgcmVkaXJlY3Q6IFVybFRyZWUpOiBSZWRpcmVjdGluZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvciB7XG4gIGNvbnN0IHtyZWRpcmVjdFRvLCBuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zfSA9XG4gICAgICBpc1VybFRyZWUocmVkaXJlY3QpID8ge3JlZGlyZWN0VG86IHJlZGlyZWN0LCBuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zOiB1bmRlZmluZWR9IDogcmVkaXJlY3Q7XG4gIGNvbnN0IGVycm9yID0gbmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKFxuICAgICAgICAgICAgICAgICAgICBuZ0Rldk1vZGUgJiYgYFJlZGlyZWN0aW5nIHRvIFwiJHt1cmxTZXJpYWxpemVyLnNlcmlhbGl6ZShyZWRpcmVjdFRvKX1cImAsXG4gICAgICAgICAgICAgICAgICAgIE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlLlJlZGlyZWN0KSBhcyBSZWRpcmVjdGluZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjtcbiAgZXJyb3IudXJsID0gcmVkaXJlY3RUbztcbiAgZXJyb3IubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucyA9IG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcihcbiAgICBtZXNzYWdlOiBzdHJpbmd8bnVsbHxmYWxzZSwgY29kZTogTmF2aWdhdGlvbkNhbmNlbGxhdGlvbkNvZGUpIHtcbiAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoYE5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjogJHttZXNzYWdlIHx8ICcnfWApIGFzIE5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjtcbiAgZXJyb3JbTkFWSUdBVElPTl9DQU5DRUxJTkdfRVJST1JdID0gdHJ1ZTtcbiAgZXJyb3IuY2FuY2VsbGF0aW9uQ29kZSA9IGNvZGU7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVkaXJlY3RpbmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IoXG4gICAgZXJyb3I6IHVua25vd258XG4gICAgUmVkaXJlY3RpbmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IpOiBlcnJvciBpcyBSZWRpcmVjdGluZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvciB7XG4gIHJldHVybiBpc05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcihlcnJvcikgJiZcbiAgICAgIGlzVXJsVHJlZSgoZXJyb3IgYXMgUmVkaXJlY3RpbmdOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IpLnVybCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIE5hdmlnYXRpb25DYW5jZWxpbmdFcnJvciB7XG4gIHJldHVybiAhIWVycm9yICYmIChlcnJvciBhcyBOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IpW05BVklHQVRJT05fQ0FOQ0VMSU5HX0VSUk9SXTtcbn1cbiJdfQ==
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbl9jYW5jZWxpbmdfZXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9yb3V0ZXIvc3JjL25hdmlnYXRpb25fY2FuY2VsaW5nX2Vycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUVwRCxPQUFPLEVBQUMsU0FBUyxFQUF5QixNQUFNLFlBQVksQ0FBQztBQUU3RCxNQUFNLENBQUMsTUFBTSwwQkFBMEIsR0FBRyw0QkFBNEIsQ0FBQztBQVl2RSxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLGFBQTRCLEVBQzVCLFFBQWlCO0lBRWpCLE1BQU0sRUFBQyxVQUFVLEVBQUUseUJBQXlCLEVBQUMsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQ2pFLENBQUMsQ0FBQyxFQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUseUJBQXlCLEVBQUUsU0FBUyxFQUFDO1FBQzlELENBQUMsQ0FBQyxRQUFRLENBQUM7SUFDYixNQUFNLEtBQUssR0FBRyx3QkFBd0IsQ0FDcEMsU0FBUyxJQUFJLG1CQUFtQixhQUFhLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQ3RFLDBCQUEwQixDQUFDLFFBQVEsQ0FDRyxDQUFDO0lBQ3pDLEtBQUssQ0FBQyxHQUFHLEdBQUcsVUFBVSxDQUFDO0lBQ3ZCLEtBQUssQ0FBQyx5QkFBeUIsR0FBRyx5QkFBeUIsQ0FBQztJQUM1RCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLE9BQThCLEVBQzlCLElBQWdDO0lBRWhDLE1BQU0sS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLDZCQUE2QixPQUFPLElBQUksRUFBRSxFQUFFLENBQTZCLENBQUM7SUFDbEcsS0FBSyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3pDLEtBQUssQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFDOUIsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLHFDQUFxQyxDQUNuRCxLQUFvRDtJQUVwRCxPQUFPLENBQ0wsMEJBQTBCLENBQUMsS0FBSyxDQUFDO1FBQ2pDLFNBQVMsQ0FBRSxLQUE2QyxDQUFDLEdBQUcsQ0FBQyxDQUM5RCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSwwQkFBMEIsQ0FBQyxLQUFjO0lBQ3ZELE9BQU8sQ0FBQyxDQUFDLEtBQUssSUFBSyxLQUFrQyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDcEYsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge05hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlfSBmcm9tICcuL2V2ZW50cyc7XG5pbXBvcnQge05hdmlnYXRpb25CZWhhdmlvck9wdGlvbnN9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7aXNVcmxUcmVlLCBVcmxTZXJpYWxpemVyLCBVcmxUcmVlfSBmcm9tICcuL3VybF90cmVlJztcblxuZXhwb3J0IGNvbnN0IE5BVklHQVRJT05fQ0FOQ0VMSU5HX0VSUk9SID0gJ25nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yJztcblxuZXhwb3J0IHR5cGUgTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yID0gRXJyb3IgJiB7XG4gIFtOQVZJR0FUSU9OX0NBTkNFTElOR19FUlJPUl06IHRydWU7XG4gIGNhbmNlbGxhdGlvbkNvZGU6IE5hdmlnYXRpb25DYW5jZWxsYXRpb25Db2RlO1xufTtcbmV4cG9ydCB0eXBlIFJlZGlyZWN0aW5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yID0gTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yICYge1xuICB1cmw6IFVybFRyZWU7XG4gIG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM/OiBOYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zO1xuICBjYW5jZWxsYXRpb25Db2RlOiBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZS5SZWRpcmVjdDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiByZWRpcmVjdGluZ05hdmlnYXRpb25FcnJvcihcbiAgdXJsU2VyaWFsaXplcjogVXJsU2VyaWFsaXplcixcbiAgcmVkaXJlY3Q6IFVybFRyZWUsXG4pOiBSZWRpcmVjdGluZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvciB7XG4gIGNvbnN0IHtyZWRpcmVjdFRvLCBuYXZpZ2F0aW9uQmVoYXZpb3JPcHRpb25zfSA9IGlzVXJsVHJlZShyZWRpcmVjdClcbiAgICA/IHtyZWRpcmVjdFRvOiByZWRpcmVjdCwgbmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9uczogdW5kZWZpbmVkfVxuICAgIDogcmVkaXJlY3Q7XG4gIGNvbnN0IGVycm9yID0gbmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKFxuICAgIG5nRGV2TW9kZSAmJiBgUmVkaXJlY3RpbmcgdG8gXCIke3VybFNlcmlhbGl6ZXIuc2VyaWFsaXplKHJlZGlyZWN0VG8pfVwiYCxcbiAgICBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZS5SZWRpcmVjdCxcbiAgKSBhcyBSZWRpcmVjdGluZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcjtcbiAgZXJyb3IudXJsID0gcmVkaXJlY3RUbztcbiAgZXJyb3IubmF2aWdhdGlvbkJlaGF2aW9yT3B0aW9ucyA9IG5hdmlnYXRpb25CZWhhdmlvck9wdGlvbnM7XG4gIHJldHVybiBlcnJvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5hdmlnYXRpb25DYW5jZWxpbmdFcnJvcihcbiAgbWVzc2FnZTogc3RyaW5nIHwgbnVsbCB8IGZhbHNlLFxuICBjb2RlOiBOYXZpZ2F0aW9uQ2FuY2VsbGF0aW9uQ29kZSxcbikge1xuICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihgTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yOiAke21lc3NhZ2UgfHwgJyd9YCkgYXMgTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yO1xuICBlcnJvcltOQVZJR0FUSU9OX0NBTkNFTElOR19FUlJPUl0gPSB0cnVlO1xuICBlcnJvci5jYW5jZWxsYXRpb25Db2RlID0gY29kZTtcbiAgcmV0dXJuIGVycm9yO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNSZWRpcmVjdGluZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcihcbiAgZXJyb3I6IHVua25vd24gfCBSZWRpcmVjdGluZ05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcixcbik6IGVycm9yIGlzIFJlZGlyZWN0aW5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yIHtcbiAgcmV0dXJuIChcbiAgICBpc05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcihlcnJvcikgJiZcbiAgICBpc1VybFRyZWUoKGVycm9yIGFzIFJlZGlyZWN0aW5nTmF2aWdhdGlvbkNhbmNlbGluZ0Vycm9yKS51cmwpXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05hdmlnYXRpb25DYW5jZWxpbmdFcnJvcihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIE5hdmlnYXRpb25DYW5jZWxpbmdFcnJvciB7XG4gIHJldHVybiAhIWVycm9yICYmIChlcnJvciBhcyBOYXZpZ2F0aW9uQ2FuY2VsaW5nRXJyb3IpW05BVklHQVRJT05fQ0FOQ0VMSU5HX0VSUk9SXTtcbn1cbiJdfQ==