{"version":3,"file":"testing.mjs","sources":["../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/testing/src/mock_platform_location.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/testing/src/navigation/provide_fake_platform_navigation.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/testing/src/location_mock.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/testing/src/mock_location_strategy.ts","../../../../../darwin_arm64-fastbuild-ST-fdfa778d11ba/bin/packages/common/testing/src/provide_location_mocks.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  LocationChangeEvent,\n  LocationChangeListener,\n  PlatformLocation,\n  PlatformNavigation,\n} from '../../index';\nimport {Inject, inject, Injectable, InjectionToken, Optional} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {FakeNavigation} from './navigation/fake_navigation';\n\n/**\n * Parser from https://tools.ietf.org/html/rfc3986#appendix-B\n * ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?\n *  12            3  4          5       6  7        8 9\n *\n * Example: http://www.ics.uci.edu/pub/ietf/uri/#Related\n *\n * Results in:\n *\n * $1 = http:\n * $2 = http\n * $3 = //www.ics.uci.edu\n * $4 = www.ics.uci.edu\n * $5 = /pub/ietf/uri/\n * $6 = <undefined>\n * $7 = <undefined>\n * $8 = #Related\n * $9 = Related\n */\nconst urlParse = /^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?/;\n\nfunction parseUrl(urlStr: string, baseHref: string) {\n  const verifyProtocol = /^((http[s]?|ftp):\\/\\/)/;\n  let serverBase: string | undefined;\n\n  // URL class requires full URL. If the URL string doesn't start with protocol, we need to add\n  // an arbitrary base URL which can be removed afterward.\n  if (!verifyProtocol.test(urlStr)) {\n    serverBase = 'http://empty.com/';\n  }\n  let parsedUrl: {\n    protocol: string;\n    hostname: string;\n    port: string;\n    pathname: string;\n    search: string;\n    hash: string;\n  };\n  try {\n    parsedUrl = new URL(urlStr, serverBase);\n  } catch (e) {\n    const result = urlParse.exec(serverBase || '' + urlStr);\n    if (!result) {\n      throw new Error(`Invalid URL: ${urlStr} with base: ${baseHref}`);\n    }\n    const hostSplit = result[4].split(':');\n    parsedUrl = {\n      protocol: result[1],\n      hostname: hostSplit[0],\n      port: hostSplit[1] || '',\n      pathname: result[5],\n      search: result[6],\n      hash: result[8],\n    };\n  }\n  if (parsedUrl.pathname && parsedUrl.pathname.indexOf(baseHref) === 0) {\n    parsedUrl.pathname = parsedUrl.pathname.substring(baseHref.length);\n  }\n  return {\n    hostname: (!serverBase && parsedUrl.hostname) || '',\n    protocol: (!serverBase && parsedUrl.protocol) || '',\n    port: (!serverBase && parsedUrl.port) || '',\n    pathname: parsedUrl.pathname || '/',\n    search: parsedUrl.search || '',\n    hash: parsedUrl.hash || '',\n  };\n}\n\n/**\n * Mock platform location config\n *\n * @publicApi\n */\nexport interface MockPlatformLocationConfig {\n  startUrl?: string;\n  appBaseHref?: string;\n}\n\n/**\n * Provider for mock platform location config\n *\n * @publicApi\n */\nexport const MOCK_PLATFORM_LOCATION_CONFIG = new InjectionToken<MockPlatformLocationConfig>(\n  'MOCK_PLATFORM_LOCATION_CONFIG',\n);\n\n/**\n * Mock implementation of URL state.\n *\n * @publicApi\n */\n@Injectable()\nexport class MockPlatformLocation implements PlatformLocation {\n  private baseHref: string = '';\n  private hashUpdate = new Subject<LocationChangeEvent>();\n  private popStateSubject = new Subject<LocationChangeEvent>();\n  private urlChangeIndex: number = 0;\n  private urlChanges: {\n    hostname: string;\n    protocol: string;\n    port: string;\n    pathname: string;\n    search: string;\n    hash: string;\n    state: unknown;\n  }[] = [{hostname: '', protocol: '', port: '', pathname: '/', search: '', hash: '', state: null}];\n\n  constructor(\n    @Inject(MOCK_PLATFORM_LOCATION_CONFIG) @Optional() config?: MockPlatformLocationConfig,\n  ) {\n    if (config) {\n      this.baseHref = config.appBaseHref || '';\n\n      const parsedChanges = this.parseChanges(\n        null,\n        config.startUrl || 'http://_empty_/',\n        this.baseHref,\n      );\n      this.urlChanges[0] = {...parsedChanges};\n    }\n  }\n\n  get hostname() {\n    return this.urlChanges[this.urlChangeIndex].hostname;\n  }\n  get protocol() {\n    return this.urlChanges[this.urlChangeIndex].protocol;\n  }\n  get port() {\n    return this.urlChanges[this.urlChangeIndex].port;\n  }\n  get pathname() {\n    return this.urlChanges[this.urlChangeIndex].pathname;\n  }\n  get search() {\n    return this.urlChanges[this.urlChangeIndex].search;\n  }\n  get hash() {\n    return this.urlChanges[this.urlChangeIndex].hash;\n  }\n  get state() {\n    return this.urlChanges[this.urlChangeIndex].state;\n  }\n\n  getBaseHrefFromDOM(): string {\n    return this.baseHref;\n  }\n\n  onPopState(fn: LocationChangeListener): VoidFunction {\n    const subscription = this.popStateSubject.subscribe(fn);\n    return () => subscription.unsubscribe();\n  }\n\n  onHashChange(fn: LocationChangeListener): VoidFunction {\n    const subscription = this.hashUpdate.subscribe(fn);\n    return () => subscription.unsubscribe();\n  }\n\n  get href(): string {\n    let url = `${this.protocol}//${this.hostname}${this.port ? ':' + this.port : ''}`;\n    url += `${this.pathname === '/' ? '' : this.pathname}${this.search}${this.hash}`;\n    return url;\n  }\n\n  get url(): string {\n    return `${this.pathname}${this.search}${this.hash}`;\n  }\n\n  private parseChanges(state: unknown, url: string, baseHref: string = '') {\n    // When the `history.state` value is stored, it is always copied.\n    state = JSON.parse(JSON.stringify(state));\n    return {...parseUrl(url, baseHref), state};\n  }\n\n  replaceState(state: any, title: string, newUrl: string): void {\n    const {pathname, search, state: parsedState, hash} = this.parseChanges(state, newUrl);\n\n    this.urlChanges[this.urlChangeIndex] = {\n      ...this.urlChanges[this.urlChangeIndex],\n      pathname,\n      search,\n      hash,\n      state: parsedState,\n    };\n  }\n\n  pushState(state: any, title: string, newUrl: string): void {\n    const {pathname, search, state: parsedState, hash} = this.parseChanges(state, newUrl);\n    if (this.urlChangeIndex > 0) {\n      this.urlChanges.splice(this.urlChangeIndex + 1);\n    }\n    this.urlChanges.push({\n      ...this.urlChanges[this.urlChangeIndex],\n      pathname,\n      search,\n      hash,\n      state: parsedState,\n    });\n    this.urlChangeIndex = this.urlChanges.length - 1;\n  }\n\n  forward(): void {\n    const oldUrl = this.url;\n    const oldHash = this.hash;\n    if (this.urlChangeIndex < this.urlChanges.length) {\n      this.urlChangeIndex++;\n    }\n    this.emitEvents(oldHash, oldUrl);\n  }\n\n  back(): void {\n    const oldUrl = this.url;\n    const oldHash = this.hash;\n    if (this.urlChangeIndex > 0) {\n      this.urlChangeIndex--;\n    }\n    this.emitEvents(oldHash, oldUrl);\n  }\n\n  historyGo(relativePosition: number = 0): void {\n    const oldUrl = this.url;\n    const oldHash = this.hash;\n    const nextPageIndex = this.urlChangeIndex + relativePosition;\n    if (nextPageIndex >= 0 && nextPageIndex < this.urlChanges.length) {\n      this.urlChangeIndex = nextPageIndex;\n    }\n    this.emitEvents(oldHash, oldUrl);\n  }\n\n  getState(): unknown {\n    return this.state;\n  }\n\n  /**\n   * Browsers are inconsistent in when they fire events and perform the state updates\n   * The most easiest thing to do in our mock is synchronous and that happens to match\n   * Firefox and Chrome, at least somewhat closely\n   *\n   * https://github.com/WICG/navigation-api#watching-for-navigations\n   * https://docs.google.com/document/d/1Pdve-DJ1JCGilj9Yqf5HxRJyBKSel5owgOvUJqTauwU/edit#heading=h.3ye4v71wsz94\n   * popstate is always sent before hashchange:\n   * https://developer.mozilla.org/en-US/docs/Web/API/Window/popstate_event#when_popstate_is_sent\n   */\n  private emitEvents(oldHash: string, oldUrl: string) {\n    this.popStateSubject.next({\n      type: 'popstate',\n      state: this.getState(),\n      oldUrl,\n      newUrl: this.url,\n    } as LocationChangeEvent);\n    if (oldHash !== this.hash) {\n      this.hashUpdate.next({\n        type: 'hashchange',\n        state: null,\n        oldUrl,\n        newUrl: this.url,\n      } as LocationChangeEvent);\n    }\n  }\n}\n\n/**\n * Mock implementation of URL state.\n */\n@Injectable()\nexport class FakeNavigationPlatformLocation implements PlatformLocation {\n  private readonly _platformNavigation: FakeNavigation;\n\n  constructor() {\n    const platformNavigation = inject(PlatformNavigation);\n    if (!(platformNavigation instanceof FakeNavigation)) {\n      throw new Error(\n        'FakePlatformNavigation cannot be used without FakeNavigation. Use ' +\n          '`provideFakeNavigation` to have all these services provided together.',\n      );\n    }\n    this._platformNavigation = platformNavigation;\n  }\n\n  private config = inject(MOCK_PLATFORM_LOCATION_CONFIG, {optional: true});\n  getBaseHrefFromDOM(): string {\n    return this.config?.appBaseHref ?? '';\n  }\n\n  // window, addEventListener, removeEventListener might be undefined due to test mocks\n  onPopState(fn: LocationChangeListener): VoidFunction {\n    this._platformNavigation.window?.addEventListener?.('popstate', fn);\n    return () => this._platformNavigation.window?.removeEventListener?.('popstate', fn);\n  }\n\n  onHashChange(fn: LocationChangeListener): VoidFunction {\n    this._platformNavigation.window?.addEventListener?.('hashchange', fn as any);\n    return () => this._platformNavigation.window?.removeEventListener?.('hashchange', fn as any);\n  }\n\n  get href(): string {\n    return this._platformNavigation.currentEntry.url!;\n  }\n  get protocol(): string {\n    return new URL(this._platformNavigation.currentEntry.url!).protocol;\n  }\n  get hostname(): string {\n    return new URL(this._platformNavigation.currentEntry.url!).hostname;\n  }\n  get port(): string {\n    return new URL(this._platformNavigation.currentEntry.url!).port;\n  }\n  get pathname(): string {\n    return new URL(this._platformNavigation.currentEntry.url!).pathname;\n  }\n  get search(): string {\n    return new URL(this._platformNavigation.currentEntry.url!).search;\n  }\n  get hash(): string {\n    return new URL(this._platformNavigation.currentEntry.url!).hash;\n  }\n\n  pushState(state: any, title: string, url: string): void {\n    this._platformNavigation.pushState(state, title, url);\n  }\n\n  replaceState(state: any, title: string, url: string): void {\n    this._platformNavigation.replaceState(state, title, url);\n  }\n\n  forward(): void {\n    this._platformNavigation.forward();\n  }\n\n  back(): void {\n    this._platformNavigation.back();\n  }\n\n  historyGo(relativePosition: number = 0): void {\n    this._platformNavigation.go(relativePosition);\n  }\n\n  getState(): unknown {\n    return this._platformNavigation.currentEntry.getHistoryState();\n  }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {DOCUMENT, PlatformLocation, PlatformNavigation} from '../../../index';\nimport {inject, InjectionToken, Provider} from '@angular/core';\nimport {PRECOMMIT_HANDLER_SUPPORTED} from '../../../src/navigation/platform_navigation';\n\nimport {\n  FakeNavigationPlatformLocation,\n  MOCK_PLATFORM_LOCATION_CONFIG,\n} from '../mock_platform_location';\n\nimport {FakeNavigation} from './fake_navigation';\n\nconst FAKE_NAVIGATION = new InjectionToken<FakeNavigation>('fakeNavigation', {\n  // Providing a factory implies that the token is provided in root by default\n  factory: () => {\n    const config = inject(MOCK_PLATFORM_LOCATION_CONFIG, {optional: true});\n    const baseFallback = 'http://_empty_/';\n    const startUrl = new URL(config?.startUrl || baseFallback, baseFallback);\n    const fakeNavigation = new FakeNavigation(inject(DOCUMENT), startUrl.href as `http${string}`);\n    fakeNavigation.setSynchronousTraversalsForTesting(true);\n    return fakeNavigation;\n  },\n});\n\n/**\n * Return a provider for the `FakeNavigation` in place of the real Navigation API.\n */\nexport function provideFakePlatformNavigation(): Provider[] {\n  return [\n    {\n      provide: PlatformNavigation,\n      useFactory: () => inject(FAKE_NAVIGATION),\n    },\n    {provide: PlatformLocation, useClass: FakeNavigationPlatformLocation},\n    {provide: PRECOMMIT_HANDLER_SUPPORTED, useValue: true},\n  ];\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n  Location,\n  LocationStrategy,\n  PopStateEvent,\n  ɵnormalizeQueryParams as normalizeQueryParams,\n} from '@angular/common';\nimport {Injectable} from '@angular/core';\nimport {Subject, SubscriptionLike} from 'rxjs';\n\n/**\n * A spy for {@link Location} that allows tests to fire simulated location events.\n *\n * @publicApi\n */\n@Injectable()\nexport class SpyLocation implements Location {\n  urlChanges: string[] = [];\n  private _history: LocationState[] = [new LocationState('', '', null)];\n  private _historyIndex: number = 0;\n  /** @internal */\n  _subject = new Subject<PopStateEvent>();\n  /** @internal */\n  _basePath: string = '';\n  /** @internal */\n  _locationStrategy: LocationStrategy = null!;\n  /** @internal */\n  _urlChangeListeners: ((url: string, state: unknown) => void)[] = [];\n  /** @internal */\n  _urlChangeSubscription: SubscriptionLike | null = null;\n\n  /** @docs-private */\n  ngOnDestroy(): void {\n    this._urlChangeSubscription?.unsubscribe();\n    this._urlChangeListeners = [];\n  }\n\n  setInitialPath(url: string) {\n    this._history[this._historyIndex].path = url;\n  }\n\n  setBaseHref(url: string) {\n    this._basePath = url;\n  }\n\n  path(): string {\n    return this._history[this._historyIndex].path;\n  }\n\n  getState(): unknown {\n    return this._history[this._historyIndex].state;\n  }\n\n  isCurrentPathEqualTo(path: string, query: string = ''): boolean {\n    const givenPath = path.endsWith('/') ? path.substring(0, path.length - 1) : path;\n    const currPath = this.path().endsWith('/')\n      ? this.path().substring(0, this.path().length - 1)\n      : this.path();\n\n    return currPath == givenPath + (query.length > 0 ? '?' + query : '');\n  }\n\n  simulateUrlPop(pathname: string) {\n    this._subject.next({'url': pathname, 'pop': true, 'type': 'popstate'});\n  }\n\n  simulateHashChange(pathname: string) {\n    const path = this.prepareExternalUrl(pathname);\n    this.pushHistory(path, '', null);\n\n    this.urlChanges.push('hash: ' + pathname);\n    // the browser will automatically fire popstate event before each `hashchange` event, so we need\n    // to simulate it.\n    this._subject.next({'url': pathname, 'pop': true, 'type': 'popstate'});\n    this._subject.next({'url': pathname, 'pop': true, 'type': 'hashchange'});\n  }\n\n  prepareExternalUrl(url: string): string {\n    if (url.length > 0 && !url.startsWith('/')) {\n      url = '/' + url;\n    }\n    return this._basePath + url;\n  }\n\n  go(path: string, query: string = '', state: any = null) {\n    path = this.prepareExternalUrl(path);\n\n    this.pushHistory(path, query, state);\n\n    const locationState = this._history[this._historyIndex - 1];\n    if (locationState.path == path && locationState.query == query) {\n      return;\n    }\n\n    const url = path + (query.length > 0 ? '?' + query : '');\n    this.urlChanges.push(url);\n    this._notifyUrlChangeListeners(path + normalizeQueryParams(query), state);\n  }\n\n  replaceState(path: string, query: string = '', state: any = null) {\n    path = this.prepareExternalUrl(path);\n\n    const history = this._history[this._historyIndex];\n\n    history.state = state;\n\n    if (history.path == path && history.query == query) {\n      return;\n    }\n\n    history.path = path;\n    history.query = query;\n\n    const url = path + (query.length > 0 ? '?' + query : '');\n    this.urlChanges.push('replace: ' + url);\n    this._notifyUrlChangeListeners(path + normalizeQueryParams(query), state);\n  }\n\n  forward() {\n    if (this._historyIndex < this._history.length - 1) {\n      this._historyIndex++;\n      this._subject.next({\n        'url': this.path(),\n        'state': this.getState(),\n        'pop': true,\n        'type': 'popstate',\n      });\n    }\n  }\n\n  back() {\n    if (this._historyIndex > 0) {\n      this._historyIndex--;\n      this._subject.next({\n        'url': this.path(),\n        'state': this.getState(),\n        'pop': true,\n        'type': 'popstate',\n      });\n    }\n  }\n\n  historyGo(relativePosition: number = 0): void {\n    const nextPageIndex = this._historyIndex + relativePosition;\n    if (nextPageIndex >= 0 && nextPageIndex < this._history.length) {\n      this._historyIndex = nextPageIndex;\n      this._subject.next({\n        'url': this.path(),\n        'state': this.getState(),\n        'pop': true,\n        'type': 'popstate',\n      });\n    }\n  }\n\n  onUrlChange(fn: (url: string, state: unknown) => void): VoidFunction {\n    this._urlChangeListeners.push(fn);\n\n    this._urlChangeSubscription ??= this.subscribe((v) => {\n      this._notifyUrlChangeListeners(v.url, v.state);\n    });\n\n    return () => {\n      const fnIndex = this._urlChangeListeners.indexOf(fn);\n      this._urlChangeListeners.splice(fnIndex, 1);\n\n      if (this._urlChangeListeners.length === 0) {\n        this._urlChangeSubscription?.unsubscribe();\n        this._urlChangeSubscription = null;\n      }\n    };\n  }\n\n  /** @internal */\n  _notifyUrlChangeListeners(url: string = '', state: unknown) {\n    this._urlChangeListeners.forEach((fn) => fn(url, state));\n  }\n\n  subscribe(\n    onNext: (value: any) => void,\n    onThrow?: ((error: any) => void) | null,\n    onReturn?: (() => void) | null,\n  ): SubscriptionLike {\n    return this._subject.subscribe({\n      next: onNext,\n      error: onThrow ?? undefined,\n      complete: onReturn ?? undefined,\n    });\n  }\n\n  normalize(url: string): string {\n    return null!;\n  }\n\n  private pushHistory(path: string, query: string, state: any) {\n    if (this._historyIndex > 0) {\n      this._history.splice(this._historyIndex + 1);\n    }\n    this._history.push(new LocationState(path, query, state));\n    this._historyIndex = this._history.length - 1;\n  }\n}\n\nclass LocationState {\n  constructor(\n    public path: string,\n    public query: string,\n    public state: any,\n  ) {}\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {LocationStrategy} from '@angular/common';\nimport {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\n/**\n * A mock implementation of {@link LocationStrategy} that allows tests to fire simulated\n * location events.\n *\n * @publicApi\n */\n@Injectable()\nexport class MockLocationStrategy extends LocationStrategy {\n  internalBaseHref: string = '/';\n  internalPath: string = '/';\n  internalTitle: string = '';\n  urlChanges: string[] = [];\n  /** @internal */\n  _subject = new Subject<_MockPopStateEvent>();\n  private stateChanges: any[] = [];\n  constructor() {\n    super();\n  }\n\n  simulatePopState(url: string): void {\n    this.internalPath = url;\n    this._subject.next(new _MockPopStateEvent(this.path()));\n  }\n\n  override path(includeHash: boolean = false): string {\n    return this.internalPath;\n  }\n\n  override prepareExternalUrl(internal: string): string {\n    if (internal.startsWith('/') && this.internalBaseHref.endsWith('/')) {\n      return this.internalBaseHref + internal.substring(1);\n    }\n    return this.internalBaseHref + internal;\n  }\n\n  override pushState(ctx: any, title: string, path: string, query: string): void {\n    // Add state change to changes array\n    this.stateChanges.push(ctx);\n\n    this.internalTitle = title;\n\n    const url = path + (query.length > 0 ? '?' + query : '');\n    this.internalPath = url;\n\n    const externalUrl = this.prepareExternalUrl(url);\n    this.urlChanges.push(externalUrl);\n  }\n\n  override replaceState(ctx: any, title: string, path: string, query: string): void {\n    // Reset the last index of stateChanges to the ctx (state) object\n    this.stateChanges[(this.stateChanges.length || 1) - 1] = ctx;\n\n    this.internalTitle = title;\n\n    const url = path + (query.length > 0 ? '?' + query : '');\n    this.internalPath = url;\n\n    const externalUrl = this.prepareExternalUrl(url);\n    this.urlChanges.push('replace: ' + externalUrl);\n  }\n\n  override onPopState(fn: (value: any) => void): void {\n    this._subject.subscribe({next: fn});\n  }\n\n  override getBaseHref(): string {\n    return this.internalBaseHref;\n  }\n\n  override back(): void {\n    if (this.urlChanges.length > 0) {\n      this.urlChanges.pop();\n      this.stateChanges.pop();\n      const nextUrl = this.urlChanges.length > 0 ? this.urlChanges[this.urlChanges.length - 1] : '';\n      this.simulatePopState(nextUrl);\n    }\n  }\n\n  override forward(): void {\n    throw 'not implemented';\n  }\n\n  override getState(): unknown {\n    return this.stateChanges[(this.stateChanges.length || 1) - 1];\n  }\n}\n\nclass _MockPopStateEvent {\n  pop: boolean = true;\n  type: string = 'popstate';\n  constructor(public newUrl: string) {}\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {Location, LocationStrategy} from '../../index';\nimport {Provider} from '@angular/core';\n\nimport {SpyLocation} from './location_mock';\nimport {MockLocationStrategy} from './mock_location_strategy';\n\n/**\n * Returns mock providers for the `Location` and `LocationStrategy` classes.\n * The mocks are helpful in tests to fire simulated location events.\n *\n * @publicApi\n */\nexport function provideLocationMocks(): Provider[] {\n  return [\n    {provide: Location, useClass: SpyLocation},\n    {provide: LocationStrategy, useClass: MockLocationStrategy},\n  ];\n}\n"],"names":["urlParse","parseUrl","urlStr","baseHref","verifyProtocol","serverBase","test","parsedUrl","URL","e","result","exec","Error","hostSplit","split","protocol","hostname","port","pathname","search","hash","indexOf","substring","length","MOCK_PLATFORM_LOCATION_CONFIG","InjectionToken","MockPlatformLocation","hashUpdate","Subject","popStateSubject","urlChangeIndex","urlChanges","state","constructor","config","appBaseHref","parsedChanges","parseChanges","startUrl","getBaseHrefFromDOM","onPopState","fn","subscription","subscribe","unsubscribe","onHashChange","href","url","JSON","parse","stringify","replaceState","title","newUrl","parsedState","pushState","splice","push","forward","oldUrl","oldHash","emitEvents","back","historyGo","relativePosition","nextPageIndex","getState","next","type","ɵfac","i0","ɵɵngDeclareFactory","minVersion","version","ngImport","optional","target","ɵɵFactoryTarget","Injectable","decorators","Inject","Optional","FakeNavigationPlatformLocation","_platformNavigation","platformNavigation","inject","PlatformNavigation","FakeNavigation","window","addEventListener","removeEventListener","currentEntry","go","getHistoryState","deps","FAKE_NAVIGATION","factory","baseFallback","fakeNavigation","DOCUMENT","setSynchronousTraversalsForTesting","provideFakePlatformNavigation","provide","useFactory","PlatformLocation","useClass","PRECOMMIT_HANDLER_SUPPORTED","useValue","SpyLocation","_history","LocationState","_historyIndex","_subject","_basePath","_locationStrategy","_urlChangeListeners","_urlChangeSubscription","ngOnDestroy","setInitialPath","path","setBaseHref","isCurrentPathEqualTo","query","givenPath","endsWith","currPath","simulateUrlPop","simulateHashChange","prepareExternalUrl","pushHistory","startsWith","locationState","_notifyUrlChangeListeners","normalizeQueryParams","history","onUrlChange","v","fnIndex","forEach","onNext","onThrow","onReturn","error","undefined","complete","normalize","MockLocationStrategy","LocationStrategy","internalBaseHref","internalPath","internalTitle","stateChanges","simulatePopState","_MockPopStateEvent","includeHash","internal","ctx","externalUrl","getBaseHref","pop","nextUrl","provideLocationMocks","Location"],"mappings":";;;;;;;;;;;;;;;;AAsCA,MAAMA,QAAQ,GAAG,+DAA+D;AAEhF,SAASC,QAAQA,CAACC,MAAc,EAAEC,QAAgB,EAAA;EAChD,MAAMC,cAAc,GAAG,wBAAwB;AAC/C,EAAA,IAAIC,UAA8B;AAIlC,EAAA,IAAI,CAACD,cAAc,CAACE,IAAI,CAACJ,MAAM,CAAC,EAAE;AAChCG,IAAAA,UAAU,GAAG,mBAAmB;AAClC,EAAA;AACA,EAAA,IAAIE,SAOH;EACD,IAAI;AACFA,IAAAA,SAAS,GAAG,IAAIC,GAAG,CAACN,MAAM,EAAEG,UAAU,CAAC;EACzC,CAAA,CAAE,OAAOI,CAAC,EAAE;IACV,MAAMC,MAAM,GAAGV,QAAQ,CAACW,IAAI,CAACN,UAAU,IAAI,EAAE,GAAGH,MAAM,CAAC;IACvD,IAAI,CAACQ,MAAM,EAAE;MACX,MAAM,IAAIE,KAAK,CAAC,CAAA,aAAA,EAAgBV,MAAM,CAAA,YAAA,EAAeC,QAAQ,EAAE,CAAC;AAClE,IAAA;IACA,MAAMU,SAAS,GAAGH,MAAM,CAAC,CAAC,CAAC,CAACI,KAAK,CAAC,GAAG,CAAC;AACtCP,IAAAA,SAAS,GAAG;AACVQ,MAAAA,QAAQ,EAAEL,MAAM,CAAC,CAAC,CAAC;AACnBM,MAAAA,QAAQ,EAAEH,SAAS,CAAC,CAAC,CAAC;AACtBI,MAAAA,IAAI,EAAEJ,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;AACxBK,MAAAA,QAAQ,EAAER,MAAM,CAAC,CAAC,CAAC;AACnBS,MAAAA,MAAM,EAAET,MAAM,CAAC,CAAC,CAAC;MACjBU,IAAI,EAAEV,MAAM,CAAC,CAAC;KACf;AACH,EAAA;AACA,EAAA,IAAIH,SAAS,CAACW,QAAQ,IAAIX,SAAS,CAACW,QAAQ,CAACG,OAAO,CAAClB,QAAQ,CAAC,KAAK,CAAC,EAAE;AACpEI,IAAAA,SAAS,CAACW,QAAQ,GAAGX,SAAS,CAACW,QAAQ,CAACI,SAAS,CAACnB,QAAQ,CAACoB,MAAM,CAAC;AACpE,EAAA;EACA,OAAO;IACLP,QAAQ,EAAG,CAACX,UAAU,IAAIE,SAAS,CAACS,QAAQ,IAAK,EAAE;IACnDD,QAAQ,EAAG,CAACV,UAAU,IAAIE,SAAS,CAACQ,QAAQ,IAAK,EAAE;IACnDE,IAAI,EAAG,CAACZ,UAAU,IAAIE,SAAS,CAACU,IAAI,IAAK,EAAE;AAC3CC,IAAAA,QAAQ,EAAEX,SAAS,CAACW,QAAQ,IAAI,GAAG;AACnCC,IAAAA,MAAM,EAAEZ,SAAS,CAACY,MAAM,IAAI,EAAE;AAC9BC,IAAAA,IAAI,EAAEb,SAAS,CAACa,IAAI,IAAI;GACzB;AACH;MAiBaI,6BAA6B,GAAG,IAAIC,cAAc,CAC7D,+BAA+B;MASpBC,oBAAoB,CAAA;AACvBvB,EAAAA,QAAQ,GAAW,EAAE;AACrBwB,EAAAA,UAAU,GAAG,IAAIC,OAAO,EAAuB;AAC/CC,EAAAA,eAAe,GAAG,IAAID,OAAO,EAAuB;AACpDE,EAAAA,cAAc,GAAW,CAAC;AAC1BC,EAAAA,UAAU,GAQZ,CAAC;AAACf,IAAAA,QAAQ,EAAE,EAAE;AAAED,IAAAA,QAAQ,EAAE,EAAE;AAAEE,IAAAA,IAAI,EAAE,EAAE;AAAEC,IAAAA,QAAQ,EAAE,GAAG;AAAEC,IAAAA,MAAM,EAAE,EAAE;AAAEC,IAAAA,IAAI,EAAE,EAAE;AAAEY,IAAAA,KAAK,EAAE;AAAI,GAAC,CAAC;EAEhGC,WAAAA,CACqDC,MAAmC,EAAA;AAEtF,IAAA,IAAIA,MAAM,EAAE;AACV,MAAA,IAAI,CAAC/B,QAAQ,GAAG+B,MAAM,CAACC,WAAW,IAAI,EAAE;AAExC,MAAA,MAAMC,aAAa,GAAG,IAAI,CAACC,YAAY,CACrC,IAAI,EACJH,MAAM,CAACI,QAAQ,IAAI,iBAAiB,EACpC,IAAI,CAACnC,QAAQ,CACd;AACD,MAAA,IAAI,CAAC4B,UAAU,CAAC,CAAC,CAAC,GAAG;QAAC,GAAGK;OAAc;AACzC,IAAA;AACF,EAAA;EAEA,IAAIpB,QAAQA,GAAA;IACV,OAAO,IAAI,CAACe,UAAU,CAAC,IAAI,CAACD,cAAc,CAAC,CAACd,QAAQ;AACtD,EAAA;EACA,IAAID,QAAQA,GAAA;IACV,OAAO,IAAI,CAACgB,UAAU,CAAC,IAAI,CAACD,cAAc,CAAC,CAACf,QAAQ;AACtD,EAAA;EACA,IAAIE,IAAIA,GAAA;IACN,OAAO,IAAI,CAACc,UAAU,CAAC,IAAI,CAACD,cAAc,CAAC,CAACb,IAAI;AAClD,EAAA;EACA,IAAIC,QAAQA,GAAA;IACV,OAAO,IAAI,CAACa,UAAU,CAAC,IAAI,CAACD,cAAc,CAAC,CAACZ,QAAQ;AACtD,EAAA;EACA,IAAIC,MAAMA,GAAA;IACR,OAAO,IAAI,CAACY,UAAU,CAAC,IAAI,CAACD,cAAc,CAAC,CAACX,MAAM;AACpD,EAAA;EACA,IAAIC,IAAIA,GAAA;IACN,OAAO,IAAI,CAACW,UAAU,CAAC,IAAI,CAACD,cAAc,CAAC,CAACV,IAAI;AAClD,EAAA;EACA,IAAIY,KAAKA,GAAA;IACP,OAAO,IAAI,CAACD,UAAU,CAAC,IAAI,CAACD,cAAc,CAAC,CAACE,KAAK;AACnD,EAAA;AAEAO,EAAAA,kBAAkBA,GAAA;IAChB,OAAO,IAAI,CAACpC,QAAQ;AACtB,EAAA;EAEAqC,UAAUA,CAACC,EAA0B,EAAA;IACnC,MAAMC,YAAY,GAAG,IAAI,CAACb,eAAe,CAACc,SAAS,CAACF,EAAE,CAAC;AACvD,IAAA,OAAO,MAAMC,YAAY,CAACE,WAAW,EAAE;AACzC,EAAA;EAEAC,YAAYA,CAACJ,EAA0B,EAAA;IACrC,MAAMC,YAAY,GAAG,IAAI,CAACf,UAAU,CAACgB,SAAS,CAACF,EAAE,CAAC;AAClD,IAAA,OAAO,MAAMC,YAAY,CAACE,WAAW,EAAE;AACzC,EAAA;EAEA,IAAIE,IAAIA,GAAA;IACN,IAAIC,GAAG,GAAG,CAAA,EAAG,IAAI,CAAChC,QAAQ,CAAA,EAAA,EAAK,IAAI,CAACC,QAAQ,CAAA,EAAG,IAAI,CAACC,IAAI,GAAG,GAAG,GAAG,IAAI,CAACA,IAAI,GAAG,EAAE,CAAA,CAAE;IACjF8B,GAAG,IAAI,GAAG,IAAI,CAAC7B,QAAQ,KAAK,GAAG,GAAG,EAAE,GAAG,IAAI,CAACA,QAAQ,GAAG,IAAI,CAACC,MAAM,CAAA,EAAG,IAAI,CAACC,IAAI,CAAA,CAAE;AAChF,IAAA,OAAO2B,GAAG;AACZ,EAAA;EAEA,IAAIA,GAAGA,GAAA;AACL,IAAA,OAAO,CAAA,EAAG,IAAI,CAAC7B,QAAQ,CAAA,EAAG,IAAI,CAACC,MAAM,CAAA,EAAG,IAAI,CAACC,IAAI,CAAA,CAAE;AACrD,EAAA;EAEQiB,YAAYA,CAACL,KAAc,EAAEe,GAAW,EAAE5C,WAAmB,EAAE,EAAA;IAErE6B,KAAK,GAAGgB,IAAI,CAACC,KAAK,CAACD,IAAI,CAACE,SAAS,CAAClB,KAAK,CAAC,CAAC;IACzC,OAAO;AAAC,MAAA,GAAG/B,QAAQ,CAAC8C,GAAG,EAAE5C,QAAQ,CAAC;AAAE6B,MAAAA;KAAM;AAC5C,EAAA;AAEAmB,EAAAA,YAAYA,CAACnB,KAAU,EAAEoB,KAAa,EAAEC,MAAc,EAAA;IACpD,MAAM;MAACnC,QAAQ;MAAEC,MAAM;AAAEa,MAAAA,KAAK,EAAEsB,WAAW;AAAElC,MAAAA;KAAK,GAAG,IAAI,CAACiB,YAAY,CAACL,KAAK,EAAEqB,MAAM,CAAC;AAErF,IAAA,IAAI,CAACtB,UAAU,CAAC,IAAI,CAACD,cAAc,CAAC,GAAG;AACrC,MAAA,GAAG,IAAI,CAACC,UAAU,CAAC,IAAI,CAACD,cAAc,CAAC;MACvCZ,QAAQ;MACRC,MAAM;MACNC,IAAI;AACJY,MAAAA,KAAK,EAAEsB;KACR;AACH,EAAA;AAEAC,EAAAA,SAASA,CAACvB,KAAU,EAAEoB,KAAa,EAAEC,MAAc,EAAA;IACjD,MAAM;MAACnC,QAAQ;MAAEC,MAAM;AAAEa,MAAAA,KAAK,EAAEsB,WAAW;AAAElC,MAAAA;KAAK,GAAG,IAAI,CAACiB,YAAY,CAACL,KAAK,EAAEqB,MAAM,CAAC;AACrF,IAAA,IAAI,IAAI,CAACvB,cAAc,GAAG,CAAC,EAAE;MAC3B,IAAI,CAACC,UAAU,CAACyB,MAAM,CAAC,IAAI,CAAC1B,cAAc,GAAG,CAAC,CAAC;AACjD,IAAA;AACA,IAAA,IAAI,CAACC,UAAU,CAAC0B,IAAI,CAAC;AACnB,MAAA,GAAG,IAAI,CAAC1B,UAAU,CAAC,IAAI,CAACD,cAAc,CAAC;MACvCZ,QAAQ;MACRC,MAAM;MACNC,IAAI;AACJY,MAAAA,KAAK,EAAEsB;AACR,KAAA,CAAC;IACF,IAAI,CAACxB,cAAc,GAAG,IAAI,CAACC,UAAU,CAACR,MAAM,GAAG,CAAC;AAClD,EAAA;AAEAmC,EAAAA,OAAOA,GAAA;AACL,IAAA,MAAMC,MAAM,GAAG,IAAI,CAACZ,GAAG;AACvB,IAAA,MAAMa,OAAO,GAAG,IAAI,CAACxC,IAAI;IACzB,IAAI,IAAI,CAACU,cAAc,GAAG,IAAI,CAACC,UAAU,CAACR,MAAM,EAAE;MAChD,IAAI,CAACO,cAAc,EAAE;AACvB,IAAA;AACA,IAAA,IAAI,CAAC+B,UAAU,CAACD,OAAO,EAAED,MAAM,CAAC;AAClC,EAAA;AAEAG,EAAAA,IAAIA,GAAA;AACF,IAAA,MAAMH,MAAM,GAAG,IAAI,CAACZ,GAAG;AACvB,IAAA,MAAMa,OAAO,GAAG,IAAI,CAACxC,IAAI;AACzB,IAAA,IAAI,IAAI,CAACU,cAAc,GAAG,CAAC,EAAE;MAC3B,IAAI,CAACA,cAAc,EAAE;AACvB,IAAA;AACA,IAAA,IAAI,CAAC+B,UAAU,CAACD,OAAO,EAAED,MAAM,CAAC;AAClC,EAAA;AAEAI,EAAAA,SAASA,CAACC,mBAA2B,CAAC,EAAA;AACpC,IAAA,MAAML,MAAM,GAAG,IAAI,CAACZ,GAAG;AACvB,IAAA,MAAMa,OAAO,GAAG,IAAI,CAACxC,IAAI;AACzB,IAAA,MAAM6C,aAAa,GAAG,IAAI,CAACnC,cAAc,GAAGkC,gBAAgB;IAC5D,IAAIC,aAAa,IAAI,CAAC,IAAIA,aAAa,GAAG,IAAI,CAAClC,UAAU,CAACR,MAAM,EAAE;MAChE,IAAI,CAACO,cAAc,GAAGmC,aAAa;AACrC,IAAA;AACA,IAAA,IAAI,CAACJ,UAAU,CAACD,OAAO,EAAED,MAAM,CAAC;AAClC,EAAA;AAEAO,EAAAA,QAAQA,GAAA;IACN,OAAO,IAAI,CAAClC,KAAK;AACnB,EAAA;AAYQ6B,EAAAA,UAAUA,CAACD,OAAe,EAAED,MAAc,EAAA;AAChD,IAAA,IAAI,CAAC9B,eAAe,CAACsC,IAAI,CAAC;AACxBC,MAAAA,IAAI,EAAE,UAAU;AAChBpC,MAAAA,KAAK,EAAE,IAAI,CAACkC,QAAQ,EAAE;MACtBP,MAAM;MACNN,MAAM,EAAE,IAAI,CAACN;AACS,KAAA,CAAC;AACzB,IAAA,IAAIa,OAAO,KAAK,IAAI,CAACxC,IAAI,EAAE;AACzB,MAAA,IAAI,CAACO,UAAU,CAACwC,IAAI,CAAC;AACnBC,QAAAA,IAAI,EAAE,YAAY;AAClBpC,QAAAA,KAAK,EAAE,IAAI;QACX2B,MAAM;QACNN,MAAM,EAAE,IAAI,CAACN;AACS,OAAA,CAAC;AAC3B,IAAA;AACF,EAAA;AAtKW,EAAA,OAAAsB,IAAA,GAAAC,EAAA,CAAAC,kBAAA,CAAA;AAAAC,IAAAA,UAAA,EAAA,QAAA;AAAAC,IAAAA,OAAA,EAAA,mBAAA;AAAAC,IAAAA,QAAA,EAAAJ,EAAA;AAAAF,IAAAA,IAAA,EAAA1C,oBAAoB;;aAgBrBF,6BAA6B;AAAAmD,MAAAA,QAAA,EAAA;AAAA,KAAA,CAAA;AAAAC,IAAAA,MAAA,EAAAN,EAAA,CAAAO,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;;UAhB5BpD;AAAoB,GAAA,CAAA;;;;;;QAApBA,oBAAoB;AAAAqD,EAAAA,UAAA,EAAA,CAAA;UADhCD;;;;;YAiBIE,MAAM;aAACxD,6BAA6B;;YAAGyD;;;;MA6J/BC,8BAA8B,CAAA;EACxBC,mBAAmB;AAEpClD,EAAAA,WAAAA,GAAA;AACE,IAAA,MAAMmD,kBAAkB,GAAGC,MAAM,CAACC,kBAAkB,CAAC;AACrD,IAAA,IAAI,EAAEF,kBAAkB,YAAYG,eAAc,CAAC,EAAE;AACnD,MAAA,MAAM,IAAI3E,KAAK,CACb,oEAAoE,GAClE,uEAAuE,CAC1E;AACH,IAAA;IACA,IAAI,CAACuE,mBAAmB,GAAGC,kBAAkB;AAC/C,EAAA;AAEQlD,EAAAA,MAAM,GAAGmD,MAAM,CAAC7D,6BAA6B,EAAE;AAACmD,IAAAA,QAAQ,EAAE;AAAI,GAAC,CAAC;AACxEpC,EAAAA,kBAAkBA,GAAA;AAChB,IAAA,OAAO,IAAI,CAACL,MAAM,EAAEC,WAAW,IAAI,EAAE;AACvC,EAAA;EAGAK,UAAUA,CAACC,EAA0B,EAAA;IACnC,IAAI,CAAC0C,mBAAmB,CAACK,MAAM,EAAEC,gBAAgB,GAAG,UAAU,EAAEhD,EAAE,CAAC;AACnE,IAAA,OAAO,MAAM,IAAI,CAAC0C,mBAAmB,CAACK,MAAM,EAAEE,mBAAmB,GAAG,UAAU,EAAEjD,EAAE,CAAC;AACrF,EAAA;EAEAI,YAAYA,CAACJ,EAA0B,EAAA;IACrC,IAAI,CAAC0C,mBAAmB,CAACK,MAAM,EAAEC,gBAAgB,GAAG,YAAY,EAAEhD,EAAS,CAAC;AAC5E,IAAA,OAAO,MAAM,IAAI,CAAC0C,mBAAmB,CAACK,MAAM,EAAEE,mBAAmB,GAAG,YAAY,EAAEjD,EAAS,CAAC;AAC9F,EAAA;EAEA,IAAIK,IAAIA,GAAA;AACN,IAAA,OAAO,IAAI,CAACqC,mBAAmB,CAACQ,YAAY,CAAC5C,GAAI;AACnD,EAAA;EACA,IAAIhC,QAAQA,GAAA;AACV,IAAA,OAAO,IAAIP,GAAG,CAAC,IAAI,CAAC2E,mBAAmB,CAACQ,YAAY,CAAC5C,GAAI,CAAC,CAAChC,QAAQ;AACrE,EAAA;EACA,IAAIC,QAAQA,GAAA;AACV,IAAA,OAAO,IAAIR,GAAG,CAAC,IAAI,CAAC2E,mBAAmB,CAACQ,YAAY,CAAC5C,GAAI,CAAC,CAAC/B,QAAQ;AACrE,EAAA;EACA,IAAIC,IAAIA,GAAA;AACN,IAAA,OAAO,IAAIT,GAAG,CAAC,IAAI,CAAC2E,mBAAmB,CAACQ,YAAY,CAAC5C,GAAI,CAAC,CAAC9B,IAAI;AACjE,EAAA;EACA,IAAIC,QAAQA,GAAA;AACV,IAAA,OAAO,IAAIV,GAAG,CAAC,IAAI,CAAC2E,mBAAmB,CAACQ,YAAY,CAAC5C,GAAI,CAAC,CAAC7B,QAAQ;AACrE,EAAA;EACA,IAAIC,MAAMA,GAAA;AACR,IAAA,OAAO,IAAIX,GAAG,CAAC,IAAI,CAAC2E,mBAAmB,CAACQ,YAAY,CAAC5C,GAAI,CAAC,CAAC5B,MAAM;AACnE,EAAA;EACA,IAAIC,IAAIA,GAAA;AACN,IAAA,OAAO,IAAIZ,GAAG,CAAC,IAAI,CAAC2E,mBAAmB,CAACQ,YAAY,CAAC5C,GAAI,CAAC,CAAC3B,IAAI;AACjE,EAAA;AAEAmC,EAAAA,SAASA,CAACvB,KAAU,EAAEoB,KAAa,EAAEL,GAAW,EAAA;IAC9C,IAAI,CAACoC,mBAAmB,CAAC5B,SAAS,CAACvB,KAAK,EAAEoB,KAAK,EAAEL,GAAG,CAAC;AACvD,EAAA;AAEAI,EAAAA,YAAYA,CAACnB,KAAU,EAAEoB,KAAa,EAAEL,GAAW,EAAA;IACjD,IAAI,CAACoC,mBAAmB,CAAChC,YAAY,CAACnB,KAAK,EAAEoB,KAAK,EAAEL,GAAG,CAAC;AAC1D,EAAA;AAEAW,EAAAA,OAAOA,GAAA;AACL,IAAA,IAAI,CAACyB,mBAAmB,CAACzB,OAAO,EAAE;AACpC,EAAA;AAEAI,EAAAA,IAAIA,GAAA;AACF,IAAA,IAAI,CAACqB,mBAAmB,CAACrB,IAAI,EAAE;AACjC,EAAA;AAEAC,EAAAA,SAASA,CAACC,mBAA2B,CAAC,EAAA;AACpC,IAAA,IAAI,CAACmB,mBAAmB,CAACS,EAAE,CAAC5B,gBAAgB,CAAC;AAC/C,EAAA;AAEAE,EAAAA,QAAQA,GAAA;IACN,OAAO,IAAI,CAACiB,mBAAmB,CAACQ,YAAY,CAACE,eAAe,EAAE;AAChE,EAAA;;;;;UA1EWX,8BAA8B;AAAAY,IAAAA,IAAA,EAAA,EAAA;AAAAlB,IAAAA,MAAA,EAAAN,EAAA,CAAAO,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;;UAA9BI;AAA8B,GAAA,CAAA;;;;;;QAA9BA,8BAA8B;AAAAH,EAAAA,UAAA,EAAA,CAAA;UAD1CD;;;;;ACzQD,MAAMiB,eAAe,GAAG,IAAItE,cAAc,CAAiB,gBAAgB,EAAE;EAE3EuE,OAAO,EAAEA,MAAK;AACZ,IAAA,MAAM9D,MAAM,GAAGmD,MAAM,CAAC7D,6BAA6B,EAAE;AAACmD,MAAAA,QAAQ,EAAE;AAAI,KAAC,CAAC;IACtE,MAAMsB,YAAY,GAAG,iBAAiB;AACtC,IAAA,MAAM3D,QAAQ,GAAG,IAAI9B,GAAG,CAAC0B,MAAM,EAAEI,QAAQ,IAAI2D,YAAY,EAAEA,YAAY,CAAC;AACxE,IAAA,MAAMC,cAAc,GAAG,IAAIX,eAAc,CAACF,MAAM,CAACc,QAAQ,CAAC,EAAE7D,QAAQ,CAACQ,IAAuB,CAAC;AAC7FoD,IAAAA,cAAc,CAACE,kCAAkC,CAAC,IAAI,CAAC;AACvD,IAAA,OAAOF,cAAc;AACvB,EAAA;AACD,CAAA,CAAC;SAKcG,6BAA6BA,GAAA;AAC3C,EAAA,OAAO,CACL;AACEC,IAAAA,OAAO,EAAEhB,kBAAkB;AAC3BiB,IAAAA,UAAU,EAAEA,MAAMlB,MAAM,CAACU,eAAe;AACzC,GAAA,EACD;AAACO,IAAAA,OAAO,EAAEE,gBAAgB;AAAEC,IAAAA,QAAQ,EAAEvB;AAA8B,GAAC,EACrE;AAACoB,IAAAA,OAAO,EAAEI,2BAA2B;AAAEC,IAAAA,QAAQ,EAAE;AAAI,GAAC,CACvD;AACH;;MCpBaC,WAAW,CAAA;AACtB7E,EAAAA,UAAU,GAAa,EAAE;EACjB8E,QAAQ,GAAoB,CAAC,IAAIC,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC7DC,EAAAA,aAAa,GAAW,CAAC;AAEjCC,EAAAA,QAAQ,GAAG,IAAIpF,OAAO,EAAiB;AAEvCqF,EAAAA,SAAS,GAAW,EAAE;AAEtBC,EAAAA,iBAAiB,GAAqB,IAAK;AAE3CC,EAAAA,mBAAmB,GAA8C,EAAE;AAEnEC,EAAAA,sBAAsB,GAA4B,IAAI;AAGtDC,EAAAA,WAAWA,GAAA;AACT,IAAA,IAAI,CAACD,sBAAsB,EAAExE,WAAW,EAAE;IAC1C,IAAI,CAACuE,mBAAmB,GAAG,EAAE;AAC/B,EAAA;EAEAG,cAAcA,CAACvE,GAAW,EAAA;IACxB,IAAI,CAAC8D,QAAQ,CAAC,IAAI,CAACE,aAAa,CAAC,CAACQ,IAAI,GAAGxE,GAAG;AAC9C,EAAA;EAEAyE,WAAWA,CAACzE,GAAW,EAAA;IACrB,IAAI,CAACkE,SAAS,GAAGlE,GAAG;AACtB,EAAA;AAEAwE,EAAAA,IAAIA,GAAA;IACF,OAAO,IAAI,CAACV,QAAQ,CAAC,IAAI,CAACE,aAAa,CAAC,CAACQ,IAAI;AAC/C,EAAA;AAEArD,EAAAA,QAAQA,GAAA;IACN,OAAO,IAAI,CAAC2C,QAAQ,CAAC,IAAI,CAACE,aAAa,CAAC,CAAC/E,KAAK;AAChD,EAAA;AAEAyF,EAAAA,oBAAoBA,CAACF,IAAY,EAAEG,KAAA,GAAgB,EAAE,EAAA;IACnD,MAAMC,SAAS,GAAGJ,IAAI,CAACK,QAAQ,CAAC,GAAG,CAAC,GAAGL,IAAI,CAACjG,SAAS,CAAC,CAAC,EAAEiG,IAAI,CAAChG,MAAM,GAAG,CAAC,CAAC,GAAGgG,IAAI;AAChF,IAAA,MAAMM,QAAQ,GAAG,IAAI,CAACN,IAAI,EAAE,CAACK,QAAQ,CAAC,GAAG,CAAA,GACrC,IAAI,CAACL,IAAI,EAAE,CAACjG,SAAS,CAAC,CAAC,EAAE,IAAI,CAACiG,IAAI,EAAE,CAAChG,MAAM,GAAG,CAAC,CAAA,GAC/C,IAAI,CAACgG,IAAI,EAAE;AAEf,IAAA,OAAOM,QAAQ,IAAIF,SAAS,IAAID,KAAK,CAACnG,MAAM,GAAG,CAAC,GAAG,GAAG,GAAGmG,KAAK,GAAG,EAAE,CAAC;AACtE,EAAA;EAEAI,cAAcA,CAAC5G,QAAgB,EAAA;AAC7B,IAAA,IAAI,CAAC8F,QAAQ,CAAC7C,IAAI,CAAC;AAAC,MAAA,KAAK,EAAEjD,QAAQ;AAAE,MAAA,KAAK,EAAE,IAAI;AAAE,MAAA,MAAM,EAAE;AAAU,KAAC,CAAC;AACxE,EAAA;EAEA6G,kBAAkBA,CAAC7G,QAAgB,EAAA;AACjC,IAAA,MAAMqG,IAAI,GAAG,IAAI,CAACS,kBAAkB,CAAC9G,QAAQ,CAAC;IAC9C,IAAI,CAAC+G,WAAW,CAACV,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC;IAEhC,IAAI,CAACxF,UAAU,CAAC0B,IAAI,CAAC,QAAQ,GAAGvC,QAAQ,CAAC;AAGzC,IAAA,IAAI,CAAC8F,QAAQ,CAAC7C,IAAI,CAAC;AAAC,MAAA,KAAK,EAAEjD,QAAQ;AAAE,MAAA,KAAK,EAAE,IAAI;AAAE,MAAA,MAAM,EAAE;AAAU,KAAC,CAAC;AACtE,IAAA,IAAI,CAAC8F,QAAQ,CAAC7C,IAAI,CAAC;AAAC,MAAA,KAAK,EAAEjD,QAAQ;AAAE,MAAA,KAAK,EAAE,IAAI;AAAE,MAAA,MAAM,EAAE;AAAY,KAAC,CAAC;AAC1E,EAAA;EAEA8G,kBAAkBA,CAACjF,GAAW,EAAA;AAC5B,IAAA,IAAIA,GAAG,CAACxB,MAAM,GAAG,CAAC,IAAI,CAACwB,GAAG,CAACmF,UAAU,CAAC,GAAG,CAAC,EAAE;MAC1CnF,GAAG,GAAG,GAAG,GAAGA,GAAG;AACjB,IAAA;AACA,IAAA,OAAO,IAAI,CAACkE,SAAS,GAAGlE,GAAG;AAC7B,EAAA;EAEA6C,EAAEA,CAAC2B,IAAY,EAAEG,QAAgB,EAAE,EAAE1F,QAAa,IAAI,EAAA;AACpDuF,IAAAA,IAAI,GAAG,IAAI,CAACS,kBAAkB,CAACT,IAAI,CAAC;IAEpC,IAAI,CAACU,WAAW,CAACV,IAAI,EAAEG,KAAK,EAAE1F,KAAK,CAAC;IAEpC,MAAMmG,aAAa,GAAG,IAAI,CAACtB,QAAQ,CAAC,IAAI,CAACE,aAAa,GAAG,CAAC,CAAC;IAC3D,IAAIoB,aAAa,CAACZ,IAAI,IAAIA,IAAI,IAAIY,aAAa,CAACT,KAAK,IAAIA,KAAK,EAAE;AAC9D,MAAA;AACF,IAAA;AAEA,IAAA,MAAM3E,GAAG,GAAGwE,IAAI,IAAIG,KAAK,CAACnG,MAAM,GAAG,CAAC,GAAG,GAAG,GAAGmG,KAAK,GAAG,EAAE,CAAC;AACxD,IAAA,IAAI,CAAC3F,UAAU,CAAC0B,IAAI,CAACV,GAAG,CAAC;IACzB,IAAI,CAACqF,yBAAyB,CAACb,IAAI,GAAGc,qBAAoB,CAACX,KAAK,CAAC,EAAE1F,KAAK,CAAC;AAC3E,EAAA;EAEAmB,YAAYA,CAACoE,IAAY,EAAEG,QAAgB,EAAE,EAAE1F,QAAa,IAAI,EAAA;AAC9DuF,IAAAA,IAAI,GAAG,IAAI,CAACS,kBAAkB,CAACT,IAAI,CAAC;IAEpC,MAAMe,OAAO,GAAG,IAAI,CAACzB,QAAQ,CAAC,IAAI,CAACE,aAAa,CAAC;IAEjDuB,OAAO,CAACtG,KAAK,GAAGA,KAAK;IAErB,IAAIsG,OAAO,CAACf,IAAI,IAAIA,IAAI,IAAIe,OAAO,CAACZ,KAAK,IAAIA,KAAK,EAAE;AAClD,MAAA;AACF,IAAA;IAEAY,OAAO,CAACf,IAAI,GAAGA,IAAI;IACnBe,OAAO,CAACZ,KAAK,GAAGA,KAAK;AAErB,IAAA,MAAM3E,GAAG,GAAGwE,IAAI,IAAIG,KAAK,CAACnG,MAAM,GAAG,CAAC,GAAG,GAAG,GAAGmG,KAAK,GAAG,EAAE,CAAC;IACxD,IAAI,CAAC3F,UAAU,CAAC0B,IAAI,CAAC,WAAW,GAAGV,GAAG,CAAC;IACvC,IAAI,CAACqF,yBAAyB,CAACb,IAAI,GAAGc,qBAAoB,CAACX,KAAK,CAAC,EAAE1F,KAAK,CAAC;AAC3E,EAAA;AAEA0B,EAAAA,OAAOA,GAAA;IACL,IAAI,IAAI,CAACqD,aAAa,GAAG,IAAI,CAACF,QAAQ,CAACtF,MAAM,GAAG,CAAC,EAAE;MACjD,IAAI,CAACwF,aAAa,EAAE;AACpB,MAAA,IAAI,CAACC,QAAQ,CAAC7C,IAAI,CAAC;AACjB,QAAA,KAAK,EAAE,IAAI,CAACoD,IAAI,EAAE;AAClB,QAAA,OAAO,EAAE,IAAI,CAACrD,QAAQ,EAAE;AACxB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAE;AACT,OAAA,CAAC;AACJ,IAAA;AACF,EAAA;AAEAJ,EAAAA,IAAIA,GAAA;AACF,IAAA,IAAI,IAAI,CAACiD,aAAa,GAAG,CAAC,EAAE;MAC1B,IAAI,CAACA,aAAa,EAAE;AACpB,MAAA,IAAI,CAACC,QAAQ,CAAC7C,IAAI,CAAC;AACjB,QAAA,KAAK,EAAE,IAAI,CAACoD,IAAI,EAAE;AAClB,QAAA,OAAO,EAAE,IAAI,CAACrD,QAAQ,EAAE;AACxB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAE;AACT,OAAA,CAAC;AACJ,IAAA;AACF,EAAA;AAEAH,EAAAA,SAASA,CAACC,mBAA2B,CAAC,EAAA;AACpC,IAAA,MAAMC,aAAa,GAAG,IAAI,CAAC8C,aAAa,GAAG/C,gBAAgB;IAC3D,IAAIC,aAAa,IAAI,CAAC,IAAIA,aAAa,GAAG,IAAI,CAAC4C,QAAQ,CAACtF,MAAM,EAAE;MAC9D,IAAI,CAACwF,aAAa,GAAG9C,aAAa;AAClC,MAAA,IAAI,CAAC+C,QAAQ,CAAC7C,IAAI,CAAC;AACjB,QAAA,KAAK,EAAE,IAAI,CAACoD,IAAI,EAAE;AAClB,QAAA,OAAO,EAAE,IAAI,CAACrD,QAAQ,EAAE;AACxB,QAAA,KAAK,EAAE,IAAI;AACX,QAAA,MAAM,EAAE;AACT,OAAA,CAAC;AACJ,IAAA;AACF,EAAA;EAEAqE,WAAWA,CAAC9F,EAAyC,EAAA;AACnD,IAAA,IAAI,CAAC0E,mBAAmB,CAAC1D,IAAI,CAAChB,EAAE,CAAC;IAEjC,IAAI,CAAC2E,sBAAsB,KAAK,IAAI,CAACzE,SAAS,CAAE6F,CAAC,IAAI;MACnD,IAAI,CAACJ,yBAAyB,CAACI,CAAC,CAACzF,GAAG,EAAEyF,CAAC,CAACxG,KAAK,CAAC;AAChD,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAK;MACV,MAAMyG,OAAO,GAAG,IAAI,CAACtB,mBAAmB,CAAC9F,OAAO,CAACoB,EAAE,CAAC;MACpD,IAAI,CAAC0E,mBAAmB,CAAC3D,MAAM,CAACiF,OAAO,EAAE,CAAC,CAAC;AAE3C,MAAA,IAAI,IAAI,CAACtB,mBAAmB,CAAC5F,MAAM,KAAK,CAAC,EAAE;AACzC,QAAA,IAAI,CAAC6F,sBAAsB,EAAExE,WAAW,EAAE;QAC1C,IAAI,CAACwE,sBAAsB,GAAG,IAAI;AACpC,MAAA;IACF,CAAC;AACH,EAAA;AAGAgB,EAAAA,yBAAyBA,CAACrF,GAAA,GAAc,EAAE,EAAEf,KAAc,EAAA;AACxD,IAAA,IAAI,CAACmF,mBAAmB,CAACuB,OAAO,CAAEjG,EAAE,IAAKA,EAAE,CAACM,GAAG,EAAEf,KAAK,CAAC,CAAC;AAC1D,EAAA;AAEAW,EAAAA,SAASA,CACPgG,MAA4B,EAC5BC,OAAuC,EACvCC,QAA8B,EAAA;AAE9B,IAAA,OAAO,IAAI,CAAC7B,QAAQ,CAACrE,SAAS,CAAC;AAC7BwB,MAAAA,IAAI,EAAEwE,MAAM;MACZG,KAAK,EAAEF,OAAO,IAAIG,SAAS;MAC3BC,QAAQ,EAAEH,QAAQ,IAAIE;AACvB,KAAA,CAAC;AACJ,EAAA;EAEAE,SAASA,CAAClG,GAAW,EAAA;AACnB,IAAA,OAAO,IAAK;AACd,EAAA;AAEQkF,EAAAA,WAAWA,CAACV,IAAY,EAAEG,KAAa,EAAE1F,KAAU,EAAA;AACzD,IAAA,IAAI,IAAI,CAAC+E,aAAa,GAAG,CAAC,EAAE;MAC1B,IAAI,CAACF,QAAQ,CAACrD,MAAM,CAAC,IAAI,CAACuD,aAAa,GAAG,CAAC,CAAC;AAC9C,IAAA;AACA,IAAA,IAAI,CAACF,QAAQ,CAACpD,IAAI,CAAC,IAAIqD,aAAa,CAACS,IAAI,EAAEG,KAAK,EAAE1F,KAAK,CAAC,CAAC;IACzD,IAAI,CAAC+E,aAAa,GAAG,IAAI,CAACF,QAAQ,CAACtF,MAAM,GAAG,CAAC;AAC/C,EAAA;;;;;UAxLWqF,WAAW;AAAAd,IAAAA,IAAA,EAAA,EAAA;AAAAlB,IAAAA,MAAA,EAAAN,EAAA,CAAAO,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;;UAAX8B;AAAW,GAAA,CAAA;;;;;;QAAXA,WAAW;AAAA7B,EAAAA,UAAA,EAAA,CAAA;UADvBD;;;AA4LD,MAAMgC,aAAa,CAAA;EAERS,IAAA;EACAG,KAAA;EACA1F,KAAA;AAHTC,EAAAA,WAAAA,CACSsF,IAAY,EACZG,KAAa,EACb1F,KAAU,EAAA;IAFV,IAAA,CAAAuF,IAAI,GAAJA,IAAI;IACJ,IAAA,CAAAG,KAAK,GAALA,KAAK;IACL,IAAA,CAAA1F,KAAK,GAALA,KAAK;AACX,EAAA;AACJ;;ACrMK,MAAOkH,oBAAqB,SAAQC,gBAAgB,CAAA;AACxDC,EAAAA,gBAAgB,GAAW,GAAG;AAC9BC,EAAAA,YAAY,GAAW,GAAG;AAC1BC,EAAAA,aAAa,GAAW,EAAE;AAC1BvH,EAAAA,UAAU,GAAa,EAAE;AAEzBiF,EAAAA,QAAQ,GAAG,IAAIpF,OAAO,EAAsB;AACpC2H,EAAAA,YAAY,GAAU,EAAE;AAChCtH,EAAAA,WAAAA,GAAA;AACE,IAAA,KAAK,EAAE;AACT,EAAA;EAEAuH,gBAAgBA,CAACzG,GAAW,EAAA;IAC1B,IAAI,CAACsG,YAAY,GAAGtG,GAAG;AACvB,IAAA,IAAI,CAACiE,QAAQ,CAAC7C,IAAI,CAAC,IAAIsF,kBAAkB,CAAC,IAAI,CAAClC,IAAI,EAAE,CAAC,CAAC;AACzD,EAAA;AAESA,EAAAA,IAAIA,CAACmC,cAAuB,KAAK,EAAA;IACxC,OAAO,IAAI,CAACL,YAAY;AAC1B,EAAA;EAESrB,kBAAkBA,CAAC2B,QAAgB,EAAA;AAC1C,IAAA,IAAIA,QAAQ,CAACzB,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAACkB,gBAAgB,CAACxB,QAAQ,CAAC,GAAG,CAAC,EAAE;MACnE,OAAO,IAAI,CAACwB,gBAAgB,GAAGO,QAAQ,CAACrI,SAAS,CAAC,CAAC,CAAC;AACtD,IAAA;AACA,IAAA,OAAO,IAAI,CAAC8H,gBAAgB,GAAGO,QAAQ;AACzC,EAAA;EAESpG,SAASA,CAACqG,GAAQ,EAAExG,KAAa,EAAEmE,IAAY,EAAEG,KAAa,EAAA;AAErE,IAAA,IAAI,CAAC6B,YAAY,CAAC9F,IAAI,CAACmG,GAAG,CAAC;IAE3B,IAAI,CAACN,aAAa,GAAGlG,KAAK;AAE1B,IAAA,MAAML,GAAG,GAAGwE,IAAI,IAAIG,KAAK,CAACnG,MAAM,GAAG,CAAC,GAAG,GAAG,GAAGmG,KAAK,GAAG,EAAE,CAAC;IACxD,IAAI,CAAC2B,YAAY,GAAGtG,GAAG;AAEvB,IAAA,MAAM8G,WAAW,GAAG,IAAI,CAAC7B,kBAAkB,CAACjF,GAAG,CAAC;AAChD,IAAA,IAAI,CAAChB,UAAU,CAAC0B,IAAI,CAACoG,WAAW,CAAC;AACnC,EAAA;EAES1G,YAAYA,CAACyG,GAAQ,EAAExG,KAAa,EAAEmE,IAAY,EAAEG,KAAa,EAAA;AAExE,IAAA,IAAI,CAAC6B,YAAY,CAAC,CAAC,IAAI,CAACA,YAAY,CAAChI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,GAAGqI,GAAG;IAE5D,IAAI,CAACN,aAAa,GAAGlG,KAAK;AAE1B,IAAA,MAAML,GAAG,GAAGwE,IAAI,IAAIG,KAAK,CAACnG,MAAM,GAAG,CAAC,GAAG,GAAG,GAAGmG,KAAK,GAAG,EAAE,CAAC;IACxD,IAAI,CAAC2B,YAAY,GAAGtG,GAAG;AAEvB,IAAA,MAAM8G,WAAW,GAAG,IAAI,CAAC7B,kBAAkB,CAACjF,GAAG,CAAC;IAChD,IAAI,CAAChB,UAAU,CAAC0B,IAAI,CAAC,WAAW,GAAGoG,WAAW,CAAC;AACjD,EAAA;EAESrH,UAAUA,CAACC,EAAwB,EAAA;AAC1C,IAAA,IAAI,CAACuE,QAAQ,CAACrE,SAAS,CAAC;AAACwB,MAAAA,IAAI,EAAE1B;AAAE,KAAC,CAAC;AACrC,EAAA;AAESqH,EAAAA,WAAWA,GAAA;IAClB,OAAO,IAAI,CAACV,gBAAgB;AAC9B,EAAA;AAEStF,EAAAA,IAAIA,GAAA;AACX,IAAA,IAAI,IAAI,CAAC/B,UAAU,CAACR,MAAM,GAAG,CAAC,EAAE;AAC9B,MAAA,IAAI,CAACQ,UAAU,CAACgI,GAAG,EAAE;AACrB,MAAA,IAAI,CAACR,YAAY,CAACQ,GAAG,EAAE;MACvB,MAAMC,OAAO,GAAG,IAAI,CAACjI,UAAU,CAACR,MAAM,GAAG,CAAC,GAAG,IAAI,CAACQ,UAAU,CAAC,IAAI,CAACA,UAAU,CAACR,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE;AAC7F,MAAA,IAAI,CAACiI,gBAAgB,CAACQ,OAAO,CAAC;AAChC,IAAA;AACF,EAAA;AAEStG,EAAAA,OAAOA,GAAA;AACd,IAAA,MAAM,iBAAiB;AACzB,EAAA;AAESQ,EAAAA,QAAQA,GAAA;AACf,IAAA,OAAO,IAAI,CAACqF,YAAY,CAAC,CAAC,IAAI,CAACA,YAAY,CAAChI,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/D,EAAA;;;;;UA7EW2H,oBAAoB;AAAApD,IAAAA,IAAA,EAAA,EAAA;AAAAlB,IAAAA,MAAA,EAAAN,EAAA,CAAAO,eAAA,CAAAC;AAAA,GAAA,CAAA;;;;;UAApBoE;AAAoB,GAAA,CAAA;;;;;;QAApBA,oBAAoB;AAAAnE,EAAAA,UAAA,EAAA,CAAA;UADhCD;;;;AAiFD,MAAM2E,kBAAkB,CAAA;EAGHpG,MAAA;AAFnB0G,EAAAA,GAAG,GAAY,IAAI;AACnB3F,EAAAA,IAAI,GAAW,UAAU;EACzBnC,WAAAA,CAAmBoB,MAAc,EAAA;IAAd,IAAA,CAAAA,MAAM,GAANA,MAAM;AAAW,EAAA;AACrC;;SCnFe4G,oBAAoBA,GAAA;AAClC,EAAA,OAAO,CACL;AAAC3D,IAAAA,OAAO,EAAE4D,QAAQ;AAAEzD,IAAAA,QAAQ,EAAEG;AAAW,GAAC,EAC1C;AAACN,IAAAA,OAAO,EAAE6C,kBAAgB;AAAE1C,IAAAA,QAAQ,EAAEyC;AAAoB,GAAC,CAC5D;AACH;;;;"}