{"version":3,"file":"angular-auth-oidc-client.mjs","sources":["../../../projects/angular-auth-oidc-client/src/lib/config/loader/config-loader.ts","../../../projects/angular-auth-oidc-client/src/lib/auth-config.ts","../../../projects/angular-auth-oidc-client/src/lib/logging/abstract-logger.service.ts","../../../projects/angular-auth-oidc-client/src/lib/logging/console-logger.service.ts","../../../projects/angular-auth-oidc-client/src/lib/logging/log-level.ts","../../../projects/angular-auth-oidc-client/src/lib/logging/logger.service.ts","../../../projects/angular-auth-oidc-client/src/lib/public-events/event-types.ts","../../../projects/angular-auth-oidc-client/src/lib/public-events/public-events.service.ts","../../../projects/angular-auth-oidc-client/src/lib/storage/abstract-security-storage.ts","../../../projects/angular-auth-oidc-client/src/lib/storage/browser-storage.service.ts","../../../projects/angular-auth-oidc-client/src/lib/storage/storage-persistence.service.ts","../../../projects/angular-auth-oidc-client/src/lib/extractors/jwk.extractor.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/tokenHelper/token-helper.service.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/crypto/crypto.service.ts","../../../projects/angular-auth-oidc-client/src/lib/validation/jwk-window-crypto.service.ts","../../../projects/angular-auth-oidc-client/src/lib/validation/jwt-window-crypto.service.ts","../../../projects/angular-auth-oidc-client/src/lib/validation/token-validation.helper.ts","../../../projects/angular-auth-oidc-client/src/lib/validation/token-validation.service.ts","../../../projects/angular-auth-oidc-client/src/lib/auth-state/auth-state.service.ts","../../../projects/angular-auth-oidc-client/src/lib/auto-login/auto-login.service.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/flowHelper/flow-helper.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/random/random.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/flows-data.service.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/url/uri-encoder.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/url/url.service.ts","../../../projects/angular-auth-oidc-client/src/lib/api/http-base.service.ts","../../../projects/angular-auth-oidc-client/src/lib/api/data.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/callback-handling/error-helper.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/callback-handling/code-flow-callback-handler.service.ts","../../../projects/angular-auth-oidc-client/src/lib/validation/validation-result.ts","../../../projects/angular-auth-oidc-client/src/lib/user-data/user.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/reset-auth-data.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/signin-key-data.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/callback-handling/history-jwt-keys-callback-handler.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/callback-handling/implicit-flow-callback-handler.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/callback-handling/refresh-session-callback-handler.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/callback-handling/refresh-token-callback-handler.service.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/equality/equality.service.ts","../../../projects/angular-auth-oidc-client/src/lib/validation/state-validation-result.ts","../../../projects/angular-auth-oidc-client/src/lib/validation/state-validation.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/callback-handling/state-validation-callback-handler.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/callback-handling/user-callback-handler.service.ts","../../../projects/angular-auth-oidc-client/src/lib/flows/flows.service.ts","../../../projects/angular-auth-oidc-client/src/lib/callback/interval.service.ts","../../../projects/angular-auth-oidc-client/src/lib/callback/code-flow-callback.service.ts","../../../projects/angular-auth-oidc-client/src/lib/callback/implicit-flow-callback.service.ts","../../../projects/angular-auth-oidc-client/src/lib/callback/callback.service.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/platform-provider/platform.provider.ts","../../../projects/angular-auth-oidc-client/src/lib/config/auth-well-known/auth-well-known-data.service.ts","../../../projects/angular-auth-oidc-client/src/lib/config/auth-well-known/auth-well-known.service.ts","../../../projects/angular-auth-oidc-client/src/lib/config/default-config.ts","../../../projects/angular-auth-oidc-client/src/lib/config/validation/rule.ts","../../../projects/angular-auth-oidc-client/src/lib/config/validation/rules/ensure-authority.rule.ts","../../../projects/angular-auth-oidc-client/src/lib/config/validation/rules/ensure-clientId.rule.ts","../../../projects/angular-auth-oidc-client/src/lib/config/validation/rules/ensure-no-duplicated-configs.rule.ts","../../../projects/angular-auth-oidc-client/src/lib/config/validation/rules/ensure-redirect-url.rule.ts","../../../projects/angular-auth-oidc-client/src/lib/config/validation/rules/ensure-silentRenewUrl-with-no-refreshtokens.rule.ts","../../../projects/angular-auth-oidc-client/src/lib/config/validation/rules/use-offline-scope-with-silent-renew.rule.ts","../../../projects/angular-auth-oidc-client/src/lib/config/validation/rules/index.ts","../../../projects/angular-auth-oidc-client/src/lib/config/validation/config-validation.service.ts","../../../projects/angular-auth-oidc-client/src/lib/config/config.service.ts","../../../projects/angular-auth-oidc-client/src/lib/iframe/existing-iframe.service.ts","../../../projects/angular-auth-oidc-client/src/lib/iframe/silent-renew.service.ts","../../../projects/angular-auth-oidc-client/src/lib/iframe/refresh-session-iframe.service.ts","../../../projects/angular-auth-oidc-client/src/lib/callback/refresh-session-refresh-token.service.ts","../../../projects/angular-auth-oidc-client/src/lib/callback/periodically-token-check.service.ts","../../../projects/angular-auth-oidc-client/src/lib/callback/refresh-session.service.ts","../../../projects/angular-auth-oidc-client/src/lib/iframe/check-session.service.ts","../../../projects/angular-auth-oidc-client/src/lib/login/popup/popup.service.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/url/current-url.service.ts","../../../projects/angular-auth-oidc-client/src/lib/auth-state/check-auth.service.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/redirect/redirect.service.ts","../../../projects/angular-auth-oidc-client/src/lib/login/response-type-validation/response-type-validation.service.ts","../../../projects/angular-auth-oidc-client/src/lib/login/par/par.service.ts","../../../projects/angular-auth-oidc-client/src/lib/login/par/par-login.service.ts","../../../projects/angular-auth-oidc-client/src/lib/login/popup/popup-login.service.ts","../../../projects/angular-auth-oidc-client/src/lib/login/standard/standard-login.service.ts","../../../projects/angular-auth-oidc-client/src/lib/login/login.service.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/object/object.helper.ts","../../../projects/angular-auth-oidc-client/src/lib/logoff-revoke/logoff-revocation.service.ts","../../../projects/angular-auth-oidc-client/src/lib/oidc.security.service.ts","../../../projects/angular-auth-oidc-client/src/lib/storage/default-sessionstorage.service.ts","../../../projects/angular-auth-oidc-client/src/lib/provide-auth.ts","../../../projects/angular-auth-oidc-client/src/lib/auth.module.ts","../../../projects/angular-auth-oidc-client/src/lib/auto-login/auto-login-all-routes.guard.ts","../../../projects/angular-auth-oidc-client/src/lib/auto-login/auto-login-partial-routes.guard.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/collections/collections.helper.ts","../../../projects/angular-auth-oidc-client/src/lib/utils/regex/regex.helper.ts","../../../projects/angular-auth-oidc-client/src/lib/interceptor/closest-matching-route.service.ts","../../../projects/angular-auth-oidc-client/src/lib/interceptor/auth.interceptor.ts","../../../projects/angular-auth-oidc-client/src/lib/storage/default-localstorage.service.ts","../../../projects/angular-auth-oidc-client/src/lib/index.ts","../../../projects/angular-auth-oidc-client/src/public-api.ts","../../../projects/angular-auth-oidc-client/src/angular-auth-oidc-client.ts"],"sourcesContent":["import { Provider } from '@angular/core';\nimport { forkJoin, Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { OpenIdConfiguration } from '../openid-configuration';\n\nexport class OpenIdConfigLoader {\n  loader?: Provider;\n}\n\nexport abstract class StsConfigLoader {\n  abstract loadConfigs(): Observable<OpenIdConfiguration[]>;\n}\n\nexport class StsConfigStaticLoader implements StsConfigLoader {\n  constructor(\n    private readonly passedConfigs: OpenIdConfiguration | OpenIdConfiguration[]\n  ) {}\n\n  loadConfigs(): Observable<OpenIdConfiguration[]> {\n    if (Array.isArray(this.passedConfigs)) {\n      return of(this.passedConfigs);\n    }\n\n    return of([this.passedConfigs]);\n  }\n}\n\nexport class StsConfigHttpLoader implements StsConfigLoader {\n  constructor(\n    private readonly configs$:\n      | Observable<OpenIdConfiguration>\n      | Observable<OpenIdConfiguration>[]\n      | Observable<OpenIdConfiguration[]>\n  ) {}\n\n  loadConfigs(): Observable<OpenIdConfiguration[]> {\n    if (Array.isArray(this.configs$)) {\n      return forkJoin(this.configs$);\n    }\n\n    const singleConfigOrArray = this.configs$ as Observable<unknown>;\n\n    return singleConfigOrArray.pipe(\n      map((value: unknown) => {\n        if (Array.isArray(value)) {\n          return value as OpenIdConfiguration[];\n        }\n\n        return [value] as OpenIdConfiguration[];\n      })\n    );\n  }\n}\n","import { InjectionToken, Provider } from '@angular/core';\nimport {\n  StsConfigLoader,\n  StsConfigStaticLoader,\n} from './config/loader/config-loader';\nimport { OpenIdConfiguration } from './config/openid-configuration';\n\nexport interface PassedInitialConfig {\n  config?: OpenIdConfiguration | OpenIdConfiguration[];\n  loader?: Provider;\n}\n\nexport function createStaticLoader(\n  passedConfig: PassedInitialConfig\n): StsConfigLoader {\n  if (!passedConfig?.config) {\n    throw new Error('No config provided!');\n  }\n\n  return new StsConfigStaticLoader(passedConfig.config);\n}\n\nexport const PASSED_CONFIG = new InjectionToken<PassedInitialConfig>(\n  'PASSED_CONFIG'\n);\n","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Implement this class-interface to create a custom logger service.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport abstract class AbstractLoggerService {\r\n  abstract logError(message: string | object, ...args: any[]): void;\r\n\r\n  abstract logWarning(message: string | object, ...args: any[]): void;\r\n\r\n  abstract logDebug(message: string | object, ...args: any[]): void;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AbstractLoggerService } from './abstract-logger.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ConsoleLoggerService implements AbstractLoggerService {\r\n  logError(message: string | object, ...args: any[]): void {\r\n    console.error(message, ...args);\r\n  }\r\n\r\n  logWarning(message: string | object, ...args: any[]): void {\r\n    console.warn(message, ...args);\r\n  }\r\n\r\n  logDebug(message: string | object, ...args: any[]): void {\r\n    console.debug(message, ...args);\r\n  }\r\n}\r\n","export enum LogLevel {\n  None,\n  Debug,\n  Warn,\n  Error,\n}\n","import { Injectable, inject } from '@angular/core';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { AbstractLoggerService } from './abstract-logger.service';\r\nimport { LogLevel } from './log-level';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LoggerService {\r\n  private readonly abstractLoggerService = inject(AbstractLoggerService);\r\n\r\n  logError(\r\n    configuration: OpenIdConfiguration,\r\n    message: string | object,\r\n    ...args: any[]\r\n  ): void {\r\n    if (this.loggingIsTurnedOff(configuration)) {\r\n      return;\r\n    }\r\n\r\n    const { configId } = configuration;\r\n    const messageToLog = this.isObject(message)\r\n      ? JSON.stringify(message)\r\n      : message;\r\n\r\n    if (!!args && !!args.length) {\r\n      this.abstractLoggerService.logError(\r\n        `[ERROR] ${configId} - ${messageToLog}`,\r\n        ...args\r\n      );\r\n    } else {\r\n      this.abstractLoggerService.logError(\r\n        `[ERROR] ${configId} - ${messageToLog}`\r\n      );\r\n    }\r\n  }\r\n\r\n  logWarning(\r\n    configuration: OpenIdConfiguration,\r\n    message: string | object,\r\n    ...args: any[]\r\n  ): void {\r\n    if (!this.logLevelIsSet(configuration)) {\r\n      return;\r\n    }\r\n\r\n    if (this.loggingIsTurnedOff(configuration)) {\r\n      return;\r\n    }\r\n\r\n    if (\r\n      !this.currentLogLevelIsEqualOrSmallerThan(configuration, LogLevel.Warn)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const { configId } = configuration;\r\n    const messageToLog = this.isObject(message)\r\n      ? JSON.stringify(message)\r\n      : message;\r\n\r\n    if (!!args && !!args.length) {\r\n      this.abstractLoggerService.logWarning(\r\n        `[WARN] ${configId} - ${messageToLog}`,\r\n        ...args\r\n      );\r\n    } else {\r\n      this.abstractLoggerService.logWarning(\r\n        `[WARN] ${configId} - ${messageToLog}`\r\n      );\r\n    }\r\n  }\r\n\r\n  logDebug(\r\n    configuration: OpenIdConfiguration | null,\r\n    message: string | object,\r\n    ...args: any[]\r\n  ): void {\r\n    if (!configuration) {\r\n      return;\r\n    }\r\n\r\n    if (!this.logLevelIsSet(configuration)) {\r\n      return;\r\n    }\r\n\r\n    if (this.loggingIsTurnedOff(configuration)) {\r\n      return;\r\n    }\r\n\r\n    if (\r\n      !this.currentLogLevelIsEqualOrSmallerThan(configuration, LogLevel.Debug)\r\n    ) {\r\n      return;\r\n    }\r\n\r\n    const { configId } = configuration;\r\n    const messageToLog = this.isObject(message)\r\n      ? JSON.stringify(message)\r\n      : message;\r\n\r\n    if (!!args && !!args.length) {\r\n      this.abstractLoggerService.logDebug(\r\n        `[DEBUG] ${configId} - ${messageToLog}`,\r\n        ...args\r\n      );\r\n    } else {\r\n      this.abstractLoggerService.logDebug(\r\n        `[DEBUG] ${configId} - ${messageToLog}`\r\n      );\r\n    }\r\n  }\r\n\r\n  private currentLogLevelIsEqualOrSmallerThan(\r\n    configuration: OpenIdConfiguration,\r\n    logLevelToCompare: LogLevel\r\n  ): boolean {\r\n    const { logLevel } = configuration || {};\r\n\r\n    if (!logLevel) {\r\n      return false;\r\n    }\r\n\r\n    return logLevel <= logLevelToCompare;\r\n  }\r\n\r\n  private logLevelIsSet(configuration: OpenIdConfiguration): boolean {\r\n    const { logLevel } = configuration || {};\r\n\r\n    if (logLevel === null) {\r\n      return false;\r\n    }\r\n\r\n    return logLevel !== undefined;\r\n  }\r\n\r\n  private loggingIsTurnedOff(configuration: OpenIdConfiguration): boolean {\r\n    const { logLevel } = configuration || {};\r\n\r\n    return logLevel === LogLevel.None;\r\n  }\r\n\r\n  private isObject(possibleObject: any): boolean {\r\n    return Object.prototype.toString.call(possibleObject) === '[object Object]';\r\n  }\r\n}\r\n","export enum EventTypes {\n  /**\n   *  This only works in the AppModule Constructor\n   */\n  ConfigLoaded,\n  CheckingAuth,\n  CheckingAuthFinished,\n  CheckingAuthFinishedWithError,\n  ConfigLoadingFailed,\n  CheckSessionReceived,\n  UserDataChanged,\n  NewAuthenticationResult,\n  TokenExpired,\n  IdTokenExpired,\n  SilentRenewStarted,\n  SilentRenewFailed,\n}\n","import { Injectable } from '@angular/core';\nimport { Observable, ReplaySubject } from 'rxjs';\nimport { EventTypes } from './event-types';\nimport { OidcClientNotification } from './notification';\n\n@Injectable({ providedIn: 'root' })\nexport class PublicEventsService {\n  private readonly notify = new ReplaySubject<OidcClientNotification<any>>(1);\n\n  /**\n   * Fires a new event.\n   *\n   * @param type The event type.\n   * @param value The event value.\n   */\n  fireEvent<T>(type: EventTypes, value?: T): void {\n    this.notify.next({ type, value });\n  }\n\n  /**\n   * Wires up the event notification observable.\n   */\n  registerForEvents(): Observable<OidcClientNotification<any>> {\n    return this.notify.asObservable();\n  }\n}\n","import { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Implement this class-interface to create a custom storage.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport abstract class AbstractSecurityStorage {\r\n  /**\r\n   * This method must contain the logic to read the storage.\r\n   *\r\n   * @return The value of the given key\r\n   */\r\n  abstract read(key: string): string | null;\r\n\r\n  /**\r\n   * This method must contain the logic to write the storage.\r\n   *\r\n   * @param key The key to write a value for\r\n   * @param value The value for the given key\r\n   */\r\n  abstract write(key: string, value: string): void;\r\n\r\n  /**\r\n   * This method must contain the logic to remove an item from the storage.\r\n   *\r\n   * @param key The value for the key to be removed\r\n   */\r\n  abstract remove(key: string): void;\r\n\r\n  /**\r\n   * This method must contain the logic to remove all items from the storage.\r\n   */\r\n  abstract clear(): void;\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { AbstractSecurityStorage } from './abstract-security-storage';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class BrowserStorageService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly abstractSecurityStorage = inject(AbstractSecurityStorage);\r\n\r\n  read(key: string, configuration: OpenIdConfiguration): any {\r\n    const { configId } = configuration;\r\n\r\n    if (!configId) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `Wanted to read '${key}' but configId was '${configId}'`\r\n      );\r\n\r\n      return null;\r\n    }\r\n\r\n    if (!this.hasStorage()) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `Wanted to read '${key}' but Storage was undefined`\r\n      );\r\n\r\n      return null;\r\n    }\r\n\r\n    const storedConfig = this.abstractSecurityStorage.read(configId);\r\n\r\n    if (!storedConfig) {\r\n      return null;\r\n    }\r\n\r\n    return JSON.parse(storedConfig);\r\n  }\r\n\r\n  write(value: any, configuration: OpenIdConfiguration): boolean {\r\n    const { configId } = configuration;\r\n\r\n    if (!configId) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `Wanted to write but configId was '${configId}'`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    if (!this.hasStorage()) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `Wanted to write but Storage was falsy`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    value = value || null;\r\n\r\n    this.abstractSecurityStorage.write(configId, JSON.stringify(value));\r\n\r\n    return true;\r\n  }\r\n\r\n  remove(key: string, configuration: OpenIdConfiguration): boolean {\r\n    const { configId } = configuration;\r\n\r\n    if (!configId) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `Wanted to remove '${key}' but configId was '${configId}'`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    if (!this.hasStorage()) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `Wanted to remove '${key}' but Storage was falsy`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    this.abstractSecurityStorage.remove(configId);\r\n\r\n    return true;\r\n  }\r\n\r\n  clear(configuration: OpenIdConfiguration): boolean {\r\n    const { configId } = configuration;\r\n\r\n    if (!configId) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `Wanted to clear storage but configId was '${configId}'`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    if (!this.hasStorage()) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `Wanted to clear storage but Storage was falsy`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    this.abstractSecurityStorage.remove(configId);\r\n\r\n    return true;\r\n  }\r\n\r\n  private hasStorage(): boolean {\r\n    return typeof Storage !== 'undefined';\r\n  }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\nimport { AuthResult } from '../flows/callback-context';\nimport { OpenIdConfiguration } from './../config/openid-configuration';\nimport { BrowserStorageService } from './browser-storage.service';\n\nexport type StorageKeys =\n  | 'authnResult'\n  | 'authzData'\n  | 'access_token_expires_at'\n  | 'authWellKnownEndPoints'\n  | 'userData'\n  | 'authNonce'\n  | 'codeVerifier'\n  | 'authStateControl'\n  | 'reusable_refresh_token'\n  | 'session_state'\n  | 'storageSilentRenewRunning'\n  | 'storageCodeFlowInProgress'\n  | 'storageCustomParamsAuthRequest'\n  | 'storageCustomParamsRefresh'\n  | 'storageCustomParamsEndSession'\n  | 'redirect'\n  | 'configIds'\n  | 'jwtKeys'\n  | 'popupauth';\n\n@Injectable({ providedIn: 'root' })\nexport class StoragePersistenceService {\n  private readonly browserStorageService = inject(BrowserStorageService);\n\n  read(key: StorageKeys, config: OpenIdConfiguration): any {\n    const storedConfig = this.browserStorageService.read(key, config) || {};\n\n    return storedConfig[key];\n  }\n\n  write(key: StorageKeys, value: any, config: OpenIdConfiguration): boolean {\n    const storedConfig = this.browserStorageService.read(key, config) || {};\n\n    storedConfig[key] = value;\n\n    return this.browserStorageService.write(storedConfig, config);\n  }\n\n  remove(key: StorageKeys, config: OpenIdConfiguration): void {\n    const storedConfig = this.browserStorageService.read(key, config) || {};\n\n    delete storedConfig[key];\n\n    this.browserStorageService.write(storedConfig, config);\n  }\n\n  clear(config: OpenIdConfiguration): void {\n    this.browserStorageService.clear(config);\n  }\n\n  resetStorageFlowData(config: OpenIdConfiguration): void {\n    this.remove('session_state', config);\n    this.remove('storageSilentRenewRunning', config);\n    this.remove('storageCodeFlowInProgress', config);\n    this.remove('codeVerifier', config);\n    this.remove('userData', config);\n    this.remove('storageCustomParamsAuthRequest', config);\n    this.remove('access_token_expires_at', config);\n    this.remove('storageCustomParamsRefresh', config);\n    this.remove('storageCustomParamsEndSession', config);\n    this.remove('reusable_refresh_token', config);\n  }\n\n  resetAuthStateInStorage(config: OpenIdConfiguration): void {\n    this.remove('authzData', config);\n    this.remove('reusable_refresh_token', config);\n    this.remove('authnResult', config);\n  }\n\n  getAccessToken(config: OpenIdConfiguration): string {\n    return this.read('authzData', config);\n  }\n\n  getIdToken(config: OpenIdConfiguration): string {\n    return this.read('authnResult', config)?.id_token;\n  }\n\n  getRefreshToken(config: OpenIdConfiguration): string {\n    const refreshToken = this.read('authnResult', config)?.refresh_token;\n\n    if (!refreshToken && config.allowUnsafeReuseRefreshToken) {\n      return this.read('reusable_refresh_token', config);\n    }\n\n    return refreshToken;\n  }\n\n  getAuthenticationResult(config: OpenIdConfiguration): AuthResult {\n    return this.read('authnResult', config);\n  }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class JwkExtractor {\n  extractJwk(\n    keys: JsonWebKey[],\n    spec?: { kid?: string; use?: string; kty?: string },\n    throwOnEmpty = true\n  ): JsonWebKey[] {\n    if (0 === keys.length) {\n      throw JwkExtractorInvalidArgumentError;\n    }\n\n    const foundKeys = keys\n      .filter((k) => (spec?.kid ? (k as any)['kid'] === spec.kid : true))\n      .filter((k) => (spec?.use ? k['use'] === spec.use : true))\n      .filter((k) => (spec?.kty ? k['kty'] === spec.kty : true));\n\n    if (foundKeys.length === 0 && throwOnEmpty) {\n      throw JwkExtractorNoMatchingKeysError;\n    }\n\n    if (foundKeys.length > 1 && (null === spec || undefined === spec)) {\n      throw JwkExtractorSeveralMatchingKeysError;\n    }\n\n    return foundKeys;\n  }\n}\n\nfunction buildErrorName(name: string): string {\n  return JwkExtractor.name + ': ' + name;\n}\n\nexport const JwkExtractorInvalidArgumentError = {\n  name: buildErrorName('InvalidArgumentError'),\n  message: 'Array of keys was empty. Unable to extract',\n};\n\nexport const JwkExtractorNoMatchingKeysError = {\n  name: buildErrorName('NoMatchingKeysError'),\n  message: 'No key found matching the spec',\n};\n\nexport const JwkExtractorSeveralMatchingKeysError = {\n  name: buildErrorName('SeveralMatchingKeysError'),\n  message: 'More than one key found. Please use spec to filter',\n};\n","\r\nimport { inject, Injectable, DOCUMENT } from '@angular/core';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\n\r\nconst PARTS_OF_TOKEN = 3;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TokenHelperService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly document = inject<Document>(DOCUMENT);\r\n\r\n  getTokenExpirationDate(dataIdToken: any): Date {\r\n    if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'exp')) {\r\n      return new Date(new Date().toUTCString());\r\n    }\r\n\r\n    const date = new Date(0); // The 0 here is the key, which sets the date to the epoch\r\n\r\n    date.setUTCSeconds(dataIdToken.exp);\r\n\r\n    return date;\r\n  }\r\n\r\n  getSigningInputFromToken(\r\n    token: string | undefined | null,\r\n    encoded: boolean,\r\n    configuration: OpenIdConfiguration\r\n  ): string {\r\n    if (!this.tokenIsValid(token, configuration)) {\r\n      return '';\r\n    }\r\n\r\n    const header: string = this.getHeaderFromToken(\r\n      token,\r\n      encoded,\r\n      configuration\r\n    );\r\n    const payload: string = this.getPayloadFromToken(\r\n      token,\r\n      encoded,\r\n      configuration\r\n    );\r\n\r\n    return [header, payload].join('.');\r\n  }\r\n\r\n  getHeaderFromToken(\r\n    token: string | undefined | null,\r\n    encoded: boolean,\r\n    configuration: OpenIdConfiguration\r\n  ): any {\r\n    if (!this.tokenIsValid(token, configuration)) {\r\n      return {};\r\n    }\r\n\r\n    return this.getPartOfToken(token, 0, encoded);\r\n  }\r\n\r\n  getPayloadFromToken(\r\n    token: string | undefined | null,\r\n    encoded: boolean,\r\n    configuration: OpenIdConfiguration | null\r\n  ): any {\r\n    if (!configuration) {\r\n      return {};\r\n    }\r\n\r\n    if (!this.tokenIsValid(token, configuration)) {\r\n      return {};\r\n    }\r\n\r\n    return this.getPartOfToken(token, 1, encoded);\r\n  }\r\n\r\n  getSignatureFromToken(\r\n    token: string | undefined | null,\r\n    encoded: boolean,\r\n    configuration: OpenIdConfiguration\r\n  ): any {\r\n    if (!this.tokenIsValid(token, configuration)) {\r\n      return {};\r\n    }\r\n\r\n    return this.getPartOfToken(token, 2, encoded);\r\n  }\r\n\r\n  private getPartOfToken(token: string, index: number, encoded: boolean): any {\r\n    const partOfToken = this.extractPartOfToken(token, index);\r\n\r\n    if (encoded) {\r\n      return partOfToken;\r\n    }\r\n\r\n    const result = this.urlBase64Decode(partOfToken);\r\n\r\n    return JSON.parse(result);\r\n  }\r\n\r\n  private urlBase64Decode(str: string): string {\r\n    let output = str.replace(/-/g, '+').replace(/_/g, '/');\r\n\r\n    switch (output.length % 4) {\r\n      case 0:\r\n        break;\r\n      case 2:\r\n        output += '==';\r\n        break;\r\n      case 3:\r\n        output += '=';\r\n        break;\r\n      default:\r\n        throw Error('Illegal base64url string!');\r\n    }\r\n\r\n    const decoded =\r\n      typeof this.document.defaultView !== 'undefined'\r\n        ? this.document.defaultView?.atob(output)\r\n        : Buffer.from(output, 'base64').toString('binary');\r\n\r\n    if (!decoded) {\r\n      return '';\r\n    }\r\n\r\n    try {\r\n      // Going backwards: from byte stream, to percent-encoding, to original string.\r\n      return decodeURIComponent(\r\n        decoded\r\n          .split('')\r\n          .map(\r\n            (c: string) => '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2)\r\n          )\r\n          .join('')\r\n      );\r\n    } catch (_err) {\r\n      return decoded;\r\n    }\r\n  }\r\n\r\n  private tokenIsValid(\r\n    token: string | undefined | null,\r\n    configuration: OpenIdConfiguration\r\n  ): token is string {\r\n    if (!token) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `token '${token}' is not valid --> token falsy`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    if (!(token as string).includes('.')) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `token '${token}' is not valid --> no dots included`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    const parts = token.split('.');\r\n\r\n    if (parts.length !== PARTS_OF_TOKEN) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `token '${token}' is not valid --> token has to have exactly ${\r\n          PARTS_OF_TOKEN - 1\r\n        } dots`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  private extractPartOfToken(token: string, index: number): string {\r\n    return token.split('.')[index];\r\n  }\r\n}\r\n","\r\nimport { Injectable, inject, DOCUMENT } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CryptoService {\r\n  private readonly document = inject<Document>(DOCUMENT);\r\n\r\n  getCrypto(): any {\r\n    // support for IE,  (window.crypto || window.msCrypto)\r\n    return (\r\n      this.document.defaultView?.crypto ||\r\n      (this.document.defaultView as any)?.msCrypto\r\n    );\r\n  }\r\n}\r\n","import { Injectable, inject } from '@angular/core';\r\nimport { CryptoService } from '../utils/crypto/crypto.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class JwkWindowCryptoService {\r\n  private readonly cryptoService = inject(CryptoService);\r\n\r\n  importVerificationKey(\r\n    key: JsonWebKey,\r\n    algorithm:\r\n      | AlgorithmIdentifier\r\n      | RsaHashedImportParams\r\n      | EcKeyImportParams\r\n      | HmacImportParams\r\n      | AesKeyAlgorithm\r\n      | null\r\n  ): Promise<CryptoKey> {\r\n    return this.cryptoService\r\n      .getCrypto()\r\n      .subtle.importKey('jwk', key, algorithm, false, ['verify']);\r\n  }\r\n\r\n  verifyKey(\r\n    verifyAlgorithm: AlgorithmIdentifier | RsaPssParams | EcdsaParams | null,\r\n    cryptoKey: CryptoKey,\r\n    signature: Uint8Array,\r\n    signingInput: string\r\n  ): Promise<boolean> {\r\n    return this.cryptoService\r\n      .getCrypto()\r\n      .subtle.verify(\r\n        verifyAlgorithm,\r\n        cryptoKey,\r\n        signature,\r\n        new TextEncoder().encode(signingInput)\r\n      );\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\nimport { from, Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { CryptoService } from '../utils/crypto/crypto.service';\n\n@Injectable({ providedIn: 'root' })\nexport class JwtWindowCryptoService {\n  private readonly cryptoService = inject(CryptoService);\n\n  generateCodeChallenge(codeVerifier: string): Observable<string> {\n    return this.calcHash(codeVerifier).pipe(\n      map((challengeRaw: string) => this.base64UrlEncode(challengeRaw))\n    );\n  }\n\n  generateAtHash(accessToken: string, algorithm: string): Observable<string> {\n    return this.calcHash(accessToken, algorithm).pipe(\n      map((tokenHash) => {\n        const substr: string = tokenHash.substr(0, tokenHash.length / 2);\n        const tokenHashBase64: string = btoa(substr);\n\n        return tokenHashBase64\n          .replace(/\\+/g, '-')\n          .replace(/\\//g, '_')\n          .replace(/=/g, '');\n      })\n    );\n  }\n\n  private calcHash(\n    valueToHash: string,\n    algorithm = 'SHA-256'\n  ): Observable<string> {\n    const msgBuffer: Uint8Array = new TextEncoder().encode(valueToHash);\n\n    return from(\n      this.cryptoService.getCrypto().subtle.digest(algorithm, msgBuffer)\n    ).pipe(\n      map((hashBuffer: unknown) => {\n        const buffer = hashBuffer as ArrayBuffer;\n        const hashArray: number[] = Array.from(new Uint8Array(buffer));\n\n        return this.toHashString(hashArray);\n      })\n    );\n  }\n\n  private toHashString(byteArray: number[]): string {\n    let result = '';\n\n    for (const e of byteArray) {\n      result += String.fromCharCode(e);\n    }\n\n    return result;\n  }\n\n  private base64UrlEncode(str: string): string {\n    const base64: string = btoa(str);\n\n    return base64.replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');\n  }\n}\n","export function getVerifyAlg(\n  alg: string\n): RsaHashedImportParams | EcdsaParams | null {\n  switch (alg.charAt(0)) {\n    case 'R':\n      return {\n        name: 'RSASSA-PKCS1-v1_5',\n        hash: 'SHA-256',\n      };\n    case 'E':\n      if (alg.includes('256')) {\n        return {\n          name: 'ECDSA',\n          hash: 'SHA-256',\n        };\n      } else if (alg.includes('384')) {\n        return {\n          name: 'ECDSA',\n          hash: 'SHA-384',\n        };\n      } else {\n        return null;\n      }\n    default:\n      return null;\n  }\n}\n\nexport function alg2kty(alg: string): string {\n  switch (alg.charAt(0)) {\n    case 'R':\n      return 'RSA';\n\n    case 'E':\n      return 'EC';\n\n    default:\n      throw new Error('Cannot infer kty from alg: ' + alg);\n  }\n}\n\nexport function getImportAlg(\n  alg: string\n): RsaHashedImportParams | EcKeyImportParams | null {\n  switch (alg.charAt(0)) {\n    case 'R':\n      if (alg.includes('256')) {\n        return {\n          name: 'RSASSA-PKCS1-v1_5',\n          hash: 'SHA-256',\n        };\n      } else if (alg.includes('384')) {\n        return {\n          name: 'RSASSA-PKCS1-v1_5',\n          hash: 'SHA-384',\n        };\n      } else if (alg.includes('512')) {\n        return {\n          name: 'RSASSA-PKCS1-v1_5',\n          hash: 'SHA-512',\n        };\n      } else {\n        return null;\n      }\n    case 'E':\n      if (alg.includes('256')) {\n        return {\n          name: 'ECDSA',\n          namedCurve: 'P-256',\n        };\n      } else if (alg.includes('384')) {\n        return {\n          name: 'ECDSA',\n          namedCurve: 'P-384',\n        };\n      } else {\n        return null;\n      }\n    default:\n      return null;\n  }\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { base64url } from 'rfc4648';\r\nimport { from, Observable, of } from 'rxjs';\r\nimport { map, mergeMap, tap } from 'rxjs/operators';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { JwkExtractor } from '../extractors/jwk.extractor';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { TokenHelperService } from '../utils/tokenHelper/token-helper.service';\r\nimport { JwkWindowCryptoService } from './jwk-window-crypto.service';\r\nimport { JwtWindowCryptoService } from './jwt-window-crypto.service';\r\nimport { alg2kty, getImportAlg, getVerifyAlg } from './token-validation.helper';\r\n\r\n// http://openid.net/specs/openid-connect-implicit-1_0.html\r\n\r\n// id_token\r\n// id_token C1: The Issuer Identifier for the OpenID Provider (which is typically obtained during Discovery)\r\n// MUST exactly match the value of the iss (issuer) Claim.\r\n//\r\n// id_token C2: The Client MUST validate that the aud (audience) Claim contains its client_id value registered at the Issuer identified\r\n// by the iss (issuer) Claim as an audience.The ID Token MUST be rejected if the ID Token does not list the Client as a valid audience,\r\n// or if it contains additional audiences not trusted by the Client.\r\n//\r\n// id_token C3: If the ID Token contains multiple audiences, the Client SHOULD verify that an azp Claim is present.\r\n//\r\n// id_token C4: If an azp (authorized party) Claim is present, the Client SHOULD verify that its client_id is the Claim Value.\r\n//\r\n// id_token C5: The Client MUST validate the signature of the ID Token according to JWS [JWS] using the algorithm specified in the\r\n// alg Header Parameter of the JOSE Header.The Client MUST use the keys provided by the Issuer.\r\n//\r\n// id_token C6: The alg value SHOULD be RS256. Validation of tokens using other signing algorithms is described in the OpenID Connect\r\n// Core 1.0\r\n// [OpenID.Core] specification.\r\n//\r\n// id_token C7: The current time MUST be before the time represented by the exp Claim (possibly allowing for some small leeway to account\r\n// for clock skew).\r\n//\r\n// id_token C8: The iat Claim can be used to reject tokens that were issued too far away from the current time,\r\n// limiting the amount of time that nonces need to be stored to prevent attacks.The acceptable range is Client specific.\r\n//\r\n// id_token C9: The value of the nonce Claim MUST be checked to verify that it is the same value as the one that was sent\r\n// in the Authentication Request.The Client SHOULD check the nonce value for replay attacks.The precise method for detecting replay attacks\r\n// is Client specific.\r\n//\r\n// id_token C10: If the acr Claim was requested, the Client SHOULD check that the asserted Claim Value is appropriate.\r\n// The meaning and processing of acr Claim Values is out of scope for this document.\r\n//\r\n// id_token C11: When a max_age request is made, the Client SHOULD check the auth_time Claim value and request re- authentication\r\n// if it determines too much time has elapsed since the last End- User authentication.\r\n\r\n// Access Token Validation\r\n// access_token C1: Hash the octets of the ASCII representation of the access_token with the hash algorithm specified in JWA[JWA]\r\n// for the alg Header Parameter of the ID Token's JOSE Header. For instance, if the alg is RS256, the hash algorithm used is SHA-256.\r\n// access_token C2: Take the left- most half of the hash and base64url- encode it.\r\n// access_token C3: The value of at_hash in the ID Token MUST match the value produced in the previous step if at_hash is present\r\n// in the ID Token.\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class TokenValidationService {\r\n  static refreshTokenNoncePlaceholder = '--RefreshToken--';\r\n\r\n  keyAlgorithms: string[] = [\r\n    'HS256',\r\n    'HS384',\r\n    'HS512',\r\n    'RS256',\r\n    'RS384',\r\n    'RS512',\r\n    'ES256',\r\n    'ES384',\r\n    'PS256',\r\n    'PS384',\r\n    'PS512',\r\n  ];\r\n\r\n  private readonly tokenHelperService = inject(TokenHelperService);\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly jwkExtractor = inject(JwkExtractor);\r\n  private readonly jwkWindowCryptoService = inject(JwkWindowCryptoService);\r\n  private readonly jwtWindowCryptoService = inject(JwtWindowCryptoService);\r\n\r\n  // id_token C7: The current time MUST be before the time represented by the exp Claim\r\n  // (possibly allowing for some small leeway to account for clock skew).\r\n  hasIdTokenExpired(\r\n    token: string,\r\n    configuration: OpenIdConfiguration,\r\n    offsetSeconds?: number\r\n  ): boolean {\r\n    const decoded = this.tokenHelperService.getPayloadFromToken(\r\n      token,\r\n      false,\r\n      configuration\r\n    );\r\n\r\n    return !this.validateIdTokenExpNotExpired(\r\n      decoded,\r\n      configuration,\r\n      offsetSeconds\r\n    );\r\n  }\r\n\r\n  // id_token C7: The current time MUST be before the time represented by the exp Claim\r\n  // (possibly allowing for some small leeway to account for clock skew).\r\n  validateIdTokenExpNotExpired(\r\n    decodedIdToken: string,\r\n    configuration: OpenIdConfiguration,\r\n    offsetSeconds?: number\r\n  ): boolean {\r\n    const tokenExpirationDate =\r\n      this.tokenHelperService.getTokenExpirationDate(decodedIdToken);\r\n\r\n    offsetSeconds = offsetSeconds || 0;\r\n\r\n    if (!tokenExpirationDate) {\r\n      return false;\r\n    }\r\n\r\n    const tokenExpirationValue = tokenExpirationDate.valueOf();\r\n    const nowWithOffset = this.calculateNowWithOffset(offsetSeconds);\r\n    const tokenNotExpired = tokenExpirationValue > nowWithOffset;\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      `Has idToken expired: ${!tokenNotExpired} --> expires in ${this.millisToMinutesAndSeconds(\r\n        tokenExpirationValue - nowWithOffset\r\n      )} , ${new Date(tokenExpirationValue).toLocaleTimeString()} > ${new Date(\r\n        nowWithOffset\r\n      ).toLocaleTimeString()}`\r\n    );\r\n\r\n    return tokenNotExpired;\r\n  }\r\n\r\n  validateAccessTokenNotExpired(\r\n    accessTokenExpiresAt: Date,\r\n    configuration: OpenIdConfiguration,\r\n    offsetSeconds?: number\r\n  ): boolean {\r\n    // value is optional, so if it does not exist, then it has not expired\r\n    if (!accessTokenExpiresAt) {\r\n      return true;\r\n    }\r\n\r\n    offsetSeconds = offsetSeconds || 0;\r\n    const accessTokenExpirationValue = accessTokenExpiresAt.valueOf();\r\n    const nowWithOffset = this.calculateNowWithOffset(offsetSeconds);\r\n    const tokenNotExpired = accessTokenExpirationValue > nowWithOffset;\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      `Has accessToken expired: ${!tokenNotExpired} --> expires in ${this.millisToMinutesAndSeconds(\r\n        accessTokenExpirationValue - nowWithOffset\r\n      )} , ${new Date(\r\n        accessTokenExpirationValue\r\n      ).toLocaleTimeString()} > ${new Date(nowWithOffset).toLocaleTimeString()}`\r\n    );\r\n\r\n    return tokenNotExpired;\r\n  }\r\n\r\n  // iss\r\n  // REQUIRED. Issuer Identifier for the Issuer of the response.The iss value is a case-sensitive URL using the\r\n  // https scheme that contains scheme, host,\r\n  // and optionally, port number and path components and no query or fragment components.\r\n  //\r\n  // sub\r\n  // REQUIRED. Subject Identifier.Locally unique and never reassigned identifier within the Issuer for the End- User,\r\n  // which is intended to be consumed by the Client, e.g., 24400320 or AItOawmwtWwcT0k51BayewNvutrJUqsvl6qs7A4.\r\n  // It MUST NOT exceed 255 ASCII characters in length.The sub value is a case-sensitive string.\r\n  //\r\n  // aud\r\n  // REQUIRED. Audience(s) that this ID Token is intended for. It MUST contain the OAuth 2.0 client_id of the Relying Party as an\r\n  // audience value.\r\n  // It MAY also contain identifiers for other audiences.In the general case, the aud value is an array of case-sensitive strings.\r\n  // In the common special case when there is one audience, the aud value MAY be a single case-sensitive string.\r\n  //\r\n  // exp\r\n  // REQUIRED. Expiration time on or after which the ID Token MUST NOT be accepted for processing.\r\n  // The processing of this parameter requires that the current date/ time MUST be before the expiration date/ time listed in the value.\r\n  // Implementers MAY provide for some small leeway, usually no more than a few minutes, to account for clock skew.\r\n  // Its value is a JSON [RFC7159] number representing the number of seconds from 1970- 01 - 01T00: 00:00Z as measured in UTC until\r\n  // the date/ time.\r\n  // See RFC 3339 [RFC3339] for details regarding date/ times in general and UTC in particular.\r\n  //\r\n  // iat\r\n  // REQUIRED. Time at which the JWT was issued. Its value is a JSON number representing the number of seconds from\r\n  // 1970- 01 - 01T00: 00: 00Z as measured\r\n  // in UTC until the date/ time.\r\n  validateRequiredIdToken(\r\n    dataIdToken: any,\r\n    configuration: OpenIdConfiguration\r\n  ): boolean {\r\n    let validated = true;\r\n\r\n    if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'iss')) {\r\n      validated = false;\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        'iss is missing, this is required in the id_token'\r\n      );\r\n    }\r\n\r\n    if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'sub')) {\r\n      validated = false;\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        'sub is missing, this is required in the id_token'\r\n      );\r\n    }\r\n\r\n    if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'aud')) {\r\n      validated = false;\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        'aud is missing, this is required in the id_token'\r\n      );\r\n    }\r\n\r\n    if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'exp')) {\r\n      validated = false;\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        'exp is missing, this is required in the id_token'\r\n      );\r\n    }\r\n\r\n    if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'iat')) {\r\n      validated = false;\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        'iat is missing, this is required in the id_token'\r\n      );\r\n    }\r\n\r\n    return validated;\r\n  }\r\n\r\n  // id_token C8: The iat Claim can be used to reject tokens that were issued too far away from the current time,\r\n  // limiting the amount of time that nonces need to be stored to prevent attacks.The acceptable range is Client specific.\r\n  validateIdTokenIatMaxOffset(\r\n    dataIdToken: any,\r\n    maxOffsetAllowedInSeconds: number,\r\n    disableIatOffsetValidation: boolean,\r\n    configuration: OpenIdConfiguration\r\n  ): boolean {\r\n    if (disableIatOffsetValidation) {\r\n      return true;\r\n    }\r\n\r\n    if (!Object.prototype.hasOwnProperty.call(dataIdToken, 'iat')) {\r\n      return false;\r\n    }\r\n\r\n    const dateTimeIatIdToken = new Date(0); // The 0 here is the key, which sets the date to the epoch\r\n\r\n    dateTimeIatIdToken.setUTCSeconds(dataIdToken.iat);\r\n    maxOffsetAllowedInSeconds = maxOffsetAllowedInSeconds || 0;\r\n\r\n    const nowInUtc = new Date(new Date().toUTCString());\r\n    const diff = nowInUtc.valueOf() - dateTimeIatIdToken.valueOf();\r\n    const maxOffsetAllowedInMilliseconds = maxOffsetAllowedInSeconds * 1000;\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      `validate id token iat max offset ${diff} < ${maxOffsetAllowedInMilliseconds}`\r\n    );\r\n\r\n    if (diff > 0) {\r\n      return diff < maxOffsetAllowedInMilliseconds;\r\n    }\r\n\r\n    return -diff < maxOffsetAllowedInMilliseconds;\r\n  }\r\n\r\n  // id_token C9: The value of the nonce Claim MUST be checked to verify that it is the same value as the one\r\n  // that was sent in the Authentication Request.The Client SHOULD check the nonce value for replay attacks.\r\n  // The precise method for detecting replay attacks is Client specific.\r\n\r\n  // However the nonce claim SHOULD not be present for the refresh_token grant type\r\n  // https://bitbucket.org/openid/connect/issues/1025/ambiguity-with-how-nonce-is-handled-on\r\n  // The current spec is ambiguous and KeyCloak does send it.\r\n  validateIdTokenNonce(\r\n    dataIdToken: any,\r\n    localNonce: any,\r\n    ignoreNonceAfterRefresh: boolean,\r\n    configuration: OpenIdConfiguration\r\n  ): boolean {\r\n    const isFromRefreshToken =\r\n      (dataIdToken.nonce === undefined || ignoreNonceAfterRefresh) &&\r\n      localNonce === TokenValidationService.refreshTokenNoncePlaceholder;\r\n\r\n    if (!isFromRefreshToken && dataIdToken.nonce !== localNonce) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        'Validate_id_token_nonce failed, dataIdToken.nonce: ' +\r\n          dataIdToken.nonce +\r\n          ' local_nonce:' +\r\n          localNonce\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  // id_token C1: The Issuer Identifier for the OpenID Provider (which is typically obtained during Discovery)\r\n  // MUST exactly match the value of the iss (issuer) Claim.\r\n  validateIdTokenIss(\r\n    dataIdToken: any,\r\n    authWellKnownEndpointsIssuer: any,\r\n    configuration: OpenIdConfiguration\r\n  ): boolean {\r\n    if (\r\n      (dataIdToken.iss as string) !== (authWellKnownEndpointsIssuer as string)\r\n    ) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        'Validate_id_token_iss failed, dataIdToken.iss: ' +\r\n          dataIdToken.iss +\r\n          ' authWellKnownEndpoints issuer:' +\r\n          authWellKnownEndpointsIssuer\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  // id_token C2: The Client MUST validate that the aud (audience) Claim contains its client_id value registered at the Issuer identified\r\n  // by the iss (issuer) Claim as an audience.\r\n  // The ID Token MUST be rejected if the ID Token does not list the Client as a valid audience, or if it contains additional audiences\r\n  // not trusted by the Client.\r\n  validateIdTokenAud(\r\n    dataIdToken: any,\r\n    aud: string | undefined,\r\n    configuration: OpenIdConfiguration\r\n  ): boolean {\r\n    if (Array.isArray(dataIdToken.aud)) {\r\n      const result = dataIdToken.aud.includes(aud);\r\n\r\n      if (!result) {\r\n        this.loggerService.logDebug(\r\n          configuration,\r\n          'Validate_id_token_aud array failed, dataIdToken.aud: ' +\r\n            dataIdToken.aud +\r\n            ' client_id:' +\r\n            aud\r\n        );\r\n\r\n        return false;\r\n      }\r\n\r\n      return true;\r\n    } else if (dataIdToken.aud !== aud) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        'Validate_id_token_aud failed, dataIdToken.aud: ' +\r\n          dataIdToken.aud +\r\n          ' client_id:' +\r\n          aud\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  validateIdTokenAzpExistsIfMoreThanOneAud(dataIdToken: any): boolean {\r\n    if (!dataIdToken) {\r\n      return false;\r\n    }\r\n\r\n    return !(\r\n      Array.isArray(dataIdToken.aud) &&\r\n      dataIdToken.aud.length > 1 &&\r\n      !dataIdToken.azp\r\n    );\r\n  }\r\n\r\n  // If an azp (authorized party) Claim is present, the Client SHOULD verify that its client_id is the Claim Value.\r\n  validateIdTokenAzpValid(\r\n    dataIdToken: any,\r\n    clientId: string | undefined\r\n  ): boolean {\r\n    if (!dataIdToken?.azp) {\r\n      return true;\r\n    }\r\n\r\n    return dataIdToken.azp === clientId;\r\n  }\r\n\r\n  validateStateFromHashCallback(\r\n    state: any,\r\n    localState: any,\r\n    configuration: OpenIdConfiguration\r\n  ): boolean {\r\n    if ((state as string) !== (localState as string)) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        'ValidateStateFromHashCallback failed, state: ' +\r\n          state +\r\n          ' local_state:' +\r\n          localState\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  // id_token C5: The Client MUST validate the signature of the ID Token according to JWS [JWS] using the algorithm specified in the alg\r\n  // Header Parameter of the JOSE Header.The Client MUST use the keys provided by the Issuer.\r\n  // id_token C6: The alg value SHOULD be RS256. Validation of tokens using other signing algorithms is described in the\r\n  // OpenID Connect Core 1.0 [OpenID.Core] specification.\r\n  validateSignatureIdToken(\r\n    idToken: string,\r\n    jwtkeys: any,\r\n    configuration: OpenIdConfiguration\r\n  ): Observable<boolean> {\r\n    if (!idToken) {\r\n      return of(true);\r\n    }\r\n\r\n    if (!jwtkeys || !jwtkeys.keys) {\r\n      return of(false);\r\n    }\r\n\r\n    const headerData = this.tokenHelperService.getHeaderFromToken(\r\n      idToken,\r\n      false,\r\n      configuration\r\n    );\r\n\r\n    if (\r\n      Object.keys(headerData).length === 0 &&\r\n      headerData.constructor === Object\r\n    ) {\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        'id token has no header data'\r\n      );\r\n\r\n      return of(false);\r\n    }\r\n\r\n    const kid: string = headerData.kid;\r\n    const alg: string = headerData.alg;\r\n    const keys: JsonWebKey[] = jwtkeys.keys;\r\n    let foundKeys: JsonWebKey[];\r\n    let key: JsonWebKey;\r\n\r\n    if (!this.keyAlgorithms.includes(alg)) {\r\n      this.loggerService.logWarning(configuration, 'alg not supported', alg);\r\n\r\n      return of(false);\r\n    }\r\n\r\n    const kty = alg2kty(alg);\r\n    const use = 'sig';\r\n\r\n    try {\r\n      foundKeys = kid\r\n        ? this.jwkExtractor.extractJwk(keys, { kid, kty, use }, false)\r\n        : this.jwkExtractor.extractJwk(keys, { kty, use }, false);\r\n\r\n      if (foundKeys.length === 0) {\r\n        foundKeys = kid\r\n          ? this.jwkExtractor.extractJwk(keys, { kid, kty })\r\n          : this.jwkExtractor.extractJwk(keys, { kty });\r\n      }\r\n\r\n      key = foundKeys[0];\r\n    } catch (e: any) {\r\n      this.loggerService.logError(configuration, e);\r\n\r\n      return of(false);\r\n    }\r\n\r\n    const algorithm = getImportAlg(alg);\r\n    const signingInput = this.tokenHelperService.getSigningInputFromToken(\r\n      idToken,\r\n      true,\r\n      configuration\r\n    );\r\n    const rawSignature = this.tokenHelperService.getSignatureFromToken(\r\n      idToken,\r\n      true,\r\n      configuration\r\n    );\r\n\r\n    return from(\r\n      this.jwkWindowCryptoService.importVerificationKey(key, algorithm)\r\n    ).pipe(\r\n      mergeMap((cryptoKey: CryptoKey) => {\r\n        const signature: Uint8Array = base64url.parse(rawSignature, {\r\n          loose: true,\r\n        });\r\n        const verifyAlgorithm = getVerifyAlg(alg);\r\n\r\n        return from(\r\n          this.jwkWindowCryptoService.verifyKey(\r\n            verifyAlgorithm,\r\n            cryptoKey,\r\n            signature,\r\n            signingInput\r\n          )\r\n        );\r\n      }),\r\n      tap((isValid: boolean) => {\r\n        if (!isValid) {\r\n          this.loggerService.logWarning(\r\n            configuration,\r\n            'incorrect Signature, validation failed for id_token'\r\n          );\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  // Accepts ID Token without 'kid' claim in JOSE header if only one JWK supplied in 'jwks_url'\r\n  //// private validate_no_kid_in_header_only_one_allowed_in_jwtkeys(header_data: any, jwtkeys: any): boolean {\r\n  ////    this.oidcSecurityCommon.logDebug('amount of jwtkeys.keys: ' + jwtkeys.keys.length);\r\n  ////    if (!header_data.hasOwnProperty('kid')) {\r\n  ////        // no kid defined in Jose header\r\n  ////        if (jwtkeys.keys.length != 1) {\r\n  ////            this.oidcSecurityCommon.logDebug('jwtkeys.keys.length != 1 and no kid in header');\r\n  ////            return false;\r\n  ////        }\r\n  ////    }\r\n\r\n  ////    return true;\r\n  //// }\r\n\r\n  // Access Token Validation\r\n  // access_token C1: Hash the octets of the ASCII representation of the access_token with the hash algorithm specified in JWA[JWA]\r\n  // for the alg Header Parameter of the ID Token's JOSE Header. For instance, if the alg is RS256, the hash algorithm used is SHA-256.\r\n  // access_token C2: Take the left- most half of the hash and base64url- encode it.\r\n  // access_token C3: The value of at_hash in the ID Token MUST match the value produced in the previous step if at_hash\r\n  // is present in the ID Token.\r\n  validateIdTokenAtHash(\r\n    accessToken: string,\r\n    atHash: string,\r\n    idTokenAlg: string,\r\n    configuration: OpenIdConfiguration\r\n  ): Observable<boolean> {\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'at_hash from the server:' + atHash\r\n    );\r\n\r\n    // 'sha256' 'sha384' 'sha512'\r\n    let sha = 'SHA-256';\r\n\r\n    if (idTokenAlg.includes('384')) {\r\n      sha = 'SHA-384';\r\n    } else if (idTokenAlg.includes('512')) {\r\n      sha = 'SHA-512';\r\n    }\r\n\r\n    return this.jwtWindowCryptoService\r\n      .generateAtHash('' + accessToken, sha)\r\n      .pipe(\r\n        mergeMap((hash: string) => {\r\n          this.loggerService.logDebug(\r\n            configuration,\r\n            'at_hash client validation not decoded:' + hash\r\n          );\r\n          if (hash === atHash) {\r\n            return of(true); // isValid;\r\n          } else {\r\n            return this.jwtWindowCryptoService\r\n              .generateAtHash('' + decodeURIComponent(accessToken), sha)\r\n              .pipe(\r\n                map((newHash: string) => {\r\n                  this.loggerService.logDebug(\r\n                    configuration,\r\n                    '-gen access--' + hash\r\n                  );\r\n\r\n                  return newHash === atHash;\r\n                })\r\n              );\r\n          }\r\n        })\r\n      );\r\n  }\r\n\r\n  private millisToMinutesAndSeconds(millis: number): string {\r\n    const minutes = Math.floor(millis / 60000);\r\n    const seconds = ((millis % 60000) / 1000).toFixed(0);\r\n\r\n    return minutes + ':' + (+seconds < 10 ? '0' : '') + seconds;\r\n  }\r\n\r\n  private calculateNowWithOffset(offsetSeconds: number): number {\r\n    return new Date(new Date().toUTCString()).valueOf() + offsetSeconds * 1000;\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, throwError } from 'rxjs';\r\nimport { distinctUntilChanged } from 'rxjs/operators';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { AuthResult } from '../flows/callback-context';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { EventTypes } from '../public-events/event-types';\r\nimport { PublicEventsService } from '../public-events/public-events.service';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { TokenValidationService } from '../validation/token-validation.service';\r\nimport { AuthenticatedResult } from './auth-result';\r\nimport { AuthStateResult } from './auth-state';\r\n\r\nconst DEFAULT_AUTHRESULT = {\r\n  isAuthenticated: false,\r\n  allConfigsAuthenticated: [],\r\n};\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthStateService {\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly publicEventsService = inject(PublicEventsService);\r\n  private readonly tokenValidationService = inject(TokenValidationService);\r\n\r\n  private readonly authenticatedInternal$ =\r\n    new BehaviorSubject<AuthenticatedResult>(DEFAULT_AUTHRESULT);\r\n\r\n  get authenticated$(): Observable<AuthenticatedResult> {\r\n    return this.authenticatedInternal$\r\n      .asObservable()\r\n      .pipe(distinctUntilChanged());\r\n  }\r\n\r\n  setAuthenticatedAndFireEvent(allConfigs: OpenIdConfiguration[]): void {\r\n    const result = this.composeAuthenticatedResult(allConfigs);\r\n\r\n    this.authenticatedInternal$.next(result);\r\n  }\r\n\r\n  setUnauthenticatedAndFireEvent(\r\n    currentConfig: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): void {\r\n    this.storagePersistenceService.resetAuthStateInStorage(currentConfig);\r\n\r\n    const result = this.composeUnAuthenticatedResult(allConfigs);\r\n\r\n    this.authenticatedInternal$.next(result);\r\n  }\r\n\r\n  updateAndPublishAuthState(authenticationResult: AuthStateResult): void {\r\n    this.publicEventsService.fireEvent<AuthStateResult>(\r\n      EventTypes.NewAuthenticationResult,\r\n      authenticationResult\r\n    );\r\n  }\r\n\r\n  setAuthorizationData(\r\n    accessToken: string,\r\n    authResult: AuthResult | null,\r\n    currentConfig: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): void {\r\n    this.loggerService.logDebug(\r\n      currentConfig,\r\n      `storing the accessToken '${accessToken}'`\r\n    );\r\n\r\n    this.storagePersistenceService.write(\r\n      'authzData',\r\n      accessToken,\r\n      currentConfig\r\n    );\r\n    this.persistAccessTokenExpirationTime(authResult, currentConfig);\r\n    this.setAuthenticatedAndFireEvent(allConfigs);\r\n  }\r\n\r\n  getAccessToken(configuration: OpenIdConfiguration | null): string {\r\n    if (!configuration) {\r\n      return '';\r\n    }\r\n\r\n    if (!this.isAuthenticated(configuration)) {\r\n      return '';\r\n    }\r\n\r\n    const token = this.storagePersistenceService.getAccessToken(configuration);\r\n\r\n    return this.decodeURIComponentSafely(token);\r\n  }\r\n\r\n  getIdToken(configuration: OpenIdConfiguration | null): string {\r\n    if (!configuration) {\r\n      return '';\r\n    }\r\n\r\n    if (!this.isAuthenticated(configuration)) {\r\n      return '';\r\n    }\r\n\r\n    const token = this.storagePersistenceService.getIdToken(configuration);\r\n\r\n    return this.decodeURIComponentSafely(token);\r\n  }\r\n\r\n  getRefreshToken(configuration: OpenIdConfiguration | null): string {\r\n    if (!configuration) {\r\n      return '';\r\n    }\r\n\r\n    if (!this.isAuthenticated(configuration)) {\r\n      return '';\r\n    }\r\n\r\n    const token = this.storagePersistenceService.getRefreshToken(configuration);\r\n\r\n    return this.decodeURIComponentSafely(token);\r\n  }\r\n\r\n  getAuthenticationResult(\r\n    configuration: OpenIdConfiguration | null\r\n  ): AuthResult | null {\r\n    if (!configuration) {\r\n      return null;\r\n    }\r\n\r\n    if (!this.isAuthenticated(configuration)) {\r\n      return null;\r\n    }\r\n\r\n    return this.storagePersistenceService.getAuthenticationResult(\r\n      configuration\r\n    );\r\n  }\r\n\r\n  areAuthStorageTokensValid(\r\n    configuration: OpenIdConfiguration | null\r\n  ): boolean {\r\n    if (!configuration) {\r\n      return false;\r\n    }\r\n\r\n    if (!this.isAuthenticated(configuration)) {\r\n      return false;\r\n    }\r\n\r\n    if (this.hasIdTokenExpiredAndRenewCheckIsEnabled(configuration)) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        'persisted idToken is expired'\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    if (this.hasAccessTokenExpiredIfExpiryExists(configuration)) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        'persisted accessToken is expired'\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'persisted idToken and accessToken are valid'\r\n    );\r\n\r\n    return true;\r\n  }\r\n\r\n  hasIdTokenExpiredAndRenewCheckIsEnabled(\r\n    configuration: OpenIdConfiguration\r\n  ): boolean {\r\n    const {\r\n      renewTimeBeforeTokenExpiresInSeconds,\r\n      triggerRefreshWhenIdTokenExpired,\r\n      disableIdTokenValidation,\r\n    } = configuration;\r\n\r\n    if (!triggerRefreshWhenIdTokenExpired || disableIdTokenValidation) {\r\n      return false;\r\n    }\r\n    const tokenToCheck =\r\n      this.storagePersistenceService.getIdToken(configuration);\r\n    const idTokenExpired = this.tokenValidationService.hasIdTokenExpired(\r\n      tokenToCheck,\r\n      configuration,\r\n      renewTimeBeforeTokenExpiresInSeconds\r\n    );\r\n\r\n    if (idTokenExpired) {\r\n      this.publicEventsService.fireEvent<boolean>(\r\n        EventTypes.IdTokenExpired,\r\n        idTokenExpired\r\n      );\r\n    }\r\n\r\n    return idTokenExpired;\r\n  }\r\n\r\n  hasAccessTokenExpiredIfExpiryExists(\r\n    configuration: OpenIdConfiguration\r\n  ): boolean {\r\n    const { renewTimeBeforeTokenExpiresInSeconds } = configuration;\r\n    const accessTokenExpiresIn = this.storagePersistenceService.read(\r\n      'access_token_expires_at',\r\n      configuration\r\n    );\r\n    const accessTokenHasNotExpired =\r\n      this.tokenValidationService.validateAccessTokenNotExpired(\r\n        accessTokenExpiresIn,\r\n        configuration,\r\n        renewTimeBeforeTokenExpiresInSeconds\r\n      );\r\n    const hasExpired = !accessTokenHasNotExpired;\r\n\r\n    if (hasExpired) {\r\n      this.publicEventsService.fireEvent<boolean>(\r\n        EventTypes.TokenExpired,\r\n        hasExpired\r\n      );\r\n    }\r\n\r\n    return hasExpired;\r\n  }\r\n\r\n  isAuthenticated(configuration: OpenIdConfiguration | null): boolean {\r\n    if (!configuration) {\r\n      throwError(\r\n        () =>\r\n          new Error(\r\n            'Please provide a configuration before setting up the module'\r\n          )\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    const hasAccessToken =\r\n      !!this.storagePersistenceService.getAccessToken(configuration);\r\n    const hasIdToken =\r\n      !!this.storagePersistenceService.getIdToken(configuration);\r\n\r\n    return hasAccessToken && hasIdToken;\r\n  }\r\n\r\n  private decodeURIComponentSafely(token: string): string {\r\n    if (token) {\r\n      return decodeURIComponent(token);\r\n    } else {\r\n      return '';\r\n    }\r\n  }\r\n\r\n  private persistAccessTokenExpirationTime(\r\n    authResult: AuthResult | null,\r\n    configuration: OpenIdConfiguration\r\n  ): void {\r\n    if (authResult?.expires_in) {\r\n      const accessTokenExpiryTime =\r\n        new Date(new Date().toUTCString()).valueOf() +\r\n        authResult.expires_in * 1000;\r\n\r\n      this.storagePersistenceService.write(\r\n        'access_token_expires_at',\r\n        accessTokenExpiryTime,\r\n        configuration\r\n      );\r\n    }\r\n  }\r\n\r\n  private composeAuthenticatedResult(\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): AuthenticatedResult {\r\n    if (allConfigs.length === 1) {\r\n      const { configId } = allConfigs[0];\r\n\r\n      return {\r\n        isAuthenticated: true,\r\n        allConfigsAuthenticated: [\r\n          { configId: configId ?? '', isAuthenticated: true },\r\n        ],\r\n      };\r\n    }\r\n\r\n    return this.checkAllConfigsIfTheyAreAuthenticated(allConfigs);\r\n  }\r\n\r\n  private composeUnAuthenticatedResult(\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): AuthenticatedResult {\r\n    if (allConfigs.length === 1) {\r\n      const { configId } = allConfigs[0];\r\n\r\n      return {\r\n        isAuthenticated: false,\r\n        allConfigsAuthenticated: [\r\n          { configId: configId ?? '', isAuthenticated: false },\r\n        ],\r\n      };\r\n    }\r\n\r\n    return this.checkAllConfigsIfTheyAreAuthenticated(allConfigs);\r\n  }\r\n\r\n  private checkAllConfigsIfTheyAreAuthenticated(\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): AuthenticatedResult {\r\n    const allConfigsAuthenticated = allConfigs.map((config) => ({\r\n      configId: config.configId ?? '',\r\n      isAuthenticated: this.isAuthenticated(config),\r\n    }));\r\n    const isAuthenticated = allConfigsAuthenticated.every(\r\n      (x) => x.isAuthenticated\r\n    );\r\n\r\n    return { allConfigsAuthenticated, isAuthenticated };\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\n\r\nconst STORAGE_KEY = 'redirect';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AutoLoginService {\r\n  private readonly storageService = inject(StoragePersistenceService);\r\n  private readonly router = inject(Router);\r\n\r\n  checkSavedRedirectRouteAndNavigate(config: OpenIdConfiguration | null): void {\r\n    if (!config) {\r\n      return;\r\n    }\r\n    const savedRouteForRedirect = this.getStoredRedirectRoute(config);\r\n\r\n    if (savedRouteForRedirect != null) {\r\n      this.deleteStoredRedirectRoute(config);\r\n      this.router.navigateByUrl(savedRouteForRedirect);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Saves the redirect URL to storage.\r\n   *\r\n   * @param config The OpenId configuration.\r\n   * @param url The redirect URL to save.\r\n   */\r\n  saveRedirectRoute(config: OpenIdConfiguration | null, url: string): void {\r\n    if (!config) {\r\n      return;\r\n    }\r\n\r\n    this.storageService.write(STORAGE_KEY, url, config);\r\n  }\r\n\r\n  /**\r\n   * Gets the stored redirect URL from storage.\r\n   */\r\n  private getStoredRedirectRoute(config: OpenIdConfiguration): string {\r\n    return this.storageService.read(STORAGE_KEY, config);\r\n  }\r\n\r\n  /**\r\n   * Removes the redirect URL from storage.\r\n   */\r\n  private deleteStoredRedirectRoute(config: OpenIdConfiguration): void {\r\n    this.storageService.remove(STORAGE_KEY, config);\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\n\n@Injectable({ providedIn: 'root' })\nexport class FlowHelper {\n  isCurrentFlowCodeFlow(configuration: OpenIdConfiguration): boolean {\n    return this.currentFlowIs('code', configuration);\n  }\n\n  isCurrentFlowAnyImplicitFlow(configuration: OpenIdConfiguration): boolean {\n    return (\n      this.isCurrentFlowImplicitFlowWithAccessToken(configuration) ||\n      this.isCurrentFlowImplicitFlowWithoutAccessToken(configuration)\n    );\n  }\n\n  isCurrentFlowCodeFlowWithRefreshTokens(\n    configuration: OpenIdConfiguration | null\n  ): boolean {\n    if (!configuration) {\n      return false;\n    }\n\n    const { useRefreshToken } = configuration;\n\n    return (\n      this.isCurrentFlowCodeFlow(configuration) && Boolean(useRefreshToken)\n    );\n  }\n\n  isCurrentFlowImplicitFlowWithAccessToken(\n    configuration: OpenIdConfiguration\n  ): boolean {\n    return this.currentFlowIs('id_token token', configuration);\n  }\n\n  currentFlowIs(\n    flowTypes: string[] | string,\n    configuration: OpenIdConfiguration\n  ): boolean {\n    const { responseType } = configuration;\n\n    if (Array.isArray(flowTypes)) {\n      return flowTypes.some((x) => responseType === x);\n    }\n\n    return responseType === flowTypes;\n  }\n\n  private isCurrentFlowImplicitFlowWithoutAccessToken(\n    configuration: OpenIdConfiguration\n  ): boolean {\n    return this.currentFlowIs('id_token', configuration);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { CryptoService } from '../../utils/crypto/crypto.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RandomService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly cryptoService = inject(CryptoService);\r\n\r\n  createRandom(\r\n    requiredLength: number,\r\n    configuration: OpenIdConfiguration\r\n  ): string {\r\n    if (requiredLength <= 0) {\r\n      return '';\r\n    }\r\n\r\n    if (requiredLength > 0 && requiredLength < 7) {\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        `RandomService called with ${requiredLength} but 7 chars is the minimum, returning 10 chars`\r\n      );\r\n      requiredLength = 10;\r\n    }\r\n\r\n    const length = requiredLength - 6;\r\n    const arr = new Uint8Array(Math.floor(length / 2));\r\n    const crypto = this.cryptoService.getCrypto();\r\n\r\n    if (crypto) {\r\n      crypto.getRandomValues(arr);\r\n    }\r\n\r\n    return Array.from(arr, this.toHex).join('') + this.randomString(7);\r\n  }\r\n\r\n  private toHex(dec: number): string {\r\n    return ('0' + dec.toString(16)).substr(-2);\r\n  }\r\n\r\n  private randomString(length: number): string {\r\n    let result = '';\r\n    const characters =\r\n      'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n    const values = new Uint32Array(length);\r\n    const crypto = this.cryptoService.getCrypto();\r\n\r\n    if (crypto) {\r\n      crypto.getRandomValues(values);\r\n      for (let i = 0; i < length; i++) {\r\n        result += characters[values[i] % characters.length];\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { SilentRenewRunning } from './flows.models';\r\nimport { RandomService } from './random/random.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FlowsDataService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly randomService = inject(RandomService);\r\n\r\n  createNonce(configuration: OpenIdConfiguration): string {\r\n    const nonce = this.randomService.createRandom(40, configuration);\r\n\r\n    this.loggerService.logDebug(configuration, 'Nonce created. nonce:' + nonce);\r\n    this.setNonce(nonce, configuration);\r\n\r\n    return nonce;\r\n  }\r\n\r\n  setNonce(nonce: string, configuration: OpenIdConfiguration): void {\r\n    this.storagePersistenceService.write('authNonce', nonce, configuration);\r\n  }\r\n\r\n  getAuthStateControl(configuration: OpenIdConfiguration | null): string {\r\n    if (!configuration) {\r\n      return '';\r\n    }\r\n\r\n    return this.storagePersistenceService.read(\r\n      'authStateControl',\r\n      configuration\r\n    );\r\n  }\r\n\r\n  setAuthStateControl(\r\n    authStateControl: string,\r\n    configuration: OpenIdConfiguration | null\r\n  ): boolean {\r\n    if (!configuration) {\r\n      return false;\r\n    }\r\n\r\n    return this.storagePersistenceService.write(\r\n      'authStateControl',\r\n      authStateControl,\r\n      configuration\r\n    );\r\n  }\r\n\r\n  getExistingOrCreateAuthStateControl(configuration: OpenIdConfiguration): any {\r\n    let state = this.storagePersistenceService.read(\r\n      'authStateControl',\r\n      configuration\r\n    );\r\n\r\n    if (!state) {\r\n      state = this.randomService.createRandom(40, configuration);\r\n      this.storagePersistenceService.write(\r\n        'authStateControl',\r\n        state,\r\n        configuration\r\n      );\r\n    }\r\n\r\n    return state;\r\n  }\r\n\r\n  setSessionState(sessionState: any, configuration: OpenIdConfiguration): void {\r\n    this.storagePersistenceService.write(\r\n      'session_state',\r\n      sessionState,\r\n      configuration\r\n    );\r\n  }\r\n\r\n  resetStorageFlowData(configuration: OpenIdConfiguration): void {\r\n    this.storagePersistenceService.resetStorageFlowData(configuration);\r\n  }\r\n\r\n  getCodeVerifier(configuration: OpenIdConfiguration): any {\r\n    return this.storagePersistenceService.read('codeVerifier', configuration);\r\n  }\r\n\r\n  createCodeVerifier(configuration: OpenIdConfiguration): string {\r\n    const codeVerifier = this.randomService.createRandom(67, configuration);\r\n\r\n    this.storagePersistenceService.write(\r\n      'codeVerifier',\r\n      codeVerifier,\r\n      configuration\r\n    );\r\n\r\n    return codeVerifier;\r\n  }\r\n\r\n  isCodeFlowInProgress(configuration: OpenIdConfiguration): boolean {\r\n    return !!this.storagePersistenceService.read(\r\n      'storageCodeFlowInProgress',\r\n      configuration\r\n    );\r\n  }\r\n\r\n  setCodeFlowInProgress(configuration: OpenIdConfiguration): void {\r\n    this.storagePersistenceService.write(\r\n      'storageCodeFlowInProgress',\r\n      true,\r\n      configuration\r\n    );\r\n  }\r\n\r\n  resetCodeFlowInProgress(configuration: OpenIdConfiguration): void {\r\n    this.storagePersistenceService.write(\r\n      'storageCodeFlowInProgress',\r\n      false,\r\n      configuration\r\n    );\r\n  }\r\n\r\n  isSilentRenewRunning(configuration: OpenIdConfiguration): boolean {\r\n    const { configId, silentRenewTimeoutInSeconds } = configuration;\r\n    const storageObject = this.getSilentRenewRunningStorageEntry(configuration);\r\n\r\n    if (!storageObject) {\r\n      return false;\r\n    }\r\n\r\n    if (storageObject.state === 'not-running') {\r\n      return false;\r\n    }\r\n\r\n    const timeOutInMilliseconds = (silentRenewTimeoutInSeconds ?? 0) * 1000;\r\n    const dateOfLaunchedProcessUtc = Date.parse(\r\n      storageObject.dateOfLaunchedProcessUtc\r\n    );\r\n    const currentDateUtc = Date.parse(new Date().toISOString());\r\n    const elapsedTimeInMilliseconds = Math.abs(\r\n      currentDateUtc - dateOfLaunchedProcessUtc\r\n    );\r\n    const isProbablyStuck = elapsedTimeInMilliseconds > timeOutInMilliseconds;\r\n\r\n    if (isProbablyStuck) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        'silent renew process is probably stuck, state will be reset.',\r\n        configId\r\n      );\r\n      this.resetSilentRenewRunning(configuration);\r\n\r\n      return false;\r\n    }\r\n\r\n    return storageObject.state === 'running';\r\n  }\r\n\r\n  setSilentRenewRunning(configuration: OpenIdConfiguration): void {\r\n    const storageObject: SilentRenewRunning = {\r\n      state: 'running',\r\n      dateOfLaunchedProcessUtc: new Date().toISOString(),\r\n    };\r\n\r\n    this.storagePersistenceService.write(\r\n      'storageSilentRenewRunning',\r\n      JSON.stringify(storageObject),\r\n      configuration\r\n    );\r\n  }\r\n\r\n  resetSilentRenewRunning(configuration: OpenIdConfiguration | null): void {\r\n    if (!configuration) {\r\n      return;\r\n    }\r\n\r\n    this.storagePersistenceService.write(\r\n      'storageSilentRenewRunning',\r\n      '',\r\n      configuration\r\n    );\r\n  }\r\n\r\n  private getSilentRenewRunningStorageEntry(\r\n    configuration: OpenIdConfiguration\r\n  ): SilentRenewRunning {\r\n    const storageEntry = this.storagePersistenceService.read(\r\n      'storageSilentRenewRunning',\r\n      configuration\r\n    );\r\n\r\n    if (!storageEntry) {\r\n      return {\r\n        dateOfLaunchedProcessUtc: '',\r\n        state: 'not-running',\r\n      };\r\n    }\r\n\r\n    return JSON.parse(storageEntry);\r\n  }\r\n}\r\n","import { HttpParameterCodec } from '@angular/common/http';\n\nexport class UriEncoder implements HttpParameterCodec {\n  encodeKey(key: string): string {\n    return encodeURIComponent(key);\n  }\n\n  encodeValue(value: string): string {\n    return encodeURIComponent(value);\n  }\n\n  decodeKey(key: string): string {\n    return decodeURIComponent(key);\n  }\n\n  decodeValue(value: string): string {\n    return decodeURIComponent(value);\n  }\n}\n","import { HttpParams } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { AuthOptions } from '../../auth-options';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { FlowsDataService } from '../../flows/flows-data.service';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { StoragePersistenceService } from '../../storage/storage-persistence.service';\r\nimport { JwtWindowCryptoService } from '../../validation/jwt-window-crypto.service';\r\nimport { FlowHelper } from '../flowHelper/flow-helper.service';\r\nimport { UriEncoder } from './uri-encoder';\r\n\r\nconst CALLBACK_PARAMS_TO_CHECK = ['code', 'state', 'token', 'id_token'];\r\nconst AUTH0_ENDPOINT = 'auth0.com';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UrlService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly flowHelper = inject(FlowHelper);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly jwtWindowCryptoService = inject(JwtWindowCryptoService);\r\n\r\n  getUrlParameter(urlToCheck: string, name: string): string {\r\n    if (!urlToCheck) {\r\n      return '';\r\n    }\r\n\r\n    if (!name) {\r\n      return '';\r\n    }\r\n\r\n    name = name.replace(/[[]/, '\\\\[').replace(/[\\]]/, '\\\\]');\r\n    const regex = new RegExp('[\\\\?&#]' + name + '=([^&#]*)');\r\n    const results = regex.exec(urlToCheck);\r\n\r\n    return results === null ? '' : decodeURIComponent(results[1]);\r\n  }\r\n\r\n  getUrlWithoutQueryParameters(url: URL): URL {\r\n    const u = new URL(url.toString());\r\n    const keys = [];\r\n\r\n    for (const key of u.searchParams.keys()) {\r\n      keys.push(key);\r\n    }\r\n\r\n    keys.forEach((key) => {\r\n      u.searchParams.delete(key);\r\n    });\r\n\r\n    return u;\r\n  }\r\n\r\n  queryParametersExist(\r\n    expected: URLSearchParams,\r\n    actual: URLSearchParams\r\n  ): boolean {\r\n    let r = true;\r\n\r\n    expected.forEach((v, k) => {\r\n      if (!actual.has(k)) {\r\n        r = false;\r\n      }\r\n    });\r\n\r\n    return r;\r\n  }\r\n\r\n  isCallbackFromSts(currentUrl: string, config?: OpenIdConfiguration): boolean {\r\n    if (config && config.checkRedirectUrlWhenCheckingIfIsCallback) {\r\n      const currentUrlInstance = new URL(currentUrl);\r\n      const redirectUrl = this.getRedirectUrl(config);\r\n\r\n      if (!redirectUrl) {\r\n        this.loggerService.logError(\r\n          config,\r\n          `UrlService.isCallbackFromSts: could not get redirectUrl from config, was: `,\r\n          redirectUrl\r\n        );\r\n\r\n        return false;\r\n      }\r\n\r\n      const redirectUriUrlInstance = new URL(redirectUrl);\r\n      const redirectUriWithoutQueryParams = this.getUrlWithoutQueryParameters(\r\n        redirectUriUrlInstance\r\n      ).toString();\r\n      const currentUrlWithoutQueryParams =\r\n        this.getUrlWithoutQueryParameters(currentUrlInstance).toString();\r\n      const redirectUriQueryParamsArePresentInCurrentUrl =\r\n        this.queryParametersExist(\r\n          redirectUriUrlInstance.searchParams,\r\n          currentUrlInstance.searchParams\r\n        );\r\n\r\n      if (\r\n        redirectUriWithoutQueryParams !== currentUrlWithoutQueryParams ||\r\n        !redirectUriQueryParamsArePresentInCurrentUrl\r\n      ) {\r\n        this.loggerService.logDebug(\r\n          config,\r\n          'UrlService.isCallbackFromSts: configured redirectUrl does not match with the current url'\r\n        );\r\n\r\n        return false;\r\n      }\r\n    }\r\n\r\n    return CALLBACK_PARAMS_TO_CHECK.some(\r\n      (x) => !!this.getUrlParameter(currentUrl, x)\r\n    );\r\n  }\r\n\r\n  getRefreshSessionSilentRenewUrl(\r\n    config: OpenIdConfiguration,\r\n    customParams?: { [key: string]: string | number | boolean }\r\n  ): Observable<string | null> {\r\n    if (this.flowHelper.isCurrentFlowCodeFlow(config)) {\r\n      return this.createUrlCodeFlowWithSilentRenew(config, customParams);\r\n    }\r\n\r\n    return of(this.createUrlImplicitFlowWithSilentRenew(config, customParams));\r\n  }\r\n\r\n  getAuthorizeParUrl(\r\n    requestUri: string,\r\n    configuration: OpenIdConfiguration\r\n  ): string | null {\r\n    const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      configuration\r\n    );\r\n\r\n    if (!authWellKnownEndPoints) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        'authWellKnownEndpoints is undefined'\r\n      );\r\n\r\n      return null;\r\n    }\r\n\r\n    const authorizationEndpoint = authWellKnownEndPoints.authorizationEndpoint;\r\n\r\n    if (!authorizationEndpoint) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `Can not create an authorize URL when authorizationEndpoint is '${authorizationEndpoint}'`\r\n      );\r\n\r\n      return null;\r\n    }\r\n\r\n    const { clientId } = configuration;\r\n\r\n    if (!clientId) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `getAuthorizeParUrl could not add clientId because it was: `,\r\n        clientId\r\n      );\r\n\r\n      return null;\r\n    }\r\n\r\n    const urlParts = authorizationEndpoint.split('?');\r\n    const authorizationUrl = urlParts[0];\r\n    const existingParams = urlParts[1];\r\n    let params = this.createHttpParams(existingParams);\r\n\r\n    params = params.set('request_uri', requestUri);\r\n    params = params.append('client_id', clientId);\r\n\r\n    return `${authorizationUrl}?${params}`;\r\n  }\r\n\r\n  getAuthorizeUrl(\r\n    config: OpenIdConfiguration | null,\r\n    authOptions?: AuthOptions\r\n  ): Observable<string | null> {\r\n    if (!config) {\r\n      return of(null);\r\n    }\r\n\r\n    if (this.flowHelper.isCurrentFlowCodeFlow(config)) {\r\n      return this.createUrlCodeFlowAuthorize(config, authOptions);\r\n    }\r\n\r\n    return of(this.createUrlImplicitFlowAuthorize(config, authOptions) || '');\r\n  }\r\n\r\n  getEndSessionEndpoint(configuration: OpenIdConfiguration): {\r\n    url: string;\r\n    existingParams: string;\r\n  } {\r\n    const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      configuration\r\n    );\r\n    const endSessionEndpoint = authWellKnownEndPoints?.endSessionEndpoint;\r\n\r\n    if (!endSessionEndpoint) {\r\n      return {\r\n        url: '',\r\n        existingParams: '',\r\n      };\r\n    }\r\n\r\n    const urlParts = endSessionEndpoint.split('?');\r\n    const url = urlParts[0];\r\n    const existingParams = urlParts[1] ?? '';\r\n\r\n    return {\r\n      url,\r\n      existingParams,\r\n    };\r\n  }\r\n\r\n  getEndSessionUrl(\r\n    configuration: OpenIdConfiguration | null,\r\n    customParams?: { [p: string]: string | number | boolean }\r\n  ): string | null {\r\n    if (!configuration) {\r\n      return null;\r\n    }\r\n\r\n    const idToken = this.storagePersistenceService.getIdToken(configuration);\r\n    const { customParamsEndSessionRequest } = configuration;\r\n    const mergedParams = { ...customParamsEndSessionRequest, ...customParams };\r\n\r\n    return this.createEndSessionUrl(idToken, configuration, mergedParams);\r\n  }\r\n\r\n  createRevocationEndpointBodyAccessToken(\r\n    token: string,\r\n    configuration: OpenIdConfiguration\r\n  ): string | null {\r\n    const clientId = this.getClientId(configuration);\r\n\r\n    if (!clientId) {\r\n      return null;\r\n    }\r\n\r\n    let params = this.createHttpParams();\r\n\r\n    params = params.set('client_id', clientId);\r\n    params = params.set('token', token);\r\n    params = params.set('token_type_hint', 'access_token');\r\n\r\n    return params.toString();\r\n  }\r\n\r\n  createRevocationEndpointBodyRefreshToken(\r\n    token: string,\r\n    configuration: OpenIdConfiguration\r\n  ): string | null {\r\n    const clientId = this.getClientId(configuration);\r\n\r\n    if (!clientId) {\r\n      return null;\r\n    }\r\n\r\n    let params = this.createHttpParams();\r\n\r\n    params = params.set('client_id', clientId);\r\n    params = params.set('token', token);\r\n    params = params.set('token_type_hint', 'refresh_token');\r\n\r\n    return params.toString();\r\n  }\r\n\r\n  getRevocationEndpointUrl(configuration: OpenIdConfiguration): string | null {\r\n    const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      configuration\r\n    );\r\n    const revocationEndpoint = authWellKnownEndPoints?.revocationEndpoint;\r\n\r\n    if (!revocationEndpoint) {\r\n      return null;\r\n    }\r\n\r\n    const urlParts = revocationEndpoint.split('?');\r\n\r\n    return urlParts[0];\r\n  }\r\n\r\n  createBodyForCodeFlowCodeRequest(\r\n    code: string,\r\n    configuration: OpenIdConfiguration,\r\n    customTokenParams?: { [p: string]: string | number | boolean }\r\n  ): string | null {\r\n    const clientId = this.getClientId(configuration);\r\n\r\n    if (!clientId) {\r\n      return null;\r\n    }\r\n\r\n    let params = this.createHttpParams();\r\n\r\n    params = params.set('grant_type', 'authorization_code');\r\n    params = params.set('client_id', clientId);\r\n\r\n    if (!configuration.disablePkce) {\r\n      const codeVerifier = this.flowsDataService.getCodeVerifier(configuration);\r\n\r\n      if (!codeVerifier) {\r\n        this.loggerService.logError(\r\n          configuration,\r\n          `CodeVerifier is not set `,\r\n          codeVerifier\r\n        );\r\n\r\n        return null;\r\n      }\r\n\r\n      params = params.set('code_verifier', codeVerifier);\r\n    }\r\n\r\n    params = params.set('code', code);\r\n\r\n    if (customTokenParams) {\r\n      params = this.appendCustomParams({ ...customTokenParams }, params);\r\n    }\r\n\r\n    const silentRenewUrl = this.getSilentRenewUrl(configuration);\r\n\r\n    if (\r\n      this.flowsDataService.isSilentRenewRunning(configuration) &&\r\n      silentRenewUrl\r\n    ) {\r\n      params = params.set('redirect_uri', silentRenewUrl);\r\n\r\n      return params.toString();\r\n    }\r\n\r\n    const redirectUrl = this.getRedirectUrl(configuration);\r\n\r\n    if (!redirectUrl) {\r\n      return null;\r\n    }\r\n\r\n    params = params.set('redirect_uri', redirectUrl);\r\n\r\n    return params.toString();\r\n  }\r\n\r\n  createBodyForCodeFlowRefreshTokensRequest(\r\n    refreshToken: string,\r\n    configuration: OpenIdConfiguration,\r\n    customParamsRefresh?: { [key: string]: string | number | boolean }\r\n  ): string | null {\r\n    const clientId = this.getClientId(configuration);\r\n\r\n    if (!clientId) {\r\n      return null;\r\n    }\r\n\r\n    let params = this.createHttpParams();\r\n\r\n    params = params.set('grant_type', 'refresh_token');\r\n    params = params.set('client_id', clientId);\r\n    params = params.set('refresh_token', refreshToken);\r\n\r\n    if (customParamsRefresh) {\r\n      params = this.appendCustomParams({ ...customParamsRefresh }, params);\r\n    }\r\n\r\n    return params.toString();\r\n  }\r\n\r\n  createBodyForParCodeFlowRequest(\r\n    configuration: OpenIdConfiguration,\r\n    authOptions?: AuthOptions\r\n  ): Observable<string | null> {\r\n    const redirectUrl = this.getRedirectUrl(configuration, authOptions);\r\n\r\n    if (!redirectUrl) {\r\n      return of(null);\r\n    }\r\n\r\n    const state =\r\n      this.flowsDataService.getExistingOrCreateAuthStateControl(configuration);\r\n    const nonce = this.flowsDataService.createNonce(configuration);\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'Authorize created. adding myautostate: ' + state\r\n    );\r\n\r\n    // code_challenge with \"S256\"\r\n    const codeVerifier =\r\n      this.flowsDataService.createCodeVerifier(configuration);\r\n\r\n    return this.jwtWindowCryptoService.generateCodeChallenge(codeVerifier).pipe(\r\n      map((codeChallenge: string) => {\r\n        const {\r\n          clientId,\r\n          responseType,\r\n          scope,\r\n          hdParam,\r\n          customParamsAuthRequest,\r\n        } = configuration;\r\n        let params = this.createHttpParams('');\r\n\r\n        params = params.set('client_id', clientId ?? '');\r\n        params = params.append('redirect_uri', redirectUrl);\r\n        params = params.append('response_type', responseType ?? '');\r\n        params = params.append('scope', scope ?? '');\r\n        params = params.append('nonce', nonce);\r\n        params = params.append('state', state);\r\n        params = params.append('code_challenge', codeChallenge);\r\n        params = params.append('code_challenge_method', 'S256');\r\n\r\n        if (hdParam) {\r\n          params = params.append('hd', hdParam);\r\n        }\r\n\r\n        if (customParamsAuthRequest) {\r\n          params = this.appendCustomParams(\r\n            { ...customParamsAuthRequest },\r\n            params\r\n          );\r\n        }\r\n\r\n        if (authOptions?.customParams) {\r\n          params = this.appendCustomParams(\r\n            { ...authOptions.customParams },\r\n            params\r\n          );\r\n        }\r\n\r\n        return params.toString();\r\n      })\r\n    );\r\n  }\r\n\r\n  getPostLogoutRedirectUrl(configuration: OpenIdConfiguration): string | null {\r\n    const { postLogoutRedirectUri } = configuration;\r\n\r\n    if (!postLogoutRedirectUri) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `could not get postLogoutRedirectUri, was: `,\r\n        postLogoutRedirectUri\r\n      );\r\n\r\n      return null;\r\n    }\r\n\r\n    return postLogoutRedirectUri;\r\n  }\r\n\r\n  private createEndSessionUrl(\r\n    idTokenHint: string,\r\n    configuration: OpenIdConfiguration,\r\n    customParamsEndSession?: { [p: string]: string | number | boolean }\r\n  ): string | null {\r\n    // Auth0 needs a special logout url\r\n    // See https://auth0.com/docs/api/authentication#logout\r\n\r\n    if (this.isAuth0Endpoint(configuration)) {\r\n      return this.composeAuth0Endpoint(configuration);\r\n    }\r\n\r\n    const { url, existingParams } = this.getEndSessionEndpoint(configuration);\r\n\r\n    if (!url) {\r\n      return null;\r\n    }\r\n\r\n    let params = this.createHttpParams(existingParams);\r\n\r\n    if (!!idTokenHint) {\r\n      params = params.set('id_token_hint', idTokenHint);\r\n    }\r\n\r\n    const postLogoutRedirectUri = this.getPostLogoutRedirectUrl(configuration);\r\n\r\n    if (postLogoutRedirectUri) {\r\n      params = params.append('post_logout_redirect_uri', postLogoutRedirectUri);\r\n    }\r\n\r\n    if (customParamsEndSession) {\r\n      params = this.appendCustomParams({ ...customParamsEndSession }, params);\r\n    }\r\n\r\n    return `${url}?${params}`;\r\n  }\r\n\r\n  private createAuthorizeUrl(\r\n    codeChallenge: string,\r\n    redirectUrl: string,\r\n    nonce: string,\r\n    state: string,\r\n    configuration: OpenIdConfiguration,\r\n    prompt?: string,\r\n    customRequestParams?: { [key: string]: string | number | boolean }\r\n  ): string {\r\n    const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      configuration\r\n    );\r\n    const authorizationEndpoint = authWellKnownEndPoints?.authorizationEndpoint;\r\n\r\n    if (!authorizationEndpoint) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `Can not create an authorize URL when authorizationEndpoint is '${authorizationEndpoint}'`\r\n      );\r\n\r\n      return '';\r\n    }\r\n\r\n    const { clientId, responseType, scope, hdParam, customParamsAuthRequest } =\r\n      configuration;\r\n\r\n    if (!clientId) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `createAuthorizeUrl could not add clientId because it was: `,\r\n        clientId\r\n      );\r\n\r\n      return '';\r\n    }\r\n\r\n    if (!responseType) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `createAuthorizeUrl could not add responseType because it was: `,\r\n        responseType\r\n      );\r\n\r\n      return '';\r\n    }\r\n\r\n    if (!scope) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `createAuthorizeUrl could not add scope because it was: `,\r\n        scope\r\n      );\r\n\r\n      return '';\r\n    }\r\n\r\n    const urlParts = authorizationEndpoint.split('?');\r\n    const authorizationUrl = urlParts[0];\r\n    const existingParams = urlParts[1];\r\n    let params = this.createHttpParams(existingParams);\r\n\r\n    params = params.set('client_id', clientId);\r\n    params = params.append('redirect_uri', redirectUrl);\r\n    params = params.append('response_type', responseType);\r\n    params = params.append('scope', scope);\r\n    params = params.append('nonce', nonce);\r\n    params = params.append('state', state);\r\n\r\n    if (\r\n      this.flowHelper.isCurrentFlowCodeFlow(configuration) &&\r\n      !configuration.disablePkce\r\n    ) {\r\n      params = params.append('code_challenge', codeChallenge);\r\n      params = params.append('code_challenge_method', 'S256');\r\n    }\r\n\r\n    const mergedParams = { ...customParamsAuthRequest, ...customRequestParams };\r\n\r\n    if (Object.keys(mergedParams).length > 0) {\r\n      params = this.appendCustomParams({ ...mergedParams }, params);\r\n    }\r\n\r\n    if (prompt) {\r\n      params = this.overWriteParam(params, 'prompt', prompt);\r\n    }\r\n\r\n    if (hdParam) {\r\n      params = params.append('hd', hdParam);\r\n    }\r\n\r\n    return `${authorizationUrl}?${params}`;\r\n  }\r\n\r\n  private createUrlImplicitFlowWithSilentRenew(\r\n    configuration: OpenIdConfiguration,\r\n    customParams?: { [key: string]: string | number | boolean }\r\n  ): string | null {\r\n    const state =\r\n      this.flowsDataService.getExistingOrCreateAuthStateControl(configuration);\r\n    const nonce = this.flowsDataService.createNonce(configuration);\r\n    const silentRenewUrl = this.getSilentRenewUrl(configuration);\r\n\r\n    if (!silentRenewUrl) {\r\n      return null;\r\n    }\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'RefreshSession created. adding myautostate: ',\r\n      state\r\n    );\r\n\r\n    const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      configuration\r\n    );\r\n\r\n    if (authWellKnownEndPoints) {\r\n      return this.createAuthorizeUrl(\r\n        '',\r\n        silentRenewUrl,\r\n        nonce,\r\n        state,\r\n        configuration,\r\n        'none',\r\n        customParams\r\n      );\r\n    }\r\n\r\n    this.loggerService.logError(\r\n      configuration,\r\n      'authWellKnownEndpoints is undefined'\r\n    );\r\n\r\n    return null;\r\n  }\r\n\r\n  private createUrlCodeFlowWithSilentRenew(\r\n    configuration: OpenIdConfiguration,\r\n    customParams?: { [key: string]: string | number | boolean }\r\n  ): Observable<string> {\r\n    const state =\r\n      this.flowsDataService.getExistingOrCreateAuthStateControl(configuration);\r\n    const nonce = this.flowsDataService.createNonce(configuration);\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'RefreshSession created. adding myautostate: ' + state\r\n    );\r\n\r\n    // code_challenge with \"S256\"\r\n    const codeVerifier =\r\n      this.flowsDataService.createCodeVerifier(configuration);\r\n\r\n    return this.jwtWindowCryptoService.generateCodeChallenge(codeVerifier).pipe(\r\n      map((codeChallenge: string) => {\r\n        const silentRenewUrl = this.getSilentRenewUrl(configuration);\r\n\r\n        if (!silentRenewUrl) {\r\n          return '';\r\n        }\r\n\r\n        const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n          'authWellKnownEndPoints',\r\n          configuration\r\n        );\r\n\r\n        if (authWellKnownEndPoints) {\r\n          return this.createAuthorizeUrl(\r\n            codeChallenge,\r\n            silentRenewUrl,\r\n            nonce,\r\n            state,\r\n            configuration,\r\n            'none',\r\n            customParams\r\n          );\r\n        }\r\n\r\n        this.loggerService.logWarning(\r\n          configuration,\r\n          'authWellKnownEndpoints is undefined'\r\n        );\r\n\r\n        return '';\r\n      })\r\n    );\r\n  }\r\n\r\n  private createUrlImplicitFlowAuthorize(\r\n    configuration: OpenIdConfiguration,\r\n    authOptions?: AuthOptions\r\n  ): string | null {\r\n    const state =\r\n      this.flowsDataService.getExistingOrCreateAuthStateControl(configuration);\r\n    const nonce = this.flowsDataService.createNonce(configuration);\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'Authorize created. adding myautostate: ' + state\r\n    );\r\n\r\n    const redirectUrl = this.getRedirectUrl(configuration, authOptions);\r\n\r\n    if (!redirectUrl) {\r\n      return null;\r\n    }\r\n\r\n    const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      configuration\r\n    );\r\n\r\n    if (authWellKnownEndPoints) {\r\n      const { customParams } = authOptions || {};\r\n\r\n      return this.createAuthorizeUrl(\r\n        '',\r\n        redirectUrl,\r\n        nonce,\r\n        state,\r\n        configuration,\r\n        '',\r\n        customParams\r\n      );\r\n    }\r\n\r\n    this.loggerService.logError(\r\n      configuration,\r\n      'authWellKnownEndpoints is undefined'\r\n    );\r\n\r\n    return null;\r\n  }\r\n\r\n  private createUrlCodeFlowAuthorize(\r\n    config: OpenIdConfiguration,\r\n    authOptions?: AuthOptions\r\n  ): Observable<string | null> {\r\n    const state =\r\n      this.flowsDataService.getExistingOrCreateAuthStateControl(config);\r\n    const nonce = this.flowsDataService.createNonce(config);\r\n\r\n    this.loggerService.logDebug(\r\n      config,\r\n      'Authorize created. adding myautostate: ' + state\r\n    );\r\n\r\n    const redirectUrl = this.getRedirectUrl(config, authOptions);\r\n\r\n    if (!redirectUrl) {\r\n      return of(null);\r\n    }\r\n\r\n    return this.getCodeChallenge(config).pipe(\r\n      map((codeChallenge: string) => {\r\n        const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n          'authWellKnownEndPoints',\r\n          config\r\n        );\r\n\r\n        if (authWellKnownEndPoints) {\r\n          const { customParams } = authOptions || {};\r\n\r\n          return this.createAuthorizeUrl(\r\n            codeChallenge,\r\n            redirectUrl,\r\n            nonce,\r\n            state,\r\n            config,\r\n            '',\r\n            customParams\r\n          );\r\n        }\r\n\r\n        this.loggerService.logError(\r\n          config,\r\n          'authWellKnownEndpoints is undefined'\r\n        );\r\n\r\n        return '';\r\n      })\r\n    );\r\n  }\r\n\r\n  private getCodeChallenge(config: OpenIdConfiguration): Observable<string> {\r\n    if (config.disablePkce) {\r\n      return of('');\r\n    }\r\n\r\n    // code_challenge with \"S256\"\r\n    const codeVerifier = this.flowsDataService.createCodeVerifier(config);\r\n\r\n    return this.jwtWindowCryptoService.generateCodeChallenge(codeVerifier);\r\n  }\r\n\r\n  private getRedirectUrl(\r\n    configuration: OpenIdConfiguration,\r\n    authOptions?: AuthOptions\r\n  ): string | null {\r\n    let { redirectUrl } = configuration;\r\n\r\n    if (authOptions?.redirectUrl) {\r\n      // override by redirectUrl from authOptions\r\n      redirectUrl = authOptions.redirectUrl;\r\n    }\r\n\r\n    if (!redirectUrl) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `could not get redirectUrl, was: `,\r\n        redirectUrl\r\n      );\r\n\r\n      return null;\r\n    }\r\n\r\n    return redirectUrl;\r\n  }\r\n\r\n  private getSilentRenewUrl(configuration: OpenIdConfiguration): string | null {\r\n    const { silentRenewUrl } = configuration;\r\n\r\n    if (!silentRenewUrl) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `could not get silentRenewUrl, was: `,\r\n        silentRenewUrl\r\n      );\r\n\r\n      return null;\r\n    }\r\n\r\n    return silentRenewUrl;\r\n  }\r\n\r\n  private getClientId(configuration: OpenIdConfiguration): string | null {\r\n    const { clientId } = configuration;\r\n\r\n    if (!clientId) {\r\n      this.loggerService.logError(\r\n        configuration,\r\n        `could not get clientId, was: `,\r\n        clientId\r\n      );\r\n\r\n      return null;\r\n    }\r\n\r\n    return clientId;\r\n  }\r\n\r\n  private appendCustomParams(\r\n    customParams: { [key: string]: string | number | boolean },\r\n    params: HttpParams\r\n  ): HttpParams {\r\n    for (const [key, value] of Object.entries({ ...customParams })) {\r\n      params = params.append(key, value.toString());\r\n    }\r\n\r\n    return params;\r\n  }\r\n\r\n  private overWriteParam(\r\n    params: HttpParams,\r\n    key: string,\r\n    value: string | number | boolean\r\n  ): HttpParams {\r\n    return params.set(key, value);\r\n  }\r\n\r\n  private createHttpParams(existingParams?: string): HttpParams {\r\n    existingParams = existingParams ?? '';\r\n\r\n    return new HttpParams({\r\n      fromString: existingParams,\r\n      encoder: new UriEncoder(),\r\n    });\r\n  }\r\n\r\n  private isAuth0Endpoint(configuration: OpenIdConfiguration): boolean {\r\n    const { authority, useCustomAuth0Domain } = configuration;\r\n\r\n    if (!authority) {\r\n      return false;\r\n    }\r\n\r\n    return authority.endsWith(AUTH0_ENDPOINT) || Boolean(useCustomAuth0Domain);\r\n  }\r\n\r\n  private composeAuth0Endpoint(configuration: OpenIdConfiguration): string {\r\n    // format: https://YOUR_DOMAIN/v2/logout?client_id=YOUR_CLIENT_ID&returnTo=LOGOUT_URL\r\n    const { authority, clientId } = configuration;\r\n    const postLogoutRedirectUrl = this.getPostLogoutRedirectUrl(configuration);\r\n\r\n    return `${authority}/v2/logout?client_id=${clientId}&returnTo=${postLogoutRedirectUrl}`;\r\n  }\r\n}\r\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class HttpBaseService {\n  private readonly http = inject(HttpClient);\n\n  get<T>(url: string, params?: { [key: string]: unknown }): Observable<T> {\n    return this.http.get<T>(url, params);\n  }\n\n  post<T>(\n    url: string,\n    body: unknown,\n    params?: { [key: string]: unknown }\n  ): Observable<T> {\n    return this.http.post<T>(url, body, params);\n  }\n}\n","import { HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable, inject } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { HttpBaseService } from './http-base.service';\r\n\r\nconst NGSW_CUSTOM_PARAM = 'ngsw-bypass';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DataService {\r\n  private readonly httpClient = inject(HttpBaseService);\r\n\r\n  get<T>(\r\n    url: string,\r\n    config: OpenIdConfiguration,\r\n    token?: string\r\n  ): Observable<T> {\r\n    const headers = this.prepareHeaders(token);\r\n    const params = this.prepareParams(config);\r\n\r\n    return this.httpClient.get<T>(url, {\r\n      headers,\r\n      params,\r\n    });\r\n  }\r\n\r\n  post<T>(\r\n    url: string | null,\r\n    body: unknown,\r\n    config: OpenIdConfiguration,\r\n    headersParams?: HttpHeaders\r\n  ): Observable<T> {\r\n    const headers = headersParams || this.prepareHeaders();\r\n    const params = this.prepareParams(config);\r\n\r\n    return this.httpClient.post<T>(url ?? '', body, { headers, params });\r\n  }\r\n\r\n  private prepareHeaders(token?: string): HttpHeaders {\r\n    let headers = new HttpHeaders();\r\n\r\n    headers = headers.set('Accept', 'application/json');\r\n\r\n    if (!!token) {\r\n      headers = headers.set(\r\n        'Authorization',\r\n        'Bearer ' + decodeURIComponent(token)\r\n      );\r\n    }\r\n\r\n    return headers;\r\n  }\r\n\r\n  private prepareParams(config: OpenIdConfiguration): HttpParams {\r\n    let params = new HttpParams();\r    const { ngswBypass } = config;\r\n\r\n    if (ngswBypass) {\r\n      params = params.set(NGSW_CUSTOM_PARAM, '');\r\n    }\r\n\r\n    return params;\r\n  }\r\n}\r\n","import { HttpErrorResponse } from '@angular/common/http';\n\n/**\n * checks if the error is a network error\n * by checking if either internal error is a ProgressEvent with type error\n * or another error with status 0\n * @param error\n * @returns true if the error is a network error\n */\nexport const isNetworkError = (error: unknown): boolean =>\n  !!error &&\n  error instanceof HttpErrorResponse &&\n  ((error.error instanceof ProgressEvent && error.error.type === 'error') ||\n    (error.status === 0 && !!error.error));\n","import { HttpHeaders } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable, of, throwError, timer } from 'rxjs';\r\nimport { catchError, mergeMap, retryWhen, switchMap } from 'rxjs/operators';\r\nimport { DataService } from '../../api/data.service';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { StoragePersistenceService } from '../../storage/storage-persistence.service';\r\nimport { UrlService } from '../../utils/url/url.service';\r\nimport { TokenValidationService } from '../../validation/token-validation.service';\r\nimport { AuthResult, CallbackContext } from '../callback-context';\r\nimport { FlowsDataService } from '../flows-data.service';\r\nimport { isNetworkError } from './error-helper';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CodeFlowCallbackHandlerService {\r\n  private readonly urlService = inject(UrlService);\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly tokenValidationService = inject(TokenValidationService);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly dataService = inject(DataService);\r\n\r\n  // STEP 1 Code Flow\r\n  codeFlowCallback(\r\n    urlToCheck: string,\r\n    config: OpenIdConfiguration\r\n  ): Observable<CallbackContext> {\r\n    const code = this.urlService.getUrlParameter(urlToCheck, 'code');\r\n    const state = this.urlService.getUrlParameter(urlToCheck, 'state');\r\n    const sessionState = this.urlService.getUrlParameter(\r\n      urlToCheck,\r\n      'session_state'\r\n    );\r\n\r\n    if (!state) {\r\n      this.loggerService.logDebug(config, 'no state in url');\r\n\r\n      return throwError(() => new Error('no state in url'));\r\n    }\r\n\r\n    if (!code) {\r\n      this.loggerService.logDebug(config, 'no code in url');\r\n\r\n      return throwError(() => new Error('no code in url'));\r\n    }\r\n\r\n    this.loggerService.logDebug(\r\n      config,\r\n      'running validation for callback',\r\n      urlToCheck\r\n    );\r\n\r\n    const initialCallbackContext: CallbackContext = {\r\n      code,\r\n      refreshToken: '',\r\n      state,\r\n      sessionState,\r\n      authResult: null,\r\n      isRenewProcess: false,\r\n      jwtKeys: null,\r\n      validationResult: null,\r\n      existingIdToken: null,\r\n    };\r\n\r\n    return of(initialCallbackContext);\r\n  }\r\n\r\n  // STEP 2 Code Flow //  Code Flow Silent Renew starts here\r\n  codeFlowCodeRequest(\r\n    callbackContext: CallbackContext,\r\n    config: OpenIdConfiguration\r\n  ): Observable<CallbackContext> {\r\n    const authStateControl = this.flowsDataService.getAuthStateControl(config);\r\n    const isStateCorrect =\r\n      this.tokenValidationService.validateStateFromHashCallback(\r\n        callbackContext.state,\r\n        authStateControl,\r\n        config\r\n      );\r\n\r\n    if (!isStateCorrect) {\r\n      return throwError(() => new Error('codeFlowCodeRequest incorrect state'));\r\n    }\r\n\r\n    const authWellknownEndpoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      config\r\n    );\r\n    const tokenEndpoint = authWellknownEndpoints?.tokenEndpoint;\r\n\r\n    if (!tokenEndpoint) {\r\n      return throwError(() => new Error('Token Endpoint not defined'));\r\n    }\r\n\r\n    let headers: HttpHeaders = new HttpHeaders();\r\n\r\n    headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');\r\n\r\n    const bodyForCodeFlow = this.urlService.createBodyForCodeFlowCodeRequest(\r\n      callbackContext.code,\r\n      config,\r\n      config?.customParamsCodeRequest\r\n    );\r\n\r\n    return this.dataService\r\n      .post(tokenEndpoint, bodyForCodeFlow, config, headers)\r\n      .pipe(\r\n        switchMap((response) => {\r\n          if (response) {\r\n            const authResult: AuthResult = {\r\n              ...response,\r\n              state: callbackContext.state,\r\n              session_state: callbackContext.sessionState,\r\n            };\r\n\r\n            callbackContext.authResult = authResult;\r\n          }\r\n\r\n          return of(callbackContext);\r\n        }),\r\n        retryWhen((error) => this.handleRefreshRetry(error, config)),\r\n        catchError((error) => {\r\n          const { authority } = config;\r\n          const errorMessage = `OidcService code request ${authority}`;\r\n\r\n          this.loggerService.logError(config, errorMessage, error);\r\n\r\n          return throwError(() => new Error(errorMessage));\r\n        })\r\n      );\r\n  }\r\n\r\n  private handleRefreshRetry(\r\n    errors: Observable<unknown>,\r\n    config: OpenIdConfiguration\r\n  ): Observable<unknown> {\r\n    return errors.pipe(\r\n      mergeMap((error) => {\r\n        // retry token refresh if there is no internet connection\r\n        if (isNetworkError(error)) {\r\n          const { authority, refreshTokenRetryInSeconds } = config;\r\n          const errorMessage = `OidcService code request ${authority} - no internet connection`;\r\n\r\n          this.loggerService.logWarning(config, errorMessage, error);\r\n\r\n          return timer((refreshTokenRetryInSeconds ?? 0) * 1000);\r\n        }\r\n\r\n        return throwError(() => error);\r\n      })\r\n    );\r\n  }\r\n}\r\n","export enum ValidationResult {\n  NotSet = 'NotSet',\n  StatesDoNotMatch = 'StatesDoNotMatch',\n  SignatureFailed = 'SignatureFailed',\n  IncorrectNonce = 'IncorrectNonce',\n  RequiredPropertyMissing = 'RequiredPropertyMissing',\n  MaxOffsetExpired = 'MaxOffsetExpired',\n  IssDoesNotMatchIssuer = 'IssDoesNotMatchIssuer',\n  NoAuthWellKnownEndPoints = 'NoAuthWellKnownEndPoints',\n  IncorrectAud = 'IncorrectAud',\n  IncorrectIdTokenClaimsAfterRefresh = 'IncorrectIdTokenClaimsAfterRefresh',\n  IncorrectAzp = 'IncorrectAzp',\n  TokenExpired = 'TokenExpired',\n  IncorrectAtHash = 'IncorrectAtHash',\n  Ok = 'Ok',\n  LoginRequired = 'LoginRequired',\n  SecureTokenServerError = 'SecureTokenServerError',\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { BehaviorSubject, Observable, of, throwError } from 'rxjs';\r\nimport { map, retry, switchMap } from 'rxjs/operators';\r\nimport { DataService } from '../api/data.service';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { EventTypes } from '../public-events/event-types';\r\nimport { PublicEventsService } from '../public-events/public-events.service';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { FlowHelper } from '../utils/flowHelper/flow-helper.service';\r\nimport { TokenHelperService } from '../utils/tokenHelper/token-helper.service';\r\nimport { ConfigUserDataResult, UserDataResult } from './userdata-result';\r\n\r\nconst DEFAULT_USERRESULT = { userData: null, allUserData: [] };\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UserService {\r\n  private readonly userDataInternal$ = new BehaviorSubject<UserDataResult>(\r\n    DEFAULT_USERRESULT\r\n  );\r\n\r\n  get userData$(): Observable<UserDataResult> {\r\n    return this.userDataInternal$.asObservable();\r\n  }\r\n\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly tokenHelperService = inject(TokenHelperService);\r\n  private readonly flowHelper = inject(FlowHelper);\r\n  private readonly oidcDataService = inject(DataService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly eventService = inject(PublicEventsService);\r\n\r\n  getAndPersistUserDataInStore(\r\n    currentConfiguration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    isRenewProcess = false,\r\n    idToken?: string,\r\n    decodedIdToken?: any\r\n  ): Observable<any> {\r\n    idToken =\r\n      idToken ||\r\n      this.storagePersistenceService.getIdToken(currentConfiguration);\r\n    decodedIdToken =\r\n      decodedIdToken ||\r\n      this.tokenHelperService.getPayloadFromToken(\r\n        idToken,\r\n        false,\r\n        currentConfiguration\r\n      );\r\n\r\n    const existingUserDataFromStorage =\r\n      this.getUserDataFromStore(currentConfiguration);\r\n    const haveUserData = !!existingUserDataFromStorage;\r\n    const isCurrentFlowImplicitFlowWithAccessToken =\r\n      this.flowHelper.isCurrentFlowImplicitFlowWithAccessToken(\r\n        currentConfiguration\r\n      );\r\n    const isCurrentFlowCodeFlow =\r\n      this.flowHelper.isCurrentFlowCodeFlow(currentConfiguration);\r\n    const accessToken =\r\n      this.storagePersistenceService.getAccessToken(currentConfiguration);\r\n\r\n    if (!(isCurrentFlowImplicitFlowWithAccessToken || isCurrentFlowCodeFlow)) {\r\n      this.loggerService.logDebug(\r\n        currentConfiguration,\r\n        `authCallback idToken flow with accessToken ${accessToken}`\r\n      );\r\n\r\n      this.setUserDataToStore(decodedIdToken, currentConfiguration, allConfigs);\r\n\r\n      return of(decodedIdToken);\r\n    }\r\n\r\n    const { renewUserInfoAfterTokenRenew } = currentConfiguration;\r\n\r\n    if (!isRenewProcess || renewUserInfoAfterTokenRenew || !haveUserData) {\r\n      return this.getUserDataOidcFlowAndSave(\r\n        decodedIdToken.sub,\r\n        currentConfiguration,\r\n        allConfigs\r\n      ).pipe(\r\n        switchMap((userData) => {\r\n          this.loggerService.logDebug(\r\n            currentConfiguration,\r\n            'Received user data: ',\r\n            userData\r\n          );\r\n          if (!!userData) {\r\n            this.loggerService.logDebug(\r\n              currentConfiguration,\r\n              'accessToken: ',\r\n              accessToken\r\n            );\r\n\r\n            return of(userData);\r\n          } else {\r\n            return throwError(\r\n              () => new Error('Received no user data, request failed')\r\n            );\r\n          }\r\n        })\r\n      );\r\n    }\r\n\r\n    return of(existingUserDataFromStorage);\r\n  }\r\n\r\n  getUserDataFromStore(currentConfiguration: OpenIdConfiguration | null): any {\r\n    if (!currentConfiguration) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            'Please provide a configuration before setting up the module'\r\n          )\r\n      );\r\n    }\r\n\r\n    return (\r\n      this.storagePersistenceService.read('userData', currentConfiguration) ||\r\n      null\r\n    );\r\n  }\r\n\r\n  publishUserDataIfExists(\r\n    currentConfiguration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): void {\r\n    const userData = this.getUserDataFromStore(currentConfiguration);\r\n\r\n    if (userData) {\r\n      this.fireUserDataEvent(currentConfiguration, allConfigs, userData);\r\n    }\r\n  }\r\n\r\n  setUserDataToStore(\r\n    userData: any,\r\n    currentConfiguration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): void {\r\n    this.storagePersistenceService.write(\r\n      'userData',\r\n      userData,\r\n      currentConfiguration\r\n    );\r\n    this.fireUserDataEvent(currentConfiguration, allConfigs, userData);\r\n  }\r\n\r\n  resetUserDataInStore(\r\n    currentConfiguration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): void {\r\n    this.storagePersistenceService.remove('userData', currentConfiguration);\r\n    this.fireUserDataEvent(currentConfiguration, allConfigs, null);\r\n  }\r\n\r\n  private getUserDataOidcFlowAndSave(\r\n    idTokenSub: any,\r\n    currentConfiguration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<any> {\r\n    return this.getIdentityUserData(currentConfiguration).pipe(\r\n      map((data: any) => {\r\n        if (\r\n          this.validateUserDataSubIdToken(\r\n            currentConfiguration,\r\n            idTokenSub,\r\n            data?.sub\r\n          )\r\n        ) {\r\n          this.setUserDataToStore(data, currentConfiguration, allConfigs);\r\n\r\n          return data;\r\n        } else {\r\n          // something went wrong, user data sub does not match that from id_token\r\n          this.loggerService.logWarning(\r\n            currentConfiguration,\r\n            `User data sub does not match sub in id_token, resetting`\r\n          );\r\n          this.resetUserDataInStore(currentConfiguration, allConfigs);\r\n\r\n          return null;\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  private getIdentityUserData(\r\n    currentConfiguration: OpenIdConfiguration\r\n  ): Observable<any> {\r\n    const token =\r\n      this.storagePersistenceService.getAccessToken(currentConfiguration);\r\n    const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      currentConfiguration\r\n    );\r\n\r\n    if (!authWellKnownEndPoints) {\r\n      this.loggerService.logWarning(\r\n        currentConfiguration,\r\n        'init check session: authWellKnownEndpoints is undefined'\r\n      );\r\n\r\n      return throwError(() => new Error('authWellKnownEndpoints is undefined'));\r\n    }\r\n\r\n    const userInfoEndpoint = authWellKnownEndPoints.userInfoEndpoint;\r\n\r\n    if (!userInfoEndpoint) {\r\n      this.loggerService.logError(\r\n        currentConfiguration,\r\n        'init check session: authWellKnownEndpoints.userinfo_endpoint is undefined; set auto_userinfo = false in config'\r\n      );\r\n\r\n      return throwError(\r\n        () => new Error('authWellKnownEndpoints.userinfo_endpoint is undefined')\r\n      );\r\n    }\r\n\r\n    return this.oidcDataService\r\n      .get(userInfoEndpoint, currentConfiguration, token)\r\n      .pipe(retry(2));\r\n  }\r\n\r\n  private validateUserDataSubIdToken(\r\n    currentConfiguration: OpenIdConfiguration,\r\n    idTokenSub: any,\r\n    userDataSub: any\r\n  ): boolean {\r\n    if (!idTokenSub) {\r\n      return false;\r\n    }\r\n\r\n    if (!userDataSub) {\r\n      return false;\r\n    }\r\n\r\n    if (idTokenSub.toString() !== userDataSub.toString()) {\r\n      this.loggerService.logDebug(\r\n        currentConfiguration,\r\n        'validateUserDataSubIdToken failed',\r\n        idTokenSub,\r\n        userDataSub\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  private fireUserDataEvent(\r\n    currentConfiguration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    passedUserData: any\r\n  ): void {\r\n    const userData = this.composeSingleOrMultipleUserDataObject(\r\n      currentConfiguration,\r\n      allConfigs,\r\n      passedUserData\r\n    );\r\n\r\n    this.userDataInternal$.next(userData);\r\n\r\n    const { configId } = currentConfiguration;\r\n\r\n    this.eventService.fireEvent(EventTypes.UserDataChanged, {\r\n      configId,\r\n      userData: passedUserData,\r\n    });\r\n  }\r\n\r\n  private composeSingleOrMultipleUserDataObject(\r\n    currentConfiguration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    passedUserData: any\r\n  ): UserDataResult {\r\n    const hasManyConfigs = allConfigs.length > 1;\r\n\r\n    if (!hasManyConfigs) {\r\n      const { configId } = currentConfiguration;\r\n\r\n      return this.composeSingleUserDataResult(configId ?? '', passedUserData);\r\n    }\r\n\r\n    const allUserData: ConfigUserDataResult[] = allConfigs.map((config) => {\r\n      const currentConfigId = currentConfiguration.configId ?? '';\r\n      const configId = config.configId ?? '';\r\n\r\n      if (this.currentConfigIsToUpdate(currentConfigId, config)) {\r\n        return { configId, userData: passedUserData };\r\n      }\r\n\r\n      const alreadySavedUserData =\r\n        this.storagePersistenceService.read('userData', config) || null;\r\n\r\n      return {\r\n        configId,\r\n        userData: alreadySavedUserData,\r\n      };\r\n    });\r\n\r\n    return {\r\n      userData: null,\r\n      allUserData,\r\n    };\r\n  }\r\n\r\n  private composeSingleUserDataResult(\r\n    configId: string,\r\n    userData: any\r\n  ): UserDataResult {\r\n    return {\r\n      userData,\r\n      allUserData: [{ configId, userData }],\r\n    };\r\n  }\r\n\r\n  private currentConfigIsToUpdate(\r\n    configId: string,\r\n    config: OpenIdConfiguration\r\n  ): boolean {\r\n    return config.configId === configId;\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { AuthStateService } from '../auth-state/auth-state.service';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { UserService } from '../user-data/user.service';\r\nimport { FlowsDataService } from './flows-data.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ResetAuthDataService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly userService = inject(UserService);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n\r\n  resetAuthorizationData(\r\n    currentConfiguration: OpenIdConfiguration | null,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): void {\r\n    if (!currentConfiguration) {\r\n      return;\r\n    }\r\n\r\n    this.userService.resetUserDataInStore(currentConfiguration, allConfigs);\r\n    this.flowsDataService.resetStorageFlowData(currentConfiguration);\r\n    this.authStateService.setUnauthenticatedAndFireEvent(\r\n      currentConfiguration,\r\n      allConfigs\r\n    );\r\n\r\n    this.loggerService.logDebug(\r\n      currentConfiguration,\r\n      'Local Login information cleaned up and event fired'\r\n    );\r\n  }\r\n}\r\n","import { HttpResponse } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, retry } from 'rxjs/operators';\r\nimport { DataService } from '../api/data.service';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { JwtKeys } from '../validation/jwtkeys';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class SigninKeyDataService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly dataService = inject(DataService);\r\n\r\n  getSigningKeys(\r\n    currentConfiguration: OpenIdConfiguration\r\n  ): Observable<JwtKeys> {\r\n    const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      currentConfiguration\r\n    );\r\n    const jwksUri = authWellKnownEndPoints?.jwksUri;\r\n\r\n    if (!jwksUri) {\r\n      const error = `getSigningKeys: authWellKnownEndpoints.jwksUri is: '${jwksUri}'`;\r\n\r\n      this.loggerService.logWarning(currentConfiguration, error);\r\n\r\n      return throwError(() => new Error(error));\r\n    }\r\n\r\n    this.loggerService.logDebug(\r\n      currentConfiguration,\r\n      'Getting signinkeys from ',\r\n      jwksUri\r\n    );\r\n\r\n    return this.dataService.get<JwtKeys>(jwksUri, currentConfiguration).pipe(\r\n      retry(2),\r\n      catchError((e) => this.handleErrorGetSigningKeys(e, currentConfiguration))\r\n    );\r\n  }\r\n\r\n  private handleErrorGetSigningKeys(\r\n    errorResponse: HttpResponse<any> | any,\r\n    currentConfiguration: OpenIdConfiguration\r\n  ): Observable<never> {\r\n    let errMsg = '';\r\n\r\n    if (errorResponse instanceof HttpResponse) {\r\n      const body = errorResponse.body || {};\r\n      const err = JSON.stringify(body);\r\n      const { status, statusText } = errorResponse;\r\n\r\n      errMsg = `${status || ''} - ${statusText || ''} ${err || ''}`;\r\n    } else {\r\n      const { message } = errorResponse;\r\n\r\n      errMsg = !!message ? message : `${errorResponse}`;\r\n    }\r\n    this.loggerService.logError(currentConfiguration, errMsg);\r\n\r\n    return throwError(() => new Error(errMsg));\r\n  }\r\n}\r\n","\r\nimport { inject, Injectable, DOCUMENT } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { catchError, switchMap, tap } from 'rxjs/operators';\r\nimport { AuthStateService } from '../../auth-state/auth-state.service';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { StoragePersistenceService } from '../../storage/storage-persistence.service';\r\nimport { JwtKeys } from '../../validation/jwtkeys';\r\nimport { ValidationResult } from '../../validation/validation-result';\r\nimport { CallbackContext } from '../callback-context';\r\nimport { FlowsDataService } from '../flows-data.service';\r\nimport { ResetAuthDataService } from '../reset-auth-data.service';\r\nimport { SigninKeyDataService } from '../signin-key-data.service';\r\n\r\nconst JWT_KEYS = 'jwtKeys';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class HistoryJwtKeysCallbackHandlerService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly signInKeyDataService = inject(SigninKeyDataService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly resetAuthDataService = inject(ResetAuthDataService);\r\n  private readonly document = inject(DOCUMENT);\r\n\r\n  // STEP 3 Code Flow, STEP 2 Implicit Flow, STEP 3 Refresh Token\r\n  callbackHistoryAndResetJwtKeys(\r\n    callbackContext: CallbackContext,\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<CallbackContext> {\r\n    let toWrite = { ...callbackContext.authResult };\r\n\r\n    if (!this.responseHasIdToken(callbackContext)) {\r\n      const existingIdToken = this.storagePersistenceService.getIdToken(config);\r\n\r\n      toWrite = {\r\n        ...toWrite,\r\n        id_token: existingIdToken,\r\n      };\r\n    }\r\n\r\n    this.storagePersistenceService.write('authnResult', toWrite, config);\r\n\r\n    if (\r\n      config.allowUnsafeReuseRefreshToken &&\r\n      callbackContext.authResult?.refresh_token\r\n    ) {\r\n      this.storagePersistenceService.write(\r\n        'reusable_refresh_token',\r\n        callbackContext.authResult.refresh_token,\r\n        config\r\n      );\r\n    }\r\n\r\n    if (\r\n      this.historyCleanUpTurnedOn(config) &&\r\n      !callbackContext.isRenewProcess\r\n    ) {\r\n      this.resetBrowserHistory();\r\n    } else {\r\n      this.loggerService.logDebug(config, 'history clean up inactive');\r\n    }\r\n\r\n    if (callbackContext.authResult?.error) {\r\n      const errorMessage = `AuthCallback AuthResult came with error: ${callbackContext.authResult.error}`;\r\n\r\n      this.loggerService.logDebug(config, errorMessage);\r\n      this.resetAuthDataService.resetAuthorizationData(config, allConfigs);\r\n      this.flowsDataService.setNonce('', config);\r\n      this.handleResultErrorFromCallback(\r\n        callbackContext.authResult,\r\n        callbackContext.isRenewProcess,\r\n        config.configId\r\n      );\r\n\r\n      return throwError(() => new Error(errorMessage));\r\n    }\r\n\r\n    this.loggerService.logDebug(\r\n      config,\r\n      `AuthResult '${JSON.stringify(callbackContext.authResult, null, 2)}'.\r\n      AuthCallback created, begin token validation`\r\n    );\r\n\r\n    return this.signInKeyDataService.getSigningKeys(config).pipe(\r\n      tap((jwtKeys: JwtKeys) => this.storeSigningKeys(jwtKeys, config)),\r\n      catchError((err) => {\r\n        // fallback: try to load jwtKeys from storage\r\n        const storedJwtKeys = this.readSigningKeys(config);\r\n\r\n        if (!!storedJwtKeys) {\r\n          this.loggerService.logWarning(\r\n            config,\r\n            `Failed to retrieve signing keys, fallback to stored keys`\r\n          );\r\n\r\n          return of(storedJwtKeys);\r\n        }\r\n\r\n        return throwError(() => new Error(err));\r\n      }),\r\n      switchMap((jwtKeys) => {\r\n        if (jwtKeys) {\r\n          callbackContext.jwtKeys = jwtKeys;\r\n\r\n          return of(callbackContext);\r\n        }\r\n\r\n        const errorMessage = `Failed to retrieve signing key`;\r\n\r\n        this.loggerService.logWarning(config, errorMessage);\r\n\r\n        return throwError(() => new Error(errorMessage));\r\n      }),\r\n      catchError((err) => {\r\n        const errorMessage = `Failed to retrieve signing key with error: ${err}`;\r\n\r\n        this.loggerService.logWarning(config, errorMessage);\r\n\r\n        return throwError(() => new Error(errorMessage));\r\n      })\r\n    );\r\n  }\r\n\r\n  private responseHasIdToken(callbackContext: CallbackContext): boolean {\r\n    return !!callbackContext?.authResult?.id_token;\r\n  }\r\n\r\n  private handleResultErrorFromCallback(\r\n    result: unknown,\r\n    isRenewProcess: boolean,\r\n    configId?: string\r\n  ): void {\r\n    let validationResult = ValidationResult.SecureTokenServerError;\r\n\r\n    if (\r\n      result &&\r\n      typeof result === 'object' &&\r\n      'error' in result &&\r\n      (result.error as string) === 'login_required'\r\n    ) {\r\n      validationResult = ValidationResult.LoginRequired;\r\n    }\r\n\r\n    this.authStateService.updateAndPublishAuthState({\r\n      isAuthenticated: false,\r\n      validationResult,\r\n      isRenewProcess,\r\n      configId,\r\n    });\r\n  }\r\n\r\n  private historyCleanUpTurnedOn(config: OpenIdConfiguration): boolean {\r\n    const { historyCleanupOff } = config;\r\n\r\n    return !historyCleanupOff;\r\n  }\r\n\r\n  private resetBrowserHistory(): void {\r\n    this.document.defaultView?.history.replaceState(\r\n      {},\r\n      this.document.title,\r\n      this.document.defaultView.location.origin +\r\n        this.document.defaultView.location.pathname\r\n    );\r\n  }\r\n\r\n  private storeSigningKeys(\r\n    jwtKeys: JwtKeys,\r\n    config: OpenIdConfiguration\r\n  ): void {\r\n    this.storagePersistenceService.write(JWT_KEYS, jwtKeys, config);\r\n  }\r\n\r\n  private readSigningKeys(config: OpenIdConfiguration): any {\r\n    return this.storagePersistenceService.read(JWT_KEYS, config);\r\n  }\r\n}\r\n","\r\nimport { inject, Injectable, DOCUMENT } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { AuthResult, CallbackContext } from '../callback-context';\r\nimport { FlowsDataService } from '../flows-data.service';\r\nimport { ResetAuthDataService } from '../reset-auth-data.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ImplicitFlowCallbackHandlerService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly resetAuthDataService = inject(ResetAuthDataService);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly document = inject(DOCUMENT);\r\n\r\n  // STEP 1 Code Flow\r\n  // STEP 1 Implicit Flow\r\n  implicitFlowCallback(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    hash?: string\r\n  ): Observable<CallbackContext> {\r\n    const isRenewProcessData =\r\n      this.flowsDataService.isSilentRenewRunning(config);\r\n\r\n    this.loggerService.logDebug(config, 'BEGIN callback, no auth data');\r\n    if (!isRenewProcessData) {\r\n      this.resetAuthDataService.resetAuthorizationData(config, allConfigs);\r\n    }\r\n\r\n    hash = hash || this.document.location.hash.substring(1);\r\n\r\n    const authResult = hash\r\n      .split('&')\r\n      .reduce((resultData: any, item: string) => {\r\n        const parts = item.split('=');\r\n\r\n        resultData[parts.shift() as string] = parts.join('=');\r\n\r\n        return resultData;\r\n      }, {} as AuthResult);\r\n    const callbackContext: CallbackContext = {\r\n      code: '',\r\n      refreshToken: '',\r\n      state: '',\r\n      sessionState: null,\r\n      authResult,\r\n      isRenewProcess: isRenewProcessData,\r\n      jwtKeys: null,\r\n      validationResult: null,\r\n      existingIdToken: null,\r\n    };\r\n\r\n    return of(callbackContext);\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { AuthStateService } from '../../auth-state/auth-state.service';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { TokenValidationService } from '../../validation/token-validation.service';\r\nimport { CallbackContext } from '../callback-context';\r\nimport { FlowsDataService } from '../flows-data.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RefreshSessionCallbackHandlerService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n\r\n  // STEP 1 Refresh session\r\n  refreshSessionWithRefreshTokens(\r\n    config: OpenIdConfiguration\r\n  ): Observable<CallbackContext> {\r\n    const stateData =\r\n      this.flowsDataService.getExistingOrCreateAuthStateControl(config);\r\n\r\n    this.loggerService.logDebug(\r\n      config,\r\n      'RefreshSession created. Adding myautostate: ' + stateData\r\n    );\r\n    const refreshToken = this.authStateService.getRefreshToken(config);\r\n    const idToken = this.authStateService.getIdToken(config);\r\n\r\n    if (refreshToken) {\r\n      const callbackContext: CallbackContext = {\r\n        code: '',\r\n        refreshToken,\r\n        state: stateData,\r\n        sessionState: null,\r\n        authResult: null,\r\n        isRenewProcess: true,\r\n        jwtKeys: null,\r\n        validationResult: null,\r\n        existingIdToken: idToken,\r\n      };\r\n\r\n      this.loggerService.logDebug(\r\n        config,\r\n        'found refresh code, obtaining new credentials with refresh code'\r\n      );\r\n      // Nonce is not used with refresh tokens; but Key cloak may send it anyway\r\n      this.flowsDataService.setNonce(\r\n        TokenValidationService.refreshTokenNoncePlaceholder,\r\n        config\r\n      );\r\n\r\n      return of(callbackContext);\r\n    } else {\r\n      const errorMessage = 'no refresh token found, please login';\r\n\r\n      this.loggerService.logError(config, errorMessage);\r\n\r\n      return throwError(() => new Error(errorMessage));\r\n    }\r\n  }\r\n}\r\n","import { HttpHeaders } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable, of, throwError, timer } from 'rxjs';\r\nimport { catchError, mergeMap, retryWhen, switchMap } from 'rxjs/operators';\r\nimport { DataService } from '../../api/data.service';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { StoragePersistenceService } from '../../storage/storage-persistence.service';\r\nimport { UrlService } from '../../utils/url/url.service';\r\nimport { AuthResult, CallbackContext } from '../callback-context';\r\nimport { isNetworkError } from './error-helper';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RefreshTokenCallbackHandlerService {\r\n  private readonly urlService = inject(UrlService);\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly dataService = inject(DataService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n\r\n  // STEP 2 Refresh Token\r\n  refreshTokensRequestTokens(\r\n    callbackContext: CallbackContext,\r\n    config: OpenIdConfiguration,\r\n    customParamsRefresh?: { [key: string]: string | number | boolean }\r\n  ): Observable<CallbackContext> {\r\n    let headers: HttpHeaders = new HttpHeaders();\r\n\r\n    headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');\r\n\r\n    const authWellknownEndpoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      config\r\n    );\r\n    const tokenEndpoint = authWellknownEndpoints?.tokenEndpoint;\r\n\r\n    if (!tokenEndpoint) {\r\n      return throwError(() => new Error('Token Endpoint not defined'));\r\n    }\r\n\r\n    const data = this.urlService.createBodyForCodeFlowRefreshTokensRequest(\r\n      callbackContext.refreshToken,\r\n      config,\r\n      customParamsRefresh\r\n    );\r\n\r\n    return this.dataService\r\n      .post<AuthResult>(tokenEndpoint, data, config, headers)\r\n      .pipe(\r\n        switchMap((response) => {\r\n          this.loggerService.logDebug(\r\n            config,\r\n            `token refresh response: ${response}`\r\n          );\r\n\r\n          if (response) {\r\n            response.state = callbackContext.state;\r\n          }\r\n\r\n          callbackContext.authResult = response;\r\n\r\n          return of(callbackContext);\r\n        }),\r\n        retryWhen((error) => this.handleRefreshRetry(error, config)),\r\n        catchError((error) => {\r\n          const { authority } = config;\r\n          const errorMessage = `OidcService code request ${authority}`;\r\n\r\n          this.loggerService.logError(config, errorMessage, error);\r\n\r\n          return throwError(() => new Error(errorMessage));\r\n        })\r\n      );\r\n  }\r\n\r\n  private handleRefreshRetry(\r\n    errors: Observable<unknown>,\r\n    config: OpenIdConfiguration\r\n  ): Observable<unknown> {\r\n    return errors.pipe(\r\n      mergeMap((error) => {\r\n        // retry token refresh if there is no internet connection\r\n        if (isNetworkError(error)) {\r\n          const { authority, refreshTokenRetryInSeconds } = config;\r\n          const errorMessage = `OidcService code request ${authority} - no internet connection`;\r\n\r\n          this.loggerService.logWarning(config, errorMessage, error);\r\n\r\n          return timer((refreshTokenRetryInSeconds ?? 0) * 1000);\r\n        }\r\n\r\n        return throwError(() => error);\r\n      })\r\n    );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class EqualityService {\n  isStringEqualOrNonOrderedArrayEqual(\n    value1: string | any[],\n    value2: string | any[]\n  ): boolean {\n    if (this.isNullOrUndefined(value1)) {\n      return false;\n    }\n\n    if (this.isNullOrUndefined(value2)) {\n      return false;\n    }\n\n    if (this.oneValueIsStringAndTheOtherIsArray(value1, value2)) {\n      return false;\n    }\n\n    if (this.bothValuesAreStrings(value1, value2)) {\n      return value1 === value2;\n    }\n\n    return this.arraysHaveEqualContent(value1 as any[], value2 as any[]);\n  }\n\n  areEqual(\n    value1: string | any[] | any | null | undefined,\n    value2: string | any[] | any | null | undefined\n  ): boolean {\n    if (!value1 || !value2) {\n      return false;\n    }\n\n    if (this.bothValuesAreArrays(value1, value2)) {\n      return this.arraysStrictEqual(value1 as any[], value2 as any[]);\n    }\n\n    if (this.bothValuesAreStrings(value1, value2)) {\n      return value1 === value2;\n    }\n\n    if (this.bothValuesAreObjects(value1, value2)) {\n      return (\n        JSON.stringify(value1).toLowerCase() ===\n        JSON.stringify(value2).toLowerCase()\n      );\n    }\n\n    if (this.oneValueIsStringAndTheOtherIsArray(value1, value2)) {\n      if (Array.isArray(value1) && this.valueIsString(value2)) {\n        return value1[0] === value2;\n      }\n      if (Array.isArray(value2) && this.valueIsString(value1)) {\n        return value2[0] === value1;\n      }\n    }\n\n    return value1 === value2;\n  }\n\n  private oneValueIsStringAndTheOtherIsArray(\n    value1: string | any | any[],\n    value2: string | any | any[]\n  ): boolean {\n    return (\n      (Array.isArray(value1) && this.valueIsString(value2)) ||\n      (Array.isArray(value2) && this.valueIsString(value1))\n    );\n  }\n\n  private bothValuesAreObjects(\n    value1: string | any | any[],\n    value2: string | any | any[]\n  ): boolean {\n    return this.valueIsObject(value1) && this.valueIsObject(value2);\n  }\n\n  private bothValuesAreStrings(\n    value1: string | any | any[],\n    value2: string | any | any[]\n  ): boolean {\n    return this.valueIsString(value1) && this.valueIsString(value2);\n  }\n\n  private bothValuesAreArrays(\n    value1: string | any | any[],\n    value2: string | any | any[]\n  ): boolean {\n    return Array.isArray(value1) && Array.isArray(value2);\n  }\n\n  private valueIsString(value: any): boolean {\n    return typeof value === 'string' || value instanceof String;\n  }\n\n  private valueIsObject(value: any): boolean {\n    return typeof value === 'object';\n  }\n\n  private arraysStrictEqual(arr1: Array<string>, arr2: Array<string>): boolean {\n    if (arr1.length !== arr2.length) {\n      return false;\n    }\n\n    for (let i = arr1.length; i--; ) {\n      if (arr1[i] !== arr2[i]) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  private arraysHaveEqualContent(\n    arr1: Array<string>,\n    arr2: Array<string>\n  ): boolean {\n    if (arr1.length !== arr2.length) {\n      return false;\n    }\n\n    return arr1.some((v) => arr2.includes(v));\n  }\n\n  private isNullOrUndefined(val: any): boolean {\n    return val === null || val === undefined;\n  }\n}\n","import { ValidationResult } from './validation-result';\n\nexport class StateValidationResult {\n  constructor(\n    public accessToken = '',\n    public idToken = '',\n    public authResponseIsValid = false,\n    public decodedIdToken: any = {\n      at_hash: '',\n    },\n    public state: ValidationResult = ValidationResult.NotSet\n  ) {}\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { map, mergeMap } from 'rxjs/operators';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { CallbackContext } from '../flows/callback-context';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { EqualityService } from '../utils/equality/equality.service';\r\nimport { FlowHelper } from '../utils/flowHelper/flow-helper.service';\r\nimport { TokenHelperService } from '../utils/tokenHelper/token-helper.service';\r\nimport { StateValidationResult } from './state-validation-result';\r\nimport { TokenValidationService } from './token-validation.service';\r\nimport { ValidationResult } from './validation-result';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class StateValidationService {\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly tokenValidationService = inject(TokenValidationService);\r\n  private readonly tokenHelperService = inject(TokenHelperService);\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly equalityService = inject(EqualityService);\r\n  private readonly flowHelper = inject(FlowHelper);\r\n\r\n  getValidatedStateResult(\r\n    callbackContext: CallbackContext,\r\n    configuration: OpenIdConfiguration\r\n  ): Observable<StateValidationResult> {\r\n    const hasError = Boolean(callbackContext.authResult?.error);\r\n    const hasCallbackContext = Boolean(callbackContext);\r\n\r\n    if (!hasCallbackContext || hasError) {\r\n      return of(new StateValidationResult('', '', false, {}));\r\n    }\r\n\r\n    return this.validateState(callbackContext, configuration);\r\n  }\r\n\r\n  private validateState(\r\n    callbackContext: CallbackContext,\r\n    configuration: OpenIdConfiguration\r\n  ): Observable<StateValidationResult> {\r\n    const toReturn = new StateValidationResult();\r\n    const authStateControl = this.storagePersistenceService.read(\r\n      'authStateControl',\r\n      configuration\r\n    );\r\n\r\n    if (\r\n      !this.tokenValidationService.validateStateFromHashCallback(\r\n        callbackContext.authResult?.state,\r\n        authStateControl,\r\n        configuration\r\n      )\r\n    ) {\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        'authCallback incorrect state'\r\n      );\r\n      toReturn.state = ValidationResult.StatesDoNotMatch;\r\n      this.handleUnsuccessfulValidation(configuration);\r\n\r\n      return of(toReturn);\r\n    }\r\n\r\n    const isCurrentFlowImplicitFlowWithAccessToken =\r\n      this.flowHelper.isCurrentFlowImplicitFlowWithAccessToken(configuration);\r\n    const isCurrentFlowCodeFlow =\r\n      this.flowHelper.isCurrentFlowCodeFlow(configuration);\r\n\r\n    if (isCurrentFlowImplicitFlowWithAccessToken || isCurrentFlowCodeFlow) {\r\n      toReturn.accessToken = callbackContext.authResult?.access_token ?? '';\r\n    }\r\n\r\n    const disableIdTokenValidation = configuration.disableIdTokenValidation;\r\n\r\n    if (disableIdTokenValidation) {\r\n      toReturn.state = ValidationResult.Ok;\r\n      toReturn.authResponseIsValid = true;\r\n\r\n      return of(toReturn);\r\n    }\r\n\r\n    const isInRefreshTokenFlow =\r\n      callbackContext.isRenewProcess && !!callbackContext.refreshToken;\r\n    const hasIdToken = Boolean(callbackContext.authResult?.id_token);\r\n\r\n    if (isInRefreshTokenFlow && !hasIdToken) {\r\n      toReturn.state = ValidationResult.Ok;\r\n      toReturn.authResponseIsValid = true;\r\n\r\n      return of(toReturn);\r\n    }\r\n\r\n    if (hasIdToken) {\r\n      const {\r\n        clientId,\r\n        issValidationOff,\r\n        maxIdTokenIatOffsetAllowedInSeconds,\r\n        disableIatOffsetValidation,\r\n        ignoreNonceAfterRefresh,\r\n        renewTimeBeforeTokenExpiresInSeconds,\r\n      } = configuration;\r\n\r\n      toReturn.idToken = callbackContext.authResult?.id_token ?? '';\r\n      toReturn.decodedIdToken = this.tokenHelperService.getPayloadFromToken(\r\n        toReturn.idToken,\r\n        false,\r\n        configuration\r\n      );\r\n\r\n      return this.tokenValidationService\r\n        .validateSignatureIdToken(\r\n          toReturn.idToken,\r\n          callbackContext.jwtKeys,\r\n          configuration\r\n        )\r\n        .pipe(\r\n          mergeMap((isSignatureIdTokenValid: boolean) => {\r\n            if (!isSignatureIdTokenValid) {\r\n              this.loggerService.logDebug(\r\n                configuration,\r\n                'authCallback Signature validation failed id_token'\r\n              );\r\n              toReturn.state = ValidationResult.SignatureFailed;\r\n              this.handleUnsuccessfulValidation(configuration);\r\n\r\n              return of(toReturn);\r\n            }\r\n\r\n            const authNonce = this.storagePersistenceService.read(\r\n              'authNonce',\r\n              configuration\r\n            );\r\n\r\n            if (\r\n              !this.tokenValidationService.validateIdTokenNonce(\r\n                toReturn.decodedIdToken,\r\n                authNonce,\r\n                Boolean(ignoreNonceAfterRefresh),\r\n                configuration\r\n              )\r\n            ) {\r\n              this.loggerService.logWarning(\r\n                configuration,\r\n                'authCallback incorrect nonce, did you call the checkAuth() method multiple times?'\r\n              );\r\n              toReturn.state = ValidationResult.IncorrectNonce;\r\n              this.handleUnsuccessfulValidation(configuration);\r\n\r\n              return of(toReturn);\r\n            }\r\n\r\n            if (\r\n              !this.tokenValidationService.validateRequiredIdToken(\r\n                toReturn.decodedIdToken,\r\n                configuration\r\n              )\r\n            ) {\r\n              this.loggerService.logDebug(\r\n                configuration,\r\n                'authCallback Validation, one of the REQUIRED properties missing from id_token'\r\n              );\r\n              toReturn.state = ValidationResult.RequiredPropertyMissing;\r\n              this.handleUnsuccessfulValidation(configuration);\r\n\r\n              return of(toReturn);\r\n            }\r\n\r\n            if (\r\n              !isInRefreshTokenFlow &&\r\n              !this.tokenValidationService.validateIdTokenIatMaxOffset(\r\n                toReturn.decodedIdToken,\r\n                maxIdTokenIatOffsetAllowedInSeconds ?? 120,\r\n                Boolean(disableIatOffsetValidation),\r\n                configuration\r\n              )\r\n            ) {\r\n              this.loggerService.logWarning(\r\n                configuration,\r\n                'authCallback Validation, iat rejected id_token was issued too far away from the current time'\r\n              );\r\n              toReturn.state = ValidationResult.MaxOffsetExpired;\r\n              this.handleUnsuccessfulValidation(configuration);\r\n\r\n              return of(toReturn);\r\n            }\r\n\r\n            const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n              'authWellKnownEndPoints',\r\n              configuration\r\n            );\r\n\r\n            if (authWellKnownEndPoints) {\r\n              if (issValidationOff) {\r\n                this.loggerService.logDebug(\r\n                  configuration,\r\n                  'iss validation is turned off, this is not recommended!'\r\n                );\r\n              } else if (\r\n                !issValidationOff &&\r\n                !this.tokenValidationService.validateIdTokenIss(\r\n                  toReturn.decodedIdToken,\r\n                  authWellKnownEndPoints.issuer,\r\n                  configuration\r\n                )\r\n              ) {\r\n                this.loggerService.logWarning(\r\n                  configuration,\r\n                  'authCallback incorrect iss does not match authWellKnownEndpoints issuer'\r\n                );\r\n                toReturn.state = ValidationResult.IssDoesNotMatchIssuer;\r\n                this.handleUnsuccessfulValidation(configuration);\r\n\r\n                return of(toReturn);\r\n              }\r\n            } else {\r\n              this.loggerService.logWarning(\r\n                configuration,\r\n                'authWellKnownEndpoints is undefined'\r\n              );\r\n              toReturn.state = ValidationResult.NoAuthWellKnownEndPoints;\r\n              this.handleUnsuccessfulValidation(configuration);\r\n\r\n              return of(toReturn);\r\n            }\r\n\r\n            if (\r\n              !this.tokenValidationService.validateIdTokenAud(\r\n                toReturn.decodedIdToken,\r\n                clientId,\r\n                configuration\r\n              )\r\n            ) {\r\n              this.loggerService.logWarning(\r\n                configuration,\r\n                'authCallback incorrect aud'\r\n              );\r\n              toReturn.state = ValidationResult.IncorrectAud;\r\n              this.handleUnsuccessfulValidation(configuration);\r\n\r\n              return of(toReturn);\r\n            }\r\n\r\n            if (\r\n              !this.tokenValidationService.validateIdTokenAzpExistsIfMoreThanOneAud(\r\n                toReturn.decodedIdToken\r\n              )\r\n            ) {\r\n              this.loggerService.logWarning(\r\n                configuration,\r\n                'authCallback missing azp'\r\n              );\r\n              toReturn.state = ValidationResult.IncorrectAzp;\r\n              this.handleUnsuccessfulValidation(configuration);\r\n\r\n              return of(toReturn);\r\n            }\r\n\r\n            if (\r\n              !this.tokenValidationService.validateIdTokenAzpValid(\r\n                toReturn.decodedIdToken,\r\n                clientId\r\n              )\r\n            ) {\r\n              this.loggerService.logWarning(\r\n                configuration,\r\n                'authCallback incorrect azp'\r\n              );\r\n              toReturn.state = ValidationResult.IncorrectAzp;\r\n              this.handleUnsuccessfulValidation(configuration);\r\n\r\n              return of(toReturn);\r\n            }\r\n\r\n            if (\r\n              !this.isIdTokenAfterRefreshTokenRequestValid(\r\n                callbackContext,\r\n                toReturn.decodedIdToken,\r\n                configuration\r\n              )\r\n            ) {\r\n              this.loggerService.logWarning(\r\n                configuration,\r\n                'authCallback pre, post id_token claims do not match in refresh'\r\n              );\r\n              toReturn.state =\r\n                ValidationResult.IncorrectIdTokenClaimsAfterRefresh;\r\n              this.handleUnsuccessfulValidation(configuration);\r\n\r\n              return of(toReturn);\r\n            }\r\n\r\n            if (\r\n              !isInRefreshTokenFlow &&\r\n              !this.tokenValidationService.validateIdTokenExpNotExpired(\r\n                toReturn.decodedIdToken,\r\n                configuration,\r\n                renewTimeBeforeTokenExpiresInSeconds\r\n              )\r\n            ) {\r\n              this.loggerService.logWarning(\r\n                configuration,\r\n                'authCallback id token expired'\r\n              );\r\n              toReturn.state = ValidationResult.TokenExpired;\r\n              this.handleUnsuccessfulValidation(configuration);\r\n\r\n              return of(toReturn);\r\n            }\r\n\r\n            return this.validateDefault(\r\n              isCurrentFlowImplicitFlowWithAccessToken,\r\n              isCurrentFlowCodeFlow,\r\n              toReturn,\r\n              configuration,\r\n              callbackContext\r\n            );\r\n          })\r\n        );\r\n    } else {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        'No id_token found, skipping id_token validation'\r\n      );\r\n    }\r\n\r\n    return this.validateDefault(\r\n      isCurrentFlowImplicitFlowWithAccessToken,\r\n      isCurrentFlowCodeFlow,\r\n      toReturn,\r\n      configuration,\r\n      callbackContext\r\n    );\r\n  }\r\n\r\n  private validateDefault(\r\n    isCurrentFlowImplicitFlowWithAccessToken: boolean,\r\n    isCurrentFlowCodeFlow: boolean,\r\n    toReturn: StateValidationResult,\r\n    configuration: OpenIdConfiguration,\r\n    callbackContext: CallbackContext\r\n  ): Observable<StateValidationResult> {\r\n    // flow id_token\r\n    if (!isCurrentFlowImplicitFlowWithAccessToken && !isCurrentFlowCodeFlow) {\r\n      toReturn.authResponseIsValid = true;\r\n      toReturn.state = ValidationResult.Ok;\r\n      this.handleSuccessfulValidation(configuration);\r\n      this.handleUnsuccessfulValidation(configuration);\r\n\r\n      return of(toReturn);\r\n    }\r\n\r\n    // only do check if id_token returned, no always the case when using refresh tokens\r\n    if (callbackContext.authResult?.id_token) {\r\n      const idTokenHeader = this.tokenHelperService.getHeaderFromToken(\r\n        toReturn.idToken,\r\n        false,\r\n        configuration\r\n      );\r\n\r\n      if (\r\n        isCurrentFlowCodeFlow &&\r\n        !(toReturn.decodedIdToken.at_hash as string)\r\n      ) {\r\n        this.loggerService.logDebug(\r\n          configuration,\r\n          'Code Flow active, and no at_hash in the id_token, skipping check!'\r\n        );\r\n      } else {\r\n        return this.tokenValidationService\r\n          .validateIdTokenAtHash(\r\n            toReturn.accessToken,\r\n            toReturn.decodedIdToken.at_hash,\r\n            idTokenHeader.alg, // 'RS256'\r\n            configuration\r\n          )\r\n          .pipe(\r\n            map((valid: boolean) => {\r\n              if (!valid || !toReturn.accessToken) {\r\n                this.loggerService.logWarning(\r\n                  configuration,\r\n                  'authCallback incorrect at_hash'\r\n                );\r\n                toReturn.state = ValidationResult.IncorrectAtHash;\r\n                this.handleUnsuccessfulValidation(configuration);\r\n\r\n                return toReturn;\r\n              } else {\r\n                toReturn.authResponseIsValid = true;\r\n                toReturn.state = ValidationResult.Ok;\r\n                this.handleSuccessfulValidation(configuration);\r\n\r\n                return toReturn;\r\n              }\r\n            })\r\n          );\r\n      }\r\n    }\r\n\r\n    toReturn.authResponseIsValid = true;\r\n    toReturn.state = ValidationResult.Ok;\r\n    this.handleSuccessfulValidation(configuration);\r\n\r\n    return of(toReturn);\r\n  }\r\n\r\n  private isIdTokenAfterRefreshTokenRequestValid(\r\n    callbackContext: CallbackContext,\r\n    newIdToken: any,\r\n    configuration: OpenIdConfiguration\r\n  ): boolean {\r\n    const { useRefreshToken, disableRefreshIdTokenAuthTimeValidation } =\r\n      configuration;\r\n\r\n    if (!useRefreshToken) {\r\n      return true;\r\n    }\r\n\r\n    if (!callbackContext.existingIdToken) {\r\n      return true;\r\n    }\r\n\r\n    const decodedIdToken = this.tokenHelperService.getPayloadFromToken(\r\n      callbackContext.existingIdToken,\r\n      false,\r\n      configuration\r\n    );\r\n\r\n    // Upon successful validation of the Refresh Token, the response body is the Token Response of Section 3.1.3.3\r\n    // except that it might not contain an id_token.\r\n\r\n    // If an ID Token is returned as a result of a token refresh request, the following requirements apply:\r\n\r\n    // its iss Claim Value MUST be the same as in the ID Token issued when the original authentication occurred,\r\n    if (decodedIdToken.iss !== newIdToken.iss) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `iss do not match: ${decodedIdToken.iss} ${newIdToken.iss}`\r\n      );\r\n\r\n      return false;\r\n    }\r\n    // its azp Claim Value MUST be the same as in the ID Token issued when the original authentication occurred;\r\n    //   if no azp Claim was present in the original ID Token, one MUST NOT be present in the new ID Token, and\r\n    // otherwise, the same rules apply as apply when issuing an ID Token at the time of the original authentication.\r\n    if (decodedIdToken.azp !== newIdToken.azp) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `azp do not match: ${decodedIdToken.azp} ${newIdToken.azp}`\r\n      );\r\n\r\n      return false;\r\n    }\r\n    // its sub Claim Value MUST be the same as in the ID Token issued when the original authentication occurred,\r\n    if (decodedIdToken.sub !== newIdToken.sub) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `sub do not match: ${decodedIdToken.sub} ${newIdToken.sub}`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    // its aud Claim Value MUST be the same as in the ID Token issued when the original authentication occurred,\r\n    if (\r\n      !this.equalityService.isStringEqualOrNonOrderedArrayEqual(\r\n        decodedIdToken?.aud,\r\n        newIdToken?.aud\r\n      )\r\n    ) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `aud in new id_token is not valid: '${decodedIdToken?.aud}' '${newIdToken.aud}'`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    if (disableRefreshIdTokenAuthTimeValidation) {\r\n      return true;\r\n    }\r\n\r\n    // its iat Claim MUST represent the time that the new ID Token is issued,\r\n    // if the ID Token contains an auth_time Claim, its value MUST represent the time of the original authentication\r\n    // - not the time that the new ID token is issued,\r\n    if (decodedIdToken.auth_time !== newIdToken.auth_time) {\r\n      this.loggerService.logDebug(\r\n        configuration,\r\n        `auth_time do not match: ${decodedIdToken.auth_time} ${newIdToken.auth_time}`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    return true;\r\n  }\r\n\r\n  private handleSuccessfulValidation(configuration: OpenIdConfiguration): void {\r\n    const { autoCleanStateAfterAuthentication } = configuration;\r\n\r\n    this.storagePersistenceService.write('authNonce', null, configuration);\r\n\r\n    if (autoCleanStateAfterAuthentication) {\r\n      this.storagePersistenceService.write(\r\n        'authStateControl',\r\n        '',\r\n        configuration\r\n      );\r\n    }\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'authCallback token(s) validated, continue'\r\n    );\r\n  }\r\n\r\n  private handleUnsuccessfulValidation(\r\n    configuration: OpenIdConfiguration\r\n  ): void {\r\n    const { autoCleanStateAfterAuthentication } = configuration;\r\n\r\n    this.storagePersistenceService.write('authNonce', null, configuration);\r\n\r\n    if (autoCleanStateAfterAuthentication) {\r\n      this.storagePersistenceService.write(\r\n        'authStateControl',\r\n        '',\r\n        configuration\r\n      );\r\n    }\r\n    this.loggerService.logDebug(configuration, 'authCallback token(s) invalid');\r\n  }\r\n}\r\n","\r\nimport { inject, Injectable, DOCUMENT } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { AuthStateService } from '../../auth-state/auth-state.service';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { StateValidationResult } from '../../validation/state-validation-result';\r\nimport { StateValidationService } from '../../validation/state-validation.service';\r\nimport { CallbackContext } from '../callback-context';\r\nimport { ResetAuthDataService } from '../reset-auth-data.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class StateValidationCallbackHandlerService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly stateValidationService = inject(StateValidationService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly resetAuthDataService = inject(ResetAuthDataService);\r\n  private readonly document = inject(DOCUMENT);\r\n\r\n  // STEP 4 All flows\r\n  callbackStateValidation(\r\n    callbackContext: CallbackContext,\r\n    configuration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<CallbackContext> {\r\n    return this.stateValidationService\r\n      .getValidatedStateResult(callbackContext, configuration)\r\n      .pipe(\r\n        map((validationResult: StateValidationResult) => {\r\n          callbackContext.validationResult = validationResult;\r\n\r\n          if (validationResult.authResponseIsValid) {\r\n            this.authStateService.setAuthorizationData(\r\n              validationResult.accessToken,\r\n              callbackContext.authResult,\r\n              configuration,\r\n              allConfigs\r\n            );\r\n\r\n            return callbackContext;\r\n          } else {\r\n            const errorMessage = `authorizedCallback, token(s) validation failed, resetting. Hash: ${this.document.location.hash}`;\r\n\r\n            this.loggerService.logWarning(configuration, errorMessage);\r\n            this.resetAuthDataService.resetAuthorizationData(\r\n              configuration,\r\n              allConfigs\r\n            );\r\n            this.publishUnauthorizedState(\r\n              callbackContext.validationResult,\r\n              callbackContext.isRenewProcess,\r\n              configuration.configId\r\n            );\r\n\r\n            throw new Error(errorMessage);\r\n          }\r\n        })\r\n      );\r\n  }\r\n\r\n  private publishUnauthorizedState(\r\n    stateValidationResult: StateValidationResult,\r\n    isRenewProcess: boolean,\r\n    configId?: string\r\n  ): void {\r\n    this.authStateService.updateAndPublishAuthState({\r\n      isAuthenticated: false,\r\n      validationResult: stateValidationResult.state,\r\n      isRenewProcess,\r\n      configId,\r\n    });\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { catchError, switchMap } from 'rxjs/operators';\r\nimport { AuthStateService } from '../../auth-state/auth-state.service';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { UserService } from '../../user-data/user.service';\r\nimport { StateValidationResult } from '../../validation/state-validation-result';\r\nimport { CallbackContext } from '../callback-context';\r\nimport { FlowsDataService } from '../flows-data.service';\r\nimport { ResetAuthDataService } from '../reset-auth-data.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UserCallbackHandlerService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly userService = inject(UserService);\r\n  private readonly resetAuthDataService = inject(ResetAuthDataService);\r\n\r\n  // STEP 5 userData\r\n  callbackUser(\r\n    callbackContext: CallbackContext,\r\n    configuration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<CallbackContext> {\r\n    const { isRenewProcess, validationResult, authResult, refreshToken } =\r\n      callbackContext;\r\n    const { autoUserInfo, renewUserInfoAfterTokenRenew } = configuration;\r\n\r\n    if (!autoUserInfo) {\r\n      if (!isRenewProcess || renewUserInfoAfterTokenRenew) {\r\n        // userData is set to the id_token decoded, auto get user data set to false\r\n        if (validationResult?.decodedIdToken) {\r\n          this.userService.setUserDataToStore(\r\n            validationResult.decodedIdToken,\r\n            configuration,\r\n            allConfigs\r\n          );\r\n        }\r\n      }\r\n\r\n      if (!isRenewProcess && !refreshToken) {\r\n        this.flowsDataService.setSessionState(\r\n          authResult?.session_state,\r\n          configuration\r\n        );\r\n      }\r\n\r\n      this.publishAuthState(validationResult, isRenewProcess, configuration.configId);\r\n\r\n      return of(callbackContext);\r\n    }\r\n\r\n    return this.userService\r\n      .getAndPersistUserDataInStore(\r\n        configuration,\r\n        allConfigs,\r\n        isRenewProcess,\r\n        validationResult?.idToken,\r\n        validationResult?.decodedIdToken\r\n      )\r\n      .pipe(\r\n        switchMap((userData) => {\r\n          if (!!userData) {\r\n            if (!refreshToken) {\r\n              this.flowsDataService.setSessionState(\r\n                authResult?.session_state,\r\n                configuration\r\n              );\r\n            }\r\n\r\n            this.publishAuthState(validationResult, isRenewProcess, configuration.configId);\r\n\r\n            return of(callbackContext);\r\n          } else {\r\n            this.resetAuthDataService.resetAuthorizationData(\r\n              configuration,\r\n              allConfigs\r\n            );\r\n            this.publishUnauthenticatedState(validationResult, isRenewProcess, configuration.configId);\r\n            const errorMessage = `Called for userData but they were ${userData}`;\r\n\r\n            this.loggerService.logWarning(configuration, errorMessage);\r\n\r\n            return throwError(() => new Error(errorMessage));\r\n          }\r\n        }),\r\n        catchError((err) => {\r\n          const errorMessage = `Failed to retrieve user info with error:  ${err}`;\r\n\r\n          this.loggerService.logWarning(configuration, errorMessage);\r\n\r\n          return throwError(() => new Error(errorMessage));\r\n        })\r\n      );\r\n  }\r\n\r\n  private publishAuthState(\r\n    stateValidationResult: StateValidationResult | null,\r\n    isRenewProcess: boolean,\r\n    configId?: string\r\n  ): void {\r\n    if (!stateValidationResult) {\r\n      return;\r\n    }\r\n\r\n    this.authStateService.updateAndPublishAuthState({\r\n      isAuthenticated: true,\r\n      validationResult: stateValidationResult.state,\r\n      isRenewProcess,\r\n      configId,\r\n    });\r\n  }\r\n\r\n  private publishUnauthenticatedState(\r\n    stateValidationResult: StateValidationResult | null,\r\n    isRenewProcess: boolean,\r\n    configId?: string\r\n  ): void {\r\n    if (!stateValidationResult) {\r\n      return;\r\n    }\r\n\r\n    this.authStateService.updateAndPublishAuthState({\r\n      isAuthenticated: false,\r\n      validationResult: stateValidationResult.state,\r\n      isRenewProcess,\r\n      configId,\r\n    });\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { concatMap } from 'rxjs/operators';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { CallbackContext } from './callback-context';\r\nimport { CodeFlowCallbackHandlerService } from './callback-handling/code-flow-callback-handler.service';\r\nimport { HistoryJwtKeysCallbackHandlerService } from './callback-handling/history-jwt-keys-callback-handler.service';\r\nimport { ImplicitFlowCallbackHandlerService } from './callback-handling/implicit-flow-callback-handler.service';\r\nimport { RefreshSessionCallbackHandlerService } from './callback-handling/refresh-session-callback-handler.service';\r\nimport { RefreshTokenCallbackHandlerService } from './callback-handling/refresh-token-callback-handler.service';\r\nimport { StateValidationCallbackHandlerService } from './callback-handling/state-validation-callback-handler.service';\r\nimport { UserCallbackHandlerService } from './callback-handling/user-callback-handler.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class FlowsService {\r\n  private readonly codeFlowCallbackHandlerService = inject(\r\n    CodeFlowCallbackHandlerService\r\n  );\r\n  private readonly implicitFlowCallbackHandlerService = inject(\r\n    ImplicitFlowCallbackHandlerService\r\n  );\r\n  private readonly historyJwtKeysCallbackHandlerService = inject(\r\n    HistoryJwtKeysCallbackHandlerService\r\n  );\r\n  private readonly userHandlerService = inject(UserCallbackHandlerService);\r\n  private readonly stateValidationCallbackHandlerService = inject(\r\n    StateValidationCallbackHandlerService\r\n  );\r\n  private readonly refreshSessionCallbackHandlerService = inject(\r\n    RefreshSessionCallbackHandlerService\r\n  );\r\n  private readonly refreshTokenCallbackHandlerService = inject(\r\n    RefreshTokenCallbackHandlerService\r\n  );\r\n\r\n  processCodeFlowCallback(\r\n    urlToCheck: string,\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<CallbackContext> {\r\n    return this.codeFlowCallbackHandlerService\r\n      .codeFlowCallback(urlToCheck, config)\r\n      .pipe(\r\n        concatMap((callbackContext) =>\r\n          this.codeFlowCallbackHandlerService.codeFlowCodeRequest(\r\n            callbackContext,\r\n            config\r\n          )\r\n        ),\r\n        concatMap((callbackContext) =>\r\n          this.historyJwtKeysCallbackHandlerService.callbackHistoryAndResetJwtKeys(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        ),\r\n        concatMap((callbackContext) =>\r\n          this.stateValidationCallbackHandlerService.callbackStateValidation(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        ),\r\n        concatMap((callbackContext) =>\r\n          this.userHandlerService.callbackUser(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        )\r\n      );\r\n  }\r\n\r\n  processSilentRenewCodeFlowCallback(\r\n    firstContext: CallbackContext,\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<CallbackContext> {\r\n    return this.codeFlowCallbackHandlerService\r\n      .codeFlowCodeRequest(firstContext, config)\r\n      .pipe(\r\n        concatMap((callbackContext) =>\r\n          this.historyJwtKeysCallbackHandlerService.callbackHistoryAndResetJwtKeys(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        ),\r\n        concatMap((callbackContext) =>\r\n          this.stateValidationCallbackHandlerService.callbackStateValidation(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        ),\r\n        concatMap((callbackContext) =>\r\n          this.userHandlerService.callbackUser(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        )\r\n      );\r\n  }\r\n\r\n  processImplicitFlowCallback(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    hash?: string\r\n  ): Observable<CallbackContext> {\r\n    return this.implicitFlowCallbackHandlerService\r\n      .implicitFlowCallback(config, allConfigs, hash)\r\n      .pipe(\r\n        concatMap((callbackContext) =>\r\n          this.historyJwtKeysCallbackHandlerService.callbackHistoryAndResetJwtKeys(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        ),\r\n        concatMap((callbackContext) =>\r\n          this.stateValidationCallbackHandlerService.callbackStateValidation(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        ),\r\n        concatMap((callbackContext) =>\r\n          this.userHandlerService.callbackUser(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        )\r\n      );\r\n  }\r\n\r\n  processRefreshToken(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    customParamsRefresh?: { [key: string]: string | number | boolean }\r\n  ): Observable<CallbackContext> {\r\n    return this.refreshSessionCallbackHandlerService\r\n      .refreshSessionWithRefreshTokens(config)\r\n      .pipe(\r\n        concatMap((callbackContext) =>\r\n          this.refreshTokenCallbackHandlerService.refreshTokensRequestTokens(\r\n            callbackContext,\r\n            config,\r\n            customParamsRefresh\r\n          )\r\n        ),\r\n        concatMap((callbackContext) =>\r\n          this.historyJwtKeysCallbackHandlerService.callbackHistoryAndResetJwtKeys(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        ),\r\n        concatMap((callbackContext) =>\r\n          this.stateValidationCallbackHandlerService.callbackStateValidation(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        ),\r\n        concatMap((callbackContext) =>\r\n          this.userHandlerService.callbackUser(\r\n            callbackContext,\r\n            config,\r\n            allConfigs\r\n          )\r\n        )\r\n      );\r\n  }\r\n}\r\n","import { DOCUMENT, inject, Injectable, NgZone } from '@angular/core';\r\nimport { Observable, Subscriber, Subscription } from 'rxjs';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class IntervalService {\r\n  runTokenValidationRunning: Subscription | null = null;\r\n\r\n  private readonly zone = inject(NgZone);\r\n  private readonly document = inject(DOCUMENT);\r\n\r\n  isTokenValidationRunning(): boolean {\r\n    return Boolean(this.runTokenValidationRunning);\r\n  }\r\n\r\n  stopPeriodicTokenCheck(): void {\r\n    if (this.runTokenValidationRunning) {\r\n      this.runTokenValidationRunning.unsubscribe();\r\n      this.runTokenValidationRunning = null;\r\n    }\r\n  }\r\n\r\n  startPeriodicTokenCheck(repeatAfterSeconds: number): Observable<unknown> {\r\n    const millisecondsDelayBetweenTokenCheck = repeatAfterSeconds * 1000;\r\n\r\n    return new Observable((subscriber: Subscriber<void>) => {\r\n      let intervalId: number | undefined;\r\n\r\n      this.zone.runOutsideAngular(() => {\r\n        intervalId = this.document?.defaultView?.setInterval(\r\n          () => this.zone.run(() => subscriber.next()),\r\n          millisecondsDelayBetweenTokenCheck\r\n        );\r\n      });\r\n\r\n      return (): void => {\r\n        clearInterval(intervalId);\r\n      };\r\n    });\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { CallbackContext } from '../flows/callback-context';\r\nimport { FlowsDataService } from '../flows/flows-data.service';\r\nimport { FlowsService } from '../flows/flows.service';\r\nimport { IntervalService } from './interval.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CodeFlowCallbackService {\r\n  private readonly flowsService = inject(FlowsService);\r\n  private readonly router = inject(Router);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly intervalService = inject(IntervalService);\r\n\r\n  authenticatedCallbackWithCode(\r\n    urlToCheck: string,\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<CallbackContext> {\r\n    const isRenewProcess = this.flowsDataService.isSilentRenewRunning(config);\r\n    const { triggerAuthorizationResultEvent } = config;\r\n    const postLoginRoute = config.postLoginRoute || '/';\r\n    const unauthorizedRoute = config.unauthorizedRoute || '/';\r\n\r\n    return this.flowsService\r\n      .processCodeFlowCallback(urlToCheck, config, allConfigs)\r\n      .pipe(\r\n        tap((callbackContext) => {\r\n          this.flowsDataService.resetCodeFlowInProgress(config);\r\n          if (\r\n            !triggerAuthorizationResultEvent &&\r\n            !callbackContext.isRenewProcess\r\n          ) {\r\n            this.router.navigateByUrl(postLoginRoute);\r\n          }\r\n        }),\r\n        catchError((error) => {\r\n          this.flowsDataService.resetSilentRenewRunning(config);\r\n          this.flowsDataService.resetCodeFlowInProgress(config);\r\n          this.intervalService.stopPeriodicTokenCheck();\r\n          if (!triggerAuthorizationResultEvent && !isRenewProcess) {\r\n            this.router.navigateByUrl(unauthorizedRoute);\r\n          }\r\n\r\n          return throwError(() => new Error(error));\r\n        })\r\n      );\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { CallbackContext } from '../flows/callback-context';\r\nimport { FlowsDataService } from '../flows/flows-data.service';\r\nimport { FlowsService } from '../flows/flows.service';\r\nimport { IntervalService } from './interval.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ImplicitFlowCallbackService {\r\n  private readonly flowsService = inject(FlowsService);\r\n  private readonly router = inject(Router);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly intervalService = inject(IntervalService);\r\n\r\n  authenticatedImplicitFlowCallback(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    hash?: string\r\n  ): Observable<CallbackContext> {\r\n    const isRenewProcess = this.flowsDataService.isSilentRenewRunning(config);\r\n    const triggerAuthorizationResultEvent = Boolean(\r\n      config.triggerAuthorizationResultEvent\r\n    );\r\n    const postLoginRoute = config.postLoginRoute ?? '';\r\n    const unauthorizedRoute = config.unauthorizedRoute ?? '';\r\n\r\n    return this.flowsService\r\n      .processImplicitFlowCallback(config, allConfigs, hash)\r\n      .pipe(\r\n        tap((callbackContext) => {\r\n          if (\r\n            !triggerAuthorizationResultEvent &&\r\n            !callbackContext.isRenewProcess\r\n          ) {\r\n            this.router.navigateByUrl(postLoginRoute);\r\n          }\r\n        }),\r\n        catchError((error) => {\r\n          this.flowsDataService.resetSilentRenewRunning(config);\r\n          this.intervalService.stopPeriodicTokenCheck();\r\n          if (!triggerAuthorizationResultEvent && !isRenewProcess) {\r\n            this.router.navigateByUrl(unauthorizedRoute);\r\n          }\r\n\r\n          return throwError(() => new Error(error));\r\n        })\r\n      );\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { tap } from 'rxjs/operators';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { CallbackContext } from '../flows/callback-context';\r\nimport { FlowHelper } from '../utils/flowHelper/flow-helper.service';\r\nimport { UrlService } from '../utils/url/url.service';\r\nimport { CodeFlowCallbackService } from './code-flow-callback.service';\r\nimport { ImplicitFlowCallbackService } from './implicit-flow-callback.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CallbackService {\r\n  private readonly urlService = inject(UrlService);\r\n  private readonly flowHelper = inject(FlowHelper);\r\n  private readonly implicitFlowCallbackService = inject(\r\n    ImplicitFlowCallbackService\r\n  );\r\n  private readonly codeFlowCallbackService = inject(CodeFlowCallbackService);\r\n\r\n  private readonly stsCallbackInternal$ = new Subject<void>();\r\n\r\n  get stsCallback$(): Observable<void> {\r\n    return this.stsCallbackInternal$.asObservable();\r\n  }\r\n\r\n  isCallback(currentUrl: string, config?: OpenIdConfiguration): boolean {\r\n    if (!currentUrl) {\r\n      return false;\r\n    }\r\n\r\n    return this.urlService.isCallbackFromSts(currentUrl, config);\r\n  }\r\n\r\n  handleCallbackAndFireEvents(\r\n    currentCallbackUrl: string,\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<CallbackContext> {\r\n    let callback$: Observable<CallbackContext> = new Observable();\r\n\r\n    if (this.flowHelper.isCurrentFlowCodeFlow(config)) {\r\n      callback$ = this.codeFlowCallbackService.authenticatedCallbackWithCode(\r\n        currentCallbackUrl,\r\n        config,\r\n        allConfigs\r\n      );\r\n    } else if (this.flowHelper.isCurrentFlowAnyImplicitFlow(config)) {\r\n      if (currentCallbackUrl?.includes('#')) {\r\n        const hash = currentCallbackUrl.substring(\r\n          currentCallbackUrl.indexOf('#') + 1\r\n        );\r\n\r\n        callback$ =\r\n          this.implicitFlowCallbackService.authenticatedImplicitFlowCallback(\r\n            config,\r\n            allConfigs,\r\n            hash\r\n          );\r\n      } else {\r\n        callback$ =\r\n          this.implicitFlowCallbackService.authenticatedImplicitFlowCallback(\r\n            config,\r\n            allConfigs\r\n          );\r\n      }\r\n    }\r\n\r\n    return callback$.pipe(tap(() => this.stsCallbackInternal$.next()));\r\n  }\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class PlatformProvider {\n  private readonly platformId = inject<string>(PLATFORM_ID);\n\n  isBrowser(): boolean {\n    return isPlatformBrowser(this.platformId);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { map, retry, tap } from 'rxjs/operators';\r\nimport { DataService } from '../../api/data.service';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { OpenIdConfiguration } from '../openid-configuration';\r\nimport { AuthWellKnownEndpoints } from './auth-well-known-endpoints';\r\n\r\nconst WELL_KNOWN_SUFFIX = `/.well-known/openid-configuration`;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthWellKnownDataService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly http = inject(DataService);\r\n\r\n  getWellKnownEndPointsForConfig(\r\n    config: OpenIdConfiguration\r\n  ): Observable<AuthWellKnownEndpoints> {\r\n    const { authWellknownEndpointUrl, authWellknownEndpoints = {} } = config;\r\n\r\n    if (!authWellknownEndpointUrl) {\r\n      const errorMessage = 'no authWellknownEndpoint given!';\r\n\r\n      this.loggerService.logError(config, errorMessage);\r\n\r\n      return throwError(() => new Error(errorMessage));\r\n    }\r\n\r\n    return this.getWellKnownDocument(authWellknownEndpointUrl, config).pipe(\r\n      map(\r\n        (wellKnownEndpoints) =>\r\n          ({\r\n            issuer: wellKnownEndpoints.issuer,\r\n            jwksUri: wellKnownEndpoints.jwks_uri,\r\n            authorizationEndpoint: wellKnownEndpoints.authorization_endpoint,\r\n            tokenEndpoint: wellKnownEndpoints.token_endpoint,\r\n            userInfoEndpoint: wellKnownEndpoints.userinfo_endpoint,\r\n            endSessionEndpoint: wellKnownEndpoints.end_session_endpoint,\r\n            checkSessionIframe: wellKnownEndpoints.check_session_iframe,\r\n            revocationEndpoint: wellKnownEndpoints.revocation_endpoint,\r\n            introspectionEndpoint: wellKnownEndpoints.introspection_endpoint,\r\n            parEndpoint:\r\n              wellKnownEndpoints.pushed_authorization_request_endpoint,\r\n          } as AuthWellKnownEndpoints)\r\n      ),\r\n      map((mappedWellKnownEndpoints) => ({\r\n        ...mappedWellKnownEndpoints,\r\n        ...authWellknownEndpoints,\r\n      })),\r\n      tap(\r\n        (wellKnownEndpoints) => {\r\n          const issuer = wellKnownEndpoints.issuer || \"\";\r\n          const wellKnownSuffix = config.authWellknownUrlSuffix || WELL_KNOWN_SUFFIX;\r\n          const configuredWellKnownEndpoint = authWellknownEndpointUrl.replace(wellKnownSuffix, \"\");\r\n          \r\n          if (!config.strictIssuerValidationOnWellKnownRetrievalOff && issuer !== configuredWellKnownEndpoint && issuer !== `${configuredWellKnownEndpoint}/`) {\r\n            const errorMessage = `Issuer mismatch. Well known issuer ${wellKnownEndpoints.issuer} does not match configured well known url ${authWellknownEndpointUrl}`;\r\n\r\n            this.loggerService.logError(config, errorMessage);\r\n            throw new Error(errorMessage);\r\n          }\r\n        }\r\n      )\r\n    );\r\n  }\r\n\r\n  private getWellKnownDocument(\r\n    wellKnownEndpoint: string,\r\n    config: OpenIdConfiguration\r\n  ): Observable<any> {\r\n    let url = wellKnownEndpoint;\r\n    const wellKnownSuffix = config.authWellknownUrlSuffix || WELL_KNOWN_SUFFIX;\r\n\r\n    if (!wellKnownEndpoint.includes(wellKnownSuffix)) {\r\n      url = `${wellKnownEndpoint}${wellKnownSuffix}`;\r\n    }\r\n\r\n    return this.http.get(url, config).pipe(retry(2));\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, tap } from 'rxjs/operators';\r\nimport { EventTypes } from '../../public-events/event-types';\r\nimport { PublicEventsService } from '../../public-events/public-events.service';\r\nimport { StoragePersistenceService } from '../../storage/storage-persistence.service';\r\nimport { OpenIdConfiguration } from '../openid-configuration';\r\nimport { AuthWellKnownDataService } from './auth-well-known-data.service';\r\nimport { AuthWellKnownEndpoints } from './auth-well-known-endpoints';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AuthWellKnownService {\r\n  private readonly dataService = inject(AuthWellKnownDataService);\r\n  private readonly publicEventsService = inject(PublicEventsService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n\r\n  storeWellKnownEndpoints(\r\n    config: OpenIdConfiguration,\r\n    mappedWellKnownEndpoints: AuthWellKnownEndpoints\r\n  ): void {\r\n    this.storagePersistenceService.write(\r\n      'authWellKnownEndPoints',\r\n      mappedWellKnownEndpoints,\r\n      config\r\n    );\r\n  }\r\n\r\n  queryAndStoreAuthWellKnownEndPoints(\r\n    config: OpenIdConfiguration | null\r\n  ): Observable<AuthWellKnownEndpoints> {\r\n    if (!config) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            'Please provide a configuration before setting up the module'\r\n          )\r\n      );\r\n    }\r\n\r\n    return this.dataService.getWellKnownEndPointsForConfig(config).pipe(\r\n      tap((mappedWellKnownEndpoints) =>\r\n        this.storeWellKnownEndpoints(config, mappedWellKnownEndpoints)\r\n      ),\r\n      catchError((error) => {\r\n        this.publicEventsService.fireEvent(\r\n          EventTypes.ConfigLoadingFailed,\r\n          null\r\n        );\r\n\r\n        return throwError(() => new Error(error));\r\n      })\r\n    );\r\n  }\r\n}\r\n","import { LogLevel } from '../logging/log-level';\r\nimport { OpenIdConfiguration } from './openid-configuration';\r\n\r\nexport const DEFAULT_CONFIG: OpenIdConfiguration = {\r\n  authority: 'https://please_set',\r\n  authWellknownEndpointUrl: '',\r\n  authWellknownEndpoints: undefined,\r\n  redirectUrl: 'https://please_set',\r\n  checkRedirectUrlWhenCheckingIfIsCallback: true,\r\n  clientId: 'please_set',\r\n  responseType: 'code',\r\n  scope: 'openid email profile',\r\n  hdParam: '',\r\n  postLogoutRedirectUri: 'https://please_set',\r\n  startCheckSession: false,\r\n  silentRenew: false,\r\n  silentRenewUrl: 'https://please_set',\r\n  silentRenewTimeoutInSeconds: 20,\r\n  renewTimeBeforeTokenExpiresInSeconds: 0,\r\n  useRefreshToken: false,\r\n  usePushedAuthorisationRequests: false,\r\n  ignoreNonceAfterRefresh: false,\r\n  postLoginRoute: '/',\r\n  forbiddenRoute: '/forbidden',\r\n  unauthorizedRoute: '/unauthorized',\r\n  autoUserInfo: true,\r\n  autoCleanStateAfterAuthentication: true,\r\n  triggerAuthorizationResultEvent: false,\r\n  logLevel: LogLevel.Warn,\r\n  issValidationOff: false,\r\n  strictIssuerValidationOnWellKnownRetrievalOff: false,\r\n  historyCleanupOff: false,\r\n  maxIdTokenIatOffsetAllowedInSeconds: 120,\r\n  disableIatOffsetValidation: false,\r\n  customParamsAuthRequest: {},\r\n  customParamsRefreshTokenRequest: {},\r\n  customParamsEndSessionRequest: {},\r\n  customParamsCodeRequest: {},\r\n  disableRefreshIdTokenAuthTimeValidation: false,\r\n  triggerRefreshWhenIdTokenExpired: true,\r\n  tokenRefreshInSeconds: 4,\r\n  refreshTokenRetryInSeconds: 3,\r\n  ngswBypass: false,\r\n};\r\n","import { OpenIdConfiguration } from '../openid-configuration';\n\nexport interface Rule {\n  validate(passedConfig: OpenIdConfiguration): RuleValidationResult;\n}\n\nexport interface RuleValidationResult {\n  result: boolean;\n  messages: string[];\n  level: Level;\n}\n\nexport const POSITIVE_VALIDATION_RESULT: RuleValidationResult = {\n  result: true,\n  messages: [],\n  level: 'none',\n};\n\nexport type Level = 'warning' | 'error' | 'none';\n","import { OpenIdConfiguration } from '../../openid-configuration';\nimport { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule';\n\nexport const ensureAuthority = (\n  passedConfig: OpenIdConfiguration\n): RuleValidationResult => {\n  if (!passedConfig.authority) {\n    return {\n      result: false,\n      messages: ['The authority URL MUST be provided in the configuration! '],\n      level: 'error',\n    };\n  }\n\n  return POSITIVE_VALIDATION_RESULT;\n};\n","import { OpenIdConfiguration } from '../../openid-configuration';\nimport { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule';\n\nexport const ensureClientId = (\n  passedConfig: OpenIdConfiguration\n): RuleValidationResult => {\n  if (!passedConfig.clientId) {\n    return {\n      result: false,\n      messages: ['The clientId is required and missing from your config!'],\n      level: 'error',\n    };\n  }\n\n  return POSITIVE_VALIDATION_RESULT;\n};\n","import { OpenIdConfiguration } from '../../openid-configuration';\r\nimport { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule';\r\n\r\nconst createIdentifierToCheck = (passedConfig: OpenIdConfiguration): string => {\r\n  if (!passedConfig) {\r\n    return '';\r\n  }\r\n\r\n  const { authority, clientId, scope } = passedConfig;\r\n\r\n  return `${authority}${clientId}${scope}`;\r\n};\rconst arrayHasDuplicates = (array: string[]): boolean =>\r\n  new Set(array).size !== array.length;\r\n\r\nexport const ensureNoDuplicatedConfigsRule = (\r\n  passedConfigs: OpenIdConfiguration[]\r\n): RuleValidationResult => {\r\n  const allIdentifiers = passedConfigs.map((x) => createIdentifierToCheck(x));\r  const someAreNotSet = allIdentifiers.some((x) => x === '');\r\n\r\n  if (someAreNotSet) {\r\n    return {\r\n      result: false,\r\n      messages: [\r\n        `Please make sure you add an object with a 'config' property: ....({ config }) instead of ...(config)`,\r\n      ],\r\n      level: 'error',\r\n    };\r\n  }\r\n\r\n  const hasDuplicates = arrayHasDuplicates(allIdentifiers);\r\n\r\n  if (hasDuplicates) {\r\n    return {\r\n      result: false,\r\n      messages: [\r\n        'You added multiple configs with the same authority, clientId and scope',\r\n      ],\r\n      level: 'warning',\r\n    };\r\n  }\r\n\r\n  return POSITIVE_VALIDATION_RESULT;\r\n};\r\n","import { OpenIdConfiguration } from '../../openid-configuration';\nimport { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule';\n\nexport const ensureRedirectRule = (\n  passedConfig: OpenIdConfiguration\n): RuleValidationResult => {\n  if (!passedConfig.redirectUrl) {\n    return {\n      result: false,\n      messages: ['The redirectUrl is required and missing from your config'],\n      level: 'error',\n    };\n  }\n\n  return POSITIVE_VALIDATION_RESULT;\n};\n","import { OpenIdConfiguration } from '../../openid-configuration';\nimport { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule';\n\nexport const ensureSilentRenewUrlWhenNoRefreshTokenUsed = (\n  passedConfig: OpenIdConfiguration\n): RuleValidationResult => {\n  const usesSilentRenew = passedConfig.silentRenew;\n  const usesRefreshToken = passedConfig.useRefreshToken;\n  const hasSilentRenewUrl = passedConfig.silentRenewUrl;\n\n  if (usesSilentRenew && !usesRefreshToken && !hasSilentRenewUrl) {\n    return {\n      result: false,\n      messages: [\n        'Please provide a silent renew URL if using renew and not refresh tokens',\n      ],\n      level: 'error',\n    };\n  }\n\n  return POSITIVE_VALIDATION_RESULT;\n};\n","import { OpenIdConfiguration } from '../../openid-configuration';\nimport { POSITIVE_VALIDATION_RESULT, RuleValidationResult } from '../rule';\n\nexport const useOfflineScopeWithSilentRenew = (\n  passedConfig: OpenIdConfiguration\n): RuleValidationResult => {\n  const hasRefreshToken = passedConfig.useRefreshToken;\n  const hasSilentRenew = passedConfig.silentRenew;\n  const scope = passedConfig.scope || '';\n  const hasOfflineScope = scope.split(' ').includes('offline_access');\n\n  if (hasRefreshToken && hasSilentRenew && !hasOfflineScope) {\n    return {\n      result: false,\n      messages: [\n        'When using silent renew and refresh tokens please set the `offline_access` scope',\n      ],\n      level: 'warning',\n    };\n  }\n\n  return POSITIVE_VALIDATION_RESULT;\n};\n","import { ensureAuthority } from './ensure-authority.rule';\nimport { ensureClientId } from './ensure-clientId.rule';\nimport { ensureNoDuplicatedConfigsRule } from './ensure-no-duplicated-configs.rule';\nimport { ensureRedirectRule } from './ensure-redirect-url.rule';\nimport { ensureSilentRenewUrlWhenNoRefreshTokenUsed } from './ensure-silentRenewUrl-with-no-refreshtokens.rule';\nimport { useOfflineScopeWithSilentRenew } from './use-offline-scope-with-silent-renew.rule';\n\nexport const allRules = [\n  ensureAuthority,\n  useOfflineScopeWithSilentRenew,\n  ensureRedirectRule,\n  ensureClientId,\n  ensureSilentRenewUrlWhenNoRefreshTokenUsed,\n];\n\nexport const allMultipleConfigRules = [ensureNoDuplicatedConfigsRule];\n","import { Injectable, inject } from '@angular/core';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { OpenIdConfiguration } from '../openid-configuration';\r\nimport { Level, RuleValidationResult } from './rule';\r\nimport { allMultipleConfigRules, allRules } from './rules';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ConfigValidationService {\r\n  private readonly loggerService = inject(LoggerService);\r\n\r\n  validateConfigs(passedConfigs: OpenIdConfiguration[]): boolean {\r\n    return this.validateConfigsInternal(\r\n      passedConfigs ?? [],\r\n      allMultipleConfigRules\r\n    );\r\n  }\r\n\r\n  validateConfig(passedConfig: OpenIdConfiguration): boolean {\r\n    return this.validateConfigInternal(passedConfig, allRules);\r\n  }\r\n\r\n  private validateConfigsInternal(\r\n    passedConfigs: OpenIdConfiguration[],\r\n    allRulesToUse: ((\r\n      passedConfig: OpenIdConfiguration[]\r\n    ) => RuleValidationResult)[]\r\n  ): boolean {\r\n    if (passedConfigs.length === 0) {\r\n      return false;\r\n    }\r\n\r\n    const allValidationResults = allRulesToUse.map((rule) =>\r\n      rule(passedConfigs)\r\n    );\r    let overallErrorCount = 0;\r\n\r\n    passedConfigs.forEach((passedConfig) => {\r\n      const errorCount = this.processValidationResultsAndGetErrorCount(\r\n        allValidationResults,\r\n        passedConfig\r\n      );\r\n\r\n      overallErrorCount += errorCount;\r\n    });\r\n\r\n    return overallErrorCount === 0;\r\n  }\r\n\r\n  private validateConfigInternal(\r\n    passedConfig: OpenIdConfiguration,\r\n    allRulesToUse: ((\r\n      passedConfig: OpenIdConfiguration\r\n    ) => RuleValidationResult)[]\r\n  ): boolean {\r\n    const allValidationResults = allRulesToUse.map((rule) =>\r\n      rule(passedConfig)\r\n    );\r    const errorCount = this.processValidationResultsAndGetErrorCount(\r\n      allValidationResults,\r\n      passedConfig\r\n    );\r\n\r\n    return errorCount === 0;\r\n  }\r\n\r\n  private processValidationResultsAndGetErrorCount(\r\n    allValidationResults: RuleValidationResult[],\r\n    config: OpenIdConfiguration\r\n  ): number {\r\n    const allMessages = allValidationResults.filter(\r\n      (x) => x.messages.length > 0\r\n    );\r\n    const allErrorMessages = this.getAllMessagesOfType('error', allMessages);\r\n    const allWarnings = this.getAllMessagesOfType('warning', allMessages);\r\n\r\n    allErrorMessages.forEach((message) =>\r\n      this.loggerService.logError(config, message)\r\n    );\r\n    allWarnings.forEach((message) =>\r\n      this.loggerService.logWarning(config, message)\r\n    );\r\n\r\n    return allErrorMessages.length;\r\n  }\r\n\r\n  private getAllMessagesOfType(\r\n    type: Level,\r\n    results: RuleValidationResult[]\r\n  ): string[] {\r\n    const allMessages = results\r\n      .filter((x) => x.level === type)\r\n      .map((result) => result.messages);\r\n\r\n    return allMessages.reduce((acc, val) => acc.concat(val), []);\r\n  }\r\n}\r\n","import { inject, Injectable, isDevMode } from '@angular/core';\r\nimport { forkJoin, Observable, of } from 'rxjs';\r\nimport { concatMap, map } from 'rxjs/operators';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { EventTypes } from '../public-events/event-types';\r\nimport { PublicEventsService } from '../public-events/public-events.service';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { PlatformProvider } from '../utils/platform-provider/platform.provider';\r\nimport { AuthWellKnownService } from './auth-well-known/auth-well-known.service';\r\nimport { DEFAULT_CONFIG } from './default-config';\r\nimport { StsConfigLoader } from './loader/config-loader';\r\nimport { OpenIdConfiguration } from './openid-configuration';\r\nimport { ConfigValidationService } from './validation/config-validation.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ConfigurationService {\r\n  private configsInternal: Record<string, OpenIdConfiguration> = {};\r\n\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly publicEventsService = inject(PublicEventsService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly platformProvider = inject(PlatformProvider);\r\n  private readonly authWellKnownService = inject(AuthWellKnownService);\r\n  private readonly loader = inject(StsConfigLoader);\r\n  private readonly configValidationService = inject(ConfigValidationService);\r\n\r\n  hasManyConfigs(): boolean {\r\n    return Object.keys(this.configsInternal).length > 1;\r\n  }\r\n\r\n  getAllConfigurations(): OpenIdConfiguration[] {\r\n    return Object.values(this.configsInternal);\r\n  }\r\n\r\n  getOpenIDConfiguration(\r\n    configId?: string\r\n  ): Observable<OpenIdConfiguration | null> {\r\n    if (this.configsAlreadySaved()) {\r\n      return of(this.getConfig(configId));\r\n    }\r\n\r\n    return this.getOpenIDConfigurations(configId).pipe(\r\n      map((result) => result.currentConfig)\r\n    );\r\n  }\r\n\r\n  getOpenIDConfigurations(configId?: string): Observable<{\r\n    allConfigs: OpenIdConfiguration[];\r\n    currentConfig: OpenIdConfiguration | null;\r\n  }> {\r\n    return this.loadConfigs().pipe(\r\n      concatMap((allConfigs) => this.prepareAndSaveConfigs(allConfigs)),\r\n      map((allPreparedConfigs) => ({\r\n        allConfigs: allPreparedConfigs,\r\n        currentConfig: this.getConfig(configId),\r\n      }))\r\n    );\r\n  }\r\n\r\n  hasAtLeastOneConfig(): boolean {\r\n    return Object.keys(this.configsInternal).length > 0;\r\n  }\r\n\r\n  private saveConfig(readyConfig: OpenIdConfiguration): void {\r\n    const { configId } = readyConfig;\r\n\r\n    this.configsInternal[configId as string] = readyConfig;\r\n  }\r\n\r\n  private loadConfigs(): Observable<OpenIdConfiguration[]> {\r\n    return this.loader.loadConfigs();\r\n  }\r\n\r\n  private configsAlreadySaved(): boolean {\r\n    return this.hasAtLeastOneConfig();\r\n  }\r\n\r\n  private getConfig(configId?: string): OpenIdConfiguration | null {\r\n    if (Boolean(configId)) {\r\n      const config = this.configsInternal[configId!];\r\n\r\n      if (!config && isDevMode()) {\r\n        console.warn(\r\n          `[angular-auth-oidc-client] No configuration found for config id '${configId}'.`\r\n        );\r\n      }\r\n\r\n      return config || null;\r\n    }\r\n\r\n    const [, value] = Object.entries(this.configsInternal)[0] || [[null, null]];\r\n\r\n    return value || null;\r\n  }\r\n\r\n  private prepareAndSaveConfigs(\r\n    passedConfigs: OpenIdConfiguration[]\r\n  ): Observable<OpenIdConfiguration[]> {\r\n    if (!this.configValidationService.validateConfigs(passedConfigs)) {\r\n      return of([]);\r\n    }\r\n\r\n    this.createUniqueIds(passedConfigs);\r\n\r\n    const allHandleConfigs$ = passedConfigs.map((x) => this.handleConfig(x));\r\n\r\n    return forkJoin(allHandleConfigs$).pipe(\r\n      map((config) => config.filter((conf) => Boolean(conf))),\r\n      map((c) => c as OpenIdConfiguration[])\r\n    );\r\n  }\r\n\r\n  private createUniqueIds(passedConfigs: OpenIdConfiguration[]): void {\r\n    passedConfigs.forEach((config, index) => {\r\n      if (!config.configId) {\r\n        config.configId = `${index}-${config.clientId}`;\r\n      }\r\n    });\r\n  }\r\n\r\n  private handleConfig(\r\n    passedConfig: OpenIdConfiguration\r\n  ): Observable<OpenIdConfiguration | null> {\r\n    if (!this.configValidationService.validateConfig(passedConfig)) {\r\n      this.loggerService.logError(\r\n        passedConfig,\r\n        'Validation of config rejected with errors. Config is NOT set.'\r\n      );\r\n\r\n      return of(null);\r\n    }\r\n\r\n    if (!passedConfig.authWellknownEndpointUrl) {\r\n      passedConfig.authWellknownEndpointUrl = passedConfig.authority;\r\n    }\r\n\r\n    const usedConfig = this.prepareConfig(passedConfig);\r\n\r\n    this.saveConfig(usedConfig);\r\n\r\n    const configWithAuthWellKnown =\r\n      this.enhanceConfigWithWellKnownEndpoint(usedConfig);\r\n\r\n    this.publicEventsService.fireEvent<OpenIdConfiguration>(\r\n      EventTypes.ConfigLoaded,\r\n      configWithAuthWellKnown\r\n    );\r\n\r\n    return of(usedConfig);\r\n  }\r\n\r\n  private enhanceConfigWithWellKnownEndpoint(\r\n    configuration: OpenIdConfiguration\r\n  ): OpenIdConfiguration {\r\n    const alreadyExistingAuthWellKnownEndpoints =\r\n      this.storagePersistenceService.read(\r\n        'authWellKnownEndPoints',\r\n        configuration\r\n      );\r\n\r\n    if (!!alreadyExistingAuthWellKnownEndpoints) {\r\n      configuration.authWellknownEndpoints =\r\n        alreadyExistingAuthWellKnownEndpoints;\r\n\r\n      return configuration;\r\n    }\r\n\r\n    const passedAuthWellKnownEndpoints = configuration.authWellknownEndpoints;\r\n\r\n    if (!!passedAuthWellKnownEndpoints) {\r\n      this.authWellKnownService.storeWellKnownEndpoints(\r\n        configuration,\r\n        passedAuthWellKnownEndpoints\r\n      );\r\n      configuration.authWellknownEndpoints = passedAuthWellKnownEndpoints;\r\n\r\n      return configuration;\r\n    }\r\n\r\n    return configuration;\r\n  }\r\n\r\n  private prepareConfig(\r\n    configuration: OpenIdConfiguration\r\n  ): OpenIdConfiguration {\r\n    const openIdConfigurationInternal = { ...DEFAULT_CONFIG, ...configuration };\r\n\r\n    this.setSpecialCases(openIdConfigurationInternal);\r\n\r\n    return openIdConfigurationInternal;\r\n  }\r\n\r\n  private setSpecialCases(currentConfig: OpenIdConfiguration): void {\r\n    if (!this.platformProvider.isBrowser()) {\r\n      currentConfig.startCheckSession = false;\r\n      currentConfig.silentRenew = false;\r\n      currentConfig.useRefreshToken = false;\r\n      currentConfig.usePushedAuthorisationRequests = false;\r\n    }\r\n  }\r\n}\r\n","\r\nimport { inject, Injectable, DOCUMENT } from '@angular/core';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { LoggerService } from '../logging/logger.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class IFrameService {\r\n  private readonly document = inject(DOCUMENT);\r\n  private readonly loggerService = inject(LoggerService);\r\n\r\n  getExistingIFrame(identifier: string): HTMLIFrameElement | null {\r\n    const iFrameOnParent = this.getIFrameFromParentWindow(identifier);\r\n\r\n    if (this.isIFrameElement(iFrameOnParent)) {\r\n      return iFrameOnParent;\r\n    }\r\n\r\n    const iFrameOnSelf = this.getIFrameFromWindow(identifier);\r\n\r\n    if (this.isIFrameElement(iFrameOnSelf)) {\r\n      return iFrameOnSelf;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  addIFrameToWindowBody(\r\n    identifier: string,\r\n    config: OpenIdConfiguration\r\n  ): HTMLIFrameElement {\r\n    const sessionIframe = this.document.createElement('iframe');\r\n\r\n    sessionIframe.id = identifier;\r\n    sessionIframe.title = identifier;\r\n    this.loggerService.logDebug(config, sessionIframe);\r\n    sessionIframe.style.display = 'none';\r\n    this.document.body.appendChild(sessionIframe);\r\n\r\n    return sessionIframe;\r\n  }\r\n\r\n  private getIFrameFromParentWindow(\r\n    identifier: string\r\n  ): HTMLIFrameElement | null {\r\n    try {\r\n      const iFrameElement =\r\n        this.document.defaultView?.parent.document.getElementById(identifier);\r\n\r\n      if (this.isIFrameElement(iFrameElement)) {\r\n        return iFrameElement;\r\n      }\r\n\r\n      return null;\r\n    } catch (_e) {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  private getIFrameFromWindow(identifier: string): HTMLIFrameElement | null {\r\n    const iFrameElement = this.document.getElementById(identifier);\r\n\r\n    if (this.isIFrameElement(iFrameElement)) {\r\n      return iFrameElement;\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private isIFrameElement(\r\n    element: HTMLElement | null | undefined\r\n  ): element is HTMLIFrameElement {\r\n    return !!element && element instanceof HTMLIFrameElement;\r\n  }\r\n}\r\n","import { HttpParams } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable, Subject, throwError } from 'rxjs';\r\nimport { catchError } from 'rxjs/operators';\r\nimport { AuthStateService } from '../auth-state/auth-state.service';\r\nimport { ImplicitFlowCallbackService } from '../callback/implicit-flow-callback.service';\r\nimport { IntervalService } from '../callback/interval.service';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { AuthResult, CallbackContext } from '../flows/callback-context';\r\nimport { FlowsDataService } from '../flows/flows-data.service';\r\nimport { FlowsService } from '../flows/flows.service';\r\nimport { ResetAuthDataService } from '../flows/reset-auth-data.service';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { FlowHelper } from '../utils/flowHelper/flow-helper.service';\r\nimport { ValidationResult } from '../validation/validation-result';\r\nimport { IFrameService } from './existing-iframe.service';\r\n\r\nconst IFRAME_FOR_SILENT_RENEW_IDENTIFIER = 'myiFrameForSilentRenew';\r\n\r\nexport const getFrameId = (configId?: string): string => `${IFRAME_FOR_SILENT_RENEW_IDENTIFIER}_${configId}`;\r\ntype RefreshSessionWithIFrameCompleted =\r\n  {success: true, authResult: AuthResult | null, configId?: string } | {success: false, configId?: string};\r\n@Injectable({ providedIn: 'root' })\r\nexport class SilentRenewService {\r\n  private readonly refreshSessionWithIFrameCompletedInternal$ =\r\n    new Subject<RefreshSessionWithIFrameCompleted>();\r\n\r\n  get refreshSessionWithIFrameCompleted$(): Observable<RefreshSessionWithIFrameCompleted> {\r\n    return this.refreshSessionWithIFrameCompletedInternal$.asObservable();\r\n  }\r\n\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly iFrameService = inject(IFrameService);\r\n  private readonly flowsService = inject(FlowsService);\r\n  private readonly resetAuthDataService = inject(ResetAuthDataService);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly flowHelper = inject(FlowHelper);\r\n  private readonly implicitFlowCallbackService = inject(\r\n    ImplicitFlowCallbackService\r\n  );\r\n  private readonly intervalService = inject(IntervalService);\r\n\r\n  getOrCreateIframe(config: OpenIdConfiguration): HTMLIFrameElement {\r\n    // Create unique iframe identifier for each configuration\r\n    const iframeId = getFrameId(config.configId);\r\n    const existingIframe = this.iFrameService.getExistingIFrame(iframeId);\r\n\r\n    if (!existingIframe) {\r\n      this.loggerService.logDebug(config, `Creating new iframe: ${iframeId}`);\r\n\r\n      return this.iFrameService.addIFrameToWindowBody(\r\n        iframeId,\r\n        config\r\n      );\r\n    }\r\n\r\n    this.loggerService.logDebug(config, `Using existing iframe: ${iframeId}`);\r\n\r\n    return existingIframe;\r\n  }\r\n\r\n  isSilentRenewConfigured(configuration: OpenIdConfiguration): boolean {\r\n    const { useRefreshToken, silentRenew } = configuration;\r\n\r\n    return !useRefreshToken && Boolean(silentRenew);\r\n  }\r\n\r\n  codeFlowCallbackSilentRenewIframe(\r\n    urlParts: string[],\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<CallbackContext> {\r\n    const params = new HttpParams({\r\n      fromString: urlParts[1],\r\n    });\r\n    const errorParam = params.get('error');\r\n\r\n    if (errorParam) {\r\n      this.authStateService.updateAndPublishAuthState({\r\n        isAuthenticated: false,\r\n        validationResult: ValidationResult.LoginRequired,\r\n        isRenewProcess: true,\r\n        configId: config.configId,\r\n      });\r\n      this.resetAuthDataService.resetAuthorizationData(config, allConfigs);\r\n      this.flowsDataService.setNonce('', config);\r\n      this.intervalService.stopPeriodicTokenCheck();\r\n\r\n      return throwError(() => new Error(errorParam));\r\n    }\r\n\r\n    const code = params.get('code') ?? '';\r\n    const state = params.get('state') ?? '';\r\n    const sessionState = params.get('session_state');\r\n    const callbackContext: CallbackContext = {\r\n      code,\r\n      refreshToken: '',\r\n      state,\r\n      sessionState,\r\n      authResult: null,\r\n      isRenewProcess: true,\r\n      jwtKeys: null,\r\n      validationResult: null,\r\n      existingIdToken: null,\r\n    };\r\n\r\n    return this.flowsService\r\n      .processSilentRenewCodeFlowCallback(callbackContext, config, allConfigs)\r\n      .pipe(\r\n        catchError((error) => {\r\n          this.intervalService.stopPeriodicTokenCheck();\r\n          this.resetAuthDataService.resetAuthorizationData(config, allConfigs);\r\n\r\n          return throwError(() => new Error(error));\r\n        })\r\n      );\r\n  }\r\n\r\n  silentRenewEventHandler(\r\n    e: CustomEvent,\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): void {\r\n    this.loggerService.logDebug(config, 'silentRenewEventHandler');\r\n    if (!e.detail) {\r\n      return;\r\n    }\r\n\r\n    let callback$: Observable<CallbackContext>;\r\n    const isCodeFlow = this.flowHelper.isCurrentFlowCodeFlow(config);\r\n\r\n    if (isCodeFlow) {\r\n      const urlParts = e.detail.toString().split('?');\r\n\r\n      callback$ = this.codeFlowCallbackSilentRenewIframe(\r\n        urlParts,\r\n        config,\r\n        allConfigs\r\n      );\r\n    } else {\r\n      callback$ =\r\n        this.implicitFlowCallbackService.authenticatedImplicitFlowCallback(\r\n          config,\r\n          allConfigs,\r\n          e.detail\r\n        );\r\n    }\r\n\r\n    callback$.subscribe({\r\n      next: ({authResult}) => {\r\n        this.refreshSessionWithIFrameCompletedInternal$.next({authResult, configId: config.configId, success: true});\r\n        this.flowsDataService.resetSilentRenewRunning(config);\r\n      },\r\n      error: (err: unknown) => {\r\n        this.loggerService.logError(config, 'Error: ' + err);\r\n        this.refreshSessionWithIFrameCompletedInternal$.next({configId: config.configId, success: false});\r\n        this.flowsDataService.resetSilentRenewRunning(config);\r\n      },\r\n    });\r\n  }\r\n}\r\n","\r\nimport { inject, Injectable, RendererFactory2, DOCUMENT } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { UrlService } from '../utils/url/url.service';\r\nimport { SilentRenewService, getFrameId } from './silent-renew.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RefreshSessionIframeService {\r\n  private readonly renderer = inject(RendererFactory2).createRenderer(\r\n    null,\r\n    null\r\n  );\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly urlService = inject(UrlService);\r\n  private readonly silentRenewService = inject(SilentRenewService);\r\n  private readonly document = inject(DOCUMENT);\r\n\r\n  refreshSessionWithIframe(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    customParams?: { [key: string]: string | number | boolean }\r\n  ): Observable<boolean> {\r\n    this.loggerService.logDebug(\r\n      config,\r\n      'BEGIN refresh session Authorize Iframe renew'\r\n    );\r\n\r\n    return this.urlService\r\n      .getRefreshSessionSilentRenewUrl(config, customParams)\r\n      .pipe(\r\n        switchMap((url) => {\r\n          return this.sendAuthorizeRequestUsingSilentRenew(\r\n            url,\r\n            config,\r\n            allConfigs\r\n          );\r\n        })\r\n      );\r\n  }\r\n\r\n  private sendAuthorizeRequestUsingSilentRenew(\r\n    url: string | null,\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<boolean> {\r\n    const sessionIframe = this.silentRenewService.getOrCreateIframe(config);\r\n\r\n    this.initSilentRenewRequest(config, allConfigs);\r\n    this.loggerService.logDebug(\r\n      config,\r\n      `sendAuthorizeRequestUsingSilentRenew for URL: ${url}`\r\n    );\r\n\r\n    return new Observable((observer) => {\r\n      const onLoadHandler = (): void => {\r\n        sessionIframe.removeEventListener('load', onLoadHandler);\r\n        this.loggerService.logDebug(\r\n          config,\r\n          'removed event listener from IFrame'\r\n        );\r\n        observer.next(true);\r\n        observer.complete();\r\n      };\r\n\r\n      sessionIframe.addEventListener('load', onLoadHandler);\r\n      sessionIframe.contentWindow?.location.replace(url ?? '');\r\n    });\r\n  }\r\n\r\n  private initSilentRenewRequest(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): void {\r\n    const instanceId = Math.random();\r\n\r\n    this.loggerService.logDebug(\r\n      config,\r\n      `Creating new silent renew handlers for config: ${config.configId}, instance: ${instanceId}`\r\n    );\r\n\r\n    const initDestroyHandler = this.renderer.listen(\r\n      'window',\r\n      'oidc-silent-renew-init',\r\n      (e: CustomEvent) => {\r\n        const eventData = e.detail;\r\n\r\n        if (eventData.configId === config.configId && eventData.instanceId !== instanceId) {\r\n          this.loggerService.logDebug(\r\n            config,\r\n            `Destroying old handlers for config: ${config.configId} (old instance: ${instanceId}, new instance: ${eventData.instanceId})`\r\n          );\r\n          initDestroyHandler();\r\n          renewDestroyHandler();\r\n        }\r\n      }\r\n    );\r\n    const renewDestroyHandler = this.renderer.listen(\r\n      'window',\r\n      'oidc-silent-renew-message',\r\n      (e: CustomEvent) => {\r\n\r\n        if (this.shouldProcessRenewMessage(e, config)) {\r\n          const eventToPass = this.convertToLegacyEvent(e);\r\n\r\n          this.silentRenewService.silentRenewEventHandler(eventToPass, config, allConfigs);\r\n        }\r\n      }\r\n    );\r\n\r\n\r\n    this.document.defaultView?.dispatchEvent(\r\n      new CustomEvent('oidc-silent-renew-init', {\r\n        detail: {\r\n          instanceId,\r\n          configId: config.configId\r\n        }\r\n      })\r\n    );\r\n  }\r\n\r\n  private shouldProcessRenewMessage(\r\n    e: CustomEvent,\r\n    config: OpenIdConfiguration\r\n  ): boolean {\r\n\r\n    if (!e?.detail) {\r\n      this.loggerService.logDebug(\r\n        config,\r\n        `Silent renew event has no valid payload: ${e?.detail}`\r\n      );\r\n\r\n      return false;\r\n    }\r\n\r\n    if (e.detail.srcFrameId) {\r\n      const shouldProcess = getFrameId(config.configId) === e.detail.srcFrameId;\r\n\r\n      this.loggerService.logDebug(\r\n        config,\r\n        `Silent renew event from frame: ${e.detail.srcFrameId}, current configId: ${config.configId}, processing: ${shouldProcess}`\r\n      );\r\n\r\n      return shouldProcess;\r\n    }\r\n\r\n    // Fallback for backward compatibility - if no srcFrameId but has detail (legacy format)\r\n    this.loggerService.logDebug(\r\n      config,\r\n      'Silent renew event without srcFrameId - processing for backward compatibility'\r\n    );\r\n\r\n    return true;\r\n  }\r\n\r\n  private convertToLegacyEvent(e: CustomEvent): CustomEvent {\r\n    // If event has the new format with url property, convert it to legacy format\r\n    if (e?.detail?.url) {\r\n      return new CustomEvent(e.type, { detail: e.detail.url });\r\n    }\r\n\r\n    // Otherwise, return as-is (already in legacy format)\r\n    return e;\r\n  }\r\n\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, finalize } from 'rxjs/operators';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { CallbackContext } from '../flows/callback-context';\r\nimport { FlowsService } from '../flows/flows.service';\r\nimport { ResetAuthDataService } from '../flows/reset-auth-data.service';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { IntervalService } from './interval.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RefreshSessionRefreshTokenService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly resetAuthDataService = inject(ResetAuthDataService);\r\n  private readonly flowsService = inject(FlowsService);\r\n  private readonly intervalService = inject(IntervalService);\r\n\r\n  refreshSessionWithRefreshTokens(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    customParamsRefresh?: { [key: string]: string | number | boolean }\r\n  ): Observable<CallbackContext> {\r\n    this.loggerService.logDebug(config, 'BEGIN refresh session Authorize');\r\n    let refreshTokenFailed = false;\r\n\r\n    return this.flowsService\r\n      .processRefreshToken(config, allConfigs, customParamsRefresh)\r\n      .pipe(\r\n        catchError((error) => {\r\n          this.resetAuthDataService.resetAuthorizationData(config, allConfigs);\r\n          refreshTokenFailed = true;\r\n\r\n          return throwError(() => new Error(error));\r\n        }),\r\n        finalize(\r\n          () =>\r\n            refreshTokenFailed && this.intervalService.stopPeriodicTokenCheck()\r\n        )\r\n      );\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { forkJoin, Observable, of, throwError } from 'rxjs';\r\nimport { catchError, switchMap } from 'rxjs/operators';\r\nimport { AuthStateService } from '../auth-state/auth-state.service';\r\nimport { ConfigurationService } from '../config/config.service';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { CallbackContext } from '../flows/callback-context';\r\nimport { FlowsDataService } from '../flows/flows-data.service';\r\nimport { ResetAuthDataService } from '../flows/reset-auth-data.service';\r\nimport { RefreshSessionIframeService } from '../iframe/refresh-session-iframe.service';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { EventTypes } from '../public-events/event-types';\r\nimport { PublicEventsService } from '../public-events/public-events.service';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { UserService } from '../user-data/user.service';\r\nimport { FlowHelper } from '../utils/flowHelper/flow-helper.service';\r\nimport { IntervalService } from './interval.service';\r\nimport { RefreshSessionRefreshTokenService } from './refresh-session-refresh-token.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PeriodicallyTokenCheckService {\r\n  private readonly resetAuthDataService = inject(ResetAuthDataService);\r\n  private readonly flowHelper = inject(FlowHelper);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly userService = inject(UserService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly refreshSessionIframeService = inject(\r\n    RefreshSessionIframeService\r\n  );\r\n  private readonly refreshSessionRefreshTokenService = inject(\r\n    RefreshSessionRefreshTokenService\r\n  );\r\n  private readonly intervalService = inject(IntervalService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly publicEventsService = inject(PublicEventsService);\r\n  private readonly configurationService = inject(ConfigurationService);\r\n\r\n  startTokenValidationPeriodically(\r\n    allConfigs: OpenIdConfiguration[],\r\n    currentConfig: OpenIdConfiguration\r\n  ): void {\r\n    const configsWithSilentRenewEnabled =\r\n      this.getConfigsWithSilentRenewEnabled(allConfigs);\r\n\r\n    if (configsWithSilentRenewEnabled.length <= 0) {\r\n      return;\r\n    }\r\n\r\n    if (this.intervalService.isTokenValidationRunning()) {\r\n      return;\r\n    }\r\n\r\n    const refreshTimeInSeconds = this.getSmallestRefreshTimeFromConfigs(\r\n      configsWithSilentRenewEnabled\r\n    );\r\n    const periodicallyCheck$ = this.intervalService\r\n      .startPeriodicTokenCheck(refreshTimeInSeconds)\r\n      .pipe(\r\n        switchMap(() => {\r\n          const objectWithConfigIdsAndRefreshEvent: {\r\n            [id: string]: Observable<boolean | CallbackContext | null>;\r\n          } = {};\r\n\r\n          configsWithSilentRenewEnabled.forEach((config) => {\r\n            const identifier = config.configId as string;\r\n\r\n            objectWithConfigIdsAndRefreshEvent[identifier] =\r\n              this.getRefreshEvent(config, allConfigs);\r\n          });\r\n\r\n          return forkJoin(objectWithConfigIdsAndRefreshEvent);\r\n        })\r\n      );\r\n\r\n    this.intervalService.runTokenValidationRunning = periodicallyCheck$\r\n      .pipe(catchError((error) => throwError(() => new Error(error))))\r\n      .subscribe({\r\n        next: (objectWithConfigIds) => {\r\n          for (const [configId, _] of Object.entries(objectWithConfigIds)) {\r\n            this.configurationService\r\n              .getOpenIDConfiguration(configId)\r\n              .subscribe((config) => {\r\n                this.loggerService.logDebug(\r\n                  config,\r\n                  'silent renew, periodic check finished!'\r\n                );\r\n\r\n                if (\r\n                  this.flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config)\r\n                ) {\r\n                  this.flowsDataService.resetSilentRenewRunning(config);\r\n                }\r\n              });\r\n          }\r\n        },\r\n        error: (error) => {\r\n          this.loggerService.logError(\r\n            currentConfig,\r\n            'silent renew failed!',\r\n            error\r\n          );\r\n        },\r\n      });\r\n  }\r\n\r\n  private getRefreshEvent(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<boolean | CallbackContext | null> {\r\n    const shouldStartRefreshEvent =\r\n      this.shouldStartPeriodicallyCheckForConfig(config);\r\n\r\n    if (!shouldStartRefreshEvent) {\r\n      return of(null);\r\n    }\r\n\r\n    const refreshEvent$ = this.createRefreshEventForConfig(config, allConfigs);\r\n\r\n    this.publicEventsService.fireEvent(EventTypes.SilentRenewStarted);\r\n\r\n    return refreshEvent$.pipe(\r\n      catchError((error) => {\r\n        this.loggerService.logError(config, 'silent renew failed!', error);\r\n        this.publicEventsService.fireEvent(EventTypes.SilentRenewFailed, error);\r\n        this.flowsDataService.resetSilentRenewRunning(config);\r\n\r\n        return throwError(() => new Error(error));\r\n      })\r\n    );\r\n  }\r\n\r\n  private getSmallestRefreshTimeFromConfigs(\r\n    configsWithSilentRenewEnabled: OpenIdConfiguration[]\r\n  ): number {\r\n    const result = configsWithSilentRenewEnabled.reduce((prev, curr) =>\r\n      (prev.tokenRefreshInSeconds ?? 0) < (curr.tokenRefreshInSeconds ?? 0)\r\n        ? prev\r\n        : curr\r\n    );\r\n\r\n    return result.tokenRefreshInSeconds ?? 0;\r\n  }\r\n\r\n  private getConfigsWithSilentRenewEnabled(\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): OpenIdConfiguration[] {\r\n    return allConfigs.filter((x) => x.silentRenew);\r\n  }\r\n\r\n  private createRefreshEventForConfig(\r\n    configuration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<boolean | CallbackContext | null> {\r\n    this.loggerService.logDebug(configuration, 'starting silent renew...');\r\n\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configuration.configId)\r\n      .pipe(\r\n        switchMap((config) => {\r\n          if (!config?.silentRenew) {\r\n            this.resetAuthDataService.resetAuthorizationData(\r\n              config,\r\n              allConfigs\r\n            );\r\n\r\n            return of(null);\r\n          }\r\n\r\n          this.flowsDataService.setSilentRenewRunning(config);\r\n\r\n          if (this.flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config)) {\r\n            // Retrieve Dynamically Set Custom Params for refresh body\r\n            const customParamsRefresh: {\r\n              [key: string]: string | number | boolean;\r\n            } =\r\n              this.storagePersistenceService.read(\r\n                'storageCustomParamsRefresh',\r\n                config\r\n              ) || {};\r\n            const { customParamsRefreshTokenRequest } = config;\r\n            const mergedParams = {\r\n              ...customParamsRefreshTokenRequest,\r\n              ...customParamsRefresh,\r\n            };\r\n\r\n            // Refresh Session using Refresh tokens\r\n            return this.refreshSessionRefreshTokenService.refreshSessionWithRefreshTokens(\r\n              config,\r\n              allConfigs,\r\n              mergedParams\r\n            );\r\n          }\r\n\r\n          // Retrieve Dynamically Set Custom Params\r\n          const customParams: { [key: string]: string | number | boolean } =\r\n            this.storagePersistenceService.read(\r\n              'storageCustomParamsAuthRequest',\r\n              config\r\n            );\r\n\r\n          return this.refreshSessionIframeService.refreshSessionWithIframe(\r\n            config,\r\n            allConfigs,\r\n            customParams\r\n          );\r\n        })\r\n      );\r\n  }\r\n\r\n  private shouldStartPeriodicallyCheckForConfig(\r\n    config: OpenIdConfiguration\r\n  ): boolean {\r\n    const idToken = this.authStateService.getIdToken(config);\r\n    const isSilentRenewRunning =\r\n      this.flowsDataService.isSilentRenewRunning(config);\r\n    const isCodeFlowInProgress =\r\n      this.flowsDataService.isCodeFlowInProgress(config);\r\n    const userDataFromStore = this.userService.getUserDataFromStore(config);\r\n\r\n    this.loggerService.logDebug(\r\n      config,\r\n      `Checking: silentRenewRunning: ${isSilentRenewRunning}, isCodeFlowInProgress: ${isCodeFlowInProgress} - has idToken: ${!!idToken} - has userData: ${!!userDataFromStore}`\r\n    );\r\n\r\n    const shouldBeExecuted =\r\n      !!userDataFromStore &&\r\n      !isSilentRenewRunning &&\r\n      !!idToken &&\r\n      !isCodeFlowInProgress;\r\n\r\n    if (!shouldBeExecuted) {\r\n      return false;\r\n    }\r\n\r\n    const idTokenExpired =\r\n      this.authStateService.hasIdTokenExpiredAndRenewCheckIsEnabled(config);\r\n    const accessTokenExpired =\r\n      this.authStateService.hasAccessTokenExpiredIfExpiryExists(config);\r\n\r\n    return idTokenExpired || accessTokenExpired;\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport {\r\n  forkJoin,\r\n  Observable,\r\n  of,\r\n  throwError,\r\n  TimeoutError,\r\n  timer,\r\n} from 'rxjs';\r\nimport {\r\n  filter,\r\n  map,\r\n  mergeMap,\r\n  retryWhen,\r\n  switchMap,\r\n  take,\r\n  tap,\r\n  timeout,\r\n} from 'rxjs/operators';\r\nimport { AuthStateService } from '../auth-state/auth-state.service';\r\nimport { AuthWellKnownService } from '../config/auth-well-known/auth-well-known.service';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { CallbackContext } from '../flows/callback-context';\r\nimport { FlowsDataService } from '../flows/flows-data.service';\r\nimport { RefreshSessionIframeService } from '../iframe/refresh-session-iframe.service';\r\nimport { SilentRenewService } from '../iframe/silent-renew.service';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { LoginResponse } from '../login/login-response';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { UserService } from '../user-data/user.service';\r\nimport { FlowHelper } from '../utils/flowHelper/flow-helper.service';\r\nimport { RefreshSessionRefreshTokenService } from './refresh-session-refresh-token.service';\r\n\r\nexport const MAX_RETRY_ATTEMPTS = 3;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RefreshSessionService {\r\n  private readonly flowHelper = inject(FlowHelper);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly silentRenewService = inject(SilentRenewService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly authWellKnownService = inject(AuthWellKnownService);\r\n  private readonly refreshSessionIframeService = inject(\r\n    RefreshSessionIframeService\r\n  );\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly refreshSessionRefreshTokenService = inject(\r\n    RefreshSessionRefreshTokenService\r\n  );\r\n  private readonly userService = inject(UserService);\r\n\r\n  userForceRefreshSession(\r\n    config: OpenIdConfiguration | null,\r\n    allConfigs: OpenIdConfiguration[],\r\n    extraCustomParams?: { [key: string]: string | number | boolean }\r\n  ): Observable<LoginResponse> {\r\n    if (!config) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            'Please provide a configuration before setting up the module'\r\n          )\r\n      );\r\n    }\r\n\r\n    this.persistCustomParams(extraCustomParams, config);\r\n\r\n    return this.forceRefreshSession(config, allConfigs, extraCustomParams).pipe(\r\n      tap(() => this.flowsDataService.resetSilentRenewRunning(config))\r\n    );\r\n  }\r\n\r\n  forceRefreshSession(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    extraCustomParams?: { [key: string]: string | number | boolean }\r\n  ): Observable<LoginResponse> {\r\n    const { customParamsRefreshTokenRequest, configId } = config;\r\n    const mergedParams = {\r\n      ...customParamsRefreshTokenRequest,\r\n      ...extraCustomParams,\r\n    };\r\n\r\n    if (this.flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config)) {\r\n      return this.startRefreshSession(config, allConfigs, mergedParams).pipe(\r\n        map(() => {\r\n          const isAuthenticated =\r\n            this.authStateService.areAuthStorageTokensValid(config);\r\n\r\n          if (isAuthenticated) {\r\n            return {\r\n              idToken: this.authStateService.getIdToken(config),\r\n              accessToken: this.authStateService.getAccessToken(config),\r\n              userData: this.userService.getUserDataFromStore(config),\r\n              isAuthenticated,\r\n              configId,\r\n            } as LoginResponse;\r\n          }\r\n\r\n          return {\r\n            isAuthenticated: false,\r\n            errorMessage: '',\r\n            userData: null,\r\n            idToken: '',\r\n            accessToken: '',\r\n            configId,\r\n          };\r\n        })\r\n      );\r\n    }\r\n\r\n    const { silentRenewTimeoutInSeconds } = config;\r\n    const timeOutTime = (silentRenewTimeoutInSeconds ?? 0) * 1000;\r\n\r\n    return forkJoin([\r\n      this.startRefreshSession(config, allConfigs, extraCustomParams),\r\n      this.silentRenewService.refreshSessionWithIFrameCompleted$.pipe(\r\n        filter((result) => result?.configId === config.configId),\r\n        take(1)\r\n      ),\r\n    ]).pipe(\r\n      timeout(timeOutTime),\r\n      retryWhen((errors) => {\r\n        return errors.pipe(\r\n          mergeMap((error, index) => {\r\n            const scalingDuration = 1000;\r\n            const currentAttempt = index + 1;\r\n\r\n            if (\r\n              !(error instanceof TimeoutError) ||\r\n              currentAttempt > MAX_RETRY_ATTEMPTS\r\n            ) {\r\n              return throwError(() => new Error(error));\r\n            }\r\n\r\n            this.loggerService.logDebug(\r\n              config,\r\n              `forceRefreshSession timeout. Attempt #${currentAttempt}`\r\n            );\r\n\r\n            this.flowsDataService.resetSilentRenewRunning(config);\r\n\r\n            return timer(currentAttempt * scalingDuration);\r\n          })\r\n        );\r\n      }),\r\n      map(([_, refreshCompleted]) => {\r\n        const isAuthenticated =\r\n          this.authStateService.areAuthStorageTokensValid(config);\r\n\r\n        if (isAuthenticated) {\r\n          const authResult = refreshCompleted.success ? refreshCompleted.authResult : null\r\n\r\n          return {\r\n            idToken: authResult?.id_token ?? '',\r\n            accessToken: authResult?.access_token ?? '',\r\n            userData: this.userService.getUserDataFromStore(config),\r\n            isAuthenticated,\r\n            configId,\r\n          };\r\n        }\r\n\r\n        return {\r\n          isAuthenticated: false,\r\n          errorMessage: '',\r\n          userData: null,\r\n          idToken: '',\r\n          accessToken: '',\r\n          configId,\r\n        };\r\n      })\r\n    );\r\n  }\r\n\r\n  private persistCustomParams(\r\n    extraCustomParams: { [key: string]: string | number | boolean } | undefined,\r\n    config: OpenIdConfiguration\r\n  ): void {\r\n    const { useRefreshToken } = config;\r\n\r\n    if (extraCustomParams) {\r\n      if (useRefreshToken) {\r\n        this.storagePersistenceService.write(\r\n          'storageCustomParamsRefresh',\r\n          extraCustomParams,\r\n          config\r\n        );\r\n      } else {\r\n        this.storagePersistenceService.write(\r\n          'storageCustomParamsAuthRequest',\r\n          extraCustomParams,\r\n          config\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  private startRefreshSession(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    extraCustomParams?: { [key: string]: string | number | boolean }\r\n  ): Observable<boolean | CallbackContext | null> {\r\n    const isSilentRenewRunning =\r\n      this.flowsDataService.isSilentRenewRunning(config);\r\n\r\n    this.loggerService.logDebug(\r\n      config,\r\n      `Checking: silentRenewRunning: ${isSilentRenewRunning}`\r\n    );\r\n    const shouldBeExecuted = !isSilentRenewRunning;\r\n\r\n    if (!shouldBeExecuted) {\r\n      return of(null);\r\n    }\r\n\r\n    return this.authWellKnownService\r\n      .queryAndStoreAuthWellKnownEndPoints(config)\r\n      .pipe(\r\n        switchMap(() => {\r\n          this.flowsDataService.setSilentRenewRunning(config);\r\n\r\n          if (this.flowHelper.isCurrentFlowCodeFlowWithRefreshTokens(config)) {\r\n            // Refresh Session using Refresh tokens\r\n            return this.refreshSessionRefreshTokenService.refreshSessionWithRefreshTokens(\r\n              config,\r\n              allConfigs,\r\n              extraCustomParams\r\n            );\r\n          }\r\n\r\n          return this.refreshSessionIframeService.refreshSessionWithIframe(\r\n            config,\r\n            allConfigs,\r\n            extraCustomParams\r\n          );\r\n        })\r\n      );\r\n  }\r\n}\r\n","\r\nimport { inject, Injectable, NgZone, OnDestroy, DOCUMENT } from '@angular/core';\r\nimport { BehaviorSubject, Observable, of } from 'rxjs';\r\nimport { take } from 'rxjs/operators';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { EventTypes } from '../public-events/event-types';\r\nimport { PublicEventsService } from '../public-events/public-events.service';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { IFrameService } from './existing-iframe.service';\r\n\r\nconst IFRAME_FOR_CHECK_SESSION_IDENTIFIER = 'myiFrameForCheckSession';\r\n\r\n// http://openid.net/specs/openid-connect-session-1_0-ID4.html\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CheckSessionService implements OnDestroy {\r\n  private checkSessionReceived = false;\r\n  private scheduledHeartBeatRunning: number | null = null;\r\n  private lastIFrameRefresh = 0;\r\n  private outstandingMessages = 0;\r\n  private iframeMessageEventListener?: (\r\n    this: Window,\r\n    ev: MessageEvent<any>\r\n  ) => any;\r\n\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly iFrameService = inject(IFrameService);\r\n  private readonly eventService = inject(PublicEventsService);\r\n  private readonly zone = inject(NgZone);\r\n  private readonly document = inject(DOCUMENT);\r\n\r\n  private readonly heartBeatInterval = 3000;\r\n  private readonly iframeRefreshInterval = 60000;\r\n  private readonly checkSessionChangedInternal$ = new BehaviorSubject<boolean>(\r\n    false\r\n  );\r\n\r\n  get checkSessionChanged$(): Observable<boolean> {\r\n    return this.checkSessionChangedInternal$.asObservable();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    this.stop();\r\n    const windowAsDefaultView = this.document.defaultView;\r\n\r\n    if (windowAsDefaultView && this.iframeMessageEventListener) {\r\n      windowAsDefaultView.removeEventListener(\r\n        'message',\r\n        this.iframeMessageEventListener,\r\n        false\r\n      );\r\n    }\r\n  }\r\n\r\n  isCheckSessionConfigured(configuration: OpenIdConfiguration): boolean {\r\n    const { startCheckSession } = configuration;\r\n\r\n    return Boolean(startCheckSession);\r\n  }\r\n\r\n  start(configuration: OpenIdConfiguration): void {\r\n    if (!!this.scheduledHeartBeatRunning) {\r\n      return;\r\n    }\r\n\r\n    const { clientId } = configuration;\r\n\r\n    this.pollServerSession(clientId, configuration);\r\n  }\r\n\r\n  stop(): void {\r\n    if (!this.scheduledHeartBeatRunning) {\r\n      return;\r\n    }\r\n\r\n    this.clearScheduledHeartBeat();\r\n    this.checkSessionReceived = false;\r\n  }\r\n\r\n  serverStateChanged(configuration: OpenIdConfiguration): boolean {\r\n    const { startCheckSession } = configuration;\r\n\r\n    return Boolean(startCheckSession) && this.checkSessionReceived;\r\n  }\r\n\r\n  getExistingIframe(): HTMLIFrameElement | null {\r\n    return this.iFrameService.getExistingIFrame(\r\n      IFRAME_FOR_CHECK_SESSION_IDENTIFIER\r\n    );\r\n  }\r\n\r\n  private init(configuration: OpenIdConfiguration): Observable<void> {\r\n    if (this.lastIFrameRefresh + this.iframeRefreshInterval > Date.now()) {\r\n      return of();\r\n    }\r\n\r\n    const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      configuration\r\n    );\r\n\r\n    if (!authWellKnownEndPoints) {\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        'CheckSession - init check session: authWellKnownEndpoints is undefined. Returning.'\r\n      );\r\n\r\n      return of();\r\n    }\r\n\r\n    const existingIframe = this.getOrCreateIframe(configuration);\r\n\r\n    // https://www.w3.org/TR/2000/REC-DOM-Level-2-Events-20001113/events.html#Events-EventTarget-addEventListener\r\n    // If multiple identical EventListeners are registered on the same EventTarget with the same parameters the duplicate instances are discarded. They do not cause the EventListener to be called twice and since they are discarded they do not need to be removed with the removeEventListener method.\r\n    // this is done even if iframe exists for HMR to work, since iframe exists on service init\r\n    this.bindMessageEventToIframe(configuration);\r\n    const checkSessionIframe = authWellKnownEndPoints.checkSessionIframe;\r\n    const contentWindow = existingIframe.contentWindow;\r\n\r\n    if (!checkSessionIframe) {\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        'CheckSession - init check session: checkSessionIframe is not configured to run'\r\n      );\r\n\r\n      return of();\r\n    }\r\n\r\n    if (!contentWindow) {\r\n      this.loggerService.logWarning(\r\n        configuration,\r\n        'CheckSession - init check session: IFrame contentWindow does not exist'\r\n      );\r\n    } else {\r\n      contentWindow.location.replace(checkSessionIframe);\r\n    }\r\n\r\n    return new Observable((observer) => {\r\n      existingIframe.onload = (): void => {\r\n        this.lastIFrameRefresh = Date.now();\r\n        observer.next();\r\n        observer.complete();\r\n      };\r\n    });\r\n  }\r\n\r\n  private pollServerSession(\r\n    clientId: string | undefined,\r\n    configuration: OpenIdConfiguration\r\n  ): void {\r\n    this.outstandingMessages = 0;\r\n\r\n    const pollServerSessionRecur = (): void => {\r\n      this.init(configuration)\r\n        .pipe(take(1))\r\n        .subscribe(() => {\r\n          const existingIframe = this.getExistingIframe();\r\n\r\n          if (existingIframe && clientId) {\r\n            this.loggerService.logDebug(\r\n              configuration,\r\n              `CheckSession - clientId : '${clientId}' - existingIframe: '${existingIframe}'`\r\n            );\r\n            const sessionState = this.storagePersistenceService.read(\r\n              'session_state',\r\n              configuration\r\n            );\r\n            const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n              'authWellKnownEndPoints',\r\n              configuration\r\n            );\r\n            const contentWindow = existingIframe.contentWindow;\r\n\r\n            if (\r\n              sessionState &&\r\n              authWellKnownEndPoints?.checkSessionIframe &&\r\n              contentWindow\r\n            ) {\r\n              const iframeOrigin = new URL(\r\n                authWellKnownEndPoints.checkSessionIframe\r\n              )?.origin;\r\n\r\n              this.outstandingMessages++;\r\n              contentWindow.postMessage(\r\n                clientId + ' ' + sessionState,\r\n                iframeOrigin\r\n              );\r\n            } else {\r\n              this.loggerService.logDebug(\r\n                configuration,\r\n                `CheckSession - session_state is '${sessionState}' - AuthWellKnownEndPoints is '${JSON.stringify(\r\n                  authWellKnownEndPoints,\r\n                  null,\r\n                  2\r\n                )}'`\r\n              );\r\n              this.checkSessionChangedInternal$.next(true);\r\n            }\r\n          } else {\r\n            this.loggerService.logWarning(\r\n              configuration,\r\n              `CheckSession - OidcSecurityCheckSession pollServerSession checkSession IFrame does not exist:\r\n               clientId : '${clientId}' - existingIframe: '${existingIframe}'`\r\n            );\r\n          }\r\n\r\n          // after sending three messages with no response, fail.\r\n          if (this.outstandingMessages > 3) {\r\n            this.loggerService.logError(\r\n              configuration,\r\n              `CheckSession - OidcSecurityCheckSession not receiving check session response messages.\r\n                            Outstanding messages: '${this.outstandingMessages}'. Server unreachable?`\r\n            );\r\n          }\r\n\r\n          this.zone.runOutsideAngular(() => {\r\n            this.scheduledHeartBeatRunning =\r\n              this.document?.defaultView?.setTimeout(\r\n                () => this.zone.run(pollServerSessionRecur),\r\n                this.heartBeatInterval\r\n              ) ?? null;\r\n          });\r\n        });\r\n    };\r\n\r\n    pollServerSessionRecur();\r\n  }\r\n\r\n  private clearScheduledHeartBeat(): void {\r\n    if (this.scheduledHeartBeatRunning !== null) {\r\n      clearTimeout(this.scheduledHeartBeatRunning);\r\n      this.scheduledHeartBeatRunning = null;\r\n    }\r\n  }\r\n\r\n  private messageHandler(configuration: OpenIdConfiguration, e: any): void {\r\n    const existingIFrame = this.getExistingIframe();\r\n    const authWellKnownEndPoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      configuration\r\n    );\r\n    const startsWith = !!authWellKnownEndPoints?.checkSessionIframe?.startsWith(\r\n      e.origin\r\n    );\r\n\r\n    this.outstandingMessages = 0;\r\n\r\n    if (\r\n      existingIFrame &&\r\n      startsWith &&\r\n      e.source === existingIFrame.contentWindow\r\n    ) {\r\n      if (e.data === 'error') {\r\n        this.loggerService.logWarning(\r\n          configuration,\r\n          'CheckSession - error from check session messageHandler'\r\n        );\r\n      } else if (e.data === 'changed') {\r\n        this.loggerService.logDebug(\r\n          configuration,\r\n          `CheckSession - ${e} from check session messageHandler`\r\n        );\r\n        this.checkSessionReceived = true;\r\n        this.eventService.fireEvent(EventTypes.CheckSessionReceived, e.data);\r\n        this.checkSessionChangedInternal$.next(true);\r\n      } else {\r\n        this.eventService.fireEvent(EventTypes.CheckSessionReceived, e.data);\r\n        this.loggerService.logDebug(\r\n          configuration,\r\n          `CheckSession - ${e.data} from check session messageHandler`\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  private bindMessageEventToIframe(configuration: OpenIdConfiguration): void {\r\n    const defaultView = this.document.defaultView;\r\n\r\n    if (this.iframeMessageEventListener && defaultView) {\r\n      defaultView.removeEventListener(\r\n        'message',\r\n        this.iframeMessageEventListener,\r\n        false\r\n      );\r\n    }\r\n\r\n    this.iframeMessageEventListener = this.messageHandler.bind(\r\n      this,\r\n      configuration\r\n    );\r\n\r\n    if (defaultView) {\r\n      defaultView.addEventListener(\r\n        'message',\r\n        this.iframeMessageEventListener,\r\n        false\r\n      );\r\n    }\r\n  }\r\n\r\n  private getOrCreateIframe(\r\n    configuration: OpenIdConfiguration\r\n  ): HTMLIFrameElement {\r\n    return (\r\n      this.getExistingIframe() ||\r\n      this.iFrameService.addIFrameToWindowBody(\r\n        IFRAME_FOR_CHECK_SESSION_IDENTIFIER,\r\n        configuration\r\n      )\r\n    );\r\n  }\r\n}\r\n","\r\nimport { inject, Injectable, DOCUMENT } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { StoragePersistenceService } from '../../storage/storage-persistence.service';\r\nimport { PopupOptions } from './popup-options';\r\nimport { PopupResult } from './popup-result';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PopUpService {\r\n  private popUp: Window | null = null;\r\n  private handle = -1;\r\n\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly document = inject(DOCUMENT);\r\n\r\n  private readonly STORAGE_IDENTIFIER = 'popupauth';\r\n  private readonly resultInternal$ = new Subject<PopupResult>();\r\n\r\n  get result$(): Observable<PopupResult> {\r\n    return this.resultInternal$.asObservable();\r\n  }\r\n\r\n  private get windowInternal(): Window | null {\r\n    return this.document.defaultView;\r\n  }\r\n\r\n  isCurrentlyInPopup(config: OpenIdConfiguration): boolean {\r\n    if (this.canAccessSessionStorage()) {\r\n      const popup = this.storagePersistenceService.read(\r\n        this.STORAGE_IDENTIFIER,\r\n        config\r\n      );\r\n      const windowIdentifier = this.windowInternal;\r\n\r\n      if (!windowIdentifier) {\r\n        return false;\r\n      }\r\n\r\n      return (\r\n        Boolean(windowIdentifier.opener) &&\r\n        windowIdentifier.opener !== windowIdentifier &&\r\n        Boolean(popup)\r\n      );\r\n    }\r\n\r\n    return false;\r\n  }\r\n\r\n  openPopUp(\r\n    url: string | null,\r\n    popupOptions: PopupOptions | undefined,\r\n    config: OpenIdConfiguration\r\n  ): void {\r\n    const optionsToPass = this.getOptions(popupOptions);\r\n\r\n    this.storagePersistenceService.write(\r\n      this.STORAGE_IDENTIFIER,\r\n      'true',\r\n      config\r\n    );\r\n\r\n    const windowIdentifier = this.windowInternal;\r\n\r\n    if (!windowIdentifier) {\r\n      return;\r\n    }\r\n\r\n    if (!url) {\r\n      this.loggerService.logError(config, 'Could not open popup, url is empty');\r\n\r\n      return;\r\n    }\r\n\r\n    this.popUp = windowIdentifier.open(url, '_blank', optionsToPass);\r\n\r\n    if (!this.popUp) {\r\n      this.storagePersistenceService.remove(this.STORAGE_IDENTIFIER, config);\r\n      this.loggerService.logError(config, 'Could not open popup');\r\n\r\n      return;\r\n    }\r\n\r\n    this.loggerService.logDebug(config, 'Opened popup with url ' + url);\r\n\r\n    const listener = (event: MessageEvent): void => {\r\n      if (!event?.data || typeof event.data !== 'string') {\r\n        if (config.disableCleaningPopupOnInvalidMessage) {\r\n          return;\r\n        }\r\n        this.cleanUp(listener, config);\r\n\r\n        return;\r\n      }\r\n\r\n      this.loggerService.logDebug(\r\n        config,\r\n        'Received message from popup with url ' + event.data\r\n      );\r\n\r\n      this.resultInternal$.next({ userClosed: false, receivedUrl: event.data });\r\n\r\n      this.cleanUp(listener, config);\r\n    };\r\n\r\n    windowIdentifier.addEventListener('message', listener, false);\r\n\r\n    this.handle = windowIdentifier.setInterval(() => {\r\n      if (this.popUp?.closed) {\r\n        this.resultInternal$.next({ userClosed: true, receivedUrl: '' });\r\n\r\n        this.cleanUp(listener, config);\r\n      }\r\n    }, 200);\r\n  }\r\n\r\n  sendMessageToMainWindow(url: string, config: OpenIdConfiguration): void {\r\n    const windowIdentifier = this.windowInternal;\r\n\r\n    if (!windowIdentifier) {\r\n      return;\r\n    }\r\n\r\n    if (windowIdentifier.opener) {\r\n      const href = windowIdentifier.location.href;\r\n\r\n      this.sendMessage(url, href, config);\r\n    }\r\n  }\r\n\r\n  private cleanUp(listener: any, config: OpenIdConfiguration): void {\r\n    const windowIdentifier = this.windowInternal;\r\n\r\n    if (!windowIdentifier) {\r\n      return;\r\n    }\r\n\r\n    windowIdentifier.removeEventListener('message', listener, false);\r\n    windowIdentifier.clearInterval(this.handle);\r\n\r\n    if (this.popUp) {\r\n      this.storagePersistenceService.remove(this.STORAGE_IDENTIFIER, config);\r\n      this.popUp.close();\r\n      this.popUp = null;\r\n    }\r\n  }\r\n\r\n  private sendMessage(\r\n    url: string,\r\n    href: string,\r\n    config: OpenIdConfiguration\r\n  ): void {\r\n    const windowIdentifier = this.windowInternal;\r\n\r\n    if (!windowIdentifier) {\r\n      return;\r\n    }\r\n\r\n    if (!url) {\r\n      this.loggerService.logDebug(\r\n        config,\r\n        `Can not send message to parent, no url: '${url}'`\r\n      );\r\n\r\n      return;\r\n    }\r\n\r\n    windowIdentifier.opener.postMessage(url, href);\r\n  }\r\n\r\n  private getOptions(popupOptions: PopupOptions | undefined): string {\r\n    const popupDefaultOptions = {\r\n      width: 500,\r\n      height: 500,\r\n      left: 50,\r\n      top: 50,\r\n    };\r\n    const options: PopupOptions = {\r\n      ...popupDefaultOptions,\r\n      ...(popupOptions || {}),\r\n    };\r\n    const windowIdentifier = this.windowInternal;\r\n\r\n    if (!windowIdentifier) {\r\n      return '';\r\n    }\r\n\r\n    const width = options.width || popupDefaultOptions.width;\r\n    const height = options.height || popupDefaultOptions.height;\r\n    const left: number =\r\n      windowIdentifier.screenLeft + (windowIdentifier.outerWidth - width) / 2;\r\n    const top: number =\r\n      windowIdentifier.screenTop + (windowIdentifier.outerHeight - height) / 2;\r\n\r\n    options.left = left;\r\n    options.top = top;\r\n\r\n    return Object.entries(options)\r\n      .map(\r\n        ([key, value]) =>\r\n          `${encodeURIComponent(key)}=${encodeURIComponent(value)}`\r\n      )\r\n      .join(',');\r\n  }\r\n\r\n  private canAccessSessionStorage(): boolean {\r\n    return (\r\n      typeof navigator !== 'undefined' &&\r\n      navigator.cookieEnabled &&\r\n      typeof Storage !== 'undefined'\r\n    );\r\n  }\r\n}\r\n","import { Injectable, inject, DOCUMENT } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CurrentUrlService {\r\n  private readonly document: Document = inject(DOCUMENT);\r\n\r\n  getStateParamFromCurrentUrl(url?: string): string | null {\r\n    const currentUrl = url || this.getCurrentUrl();\r\n\r\n    if (!currentUrl) {\r\n      return null;\r\n    }\r\n\r\n    const parsedUrl = new URL(currentUrl);\r\n    const urlParams = new URLSearchParams(parsedUrl.search);\r\n\r\n    return urlParams.get('state');\r\n  }\r\n\r\n  getCurrentUrl(): string | null {\r\n    return this.document?.defaultView?.location.toString() ?? null;\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { forkJoin, Observable, of, throwError } from 'rxjs';\r\nimport { catchError, map, switchMap, tap } from 'rxjs/operators';\r\nimport { AutoLoginService } from '../auto-login/auto-login.service';\r\nimport { CallbackService } from '../callback/callback.service';\r\nimport { PeriodicallyTokenCheckService } from '../callback/periodically-token-check.service';\r\nimport { RefreshSessionService } from '../callback/refresh-session.service';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { CheckSessionService } from '../iframe/check-session.service';\r\nimport { SilentRenewService } from '../iframe/silent-renew.service';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { LoginResponse } from '../login/login-response';\r\nimport { PopUpService } from '../login/popup/popup.service';\r\nimport { EventTypes } from '../public-events/event-types';\r\nimport { PublicEventsService } from '../public-events/public-events.service';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { UserService } from '../user-data/user.service';\r\nimport { CurrentUrlService } from '../utils/url/current-url.service';\r\nimport { AuthStateService } from './auth-state.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CheckAuthService {\r\n  private readonly checkSessionService = inject(CheckSessionService);\r\n  private readonly currentUrlService = inject(CurrentUrlService);\r\n  private readonly silentRenewService = inject(SilentRenewService);\r\n  private readonly userService = inject(UserService);\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly callbackService = inject(CallbackService);\r\n  private readonly refreshSessionService = inject(RefreshSessionService);\r\n  private readonly periodicallyTokenCheckService = inject(\r\n    PeriodicallyTokenCheckService\r\n  );\r\n  private readonly popupService = inject(PopUpService);\r\n  private readonly autoLoginService = inject(AutoLoginService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly publicEventsService = inject(PublicEventsService);\r\n\r\n  checkAuth(\r\n    configuration: OpenIdConfiguration | null,\r\n    allConfigs: OpenIdConfiguration[],\r\n    url?: string\r\n  ): Observable<LoginResponse> {\r\n    if (!configuration) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            'Please provide a configuration before setting up the module'\r\n          )\r\n      );\r\n    }\r\n\r\n    this.publicEventsService.fireEvent(EventTypes.CheckingAuth);\r\n\r\n    const stateParamFromUrl =\r\n      this.currentUrlService.getStateParamFromCurrentUrl(url);\r\n    const config = this.getConfig(configuration, url);\r\n\r\n    if (!config) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            `could not find matching config for state ${stateParamFromUrl}`\r\n          )\r\n      );\r\n    }\r\n\r\n    return this.checkAuthWithConfig(configuration, allConfigs, url);\r\n  }\r\n\r\n  checkAuthMultiple(\r\n    allConfigs: OpenIdConfiguration[],\r\n    url?: string\r\n  ): Observable<LoginResponse[]> {\r\n    const stateParamFromUrl =\r\n      this.currentUrlService.getStateParamFromCurrentUrl(url);\r\n\r\n    if (stateParamFromUrl) {\r\n      const config = this.getConfigurationWithUrlState(\r\n        allConfigs,\r\n        stateParamFromUrl\r\n      );\r\n\r\n      if (!config) {\r\n        return throwError(\r\n          () =>\r\n            new Error(\r\n              `could not find matching config for state ${stateParamFromUrl}`\r\n            )\r\n        );\r\n      }\r\n\r\n      return this.composeMultipleLoginResults(allConfigs, config, url);\r\n    }\r\n\r\n    const configs = allConfigs;\r\n    const allChecks$ = configs.map((x) =>\r\n      this.checkAuthWithConfig(x, configs, url)\r\n    );\r\n\r\n    return forkJoin(allChecks$);\r\n  }\r\n\r\n  checkAuthIncludingServer(\r\n    configuration: OpenIdConfiguration | null,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<LoginResponse> {\r\n    if (!configuration) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            'Please provide a configuration before setting up the module'\r\n          )\r\n      );\r\n    }\r\n\r\n    return this.checkAuthWithConfig(configuration, allConfigs).pipe(\r\n      switchMap((loginResponse) => {\r\n        const { isAuthenticated } = loginResponse;\r\n\r\n        if (isAuthenticated) {\r\n          return of(loginResponse);\r\n        }\r\n\r\n        return this.refreshSessionService\r\n          .forceRefreshSession(configuration, allConfigs)\r\n          .pipe(\r\n            tap((loginResponseAfterRefreshSession) => {\r\n              if (loginResponseAfterRefreshSession?.isAuthenticated) {\r\n                this.startCheckSessionAndValidation(configuration, allConfigs);\r\n              }\r\n            })\r\n          );\r\n      })\r\n    );\r\n  }\r\n\r\n  private getConfig(\r\n    configuration: OpenIdConfiguration,\r\n    url: string | undefined\r\n  ): OpenIdConfiguration | null {\r\n    const stateParamFromUrl =\r\n      this.currentUrlService.getStateParamFromCurrentUrl(url);\r\n\r\n    return Boolean(stateParamFromUrl)\r\n      ? this.getConfigurationWithUrlState([configuration], stateParamFromUrl)\r\n      : configuration;\r\n  }\r\n\r\n  private checkAuthWithConfig(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    url?: string\r\n  ): Observable<LoginResponse> {\r\n    if (!config) {\r\n      const errorMessage =\r\n        'Please provide at least one configuration before setting up the module';\r\n\r\n      this.loggerService.logError(config, errorMessage);\r\n\r\n      const result: LoginResponse = {\r\n        isAuthenticated: false,\r\n        errorMessage,\r\n        userData: null,\r\n        idToken: '',\r\n        accessToken: '',\r\n        configId: '',\r\n      };\r\n\r\n      return of(result);\r\n    }\r\n\r\n    const currentUrl = url || this.currentUrlService.getCurrentUrl();\r\n\r\n    if (!currentUrl) {\r\n      const errorMessage = 'No URL found!';\r\n\r\n      this.loggerService.logError(config, errorMessage);\r\n\r\n      const result: LoginResponse = {\r\n        isAuthenticated: false,\r\n        errorMessage,\r\n        userData: null,\r\n        idToken: '',\r\n        accessToken: '',\r\n        configId: '',\r\n      };\r\n\r\n      return of(result);\r\n    }\r\n\r\n    const { configId, authority } = config;\r\n\r\n    this.loggerService.logDebug(\r\n      config,\r\n      `Working with config '${configId}' using '${authority}'`\r\n    );\r\n\r\n    if (this.popupService.isCurrentlyInPopup(config)) {\r\n      this.popupService.sendMessageToMainWindow(currentUrl, config);\r\n\r\n      const result: LoginResponse = {\r\n        isAuthenticated: false,\r\n        errorMessage: '',\r\n        userData: null,\r\n        idToken: '',\r\n        accessToken: '',\r\n        configId: '',\r\n      };\r\n\r\n      return of(result);\r\n    }\r\n\r\n    const isCallback = this.callbackService.isCallback(currentUrl, config);\r\n\r\n    this.loggerService.logDebug(\r\n      config,\r\n      `currentUrl to check auth with: '${currentUrl}'`\r\n    );\r\n\r\n    const callback$ = isCallback\r\n      ? this.callbackService.handleCallbackAndFireEvents(\r\n          currentUrl,\r\n          config,\r\n          allConfigs\r\n        )\r\n      : of({});\r\n\r\n    return callback$.pipe(\r\n      map(() => {\r\n        const isAuthenticated =\r\n          this.authStateService.areAuthStorageTokensValid(config);\r\n\r\n        this.loggerService.logDebug(\r\n          config,\r\n          `checkAuth completed. Firing events now. isAuthenticated: ${isAuthenticated}`\r\n        );\r\n\r\n        if (isAuthenticated) {\r\n          this.startCheckSessionAndValidation(config, allConfigs);\r\n\r\n          if (!isCallback) {\r\n            this.authStateService.setAuthenticatedAndFireEvent(allConfigs);\r\n            this.userService.publishUserDataIfExists(config, allConfigs);\r\n          }\r\n        }\r\n        this.publicEventsService.fireEvent(EventTypes.CheckingAuthFinished);\r\n\r\n        const result: LoginResponse = {\r\n          isAuthenticated,\r\n          userData: this.userService.getUserDataFromStore(config),\r\n          accessToken: this.authStateService.getAccessToken(config),\r\n          idToken: this.authStateService.getIdToken(config),\r\n          configId,\r\n        };\r\n\r\n        return result;\r\n      }),\r\n      tap(({ isAuthenticated }) => {\r\n        if (isAuthenticated) {\r\n          this.autoLoginService.checkSavedRedirectRouteAndNavigate(config);\r\n        }\r\n      }),\r\n      catchError(({ message }) => {\r\n        this.loggerService.logError(config, message);\r\n        this.publicEventsService.fireEvent(\r\n          EventTypes.CheckingAuthFinishedWithError,\r\n          message\r\n        );\r\n\r\n        const result: LoginResponse = {\r\n          isAuthenticated: false,\r\n          errorMessage: message,\r\n          userData: null,\r\n          idToken: '',\r\n          accessToken: '',\r\n          configId,\r\n        };\r\n\r\n        return of(result);\r\n      })\r\n    );\r\n  }\r\n\r\n  private startCheckSessionAndValidation(\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): void {\r\n    if (this.checkSessionService.isCheckSessionConfigured(config)) {\r\n      this.checkSessionService.start(config);\r\n    }\r\n\r\n    this.periodicallyTokenCheckService.startTokenValidationPeriodically(\r\n      allConfigs,\r\n      config\r\n    );\r\n\r\n    if (this.silentRenewService.isSilentRenewConfigured(config)) {\r\n      this.silentRenewService.getOrCreateIframe(config);\r\n    }\r\n  }\r\n\r\n  private getConfigurationWithUrlState(\r\n    configurations: OpenIdConfiguration[],\r\n    stateFromUrl: string | null\r\n  ): OpenIdConfiguration | null {\r\n    if (!stateFromUrl) {\r\n      return null;\r\n    }\r\n\r\n    for (const config of configurations) {\r\n      const storedState = this.storagePersistenceService.read(\r\n        'authStateControl',\r\n        config\r\n      );\r\n\r\n      if (storedState === stateFromUrl) {\r\n        return config;\r\n      }\r\n    }\r\n\r\n    return null;\r\n  }\r\n\r\n  private composeMultipleLoginResults(\r\n    configurations: OpenIdConfiguration[],\r\n    activeConfig: OpenIdConfiguration,\r\n    url?: string\r\n  ): Observable<LoginResponse[]> {\r\n    const allOtherConfigs = configurations.filter(\r\n      (x) => x.configId !== activeConfig.configId\r\n    );\r\n    const currentConfigResult = this.checkAuthWithConfig(\r\n      activeConfig,\r\n      configurations,\r\n      url\r\n    );\r\n    const allOtherConfigResults = allOtherConfigs.map((config) => {\r\n      const { redirectUrl } = config;\r\n\r\n      return this.checkAuthWithConfig(config, configurations, redirectUrl);\r\n    });\r\n\r\n    return forkJoin([currentConfigResult, ...allOtherConfigResults]);\r\n  }\r\n}\r\n","\r\nimport { Injectable, inject, DOCUMENT } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class RedirectService {\r\n  private readonly document = inject<Document>(DOCUMENT);\r\n\r\n  redirectTo(url: string): void {\r\n    this.document.location.href = url;\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { FlowHelper } from '../../utils/flowHelper/flow-helper.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ResponseTypeValidationService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly flowHelper = inject(FlowHelper);\r\n\r\n  hasConfigValidResponseType(configuration: OpenIdConfiguration): boolean {\r\n    if (this.flowHelper.isCurrentFlowAnyImplicitFlow(configuration)) {\r\n      return true;\r\n    }\r\n\r\n    if (this.flowHelper.isCurrentFlowCodeFlow(configuration)) {\r\n      return true;\r\n    }\r\n\r\n    this.loggerService.logWarning(\r\n      configuration,\r\n      'module configured incorrectly, invalid response_type. Check the responseType in the config'\r\n    );\r\n\r\n    return false;\r\n  }\r\n}\r\n","import { HttpHeaders } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable, throwError } from 'rxjs';\r\nimport { catchError, map, retry, switchMap } from 'rxjs/operators';\r\nimport { DataService } from '../../api/data.service';\r\nimport { AuthOptions } from '../../auth-options';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { StoragePersistenceService } from '../../storage/storage-persistence.service';\r\nimport { UrlService } from '../../utils/url/url.service';\r\nimport { ParResponse } from './par-response';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ParService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly urlService = inject(UrlService);\r\n  private readonly dataService = inject(DataService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n\r\n  postParRequest(\r\n    configuration: OpenIdConfiguration,\r\n    authOptions?: AuthOptions\r\n  ): Observable<ParResponse> {\r\n    let headers: HttpHeaders = new HttpHeaders();\r\n\r\n    headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');\r\n\r\n    const authWellKnownEndpoints = this.storagePersistenceService.read(\r\n      'authWellKnownEndPoints',\r\n      configuration\r\n    );\r\n\r\n    if (!authWellKnownEndpoints) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            'Could not read PAR endpoint because authWellKnownEndPoints are not given'\r\n          )\r\n      );\r\n    }\r\n\r\n    const parEndpoint = authWellKnownEndpoints.parEndpoint;\r\n\r\n    if (!parEndpoint) {\r\n      return throwError(\r\n        () =>\r\n          new Error('Could not read PAR endpoint from authWellKnownEndpoints')\r\n      );\r\n    }\r\n\r\n    return this.urlService\r\n      .createBodyForParCodeFlowRequest(configuration, authOptions)\r\n      .pipe(\r\n        switchMap((data) => {\r\n          return this.dataService\r\n            .post(parEndpoint, data, configuration, headers)\r\n            .pipe(\r\n              retry(2),\r\n              map((response: any) => {\r\n                this.loggerService.logDebug(\r\n                  configuration,\r\n                  'par response: ',\r\n                  response\r\n                );\r\n\r\n                return {\r\n                  expiresIn: response.expires_in,\r\n                  requestUri: response.request_uri,\r\n                };\r\n              }),\r\n              catchError((error) => {\r\n                const errorMessage = `There was an error on ParService postParRequest`;\r\n\r\n                this.loggerService.logError(configuration, errorMessage, error);\r\n\r\n                return throwError(() => new Error(errorMessage));\r\n              })\r\n            );\r\n        })\r\n      );\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { switchMap, take } from 'rxjs/operators';\r\nimport { AuthOptions } from '../../auth-options';\r\nimport { CheckAuthService } from '../../auth-state/check-auth.service';\r\nimport { AuthWellKnownService } from '../../config/auth-well-known/auth-well-known.service';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { RedirectService } from '../../utils/redirect/redirect.service';\r\nimport { UrlService } from '../../utils/url/url.service';\r\nimport { LoginResponse } from '../login-response';\r\nimport { PopupOptions } from '../popup/popup-options';\r\nimport { PopupResult } from '../popup/popup-result';\r\nimport { PopUpService } from '../popup/popup.service';\r\nimport { ResponseTypeValidationService } from '../response-type-validation/response-type-validation.service';\r\nimport { ParResponse } from './par-response';\r\nimport { ParService } from './par.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ParLoginService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly responseTypeValidationService = inject(\r\n    ResponseTypeValidationService\r\n  );\r\n  private readonly urlService = inject(UrlService);\r\n  private readonly redirectService = inject(RedirectService);\r\n  private readonly authWellKnownService = inject(AuthWellKnownService);\r\n  private readonly popupService = inject(PopUpService);\r\n  private readonly checkAuthService = inject(CheckAuthService);\r\n  private readonly parService = inject(ParService);\r\n\r\n  loginPar(\r\n    configuration: OpenIdConfiguration,\r\n    authOptions?: AuthOptions\r\n  ): void {\r\n    if (\r\n      !this.responseTypeValidationService.hasConfigValidResponseType(\r\n        configuration\r\n      )\r\n    ) {\r\n      this.loggerService.logError(configuration, 'Invalid response type!');\r\n\r\n      return;\r\n    }\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'BEGIN Authorize OIDC Flow, no auth data'\r\n    );\r\n\r\n    this.authWellKnownService\r\n      .queryAndStoreAuthWellKnownEndPoints(configuration)\r\n      .pipe(\r\n        switchMap(() =>\r\n          this.parService.postParRequest(configuration, authOptions)\r\n        )\r\n      )\r\n      .subscribe((response) => {\r\n        this.loggerService.logDebug(configuration, 'par response: ', response);\r\n\r\n        const url = this.urlService.getAuthorizeParUrl(\r\n          response.requestUri,\r\n          configuration\r\n        );\r\n\r\n        this.loggerService.logDebug(configuration, 'par request url: ', url);\r\n\r\n        if (!url) {\r\n          this.loggerService.logError(\r\n            configuration,\r\n            `Could not create URL with param ${response.requestUri}: '${url}'`\r\n          );\r\n\r\n          return;\r\n        }\r\n\r\n        if (authOptions?.urlHandler) {\r\n          authOptions.urlHandler(url);\r\n        } else {\r\n          this.redirectService.redirectTo(url);\r\n        }\r\n      });\r\n  }\r\n\r\n  loginWithPopUpPar(\r\n    configuration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    authOptions?: AuthOptions,\r\n    popupOptions?: PopupOptions\r\n  ): Observable<LoginResponse> {\r\n    const { configId } = configuration;\r\n\r\n    if (\r\n      !this.responseTypeValidationService.hasConfigValidResponseType(\r\n        configuration\r\n      )\r\n    ) {\r\n      const errorMessage = 'Invalid response type!';\r\n\r\n      this.loggerService.logError(configuration, errorMessage);\r\n\r\n      return throwError(() => new Error(errorMessage));\r\n    }\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'BEGIN Authorize OIDC Flow with popup, no auth data'\r\n    );\r\n\r\n    return this.authWellKnownService\r\n      .queryAndStoreAuthWellKnownEndPoints(configuration)\r\n      .pipe(\r\n        switchMap(() =>\r\n          this.parService.postParRequest(configuration, authOptions)\r\n        ),\r\n        switchMap((response: ParResponse) => {\r\n          this.loggerService.logDebug(\r\n            configuration,\r\n            `par response: ${response}`\r\n          );\r\n\r\n          const url = this.urlService.getAuthorizeParUrl(\r\n            response.requestUri,\r\n            configuration\r\n          );\r\n\r\n          this.loggerService.logDebug(configuration, 'par request url: ', url);\r\n\r\n          if (!url) {\r\n            const errorMessage = `Could not create URL with param ${response.requestUri}: 'url'`;\r\n\r\n            this.loggerService.logError(configuration, errorMessage);\r\n\r\n            return throwError(() => new Error(errorMessage));\r\n          }\r\n\r\n          this.popupService.openPopUp(url, popupOptions, configuration);\r\n\r\n          return this.popupService.result$.pipe(\r\n            take(1),\r\n            switchMap((result: PopupResult) => {\r\n              const { userClosed, receivedUrl } = result;\r\n\r\n              if (userClosed) {\r\n                return of({\r\n                  isAuthenticated: false,\r\n                  errorMessage: 'User closed popup',\r\n                  userData: null,\r\n                  idToken: '',\r\n                  accessToken: '',\r\n                  configId,\r\n                });\r\n              }\r\n\r\n              return this.checkAuthService.checkAuth(\r\n                configuration,\r\n                allConfigs,\r\n                receivedUrl\r\n              );\r\n            })\r\n          );\r\n        })\r\n      );\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { switchMap, take, tap } from 'rxjs/operators';\r\nimport { AuthOptions } from '../../auth-options';\r\nimport { CheckAuthService } from '../../auth-state/check-auth.service';\r\nimport { AuthWellKnownService } from '../../config/auth-well-known/auth-well-known.service';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { UrlService } from '../../utils/url/url.service';\r\nimport { LoginResponse } from '../login-response';\r\nimport { ResponseTypeValidationService } from '../response-type-validation/response-type-validation.service';\r\nimport { PopupOptions } from './popup-options';\r\nimport { PopupResult } from './popup-result';\r\nimport { PopUpService } from './popup.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PopUpLoginService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly responseTypeValidationService = inject(\r\n    ResponseTypeValidationService\r\n  );\r\n  private readonly urlService = inject(UrlService);\r\n  private readonly authWellKnownService = inject(AuthWellKnownService);\r\n  private readonly popupService = inject(PopUpService);\r\n  private readonly checkAuthService = inject(CheckAuthService);\r\n\r\n  loginWithPopUpStandard(\r\n    configuration: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[],\r\n    authOptions?: AuthOptions,\r\n    popupOptions?: PopupOptions\r\n  ): Observable<LoginResponse> {\r\n    const { configId } = configuration;\r\n\r\n    if (\r\n      !this.responseTypeValidationService.hasConfigValidResponseType(\r\n        configuration\r\n      )\r\n    ) {\r\n      const errorMessage = 'Invalid response type!';\r\n\r\n      this.loggerService.logError(configuration, errorMessage);\r\n\r\n      return throwError(() => new Error(errorMessage));\r\n    }\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'BEGIN Authorize OIDC Flow with popup, no auth data'\r\n    );\r\n\r\n    return this.authWellKnownService\r\n      .queryAndStoreAuthWellKnownEndPoints(configuration)\r\n      .pipe(\r\n        switchMap(() =>\r\n          this.urlService.getAuthorizeUrl(configuration, authOptions)\r\n        ),\r\n        tap((authUrl) =>\r\n          this.popupService.openPopUp(authUrl, popupOptions, configuration)\r\n        ),\r\n        switchMap(() => {\r\n          return this.popupService.result$.pipe(\r\n            take(1),\r\n            switchMap((result: PopupResult) => {\r\n              const { userClosed, receivedUrl } = result;\r\n\r\n              if (userClosed) {\r\n                const response: LoginResponse = {\r\n                  isAuthenticated: false,\r\n                  errorMessage: 'User closed popup',\r\n                  userData: null,\r\n                  idToken: '',\r\n                  accessToken: '',\r\n                  configId,\r\n                };\r\n\r\n                return of(response);\r\n              }\r\n\r\n              return this.checkAuthService.checkAuth(\r\n                configuration,\r\n                allConfigs,\r\n                receivedUrl\r\n              );\r\n            })\r\n          );\r\n        })\r\n      );\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { AuthOptions } from '../../auth-options';\r\nimport { AuthWellKnownService } from '../../config/auth-well-known/auth-well-known.service';\r\nimport { OpenIdConfiguration } from '../../config/openid-configuration';\r\nimport { FlowsDataService } from '../../flows/flows-data.service';\r\nimport { LoggerService } from '../../logging/logger.service';\r\nimport { RedirectService } from '../../utils/redirect/redirect.service';\r\nimport { UrlService } from '../../utils/url/url.service';\r\nimport { ResponseTypeValidationService } from '../response-type-validation/response-type-validation.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class StandardLoginService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly responseTypeValidationService = inject(\r\n    ResponseTypeValidationService\r\n  );\r\n  private readonly urlService = inject(UrlService);\r\n  private readonly redirectService = inject(RedirectService);\r\n  private readonly authWellKnownService = inject(AuthWellKnownService);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n\r\n  loginStandard(\r\n    configuration: OpenIdConfiguration,\r\n    authOptions?: AuthOptions\r\n  ): void {\r\n    if (\r\n      !this.responseTypeValidationService.hasConfigValidResponseType(\r\n        configuration\r\n      )\r\n    ) {\r\n      this.loggerService.logError(configuration, 'Invalid response type!');\r\n\r\n      return;\r\n    }\r\n\r\n    this.loggerService.logDebug(\r\n      configuration,\r\n      'BEGIN Authorize OIDC Flow, no auth data'\r\n    );\r\n    this.flowsDataService.setCodeFlowInProgress(configuration);\r\n\r\n    this.authWellKnownService\r\n      .queryAndStoreAuthWellKnownEndPoints(configuration)\r\n      .subscribe(() => {\r\n        const { urlHandler } = authOptions || {};\r\n\r\n        this.flowsDataService.resetSilentRenewRunning(configuration);\r\n\r\n        this.urlService\r\n          .getAuthorizeUrl(configuration, authOptions)\r\n          .subscribe((url) => {\r\n            if (!url) {\r\n              this.loggerService.logError(\r\n                configuration,\r\n                'Could not create URL',\r\n                url\r\n              );\r\n\r\n              return;\r\n            }\r\n\r\n            if (urlHandler) {\r\n              urlHandler(url);\r\n            } else {\r\n              this.redirectService.redirectTo(url);\r\n            }\r\n          });\r\n      });\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, of } from 'rxjs';\r\nimport { AuthOptions } from '../auth-options';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { LoginResponse } from './login-response';\r\nimport { ParLoginService } from './par/par-login.service';\r\nimport { PopUpLoginService } from './popup/popup-login.service';\r\nimport { PopupOptions } from './popup/popup-options';\r\nimport { PopUpService } from './popup/popup.service';\r\nimport { StandardLoginService } from './standard/standard-login.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LoginService {\r\n  private readonly parLoginService = inject(ParLoginService);\r\n  private readonly popUpLoginService = inject(PopUpLoginService);\r\n  private readonly standardLoginService = inject(StandardLoginService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly popupService = inject(PopUpService);\r\n\r\n  login(\r\n    configuration: OpenIdConfiguration | null,\r\n    authOptions?: AuthOptions\r\n  ): void {\r\n    if (!configuration) {\r\n      throw new Error(\r\n        'Please provide a configuration before setting up the module'\r\n      );\r\n    }\r\n\r\n    const { usePushedAuthorisationRequests } = configuration;\r\n\r\n    if (authOptions?.customParams) {\r\n      this.storagePersistenceService.write(\r\n        'storageCustomParamsAuthRequest',\r\n        authOptions.customParams,\r\n        configuration\r\n      );\r\n    }\r\n\r\n    if (usePushedAuthorisationRequests) {\r\n      return this.parLoginService.loginPar(configuration, authOptions);\r\n    } else {\r\n      return this.standardLoginService.loginStandard(\r\n        configuration,\r\n        authOptions\r\n      );\r\n    }\r\n  }\r\n\r\n  loginWithPopUp(\r\n    configuration: OpenIdConfiguration | null,\r\n    allConfigs: OpenIdConfiguration[],\r\n    authOptions?: AuthOptions,\r\n    popupOptions?: PopupOptions\r\n  ): Observable<LoginResponse> {\r\n    if (!configuration) {\r\n      throw new Error(\r\n        'Please provide a configuration before setting up the module'\r\n      );\r\n    }\r\n\r\n    const isAlreadyInPopUp =\r\n      this.popupService.isCurrentlyInPopup(configuration);\r\n\r\n    if (isAlreadyInPopUp) {\r\n      return of({\r\n        errorMessage: 'There is already a popup open.',\r\n      } as LoginResponse);\r\n    }\r\n\r\n    const { usePushedAuthorisationRequests } = configuration;\r\n\r\n    if (authOptions?.customParams) {\r\n      this.storagePersistenceService.write(\r\n        'storageCustomParamsAuthRequest',\r\n        authOptions.customParams,\r\n        configuration\r\n      );\r\n    }\r\n\r\n    if (usePushedAuthorisationRequests) {\r\n      return this.parLoginService.loginWithPopUpPar(\r\n        configuration,\r\n        allConfigs,\r\n        authOptions,\r\n        popupOptions\r\n      );\r\n    }\r\n\r\n    return this.popUpLoginService.loginWithPopUpStandard(\r\n      configuration,\r\n      allConfigs,\r\n      authOptions,\r\n      popupOptions\r\n    );\r\n  }\r\n}\r\n","export function removeNullAndUndefinedValues(obj: any): any {\n  const copy = { ...obj };\n\n  for (const key in obj) {\n    if (obj[key] === undefined || obj[key] === null) {\n      delete copy[key];\n    }\n  }\n\n  return copy;\n}\n","import { HttpHeaders } from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable, of, throwError } from 'rxjs';\r\nimport { catchError, concatMap, retry, switchMap } from 'rxjs/operators';\r\nimport { DataService } from '../api/data.service';\r\nimport { LogoutAuthOptions } from '../auth-options';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { ResetAuthDataService } from '../flows/reset-auth-data.service';\r\nimport { CheckSessionService } from '../iframe/check-session.service';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { StoragePersistenceService } from '../storage/storage-persistence.service';\r\nimport { removeNullAndUndefinedValues } from '../utils/object/object.helper';\r\nimport { RedirectService } from '../utils/redirect/redirect.service';\r\nimport { UrlService } from '../utils/url/url.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LogoffRevocationService {\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly dataService = inject(DataService);\r\n  private readonly storagePersistenceService = inject(\r\n    StoragePersistenceService\r\n  );\r\n  private readonly urlService = inject(UrlService);\r\n  private readonly checkSessionService = inject(CheckSessionService);\r\n  private readonly resetAuthDataService = inject(ResetAuthDataService);\r\n  private readonly redirectService = inject(RedirectService);\r\n\r\n  // Logs out on the server and the local client.\r\n  // If the server state has changed, check session, then only a local logout.\r\n  logoff(\r\n    config: OpenIdConfiguration | null,\r\n    allConfigs: OpenIdConfiguration[],\r\n    logoutAuthOptions?: LogoutAuthOptions\r\n  ): Observable<unknown> {\r\n    if (!config) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            'Please provide a configuration before setting up the module'\r\n          )\r\n      );\r\n    }\r\n\r\n    this.loggerService.logDebug(\r\n      config,\r\n      'logoff, remove auth',\r\n      logoutAuthOptions\r\n    );\r\n\r\n    const { urlHandler, customParams } = logoutAuthOptions || {};\r\n    const endSessionUrl = this.urlService.getEndSessionUrl(\r\n      config,\r\n      customParams\r\n    );\r\n\r\n    if (!endSessionUrl) {\r\n      this.loggerService.logDebug(\r\n        config,\r\n        'No endsessionUrl present. Logoff was only locally. Returning.'\r\n      );\r\n\r\n      return of(null);\r\n    }\r\n\r\n    if (this.checkSessionService.serverStateChanged(config)) {\r\n      this.loggerService.logDebug(\r\n        config,\r\n        'Server State changed. Logoff was only locally. Returning.'\r\n      );\r\n\r\n      return of(null);\r\n    }\r\n\r\n    if (urlHandler) {\r\n      this.loggerService.logDebug(\r\n        config,\r\n        `Custom UrlHandler found. Using this to handle logoff with url '${endSessionUrl}'`\r\n      );\r\n      urlHandler(endSessionUrl);\r\n      this.resetAuthDataService.resetAuthorizationData(config, allConfigs);\r\n\r\n      return of(null);\r\n    }\r\n\r\n    return this.logoffInternal(\r\n      logoutAuthOptions,\r\n      endSessionUrl,\r\n      config,\r\n      allConfigs\r\n    );\r\n  }\r\n\r\n  logoffLocal(\r\n    config: OpenIdConfiguration | null,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): void {\r\n    this.resetAuthDataService.resetAuthorizationData(config, allConfigs);\r\n    this.checkSessionService.stop();\r\n  }\r\n\r\n  logoffLocalMultiple(allConfigs: OpenIdConfiguration[]): void {\r\n    allConfigs.forEach((configuration) =>\r\n      this.logoffLocal(configuration, allConfigs)\r\n    );\r\n  }\r\n\r\n  // The refresh token and and the access token are revoked on the server. If the refresh token does not exist\r\n  // only the access token is revoked. Then the logout run.\r\n  logoffAndRevokeTokens(\r\n    config: OpenIdConfiguration | null,\r\n    allConfigs: OpenIdConfiguration[],\r\n    logoutAuthOptions?: LogoutAuthOptions\r\n  ): Observable<any> {\r\n    if (!config) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            'Please provide a configuration before setting up the module'\r\n          )\r\n      );\r\n    }\r\n\r\n    const { revocationEndpoint } =\r\n      this.storagePersistenceService.read('authWellKnownEndPoints', config) ||\r\n      {};\r\n\r\n    if (!revocationEndpoint) {\r\n      this.loggerService.logDebug(config, 'revocation endpoint not supported');\r\n\r\n      return this.logoff(config, allConfigs, logoutAuthOptions);\r\n    }\r\n\r\n    if (this.storagePersistenceService.getRefreshToken(config)) {\r\n      return this.revokeRefreshToken(config).pipe(\r\n        switchMap((_) => this.revokeAccessToken(config)),\r\n        catchError((error) => {\r\n          const errorMessage = `revoke token failed`;\r\n\r\n          this.loggerService.logError(config, errorMessage, error);\r\n\r\n          return throwError(() => new Error(errorMessage));\r\n        }),\r\n        concatMap(() => this.logoff(config, allConfigs, logoutAuthOptions))\r\n      );\r\n    } else {\r\n      return this.revokeAccessToken(config).pipe(\r\n        catchError((error) => {\r\n          const errorMessage = `revoke accessToken failed`;\r\n\r\n          this.loggerService.logError(config, errorMessage, error);\r\n\r\n          return throwError(() => new Error(errorMessage));\r\n        }),\r\n        concatMap(() => this.logoff(config, allConfigs, logoutAuthOptions))\r\n      );\r\n    }\r\n  }\r\n\r\n  // https://tools.ietf.org/html/rfc7009\r\n  // revokes an access token on the STS. If no token is provided, then the token from\r\n  // the storage is revoked. You can pass any token to revoke. This makes it possible to\r\n  // manage your own tokens. The is a public API.\r\n  revokeAccessToken(\r\n    configuration: OpenIdConfiguration | null,\r\n    accessToken?: any\r\n  ): Observable<any> {\r\n    if (!configuration) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            'Please provide a configuration before setting up the module'\r\n          )\r\n      );\r\n    }\r\n\r\n    const accessTok =\r\n      accessToken ||\r\n      this.storagePersistenceService.getAccessToken(configuration);\r\n    const body = this.urlService.createRevocationEndpointBodyAccessToken(\r\n      accessTok,\r\n      configuration\r\n    );\r\n\r\n    return this.sendRevokeRequest(configuration, body);\r\n  }\r\n\r\n  // https://tools.ietf.org/html/rfc7009\r\n  // revokes an refresh token on the STS. This is only required in the code flow with refresh tokens.\r\n  // If no token is provided, then the token from the storage is revoked. You can pass any token to revoke.\r\n  // This makes it possible to manage your own tokens.\r\n  revokeRefreshToken(\r\n    configuration: OpenIdConfiguration | null,\r\n    refreshToken?: any\r\n  ): Observable<any> {\r\n    if (!configuration) {\r\n      return throwError(\r\n        () =>\r\n          new Error(\r\n            'Please provide a configuration before setting up the module'\r\n          )\r\n      );\r\n    }\r\n\r\n    const refreshTok =\r\n      refreshToken ||\r\n      this.storagePersistenceService.getRefreshToken(configuration);\r\n    const body = this.urlService.createRevocationEndpointBodyRefreshToken(\r\n      refreshTok,\r\n      configuration\r\n    );\r\n\r\n    return this.sendRevokeRequest(configuration, body);\r\n  }\r\n\r\n  private logoffInternal(\r\n    logoutAuthOptions: LogoutAuthOptions | undefined,\r\n    endSessionUrl: string,\r\n    config: OpenIdConfiguration,\r\n    allConfigs: OpenIdConfiguration[]\r\n  ): Observable<unknown> {\r\n    const { logoffMethod, customParams } = logoutAuthOptions || {};\r\n\r\n    if (!logoffMethod || logoffMethod === 'GET') {\r\n      this.redirectService.redirectTo(endSessionUrl);\r\n\r\n      this.resetAuthDataService.resetAuthorizationData(config, allConfigs);\r\n\r\n      return of(null);\r\n    }\r\n\r\n    const { state, logout_hint, ui_locales } = customParams || {};\r\n    const { clientId } = config;\r\n    const idToken = this.storagePersistenceService.getIdToken(config);\r\n    const postLogoutRedirectUrl =\r\n      this.urlService.getPostLogoutRedirectUrl(config);\r\n    const headers = this.getHeaders();\r\n    const { url } = this.urlService.getEndSessionEndpoint(config);\r\n    const body = {\r\n      id_token_hint: idToken,\r\n      client_id: clientId,\r\n      post_logout_redirect_uri: postLogoutRedirectUrl,\r\n      state,\r\n      logout_hint,\r\n      ui_locales,\r\n    };\r\n    const bodyWithoutNullOrUndefined = removeNullAndUndefinedValues(body);\r\n\r\n    this.resetAuthDataService.resetAuthorizationData(config, allConfigs);\r\n\r\n    return this.dataService.post(\r\n      url,\r\n      bodyWithoutNullOrUndefined,\r\n      config,\r\n      headers\r\n    );\r\n  }\r\n\r\n  private sendRevokeRequest(\r\n    configuration: OpenIdConfiguration,\r\n    body: string | null\r\n  ): Observable<any> {\r\n    const url = this.urlService.getRevocationEndpointUrl(configuration);\r\n    const headers = this.getHeaders();\r\n\r\n    return this.dataService.post(url, body, configuration, headers).pipe(\r\n      retry(2),\r\n      switchMap((response: any) => {\r\n        this.loggerService.logDebug(\r\n          configuration,\r\n          'revocation endpoint post response: ',\r\n          response\r\n        );\r\n\r\n        return of(response);\r\n      }),\r\n      catchError((error) => {\r\n        const errorMessage = `Revocation request failed`;\r\n\r\n        this.loggerService.logError(configuration, errorMessage, error);\r\n\r\n        return throwError(() => new Error(errorMessage));\r\n      })\r\n    );\r\n  }\r\n\r\n  private getHeaders(): HttpHeaders {\r\n    let headers: HttpHeaders = new HttpHeaders();\r\n\r\n    headers = headers.set('Content-Type', 'application/x-www-form-urlencoded');\r\n\r\n    return headers;\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { concatMap, map } from 'rxjs/operators';\r\nimport { AuthOptions, LogoutAuthOptions } from './auth-options';\r\nimport { AuthenticatedResult } from './auth-state/auth-result';\r\nimport { AuthStateService } from './auth-state/auth-state.service';\r\nimport { CheckAuthService } from './auth-state/check-auth.service';\r\nimport { CallbackService } from './callback/callback.service';\r\nimport { RefreshSessionService } from './callback/refresh-session.service';\r\nimport { AuthWellKnownEndpoints } from './config/auth-well-known/auth-well-known-endpoints';\r\nimport { AuthWellKnownService } from './config/auth-well-known/auth-well-known.service';\r\nimport { ConfigurationService } from './config/config.service';\r\nimport { OpenIdConfiguration } from './config/openid-configuration';\r\nimport { AuthResult } from './flows/callback-context';\r\nimport { FlowsDataService } from './flows/flows-data.service';\r\nimport { CheckSessionService } from './iframe/check-session.service';\r\nimport { LoginResponse } from './login/login-response';\r\nimport { LoginService } from './login/login.service';\r\nimport { PopupOptions } from './login/popup/popup-options';\r\nimport { LogoffRevocationService } from './logoff-revoke/logoff-revocation.service';\r\nimport { UserService } from './user-data/user.service';\r\nimport { UserDataResult } from './user-data/userdata-result';\r\nimport { TokenHelperService } from './utils/tokenHelper/token-helper.service';\r\nimport { UrlService } from './utils/url/url.service';\r\nimport { toSignal } from '@angular/core/rxjs-interop';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class OidcSecurityService {\r\n  private readonly checkSessionService = inject(CheckSessionService);\r\n  private readonly checkAuthService = inject(CheckAuthService);\r\n  private readonly userService = inject(UserService);\r\n  private readonly tokenHelperService = inject(TokenHelperService);\r\n  private readonly configurationService = inject(ConfigurationService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly flowsDataService = inject(FlowsDataService);\r\n  private readonly callbackService = inject(CallbackService);\r\n  private readonly logoffRevocationService = inject(LogoffRevocationService);\r\n  private readonly loginService = inject(LoginService);\r\n  private readonly refreshSessionService = inject(RefreshSessionService);\r\n  private readonly urlService = inject(UrlService);\r\n  private readonly authWellKnownService = inject(AuthWellKnownService);\r\n\r\n  /**\r\n   * Provides information about the user after they have logged in.\r\n   *\r\n   * @returns Returns an object containing either the user data directly (single config) or\r\n   * the user data per config in case you are running with multiple configs\r\n   */\r\n  get userData$(): Observable<UserDataResult> {\r\n    return this.userService.userData$;\r\n  }\r\n\r\n  /**\r\n   * Provides information about the user after they have logged in.\r\n   *\r\n   * @returns Returns an object containing either the user data directly (single config) or\r\n   * the user data per config in case you are running with multiple configs\r\n   */\r\n  userData = toSignal(this.userData$, { requireSync: true });\r\n\r\n  /**\r\n   * Emits each time an authorization event occurs.\r\n   *\r\n   * @returns Returns an object containing if you are authenticated or not.\r\n   * Single Config: true if config is authenticated, false if not.\r\n   * Multiple Configs: true is all configs are authenticated, false if only one of them is not\r\n   *\r\n   * The `allConfigsAuthenticated` property contains the auth information _per config_.\r\n   */\r\n  get isAuthenticated$(): Observable<AuthenticatedResult> {\r\n    return this.authStateService.authenticated$;\r\n  }\r\n\r\n  /**\r\n   * Emits each time an authorization event occurs.\r\n   *\r\n   * @returns Returns an object containing if you are authenticated or not.\r\n   * Single Config: true if config is authenticated, false if not.\r\n   * Multiple Configs: true is all configs are authenticated, false if only one of them is not\r\n   *\r\n   * The `allConfigsAuthenticated` property contains the auth information _per config_.\r\n   */\r\n  authenticated = toSignal(this.isAuthenticated$, { requireSync: true });\r\n\r\n  /**\r\n   * Emits each time the server sends a CheckSession event and the value changed. This property will always return\r\n   * true.\r\n   */\r\n  get checkSessionChanged$(): Observable<boolean> {\r\n    return this.checkSessionService.checkSessionChanged$;\r\n  }\r\n\r\n  /**\r\n   * Emits on a Security Token Service callback. The observable will never contain a value.\r\n   */\r\n  get stsCallback$(): Observable<void> {\r\n    return this.callbackService.stsCallback$;\r\n  }\r\n\r\n  preloadAuthWellKnownDocument(\r\n    configId?: string\r\n  ): Observable<AuthWellKnownEndpoints> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(\r\n        concatMap((config) =>\r\n          this.authWellKnownService.queryAndStoreAuthWellKnownEndPoints(config)\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Returns the currently active OpenID configurations.\r\n   *\r\n   * @returns an array of OpenIdConfigurations.\r\n   */\r\n  getConfigurations(): OpenIdConfiguration[] {\r\n    return this.configurationService.getAllConfigurations();\r\n  }\r\n\r\n  /**\r\n   * Returns a single active OpenIdConfiguration.\r\n   *\r\n   * @param configId The configId to identify the config. If not passed, the first one is being returned\r\n   */\r\n  getConfiguration(configId?: string): Observable<OpenIdConfiguration | null> {\r\n    return this.configurationService.getOpenIDConfiguration(configId);\r\n  }\r\n\r\n  /**\r\n   * Returns the userData for a configuration\r\n   *\r\n   * @param configId The configId to identify the config. If not passed, the first one is being used\r\n   */\r\n  getUserData(configId?: string): Observable<any> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(map((config) => this.userService.getUserDataFromStore(config)));\r\n  }\r\n\r\n  /**\r\n   * Starts the complete setup flow for one configuration. Calling will start the entire authentication flow, and the returned observable\r\n   * will denote whether the user was successfully authenticated including the user data, the access token, the configId and\r\n   * an error message in case an error happened\r\n   *\r\n   * @param url The URL to perform the authorization on the behalf of.\r\n   * @param configId The configId to perform the authorization on the behalf of. If not passed, the first configs will be taken\r\n   *\r\n   * @returns An object `LoginResponse` containing all information about the login\r\n   */\r\n  checkAuth(url?: string, configId?: string): Observable<LoginResponse> {\r\n    return this.configurationService\r\n      .getOpenIDConfigurations(configId)\r\n      .pipe(\r\n        concatMap(({ allConfigs, currentConfig }) =>\r\n          this.checkAuthService.checkAuth(currentConfig, allConfigs, url)\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Starts the complete setup flow for multiple configurations.\r\n   * Calling will start the entire authentication flow, and the returned observable\r\n   * will denote whether the user was successfully authenticated including the user data, the access token, the configId and\r\n   * an error message in case an error happened in an array for each config which was provided\r\n   *\r\n   * @param url The URL to perform the authorization on the behalf of.\r\n   *\r\n   * @returns An array of `LoginResponse` objects containing all information about the logins\r\n   */\r\n  checkAuthMultiple(url?: string): Observable<LoginResponse[]> {\r\n    return this.configurationService\r\n      .getOpenIDConfigurations()\r\n      .pipe(\r\n        concatMap(({ allConfigs }) =>\r\n          this.checkAuthService.checkAuthMultiple(allConfigs, url)\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Provides information about the current authenticated state\r\n   *\r\n   * @param configId The configId to check the information for. If not passed, the first configs will be taken\r\n   *\r\n   * @returns A boolean whether the config is authenticated or not.\r\n   */\r\n  isAuthenticated(configId?: string): Observable<boolean> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(map((config) => this.authStateService.isAuthenticated(config)));\r\n  }\r\n\r\n  /**\r\n   * Checks the server for an authenticated session using the iframe silent renew if not locally authenticated.\r\n   */\r\n  checkAuthIncludingServer(configId?: string): Observable<LoginResponse> {\r\n    return this.configurationService\r\n      .getOpenIDConfigurations(configId)\r\n      .pipe(\r\n        concatMap(({ allConfigs, currentConfig }) =>\r\n          this.checkAuthService.checkAuthIncludingServer(\r\n            currentConfig,\r\n            allConfigs\r\n          )\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Returns the access token for the login scenario.\r\n   *\r\n   * @param configId The configId to check the information for. If not passed, the first configs will be taken\r\n   *\r\n   * @returns A string with the access token.\r\n   */\r\n  getAccessToken(configId?: string): Observable<string> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(map((config) => this.authStateService.getAccessToken(config)));\r\n  }\r\n\r\n  /**\r\n   * Returns the ID token for the sign-in.\r\n   *\r\n   * @param configId The configId to check the information for. If not passed, the first configs will be taken\r\n   *\r\n   * @returns A string with the id token.\r\n   */\r\n  getIdToken(configId?: string): Observable<string> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(map((config) => this.authStateService.getIdToken(config)));\r\n  }\r\n\r\n  /**\r\n   * Returns the refresh token, if present, for the sign-in.\r\n   *\r\n   * @param configId The configId to check the information for. If not passed, the first configs will be taken\r\n   *\r\n   * @returns A string with the refresh token.\r\n   */\r\n  getRefreshToken(configId?: string): Observable<string> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(map((config) => this.authStateService.getRefreshToken(config)));\r\n  }\r\n\r\n  /**\r\n   * Returns the authentication result, if present, for the sign-in.\r\n   *\r\n   * @param configId The configId to check the information for. If not passed, the first configs will be taken\r\n   *\r\n   * @returns A object with the authentication result\r\n   */\r\n  getAuthenticationResult(configId?: string): Observable<AuthResult | null> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(\r\n        map((config) => this.authStateService.getAuthenticationResult(config))\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Returns the payload from the ID token.\r\n   *\r\n   * @param encode Set to true if the payload is base64 encoded\r\n   * @param configId The configId to check the information for. If not passed, the first configs will be taken\r\n   *\r\n   * @returns The payload from the id token.\r\n   */\r\n  getPayloadFromIdToken(encode = false, configId?: string): Observable<any> {\r\n    return this.configurationService.getOpenIDConfiguration(configId).pipe(\r\n      map((config) => {\r\n        const token = this.authStateService.getIdToken(config);\r\n\r\n        return this.tokenHelperService.getPayloadFromToken(\r\n          token,\r\n          encode,\r\n          config\r\n        );\r\n      })\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Returns the payload from the access token.\r\n   *\r\n   * @param encode Set to true if the payload is base64 encoded\r\n   * @param configId The configId to check the information for. If not passed, the first configs will be taken\r\n   *\r\n   * @returns The payload from the access token.\r\n   */\r\n  getPayloadFromAccessToken(\r\n    encode = false,\r\n    configId?: string\r\n  ): Observable<any> {\r\n    return this.configurationService.getOpenIDConfiguration(configId).pipe(\r\n      map((config) => {\r\n        const token = this.authStateService.getAccessToken(config);\r\n\r\n        return this.tokenHelperService.getPayloadFromToken(\r\n          token,\r\n          encode,\r\n          config\r\n        );\r\n      })\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Sets a custom state for the authorize request.\r\n   *\r\n   * @param state The state to set.\r\n   * @param configId The configId to check the information for. If not passed, the first configs will be taken\r\n   */\r\n  setState(state: string, configId?: string): Observable<boolean> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(\r\n        map((config) =>\r\n          this.flowsDataService.setAuthStateControl(state, config)\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Gets the state value used for the authorize request.\r\n   *\r\n   * @param configId The configId to check the information for. If not passed, the first configs will be taken\r\n   *\r\n   * @returns The state value used for the authorize request.\r\n   */\r\n  getState(configId?: string): Observable<string> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(map((config) => this.flowsDataService.getAuthStateControl(config)));\r\n  }\r\n\r\n  /**\r\n   * Redirects the user to the Security Token Service to begin the authentication process.\r\n   *\r\n   * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken\r\n   * @param authOptions The custom options for the the authentication request.\r\n   */\r\n  authorize(configId?: string, authOptions?: AuthOptions): void {\r\n    this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .subscribe((config) => this.loginService.login(config, authOptions));\r\n  }\r\n\r\n  /**\r\n   * Opens the Security Token Service in a new window to begin the authentication process.\r\n   *\r\n   * @param authOptions The custom options for the authentication request.\r\n   * @param popupOptions The configuration for the popup window.\r\n   * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken\r\n   *\r\n   * @returns An `Observable<LoginResponse>` containing all information about the login\r\n   */\r\n  authorizeWithPopUp(\r\n    authOptions?: AuthOptions,\r\n    popupOptions?: PopupOptions,\r\n    configId?: string\r\n  ): Observable<LoginResponse> {\r\n    return this.configurationService\r\n      .getOpenIDConfigurations(configId)\r\n      .pipe(\r\n        concatMap(({ allConfigs, currentConfig }) =>\r\n          this.loginService.loginWithPopUp(\r\n            currentConfig,\r\n            allConfigs,\r\n            authOptions,\r\n            popupOptions\r\n          )\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Manually refreshes the session.\r\n   *\r\n   * @param customParams Custom parameters to pass to the refresh request.\r\n   * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken\r\n   *\r\n   * @returns An `Observable<LoginResponse>` containing all information about the login\r\n   */\r\n  forceRefreshSession(\r\n    customParams?: { [key: string]: string | number | boolean },\r\n    configId?: string\r\n  ): Observable<LoginResponse> {\r\n    return this.configurationService\r\n      .getOpenIDConfigurations(configId)\r\n      .pipe(\r\n        concatMap(({ allConfigs, currentConfig }) =>\r\n          this.refreshSessionService.userForceRefreshSession(\r\n            currentConfig,\r\n            allConfigs,\r\n            customParams\r\n          )\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Revokes the refresh token (if present) and the access token on the server and then performs the logoff operation.\r\n   * The refresh token and and the access token are revoked on the server. If the refresh token does not exist\r\n   * only the access token is revoked. Then the logout run.\r\n   *\r\n   * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken\r\n   * @param logoutAuthOptions The custom options for the request.\r\n   *\r\n   * @returns An observable when the action is finished\r\n   */\r\n  logoffAndRevokeTokens(\r\n    configId?: string,\r\n    logoutAuthOptions?: LogoutAuthOptions\r\n  ): Observable<any> {\r\n    return this.configurationService\r\n      .getOpenIDConfigurations(configId)\r\n      .pipe(\r\n        concatMap(({ allConfigs, currentConfig }) =>\r\n          this.logoffRevocationService.logoffAndRevokeTokens(\r\n            currentConfig,\r\n            allConfigs,\r\n            logoutAuthOptions\r\n          )\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Logs out on the server and the local client. If the server state has changed, confirmed via check session,\r\n   * then only a local logout is performed.\r\n   *\r\n   * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken\r\n   * @param logoutAuthOptions with custom parameters and/or an custom url handler\r\n   */\r\n  logoff(\r\n    configId?: string,\r\n    logoutAuthOptions?: LogoutAuthOptions\r\n  ): Observable<unknown> {\r\n    return this.configurationService\r\n      .getOpenIDConfigurations(configId)\r\n      .pipe(\r\n        concatMap(({ allConfigs, currentConfig }) =>\r\n          this.logoffRevocationService.logoff(\r\n            currentConfig,\r\n            allConfigs,\r\n            logoutAuthOptions\r\n          )\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Logs the user out of the application without logging them out of the server.\r\n   * Use this method if you have _one_ config enabled.\r\n   *\r\n   * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken\r\n   */\r\n  logoffLocal(configId?: string): void {\r\n    this.configurationService\r\n      .getOpenIDConfigurations(configId)\r\n      .subscribe(({ allConfigs, currentConfig }) =>\r\n        this.logoffRevocationService.logoffLocal(currentConfig, allConfigs)\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Logs the user out of the application for all configs without logging them out of the server.\r\n   * Use this method if you have _multiple_ configs enabled.\r\n   */\r\n  logoffLocalMultiple(): void {\r\n    this.configurationService\r\n      .getOpenIDConfigurations()\r\n      .subscribe(({ allConfigs }) =>\r\n        this.logoffRevocationService.logoffLocalMultiple(allConfigs)\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Revokes an access token on the Security Token Service. This is only required in the code flow with refresh tokens. If no token is\r\n   * provided, then the token from the storage is revoked. You can pass any token to revoke.\r\n   * https://tools.ietf.org/html/rfc7009\r\n   *\r\n   * @param accessToken The access token to revoke.\r\n   * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken\r\n   *\r\n   * @returns An observable when the action is finished\r\n   */\r\n  revokeAccessToken(accessToken?: any, configId?: string): Observable<any> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(\r\n        concatMap((config) =>\r\n          this.logoffRevocationService.revokeAccessToken(config, accessToken)\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Revokes a refresh token on the Security Token Service. This is only required in the code flow with refresh tokens. If no token is\r\n   * provided, then the token from the storage is revoked. You can pass any token to revoke.\r\n   * https://tools.ietf.org/html/rfc7009\r\n   *\r\n   * @param refreshToken The access token to revoke.\r\n   * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken\r\n   *\r\n   * @returns An observable when the action is finished\r\n   */\r\n  revokeRefreshToken(refreshToken?: any, configId?: string): Observable<any> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(\r\n        concatMap((config) =>\r\n          this.logoffRevocationService.revokeRefreshToken(config, refreshToken)\r\n        )\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Creates the end session URL which can be used to implement an alternate server logout.\r\n   *\r\n   * @param customParams\r\n   * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken\r\n   *\r\n   * @returns A string with the end session url or null\r\n   */\r\n  getEndSessionUrl(\r\n    customParams?: { [p: string]: string | number | boolean },\r\n    configId?: string\r\n  ): Observable<string | null> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(\r\n        map((config) => this.urlService.getEndSessionUrl(config, customParams))\r\n      );\r\n  }\r\n\r\n  /**\r\n   * Creates the authorize URL based on your flow\r\n   *\r\n   * @param customParams\r\n   * @param configId The configId to perform the action in behalf of. If not passed, the first configs will be taken\r\n   *\r\n   * @returns A string with the authorize URL or null\r\n   */\r\n  getAuthorizeUrl(\r\n    customParams?: { [p: string]: string | number | boolean },\r\n    configId?: string\r\n  ): Observable<string | null> {\r\n    return this.configurationService\r\n      .getOpenIDConfiguration(configId)\r\n      .pipe(\r\n        concatMap((config) =>\r\n          this.urlService.getAuthorizeUrl(\r\n            config,\r\n            customParams ? { customParams } : undefined\r\n          )\r\n        )\r\n      );\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AbstractSecurityStorage } from './abstract-security-storage';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class DefaultSessionStorageService implements AbstractSecurityStorage {\r\n  public read(key: string): string | null {\r\n    return sessionStorage.getItem(key);\r\n  }\r\n\r\n  public write(key: string, value: string): void {\r\n    sessionStorage.setItem(key, value);\r\n  }\r\n\r\n  public remove(key: string): void {\r\n    sessionStorage.removeItem(key);\r\n  }\r\n\r\n  public clear(): void {\r\n    sessionStorage.clear();\r\n  }\r\n}\r\n","import {\r\n  APP_INITIALIZER,\r\n  EnvironmentProviders,\r\n  makeEnvironmentProviders,\r\n  Provider,\r\n} from '@angular/core';\r\nimport {\r\n  createStaticLoader,\r\n  PASSED_CONFIG,\r\n  PassedInitialConfig,\r\n} from './auth-config';\r\nimport { StsConfigLoader } from './config/loader/config-loader';\r\nimport { AbstractLoggerService } from './logging/abstract-logger.service';\r\nimport { ConsoleLoggerService } from './logging/console-logger.service';\r\nimport { OidcSecurityService } from './oidc.security.service';\r\nimport { AbstractSecurityStorage } from './storage/abstract-security-storage';\r\nimport { DefaultSessionStorageService } from './storage/default-sessionstorage.service';\r\n\r\n/**\r\n * A feature to be used with `provideAuth`.\r\n */\r\nexport interface AuthFeature {\r\n  ɵproviders: Provider[];\r\n}\r\n\r\nexport function provideAuth(\r\n  passedConfig: PassedInitialConfig,\r\n  ...features: AuthFeature[]\r\n): EnvironmentProviders {\r\n  const providers = _provideAuth(passedConfig);\r\n\r\n  for (const feature of features) {\r\n    providers.push(...feature.ɵproviders);\r\n  }\r\n\r\n  return makeEnvironmentProviders(providers);\r\n}\r\n\r\nexport function _provideAuth(passedConfig: PassedInitialConfig): Provider[] {\r\n  return [\r\n    // Make the PASSED_CONFIG available through injection\r\n    { provide: PASSED_CONFIG, useValue: passedConfig },\r\n\r\n    // Create the loader: Either the one getting passed or a static one\r\n    passedConfig?.loader || {\r\n      provide: StsConfigLoader,\r\n      useFactory: createStaticLoader,\r\n      deps: [PASSED_CONFIG],\r\n    },\r\n    {\r\n      provide: AbstractSecurityStorage,\r\n      useClass: DefaultSessionStorageService,\r\n    },\r\n    { provide: AbstractLoggerService, useClass: ConsoleLoggerService },\r\n  ];\r\n}\r\n\r\n/**\r\n * Configures an app initializer, which is called before the app starts, and\r\n * resolves any OAuth callback variables.\r\n * When used, it replaces the need to manually call\r\n * `OidcSecurityService.checkAuth(...)` or\r\n * `OidcSecurityService.checkAuthMultiple(...)`.\r\n *\r\n * @see https://angular.dev/api/core/APP_INITIALIZER\r\n */\r\nexport function withAppInitializerAuthCheck(): AuthFeature {\r\n  return {\r\n    ɵproviders: [\r\n      {\r\n        provide: APP_INITIALIZER,\r\n        useFactory: (oidcSecurityService: OidcSecurityService) => () =>\r\n          oidcSecurityService.checkAuthMultiple(),\r\n        multi: true,\r\n        deps: [OidcSecurityService],\r\n      },\r\n    ],\r\n  };\r\n}\r\n","import { CommonModule } from '@angular/common';\r\nimport {\r\n  provideHttpClient,\r\n  withInterceptorsFromDi,\r\n} from '@angular/common/http';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { PassedInitialConfig } from './auth-config';\r\nimport { _provideAuth } from './provide-auth';\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  exports: [],\r\n  imports: [CommonModule],\r\n  providers: [provideHttpClient(withInterceptorsFromDi())],\r\n})\r\nexport class AuthModule {\r\n  static forRoot(\r\n    passedConfig: PassedInitialConfig\r\n  ): ModuleWithProviders<AuthModule> {\r\n    return {\r\n      ngModule: AuthModule,\r\n      providers: [..._provideAuth(passedConfig)],\r\n    };\r\n  }\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport {\r\n  ActivatedRouteSnapshot,\r\n  Router,\r\n  RouterStateSnapshot,\r\n  UrlTree,\r\n} from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { map, switchMap, take } from 'rxjs/operators';\r\nimport { CheckAuthService } from '../auth-state/check-auth.service';\r\nimport { ConfigurationService } from '../config/config.service';\r\nimport { LoginService } from '../login/login.service';\r\nimport { AutoLoginService } from './auto-login.service';\r\n\r\n/**\r\n * @deprecated Please do not use the `AutoLoginAllRoutesGuard` anymore as it is not recommended anymore, deprecated and will be removed in future versions of this library. More information [Why is AutoLoginAllRoutesGuard not recommended?](https://github.com/damienbod/angular-auth-oidc-client/issues/1549)\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class AutoLoginAllRoutesGuard {\r\n  private readonly autoLoginService = inject(AutoLoginService);\r\n  private readonly checkAuthService = inject(CheckAuthService);\r\n  private readonly loginService = inject(LoginService);\r\n  private readonly configurationService = inject(ConfigurationService);\r\n  private readonly router = inject(Router);\r\n\r\n  canLoad(): Observable<boolean> {\r\n    const url =\r\n      this.router\r\n        .currentNavigation()\r\n        ?.extractedUrl.toString()\r\n        .substring(1) ?? '';\r\n\r\n    return checkAuth(\r\n      url,\r\n      this.configurationService,\r\n      this.checkAuthService,\r\n      this.autoLoginService,\r\n      this.loginService\r\n    );\r\n  }\r\n\r\n  canActivate(\r\n    route: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot\r\n  ): Observable<boolean | UrlTree> {\r\n    return checkAuth(\r\n      state.url,\r\n      this.configurationService,\r\n      this.checkAuthService,\r\n      this.autoLoginService,\r\n      this.loginService\r\n    );\r\n  }\r\n\r\n  canActivateChild(\r\n    route: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot\r\n  ): Observable<boolean | UrlTree> {\r\n    return checkAuth(\r\n      state.url,\r\n      this.configurationService,\r\n      this.checkAuthService,\r\n      this.autoLoginService,\r\n      this.loginService\r\n    );\r\n  }\r\n}\r\n\r\nfunction checkAuth(\r\n  url: string,\r\n  configurationService: ConfigurationService,\r\n  checkAuthService: CheckAuthService,\r\n  autoLoginService: AutoLoginService,\r\n  loginService: LoginService\r\n): Observable<boolean> {\r\n  return configurationService.getOpenIDConfiguration().pipe(\r\n    switchMap((config) => {\r\n      const allConfigs = configurationService.getAllConfigurations();\r\n\r\n      return checkAuthService.checkAuth(config, allConfigs).pipe(\r\n        take(1),\r\n        map(({ isAuthenticated }) => {\r\n          if (isAuthenticated) {\r\n            autoLoginService.checkSavedRedirectRouteAndNavigate(config);\r\n          }\r\n\r\n          if (!isAuthenticated) {\r\n            autoLoginService.saveRedirectRoute(config, url);\r\n            loginService.login(config);\r\n          }\r\n\r\n          return isAuthenticated;\r\n        })\r\n      );\r\n    })\r\n  );\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport {\r\n  ActivatedRouteSnapshot,\r\n  Router,\r\n  RouterStateSnapshot,\r\n} from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { AuthOptions } from '../auth-options';\r\nimport { AuthStateService } from '../auth-state/auth-state.service';\r\nimport { ConfigurationService } from '../config/config.service';\r\nimport { LoginService } from '../login/login.service';\r\nimport { AutoLoginService } from './auto-login.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class AutoLoginPartialRoutesGuard {\r\n  private readonly autoLoginService = inject(AutoLoginService);\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly loginService = inject(LoginService);\r\n  private readonly configurationService = inject(ConfigurationService);\r\n  private readonly router = inject(Router);\r\n\r\n  canLoad(): Observable<boolean> {\r\n    const url =\r\n      this.router\r\n        .currentNavigation()\r\n        ?.extractedUrl.toString()\r\n        .substring(1) ?? '';\r\n\r\n    return checkAuth(\r\n      url,\r\n      this.configurationService,\r\n      this.authStateService,\r\n      this.autoLoginService,\r\n      this.loginService\r\n    );\r\n  }\r\n\r\n  canActivate(\r\n    route: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot\r\n  ): Observable<boolean> {\r\n    const authOptions: AuthOptions | undefined = route?.data\r\n      ? { customParams: route.data }\r\n      : undefined;\r\n\r\n    return checkAuth(\r\n      state.url,\r\n      this.configurationService,\r\n      this.authStateService,\r\n      this.autoLoginService,\r\n      this.loginService,\r\n      authOptions\r\n    );\r\n  }\r\n\r\n  canActivateChild(\r\n    route: ActivatedRouteSnapshot,\r\n    state: RouterStateSnapshot\r\n  ): Observable<boolean> {\r\n    const authOptions: AuthOptions | undefined = route?.data\r\n      ? { customParams: route.data }\r\n      : undefined;\r\n\r\n    return checkAuth(\r\n      state.url,\r\n      this.configurationService,\r\n      this.authStateService,\r\n      this.autoLoginService,\r\n      this.loginService,\r\n      authOptions\r\n    );\r\n  }\r\n}\r\n\r\nexport function autoLoginPartialRoutesGuard(\r\n  route?: ActivatedRouteSnapshot,\r\n  state?: RouterStateSnapshot,\r\n  configId?: string\r\n): Observable<boolean> {\r\n  const configurationService = inject(ConfigurationService);\r\n  const authStateService = inject(AuthStateService);\r\n  const loginService = inject(LoginService);\r\n  const autoLoginService = inject(AutoLoginService);\r\n  const router = inject(Router);\r\n  const authOptions: AuthOptions | undefined = route?.data\r\n    ? { customParams: route.data }\r\n    : undefined;\r\n  const url =\r\n    router.currentNavigation()?.extractedUrl.toString().substring(1) ?? '';\r\n\r\n  return checkAuth(\r\n    url,\r\n    configurationService,\r\n    authStateService,\r\n    autoLoginService,\r\n    loginService,\r\n    authOptions,\r\n    configId\r\n  );\r\n}\r\n\r\nexport function autoLoginPartialRoutesGuardWithConfig(\r\n  configId: string\r\n): (\r\n  route?: ActivatedRouteSnapshot,\r\n  state?: RouterStateSnapshot\r\n) => Observable<boolean> {\r\n  return (route?: ActivatedRouteSnapshot, state?: RouterStateSnapshot) =>\r\n    autoLoginPartialRoutesGuard(route, state, configId);\r\n}\r\n\r\nfunction checkAuth(\r\n  url: string,\r\n  configurationService: ConfigurationService,\r\n  authStateService: AuthStateService,\r\n  autoLoginService: AutoLoginService,\r\n  loginService: LoginService,\r\n  authOptions?: AuthOptions,\r\n  configId?: string\r\n): Observable<boolean> {\r\n  return configurationService.getOpenIDConfiguration(configId).pipe(\r\n    map((configuration) => {\r\n      const isAuthenticated =\r\n        authStateService.areAuthStorageTokensValid(configuration);\r\n\r\n      if (isAuthenticated) {\r\n        autoLoginService.checkSavedRedirectRouteAndNavigate(configuration);\r\n      }\r\n\r\n      if (!isAuthenticated) {\r\n        autoLoginService.saveRedirectRoute(configuration, url);\r\n        if (authOptions) {\r\n          loginService.login(configuration, authOptions);\r\n        } else {\r\n          loginService.login(configuration);\r\n        }\r\n      }\r\n\r\n      return isAuthenticated;\r\n    })\r\n  );\r\n}\r\n","export function flattenArray(array: any[][]): any[] {\n  return array.reduce(\n    (flattened, elem) =>\n      flattened.concat(Array.isArray(elem) ? flattenArray(elem) : elem),\n    []\n  );\n}\n","/**\r\n * Creates a RegExp from the given string, converting asterisks to .* expressions,\r\n * and escaping all other characters.\r\n */\r\nexport function wildcardToRegExp(value: string): RegExp {\r\n  const regexPattern = regExpEscape(value);\r\n\r\n  return new RegExp(`^${regexPattern}$`);\r\n}\r\n\r\n/**\r\n * RegExp-escapes all characters in the given string.\r\n */\r\nfunction regExpEscape(value: string): string {\r\n  return value.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&').replace(/\\*/g, '.*');\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { OpenIdConfiguration } from '../config/openid-configuration';\r\nimport { wildcardToRegExp } from '../utils/regex/regex.helper';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ClosestMatchingRouteService {\r\n  getConfigIdForClosestMatchingRoute(\r\n    route: string,\r\n    configurations: OpenIdConfiguration[]\r\n  ): ClosestMatchingRouteResult {\r\n    for (const config of configurations) {\r\n      const { secureRoutes } = config;\r\n      const matchingRoute = (secureRoutes ?? []).find((secureRoute) =>\r\n        this.routeMatches(secureRoute, route)\r\n      );\r\n\r\n      if (matchingRoute) {\r\n        return {\r\n          matchingRoute,\r\n          matchingConfig: config,\r\n        };\r\n      }\r\n    }\r\n\r\n    return {\r\n      matchingRoute: null,\r\n      matchingConfig: null,\r\n    };\r\n  }\r\n\r\n  private routeMatches(configuredRoute: string, route: string): boolean {\r\n    return (\r\n      route.startsWith(configuredRoute) ||\r\n      this.matchesRoute(configuredRoute, route)\r\n    );\r\n  }\r\n\r\n  private matchesRoute(configuredRoute: string, route: string): boolean {\r\n    const regex = wildcardToRegExp(configuredRoute);\r\n\r\n    return regex.test(route);\r\n  }\r\n}\r\n\r\nexport interface ClosestMatchingRouteResult {\r\n  matchingRoute: string | null;\r\n  matchingConfig: OpenIdConfiguration | null;\r\n}\r\n","import {\r\n  HttpEvent,\r\n  HttpHandler,\r\n  HttpHandlerFn,\r\n  HttpInterceptor,\r\n  HttpInterceptorFn,\r\n  HttpRequest,\r\n} from '@angular/common/http';\r\nimport { inject, Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { AuthStateService } from '../auth-state/auth-state.service';\r\nimport { ConfigurationService } from '../config/config.service';\r\nimport { LoggerService } from '../logging/logger.service';\r\nimport { flattenArray } from '../utils/collections/collections.helper';\r\nimport { ClosestMatchingRouteService } from './closest-matching-route.service';\r\n\r\n@Injectable()\r\nexport class AuthInterceptor implements HttpInterceptor {\r\n  private readonly authStateService = inject(AuthStateService);\r\n  private readonly configurationService = inject(ConfigurationService);\r\n  private readonly loggerService = inject(LoggerService);\r\n  private readonly closestMatchingRouteService = inject(\r\n    ClosestMatchingRouteService\r\n  );\r\n\r\n  intercept(\r\n    req: HttpRequest<any>,\r\n    next: HttpHandler\r\n  ): Observable<HttpEvent<any>> {\r\n    return interceptRequest(req, next.handle, {\r\n      configurationService: this.configurationService,\r\n      authStateService: this.authStateService,\r\n      closestMatchingRouteService: this.closestMatchingRouteService,\r\n      loggerService: this.loggerService,\r\n    });\r\n  }\r\n}\r\n\r\nexport function authInterceptor(): HttpInterceptorFn {\r\n  return (req, next) => {\r\n    return interceptRequest(req, next, {\r\n      configurationService: inject(ConfigurationService),\r\n      authStateService: inject(AuthStateService),\r\n      closestMatchingRouteService: inject(ClosestMatchingRouteService),\r\n      loggerService: inject(LoggerService),\r\n    });\r\n  };\r\n}\r\n\r\nfunction interceptRequest(\r\n  req: HttpRequest<any>,\r\n  next: HttpHandlerFn,\r\n  deps: {\r\n    authStateService: AuthStateService;\r\n    configurationService: ConfigurationService;\r\n    loggerService: LoggerService;\r\n    closestMatchingRouteService: ClosestMatchingRouteService;\r\n  }\r\n): Observable<HttpEvent<unknown>> {\r\n  if (!deps.configurationService.hasAtLeastOneConfig()) {\r\n    return next(req);\r\n  }\r\n\r\n  const allConfigurations = deps.configurationService.getAllConfigurations();\r\n  const allRoutesConfigured = allConfigurations.map(\r\n    (x) => x.secureRoutes || []\r\n  );\r\n  const allRoutesConfiguredFlat = flattenArray(allRoutesConfigured);\r\n\r\n  if (allRoutesConfiguredFlat.length === 0) {\r\n    deps.loggerService.logDebug(\r\n      allConfigurations[0],\r\n      `No routes to check configured`\r\n    );\r\n\r\n    return next(req);\r\n  }\r\n\r\n  const { matchingConfig, matchingRoute } =\r\n    deps.closestMatchingRouteService.getConfigIdForClosestMatchingRoute(\r\n      req.url,\r\n      allConfigurations\r\n    );\r\n\r\n  if (!matchingConfig) {\r\n    deps.loggerService.logDebug(\r\n      allConfigurations[0],\r\n      `Did not find any configured route for route ${req.url}`\r\n    );\r\n\r\n    return next(req);\r\n  }\r\n\r\n  deps.loggerService.logDebug(\r\n    matchingConfig,\r\n    `'${req.url}' matches configured route '${matchingRoute}'`\r\n  );\r\n  const token = deps.authStateService.getAccessToken(matchingConfig);\r\n\r\n  if (!token) {\r\n    deps.loggerService.logDebug(\r\n      matchingConfig,\r\n      `Wanted to add token to ${req.url} but found no token: '${token}'`\r\n    );\r\n\r\n    return next(req);\r\n  }\r\n\r\n  deps.loggerService.logDebug(\r\n    matchingConfig,\r\n    `'${req.url}' matches configured route '${matchingRoute}', adding token`\r\n  );\r\n  req = req.clone({\r\n    headers: req.headers.set('Authorization', 'Bearer ' + token),\r\n  });\r\n\r\n  return next(req);\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { AbstractSecurityStorage } from './abstract-security-storage';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class DefaultLocalStorageService implements AbstractSecurityStorage {\r\n  public read(key: string): string | null {\r\n    return localStorage.getItem(key);\r\n  }\r\n\r\n  public write(key: string, value: string): void {\r\n    localStorage.setItem(key, value);\r\n  }\r\n\r\n  public remove(key: string): void {\r\n    localStorage.removeItem(key);\r\n  }\r\n\r\n  public clear(): void {\r\n    localStorage.clear();\r\n  }\r\n}\r\n","// Public classes.\r\n\r\nexport { PassedInitialConfig } from './auth-config';\r\nexport * from './auth-options';\r\nexport * from './auth-state/auth-result';\r\nexport * from './auth-state/auth-state';\r\nexport * from './auth.module';\r\nexport * from './auto-login/auto-login-all-routes.guard';\r\nexport * from './auto-login/auto-login-partial-routes.guard';\r\nexport * from './config/auth-well-known/auth-well-known-endpoints';\r\nexport * from './config/config.service';\r\nexport * from './config/loader/config-loader';\r\nexport * from './config/openid-configuration';\r\nexport { AuthResult } from './flows/callback-context';\r\nexport * from './interceptor/auth.interceptor';\r\nexport * from './logging/abstract-logger.service';\r\nexport * from './logging/log-level';\r\nexport * from './login/login-response';\r\nexport * from './login/popup/popup-options';\r\nexport * from './login/popup/popup.service';\r\nexport * from './oidc.security.service';\r\nexport * from './provide-auth';\r\nexport * from './public-events/event-types';\r\nexport * from './public-events/notification';\r\nexport * from './public-events/public-events.service';\r\nexport * from './storage/abstract-security-storage';\r\nexport * from './storage/default-localstorage.service';\r\nexport * from './storage/default-sessionstorage.service';\r\nexport * from './user-data/userdata-result';\r\nexport * from './validation/jwtkeys';\r\nexport * from './validation/state-validation-result';\r\nexport * from './validation/validation-result';\r\n","/*\n * Public API Surface of angular-auth-oidc-client\n */\n\nexport * from './lib';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["checkAuth"],"mappings":";;;;;;;;;;MAKa,kBAAkB,CAAA;AAE9B;MAEqB,eAAe,CAAA;AAEpC;MAEY,qBAAqB,CAAA;AAChC,IAAA,WAAA,CACmB,aAA0D,EAAA;QAA1D,IAAA,CAAA,aAAa,GAAb,aAAa;IAC7B;IAEH,WAAW,GAAA;QACT,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE;AACrC,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC;QAC/B;QAEA,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACjC;AACD;MAEY,mBAAmB,CAAA;AAC9B,IAAA,WAAA,CACmB,QAGoB,EAAA;QAHpB,IAAA,CAAA,QAAQ,GAAR,QAAQ;IAIxB;IAEH,WAAW,GAAA;QACT,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;AAChC,YAAA,OAAO,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC;QAChC;AAEA,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAA+B;QAEhE,OAAO,mBAAmB,CAAC,IAAI,CAC7B,GAAG,CAAC,CAAC,KAAc,KAAI;AACrB,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACxB,gBAAA,OAAO,KAA8B;YACvC;YAEA,OAAO,CAAC,KAAK,CAA0B;QACzC,CAAC,CAAC,CACH;IACH;AACD;;ACxCK,SAAU,kBAAkB,CAChC,YAAiC,EAAA;AAEjC,IAAA,IAAI,CAAC,YAAY,EAAE,MAAM,EAAE;AACzB,QAAA,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC;IACxC;AAEA,IAAA,OAAO,IAAI,qBAAqB,CAAC,YAAY,CAAC,MAAM,CAAC;AACvD;AAEO,MAAM,aAAa,GAAG,IAAI,cAAc,CAC7C,eAAe,CAChB;;ACtBD;;AAEG;MAEmB,qBAAqB,CAAA;8GAArB,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADjB,MAAM,EAAA,CAAA,CAAA;;2FACV,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAD1C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCDrB,oBAAoB,CAAA;AAC/B,IAAA,QAAQ,CAAC,OAAwB,EAAE,GAAG,IAAW,EAAA;QAC/C,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IACjC;AAEA,IAAA,UAAU,CAAC,OAAwB,EAAE,GAAG,IAAW,EAAA;QACjD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IAChC;AAEA,IAAA,QAAQ,CAAC,OAAwB,EAAE,GAAG,IAAW,EAAA;QAC/C,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;IACjC;8GAXW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ICHtB;AAAZ,CAAA,UAAY,QAAQ,EAAA;AAClB,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACL,IAAA,QAAA,CAAA,QAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAI;AACJ,IAAA,QAAA,CAAA,QAAA,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAK;AACP,CAAC,EALW,QAAQ,KAAR,QAAQ,GAAA,EAAA,CAAA,CAAA;;MCMP,aAAa,CAAA;AAD1B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAwIvE,IAAA;AAtIC,IAAA,QAAQ,CACN,aAAkC,EAClC,OAAwB,EACxB,GAAG,IAAW,EAAA;AAEd,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE;YAC1C;QACF;AAEA,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO;AACxC,cAAE,IAAI,CAAC,SAAS,CAAC,OAAO;cACtB,OAAO;QAEX,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CACjC,CAAA,QAAA,EAAW,QAAQ,CAAA,GAAA,EAAM,YAAY,CAAA,CAAE,EACvC,GAAG,IAAI,CACR;QACH;aAAO;YACL,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CACjC,CAAA,QAAA,EAAW,QAAQ,CAAA,GAAA,EAAM,YAAY,CAAA,CAAE,CACxC;QACH;IACF;AAEA,IAAA,UAAU,CACR,aAAkC,EAClC,OAAwB,EACxB,GAAG,IAAW,EAAA;QAEd,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;YACtC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE;YAC1C;QACF;AAEA,QAAA,IACE,CAAC,IAAI,CAAC,mCAAmC,CAAC,aAAa,EAAE,QAAQ,CAAC,IAAI,CAAC,EACvE;YACA;QACF;AAEA,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO;AACxC,cAAE,IAAI,CAAC,SAAS,CAAC,OAAO;cACtB,OAAO;QAEX,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,CACnC,CAAA,OAAA,EAAU,QAAQ,CAAA,GAAA,EAAM,YAAY,CAAA,CAAE,EACtC,GAAG,IAAI,CACR;QACH;aAAO;YACL,IAAI,CAAC,qBAAqB,CAAC,UAAU,CACnC,CAAA,OAAA,EAAU,QAAQ,CAAA,GAAA,EAAM,YAAY,CAAA,CAAE,CACvC;QACH;IACF;AAEA,IAAA,QAAQ,CACN,aAAyC,EACzC,OAAwB,EACxB,GAAG,IAAW,EAAA;QAEd,IAAI,CAAC,aAAa,EAAE;YAClB;QACF;QAEA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,EAAE;YACtC;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,aAAa,CAAC,EAAE;YAC1C;QACF;AAEA,QAAA,IACE,CAAC,IAAI,CAAC,mCAAmC,CAAC,aAAa,EAAE,QAAQ,CAAC,KAAK,CAAC,EACxE;YACA;QACF;AAEA,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO;AACxC,cAAE,IAAI,CAAC,SAAS,CAAC,OAAO;cACtB,OAAO;QAEX,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE;AAC3B,YAAA,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CACjC,CAAA,QAAA,EAAW,QAAQ,CAAA,GAAA,EAAM,YAAY,CAAA,CAAE,EACvC,GAAG,IAAI,CACR;QACH;aAAO;YACL,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CACjC,CAAA,QAAA,EAAW,QAAQ,CAAA,GAAA,EAAM,YAAY,CAAA,CAAE,CACxC;QACH;IACF;IAEQ,mCAAmC,CACzC,aAAkC,EAClC,iBAA2B,EAAA;AAE3B,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,IAAI,EAAE;QAExC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,KAAK;QACd;QAEA,OAAO,QAAQ,IAAI,iBAAiB;IACtC;AAEQ,IAAA,aAAa,CAAC,aAAkC,EAAA;AACtD,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,IAAI,EAAE;AAExC,QAAA,IAAI,QAAQ,KAAK,IAAI,EAAE;AACrB,YAAA,OAAO,KAAK;QACd;QAEA,OAAO,QAAQ,KAAK,SAAS;IAC/B;AAEQ,IAAA,kBAAkB,CAAC,aAAkC,EAAA;AAC3D,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa,IAAI,EAAE;AAExC,QAAA,OAAO,QAAQ,KAAK,QAAQ,CAAC,IAAI;IACnC;AAEQ,IAAA,QAAQ,CAAC,cAAmB,EAAA;AAClC,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,iBAAiB;IAC7E;8GAxIW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ICLtB;AAAZ,CAAA,UAAY,UAAU,EAAA;AACpB;;AAEG;AACH,IAAA,UAAA,CAAA,UAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY;AACZ,IAAA,UAAA,CAAA,UAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY;AACZ,IAAA,UAAA,CAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAoB;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,+BAAA,CAAA,GAAA,CAAA,CAAA,GAAA,+BAA6B;AAC7B,IAAA,UAAA,CAAA,UAAA,CAAA,qBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,qBAAmB;AACnB,IAAA,UAAA,CAAA,UAAA,CAAA,sBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,sBAAoB;AACpB,IAAA,UAAA,CAAA,UAAA,CAAA,iBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,iBAAe;AACf,IAAA,UAAA,CAAA,UAAA,CAAA,yBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,yBAAuB;AACvB,IAAA,UAAA,CAAA,UAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAY;AACZ,IAAA,UAAA,CAAA,UAAA,CAAA,gBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,gBAAc;AACd,IAAA,UAAA,CAAA,UAAA,CAAA,oBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,oBAAkB;AAClB,IAAA,UAAA,CAAA,UAAA,CAAA,mBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,mBAAiB;AACnB,CAAC,EAhBW,UAAU,KAAV,UAAU,GAAA,EAAA,CAAA,CAAA;;MCMT,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,MAAM,GAAG,IAAI,aAAa,CAA8B,CAAC,CAAC;AAkB5E,IAAA;AAhBC;;;;;AAKG;IACH,SAAS,CAAI,IAAgB,EAAE,KAAS,EAAA;QACtC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;IACnC;AAEA;;AAEG;IACH,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE;IACnC;8GAlBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA,CAAA;;2FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACHlC;;AAEG;MAEmB,uBAAuB,CAAA;8GAAvB,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADnB,MAAM,EAAA,CAAA,CAAA;;2FACV,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBAD5C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAmH3E,IAAA;IAjHC,IAAI,CAAC,GAAW,EAAE,aAAkC,EAAA;AAClD,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;QAElC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,gBAAA,EAAmB,GAAG,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAA,CAAG,CACzD;AAED,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,gBAAA,EAAmB,GAAG,CAAA,2BAAA,CAA6B,CACpD;AAED,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,YAAY,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAEhE,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;IACjC;IAEA,KAAK,CAAC,KAAU,EAAE,aAAkC,EAAA;AAClD,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;QAElC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,kCAAA,EAAqC,QAAQ,CAAA,CAAA,CAAG,CACjD;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,qCAAA,CAAuC,CACxC;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,KAAK,GAAG,KAAK,IAAI,IAAI;AAErB,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAEnE,QAAA,OAAO,IAAI;IACb;IAEA,MAAM,CAAC,GAAW,EAAE,aAAkC,EAAA;AACpD,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;QAElC,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,kBAAA,EAAqB,GAAG,CAAA,oBAAA,EAAuB,QAAQ,CAAA,CAAA,CAAG,CAC3D;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,kBAAA,EAAqB,GAAG,CAAA,uBAAA,CAAyB,CAClD;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAE7C,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,KAAK,CAAC,aAAkC,EAAA;AACtC,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;QAElC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,0CAAA,EAA6C,QAAQ,CAAA,CAAA,CAAG,CACzD;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,6CAAA,CAA+C,CAChD;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,CAAC;AAE7C,QAAA,OAAO,IAAI;IACb;IAEQ,UAAU,GAAA;AAChB,QAAA,OAAO,OAAO,OAAO,KAAK,WAAW;IACvC;8GApHW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA;;2FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCsBrB,yBAAyB,CAAA;AADtC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AAoEvE,IAAA;IAlEC,IAAI,CAAC,GAAgB,EAAE,MAA2B,EAAA;AAChD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE;AAEvE,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC;IAC1B;AAEA,IAAA,KAAK,CAAC,GAAgB,EAAE,KAAU,EAAE,MAA2B,EAAA;AAC7D,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE;AAEvE,QAAA,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK;QAEzB,OAAO,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC;IAC/D;IAEA,MAAM,CAAC,GAAgB,EAAE,MAA2B,EAAA;AAClD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE;AAEvE,QAAA,OAAO,YAAY,CAAC,GAAG,CAAC;QAExB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC;IACxD;AAEA,IAAA,KAAK,CAAC,MAA2B,EAAA;AAC/B,QAAA,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,MAAM,CAAC;IAC1C;AAEA,IAAA,oBAAoB,CAAC,MAA2B,EAAA;AAC9C,QAAA,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC;AACpC,QAAA,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,MAAM,CAAC;AAChD,QAAA,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC;AAC/B,QAAA,IAAI,CAAC,MAAM,CAAC,gCAAgC,EAAE,MAAM,CAAC;AACrD,QAAA,IAAI,CAAC,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC;AAC9C,QAAA,IAAI,CAAC,MAAM,CAAC,4BAA4B,EAAE,MAAM,CAAC;AACjD,QAAA,IAAI,CAAC,MAAM,CAAC,+BAA+B,EAAE,MAAM,CAAC;AACpD,QAAA,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC/C;AAEA,IAAA,uBAAuB,CAAC,MAA2B,EAAA;AACjD,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;AAChC,QAAA,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,MAAM,CAAC;AAC7C,QAAA,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC;IACpC;AAEA,IAAA,cAAc,CAAC,MAA2B,EAAA;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;IACvC;AAEA,IAAA,UAAU,CAAC,MAA2B,EAAA;QACpC,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,QAAQ;IACnD;AAEA,IAAA,eAAe,CAAC,MAA2B,EAAA;AACzC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EAAE,aAAa;AAEpE,QAAA,IAAI,CAAC,YAAY,IAAI,MAAM,CAAC,4BAA4B,EAAE;YACxD,OAAO,IAAI,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC;QACpD;AAEA,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,uBAAuB,CAAC,MAA2B,EAAA;QACjD,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC;IACzC;8GApEW,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAzB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cADZ,MAAM,EAAA,CAAA,CAAA;;2FACnB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCvBrB,YAAY,CAAA;AACvB,IAAA,UAAU,CACR,IAAkB,EAClB,IAAmD,EACnD,YAAY,GAAG,IAAI,EAAA;AAEnB,QAAA,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE;AACrB,YAAA,MAAM,gCAAgC;QACxC;QAEA,MAAM,SAAS,GAAG;aACf,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,GAAI,CAAS,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;aACjE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC;aACxD,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;QAE5D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,EAAE;AAC1C,YAAA,MAAM,+BAA+B;QACvC;AAEA,QAAA,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,KAAK,IAAI,IAAI,SAAS,KAAK,IAAI,CAAC,EAAE;AACjE,YAAA,MAAM,oCAAoC;QAC5C;AAEA,QAAA,OAAO,SAAS;IAClB;8GAxBW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA,CAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AA4BlC,SAAS,cAAc,CAAC,IAAY,EAAA;AAClC,IAAA,OAAO,YAAY,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI;AACxC;AAEO,MAAM,gCAAgC,GAAG;AAC9C,IAAA,IAAI,EAAE,cAAc,CAAC,sBAAsB,CAAC;AAC5C,IAAA,OAAO,EAAE,4CAA4C;CACtD;AAEM,MAAM,+BAA+B,GAAG;AAC7C,IAAA,IAAI,EAAE,cAAc,CAAC,qBAAqB,CAAC;AAC3C,IAAA,OAAO,EAAE,gCAAgC;CAC1C;AAEM,MAAM,oCAAoC,GAAG;AAClD,IAAA,IAAI,EAAE,cAAc,CAAC,0BAA0B,CAAC;AAChD,IAAA,OAAO,EAAE,oDAAoD;CAC9D;;AC1CD,MAAM,cAAc,GAAG,CAAC;MAGX,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,CAAC;AA0KvD,IAAA;AAxKC,IAAA,sBAAsB,CAAC,WAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;YAC7D,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3C;QAEA,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AAEzB,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC;AAEnC,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,wBAAwB,CACtB,KAAgC,EAChC,OAAgB,EAChB,aAAkC,EAAA;QAElC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;AAC5C,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,MAAM,GAAW,IAAI,CAAC,kBAAkB,CAC5C,KAAK,EACL,OAAO,EACP,aAAa,CACd;AACD,QAAA,MAAM,OAAO,GAAW,IAAI,CAAC,mBAAmB,CAC9C,KAAK,EACL,OAAO,EACP,aAAa,CACd;QAED,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;IACpC;AAEA,IAAA,kBAAkB,CAChB,KAAgC,EAChC,OAAgB,EAChB,aAAkC,EAAA;QAElC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;AAC5C,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC;IAC/C;AAEA,IAAA,mBAAmB,CACjB,KAAgC,EAChC,OAAgB,EAChB,aAAyC,EAAA;QAEzC,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,EAAE;QACX;QAEA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;AAC5C,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC;IAC/C;AAEA,IAAA,qBAAqB,CACnB,KAAgC,EAChC,OAAgB,EAChB,aAAkC,EAAA;QAElC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE;AAC5C,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,CAAC;IAC/C;AAEQ,IAAA,cAAc,CAAC,KAAa,EAAE,KAAa,EAAE,OAAgB,EAAA;QACnE,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC;QAEzD,IAAI,OAAO,EAAE;AACX,YAAA,OAAO,WAAW;QACpB;QAEA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC;AAEhD,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;IAC3B;AAEQ,IAAA,eAAe,CAAC,GAAW,EAAA;AACjC,QAAA,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;AAEtD,QAAA,QAAQ,MAAM,CAAC,MAAM,GAAG,CAAC;AACvB,YAAA,KAAK,CAAC;gBACJ;AACF,YAAA,KAAK,CAAC;gBACJ,MAAM,IAAI,IAAI;gBACd;AACF,YAAA,KAAK,CAAC;gBACJ,MAAM,IAAI,GAAG;gBACb;AACF,YAAA;AACE,gBAAA,MAAM,KAAK,CAAC,2BAA2B,CAAC;;QAG5C,MAAM,OAAO,GACX,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK;cACjC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM;AACxC,cAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAEtD,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,IAAI;;YAEF,OAAO,kBAAkB,CACvB;iBACG,KAAK,CAAC,EAAE;AACR,iBAAA,GAAG,CACF,CAAC,CAAS,KAAK,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAErE,iBAAA,IAAI,CAAC,EAAE,CAAC,CACZ;QACH;QAAE,OAAO,IAAI,EAAE;AACb,YAAA,OAAO,OAAO;QAChB;IACF;IAEQ,YAAY,CAClB,KAAgC,EAChC,aAAkC,EAAA;QAElC,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,OAAA,EAAU,KAAK,CAAA,8BAAA,CAAgC,CAChD;AAED,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,CAAE,KAAgB,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACpC,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,OAAA,EAAU,KAAK,CAAA,mCAAA,CAAqC,CACrD;AAED,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC;AAE9B,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,cAAc,EAAE;AACnC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,OAAA,EAAU,KAAK,gDACb,cAAc,GAAG,CACnB,CAAA,KAAA,CAAO,CACR;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;IAEQ,kBAAkB,CAAC,KAAa,EAAE,KAAa,EAAA;QACrD,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAChC;8GA3KW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCHrB,aAAa,CAAA;AAD1B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,CAAC;AASvD,IAAA;IAPC,SAAS,GAAA;;AAEP,QAAA,QACE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM;AAChC,YAAA,IAAI,CAAC,QAAQ,CAAC,WAAmB,EAAE,QAAQ;IAEhD;8GATW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAgCvD,IAAA;IA9BC,qBAAqB,CACnB,GAAe,EACf,SAMQ,EAAA;QAER,OAAO,IAAI,CAAC;AACT,aAAA,SAAS;AACT,aAAA,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC;IAC/D;AAEA,IAAA,SAAS,CACP,eAAwE,EACxE,SAAoB,EACpB,SAAqB,EACrB,YAAoB,EAAA;QAEpB,OAAO,IAAI,CAAC;AACT,aAAA,SAAS;AACT,aAAA,MAAM,CAAC,MAAM,CACZ,eAAe,EACf,SAAS,EACT,SAAS,EACT,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CACvC;IACL;8GAhCW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCGrB,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAuDvD,IAAA;AArDC,IAAA,qBAAqB,CAAC,YAAoB,EAAA;QACxC,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC,IAAI,CACrC,GAAG,CAAC,CAAC,YAAoB,KAAK,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAClE;IACH;IAEA,cAAc,CAAC,WAAmB,EAAE,SAAiB,EAAA;AACnD,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,IAAI,CAC/C,GAAG,CAAC,CAAC,SAAS,KAAI;AAChB,YAAA,MAAM,MAAM,GAAW,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AAChE,YAAA,MAAM,eAAe,GAAW,IAAI,CAAC,MAAM,CAAC;AAE5C,YAAA,OAAO;AACJ,iBAAA,OAAO,CAAC,KAAK,EAAE,GAAG;AAClB,iBAAA,OAAO,CAAC,KAAK,EAAE,GAAG;AAClB,iBAAA,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;QACtB,CAAC,CAAC,CACH;IACH;AAEQ,IAAA,QAAQ,CACd,WAAmB,EACnB,SAAS,GAAG,SAAS,EAAA;QAErB,MAAM,SAAS,GAAe,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC;QAEnE,OAAO,IAAI,CACT,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,SAAS,CAAC,CACnE,CAAC,IAAI,CACJ,GAAG,CAAC,CAAC,UAAmB,KAAI;YAC1B,MAAM,MAAM,GAAG,UAAyB;AACxC,YAAA,MAAM,SAAS,GAAa,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;AAE9D,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;QACrC,CAAC,CAAC,CACH;IACH;AAEQ,IAAA,YAAY,CAAC,SAAmB,EAAA;QACtC,IAAI,MAAM,GAAG,EAAE;AAEf,QAAA,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE;AACzB,YAAA,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;QAClC;AAEA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,eAAe,CAAC,GAAW,EAAA;AACjC,QAAA,MAAM,MAAM,GAAW,IAAI,CAAC,GAAG,CAAC;QAEhC,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;IACzE;8GAvDW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACL5B,SAAU,YAAY,CAC1B,GAAW,EAAA;AAEX,IAAA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACnB,QAAA,KAAK,GAAG;YACN,OAAO;AACL,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,IAAI,EAAE,SAAS;aAChB;AACH,QAAA,KAAK,GAAG;AACN,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACvB,OAAO;AACL,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,IAAI,EAAE,SAAS;iBAChB;YACH;AAAO,iBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC9B,OAAO;AACL,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,IAAI,EAAE,SAAS;iBAChB;YACH;iBAAO;AACL,gBAAA,OAAO,IAAI;YACb;AACF,QAAA;AACE,YAAA,OAAO,IAAI;;AAEjB;AAEM,SAAU,OAAO,CAAC,GAAW,EAAA;AACjC,IAAA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACnB,QAAA,KAAK,GAAG;AACN,YAAA,OAAO,KAAK;AAEd,QAAA,KAAK,GAAG;AACN,YAAA,OAAO,IAAI;AAEb,QAAA;AACE,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,GAAG,GAAG,CAAC;;AAE1D;AAEM,SAAU,YAAY,CAC1B,GAAW,EAAA;AAEX,IAAA,QAAQ,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACnB,QAAA,KAAK,GAAG;AACN,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACvB,OAAO;AACL,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,IAAI,EAAE,SAAS;iBAChB;YACH;AAAO,iBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC9B,OAAO;AACL,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,IAAI,EAAE,SAAS;iBAChB;YACH;AAAO,iBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC9B,OAAO;AACL,oBAAA,IAAI,EAAE,mBAAmB;AACzB,oBAAA,IAAI,EAAE,SAAS;iBAChB;YACH;iBAAO;AACL,gBAAA,OAAO,IAAI;YACb;AACF,QAAA,KAAK,GAAG;AACN,YAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACvB,OAAO;AACL,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,UAAU,EAAE,OAAO;iBACpB;YACH;AAAO,iBAAA,IAAI,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;gBAC9B,OAAO;AACL,oBAAA,IAAI,EAAE,OAAO;AACb,oBAAA,UAAU,EAAE,OAAO;iBACpB;YACH;iBAAO;AACL,gBAAA,OAAO,IAAI;YACb;AACF,QAAA;AACE,YAAA,OAAO,IAAI;;AAEjB;;ACrEA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;MAGa,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;AAIE,QAAA,IAAA,CAAA,aAAa,GAAa;YACxB,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;YACP,OAAO;SACR;AAEgB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AA0gBzE,IAAA;aA9hBQ,IAAA,CAAA,4BAA4B,GAAG,kBAAH,CAAsB;;;AAwBzD,IAAA,iBAAiB,CACf,KAAa,EACb,aAAkC,EAClC,aAAsB,EAAA;AAEtB,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CACzD,KAAK,EACL,KAAK,EACL,aAAa,CACd;QAED,OAAO,CAAC,IAAI,CAAC,4BAA4B,CACvC,OAAO,EACP,aAAa,EACb,aAAa,CACd;IACH;;;AAIA,IAAA,4BAA4B,CAC1B,cAAsB,EACtB,aAAkC,EAClC,aAAsB,EAAA;QAEtB,MAAM,mBAAmB,GACvB,IAAI,CAAC,kBAAkB,CAAC,sBAAsB,CAAC,cAAc,CAAC;AAEhE,QAAA,aAAa,GAAG,aAAa,IAAI,CAAC;QAElC,IAAI,CAAC,mBAAmB,EAAE;AACxB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,oBAAoB,GAAG,mBAAmB,CAAC,OAAO,EAAE;QAC1D,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC;AAChE,QAAA,MAAM,eAAe,GAAG,oBAAoB,GAAG,aAAa;AAE5D,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,qBAAA,EAAwB,CAAC,eAAe,mBAAmB,IAAI,CAAC,yBAAyB,CACvF,oBAAoB,GAAG,aAAa,CACrC,CAAA,GAAA,EAAM,IAAI,IAAI,CAAC,oBAAoB,CAAC,CAAC,kBAAkB,EAAE,CAAA,GAAA,EAAM,IAAI,IAAI,CACtE,aAAa,CACd,CAAC,kBAAkB,EAAE,CAAA,CAAE,CACzB;AAED,QAAA,OAAO,eAAe;IACxB;AAEA,IAAA,6BAA6B,CAC3B,oBAA0B,EAC1B,aAAkC,EAClC,aAAsB,EAAA;;QAGtB,IAAI,CAAC,oBAAoB,EAAE;AACzB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,aAAa,GAAG,aAAa,IAAI,CAAC;AAClC,QAAA,MAAM,0BAA0B,GAAG,oBAAoB,CAAC,OAAO,EAAE;QACjE,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,CAAC,aAAa,CAAC;AAChE,QAAA,MAAM,eAAe,GAAG,0BAA0B,GAAG,aAAa;AAElE,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,yBAAA,EAA4B,CAAC,eAAe,mBAAmB,IAAI,CAAC,yBAAyB,CAC3F,0BAA0B,GAAG,aAAa,CAC3C,CAAA,GAAA,EAAM,IAAI,IAAI,CACb,0BAA0B,CAC3B,CAAC,kBAAkB,EAAE,CAAA,GAAA,EAAM,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,kBAAkB,EAAE,CAAA,CAAE,CAC3E;AAED,QAAA,OAAO,eAAe;IACxB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA8BA,uBAAuB,CACrB,WAAgB,EAChB,aAAkC,EAAA;QAElC,IAAI,SAAS,GAAG,IAAI;AAEpB,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;YAC7D,SAAS,GAAG,KAAK;YACjB,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,kDAAkD,CACnD;QACH;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;YAC7D,SAAS,GAAG,KAAK;YACjB,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,kDAAkD,CACnD;QACH;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;YAC7D,SAAS,GAAG,KAAK;YACjB,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,kDAAkD,CACnD;QACH;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;YAC7D,SAAS,GAAG,KAAK;YACjB,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,kDAAkD,CACnD;QACH;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;YAC7D,SAAS,GAAG,KAAK;YACjB,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,kDAAkD,CACnD;QACH;AAEA,QAAA,OAAO,SAAS;IAClB;;;AAIA,IAAA,2BAA2B,CACzB,WAAgB,EAChB,yBAAiC,EACjC,0BAAmC,EACnC,aAAkC,EAAA;QAElC,IAAI,0BAA0B,EAAE;AAC9B,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;AAC7D,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,kBAAkB,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;AAEvC,QAAA,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC;AACjD,QAAA,yBAAyB,GAAG,yBAAyB,IAAI,CAAC;AAE1D,QAAA,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACnD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC,OAAO,EAAE;AAC9D,QAAA,MAAM,8BAA8B,GAAG,yBAAyB,GAAG,IAAI;AAEvE,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,iCAAA,EAAoC,IAAI,CAAA,GAAA,EAAM,8BAA8B,CAAA,CAAE,CAC/E;AAED,QAAA,IAAI,IAAI,GAAG,CAAC,EAAE;YACZ,OAAO,IAAI,GAAG,8BAA8B;QAC9C;AAEA,QAAA,OAAO,CAAC,IAAI,GAAG,8BAA8B;IAC/C;;;;;;;AASA,IAAA,oBAAoB,CAClB,WAAgB,EAChB,UAAe,EACf,uBAAgC,EAChC,aAAkC,EAAA;QAElC,MAAM,kBAAkB,GACtB,CAAC,WAAW,CAAC,KAAK,KAAK,SAAS,IAAI,uBAAuB;AAC3D,YAAA,UAAU,KAAK,sBAAsB,CAAC,4BAA4B;QAEpE,IAAI,CAAC,kBAAkB,IAAI,WAAW,CAAC,KAAK,KAAK,UAAU,EAAE;AAC3D,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,qDAAqD;AACnD,gBAAA,WAAW,CAAC,KAAK;gBACjB,eAAe;AACf,gBAAA,UAAU,CACb;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;;;AAIA,IAAA,kBAAkB,CAChB,WAAgB,EAChB,4BAAiC,EACjC,aAAkC,EAAA;AAElC,QAAA,IACG,WAAW,CAAC,GAAc,KAAM,4BAAuC,EACxE;AACA,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,iDAAiD;AAC/C,gBAAA,WAAW,CAAC,GAAG;gBACf,iCAAiC;AACjC,gBAAA,4BAA4B,CAC/B;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;;;;;AAMA,IAAA,kBAAkB,CAChB,WAAgB,EAChB,GAAuB,EACvB,aAAkC,EAAA;QAElC,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;YAClC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;YAE5C,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,uDAAuD;AACrD,oBAAA,WAAW,CAAC,GAAG;oBACf,aAAa;AACb,oBAAA,GAAG,CACN;AAED,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,OAAO,IAAI;QACb;AAAO,aAAA,IAAI,WAAW,CAAC,GAAG,KAAK,GAAG,EAAE;AAClC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,iDAAiD;AAC/C,gBAAA,WAAW,CAAC,GAAG;gBACf,aAAa;AACb,gBAAA,GAAG,CACN;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,wCAAwC,CAAC,WAAgB,EAAA;QACvD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,KAAK;QACd;QAEA,OAAO,EACL,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC;AAC9B,YAAA,WAAW,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC;AAC1B,YAAA,CAAC,WAAW,CAAC,GAAG,CACjB;IACH;;IAGA,uBAAuB,CACrB,WAAgB,EAChB,QAA4B,EAAA;AAE5B,QAAA,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;AACrB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,WAAW,CAAC,GAAG,KAAK,QAAQ;IACrC;AAEA,IAAA,6BAA6B,CAC3B,KAAU,EACV,UAAe,EACf,aAAkC,EAAA;AAElC,QAAA,IAAK,KAAgB,KAAM,UAAqB,EAAE;AAChD,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,+CAA+C;gBAC7C,KAAK;gBACL,eAAe;AACf,gBAAA,UAAU,CACb;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;;;;;AAMA,IAAA,wBAAwB,CACtB,OAAe,EACf,OAAY,EACZ,aAAkC,EAAA;QAElC,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;AAC7B,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAC3D,OAAO,EACP,KAAK,EACL,aAAa,CACd;QAED,IACE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;AACpC,YAAA,UAAU,CAAC,WAAW,KAAK,MAAM,EACjC;YACA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,6BAA6B,CAC9B;AAED,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB;AAEA,QAAA,MAAM,GAAG,GAAW,UAAU,CAAC,GAAG;AAClC,QAAA,MAAM,GAAG,GAAW,UAAU,CAAC,GAAG;AAClC,QAAA,MAAM,IAAI,GAAiB,OAAO,CAAC,IAAI;AACvC,QAAA,IAAI,SAAuB;AAC3B,QAAA,IAAI,GAAe;QAEnB,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACrC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,EAAE,mBAAmB,EAAE,GAAG,CAAC;AAEtE,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB;AAEA,QAAA,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK;AAEjB,QAAA,IAAI;AACF,YAAA,SAAS,GAAG;AACV,kBAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK;AAC7D,kBAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,CAAC;AAE3D,YAAA,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;AAC1B,gBAAA,SAAS,GAAG;AACV,sBAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE;AACjD,sBAAE,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,CAAC;YACjD;AAEA,YAAA,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC;QACpB;QAAE,OAAO,CAAM,EAAE;YACf,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;AAE7C,YAAA,OAAO,EAAE,CAAC,KAAK,CAAC;QAClB;AAEA,QAAA,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC;AACnC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,wBAAwB,CACnE,OAAO,EACP,IAAI,EACJ,aAAa,CACd;AACD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,CAAC,qBAAqB,CAChE,OAAO,EACP,IAAI,EACJ,aAAa,CACd;QAED,OAAO,IAAI,CACT,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,GAAG,EAAE,SAAS,CAAC,CAClE,CAAC,IAAI,CACJ,QAAQ,CAAC,CAAC,SAAoB,KAAI;AAChC,YAAA,MAAM,SAAS,GAAe,SAAS,CAAC,KAAK,CAAC,YAAY,EAAE;AAC1D,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA,CAAC;AACF,YAAA,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC;AAEzC,YAAA,OAAO,IAAI,CACT,IAAI,CAAC,sBAAsB,CAAC,SAAS,CACnC,eAAe,EACf,SAAS,EACT,SAAS,EACT,YAAY,CACb,CACF;AACH,QAAA,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,OAAgB,KAAI;YACvB,IAAI,CAAC,OAAO,EAAE;gBACZ,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,qDAAqD,CACtD;YACH;QACF,CAAC,CAAC,CACH;IACH;;;;;;;;;;;;;;;;;;;AAsBA,IAAA,qBAAqB,CACnB,WAAmB,EACnB,MAAc,EACd,UAAkB,EAClB,aAAkC,EAAA;QAElC,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,0BAA0B,GAAG,MAAM,CACpC;;QAGD,IAAI,GAAG,GAAG,SAAS;AAEnB,QAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YAC9B,GAAG,GAAG,SAAS;QACjB;AAAO,aAAA,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;YACrC,GAAG,GAAG,SAAS;QACjB;QAEA,OAAO,IAAI,CAAC;AACT,aAAA,cAAc,CAAC,EAAE,GAAG,WAAW,EAAE,GAAG;AACpC,aAAA,IAAI,CACH,QAAQ,CAAC,CAAC,IAAY,KAAI;YACxB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,wCAAwC,GAAG,IAAI,CAChD;AACD,YAAA,IAAI,IAAI,KAAK,MAAM,EAAE;AACnB,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;YAClB;iBAAO;gBACL,OAAO,IAAI,CAAC;qBACT,cAAc,CAAC,EAAE,GAAG,kBAAkB,CAAC,WAAW,CAAC,EAAE,GAAG;AACxD,qBAAA,IAAI,CACH,GAAG,CAAC,CAAC,OAAe,KAAI;oBACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,eAAe,GAAG,IAAI,CACvB;oBAED,OAAO,OAAO,KAAK,MAAM;gBAC3B,CAAC,CAAC,CACH;YACL;QACF,CAAC,CAAC,CACH;IACL;AAEQ,IAAA,yBAAyB,CAAC,MAAc,EAAA;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC;AAC1C,QAAA,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,GAAG,KAAK,IAAI,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAEpD,OAAO,OAAO,GAAG,GAAG,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC,GAAG,OAAO;IAC7D;AAEQ,IAAA,sBAAsB,CAAC,aAAqB,EAAA;AAClD,QAAA,OAAO,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,GAAG,aAAa,GAAG,IAAI;IAC5E;8GA9hBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;AC3ClC,MAAM,kBAAkB,GAAG;AACzB,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,uBAAuB,EAAE,EAAE;CAC5B;MAGY,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAEvD,QAAA,IAAA,CAAA,sBAAsB,GACrC,IAAI,eAAe,CAAsB,kBAAkB,CAAC;AAuS/D,IAAA;AArSC,IAAA,IAAI,cAAc,GAAA;QAChB,OAAO,IAAI,CAAC;AACT,aAAA,YAAY;AACZ,aAAA,IAAI,CAAC,oBAAoB,EAAE,CAAC;IACjC;AAEA,IAAA,4BAA4B,CAAC,UAAiC,EAAA;QAC5D,MAAM,MAAM,GAAG,IAAI,CAAC,0BAA0B,CAAC,UAAU,CAAC;AAE1D,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1C;IAEA,8BAA8B,CAC5B,aAAkC,EAClC,UAAiC,EAAA;AAEjC,QAAA,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,CAAC,aAAa,CAAC;QAErE,MAAM,MAAM,GAAG,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC;AAE5D,QAAA,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC;IAC1C;AAEA,IAAA,yBAAyB,CAAC,oBAAqC,EAAA;QAC7D,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAChC,UAAU,CAAC,uBAAuB,EAClC,oBAAoB,CACrB;IACH;AAEA,IAAA,oBAAoB,CAClB,WAAmB,EACnB,UAA6B,EAC7B,aAAkC,EAClC,UAAiC,EAAA;QAEjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,yBAAA,EAA4B,WAAW,CAAA,CAAA,CAAG,CAC3C;QAED,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,WAAW,EACX,WAAW,EACX,aAAa,CACd;AACD,QAAA,IAAI,CAAC,gCAAgC,CAAC,UAAU,EAAE,aAAa,CAAC;AAChE,QAAA,IAAI,CAAC,4BAA4B,CAAC,UAAU,CAAC;IAC/C;AAEA,IAAA,cAAc,CAAC,aAAyC,EAAA;QACtD,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,EAAE;QACX;QAEA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;AACxC,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,aAAa,CAAC;AAE1E,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAC7C;AAEA,IAAA,UAAU,CAAC,aAAyC,EAAA;QAClD,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,EAAE;QACX;QAEA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;AACxC,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,aAAa,CAAC;AAEtE,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAC7C;AAEA,IAAA,eAAe,CAAC,aAAyC,EAAA;QACvD,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,EAAE;QACX;QAEA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;AACxC,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,aAAa,CAAC;AAE3E,QAAA,OAAO,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC;IAC7C;AAEA,IAAA,uBAAuB,CACrB,aAAyC,EAAA;QAEzC,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;AACxC,YAAA,OAAO,IAAI;QACb;QAEA,OAAO,IAAI,CAAC,yBAAyB,CAAC,uBAAuB,CAC3D,aAAa,CACd;IACH;AAEA,IAAA,yBAAyB,CACvB,aAAyC,EAAA;QAEzC,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;AACxC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,IAAI,CAAC,uCAAuC,CAAC,aAAa,CAAC,EAAE;YAC/D,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,8BAA8B,CAC/B;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,IAAI,CAAC,mCAAmC,CAAC,aAAa,CAAC,EAAE;YAC3D,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,kCAAkC,CACnC;AAED,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,6CAA6C,CAC9C;AAED,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,uCAAuC,CACrC,aAAkC,EAAA;QAElC,MAAM,EACJ,oCAAoC,EACpC,gCAAgC,EAChC,wBAAwB,GACzB,GAAG,aAAa;AAEjB,QAAA,IAAI,CAAC,gCAAgC,IAAI,wBAAwB,EAAE;AACjE,YAAA,OAAO,KAAK;QACd;QACA,MAAM,YAAY,GAChB,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,aAAa,CAAC;AAC1D,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,sBAAsB,CAAC,iBAAiB,CAClE,YAAY,EACZ,aAAa,EACb,oCAAoC,CACrC;QAED,IAAI,cAAc,EAAE;YAClB,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAChC,UAAU,CAAC,cAAc,EACzB,cAAc,CACf;QACH;AAEA,QAAA,OAAO,cAAc;IACvB;AAEA,IAAA,mCAAmC,CACjC,aAAkC,EAAA;AAElC,QAAA,MAAM,EAAE,oCAAoC,EAAE,GAAG,aAAa;AAC9D,QAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAC9D,yBAAyB,EACzB,aAAa,CACd;AACD,QAAA,MAAM,wBAAwB,GAC5B,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,CACvD,oBAAoB,EACpB,aAAa,EACb,oCAAoC,CACrC;AACH,QAAA,MAAM,UAAU,GAAG,CAAC,wBAAwB;QAE5C,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAChC,UAAU,CAAC,YAAY,EACvB,UAAU,CACX;QACH;AAEA,QAAA,OAAO,UAAU;IACnB;AAEA,IAAA,eAAe,CAAC,aAAyC,EAAA;QACvD,IAAI,CAAC,aAAa,EAAE;YAClB,UAAU,CACR,MACE,IAAI,KAAK,CACP,6DAA6D,CAC9D,CACJ;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,cAAc,GAClB,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,aAAa,CAAC;AAChE,QAAA,MAAM,UAAU,GACd,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,aAAa,CAAC;QAE5D,OAAO,cAAc,IAAI,UAAU;IACrC;AAEQ,IAAA,wBAAwB,CAAC,KAAa,EAAA;QAC5C,IAAI,KAAK,EAAE;AACT,YAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC;QAClC;aAAO;AACL,YAAA,OAAO,EAAE;QACX;IACF;IAEQ,gCAAgC,CACtC,UAA6B,EAC7B,aAAkC,EAAA;AAElC,QAAA,IAAI,UAAU,EAAE,UAAU,EAAE;AAC1B,YAAA,MAAM,qBAAqB,GACzB,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE;AAC5C,gBAAA,UAAU,CAAC,UAAU,GAAG,IAAI;YAE9B,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,yBAAyB,EACzB,qBAAqB,EACrB,aAAa,CACd;QACH;IACF;AAEQ,IAAA,0BAA0B,CAChC,UAAiC,EAAA;AAEjC,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;YAElC,OAAO;AACL,gBAAA,eAAe,EAAE,IAAI;AACrB,gBAAA,uBAAuB,EAAE;oBACvB,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE;AACpD,iBAAA;aACF;QACH;AAEA,QAAA,OAAO,IAAI,CAAC,qCAAqC,CAAC,UAAU,CAAC;IAC/D;AAEQ,IAAA,4BAA4B,CAClC,UAAiC,EAAA;AAEjC,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;YAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC;YAElC,OAAO;AACL,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,uBAAuB,EAAE;oBACvB,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE,eAAe,EAAE,KAAK,EAAE;AACrD,iBAAA;aACF;QACH;AAEA,QAAA,OAAO,IAAI,CAAC,qCAAqC,CAAC,UAAU,CAAC;IAC/D;AAEQ,IAAA,qCAAqC,CAC3C,UAAiC,EAAA;QAEjC,MAAM,uBAAuB,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,MAAM;AAC1D,YAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,EAAE;AAC/B,YAAA,eAAe,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AAC9C,SAAA,CAAC,CAAC;AACH,QAAA,MAAM,eAAe,GAAG,uBAAuB,CAAC,KAAK,CACnD,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CACzB;AAED,QAAA,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE;IACrD;8GA/SW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACblC,MAAM,WAAW,GAAG,UAAU;MAGjB,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,cAAc,GAAG,MAAM,CAAC,yBAAyB,CAAC;AAClD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAyCzC,IAAA;AAvCC,IAAA,kCAAkC,CAAC,MAAkC,EAAA;QACnE,IAAI,CAAC,MAAM,EAAE;YACX;QACF;QACA,MAAM,qBAAqB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;AAEjE,QAAA,IAAI,qBAAqB,IAAI,IAAI,EAAE;AACjC,YAAA,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC;QAClD;IACF;AAEA;;;;;AAKG;IACH,iBAAiB,CAAC,MAAkC,EAAE,GAAW,EAAA;QAC/D,IAAI,CAAC,MAAM,EAAE;YACX;QACF;QAEA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,MAAM,CAAC;IACrD;AAEA;;AAEG;AACK,IAAA,sBAAsB,CAAC,MAA2B,EAAA;QACxD,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC;IACtD;AAEA;;AAEG;AACK,IAAA,yBAAyB,CAAC,MAA2B,EAAA;QAC3D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC;IACjD;8GA1CW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCHrB,UAAU,CAAA;AACrB,IAAA,qBAAqB,CAAC,aAAkC,EAAA;QACtD,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC;IAClD;AAEA,IAAA,4BAA4B,CAAC,aAAkC,EAAA;AAC7D,QAAA,QACE,IAAI,CAAC,wCAAwC,CAAC,aAAa,CAAC;AAC5D,YAAA,IAAI,CAAC,2CAA2C,CAAC,aAAa,CAAC;IAEnE;AAEA,IAAA,sCAAsC,CACpC,aAAyC,EAAA;QAEzC,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,EAAE,eAAe,EAAE,GAAG,aAAa;AAEzC,QAAA,QACE,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC;IAEzE;AAEA,IAAA,wCAAwC,CACtC,aAAkC,EAAA;QAElC,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,EAAE,aAAa,CAAC;IAC5D;IAEA,aAAa,CACX,SAA4B,EAC5B,aAAkC,EAAA;AAElC,QAAA,MAAM,EAAE,YAAY,EAAE,GAAG,aAAa;AAEtC,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;AAC5B,YAAA,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC;QAClD;QAEA,OAAO,YAAY,KAAK,SAAS;IACnC;AAEQ,IAAA,2CAA2C,CACjD,aAAkC,EAAA;QAElC,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC;IACtD;8GAjDW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cADG,MAAM,EAAA,CAAA,CAAA;;2FACnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCGrB,aAAa,CAAA;AAD1B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAiDvD,IAAA;IA/CC,YAAY,CACV,cAAsB,EACtB,aAAkC,EAAA;AAElC,QAAA,IAAI,cAAc,IAAI,CAAC,EAAE;AACvB,YAAA,OAAO,EAAE;QACX;QAEA,IAAI,cAAc,GAAG,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE;YAC5C,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,CAAA,0BAAA,EAA6B,cAAc,CAAA,+CAAA,CAAiD,CAC7F;YACD,cAAc,GAAG,EAAE;QACrB;AAEA,QAAA,MAAM,MAAM,GAAG,cAAc,GAAG,CAAC;AACjC,QAAA,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;QAE7C,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC;QAC7B;QAEA,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE;AAEQ,IAAA,KAAK,CAAC,GAAW,EAAA;AACvB,QAAA,OAAO,CAAC,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5C;AAEQ,IAAA,YAAY,CAAC,MAAc,EAAA;QACjC,IAAI,MAAM,GAAG,EAAE;QACf,MAAM,UAAU,GACd,gEAAgE;AAClE,QAAA,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC;QACtC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE;QAE7C,IAAI,MAAM,EAAE;AACV,YAAA,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC;AAC9B,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC/B,gBAAA,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC;YACrD;QACF;AAEA,QAAA,OAAO,MAAM;IACf;8GAlDW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCGrB,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AA4LvD,IAAA;AA1LC,IAAA,WAAW,CAAC,aAAkC,EAAA;AAC5C,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,EAAE,aAAa,CAAC;QAEhE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,uBAAuB,GAAG,KAAK,CAAC;AAC3E,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;AAEnC,QAAA,OAAO,KAAK;IACd;IAEA,QAAQ,CAAC,KAAa,EAAE,aAAkC,EAAA;QACxD,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC;IACzE;AAEA,IAAA,mBAAmB,CAAC,aAAyC,EAAA;QAC3D,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,EAAE;QACX;QAEA,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACxC,kBAAkB,EAClB,aAAa,CACd;IACH;IAEA,mBAAmB,CACjB,gBAAwB,EACxB,aAAyC,EAAA;QAEzC,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI,CAAC,yBAAyB,CAAC,KAAK,CACzC,kBAAkB,EAClB,gBAAgB,EAChB,aAAa,CACd;IACH;AAEA,IAAA,mCAAmC,CAAC,aAAkC,EAAA;AACpE,QAAA,IAAI,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAC7C,kBAAkB,EAClB,aAAa,CACd;QAED,IAAI,CAAC,KAAK,EAAE;YACV,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,EAAE,aAAa,CAAC;YAC1D,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,kBAAkB,EAClB,KAAK,EACL,aAAa,CACd;QACH;AAEA,QAAA,OAAO,KAAK;IACd;IAEA,eAAe,CAAC,YAAiB,EAAE,aAAkC,EAAA;QACnE,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,eAAe,EACf,YAAY,EACZ,aAAa,CACd;IACH;AAEA,IAAA,oBAAoB,CAAC,aAAkC,EAAA;AACrD,QAAA,IAAI,CAAC,yBAAyB,CAAC,oBAAoB,CAAC,aAAa,CAAC;IACpE;AAEA,IAAA,eAAe,CAAC,aAAkC,EAAA;QAChD,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;IAC3E;AAEA,IAAA,kBAAkB,CAAC,aAAkC,EAAA;AACnD,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,EAAE,EAAE,aAAa,CAAC;QAEvE,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,cAAc,EACd,YAAY,EACZ,aAAa,CACd;AAED,QAAA,OAAO,YAAY;IACrB;AAEA,IAAA,oBAAoB,CAAC,aAAkC,EAAA;AACrD,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAC1C,2BAA2B,EAC3B,aAAa,CACd;IACH;AAEA,IAAA,qBAAqB,CAAC,aAAkC,EAAA;QACtD,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,2BAA2B,EAC3B,IAAI,EACJ,aAAa,CACd;IACH;AAEA,IAAA,uBAAuB,CAAC,aAAkC,EAAA;QACxD,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,2BAA2B,EAC3B,KAAK,EACL,aAAa,CACd;IACH;AAEA,IAAA,oBAAoB,CAAC,aAAkC,EAAA;AACrD,QAAA,MAAM,EAAE,QAAQ,EAAE,2BAA2B,EAAE,GAAG,aAAa;QAC/D,MAAM,aAAa,GAAG,IAAI,CAAC,iCAAiC,CAAC,aAAa,CAAC;QAE3E,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,aAAa,CAAC,KAAK,KAAK,aAAa,EAAE;AACzC,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,qBAAqB,GAAG,CAAC,2BAA2B,IAAI,CAAC,IAAI,IAAI;QACvE,MAAM,wBAAwB,GAAG,IAAI,CAAC,KAAK,CACzC,aAAa,CAAC,wBAAwB,CACvC;AACD,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC3D,MAAM,yBAAyB,GAAG,IAAI,CAAC,GAAG,CACxC,cAAc,GAAG,wBAAwB,CAC1C;AACD,QAAA,MAAM,eAAe,GAAG,yBAAyB,GAAG,qBAAqB;QAEzE,IAAI,eAAe,EAAE;YACnB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,8DAA8D,EAC9D,QAAQ,CACT;AACD,YAAA,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;AAE3C,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,aAAa,CAAC,KAAK,KAAK,SAAS;IAC1C;AAEA,IAAA,qBAAqB,CAAC,aAAkC,EAAA;AACtD,QAAA,MAAM,aAAa,GAAuB;AACxC,YAAA,KAAK,EAAE,SAAS;AAChB,YAAA,wBAAwB,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACnD;AAED,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,2BAA2B,EAC3B,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,EAC7B,aAAa,CACd;IACH;AAEA,IAAA,uBAAuB,CAAC,aAAyC,EAAA;QAC/D,IAAI,CAAC,aAAa,EAAE;YAClB;QACF;QAEA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,2BAA2B,EAC3B,EAAE,EACF,aAAa,CACd;IACH;AAEQ,IAAA,iCAAiC,CACvC,aAAkC,EAAA;AAElC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACtD,2BAA2B,EAC3B,aAAa,CACd;QAED,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;AACL,gBAAA,wBAAwB,EAAE,EAAE;AAC5B,gBAAA,KAAK,EAAE,aAAa;aACrB;QACH;AAEA,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC;IACjC;8GAhMW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCLrB,UAAU,CAAA;AACrB,IAAA,SAAS,CAAC,GAAW,EAAA;AACnB,QAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC;IAChC;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC;IAClC;AAEA,IAAA,SAAS,CAAC,GAAW,EAAA;AACnB,QAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC;IAChC;AAEA,IAAA,WAAW,CAAC,KAAa,EAAA;AACvB,QAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC;IAClC;AACD;;ACLD,MAAM,wBAAwB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC;AACvE,MAAM,cAAc,GAAG,WAAW;MAGrB,UAAU,CAAA;AADvB,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AAo2BzE,IAAA;IAl2BC,eAAe,CAAC,UAAkB,EAAE,IAAY,EAAA;QAC9C,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,EAAE;QACX;QAEA,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC;QACxD,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,GAAG,WAAW,CAAC;QACxD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC;AAEtC,QAAA,OAAO,OAAO,KAAK,IAAI,GAAG,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAC/D;AAEA,IAAA,4BAA4B,CAAC,GAAQ,EAAA;QACnC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,EAAE;QAEf,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE;AACvC,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;QAChB;AAEA,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,KAAI;AACnB,YAAA,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC;AAC5B,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,CAAC;IACV;IAEA,oBAAoB,CAClB,QAAyB,EACzB,MAAuB,EAAA;QAEvB,IAAI,CAAC,GAAG,IAAI;QAEZ,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAI;YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;gBAClB,CAAC,GAAG,KAAK;YACX;AACF,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,CAAC;IACV;IAEA,iBAAiB,CAAC,UAAkB,EAAE,MAA4B,EAAA;AAChE,QAAA,IAAI,MAAM,IAAI,MAAM,CAAC,wCAAwC,EAAE;AAC7D,YAAA,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;YAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YAE/C,IAAI,CAAC,WAAW,EAAE;gBAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,0EAAA,CAA4E,EAC5E,WAAW,CACZ;AAED,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC;YACnD,MAAM,6BAA6B,GAAG,IAAI,CAAC,4BAA4B,CACrE,sBAAsB,CACvB,CAAC,QAAQ,EAAE;YACZ,MAAM,4BAA4B,GAChC,IAAI,CAAC,4BAA4B,CAAC,kBAAkB,CAAC,CAAC,QAAQ,EAAE;AAClE,YAAA,MAAM,4CAA4C,GAChD,IAAI,CAAC,oBAAoB,CACvB,sBAAsB,CAAC,YAAY,EACnC,kBAAkB,CAAC,YAAY,CAChC;YAEH,IACE,6BAA6B,KAAK,4BAA4B;gBAC9D,CAAC,4CAA4C,EAC7C;gBACA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,0FAA0F,CAC3F;AAED,gBAAA,OAAO,KAAK;YACd;QACF;QAEA,OAAO,wBAAwB,CAAC,IAAI,CAClC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAC7C;IACH;IAEA,+BAA+B,CAC7B,MAA2B,EAC3B,YAA2D,EAAA;QAE3D,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;YACjD,OAAO,IAAI,CAAC,gCAAgC,CAAC,MAAM,EAAE,YAAY,CAAC;QACpE;QAEA,OAAO,EAAE,CAAC,IAAI,CAAC,oCAAoC,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC5E;IAEA,kBAAkB,CAChB,UAAkB,EAClB,aAAkC,EAAA;AAElC,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;QAED,IAAI,CAAC,sBAAsB,EAAE;YAC3B,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,qCAAqC,CACtC;AAED,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,qBAAqB;QAE1E,IAAI,CAAC,qBAAqB,EAAE;YAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,+DAAA,EAAkE,qBAAqB,CAAA,CAAA,CAAG,CAC3F;AAED,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;QAElC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,0DAAA,CAA4D,EAC5D,QAAQ,CACT;AAED,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC;AACjD,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC;AACpC,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC;QAClC,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;QAElD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,UAAU,CAAC;QAC9C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC;AAE7C,QAAA,OAAO,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,MAAM,EAAE;IACxC;IAEA,eAAe,CACb,MAAkC,EAClC,WAAyB,EAAA;QAEzB,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;YACjD,OAAO,IAAI,CAAC,0BAA0B,CAAC,MAAM,EAAE,WAAW,CAAC;QAC7D;AAEA,QAAA,OAAO,EAAE,CAAC,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,CAAC;IAC3E;AAEA,IAAA,qBAAqB,CAAC,aAAkC,EAAA;AAItD,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;AACD,QAAA,MAAM,kBAAkB,GAAG,sBAAsB,EAAE,kBAAkB;QAErE,IAAI,CAAC,kBAAkB,EAAE;YACvB,OAAO;AACL,gBAAA,GAAG,EAAE,EAAE;AACP,gBAAA,cAAc,EAAE,EAAE;aACnB;QACH;QAEA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;AAC9C,QAAA,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC;QACvB,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE;QAExC,OAAO;YACL,GAAG;YACH,cAAc;SACf;IACH;IAEA,gBAAgB,CACd,aAAyC,EACzC,YAAyD,EAAA;QAEzD,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,aAAa,CAAC;AACxE,QAAA,MAAM,EAAE,6BAA6B,EAAE,GAAG,aAAa;QACvD,MAAM,YAAY,GAAG,EAAE,GAAG,6BAA6B,EAAE,GAAG,YAAY,EAAE;QAE1E,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,CAAC;IACvE;IAEA,uCAAuC,CACrC,KAAa,EACb,aAAkC,EAAA;QAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAEpC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC1C,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;QACnC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAC;AAEtD,QAAA,OAAO,MAAM,CAAC,QAAQ,EAAE;IAC1B;IAEA,wCAAwC,CACtC,KAAa,EACb,aAAkC,EAAA;QAElC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAEpC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC1C,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;QACnC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,eAAe,CAAC;AAEvD,QAAA,OAAO,MAAM,CAAC,QAAQ,EAAE;IAC1B;AAEA,IAAA,wBAAwB,CAAC,aAAkC,EAAA;AACzD,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;AACD,QAAA,MAAM,kBAAkB,GAAG,sBAAsB,EAAE,kBAAkB;QAErE,IAAI,CAAC,kBAAkB,EAAE;AACvB,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC;AAE9C,QAAA,OAAO,QAAQ,CAAC,CAAC,CAAC;IACpB;AAEA,IAAA,gCAAgC,CAC9B,IAAY,EACZ,aAAkC,EAClC,iBAA8D,EAAA;QAE9D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAEpC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,oBAAoB,CAAC;QACvD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;AAE1C,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,aAAa,CAAC;YAEzE,IAAI,CAAC,YAAY,EAAE;gBACjB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,wBAAA,CAA0B,EAC1B,YAAY,CACb;AAED,gBAAA,OAAO,IAAI;YACb;YAEA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC;QACpD;QAEA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;QAEjC,IAAI,iBAAiB,EAAE;AACrB,YAAA,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,GAAG,iBAAiB,EAAE,EAAE,MAAM,CAAC;QACpE;QAEA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;AAE5D,QAAA,IACE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,aAAa,CAAC;AACzD,YAAA,cAAc,EACd;YACA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,cAAc,CAAC;AAEnD,YAAA,OAAO,MAAM,CAAC,QAAQ,EAAE;QAC1B;QAEA,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC;QAEtD,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,IAAI;QACb;QAEA,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC;AAEhD,QAAA,OAAO,MAAM,CAAC,QAAQ,EAAE;IAC1B;AAEA,IAAA,yCAAyC,CACvC,YAAoB,EACpB,aAAkC,EAClC,mBAAkE,EAAA;QAElE,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;QAEhD,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;QAEpC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC;QAClD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC1C,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,YAAY,CAAC;QAElD,IAAI,mBAAmB,EAAE;AACvB,YAAA,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,GAAG,mBAAmB,EAAE,EAAE,MAAM,CAAC;QACtE;AAEA,QAAA,OAAO,MAAM,CAAC,QAAQ,EAAE;IAC1B;IAEA,+BAA+B,CAC7B,aAAkC,EAClC,WAAyB,EAAA;QAEzB,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC;QAEnE,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,MAAM,KAAK,GACT,IAAI,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,aAAa,CAAC;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,aAAa,CAAC;QAE9D,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,yCAAyC,GAAG,KAAK,CAClD;;QAGD,MAAM,YAAY,GAChB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,aAAa,CAAC;AAEzD,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,CAAC,aAAqB,KAAI;AAC5B,YAAA,MAAM,EACJ,QAAQ,EACR,YAAY,EACZ,KAAK,EACL,OAAO,EACP,uBAAuB,GACxB,GAAG,aAAa;YACjB,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAEtC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,IAAI,EAAE,CAAC;YAChD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC;YACnD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,YAAY,IAAI,EAAE,CAAC;YAC3D,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;YACtC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;YACtC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC;YACvD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC;YAEvD,IAAI,OAAO,EAAE;gBACX,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;YACvC;YAEA,IAAI,uBAAuB,EAAE;AAC3B,gBAAA,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAC9B,EAAE,GAAG,uBAAuB,EAAE,EAC9B,MAAM,CACP;YACH;AAEA,YAAA,IAAI,WAAW,EAAE,YAAY,EAAE;AAC7B,gBAAA,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAC9B,EAAE,GAAG,WAAW,CAAC,YAAY,EAAE,EAC/B,MAAM,CACP;YACH;AAEA,YAAA,OAAO,MAAM,CAAC,QAAQ,EAAE;QAC1B,CAAC,CAAC,CACH;IACH;AAEA,IAAA,wBAAwB,CAAC,aAAkC,EAAA;AACzD,QAAA,MAAM,EAAE,qBAAqB,EAAE,GAAG,aAAa;QAE/C,IAAI,CAAC,qBAAqB,EAAE;YAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,0CAAA,CAA4C,EAC5C,qBAAqB,CACtB;AAED,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,qBAAqB;IAC9B;AAEQ,IAAA,mBAAmB,CACzB,WAAmB,EACnB,aAAkC,EAClC,sBAAmE,EAAA;;;AAKnE,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC;QACjD;AAEA,QAAA,MAAM,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,aAAa,CAAC;QAEzE,IAAI,CAAC,GAAG,EAAE;AACR,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;AAElD,QAAA,IAAI,CAAC,CAAC,WAAW,EAAE;YACjB,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC;QACnD;QAEA,MAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;QAE1E,IAAI,qBAAqB,EAAE;YACzB,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,0BAA0B,EAAE,qBAAqB,CAAC;QAC3E;QAEA,IAAI,sBAAsB,EAAE;AAC1B,YAAA,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,GAAG,sBAAsB,EAAE,EAAE,MAAM,CAAC;QACzE;AAEA,QAAA,OAAO,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,MAAM,EAAE;IAC3B;AAEQ,IAAA,kBAAkB,CACxB,aAAqB,EACrB,WAAmB,EACnB,KAAa,EACb,KAAa,EACb,aAAkC,EAClC,MAAe,EACf,mBAAkE,EAAA;AAElE,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;AACD,QAAA,MAAM,qBAAqB,GAAG,sBAAsB,EAAE,qBAAqB;QAE3E,IAAI,CAAC,qBAAqB,EAAE;YAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,+DAAA,EAAkE,qBAAqB,CAAA,CAAA,CAAG,CAC3F;AAED,YAAA,OAAO,EAAE;QACX;AAEA,QAAA,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,GACvE,aAAa;QAEf,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,0DAAA,CAA4D,EAC5D,QAAQ,CACT;AAED,YAAA,OAAO,EAAE;QACX;QAEA,IAAI,CAAC,YAAY,EAAE;YACjB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,8DAAA,CAAgE,EAChE,YAAY,CACb;AAED,YAAA,OAAO,EAAE;QACX;QAEA,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,uDAAA,CAAyD,EACzD,KAAK,CACN;AAED,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,GAAG,CAAC;AACjD,QAAA,MAAM,gBAAgB,GAAG,QAAQ,CAAC,CAAC,CAAC;AACpC,QAAA,MAAM,cAAc,GAAG,QAAQ,CAAC,CAAC,CAAC;QAClC,IAAI,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC;QAElD,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC;QAC1C,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,CAAC;QACnD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC;QACrD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;QACtC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;QACtC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC;AAEtC,QAAA,IACE,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,aAAa,CAAC;AACpD,YAAA,CAAC,aAAa,CAAC,WAAW,EAC1B;YACA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,aAAa,CAAC;YACvD,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC;QACzD;QAEA,MAAM,YAAY,GAAG,EAAE,GAAG,uBAAuB,EAAE,GAAG,mBAAmB,EAAE;QAE3E,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACxC,YAAA,MAAM,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,GAAG,YAAY,EAAE,EAAE,MAAM,CAAC;QAC/D;QAEA,IAAI,MAAM,EAAE;YACV,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC;QACxD;QAEA,IAAI,OAAO,EAAE;YACX,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;QACvC;AAEA,QAAA,OAAO,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,MAAM,EAAE;IACxC;IAEQ,oCAAoC,CAC1C,aAAkC,EAClC,YAA2D,EAAA;QAE3D,MAAM,KAAK,GACT,IAAI,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,aAAa,CAAC;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,aAAa,CAAC;QAC9D,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;QAE5D,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,8CAA8C,EAC9C,KAAK,CACN;AAED,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;QAED,IAAI,sBAAsB,EAAE;AAC1B,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAC5B,EAAE,EACF,cAAc,EACd,KAAK,EACL,KAAK,EACL,aAAa,EACb,MAAM,EACN,YAAY,CACb;QACH;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,qCAAqC,CACtC;AAED,QAAA,OAAO,IAAI;IACb;IAEQ,gCAAgC,CACtC,aAAkC,EAClC,YAA2D,EAAA;QAE3D,MAAM,KAAK,GACT,IAAI,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,aAAa,CAAC;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,aAAa,CAAC;QAE9D,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,8CAA8C,GAAG,KAAK,CACvD;;QAGD,MAAM,YAAY,GAChB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,aAAa,CAAC;AAEzD,QAAA,OAAO,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,YAAY,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,CAAC,aAAqB,KAAI;YAC5B,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;YAE5D,IAAI,CAAC,cAAc,EAAE;AACnB,gBAAA,OAAO,EAAE;YACX;AAEA,YAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;YAED,IAAI,sBAAsB,EAAE;AAC1B,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAC5B,aAAa,EACb,cAAc,EACd,KAAK,EACL,KAAK,EACL,aAAa,EACb,MAAM,EACN,YAAY,CACb;YACH;YAEA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,qCAAqC,CACtC;AAED,YAAA,OAAO,EAAE;QACX,CAAC,CAAC,CACH;IACH;IAEQ,8BAA8B,CACpC,aAAkC,EAClC,WAAyB,EAAA;QAEzB,MAAM,KAAK,GACT,IAAI,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,aAAa,CAAC;QAC1E,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,aAAa,CAAC;QAE9D,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,yCAAyC,GAAG,KAAK,CAClD;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC;QAEnE,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;QAED,IAAI,sBAAsB,EAAE;AAC1B,YAAA,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW,IAAI,EAAE;AAE1C,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAC5B,EAAE,EACF,WAAW,EACX,KAAK,EACL,KAAK,EACL,aAAa,EACb,EAAE,EACF,YAAY,CACb;QACH;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,qCAAqC,CACtC;AAED,QAAA,OAAO,IAAI;IACb;IAEQ,0BAA0B,CAChC,MAA2B,EAC3B,WAAyB,EAAA;QAEzB,MAAM,KAAK,GACT,IAAI,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,MAAM,CAAC;QACnE,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,MAAM,CAAC;QAEvD,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,yCAAyC,GAAG,KAAK,CAClD;QAED,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,WAAW,CAAC;QAE5D,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;AAEA,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,CACvC,GAAG,CAAC,CAAC,aAAqB,KAAI;AAC5B,YAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,MAAM,CACP;YAED,IAAI,sBAAsB,EAAE;AAC1B,gBAAA,MAAM,EAAE,YAAY,EAAE,GAAG,WAAW,IAAI,EAAE;AAE1C,gBAAA,OAAO,IAAI,CAAC,kBAAkB,CAC5B,aAAa,EACb,WAAW,EACX,KAAK,EACL,KAAK,EACL,MAAM,EACN,EAAE,EACF,YAAY,CACb;YACH;YAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,qCAAqC,CACtC;AAED,YAAA,OAAO,EAAE;QACX,CAAC,CAAC,CACH;IACH;AAEQ,IAAA,gBAAgB,CAAC,MAA2B,EAAA;AAClD,QAAA,IAAI,MAAM,CAAC,WAAW,EAAE;AACtB,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;QACf;;QAGA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,MAAM,CAAC;QAErE,OAAO,IAAI,CAAC,sBAAsB,CAAC,qBAAqB,CAAC,YAAY,CAAC;IACxE;IAEQ,cAAc,CACpB,aAAkC,EAClC,WAAyB,EAAA;AAEzB,QAAA,IAAI,EAAE,WAAW,EAAE,GAAG,aAAa;AAEnC,QAAA,IAAI,WAAW,EAAE,WAAW,EAAE;;AAE5B,YAAA,WAAW,GAAG,WAAW,CAAC,WAAW;QACvC;QAEA,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,gCAAA,CAAkC,EAClC,WAAW,CACZ;AAED,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,WAAW;IACpB;AAEQ,IAAA,iBAAiB,CAAC,aAAkC,EAAA;AAC1D,QAAA,MAAM,EAAE,cAAc,EAAE,GAAG,aAAa;QAExC,IAAI,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,mCAAA,CAAqC,EACrC,cAAc,CACf;AAED,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,cAAc;IACvB;AAEQ,IAAA,WAAW,CAAC,aAAkC,EAAA;AACpD,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;QAElC,IAAI,CAAC,QAAQ,EAAE;YACb,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,6BAAA,CAA+B,EAC/B,QAAQ,CACT;AAED,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,OAAO,QAAQ;IACjB;IAEQ,kBAAkB,CACxB,YAA0D,EAC1D,MAAkB,EAAA;AAElB,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,YAAY,EAAE,CAAC,EAAE;AAC9D,YAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC/C;AAEA,QAAA,OAAO,MAAM;IACf;AAEQ,IAAA,cAAc,CACpB,MAAkB,EAClB,GAAW,EACX,KAAgC,EAAA;QAEhC,OAAO,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC;IAC/B;AAEQ,IAAA,gBAAgB,CAAC,cAAuB,EAAA;AAC9C,QAAA,cAAc,GAAG,cAAc,IAAI,EAAE;QAErC,OAAO,IAAI,UAAU,CAAC;AACpB,YAAA,UAAU,EAAE,cAAc;YAC1B,OAAO,EAAE,IAAI,UAAU,EAAE;AAC1B,SAAA,CAAC;IACJ;AAEQ,IAAA,eAAe,CAAC,aAAkC,EAAA;AACxD,QAAA,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,GAAG,aAAa;QAEzD,IAAI,CAAC,SAAS,EAAE;AACd,YAAA,OAAO,KAAK;QACd;QAEA,OAAO,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC;IAC5E;AAEQ,IAAA,oBAAoB,CAAC,aAAkC,EAAA;;AAE7D,QAAA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,aAAa;QAC7C,MAAM,qBAAqB,GAAG,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;AAE1E,QAAA,OAAO,GAAG,SAAS,CAAA,qBAAA,EAAwB,QAAQ,CAAA,UAAA,EAAa,qBAAqB,EAAE;IACzF;8GA12BW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cADG,MAAM,EAAA,CAAA,CAAA;;2FACnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCXrB,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAa3C,IAAA;IAXC,GAAG,CAAI,GAAW,EAAE,MAAmC,EAAA;QACrD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,GAAG,EAAE,MAAM,CAAC;IACtC;AAEA,IAAA,IAAI,CACF,GAAW,EACX,IAAa,EACb,MAAmC,EAAA;AAEnC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;IAC7C;8GAbW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACElC,MAAM,iBAAiB,GAAG,aAAa;MAG1B,WAAW,CAAA;AADxB,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,eAAe,CAAC;AAqDtD,IAAA;AAnDC,IAAA,GAAG,CACD,GAAW,EACX,MAA2B,EAC3B,KAAc,EAAA;QAEd,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAEzC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAI,GAAG,EAAE;YACjC,OAAO;YACP,MAAM;AACP,SAAA,CAAC;IACJ;AAEA,IAAA,IAAI,CACF,GAAkB,EAClB,IAAa,EACb,MAA2B,EAC3B,aAA2B,EAAA;QAE3B,MAAM,OAAO,GAAG,aAAa,IAAI,IAAI,CAAC,cAAc,EAAE;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AAEzC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAI,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IACtE;AAEQ,IAAA,cAAc,CAAC,KAAc,EAAA;AACnC,QAAA,IAAI,OAAO,GAAG,IAAI,WAAW,EAAE;QAE/B,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,kBAAkB,CAAC;AAEnD,QAAA,IAAI,CAAC,CAAC,KAAK,EAAE;AACX,YAAA,OAAO,GAAG,OAAO,CAAC,GAAG,CACnB,eAAe,EACf,SAAS,GAAG,kBAAkB,CAAC,KAAK,CAAC,CACtC;QACH;AAEA,QAAA,OAAO,OAAO;IAChB;AAEQ,IAAA,aAAa,CAAC,MAA2B,EAAA;AAC/C,QAAA,IAAI,MAAM,GAAG,IAAI,UAAU,EAAE;AAC7B,QAAA,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM;QAE7B,IAAI,UAAU,EAAE;YACd,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,EAAE,CAAC;QAC5C;AAEA,QAAA,OAAO,MAAM;IACf;8GArDW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA,CAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACNlC;;;;;;AAMG;AACI,MAAM,cAAc,GAAG,CAAC,KAAc,KAC3C,CAAC,CAAC,KAAK;AACP,IAAA,KAAK,YAAY,iBAAiB;AAClC,KAAC,CAAC,KAAK,CAAC,KAAK,YAAY,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO;AACpE,SAAC,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;;MCE7B,8BAA8B,CAAA;AAD3C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAoInD,IAAA;;IAjIC,gBAAgB,CACd,UAAkB,EAClB,MAA2B,EAAA;AAE3B,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC;AAChE,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC;AAClE,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,eAAe,CAClD,UAAU,EACV,eAAe,CAChB;QAED,IAAI,CAAC,KAAK,EAAE;YACV,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;YAEtD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;QACvD;QAEA,IAAI,CAAC,IAAI,EAAE;YACT,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;YAErD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACtD;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,iCAAiC,EACjC,UAAU,CACX;AAED,QAAA,MAAM,sBAAsB,GAAoB;YAC9C,IAAI;AACJ,YAAA,YAAY,EAAE,EAAE;YAChB,KAAK;YACL,YAAY;AACZ,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,cAAc,EAAE,KAAK;AACrB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,eAAe,EAAE,IAAI;SACtB;AAED,QAAA,OAAO,EAAE,CAAC,sBAAsB,CAAC;IACnC;;IAGA,mBAAmB,CACjB,eAAgC,EAChC,MAA2B,EAAA;QAE3B,MAAM,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,CAAC;AAC1E,QAAA,MAAM,cAAc,GAClB,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,CACvD,eAAe,CAAC,KAAK,EACrB,gBAAgB,EAChB,MAAM,CACP;QAEH,IAAI,CAAC,cAAc,EAAE;YACnB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3E;AAEA,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,MAAM,CACP;AACD,QAAA,MAAM,aAAa,GAAG,sBAAsB,EAAE,aAAa;QAE3D,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClE;AAEA,QAAA,IAAI,OAAO,GAAgB,IAAI,WAAW,EAAE;QAE5C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC;AAE1E,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,gCAAgC,CACtE,eAAe,CAAC,IAAI,EACpB,MAAM,EACN,MAAM,EAAE,uBAAuB,CAChC;QAED,OAAO,IAAI,CAAC;aACT,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,OAAO;AACpD,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,QAAQ,KAAI;YACrB,IAAI,QAAQ,EAAE;AACZ,gBAAA,MAAM,UAAU,GAAe;AAC7B,oBAAA,GAAG,QAAQ;oBACX,KAAK,EAAE,eAAe,CAAC,KAAK;oBAC5B,aAAa,EAAE,eAAe,CAAC,YAAY;iBAC5C;AAED,gBAAA,eAAe,CAAC,UAAU,GAAG,UAAU;YACzC;AAEA,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC;QAC5B,CAAC,CAAC,EACF,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAC5D,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM;AAC5B,YAAA,MAAM,YAAY,GAAG,CAAA,yBAAA,EAA4B,SAAS,EAAE;YAE5D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;YAExD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD,CAAC,CAAC,CACH;IACL;IAEQ,kBAAkB,CACxB,MAA2B,EAC3B,MAA2B,EAAA;QAE3B,OAAO,MAAM,CAAC,IAAI,CAChB,QAAQ,CAAC,CAAC,KAAK,KAAI;;AAEjB,YAAA,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;AACzB,gBAAA,MAAM,EAAE,SAAS,EAAE,0BAA0B,EAAE,GAAG,MAAM;AACxD,gBAAA,MAAM,YAAY,GAAG,CAAA,yBAAA,EAA4B,SAAS,2BAA2B;gBAErF,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;gBAE1D,OAAO,KAAK,CAAC,CAAC,0BAA0B,IAAI,CAAC,IAAI,IAAI,CAAC;YACxD;AAEA,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,CACH;IACH;8GA3IW,8BAA8B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA9B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,cADjB,MAAM,EAAA,CAAA,CAAA;;2FACnB,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAD1C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ICdtB;AAAZ,CAAA,UAAY,gBAAgB,EAAA;AAC1B,IAAA,gBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACjB,IAAA,gBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,gBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,gBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,gBAAA,CAAA,yBAAA,CAAA,GAAA,yBAAmD;AACnD,IAAA,gBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,gBAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,gBAAA,CAAA,0BAAA,CAAA,GAAA,0BAAqD;AACrD,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,gBAAA,CAAA,oCAAA,CAAA,GAAA,oCAAyE;AACzE,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,gBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,gBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,gBAAA,CAAA,IAAA,CAAA,GAAA,IAAS;AACT,IAAA,gBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,gBAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACnD,CAAC,EAjBW,gBAAgB,KAAhB,gBAAgB,GAAA,EAAA,CAAA,CAAA;;ACa5B,MAAM,kBAAkB,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE;MAGjD,WAAW,CAAA;AADxB,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,iBAAiB,GAAG,IAAI,eAAe,CACtD,kBAAkB,CACnB;AAMgB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,WAAW,CAAC;AACrC,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAqS5D,IAAA;AAhTC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE;IAC9C;IAWA,4BAA4B,CAC1B,oBAAyC,EACzC,UAAiC,EACjC,cAAc,GAAG,KAAK,EACtB,OAAgB,EAChB,cAAoB,EAAA;QAEpB,OAAO;YACL,OAAO;AACP,gBAAA,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,oBAAoB,CAAC;QACjE,cAAc;YACZ,cAAc;gBACd,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CACzC,OAAO,EACP,KAAK,EACL,oBAAoB,CACrB;QAEH,MAAM,2BAA2B,GAC/B,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;AACjD,QAAA,MAAM,YAAY,GAAG,CAAC,CAAC,2BAA2B;QAClD,MAAM,wCAAwC,GAC5C,IAAI,CAAC,UAAU,CAAC,wCAAwC,CACtD,oBAAoB,CACrB;QACH,MAAM,qBAAqB,GACzB,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,oBAAoB,CAAC;QAC7D,MAAM,WAAW,GACf,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,oBAAoB,CAAC;AAErE,QAAA,IAAI,EAAE,wCAAwC,IAAI,qBAAqB,CAAC,EAAE;YACxE,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,oBAAoB,EACpB,CAAA,2CAAA,EAA8C,WAAW,CAAA,CAAE,CAC5D;YAED,IAAI,CAAC,kBAAkB,CAAC,cAAc,EAAE,oBAAoB,EAAE,UAAU,CAAC;AAEzE,YAAA,OAAO,EAAE,CAAC,cAAc,CAAC;QAC3B;AAEA,QAAA,MAAM,EAAE,4BAA4B,EAAE,GAAG,oBAAoB;QAE7D,IAAI,CAAC,cAAc,IAAI,4BAA4B,IAAI,CAAC,YAAY,EAAE;YACpE,OAAO,IAAI,CAAC,0BAA0B,CACpC,cAAc,CAAC,GAAG,EAClB,oBAAoB,EACpB,UAAU,CACX,CAAC,IAAI,CACJ,SAAS,CAAC,CAAC,QAAQ,KAAI;gBACrB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,oBAAoB,EACpB,sBAAsB,EACtB,QAAQ,CACT;AACD,gBAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;oBACd,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,oBAAoB,EACpB,eAAe,EACf,WAAW,CACZ;AAED,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;qBAAO;oBACL,OAAO,UAAU,CACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CACzD;gBACH;YACF,CAAC,CAAC,CACH;QACH;AAEA,QAAA,OAAO,EAAE,CAAC,2BAA2B,CAAC;IACxC;AAEA,IAAA,oBAAoB,CAAC,oBAAgD,EAAA;QACnE,IAAI,CAAC,oBAAoB,EAAE;YACzB,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,6DAA6D,CAC9D,CACJ;QACH;QAEA,QACE,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,oBAAoB,CAAC;AACrE,YAAA,IAAI;IAER;IAEA,uBAAuB,CACrB,oBAAyC,EACzC,UAAiC,EAAA;QAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;QAEhE,IAAI,QAAQ,EAAE;YACZ,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,UAAU,EAAE,QAAQ,CAAC;QACpE;IACF;AAEA,IAAA,kBAAkB,CAChB,QAAa,EACb,oBAAyC,EACzC,UAAiC,EAAA;QAEjC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,UAAU,EACV,QAAQ,EACR,oBAAoB,CACrB;QACD,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,UAAU,EAAE,QAAQ,CAAC;IACpE;IAEA,oBAAoB,CAClB,oBAAyC,EACzC,UAAiC,EAAA;QAEjC,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,UAAU,EAAE,oBAAoB,CAAC;QACvE,IAAI,CAAC,iBAAiB,CAAC,oBAAoB,EAAE,UAAU,EAAE,IAAI,CAAC;IAChE;AAEQ,IAAA,0BAA0B,CAChC,UAAe,EACf,oBAAyC,EACzC,UAAiC,EAAA;AAEjC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,CAAC,IAAI,CACxD,GAAG,CAAC,CAAC,IAAS,KAAI;AAChB,YAAA,IACE,IAAI,CAAC,0BAA0B,CAC7B,oBAAoB,EACpB,UAAU,EACV,IAAI,EAAE,GAAG,CACV,EACD;gBACA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,oBAAoB,EAAE,UAAU,CAAC;AAE/D,gBAAA,OAAO,IAAI;YACb;iBAAO;;gBAEL,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,oBAAoB,EACpB,CAAA,uDAAA,CAAyD,CAC1D;AACD,gBAAA,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,UAAU,CAAC;AAE3D,gBAAA,OAAO,IAAI;YACb;QACF,CAAC,CAAC,CACH;IACH;AAEQ,IAAA,mBAAmB,CACzB,oBAAyC,EAAA;QAEzC,MAAM,KAAK,GACT,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,oBAAoB,CAAC;AACrE,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,oBAAoB,CACrB;QAED,IAAI,CAAC,sBAAsB,EAAE;YAC3B,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,oBAAoB,EACpB,yDAAyD,CAC1D;YAED,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC3E;AAEA,QAAA,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,gBAAgB;QAEhE,IAAI,CAAC,gBAAgB,EAAE;YACrB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,oBAAoB,EACpB,gHAAgH,CACjH;YAED,OAAO,UAAU,CACf,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CACzE;QACH;QAEA,OAAO,IAAI,CAAC;AACT,aAAA,GAAG,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,KAAK;AACjD,aAAA,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnB;AAEQ,IAAA,0BAA0B,CAChC,oBAAyC,EACzC,UAAe,EACf,WAAgB,EAAA;QAEhB,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,UAAU,CAAC,QAAQ,EAAE,KAAK,WAAW,CAAC,QAAQ,EAAE,EAAE;AACpD,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,oBAAoB,EACpB,mCAAmC,EACnC,UAAU,EACV,WAAW,CACZ;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,iBAAiB,CACvB,oBAAyC,EACzC,UAAiC,EACjC,cAAmB,EAAA;AAEnB,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,qCAAqC,CACzD,oBAAoB,EACpB,UAAU,EACV,cAAc,CACf;AAED,QAAA,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC;AAErC,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,oBAAoB;QAEzC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,eAAe,EAAE;YACtD,QAAQ;AACR,YAAA,QAAQ,EAAE,cAAc;AACzB,SAAA,CAAC;IACJ;AAEQ,IAAA,qCAAqC,CAC3C,oBAAyC,EACzC,UAAiC,EACjC,cAAmB,EAAA;AAEnB,QAAA,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC;QAE5C,IAAI,CAAC,cAAc,EAAE;AACnB,YAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,oBAAoB;YAEzC,OAAO,IAAI,CAAC,2BAA2B,CAAC,QAAQ,IAAI,EAAE,EAAE,cAAc,CAAC;QACzE;QAEA,MAAM,WAAW,GAA2B,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AACpE,YAAA,MAAM,eAAe,GAAG,oBAAoB,CAAC,QAAQ,IAAI,EAAE;AAC3D,YAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE;YAEtC,IAAI,IAAI,CAAC,uBAAuB,CAAC,eAAe,EAAE,MAAM,CAAC,EAAE;AACzD,gBAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE;YAC/C;AAEA,YAAA,MAAM,oBAAoB,GACxB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,IAAI;YAEjE,OAAO;gBACL,QAAQ;AACR,gBAAA,QAAQ,EAAE,oBAAoB;aAC/B;AACH,QAAA,CAAC,CAAC;QAEF,OAAO;AACL,YAAA,QAAQ,EAAE,IAAI;YACd,WAAW;SACZ;IACH;IAEQ,2BAA2B,CACjC,QAAgB,EAChB,QAAa,EAAA;QAEb,OAAO;YACL,QAAQ;AACR,YAAA,WAAW,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;SACtC;IACH;IAEQ,uBAAuB,CAC7B,QAAgB,EAChB,MAA2B,EAAA;AAE3B,QAAA,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ;IACrC;8GApTW,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAX,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAW,cADE,MAAM,EAAA,CAAA,CAAA;;2FACnB,WAAW,EAAA,UAAA,EAAA,CAAA;kBADvB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCPrB,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAsB7D,IAAA;IApBC,sBAAsB,CACpB,oBAAgD,EAChD,UAAiC,EAAA;QAEjC,IAAI,CAAC,oBAAoB,EAAE;YACzB;QACF;QAEA,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,UAAU,CAAC;AACvE,QAAA,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,oBAAoB,CAAC;QAChE,IAAI,CAAC,gBAAgB,CAAC,8BAA8B,CAClD,oBAAoB,EACpB,UAAU,CACX;QAED,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,oBAAoB,EACpB,oDAAoD,CACrD;IACH;8GAzBW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCIrB,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAoDnD,IAAA;AAlDC,IAAA,cAAc,CACZ,oBAAyC,EAAA;AAEzC,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,oBAAoB,CACrB;AACD,QAAA,MAAM,OAAO,GAAG,sBAAsB,EAAE,OAAO;QAE/C,IAAI,CAAC,OAAO,EAAE;AACZ,YAAA,MAAM,KAAK,GAAG,CAAA,oDAAA,EAAuD,OAAO,GAAG;YAE/E,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,oBAAoB,EAAE,KAAK,CAAC;YAE1D,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,oBAAoB,EACpB,0BAA0B,EAC1B,OAAO,CACR;AAED,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAU,OAAO,EAAE,oBAAoB,CAAC,CAAC,IAAI,CACtE,KAAK,CAAC,CAAC,CAAC,EACR,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,yBAAyB,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAC3E;IACH;IAEQ,yBAAyB,CAC/B,aAAsC,EACtC,oBAAyC,EAAA;QAEzC,IAAI,MAAM,GAAG,EAAE;AAEf,QAAA,IAAI,aAAa,YAAY,YAAY,EAAE;AACzC,YAAA,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,IAAI,EAAE;YACrC,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;AAChC,YAAA,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa;AAE5C,YAAA,MAAM,GAAG,CAAA,EAAG,MAAM,IAAI,EAAE,CAAA,GAAA,EAAM,UAAU,IAAI,EAAE,CAAA,CAAA,EAAI,GAAG,IAAI,EAAE,EAAE;QAC/D;aAAO;AACL,YAAA,MAAM,EAAE,OAAO,EAAE,GAAG,aAAa;AAEjC,YAAA,MAAM,GAAG,CAAC,CAAC,OAAO,GAAG,OAAO,GAAG,CAAA,EAAG,aAAa,EAAE;QACnD;QACA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;QAEzD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5C;8GAxDW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACKlC,MAAM,QAAQ,GAAG,SAAS;MAGb,oCAAoC,CAAA;AADjD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AA2J7C,IAAA;;AAxJC,IAAA,8BAA8B,CAC5B,eAAgC,EAChC,MAA2B,EAC3B,UAAiC,EAAA;QAEjC,IAAI,OAAO,GAAG,EAAE,GAAG,eAAe,CAAC,UAAU,EAAE;QAE/C,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,eAAe,CAAC,EAAE;YAC7C,MAAM,eAAe,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,MAAM,CAAC;AAEzE,YAAA,OAAO,GAAG;AACR,gBAAA,GAAG,OAAO;AACV,gBAAA,QAAQ,EAAE,eAAe;aAC1B;QACH;QAEA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC;QAEpE,IACE,MAAM,CAAC,4BAA4B;AACnC,YAAA,eAAe,CAAC,UAAU,EAAE,aAAa,EACzC;AACA,YAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,wBAAwB,EACxB,eAAe,CAAC,UAAU,CAAC,aAAa,EACxC,MAAM,CACP;QACH;AAEA,QAAA,IACE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC;AACnC,YAAA,CAAC,eAAe,CAAC,cAAc,EAC/B;YACA,IAAI,CAAC,mBAAmB,EAAE;QAC5B;aAAO;YACL,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,2BAA2B,CAAC;QAClE;AAEA,QAAA,IAAI,eAAe,CAAC,UAAU,EAAE,KAAK,EAAE;YACrC,MAAM,YAAY,GAAG,CAAA,yCAAA,EAA4C,eAAe,CAAC,UAAU,CAAC,KAAK,CAAA,CAAE;YAEnG,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;YACjD,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;YACpE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,6BAA6B,CAChC,eAAe,CAAC,UAAU,EAC1B,eAAe,CAAC,cAAc,EAC9B,MAAM,CAAC,QAAQ,CAChB;YAED,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD;AAEA,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,YAAA,EAAe,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;AACrB,kDAAA,CAAA,CAC9C;AAED,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,IAAI,CAC1D,GAAG,CAAC,CAAC,OAAgB,KAAK,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,EACjE,UAAU,CAAC,CAAC,GAAG,KAAI;;YAEjB,MAAM,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AAElD,YAAA,IAAI,CAAC,CAAC,aAAa,EAAE;gBACnB,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,MAAM,EACN,CAAA,wDAAA,CAA0D,CAC3D;AAED,gBAAA,OAAO,EAAE,CAAC,aAAa,CAAC;YAC1B;YAEA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;AACzC,QAAA,CAAC,CAAC,EACF,SAAS,CAAC,CAAC,OAAO,KAAI;YACpB,IAAI,OAAO,EAAE;AACX,gBAAA,eAAe,CAAC,OAAO,GAAG,OAAO;AAEjC,gBAAA,OAAO,EAAE,CAAC,eAAe,CAAC;YAC5B;YAEA,MAAM,YAAY,GAAG,CAAA,8BAAA,CAAgC;YAErD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC;YAEnD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;AAClD,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,YAAA,MAAM,YAAY,GAAG,CAAA,2CAAA,EAA8C,GAAG,EAAE;YAExE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,CAAC;YAEnD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD,CAAC,CAAC,CACH;IACH;AAEQ,IAAA,kBAAkB,CAAC,eAAgC,EAAA;AACzD,QAAA,OAAO,CAAC,CAAC,eAAe,EAAE,UAAU,EAAE,QAAQ;IAChD;AAEQ,IAAA,6BAA6B,CACnC,MAAe,EACf,cAAuB,EACvB,QAAiB,EAAA;AAEjB,QAAA,IAAI,gBAAgB,GAAG,gBAAgB,CAAC,sBAAsB;AAE9D,QAAA,IACE,MAAM;YACN,OAAO,MAAM,KAAK,QAAQ;AAC1B,YAAA,OAAO,IAAI,MAAM;AAChB,YAAA,MAAM,CAAC,KAAgB,KAAK,gBAAgB,EAC7C;AACA,YAAA,gBAAgB,GAAG,gBAAgB,CAAC,aAAa;QACnD;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;AAC9C,YAAA,eAAe,EAAE,KAAK;YACtB,gBAAgB;YAChB,cAAc;YACd,QAAQ;AACT,SAAA,CAAC;IACJ;AAEQ,IAAA,sBAAsB,CAAC,MAA2B,EAAA;AACxD,QAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM;QAEpC,OAAO,CAAC,iBAAiB;IAC3B;IAEQ,mBAAmB,GAAA;QACzB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,YAAY,CAC7C,EAAE,EACF,IAAI,CAAC,QAAQ,CAAC,KAAK,EACnB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM;YACvC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAC9C;IACH;IAEQ,gBAAgB,CACtB,OAAgB,EAChB,MAA2B,EAAA;QAE3B,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC;IACjE;AAEQ,IAAA,eAAe,CAAC,MAA2B,EAAA;QACjD,OAAO,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC9D;8GAnKW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oCAAoC,cADvB,MAAM,EAAA,CAAA,CAAA;;2FACnB,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCPrB,kCAAkC,CAAA;AAD/C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AA0C7C,IAAA;;;AAtCC,IAAA,oBAAoB,CAClB,MAA2B,EAC3B,UAAiC,EACjC,IAAa,EAAA;QAEb,MAAM,kBAAkB,GACtB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAEpD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,8BAA8B,CAAC;QACnE,IAAI,CAAC,kBAAkB,EAAE;YACvB,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;QACtE;AAEA,QAAA,IAAI,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAEvD,MAAM,UAAU,GAAG;aAChB,KAAK,CAAC,GAAG;AACT,aAAA,MAAM,CAAC,CAAC,UAAe,EAAE,IAAY,KAAI;YACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC;AAE7B,YAAA,UAAU,CAAC,KAAK,CAAC,KAAK,EAAY,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;AAErD,YAAA,OAAO,UAAU;QACnB,CAAC,EAAE,EAAgB,CAAC;AACtB,QAAA,MAAM,eAAe,GAAoB;AACvC,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,YAAY,EAAE,EAAE;AAChB,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,YAAY,EAAE,IAAI;YAClB,UAAU;AACV,YAAA,cAAc,EAAE,kBAAkB;AAClC,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,eAAe,EAAE,IAAI;SACtB;AAED,QAAA,OAAO,EAAE,CAAC,eAAe,CAAC;IAC5B;8GA7CW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cADrB,MAAM,EAAA,CAAA,CAAA;;2FACnB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,oCAAoC,CAAA;AADjD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAgD7D,IAAA;;AA7CC,IAAA,+BAA+B,CAC7B,MAA2B,EAAA;QAE3B,MAAM,SAAS,GACb,IAAI,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,MAAM,CAAC;QAEnE,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,8CAA8C,GAAG,SAAS,CAC3D;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC;QAExD,IAAI,YAAY,EAAE;AAChB,YAAA,MAAM,eAAe,GAAoB;AACvC,gBAAA,IAAI,EAAE,EAAE;gBACR,YAAY;AACZ,gBAAA,KAAK,EAAE,SAAS;AAChB,gBAAA,YAAY,EAAE,IAAI;AAClB,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,cAAc,EAAE,IAAI;AACpB,gBAAA,OAAO,EAAE,IAAI;AACb,gBAAA,gBAAgB,EAAE,IAAI;AACtB,gBAAA,eAAe,EAAE,OAAO;aACzB;YAED,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,iEAAiE,CAClE;;YAED,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAC5B,sBAAsB,CAAC,4BAA4B,EACnD,MAAM,CACP;AAED,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC;QAC5B;aAAO;YACL,MAAM,YAAY,GAAG,sCAAsC;YAE3D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;YAEjD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD;IACF;8GAlDW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oCAAoC,cADvB,MAAM,EAAA,CAAA,CAAA;;2FACnB,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCIrB,kCAAkC,CAAA;AAD/C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AA6EF,IAAA;;AA1EC,IAAA,0BAA0B,CACxB,eAAgC,EAChC,MAA2B,EAC3B,mBAAkE,EAAA;AAElE,QAAA,IAAI,OAAO,GAAgB,IAAI,WAAW,EAAE;QAE5C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC;AAE1E,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,MAAM,CACP;AACD,QAAA,MAAM,aAAa,GAAG,sBAAsB,EAAE,aAAa;QAE3D,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAClE;AAEA,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,yCAAyC,CACpE,eAAe,CAAC,YAAY,EAC5B,MAAM,EACN,mBAAmB,CACpB;QAED,OAAO,IAAI,CAAC;aACT,IAAI,CAAa,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO;AACrD,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,QAAQ,KAAI;YACrB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,wBAAA,EAA2B,QAAQ,CAAA,CAAE,CACtC;YAED,IAAI,QAAQ,EAAE;AACZ,gBAAA,QAAQ,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK;YACxC;AAEA,YAAA,eAAe,CAAC,UAAU,GAAG,QAAQ;AAErC,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC;QAC5B,CAAC,CAAC,EACF,SAAS,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,EAC5D,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM;AAC5B,YAAA,MAAM,YAAY,GAAG,CAAA,yBAAA,EAA4B,SAAS,EAAE;YAE5D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;YAExD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD,CAAC,CAAC,CACH;IACL;IAEQ,kBAAkB,CACxB,MAA2B,EAC3B,MAA2B,EAAA;QAE3B,OAAO,MAAM,CAAC,IAAI,CAChB,QAAQ,CAAC,CAAC,KAAK,KAAI;;AAEjB,YAAA,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE;AACzB,gBAAA,MAAM,EAAE,SAAS,EAAE,0BAA0B,EAAE,GAAG,MAAM;AACxD,gBAAA,MAAM,YAAY,GAAG,CAAA,yBAAA,EAA4B,SAAS,2BAA2B;gBAErF,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;gBAE1D,OAAO,KAAK,CAAC,CAAC,0BAA0B,IAAI,CAAC,IAAI,IAAI,CAAC;YACxD;AAEA,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,CACH;IACH;8GAlFW,kCAAkC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,cADrB,MAAM,EAAA,CAAA,CAAA;;2FACnB,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCTrB,eAAe,CAAA;IAC1B,mCAAmC,CACjC,MAAsB,EACtB,MAAsB,EAAA;AAEtB,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;AAClC,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;AAClC,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,IAAI,CAAC,kCAAkC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;AAC3D,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YAC7C,OAAO,MAAM,KAAK,MAAM;QAC1B;QAEA,OAAO,IAAI,CAAC,sBAAsB,CAAC,MAAe,EAAE,MAAe,CAAC;IACtE;IAEA,QAAQ,CACN,MAA+C,EAC/C,MAA+C,EAAA;AAE/C,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE;AACtB,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YAC5C,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAe,EAAE,MAAe,CAAC;QACjE;QAEA,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YAC7C,OAAO,MAAM,KAAK,MAAM;QAC1B;QAEA,IAAI,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;YAC7C,QACE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;gBACpC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE;QAExC;QAEA,IAAI,IAAI,CAAC,kCAAkC,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;AAC3D,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AACvD,gBAAA,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM;YAC7B;AACA,YAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AACvD,gBAAA,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM;YAC7B;QACF;QAEA,OAAO,MAAM,KAAK,MAAM;IAC1B;IAEQ,kCAAkC,CACxC,MAA4B,EAC5B,MAA4B,EAAA;AAE5B,QAAA,QACE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;AACpD,aAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;IAEzD;IAEQ,oBAAoB,CAC1B,MAA4B,EAC5B,MAA4B,EAAA;AAE5B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACjE;IAEQ,oBAAoB,CAC1B,MAA4B,EAC5B,MAA4B,EAAA;AAE5B,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IACjE;IAEQ,mBAAmB,CACzB,MAA4B,EAC5B,MAA4B,EAAA;AAE5B,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;IACvD;AAEQ,IAAA,aAAa,CAAC,KAAU,EAAA;QAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,YAAY,MAAM;IAC7D;AAEQ,IAAA,aAAa,CAAC,KAAU,EAAA;AAC9B,QAAA,OAAO,OAAO,KAAK,KAAK,QAAQ;IAClC;IAEQ,iBAAiB,CAAC,IAAmB,EAAE,IAAmB,EAAA;QAChE,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAC/B,YAAA,OAAO,KAAK;QACd;QAEA,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,GAAI;YAC/B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE;AACvB,gBAAA,OAAO,KAAK;YACd;QACF;AAEA,QAAA,OAAO,IAAI;IACb;IAEQ,sBAAsB,CAC5B,IAAmB,EACnB,IAAmB,EAAA;QAEnB,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,MAAM,EAAE;AAC/B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3C;AAEQ,IAAA,iBAAiB,CAAC,GAAQ,EAAA;AAChC,QAAA,OAAO,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;IAC1C;8GA7HW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCArB,qBAAqB,CAAA;IAChC,WAAA,CACS,WAAA,GAAc,EAAE,EAChB,OAAA,GAAU,EAAE,EACZ,mBAAA,GAAsB,KAAK,EAC3B,cAAA,GAAsB;AAC3B,QAAA,OAAO,EAAE,EAAE;KACZ,EACM,KAAA,GAA0B,gBAAgB,CAAC,MAAM,EAAA;QANjD,IAAA,CAAA,WAAW,GAAX,WAAW;QACX,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,mBAAmB,GAAnB,mBAAmB;QACnB,IAAA,CAAA,cAAc,GAAd,cAAc;QAGd,IAAA,CAAA,KAAK,GAAL,KAAK;IACX;AACJ;;MCGY,sBAAsB,CAAA;AADnC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AA8fjD,IAAA;IA5fC,uBAAuB,CACrB,eAAgC,EAChC,aAAkC,EAAA;QAElC,MAAM,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC;AAC3D,QAAA,MAAM,kBAAkB,GAAG,OAAO,CAAC,eAAe,CAAC;AAEnD,QAAA,IAAI,CAAC,kBAAkB,IAAI,QAAQ,EAAE;AACnC,YAAA,OAAO,EAAE,CAAC,IAAI,qBAAqB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACzD;QAEA,OAAO,IAAI,CAAC,aAAa,CAAC,eAAe,EAAE,aAAa,CAAC;IAC3D;IAEQ,aAAa,CACnB,eAAgC,EAChC,aAAkC,EAAA;AAElC,QAAA,MAAM,QAAQ,GAAG,IAAI,qBAAqB,EAAE;AAC5C,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAC1D,kBAAkB,EAClB,aAAa,CACd;AAED,QAAA,IACE,CAAC,IAAI,CAAC,sBAAsB,CAAC,6BAA6B,CACxD,eAAe,CAAC,UAAU,EAAE,KAAK,EACjC,gBAAgB,EAChB,aAAa,CACd,EACD;YACA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,8BAA8B,CAC/B;AACD,YAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,gBAAgB;AAClD,YAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,YAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;QACrB;QAEA,MAAM,wCAAwC,GAC5C,IAAI,CAAC,UAAU,CAAC,wCAAwC,CAAC,aAAa,CAAC;QACzE,MAAM,qBAAqB,GACzB,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,aAAa,CAAC;AAEtD,QAAA,IAAI,wCAAwC,IAAI,qBAAqB,EAAE;YACrE,QAAQ,CAAC,WAAW,GAAG,eAAe,CAAC,UAAU,EAAE,YAAY,IAAI,EAAE;QACvE;AAEA,QAAA,MAAM,wBAAwB,GAAG,aAAa,CAAC,wBAAwB;QAEvE,IAAI,wBAAwB,EAAE;AAC5B,YAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,EAAE;AACpC,YAAA,QAAQ,CAAC,mBAAmB,GAAG,IAAI;AAEnC,YAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;QACrB;QAEA,MAAM,oBAAoB,GACxB,eAAe,CAAC,cAAc,IAAI,CAAC,CAAC,eAAe,CAAC,YAAY;QAClE,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC;AAEhE,QAAA,IAAI,oBAAoB,IAAI,CAAC,UAAU,EAAE;AACvC,YAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,EAAE;AACpC,YAAA,QAAQ,CAAC,mBAAmB,GAAG,IAAI;AAEnC,YAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;QACrB;QAEA,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,EACJ,QAAQ,EACR,gBAAgB,EAChB,mCAAmC,EACnC,0BAA0B,EAC1B,uBAAuB,EACvB,oCAAoC,GACrC,GAAG,aAAa;YAEjB,QAAQ,CAAC,OAAO,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE;AAC7D,YAAA,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CACnE,QAAQ,CAAC,OAAO,EAChB,KAAK,EACL,aAAa,CACd;YAED,OAAO,IAAI,CAAC;iBACT,wBAAwB,CACvB,QAAQ,CAAC,OAAO,EAChB,eAAe,CAAC,OAAO,EACvB,aAAa;AAEd,iBAAA,IAAI,CACH,QAAQ,CAAC,CAAC,uBAAgC,KAAI;gBAC5C,IAAI,CAAC,uBAAuB,EAAE;oBAC5B,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,mDAAmD,CACpD;AACD,oBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,eAAe;AACjD,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,MAAM,SAAS,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACnD,WAAW,EACX,aAAa,CACd;gBAED,IACE,CAAC,IAAI,CAAC,sBAAsB,CAAC,oBAAoB,CAC/C,QAAQ,CAAC,cAAc,EACvB,SAAS,EACT,OAAO,CAAC,uBAAuB,CAAC,EAChC,aAAa,CACd,EACD;oBACA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,mFAAmF,CACpF;AACD,oBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,cAAc;AAChD,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,IACE,CAAC,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,CAClD,QAAQ,CAAC,cAAc,EACvB,aAAa,CACd,EACD;oBACA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,+EAA+E,CAChF;AACD,oBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,uBAAuB;AACzD,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,IACE,CAAC,oBAAoB;oBACrB,CAAC,IAAI,CAAC,sBAAsB,CAAC,2BAA2B,CACtD,QAAQ,CAAC,cAAc,EACvB,mCAAmC,IAAI,GAAG,EAC1C,OAAO,CAAC,0BAA0B,CAAC,EACnC,aAAa,CACd,EACD;oBACA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,8FAA8F,CAC/F;AACD,oBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,gBAAgB;AAClD,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;gBAED,IAAI,sBAAsB,EAAE;oBAC1B,IAAI,gBAAgB,EAAE;wBACpB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,wDAAwD,CACzD;oBACH;AAAO,yBAAA,IACL,CAAC,gBAAgB;AACjB,wBAAA,CAAC,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAC7C,QAAQ,CAAC,cAAc,EACvB,sBAAsB,CAAC,MAAM,EAC7B,aAAa,CACd,EACD;wBACA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,yEAAyE,CAC1E;AACD,wBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,qBAAqB;AACvD,wBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,wBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;oBACrB;gBACF;qBAAO;oBACL,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,qCAAqC,CACtC;AACD,oBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,wBAAwB;AAC1D,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,IACE,CAAC,IAAI,CAAC,sBAAsB,CAAC,kBAAkB,CAC7C,QAAQ,CAAC,cAAc,EACvB,QAAQ,EACR,aAAa,CACd,EACD;oBACA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,4BAA4B,CAC7B;AACD,oBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,YAAY;AAC9C,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,IACE,CAAC,IAAI,CAAC,sBAAsB,CAAC,wCAAwC,CACnE,QAAQ,CAAC,cAAc,CACxB,EACD;oBACA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,0BAA0B,CAC3B;AACD,oBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,YAAY;AAC9C,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,IACE,CAAC,IAAI,CAAC,sBAAsB,CAAC,uBAAuB,CAClD,QAAQ,CAAC,cAAc,EACvB,QAAQ,CACT,EACD;oBACA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,4BAA4B,CAC7B;AACD,oBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,YAAY;AAC9C,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,IACE,CAAC,IAAI,CAAC,sCAAsC,CAC1C,eAAe,EACf,QAAQ,CAAC,cAAc,EACvB,aAAa,CACd,EACD;oBACA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,gEAAgE,CACjE;AACD,oBAAA,QAAQ,CAAC,KAAK;wBACZ,gBAAgB,CAAC,kCAAkC;AACrD,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,IACE,CAAC,oBAAoB;AACrB,oBAAA,CAAC,IAAI,CAAC,sBAAsB,CAAC,4BAA4B,CACvD,QAAQ,CAAC,cAAc,EACvB,aAAa,EACb,oCAAoC,CACrC,EACD;oBACA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,+BAA+B,CAChC;AACD,oBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,YAAY;AAC9C,oBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,OAAO,IAAI,CAAC,eAAe,CACzB,wCAAwC,EACxC,qBAAqB,EACrB,QAAQ,EACR,aAAa,EACb,eAAe,CAChB;YACH,CAAC,CAAC,CACH;QACL;aAAO;YACL,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,iDAAiD,CAClD;QACH;AAEA,QAAA,OAAO,IAAI,CAAC,eAAe,CACzB,wCAAwC,EACxC,qBAAqB,EACrB,QAAQ,EACR,aAAa,EACb,eAAe,CAChB;IACH;IAEQ,eAAe,CACrB,wCAAiD,EACjD,qBAA8B,EAC9B,QAA+B,EAC/B,aAAkC,EAClC,eAAgC,EAAA;;AAGhC,QAAA,IAAI,CAAC,wCAAwC,IAAI,CAAC,qBAAqB,EAAE;AACvE,YAAA,QAAQ,CAAC,mBAAmB,GAAG,IAAI;AACnC,YAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC;AAC9C,YAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,YAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;QACrB;;AAGA,QAAA,IAAI,eAAe,CAAC,UAAU,EAAE,QAAQ,EAAE;AACxC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CAC9D,QAAQ,CAAC,OAAO,EAChB,KAAK,EACL,aAAa,CACd;AAED,YAAA,IACE,qBAAqB;AACrB,gBAAA,CAAE,QAAQ,CAAC,cAAc,CAAC,OAAkB,EAC5C;gBACA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,mEAAmE,CACpE;YACH;iBAAO;gBACL,OAAO,IAAI,CAAC;AACT,qBAAA,qBAAqB,CACpB,QAAQ,CAAC,WAAW,EACpB,QAAQ,CAAC,cAAc,CAAC,OAAO,EAC/B,aAAa,CAAC,GAAG;AACjB,gBAAA,aAAa;AAEd,qBAAA,IAAI,CACH,GAAG,CAAC,CAAC,KAAc,KAAI;oBACrB,IAAI,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE;wBACnC,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,gCAAgC,CACjC;AACD,wBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,eAAe;AACjD,wBAAA,IAAI,CAAC,4BAA4B,CAAC,aAAa,CAAC;AAEhD,wBAAA,OAAO,QAAQ;oBACjB;yBAAO;AACL,wBAAA,QAAQ,CAAC,mBAAmB,GAAG,IAAI;AACnC,wBAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,EAAE;AACpC,wBAAA,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC;AAE9C,wBAAA,OAAO,QAAQ;oBACjB;gBACF,CAAC,CAAC,CACH;YACL;QACF;AAEA,QAAA,QAAQ,CAAC,mBAAmB,GAAG,IAAI;AACnC,QAAA,QAAQ,CAAC,KAAK,GAAG,gBAAgB,CAAC,EAAE;AACpC,QAAA,IAAI,CAAC,0BAA0B,CAAC,aAAa,CAAC;AAE9C,QAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;IACrB;AAEQ,IAAA,sCAAsC,CAC5C,eAAgC,EAChC,UAAe,EACf,aAAkC,EAAA;AAElC,QAAA,MAAM,EAAE,eAAe,EAAE,uCAAuC,EAAE,GAChE,aAAa;QAEf,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE;AACpC,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAChE,eAAe,CAAC,eAAe,EAC/B,KAAK,EACL,aAAa,CACd;;;;;QAQD,IAAI,cAAc,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,EAAE;AACzC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,kBAAA,EAAqB,cAAc,CAAC,GAAG,CAAA,CAAA,EAAI,UAAU,CAAC,GAAG,CAAA,CAAE,CAC5D;AAED,YAAA,OAAO,KAAK;QACd;;;;QAIA,IAAI,cAAc,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,EAAE;AACzC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,kBAAA,EAAqB,cAAc,CAAC,GAAG,CAAA,CAAA,EAAI,UAAU,CAAC,GAAG,CAAA,CAAE,CAC5D;AAED,YAAA,OAAO,KAAK;QACd;;QAEA,IAAI,cAAc,CAAC,GAAG,KAAK,UAAU,CAAC,GAAG,EAAE;AACzC,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,kBAAA,EAAqB,cAAc,CAAC,GAAG,CAAA,CAAA,EAAI,UAAU,CAAC,GAAG,CAAA,CAAE,CAC5D;AAED,YAAA,OAAO,KAAK;QACd;;AAGA,QAAA,IACE,CAAC,IAAI,CAAC,eAAe,CAAC,mCAAmC,CACvD,cAAc,EAAE,GAAG,EACnB,UAAU,EAAE,GAAG,CAChB,EACD;AACA,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,mCAAA,EAAsC,cAAc,EAAE,GAAG,CAAA,GAAA,EAAM,UAAU,CAAC,GAAG,CAAA,CAAA,CAAG,CACjF;AAED,YAAA,OAAO,KAAK;QACd;QAEA,IAAI,uCAAuC,EAAE;AAC3C,YAAA,OAAO,IAAI;QACb;;;;QAKA,IAAI,cAAc,CAAC,SAAS,KAAK,UAAU,CAAC,SAAS,EAAE;AACrD,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,wBAAA,EAA2B,cAAc,CAAC,SAAS,CAAA,CAAA,EAAI,UAAU,CAAC,SAAS,CAAA,CAAE,CAC9E;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,0BAA0B,CAAC,aAAkC,EAAA;AACnE,QAAA,MAAM,EAAE,iCAAiC,EAAE,GAAG,aAAa;QAE3D,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa,CAAC;QAEtE,IAAI,iCAAiC,EAAE;YACrC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,kBAAkB,EAClB,EAAE,EACF,aAAa,CACd;QACH;QACA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,2CAA2C,CAC5C;IACH;AAEQ,IAAA,4BAA4B,CAClC,aAAkC,EAAA;AAElC,QAAA,MAAM,EAAE,iCAAiC,EAAE,GAAG,aAAa;QAE3D,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa,CAAC;QAEtE,IAAI,iCAAiC,EAAE;YACrC,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,kBAAkB,EAClB,EAAE,EACF,aAAa,CACd;QACH;QACA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,+BAA+B,CAAC;IAC7E;8GArgBW,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAtB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,sBAAsB,cADT,MAAM,EAAA,CAAA,CAAA;;2FACnB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCDrB,qCAAqC,CAAA;AADlD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,sBAAsB,GAAG,MAAM,CAAC,sBAAsB,CAAC;AACvD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAuD7C,IAAA;;AApDC,IAAA,uBAAuB,CACrB,eAAgC,EAChC,aAAkC,EAClC,UAAiC,EAAA;QAEjC,OAAO,IAAI,CAAC;AACT,aAAA,uBAAuB,CAAC,eAAe,EAAE,aAAa;AACtD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,gBAAuC,KAAI;AAC9C,YAAA,eAAe,CAAC,gBAAgB,GAAG,gBAAgB;AAEnD,YAAA,IAAI,gBAAgB,CAAC,mBAAmB,EAAE;AACxC,gBAAA,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CACxC,gBAAgB,CAAC,WAAW,EAC5B,eAAe,CAAC,UAAU,EAC1B,aAAa,EACb,UAAU,CACX;AAED,gBAAA,OAAO,eAAe;YACxB;iBAAO;gBACL,MAAM,YAAY,GAAG,CAAA,iEAAA,EAAoE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAA,CAAE;gBAEtH,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC;gBAC1D,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAC9C,aAAa,EACb,UAAU,CACX;AACD,gBAAA,IAAI,CAAC,wBAAwB,CAC3B,eAAe,CAAC,gBAAgB,EAChC,eAAe,CAAC,cAAc,EAC9B,aAAa,CAAC,QAAQ,CACvB;AAED,gBAAA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC;YAC/B;QACF,CAAC,CAAC,CACH;IACL;AAEQ,IAAA,wBAAwB,CAC9B,qBAA4C,EAC5C,cAAuB,EACvB,QAAiB,EAAA;AAEjB,QAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;AAC9C,YAAA,eAAe,EAAE,KAAK;YACtB,gBAAgB,EAAE,qBAAqB,CAAC,KAAK;YAC7C,cAAc;YACd,QAAQ;AACT,SAAA,CAAC;IACJ;8GA3DW,qCAAqC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qCAAqC,cADxB,MAAM,EAAA,CAAA,CAAA;;2FACnB,qCAAqC,EAAA,UAAA,EAAA,CAAA;kBADjD,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,0BAA0B,CAAA;AADvC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAiHrE,IAAA;;AA9GC,IAAA,YAAY,CACV,eAAgC,EAChC,aAAkC,EAClC,UAAiC,EAAA;QAEjC,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,YAAY,EAAE,GAClE,eAAe;AACjB,QAAA,MAAM,EAAE,YAAY,EAAE,4BAA4B,EAAE,GAAG,aAAa;QAEpE,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,IAAI,CAAC,cAAc,IAAI,4BAA4B,EAAE;;AAEnD,gBAAA,IAAI,gBAAgB,EAAE,cAAc,EAAE;AACpC,oBAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CACjC,gBAAgB,CAAC,cAAc,EAC/B,aAAa,EACb,UAAU,CACX;gBACH;YACF;AAEA,YAAA,IAAI,CAAC,cAAc,IAAI,CAAC,YAAY,EAAE;gBACpC,IAAI,CAAC,gBAAgB,CAAC,eAAe,CACnC,UAAU,EAAE,aAAa,EACzB,aAAa,CACd;YACH;YAEA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,cAAc,EAAE,aAAa,CAAC,QAAQ,CAAC;AAE/E,YAAA,OAAO,EAAE,CAAC,eAAe,CAAC;QAC5B;QAEA,OAAO,IAAI,CAAC;AACT,aAAA,4BAA4B,CAC3B,aAAa,EACb,UAAU,EACV,cAAc,EACd,gBAAgB,EAAE,OAAO,EACzB,gBAAgB,EAAE,cAAc;AAEjC,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,QAAQ,KAAI;AACrB,YAAA,IAAI,CAAC,CAAC,QAAQ,EAAE;gBACd,IAAI,CAAC,YAAY,EAAE;oBACjB,IAAI,CAAC,gBAAgB,CAAC,eAAe,CACnC,UAAU,EAAE,aAAa,EACzB,aAAa,CACd;gBACH;gBAEA,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,cAAc,EAAE,aAAa,CAAC,QAAQ,CAAC;AAE/E,gBAAA,OAAO,EAAE,CAAC,eAAe,CAAC;YAC5B;iBAAO;gBACL,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAC9C,aAAa,EACb,UAAU,CACX;gBACD,IAAI,CAAC,2BAA2B,CAAC,gBAAgB,EAAE,cAAc,EAAE,aAAa,CAAC,QAAQ,CAAC;AAC1F,gBAAA,MAAM,YAAY,GAAG,CAAA,kCAAA,EAAqC,QAAQ,EAAE;gBAEpE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC;gBAE1D,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAClD;AACF,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,GAAG,KAAI;AACjB,YAAA,MAAM,YAAY,GAAG,CAAA,0CAAA,EAA6C,GAAG,EAAE;YAEvE,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,aAAa,EAAE,YAAY,CAAC;YAE1D,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD,CAAC,CAAC,CACH;IACL;AAEQ,IAAA,gBAAgB,CACtB,qBAAmD,EACnD,cAAuB,EACvB,QAAiB,EAAA;QAEjB,IAAI,CAAC,qBAAqB,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;AAC9C,YAAA,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,qBAAqB,CAAC,KAAK;YAC7C,cAAc;YACd,QAAQ;AACT,SAAA,CAAC;IACJ;AAEQ,IAAA,2BAA2B,CACjC,qBAAmD,EACnD,cAAuB,EACvB,QAAiB,EAAA;QAEjB,IAAI,CAAC,qBAAqB,EAAE;YAC1B;QACF;AAEA,QAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;AAC9C,YAAA,eAAe,EAAE,KAAK;YACtB,gBAAgB,EAAE,qBAAqB,CAAC,KAAK;YAC7C,cAAc;YACd,QAAQ;AACT,SAAA,CAAC;IACJ;8GArHW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cADb,MAAM,EAAA,CAAA,CAAA;;2FACnB,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCErB,YAAY,CAAA;AADzB,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,8BAA8B,GAAG,MAAM,CACtD,8BAA8B,CAC/B;AACgB,QAAA,IAAA,CAAA,kCAAkC,GAAG,MAAM,CAC1D,kCAAkC,CACnC;AACgB,QAAA,IAAA,CAAA,oCAAoC,GAAG,MAAM,CAC5D,oCAAoC,CACrC;AACgB,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,0BAA0B,CAAC;AACvD,QAAA,IAAA,CAAA,qCAAqC,GAAG,MAAM,CAC7D,qCAAqC,CACtC;AACgB,QAAA,IAAA,CAAA,oCAAoC,GAAG,MAAM,CAC5D,oCAAoC,CACrC;AACgB,QAAA,IAAA,CAAA,kCAAkC,GAAG,MAAM,CAC1D,kCAAkC,CACnC;AA8IF,IAAA;AA5IC,IAAA,uBAAuB,CACrB,UAAkB,EAClB,MAA2B,EAC3B,UAAiC,EAAA;QAEjC,OAAO,IAAI,CAAC;AACT,aAAA,gBAAgB,CAAC,UAAU,EAAE,MAAM;AACnC,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,8BAA8B,CAAC,mBAAmB,CACrD,eAAe,EACf,MAAM,CACP,CACF,EACD,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,oCAAoC,CAAC,8BAA8B,CACtE,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,EACD,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,qCAAqC,CAAC,uBAAuB,CAChE,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,EACD,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAClC,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,CACF;IACL;AAEA,IAAA,kCAAkC,CAChC,YAA6B,EAC7B,MAA2B,EAC3B,UAAiC,EAAA;QAEjC,OAAO,IAAI,CAAC;AACT,aAAA,mBAAmB,CAAC,YAAY,EAAE,MAAM;AACxC,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,oCAAoC,CAAC,8BAA8B,CACtE,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,EACD,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,qCAAqC,CAAC,uBAAuB,CAChE,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,EACD,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAClC,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,CACF;IACL;AAEA,IAAA,2BAA2B,CACzB,MAA2B,EAC3B,UAAiC,EACjC,IAAa,EAAA;QAEb,OAAO,IAAI,CAAC;AACT,aAAA,oBAAoB,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI;AAC7C,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,oCAAoC,CAAC,8BAA8B,CACtE,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,EACD,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,qCAAqC,CAAC,uBAAuB,CAChE,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,EACD,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAClC,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,CACF;IACL;AAEA,IAAA,mBAAmB,CACjB,MAA2B,EAC3B,UAAiC,EACjC,mBAAkE,EAAA;QAElE,OAAO,IAAI,CAAC;aACT,+BAA+B,CAAC,MAAM;AACtC,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,kCAAkC,CAAC,0BAA0B,CAChE,eAAe,EACf,MAAM,EACN,mBAAmB,CACpB,CACF,EACD,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,oCAAoC,CAAC,8BAA8B,CACtE,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,EACD,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,qCAAqC,CAAC,uBAAuB,CAChE,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,EACD,SAAS,CAAC,CAAC,eAAe,KACxB,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAClC,eAAe,EACf,MAAM,EACN,UAAU,CACX,CACF,CACF;IACL;8GAhKW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA,CAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCTrB,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;QAEE,IAAA,CAAA,yBAAyB,GAAwB,IAAI;AAEpC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AA+B7C,IAAA;IA7BC,wBAAwB,GAAA;AACtB,QAAA,OAAO,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC;IAChD;IAEA,sBAAsB,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,yBAAyB,EAAE;AAClC,YAAA,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE;AAC5C,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;QACvC;IACF;AAEA,IAAA,uBAAuB,CAAC,kBAA0B,EAAA;AAChD,QAAA,MAAM,kCAAkC,GAAG,kBAAkB,GAAG,IAAI;AAEpE,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,UAA4B,KAAI;AACrD,YAAA,IAAI,UAA8B;AAElC,YAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,gBAAA,UAAU,GAAG,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAClD,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC,EAC5C,kCAAkC,CACnC;AACH,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,MAAW;gBAChB,aAAa,CAAC,UAAU,CAAC;AAC3B,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;8GAlCW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCQrB,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAoC3D,IAAA;AAlCC,IAAA,6BAA6B,CAC3B,UAAkB,EAClB,MAA2B,EAC3B,UAAiC,EAAA;QAEjC,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,CAAC;AACzE,QAAA,MAAM,EAAE,+BAA+B,EAAE,GAAG,MAAM;AAClD,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,GAAG;AACnD,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,GAAG;QAEzD,OAAO,IAAI,CAAC;AACT,aAAA,uBAAuB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU;AACtD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,eAAe,KAAI;AACtB,YAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC;AACrD,YAAA,IACE,CAAC,+BAA+B;AAChC,gBAAA,CAAC,eAAe,CAAC,cAAc,EAC/B;AACA,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3C;AACF,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC;AACrD,YAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC;AACrD,YAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;AAC7C,YAAA,IAAI,CAAC,+BAA+B,IAAI,CAAC,cAAc,EAAE;AACvD,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC;YAC9C;YAEA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CACH;IACL;8GAvCW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAoC3D,IAAA;AAlCC,IAAA,iCAAiC,CAC/B,MAA2B,EAC3B,UAAiC,EACjC,IAAa,EAAA;QAEb,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,CAAC;QACzE,MAAM,+BAA+B,GAAG,OAAO,CAC7C,MAAM,CAAC,+BAA+B,CACvC;AACD,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,EAAE;AAClD,QAAA,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,EAAE;QAExD,OAAO,IAAI,CAAC;AACT,aAAA,2BAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI;AACpD,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,eAAe,KAAI;AACtB,YAAA,IACE,CAAC,+BAA+B;AAChC,gBAAA,CAAC,eAAe,CAAC,cAAc,EAC/B;AACA,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc,CAAC;YAC3C;AACF,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC;AACrD,YAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;AAC7C,YAAA,IAAI,CAAC,+BAA+B,IAAI,CAAC,cAAc,EAAE;AACvD,gBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,iBAAiB,CAAC;YAC9C;YAEA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CACH;IACL;8GAvCW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CACnD,2BAA2B,CAC5B;AACgB,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAEzD,QAAA,IAAA,CAAA,oBAAoB,GAAG,IAAI,OAAO,EAAQ;AAkD5D,IAAA;AAhDC,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE;IACjD;IAEA,UAAU,CAAC,UAAkB,EAAE,MAA4B,EAAA;QACzD,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,KAAK;QACd;QAEA,OAAO,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,CAAC;IAC9D;AAEA,IAAA,2BAA2B,CACzB,kBAA0B,EAC1B,MAA2B,EAC3B,UAAiC,EAAA;AAEjC,QAAA,IAAI,SAAS,GAAgC,IAAI,UAAU,EAAE;QAE7D,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE;AACjD,YAAA,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,6BAA6B,CACpE,kBAAkB,EAClB,MAAM,EACN,UAAU,CACX;QACH;aAAO,IAAI,IAAI,CAAC,UAAU,CAAC,4BAA4B,CAAC,MAAM,CAAC,EAAE;AAC/D,YAAA,IAAI,kBAAkB,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE;AACrC,gBAAA,MAAM,IAAI,GAAG,kBAAkB,CAAC,SAAS,CACvC,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CACpC;gBAED,SAAS;oBACP,IAAI,CAAC,2BAA2B,CAAC,iCAAiC,CAChE,MAAM,EACN,UAAU,EACV,IAAI,CACL;YACL;iBAAO;gBACL,SAAS;oBACP,IAAI,CAAC,2BAA2B,CAAC,iCAAiC,CAChE,MAAM,EACN,UAAU,CACX;YACL;QACF;AAEA,QAAA,OAAO,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC;IACpE;8GAzDW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCNrB,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAS,WAAW,CAAC;AAK1D,IAAA;IAHC,SAAS,GAAA;AACP,QAAA,OAAO,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC;IAC3C;8GALW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACKlC,MAAM,iBAAiB,GAAG,CAAA,iCAAA,CAAmC;MAGhD,wBAAwB,CAAA;AADrC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC;AAkE5C,IAAA;AAhEC,IAAA,8BAA8B,CAC5B,MAA2B,EAAA;QAE3B,MAAM,EAAE,wBAAwB,EAAE,sBAAsB,GAAG,EAAE,EAAE,GAAG,MAAM;QAExE,IAAI,CAAC,wBAAwB,EAAE;YAC7B,MAAM,YAAY,GAAG,iCAAiC;YAEtD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;YAEjD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD;AAEA,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC,IAAI,CACrE,GAAG,CACD,CAAC,kBAAkB,MAChB;YACC,MAAM,EAAE,kBAAkB,CAAC,MAAM;YACjC,OAAO,EAAE,kBAAkB,CAAC,QAAQ;YACpC,qBAAqB,EAAE,kBAAkB,CAAC,sBAAsB;YAChE,aAAa,EAAE,kBAAkB,CAAC,cAAc;YAChD,gBAAgB,EAAE,kBAAkB,CAAC,iBAAiB;YACtD,kBAAkB,EAAE,kBAAkB,CAAC,oBAAoB;YAC3D,kBAAkB,EAAE,kBAAkB,CAAC,oBAAoB;YAC3D,kBAAkB,EAAE,kBAAkB,CAAC,mBAAmB;YAC1D,qBAAqB,EAAE,kBAAkB,CAAC,sBAAsB;YAChE,WAAW,EACT,kBAAkB,CAAC,qCAAqC;SAChC,CAAA,CAC/B,EACD,GAAG,CAAC,CAAC,wBAAwB,MAAM;AACjC,YAAA,GAAG,wBAAwB;AAC3B,YAAA,GAAG,sBAAsB;AAC1B,SAAA,CAAC,CAAC,EACH,GAAG,CACD,CAAC,kBAAkB,KAAI;AACrB,YAAA,MAAM,MAAM,GAAG,kBAAkB,CAAC,MAAM,IAAI,EAAE;AAC9C,YAAA,MAAM,eAAe,GAAG,MAAM,CAAC,sBAAsB,IAAI,iBAAiB;YAC1E,MAAM,2BAA2B,GAAG,wBAAwB,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC;AAEzF,YAAA,IAAI,CAAC,MAAM,CAAC,6CAA6C,IAAI,MAAM,KAAK,2BAA2B,IAAI,MAAM,KAAK,CAAA,EAAG,2BAA2B,CAAA,CAAA,CAAG,EAAE;gBACnJ,MAAM,YAAY,GAAG,CAAA,mCAAA,EAAsC,kBAAkB,CAAC,MAAM,CAAA,0CAAA,EAA6C,wBAAwB,CAAA,CAAE;gBAE3J,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;AACjD,gBAAA,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC;YAC/B;QACF,CAAC,CACF,CACF;IACH;IAEQ,oBAAoB,CAC1B,iBAAyB,EACzB,MAA2B,EAAA;QAE3B,IAAI,GAAG,GAAG,iBAAiB;AAC3B,QAAA,MAAM,eAAe,GAAG,MAAM,CAAC,sBAAsB,IAAI,iBAAiB;QAE1E,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;AAChD,YAAA,GAAG,GAAG,CAAA,EAAG,iBAAiB,CAAA,EAAG,eAAe,EAAE;QAChD;AAEA,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClD;8GAnEW,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAxB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA,CAAA;;2FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCCrB,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,wBAAwB,CAAC;AAC9C,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AAuCF,IAAA;IArCC,uBAAuB,CACrB,MAA2B,EAC3B,wBAAgD,EAAA;QAEhD,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,wBAAwB,EACxB,wBAAwB,EACxB,MAAM,CACP;IACH;AAEA,IAAA,mCAAmC,CACjC,MAAkC,EAAA;QAElC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,6DAA6D,CAC9D,CACJ;QACH;AAEA,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,IAAI,CACjE,GAAG,CAAC,CAAC,wBAAwB,KAC3B,IAAI,CAAC,uBAAuB,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAC/D,EACD,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAChC,UAAU,CAAC,mBAAmB,EAC9B,IAAI,CACL;YAED,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CACH;IACH;8GA3CW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACP3B,MAAM,cAAc,GAAwB;AACjD,IAAA,SAAS,EAAE,oBAAoB;AAC/B,IAAA,wBAAwB,EAAE,EAAE;AAC5B,IAAA,sBAAsB,EAAE,SAAS;AACjC,IAAA,WAAW,EAAE,oBAAoB;AACjC,IAAA,wCAAwC,EAAE,IAAI;AAC9C,IAAA,QAAQ,EAAE,YAAY;AACtB,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,KAAK,EAAE,sBAAsB;AAC7B,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,qBAAqB,EAAE,oBAAoB;AAC3C,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,cAAc,EAAE,oBAAoB;AACpC,IAAA,2BAA2B,EAAE,EAAE;AAC/B,IAAA,oCAAoC,EAAE,CAAC;AACvC,IAAA,eAAe,EAAE,KAAK;AACtB,IAAA,8BAA8B,EAAE,KAAK;AACrC,IAAA,uBAAuB,EAAE,KAAK;AAC9B,IAAA,cAAc,EAAE,GAAG;AACnB,IAAA,cAAc,EAAE,YAAY;AAC5B,IAAA,iBAAiB,EAAE,eAAe;AAClC,IAAA,YAAY,EAAE,IAAI;AAClB,IAAA,iCAAiC,EAAE,IAAI;AACvC,IAAA,+BAA+B,EAAE,KAAK;IACtC,QAAQ,EAAE,QAAQ,CAAC,IAAI;AACvB,IAAA,gBAAgB,EAAE,KAAK;AACvB,IAAA,6CAA6C,EAAE,KAAK;AACpD,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,mCAAmC,EAAE,GAAG;AACxC,IAAA,0BAA0B,EAAE,KAAK;AACjC,IAAA,uBAAuB,EAAE,EAAE;AAC3B,IAAA,+BAA+B,EAAE,EAAE;AACnC,IAAA,6BAA6B,EAAE,EAAE;AACjC,IAAA,uBAAuB,EAAE,EAAE;AAC3B,IAAA,uCAAuC,EAAE,KAAK;AAC9C,IAAA,gCAAgC,EAAE,IAAI;AACtC,IAAA,qBAAqB,EAAE,CAAC;AACxB,IAAA,0BAA0B,EAAE,CAAC;AAC7B,IAAA,UAAU,EAAE,KAAK;CAClB;;AC/BM,MAAM,0BAA0B,GAAyB;AAC9D,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,QAAQ,EAAE,EAAE;AACZ,IAAA,KAAK,EAAE,MAAM;CACd;;ACbM,MAAM,eAAe,GAAG,CAC7B,YAAiC,KACT;AACxB,IAAA,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE;QAC3B,OAAO;AACL,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,CAAC,2DAA2D,CAAC;AACvE,YAAA,KAAK,EAAE,OAAO;SACf;IACH;AAEA,IAAA,OAAO,0BAA0B;AACnC,CAAC;;ACZM,MAAM,cAAc,GAAG,CAC5B,YAAiC,KACT;AACxB,IAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;QAC1B,OAAO;AACL,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,CAAC,wDAAwD,CAAC;AACpE,YAAA,KAAK,EAAE,OAAO;SACf;IACH;AAEA,IAAA,OAAO,0BAA0B;AACnC,CAAC;;ACZD,MAAM,uBAAuB,GAAG,CAAC,YAAiC,KAAY;IAC5E,IAAI,CAAC,YAAY,EAAE;AACjB,QAAA,OAAO,EAAE;IACX;IAEA,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,YAAY;AAEnD,IAAA,OAAO,GAAG,SAAS,CAAA,EAAG,QAAQ,CAAA,EAAG,KAAK,EAAE;AAC1C,CAAC;AACD,MAAM,kBAAkB,GAAG,CAAC,KAAe,KACzC,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM;AAE/B,MAAM,6BAA6B,GAAG,CAC3C,aAAoC,KACZ;AACxB,IAAA,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAC3E,IAAA,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAE1D,IAAI,aAAa,EAAE;QACjB,OAAO;AACL,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,QAAQ,EAAE;gBACR,CAAA,oGAAA,CAAsG;AACvG,aAAA;AACD,YAAA,KAAK,EAAE,OAAO;SACf;IACH;AAEA,IAAA,MAAM,aAAa,GAAG,kBAAkB,CAAC,cAAc,CAAC;IAExD,IAAI,aAAa,EAAE;QACjB,OAAO;AACL,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,QAAQ,EAAE;gBACR,wEAAwE;AACzE,aAAA;AACD,YAAA,KAAK,EAAE,SAAS;SACjB;IACH;AAEA,IAAA,OAAO,0BAA0B;AACnC,CAAC;;ACzCM,MAAM,kBAAkB,GAAG,CAChC,YAAiC,KACT;AACxB,IAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;QAC7B,OAAO;AACL,YAAA,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,CAAC,0DAA0D,CAAC;AACtE,YAAA,KAAK,EAAE,OAAO;SACf;IACH;AAEA,IAAA,OAAO,0BAA0B;AACnC,CAAC;;ACZM,MAAM,0CAA0C,GAAG,CACxD,YAAiC,KACT;AACxB,IAAA,MAAM,eAAe,GAAG,YAAY,CAAC,WAAW;AAChD,IAAA,MAAM,gBAAgB,GAAG,YAAY,CAAC,eAAe;AACrD,IAAA,MAAM,iBAAiB,GAAG,YAAY,CAAC,cAAc;IAErD,IAAI,eAAe,IAAI,CAAC,gBAAgB,IAAI,CAAC,iBAAiB,EAAE;QAC9D,OAAO;AACL,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,QAAQ,EAAE;gBACR,yEAAyE;AAC1E,aAAA;AACD,YAAA,KAAK,EAAE,OAAO;SACf;IACH;AAEA,IAAA,OAAO,0BAA0B;AACnC,CAAC;;AClBM,MAAM,8BAA8B,GAAG,CAC5C,YAAiC,KACT;AACxB,IAAA,MAAM,eAAe,GAAG,YAAY,CAAC,eAAe;AACpD,IAAA,MAAM,cAAc,GAAG,YAAY,CAAC,WAAW;AAC/C,IAAA,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,IAAI,EAAE;AACtC,IAAA,MAAM,eAAe,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;AAEnE,IAAA,IAAI,eAAe,IAAI,cAAc,IAAI,CAAC,eAAe,EAAE;QACzD,OAAO;AACL,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,QAAQ,EAAE;gBACR,kFAAkF;AACnF,aAAA;AACD,YAAA,KAAK,EAAE,SAAS;SACjB;IACH;AAEA,IAAA,OAAO,0BAA0B;AACnC,CAAC;;ACfM,MAAM,QAAQ,GAAG;IACtB,eAAe;IACf,8BAA8B;IAC9B,kBAAkB;IAClB,cAAc;IACd,0CAA0C;CAC3C;AAEM,MAAM,sBAAsB,GAAG,CAAC,6BAA6B,CAAC;;MCRxD,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAuFvD,IAAA;AArFC,IAAA,eAAe,CAAC,aAAoC,EAAA;QAClD,OAAO,IAAI,CAAC,uBAAuB,CACjC,aAAa,IAAI,EAAE,EACnB,sBAAsB,CACvB;IACH;AAEA,IAAA,cAAc,CAAC,YAAiC,EAAA;QAC9C,OAAO,IAAI,CAAC,sBAAsB,CAAC,YAAY,EAAE,QAAQ,CAAC;IAC5D;IAEQ,uBAAuB,CAC7B,aAAoC,EACpC,aAE4B,EAAA;AAE5B,QAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,MAAM,oBAAoB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAClD,IAAI,CAAC,aAAa,CAAC,CACpB;QACD,IAAI,iBAAiB,GAAG,CAAC;AAEzB,QAAA,aAAa,CAAC,OAAO,CAAC,CAAC,YAAY,KAAI;YACrC,MAAM,UAAU,GAAG,IAAI,CAAC,wCAAwC,CAC9D,oBAAoB,EACpB,YAAY,CACb;YAED,iBAAiB,IAAI,UAAU;AACjC,QAAA,CAAC,CAAC;QAEF,OAAO,iBAAiB,KAAK,CAAC;IAChC;IAEQ,sBAAsB,CAC5B,YAAiC,EACjC,aAE4B,EAAA;AAE5B,QAAA,MAAM,oBAAoB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,KAClD,IAAI,CAAC,YAAY,CAAC,CACnB;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,wCAAwC,CAC9D,oBAAoB,EACpB,YAAY,CACb;QAED,OAAO,UAAU,KAAK,CAAC;IACzB;IAEQ,wCAAwC,CAC9C,oBAA4C,EAC5C,MAA2B,EAAA;AAE3B,QAAA,MAAM,WAAW,GAAG,oBAAoB,CAAC,MAAM,CAC7C,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAC7B;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC;QACxE,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,WAAW,CAAC;AAErE,QAAA,gBAAgB,CAAC,OAAO,CAAC,CAAC,OAAO,KAC/B,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAC7C;AACD,QAAA,WAAW,CAAC,OAAO,CAAC,CAAC,OAAO,KAC1B,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAC/C;QAED,OAAO,gBAAgB,CAAC,MAAM;IAChC;IAEQ,oBAAoB,CAC1B,IAAW,EACX,OAA+B,EAAA;QAE/B,MAAM,WAAW,GAAG;aACjB,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,KAAK,IAAI;aAC9B,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,CAAC;QAEnC,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;IAC9D;8GAvFW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCSrB,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,eAAe,GAAwC,EAAE;AAEhD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,eAAe,CAAC;AAChC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AAgL3E,IAAA;IA9KC,cAAc,GAAA;AACZ,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC;IACrD;IAEA,oBAAoB,GAAA;QAClB,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC;IAC5C;AAEA,IAAA,sBAAsB,CACpB,QAAiB,EAAA;AAEjB,QAAA,IAAI,IAAI,CAAC,mBAAmB,EAAE,EAAE;YAC9B,OAAO,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACrC;QAEA,OAAO,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAChD,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,aAAa,CAAC,CACtC;IACH;AAEA,IAAA,uBAAuB,CAAC,QAAiB,EAAA;AAIvC,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAC5B,SAAS,CAAC,CAAC,UAAU,KAAK,IAAI,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,EACjE,GAAG,CAAC,CAAC,kBAAkB,MAAM;AAC3B,YAAA,UAAU,EAAE,kBAAkB;AAC9B,YAAA,aAAa,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;SACxC,CAAC,CAAC,CACJ;IACH;IAEA,mBAAmB,GAAA;AACjB,QAAA,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,MAAM,GAAG,CAAC;IACrD;AAEQ,IAAA,UAAU,CAAC,WAAgC,EAAA;AACjD,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,WAAW;AAEhC,QAAA,IAAI,CAAC,eAAe,CAAC,QAAkB,CAAC,GAAG,WAAW;IACxD;IAEQ,WAAW,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;IAClC;IAEQ,mBAAmB,GAAA;AACzB,QAAA,OAAO,IAAI,CAAC,mBAAmB,EAAE;IACnC;AAEQ,IAAA,SAAS,CAAC,QAAiB,EAAA;AACjC,QAAA,IAAI,OAAO,CAAC,QAAQ,CAAC,EAAE;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,QAAS,CAAC;AAE9C,YAAA,IAAI,CAAC,MAAM,IAAI,SAAS,EAAE,EAAE;AAC1B,gBAAA,OAAO,CAAC,IAAI,CACV,oEAAoE,QAAQ,CAAA,EAAA,CAAI,CACjF;YACH;YAEA,OAAO,MAAM,IAAI,IAAI;QACvB;QAEA,MAAM,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE3E,OAAO,KAAK,IAAI,IAAI;IACtB;AAEQ,IAAA,qBAAqB,CAC3B,aAAoC,EAAA;QAEpC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;AAChE,YAAA,OAAO,EAAE,CAAC,EAAE,CAAC;QACf;AAEA,QAAA,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;AAEnC,QAAA,MAAM,iBAAiB,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;AAExE,QAAA,OAAO,QAAQ,CAAC,iBAAiB,CAAC,CAAC,IAAI,CACrC,GAAG,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EACvD,GAAG,CAAC,CAAC,CAAC,KAAK,CAA0B,CAAC,CACvC;IACH;AAEQ,IAAA,eAAe,CAAC,aAAoC,EAAA;QAC1D,aAAa,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,KAAI;AACtC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;gBACpB,MAAM,CAAC,QAAQ,GAAG,CAAA,EAAG,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAA,CAAE;YACjD;AACF,QAAA,CAAC,CAAC;IACJ;AAEQ,IAAA,YAAY,CAClB,YAAiC,EAAA;QAEjC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE;YAC9D,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,YAAY,EACZ,+DAA+D,CAChE;AAED,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;AAEA,QAAA,IAAI,CAAC,YAAY,CAAC,wBAAwB,EAAE;AAC1C,YAAA,YAAY,CAAC,wBAAwB,GAAG,YAAY,CAAC,SAAS;QAChE;QAEA,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC;AAEnD,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAE3B,MAAM,uBAAuB,GAC3B,IAAI,CAAC,kCAAkC,CAAC,UAAU,CAAC;QAErD,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAChC,UAAU,CAAC,YAAY,EACvB,uBAAuB,CACxB;AAED,QAAA,OAAO,EAAE,CAAC,UAAU,CAAC;IACvB;AAEQ,IAAA,kCAAkC,CACxC,aAAkC,EAAA;AAElC,QAAA,MAAM,qCAAqC,GACzC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACjC,wBAAwB,EACxB,aAAa,CACd;AAEH,QAAA,IAAI,CAAC,CAAC,qCAAqC,EAAE;AAC3C,YAAA,aAAa,CAAC,sBAAsB;AAClC,gBAAA,qCAAqC;AAEvC,YAAA,OAAO,aAAa;QACtB;AAEA,QAAA,MAAM,4BAA4B,GAAG,aAAa,CAAC,sBAAsB;AAEzE,QAAA,IAAI,CAAC,CAAC,4BAA4B,EAAE;YAClC,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,CAC/C,aAAa,EACb,4BAA4B,CAC7B;AACD,YAAA,aAAa,CAAC,sBAAsB,GAAG,4BAA4B;AAEnE,YAAA,OAAO,aAAa;QACtB;AAEA,QAAA,OAAO,aAAa;IACtB;AAEQ,IAAA,aAAa,CACnB,aAAkC,EAAA;QAElC,MAAM,2BAA2B,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,aAAa,EAAE;AAE3E,QAAA,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAAC;AAEjD,QAAA,OAAO,2BAA2B;IACpC;AAEQ,IAAA,eAAe,CAAC,aAAkC,EAAA;QACxD,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAE;AACtC,YAAA,aAAa,CAAC,iBAAiB,GAAG,KAAK;AACvC,YAAA,aAAa,CAAC,WAAW,GAAG,KAAK;AACjC,YAAA,aAAa,CAAC,eAAe,GAAG,KAAK;AACrC,YAAA,aAAa,CAAC,8BAA8B,GAAG,KAAK;QACtD;IACF;8GA1LW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCRrB,aAAa,CAAA;AAD1B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAC3B,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AAiEvD,IAAA;AA/DC,IAAA,iBAAiB,CAAC,UAAkB,EAAA;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC;AAEjE,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,EAAE;AACxC,YAAA,OAAO,cAAc;QACvB;QAEA,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;AAEzD,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,EAAE;AACtC,YAAA,OAAO,YAAY;QACrB;AAEA,QAAA,OAAO,IAAI;IACb;IAEA,qBAAqB,CACnB,UAAkB,EAClB,MAA2B,EAAA;QAE3B,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AAE3D,QAAA,aAAa,CAAC,EAAE,GAAG,UAAU;AAC7B,QAAA,aAAa,CAAC,KAAK,GAAG,UAAU;QAChC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;AAClD,QAAA,aAAa,CAAC,KAAK,CAAC,OAAO,GAAG,MAAM;QACpC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;AAE7C,QAAA,OAAO,aAAa;IACtB;AAEQ,IAAA,yBAAyB,CAC/B,UAAkB,EAAA;AAElB,QAAA,IAAI;AACF,YAAA,MAAM,aAAa,GACjB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;AAEvE,YAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;AACvC,gBAAA,OAAO,aAAa;YACtB;AAEA,YAAA,OAAO,IAAI;QACb;QAAE,OAAO,EAAE,EAAE;AACX,YAAA,OAAO,IAAI;QACb;IACF;AAEQ,IAAA,mBAAmB,CAAC,UAAkB,EAAA;QAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,UAAU,CAAC;AAE9D,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,EAAE;AACvC,YAAA,OAAO,aAAa;QACtB;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,eAAe,CACrB,OAAuC,EAAA;AAEvC,QAAA,OAAO,CAAC,CAAC,OAAO,IAAI,OAAO,YAAY,iBAAiB;IAC1D;8GAlEW,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAb,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,cADA,MAAM,EAAA,CAAA,CAAA;;2FACnB,aAAa,EAAA,UAAA,EAAA,CAAA;kBADzB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACYlC,MAAM,kCAAkC,GAAG,wBAAwB;AAE5D,MAAM,UAAU,GAAG,CAAC,QAAiB,KAAa,CAAA,EAAG,kCAAkC,CAAA,CAAA,EAAI,QAAQ,EAAE;MAI/F,kBAAkB,CAAA;AAD/B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,0CAA0C,GACzD,IAAI,OAAO,EAAqC;AAMjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CACnD,2BAA2B,CAC5B;AACgB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAwH3D,IAAA;AAtIC,IAAA,IAAI,kCAAkC,GAAA;AACpC,QAAA,OAAO,IAAI,CAAC,0CAA0C,CAAC,YAAY,EAAE;IACvE;AAcA,IAAA,iBAAiB,CAAC,MAA2B,EAAA;;QAE3C,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC;QAC5C,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,QAAQ,CAAC;QAErE,IAAI,CAAC,cAAc,EAAE;YACnB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAA,qBAAA,EAAwB,QAAQ,CAAA,CAAE,CAAC;YAEvE,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAC7C,QAAQ,EACR,MAAM,CACP;QACH;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAA,uBAAA,EAA0B,QAAQ,CAAA,CAAE,CAAC;AAEzE,QAAA,OAAO,cAAc;IACvB;AAEA,IAAA,uBAAuB,CAAC,aAAkC,EAAA;AACxD,QAAA,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,GAAG,aAAa;AAEtD,QAAA,OAAO,CAAC,eAAe,IAAI,OAAO,CAAC,WAAW,CAAC;IACjD;AAEA,IAAA,iCAAiC,CAC/B,QAAkB,EAClB,MAA2B,EAC3B,UAAiC,EAAA;AAEjC,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC;AAC5B,YAAA,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxB,SAAA,CAAC;QACF,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC;QAEtC,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC;AAC9C,gBAAA,eAAe,EAAE,KAAK;gBACtB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;AAChD,gBAAA,cAAc,EAAE,IAAI;gBACpB,QAAQ,EAAE,MAAM,CAAC,QAAQ;AAC1B,aAAA,CAAC;YACF,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;YACpE,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;AAC1C,YAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;YAE7C,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;QAChD;QAEA,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE;QACrC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;QACvC,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;AAChD,QAAA,MAAM,eAAe,GAAoB;YACvC,IAAI;AACJ,YAAA,YAAY,EAAE,EAAE;YAChB,KAAK;YACL,YAAY;AACZ,YAAA,UAAU,EAAE,IAAI;AAChB,YAAA,cAAc,EAAE,IAAI;AACpB,YAAA,OAAO,EAAE,IAAI;AACb,YAAA,gBAAgB,EAAE,IAAI;AACtB,YAAA,eAAe,EAAE,IAAI;SACtB;QAED,OAAO,IAAI,CAAC;AACT,aAAA,kCAAkC,CAAC,eAAe,EAAE,MAAM,EAAE,UAAU;AACtE,aAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE;YAC7C,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;YAEpE,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CACH;IACL;AAEA,IAAA,uBAAuB,CACrB,CAAc,EACd,MAA2B,EAC3B,UAAiC,EAAA;QAEjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;AAC9D,QAAA,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE;YACb;QACF;AAEA,QAAA,IAAI,SAAsC;QAC1C,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC;QAEhE,IAAI,UAAU,EAAE;AACd,YAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC;YAE/C,SAAS,GAAG,IAAI,CAAC,iCAAiC,CAChD,QAAQ,EACR,MAAM,EACN,UAAU,CACX;QACH;aAAO;YACL,SAAS;AACP,gBAAA,IAAI,CAAC,2BAA2B,CAAC,iCAAiC,CAChE,MAAM,EACN,UAAU,EACV,CAAC,CAAC,MAAM,CACT;QACL;QAEA,SAAS,CAAC,SAAS,CAAC;AAClB,YAAA,IAAI,EAAE,CAAC,EAAC,UAAU,EAAC,KAAI;AACrB,gBAAA,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,EAAC,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;AAC5G,gBAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC;YACvD,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,GAAY,KAAI;gBACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,GAAG,CAAC;AACpD,gBAAA,IAAI,CAAC,0CAA0C,CAAC,IAAI,CAAC,EAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAC,CAAC;AACjG,gBAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC;YACvD,CAAC;AACF,SAAA,CAAC;IACJ;8GAzIW,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;2FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCZrB,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC,cAAc,CACjE,IAAI,EACJ,IAAI,CACL;AACgB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;AAqJ7C,IAAA;AAnJC,IAAA,wBAAwB,CACtB,MAA2B,EAC3B,UAAiC,EACjC,YAA2D,EAAA;QAE3D,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,8CAA8C,CAC/C;QAED,OAAO,IAAI,CAAC;AACT,aAAA,+BAA+B,CAAC,MAAM,EAAE,YAAY;AACpD,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,GAAG,KAAI;YAChB,OAAO,IAAI,CAAC,oCAAoC,CAC9C,GAAG,EACH,MAAM,EACN,UAAU,CACX;QACH,CAAC,CAAC,CACH;IACL;AAEQ,IAAA,oCAAoC,CAC1C,GAAkB,EAClB,MAA2B,EAC3B,UAAiC,EAAA;QAEjC,MAAM,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC;AAEvE,QAAA,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;QAC/C,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,8CAAA,EAAiD,GAAG,CAAA,CAAE,CACvD;AAED,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;YACjC,MAAM,aAAa,GAAG,MAAW;AAC/B,gBAAA,aAAa,CAAC,mBAAmB,CAAC,MAAM,EAAE,aAAa,CAAC;gBACxD,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,oCAAoC,CACrC;AACD,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;gBACnB,QAAQ,CAAC,QAAQ,EAAE;AACrB,YAAA,CAAC;AAED,YAAA,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC;YACrD,aAAa,CAAC,aAAa,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;AAC1D,QAAA,CAAC,CAAC;IACJ;IAEQ,sBAAsB,CAC5B,MAA2B,EAC3B,UAAiC,EAAA;AAEjC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE;AAEhC,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,+CAAA,EAAkD,MAAM,CAAC,QAAQ,CAAA,YAAA,EAAe,UAAU,CAAA,CAAE,CAC7F;AAED,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC7C,QAAQ,EACR,wBAAwB,EACxB,CAAC,CAAc,KAAI;AACjB,YAAA,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM;AAE1B,YAAA,IAAI,SAAS,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,IAAI,SAAS,CAAC,UAAU,KAAK,UAAU,EAAE;AACjF,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,oCAAA,EAAuC,MAAM,CAAC,QAAQ,CAAA,gBAAA,EAAmB,UAAU,CAAA,gBAAA,EAAmB,SAAS,CAAC,UAAU,CAAA,CAAA,CAAG,CAC9H;AACD,gBAAA,kBAAkB,EAAE;AACpB,gBAAA,mBAAmB,EAAE;YACvB;AACF,QAAA,CAAC,CACF;AACD,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAC9C,QAAQ,EACR,2BAA2B,EAC3B,CAAC,CAAc,KAAI;YAEjB,IAAI,IAAI,CAAC,yBAAyB,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE;gBAC7C,MAAM,WAAW,GAAG,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAEhD,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC;YAClF;AACF,QAAA,CAAC,CACF;QAGD,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CACtC,IAAI,WAAW,CAAC,wBAAwB,EAAE;AACxC,YAAA,MAAM,EAAE;gBACN,UAAU;gBACV,QAAQ,EAAE,MAAM,CAAC;AAClB;AACF,SAAA,CAAC,CACH;IACH;IAEQ,yBAAyB,CAC/B,CAAc,EACd,MAA2B,EAAA;AAG3B,QAAA,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,yCAAA,EAA4C,CAAC,EAAE,MAAM,CAAA,CAAE,CACxD;AAED,YAAA,OAAO,KAAK;QACd;AAEA,QAAA,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE;AACvB,YAAA,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU;YAEzE,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,kCAAkC,CAAC,CAAC,MAAM,CAAC,UAAU,uBAAuB,MAAM,CAAC,QAAQ,CAAA,cAAA,EAAiB,aAAa,CAAA,CAAE,CAC5H;AAED,YAAA,OAAO,aAAa;QACtB;;QAGA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,+EAA+E,CAChF;AAED,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,oBAAoB,CAAC,CAAc,EAAA;;AAEzC,QAAA,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE;AAClB,YAAA,OAAO,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAC1D;;AAGA,QAAA,OAAO,CAAC;IACV;8GA3JW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCErB,iCAAiC,CAAA;AAD9C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AAyB3D,IAAA;AAvBC,IAAA,+BAA+B,CAC7B,MAA2B,EAC3B,UAAiC,EACjC,mBAAkE,EAAA;QAElE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,iCAAiC,CAAC;QACtE,IAAI,kBAAkB,GAAG,KAAK;QAE9B,OAAO,IAAI,CAAC;AACT,aAAA,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,mBAAmB;AAC3D,aAAA,IAAI,CACH,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;YACpE,kBAAkB,GAAG,IAAI;YAEzB,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,CAAC,CAAC,EACF,QAAQ,CACN,MACE,kBAAkB,IAAI,IAAI,CAAC,eAAe,CAAC,sBAAsB,EAAE,CACtE,CACF;IACL;8GA5BW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjC,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iCAAiC,cADpB,MAAM,EAAA,CAAA,CAAA;;2FACnB,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAD7C,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCUrB,6BAA6B,CAAA;AAD1C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CACnD,2BAA2B,CAC5B;AACgB,QAAA,IAAA,CAAA,iCAAiC,GAAG,MAAM,CACzD,iCAAiC,CAClC;AACgB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AA8MrE,IAAA;IA5MC,gCAAgC,CAC9B,UAAiC,EACjC,aAAkC,EAAA;QAElC,MAAM,6BAA6B,GACjC,IAAI,CAAC,gCAAgC,CAAC,UAAU,CAAC;AAEnD,QAAA,IAAI,6BAA6B,CAAC,MAAM,IAAI,CAAC,EAAE;YAC7C;QACF;AAEA,QAAA,IAAI,IAAI,CAAC,eAAe,CAAC,wBAAwB,EAAE,EAAE;YACnD;QACF;QAEA,MAAM,oBAAoB,GAAG,IAAI,CAAC,iCAAiC,CACjE,6BAA6B,CAC9B;AACD,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC;aAC7B,uBAAuB,CAAC,oBAAoB;AAC5C,aAAA,IAAI,CACH,SAAS,CAAC,MAAK;YACb,MAAM,kCAAkC,GAEpC,EAAE;AAEN,YAAA,6BAA6B,CAAC,OAAO,CAAC,CAAC,MAAM,KAAI;AAC/C,gBAAA,MAAM,UAAU,GAAG,MAAM,CAAC,QAAkB;gBAE5C,kCAAkC,CAAC,UAAU,CAAC;AAC5C,oBAAA,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC;AAC5C,YAAA,CAAC,CAAC;AAEF,YAAA,OAAO,QAAQ,CAAC,kCAAkC,CAAC;QACrD,CAAC,CAAC,CACH;AAEH,QAAA,IAAI,CAAC,eAAe,CAAC,yBAAyB,GAAG;aAC9C,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,KAAK,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D,aAAA,SAAS,CAAC;AACT,YAAA,IAAI,EAAE,CAAC,mBAAmB,KAAI;AAC5B,gBAAA,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE;AAC/D,oBAAA,IAAI,CAAC;yBACF,sBAAsB,CAAC,QAAQ;AAC/B,yBAAA,SAAS,CAAC,CAAC,MAAM,KAAI;wBACpB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,wCAAwC,CACzC;wBAED,IACE,IAAI,CAAC,UAAU,CAAC,sCAAsC,CAAC,MAAM,CAAC,EAC9D;AACA,4BAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC;wBACvD;AACF,oBAAA,CAAC,CAAC;gBACN;YACF,CAAC;AACD,YAAA,KAAK,EAAE,CAAC,KAAK,KAAI;gBACf,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,sBAAsB,EACtB,KAAK,CACN;YACH,CAAC;AACF,SAAA,CAAC;IACN;IAEQ,eAAe,CACrB,MAA2B,EAC3B,UAAiC,EAAA;QAEjC,MAAM,uBAAuB,GAC3B,IAAI,CAAC,qCAAqC,CAAC,MAAM,CAAC;QAEpD,IAAI,CAAC,uBAAuB,EAAE;AAC5B,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,MAAM,aAAa,GAAG,IAAI,CAAC,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC;QAE1E,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,kBAAkB,CAAC;QAEjE,OAAO,aAAa,CAAC,IAAI,CACvB,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,EAAE,KAAK,CAAC;YAClE,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,iBAAiB,EAAE,KAAK,CAAC;AACvE,YAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC;YAErD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CACH;IACH;AAEQ,IAAA,iCAAiC,CACvC,6BAAoD,EAAA;QAEpD,MAAM,MAAM,GAAG,6BAA6B,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,IAAI,KAC7D,CAAC,IAAI,CAAC,qBAAqB,IAAI,CAAC,KAAK,IAAI,CAAC,qBAAqB,IAAI,CAAC;AAClE,cAAE;cACA,IAAI,CACT;AAED,QAAA,OAAO,MAAM,CAAC,qBAAqB,IAAI,CAAC;IAC1C;AAEQ,IAAA,gCAAgC,CACtC,UAAiC,EAAA;AAEjC,QAAA,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;IAChD;IAEQ,2BAA2B,CACjC,aAAkC,EAClC,UAAiC,EAAA;QAEjC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC;QAEtE,OAAO,IAAI,CAAC;AACT,aAAA,sBAAsB,CAAC,aAAa,CAAC,QAAQ;AAC7C,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,MAAM,KAAI;AACnB,YAAA,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;gBACxB,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAC9C,MAAM,EACN,UAAU,CACX;AAED,gBAAA,OAAO,EAAE,CAAC,IAAI,CAAC;YACjB;AAEA,YAAA,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,MAAM,CAAC;YAEnD,IAAI,IAAI,CAAC,UAAU,CAAC,sCAAsC,CAAC,MAAM,CAAC,EAAE;;AAElE,gBAAA,MAAM,mBAAmB,GAGvB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACjC,4BAA4B,EAC5B,MAAM,CACP,IAAI,EAAE;AACT,gBAAA,MAAM,EAAE,+BAA+B,EAAE,GAAG,MAAM;AAClD,gBAAA,MAAM,YAAY,GAAG;AACnB,oBAAA,GAAG,+BAA+B;AAClC,oBAAA,GAAG,mBAAmB;iBACvB;;AAGD,gBAAA,OAAO,IAAI,CAAC,iCAAiC,CAAC,+BAA+B,CAC3E,MAAM,EACN,UAAU,EACV,YAAY,CACb;YACH;;AAGA,YAAA,MAAM,YAAY,GAChB,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACjC,gCAAgC,EAChC,MAAM,CACP;AAEH,YAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,wBAAwB,CAC9D,MAAM,EACN,UAAU,EACV,YAAY,CACb;QACH,CAAC,CAAC,CACH;IACL;AAEQ,IAAA,qCAAqC,CAC3C,MAA2B,EAAA;QAE3B,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC;QACxD,MAAM,oBAAoB,GACxB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,CAAC;QACpD,MAAM,oBAAoB,GACxB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,CAAC;QACpD,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAEvE,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,iCAAiC,oBAAoB,CAAA,wBAAA,EAA2B,oBAAoB,CAAA,gBAAA,EAAmB,CAAC,CAAC,OAAO,CAAA,iBAAA,EAAoB,CAAC,CAAC,iBAAiB,CAAA,CAAE,CAC1K;AAED,QAAA,MAAM,gBAAgB,GACpB,CAAC,CAAC,iBAAiB;AACnB,YAAA,CAAC,oBAAoB;AACrB,YAAA,CAAC,CAAC,OAAO;AACT,YAAA,CAAC,oBAAoB;QAEvB,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,KAAK;QACd;QAEA,MAAM,cAAc,GAClB,IAAI,CAAC,gBAAgB,CAAC,uCAAuC,CAAC,MAAM,CAAC;QACvE,MAAM,kBAAkB,GACtB,IAAI,CAAC,gBAAgB,CAAC,mCAAmC,CAAC,MAAM,CAAC;QAEnE,OAAO,cAAc,IAAI,kBAAkB;IAC7C;8GA/NW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cADhB,MAAM,EAAA,CAAA,CAAA;;2FACnB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACc3B,MAAM,kBAAkB,GAAG,CAAC;MAGtB,qBAAqB,CAAA;AADlC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CACnD,2BAA2B,CAC5B;AACgB,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,iCAAiC,GAAG,MAAM,CACzD,iCAAiC,CAClC;AACgB,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AA6LnD,IAAA;AA3LC,IAAA,uBAAuB,CACrB,MAAkC,EAClC,UAAiC,EACjC,iBAAgE,EAAA;QAEhE,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,6DAA6D,CAC9D,CACJ;QACH;AAEA,QAAA,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,MAAM,CAAC;AAEnD,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACzE,GAAG,CAAC,MAAM,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CACjE;IACH;AAEA,IAAA,mBAAmB,CACjB,MAA2B,EAC3B,UAAiC,EACjC,iBAAgE,EAAA;AAEhE,QAAA,MAAM,EAAE,+BAA+B,EAAE,QAAQ,EAAE,GAAG,MAAM;AAC5D,QAAA,MAAM,YAAY,GAAG;AACnB,YAAA,GAAG,+BAA+B;AAClC,YAAA,GAAG,iBAAiB;SACrB;QAED,IAAI,IAAI,CAAC,UAAU,CAAC,sCAAsC,CAAC,MAAM,CAAC,EAAE;AAClE,YAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,IAAI,CACpE,GAAG,CAAC,MAAK;gBACP,MAAM,eAAe,GACnB,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,MAAM,CAAC;gBAEzD,IAAI,eAAe,EAAE;oBACnB,OAAO;wBACL,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC;wBACjD,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC;wBACzD,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC;wBACvD,eAAe;wBACf,QAAQ;qBACQ;gBACpB;gBAEA,OAAO;AACL,oBAAA,eAAe,EAAE,KAAK;AACtB,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,QAAQ,EAAE,IAAI;AACd,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,WAAW,EAAE,EAAE;oBACf,QAAQ;iBACT;YACH,CAAC,CAAC,CACH;QACH;AAEA,QAAA,MAAM,EAAE,2BAA2B,EAAE,GAAG,MAAM;QAC9C,MAAM,WAAW,GAAG,CAAC,2BAA2B,IAAI,CAAC,IAAI,IAAI;AAE7D,QAAA,OAAO,QAAQ,CAAC;YACd,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC;YAC/D,IAAI,CAAC,kBAAkB,CAAC,kCAAkC,CAAC,IAAI,CAC7D,MAAM,CAAC,CAAC,MAAM,KAAK,MAAM,EAAE,QAAQ,KAAK,MAAM,CAAC,QAAQ,CAAC,EACxD,IAAI,CAAC,CAAC,CAAC,CACR;AACF,SAAA,CAAC,CAAC,IAAI,CACL,OAAO,CAAC,WAAW,CAAC,EACpB,SAAS,CAAC,CAAC,MAAM,KAAI;YACnB,OAAO,MAAM,CAAC,IAAI,CAChB,QAAQ,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;gBACxB,MAAM,eAAe,GAAG,IAAI;AAC5B,gBAAA,MAAM,cAAc,GAAG,KAAK,GAAG,CAAC;AAEhC,gBAAA,IACE,EAAE,KAAK,YAAY,YAAY,CAAC;oBAChC,cAAc,GAAG,kBAAkB,EACnC;oBACA,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;gBAC3C;gBAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,sCAAA,EAAyC,cAAc,CAAA,CAAE,CAC1D;AAED,gBAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC;AAErD,gBAAA,OAAO,KAAK,CAAC,cAAc,GAAG,eAAe,CAAC;YAChD,CAAC,CAAC,CACH;QACH,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAI;YAC5B,MAAM,eAAe,GACnB,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,MAAM,CAAC;YAEzD,IAAI,eAAe,EAAE;AACnB,gBAAA,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,GAAG,gBAAgB,CAAC,UAAU,GAAG,IAAI;gBAEhF,OAAO;AACL,oBAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,IAAI,EAAE;AACnC,oBAAA,WAAW,EAAE,UAAU,EAAE,YAAY,IAAI,EAAE;oBAC3C,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC;oBACvD,eAAe;oBACf,QAAQ;iBACT;YACH;YAEA,OAAO;AACL,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,EAAE;gBACf,QAAQ;aACT;QACH,CAAC,CAAC,CACH;IACH;IAEQ,mBAAmB,CACzB,iBAA2E,EAC3E,MAA2B,EAAA;AAE3B,QAAA,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM;QAElC,IAAI,iBAAiB,EAAE;YACrB,IAAI,eAAe,EAAE;gBACnB,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,4BAA4B,EAC5B,iBAAiB,EACjB,MAAM,CACP;YACH;iBAAO;gBACL,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,gCAAgC,EAChC,iBAAiB,EACjB,MAAM,CACP;YACH;QACF;IACF;AAEQ,IAAA,mBAAmB,CACzB,MAA2B,EAC3B,UAAiC,EACjC,iBAAgE,EAAA;QAEhE,MAAM,oBAAoB,GACxB,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,MAAM,CAAC;QAEpD,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,8BAAA,EAAiC,oBAAoB,CAAA,CAAE,CACxD;AACD,QAAA,MAAM,gBAAgB,GAAG,CAAC,oBAAoB;QAE9C,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,OAAO,IAAI,CAAC;aACT,mCAAmC,CAAC,MAAM;AAC1C,aAAA,IAAI,CACH,SAAS,CAAC,MAAK;AACb,YAAA,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,MAAM,CAAC;YAEnD,IAAI,IAAI,CAAC,UAAU,CAAC,sCAAsC,CAAC,MAAM,CAAC,EAAE;;AAElE,gBAAA,OAAO,IAAI,CAAC,iCAAiC,CAAC,+BAA+B,CAC3E,MAAM,EACN,UAAU,EACV,iBAAiB,CAClB;YACH;AAEA,YAAA,OAAO,IAAI,CAAC,2BAA2B,CAAC,wBAAwB,CAC9D,MAAM,EACN,UAAU,EACV,iBAAiB,CAClB;QACH,CAAC,CAAC,CACH;IACL;8GA5MW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA,CAAA;;2FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACxBlC,MAAM,mCAAmC,GAAG,yBAAyB;AAErE;MAGa,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,oBAAoB,GAAG,KAAK;QAC5B,IAAA,CAAA,yBAAyB,GAAkB,IAAI;QAC/C,IAAA,CAAA,iBAAiB,GAAG,CAAC;QACrB,IAAA,CAAA,mBAAmB,GAAG,CAAC;AAMd,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC1C,QAAA,IAAA,CAAA,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;AACrB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAE3B,IAAA,CAAA,iBAAiB,GAAG,IAAI;QACxB,IAAA,CAAA,qBAAqB,GAAG,KAAK;AAC7B,QAAA,IAAA,CAAA,4BAA4B,GAAG,IAAI,eAAe,CACjE,KAAK,CACN;AAoRF,IAAA;AAlRC,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,4BAA4B,CAAC,YAAY,EAAE;IACzD;IAEA,WAAW,GAAA;QACT,IAAI,CAAC,IAAI,EAAE;AACX,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AAErD,QAAA,IAAI,mBAAmB,IAAI,IAAI,CAAC,0BAA0B,EAAE;YAC1D,mBAAmB,CAAC,mBAAmB,CACrC,SAAS,EACT,IAAI,CAAC,0BAA0B,EAC/B,KAAK,CACN;QACH;IACF;AAEA,IAAA,wBAAwB,CAAC,aAAkC,EAAA;AACzD,QAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,aAAa;AAE3C,QAAA,OAAO,OAAO,CAAC,iBAAiB,CAAC;IACnC;AAEA,IAAA,KAAK,CAAC,aAAkC,EAAA;AACtC,QAAA,IAAI,CAAC,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACpC;QACF;AAEA,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;AAElC,QAAA,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjD;IAEA,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE;YACnC;QACF;QAEA,IAAI,CAAC,uBAAuB,EAAE;AAC9B,QAAA,IAAI,CAAC,oBAAoB,GAAG,KAAK;IACnC;AAEA,IAAA,kBAAkB,CAAC,aAAkC,EAAA;AACnD,QAAA,MAAM,EAAE,iBAAiB,EAAE,GAAG,aAAa;QAE3C,OAAO,OAAO,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,oBAAoB;IAChE;IAEA,iBAAiB,GAAA;QACf,OAAO,IAAI,CAAC,aAAa,CAAC,iBAAiB,CACzC,mCAAmC,CACpC;IACH;AAEQ,IAAA,IAAI,CAAC,aAAkC,EAAA;AAC7C,QAAA,IAAI,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE;YACpE,OAAO,EAAE,EAAE;QACb;AAEA,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;QAED,IAAI,CAAC,sBAAsB,EAAE;YAC3B,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,oFAAoF,CACrF;YAED,OAAO,EAAE,EAAE;QACb;QAEA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC;;;;AAK5D,QAAA,IAAI,CAAC,wBAAwB,CAAC,aAAa,CAAC;AAC5C,QAAA,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,kBAAkB;AACpE,QAAA,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa;QAElD,IAAI,CAAC,kBAAkB,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,gFAAgF,CACjF;YAED,OAAO,EAAE,EAAE;QACb;QAEA,IAAI,CAAC,aAAa,EAAE;YAClB,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,wEAAwE,CACzE;QACH;aAAO;AACL,YAAA,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACpD;AAEA,QAAA,OAAO,IAAI,UAAU,CAAC,CAAC,QAAQ,KAAI;AACjC,YAAA,cAAc,CAAC,MAAM,GAAG,MAAW;AACjC,gBAAA,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE;gBACnC,QAAQ,CAAC,IAAI,EAAE;gBACf,QAAQ,CAAC,QAAQ,EAAE;AACrB,YAAA,CAAC;AACH,QAAA,CAAC,CAAC;IACJ;IAEQ,iBAAiB,CACvB,QAA4B,EAC5B,aAAkC,EAAA;AAElC,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC;QAE5B,MAAM,sBAAsB,GAAG,MAAW;AACxC,YAAA,IAAI,CAAC,IAAI,CAAC,aAAa;AACpB,iBAAA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;iBACZ,SAAS,CAAC,MAAK;AACd,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAE/C,gBAAA,IAAI,cAAc,IAAI,QAAQ,EAAE;AAC9B,oBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,2BAAA,EAA8B,QAAQ,CAAA,qBAAA,EAAwB,cAAc,CAAA,CAAA,CAAG,CAChF;AACD,oBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACtD,eAAe,EACf,aAAa,CACd;AACD,oBAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;AACD,oBAAA,MAAM,aAAa,GAAG,cAAc,CAAC,aAAa;AAElD,oBAAA,IACE,YAAY;AACZ,wBAAA,sBAAsB,EAAE,kBAAkB;AAC1C,wBAAA,aAAa,EACb;wBACA,MAAM,YAAY,GAAG,IAAI,GAAG,CAC1B,sBAAsB,CAAC,kBAAkB,CAC1C,EAAE,MAAM;wBAET,IAAI,CAAC,mBAAmB,EAAE;wBAC1B,aAAa,CAAC,WAAW,CACvB,QAAQ,GAAG,GAAG,GAAG,YAAY,EAC7B,YAAY,CACb;oBACH;yBAAO;wBACL,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,iCAAA,EAAoC,YAAY,CAAA,+BAAA,EAAkC,IAAI,CAAC,SAAS,CAC9F,sBAAsB,EACtB,IAAI,EACJ,CAAC,CACF,CAAA,CAAA,CAAG,CACL;AACD,wBAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;oBAC9C;gBACF;qBAAO;AACL,oBAAA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,CAAA;AACe,2BAAA,EAAA,QAAQ,CAAA,qBAAA,EAAwB,cAAc,CAAA,CAAA,CAAG,CACjE;gBACH;;AAGA,gBAAA,IAAI,IAAI,CAAC,mBAAmB,GAAG,CAAC,EAAE;AAChC,oBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA;AACuC,mDAAA,EAAA,IAAI,CAAC,mBAAmB,CAAA,sBAAA,CAAwB,CACxF;gBACH;AAEA,gBAAA,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAK;AAC/B,oBAAA,IAAI,CAAC,yBAAyB;wBAC5B,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CACpC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAC3C,IAAI,CAAC,iBAAiB,CACvB,IAAI,IAAI;AACb,gBAAA,CAAC,CAAC;AACJ,YAAA,CAAC,CAAC;AACN,QAAA,CAAC;AAED,QAAA,sBAAsB,EAAE;IAC1B;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,yBAAyB,KAAK,IAAI,EAAE;AAC3C,YAAA,YAAY,CAAC,IAAI,CAAC,yBAAyB,CAAC;AAC5C,YAAA,IAAI,CAAC,yBAAyB,GAAG,IAAI;QACvC;IACF;IAEQ,cAAc,CAAC,aAAkC,EAAE,CAAM,EAAA;AAC/D,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC/C,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;AACD,QAAA,MAAM,UAAU,GAAG,CAAC,CAAC,sBAAsB,EAAE,kBAAkB,EAAE,UAAU,CACzE,CAAC,CAAC,MAAM,CACT;AAED,QAAA,IAAI,CAAC,mBAAmB,GAAG,CAAC;AAE5B,QAAA,IACE,cAAc;YACd,UAAU;AACV,YAAA,CAAC,CAAC,MAAM,KAAK,cAAc,CAAC,aAAa,EACzC;AACA,YAAA,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE;gBACtB,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,wDAAwD,CACzD;YACH;AAAO,iBAAA,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE;gBAC/B,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,eAAA,EAAkB,CAAC,CAAA,kCAAA,CAAoC,CACxD;AACD,gBAAA,IAAI,CAAC,oBAAoB,GAAG,IAAI;AAChC,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC;AACpE,gBAAA,IAAI,CAAC,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C;iBAAO;AACL,gBAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC,IAAI,CAAC;AACpE,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,eAAA,EAAkB,CAAC,CAAC,IAAI,CAAA,kCAAA,CAAoC,CAC7D;YACH;QACF;IACF;AAEQ,IAAA,wBAAwB,CAAC,aAAkC,EAAA;AACjE,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW;AAE7C,QAAA,IAAI,IAAI,CAAC,0BAA0B,IAAI,WAAW,EAAE;YAClD,WAAW,CAAC,mBAAmB,CAC7B,SAAS,EACT,IAAI,CAAC,0BAA0B,EAC/B,KAAK,CACN;QACH;AAEA,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CACxD,IAAI,EACJ,aAAa,CACd;QAED,IAAI,WAAW,EAAE;YACf,WAAW,CAAC,gBAAgB,CAC1B,SAAS,EACT,IAAI,CAAC,0BAA0B,EAC/B,KAAK,CACN;QACH;IACF;AAEQ,IAAA,iBAAiB,CACvB,aAAkC,EAAA;AAElC,QAAA,QACE,IAAI,CAAC,iBAAiB,EAAE;YACxB,IAAI,CAAC,aAAa,CAAC,qBAAqB,CACtC,mCAAmC,EACnC,aAAa,CACd;IAEL;8GA1SW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA,CAAA;;2FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCLrB,YAAY,CAAA;AADzB,IAAA,WAAA,GAAA;QAEU,IAAA,CAAA,KAAK,GAAkB,IAAI;QAC3B,IAAA,CAAA,MAAM,GAAG,CAAC,CAAC;AAEF,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAE3B,IAAA,CAAA,kBAAkB,GAAG,WAAW;AAChC,QAAA,IAAA,CAAA,eAAe,GAAG,IAAI,OAAO,EAAe;AAmM9D,IAAA;AAjMC,IAAA,IAAI,OAAO,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE;IAC5C;AAEA,IAAA,IAAY,cAAc,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW;IAClC;AAEA,IAAA,kBAAkB,CAAC,MAA2B,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,uBAAuB,EAAE,EAAE;AAClC,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAC/C,IAAI,CAAC,kBAAkB,EACvB,MAAM,CACP;AACD,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc;YAE5C,IAAI,CAAC,gBAAgB,EAAE;AACrB,gBAAA,OAAO,KAAK;YACd;AAEA,YAAA,QACE,OAAO,CAAC,gBAAgB,CAAC,MAAM,CAAC;gBAChC,gBAAgB,CAAC,MAAM,KAAK,gBAAgB;AAC5C,gBAAA,OAAO,CAAC,KAAK,CAAC;QAElB;AAEA,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,SAAS,CACP,GAAkB,EAClB,YAAsC,EACtC,MAA2B,EAAA;QAE3B,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC;AAEnD,QAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,IAAI,CAAC,kBAAkB,EACvB,MAAM,EACN,MAAM,CACP;AAED,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc;QAE5C,IAAI,CAAC,gBAAgB,EAAE;YACrB;QACF;QAEA,IAAI,CAAC,GAAG,EAAE;YACR,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,oCAAoC,CAAC;YAEzE;QACF;AAEA,QAAA,IAAI,CAAC,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,aAAa,CAAC;AAEhE,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;YACf,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC;YACtE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;YAE3D;QACF;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,GAAG,GAAG,CAAC;AAEnE,QAAA,MAAM,QAAQ,GAAG,CAAC,KAAmB,KAAU;AAC7C,YAAA,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE;AAClD,gBAAA,IAAI,MAAM,CAAC,oCAAoC,EAAE;oBAC/C;gBACF;AACA,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;gBAE9B;YACF;AAEA,YAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,uCAAuC,GAAG,KAAK,CAAC,IAAI,CACrD;AAED,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;AAEzE,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;AAChC,QAAA,CAAC;QAED,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;QAE7D,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,WAAW,CAAC,MAAK;AAC9C,YAAA,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE;AACtB,gBAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;AAEhE,gBAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC;YAChC;QACF,CAAC,EAAE,GAAG,CAAC;IACT;IAEA,uBAAuB,CAAC,GAAW,EAAE,MAA2B,EAAA;AAC9D,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc;QAE5C,IAAI,CAAC,gBAAgB,EAAE;YACrB;QACF;AAEA,QAAA,IAAI,gBAAgB,CAAC,MAAM,EAAE;AAC3B,YAAA,MAAM,IAAI,GAAG,gBAAgB,CAAC,QAAQ,CAAC,IAAI;YAE3C,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,CAAC;QACrC;IACF;IAEQ,OAAO,CAAC,QAAa,EAAE,MAA2B,EAAA;AACxD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc;QAE5C,IAAI,CAAC,gBAAgB,EAAE;YACrB;QACF;QAEA,gBAAgB,CAAC,mBAAmB,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,CAAC;AAChE,QAAA,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;AAE3C,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,yBAAyB,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC;AACtE,YAAA,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE;AAClB,YAAA,IAAI,CAAC,KAAK,GAAG,IAAI;QACnB;IACF;AAEQ,IAAA,WAAW,CACjB,GAAW,EACX,IAAY,EACZ,MAA2B,EAAA;AAE3B,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc;QAE5C,IAAI,CAAC,gBAAgB,EAAE;YACrB;QACF;QAEA,IAAI,CAAC,GAAG,EAAE;YACR,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,yCAAA,EAA4C,GAAG,CAAA,CAAA,CAAG,CACnD;YAED;QACF;QAEA,gBAAgB,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC;IAChD;AAEQ,IAAA,UAAU,CAAC,YAAsC,EAAA;AACvD,QAAA,MAAM,mBAAmB,GAAG;AAC1B,YAAA,KAAK,EAAE,GAAG;AACV,YAAA,MAAM,EAAE,GAAG;AACX,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,GAAG,EAAE,EAAE;SACR;AACD,QAAA,MAAM,OAAO,GAAiB;AAC5B,YAAA,GAAG,mBAAmB;AACtB,YAAA,IAAI,YAAY,IAAI,EAAE,CAAC;SACxB;AACD,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,cAAc;QAE5C,IAAI,CAAC,gBAAgB,EAAE;AACrB,YAAA,OAAO,EAAE;QACX;QAEA,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAAC,KAAK;QACxD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,mBAAmB,CAAC,MAAM;AAC3D,QAAA,MAAM,IAAI,GACR,gBAAgB,CAAC,UAAU,GAAG,CAAC,gBAAgB,CAAC,UAAU,GAAG,KAAK,IAAI,CAAC;AACzE,QAAA,MAAM,GAAG,GACP,gBAAgB,CAAC,SAAS,GAAG,CAAC,gBAAgB,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC;AAE1E,QAAA,OAAO,CAAC,IAAI,GAAG,IAAI;AACnB,QAAA,OAAO,CAAC,GAAG,GAAG,GAAG;AAEjB,QAAA,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO;aAC1B,GAAG,CACF,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KACX,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA,CAAA,EAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA,CAAE;aAE5D,IAAI,CAAC,GAAG,CAAC;IACd;IAEQ,uBAAuB,GAAA;AAC7B,QAAA,QACE,OAAO,SAAS,KAAK,WAAW;AAChC,YAAA,SAAS,CAAC,aAAa;AACvB,YAAA,OAAO,OAAO,KAAK,WAAW;IAElC;8GA7MW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA,CAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCNrB,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,QAAQ,GAAa,MAAM,CAAC,QAAQ,CAAC;AAkBvD,IAAA;AAhBC,IAAA,2BAA2B,CAAC,GAAY,EAAA;QACtC,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,CAAC,aAAa,EAAE;QAE9C,IAAI,CAAC,UAAU,EAAE;AACf,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC;QACrC,MAAM,SAAS,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC;AAEvD,QAAA,OAAO,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC;IAC/B;IAEA,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,IAAI;IAChE;8GAlBW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCmBrB,gBAAgB,CAAA;AAD7B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,QAAA,IAAA,CAAA,6BAA6B,GAAG,MAAM,CACrD,6BAA6B,CAC9B;AACgB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAqTnE,IAAA;AAnTC,IAAA,SAAS,CACP,aAAyC,EACzC,UAAiC,EACjC,GAAY,EAAA;QAEZ,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,6DAA6D,CAC9D,CACJ;QACH;QAEA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,YAAY,CAAC;QAE3D,MAAM,iBAAiB,GACrB,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,GAAG,CAAC;QACzD,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE,GAAG,CAAC;QAEjD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,CAAA,yCAAA,EAA4C,iBAAiB,CAAA,CAAE,CAChE,CACJ;QACH;QAEA,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,UAAU,EAAE,GAAG,CAAC;IACjE;IAEA,iBAAiB,CACf,UAAiC,EACjC,GAAY,EAAA;QAEZ,MAAM,iBAAiB,GACrB,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,GAAG,CAAC;QAEzD,IAAI,iBAAiB,EAAE;YACrB,MAAM,MAAM,GAAG,IAAI,CAAC,4BAA4B,CAC9C,UAAU,EACV,iBAAiB,CAClB;YAED,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,CAAA,yCAAA,EAA4C,iBAAiB,CAAA,CAAE,CAChE,CACJ;YACH;YAEA,OAAO,IAAI,CAAC,2BAA2B,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,CAAC;QAClE;QAEA,MAAM,OAAO,GAAG,UAAU;QAC1B,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,KAC/B,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,CAC1C;AAED,QAAA,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B;IAEA,wBAAwB,CACtB,aAAyC,EACzC,UAAiC,EAAA;QAEjC,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,6DAA6D,CAC9D,CACJ;QACH;AAEA,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,IAAI,CAC7D,SAAS,CAAC,CAAC,aAAa,KAAI;AAC1B,YAAA,MAAM,EAAE,eAAe,EAAE,GAAG,aAAa;YAEzC,IAAI,eAAe,EAAE;AACnB,gBAAA,OAAO,EAAE,CAAC,aAAa,CAAC;YAC1B;YAEA,OAAO,IAAI,CAAC;AACT,iBAAA,mBAAmB,CAAC,aAAa,EAAE,UAAU;AAC7C,iBAAA,IAAI,CACH,GAAG,CAAC,CAAC,gCAAgC,KAAI;AACvC,gBAAA,IAAI,gCAAgC,EAAE,eAAe,EAAE;AACrD,oBAAA,IAAI,CAAC,8BAA8B,CAAC,aAAa,EAAE,UAAU,CAAC;gBAChE;YACF,CAAC,CAAC,CACH;QACL,CAAC,CAAC,CACH;IACH;IAEQ,SAAS,CACf,aAAkC,EAClC,GAAuB,EAAA;QAEvB,MAAM,iBAAiB,GACrB,IAAI,CAAC,iBAAiB,CAAC,2BAA2B,CAAC,GAAG,CAAC;QAEzD,OAAO,OAAO,CAAC,iBAAiB;cAC5B,IAAI,CAAC,4BAA4B,CAAC,CAAC,aAAa,CAAC,EAAE,iBAAiB;cACpE,aAAa;IACnB;AAEQ,IAAA,mBAAmB,CACzB,MAA2B,EAC3B,UAAiC,EACjC,GAAY,EAAA;QAEZ,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,YAAY,GAChB,wEAAwE;YAE1E,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;AAEjD,YAAA,MAAM,MAAM,GAAkB;AAC5B,gBAAA,eAAe,EAAE,KAAK;gBACtB,YAAY;AACZ,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,QAAQ,EAAE,EAAE;aACb;AAED,YAAA,OAAO,EAAE,CAAC,MAAM,CAAC;QACnB;QAEA,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;QAEhE,IAAI,CAAC,UAAU,EAAE;YACf,MAAM,YAAY,GAAG,eAAe;YAEpC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;AAEjD,YAAA,MAAM,MAAM,GAAkB;AAC5B,gBAAA,eAAe,EAAE,KAAK;gBACtB,YAAY;AACZ,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,QAAQ,EAAE,EAAE;aACb;AAED,YAAA,OAAO,EAAE,CAAC,MAAM,CAAC;QACnB;AAEA,QAAA,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM;AAEtC,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,qBAAA,EAAwB,QAAQ,CAAA,SAAA,EAAY,SAAS,CAAA,CAAA,CAAG,CACzD;QAED,IAAI,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;YAChD,IAAI,CAAC,YAAY,CAAC,uBAAuB,CAAC,UAAU,EAAE,MAAM,CAAC;AAE7D,YAAA,MAAM,MAAM,GAAkB;AAC5B,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,YAAY,EAAE,EAAE;AAChB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,QAAQ,EAAE,EAAE;aACb;AAED,YAAA,OAAO,EAAE,CAAC,MAAM,CAAC;QACnB;AAEA,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC;QAEtE,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,gCAAA,EAAmC,UAAU,CAAA,CAAA,CAAG,CACjD;QAED,MAAM,SAAS,GAAG;AAChB,cAAE,IAAI,CAAC,eAAe,CAAC,2BAA2B,CAC9C,UAAU,EACV,MAAM,EACN,UAAU;AAEd,cAAE,EAAE,CAAC,EAAE,CAAC;AAEV,QAAA,OAAO,SAAS,CAAC,IAAI,CACnB,GAAG,CAAC,MAAK;YACP,MAAM,eAAe,GACnB,IAAI,CAAC,gBAAgB,CAAC,yBAAyB,CAAC,MAAM,CAAC;YAEzD,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,yDAAA,EAA4D,eAAe,CAAA,CAAE,CAC9E;YAED,IAAI,eAAe,EAAE;AACnB,gBAAA,IAAI,CAAC,8BAA8B,CAAC,MAAM,EAAE,UAAU,CAAC;gBAEvD,IAAI,CAAC,UAAU,EAAE;AACf,oBAAA,IAAI,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,UAAU,CAAC;oBAC9D,IAAI,CAAC,WAAW,CAAC,uBAAuB,CAAC,MAAM,EAAE,UAAU,CAAC;gBAC9D;YACF;YACA,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,UAAU,CAAC,oBAAoB,CAAC;AAEnE,YAAA,MAAM,MAAM,GAAkB;gBAC5B,eAAe;gBACf,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC;gBACvD,WAAW,EAAE,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC;gBACzD,OAAO,EAAE,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC;gBACjD,QAAQ;aACT;AAED,YAAA,OAAO,MAAM;QACf,CAAC,CAAC,EACF,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,KAAI;YAC1B,IAAI,eAAe,EAAE;AACnB,gBAAA,IAAI,CAAC,gBAAgB,CAAC,kCAAkC,CAAC,MAAM,CAAC;YAClE;QACF,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,KAAI;YACzB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;YAC5C,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAChC,UAAU,CAAC,6BAA6B,EACxC,OAAO,CACR;AAED,YAAA,MAAM,MAAM,GAAkB;AAC5B,gBAAA,eAAe,EAAE,KAAK;AACtB,gBAAA,YAAY,EAAE,OAAO;AACrB,gBAAA,QAAQ,EAAE,IAAI;AACd,gBAAA,OAAO,EAAE,EAAE;AACX,gBAAA,WAAW,EAAE,EAAE;gBACf,QAAQ;aACT;AAED,YAAA,OAAO,EAAE,CAAC,MAAM,CAAC;QACnB,CAAC,CAAC,CACH;IACH;IAEQ,8BAA8B,CACpC,MAA2B,EAC3B,UAAiC,EAAA;QAEjC,IAAI,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE;AAC7D,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC;QACxC;QAEA,IAAI,CAAC,6BAA6B,CAAC,gCAAgC,CACjE,UAAU,EACV,MAAM,CACP;QAED,IAAI,IAAI,CAAC,kBAAkB,CAAC,uBAAuB,CAAC,MAAM,CAAC,EAAE;AAC3D,YAAA,IAAI,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAM,CAAC;QACnD;IACF;IAEQ,4BAA4B,CAClC,cAAqC,EACrC,YAA2B,EAAA;QAE3B,IAAI,CAAC,YAAY,EAAE;AACjB,YAAA,OAAO,IAAI;QACb;AAEA,QAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;AACnC,YAAA,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CACrD,kBAAkB,EAClB,MAAM,CACP;AAED,YAAA,IAAI,WAAW,KAAK,YAAY,EAAE;AAChC,gBAAA,OAAO,MAAM;YACf;QACF;AAEA,QAAA,OAAO,IAAI;IACb;AAEQ,IAAA,2BAA2B,CACjC,cAAqC,EACrC,YAAiC,EACjC,GAAY,EAAA;AAEZ,QAAA,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,CAC3C,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,CAC5C;AACD,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAClD,YAAY,EACZ,cAAc,EACd,GAAG,CACJ;QACD,MAAM,qBAAqB,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,MAAM,KAAI;AAC3D,YAAA,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM;YAE9B,OAAO,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,CAAC;AACtE,QAAA,CAAC,CAAC;QAEF,OAAO,QAAQ,CAAC,CAAC,mBAAmB,EAAE,GAAG,qBAAqB,CAAC,CAAC;IAClE;8GArUW,gBAAgB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAhB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,gBAAgB,cADH,MAAM,EAAA,CAAA,CAAA;;2FACnB,gBAAgB,EAAA,UAAA,EAAA,CAAA;kBAD5B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MChBrB,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,QAAQ,GAAG,MAAM,CAAW,QAAQ,CAAC;AAKvD,IAAA;AAHC,IAAA,UAAU,CAAC,GAAW,EAAA;QACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG;IACnC;8GALW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCGrB,6BAA6B,CAAA;AAD1C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAkBjD,IAAA;AAhBC,IAAA,0BAA0B,CAAC,aAAkC,EAAA;QAC3D,IAAI,IAAI,CAAC,UAAU,CAAC,4BAA4B,CAAC,aAAa,CAAC,EAAE;AAC/D,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,aAAa,CAAC,EAAE;AACxD,YAAA,OAAO,IAAI;QACb;QAEA,IAAI,CAAC,aAAa,CAAC,UAAU,CAC3B,aAAa,EACb,4FAA4F,CAC7F;AAED,QAAA,OAAO,KAAK;IACd;8GAnBW,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,6BAA6B,cADhB,MAAM,EAAA,CAAA,CAAA;;2FACnB,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBADzC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCQrB,UAAU,CAAA;AADvB,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AAgEF,IAAA;IA9DC,cAAc,CACZ,aAAkC,EAClC,WAAyB,EAAA;AAEzB,QAAA,IAAI,OAAO,GAAgB,IAAI,WAAW,EAAE;QAE5C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC;AAE1E,QAAA,MAAM,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAChE,wBAAwB,EACxB,aAAa,CACd;QAED,IAAI,CAAC,sBAAsB,EAAE;YAC3B,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,0EAA0E,CAC3E,CACJ;QACH;AAEA,QAAA,MAAM,WAAW,GAAG,sBAAsB,CAAC,WAAW;QAEtD,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CAAC,yDAAyD,CAAC,CACvE;QACH;QAEA,OAAO,IAAI,CAAC;AACT,aAAA,+BAA+B,CAAC,aAAa,EAAE,WAAW;AAC1D,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,IAAI,KAAI;YACjB,OAAO,IAAI,CAAC;iBACT,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO;iBAC9C,IAAI,CACH,KAAK,CAAC,CAAC,CAAC,EACR,GAAG,CAAC,CAAC,QAAa,KAAI;gBACpB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,gBAAgB,EAChB,QAAQ,CACT;gBAED,OAAO;oBACL,SAAS,EAAE,QAAQ,CAAC,UAAU;oBAC9B,UAAU,EAAE,QAAQ,CAAC,WAAW;iBACjC;AACH,YAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;gBACnB,MAAM,YAAY,GAAG,CAAA,+CAAA,CAAiD;gBAEtE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,KAAK,CAAC;gBAE/D,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAClD,CAAC,CAAC,CACH;QACL,CAAC,CAAC,CACH;IACL;8GArEW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cADG,MAAM,EAAA,CAAA,CAAA;;2FACnB,UAAU,EAAA,UAAA,EAAA,CAAA;kBADtB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCOrB,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,6BAA6B,GAAG,MAAM,CACrD,6BAA6B,CAC9B;AACgB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAuIjD,IAAA;IArIC,QAAQ,CACN,aAAkC,EAClC,WAAyB,EAAA;QAEzB,IACE,CAAC,IAAI,CAAC,6BAA6B,CAAC,0BAA0B,CAC5D,aAAa,CACd,EACD;YACA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,wBAAwB,CAAC;YAEpE;QACF;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,yCAAyC,CAC1C;AAED,QAAA,IAAI,CAAC;aACF,mCAAmC,CAAC,aAAa;AACjD,aAAA,IAAI,CACH,SAAS,CAAC,MACR,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAC3D;AAEF,aAAA,SAAS,CAAC,CAAC,QAAQ,KAAI;YACtB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,gBAAgB,EAAE,QAAQ,CAAC;AAEtE,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAC5C,QAAQ,CAAC,UAAU,EACnB,aAAa,CACd;YAED,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,EAAE,GAAG,CAAC;YAEpE,IAAI,CAAC,GAAG,EAAE;AACR,gBAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,gCAAA,EAAmC,QAAQ,CAAC,UAAU,CAAA,GAAA,EAAM,GAAG,CAAA,CAAA,CAAG,CACnE;gBAED;YACF;AAEA,YAAA,IAAI,WAAW,EAAE,UAAU,EAAE;AAC3B,gBAAA,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC;YAC7B;iBAAO;AACL,gBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC;YACtC;AACF,QAAA,CAAC,CAAC;IACN;AAEA,IAAA,iBAAiB,CACf,aAAkC,EAClC,UAAiC,EACjC,WAAyB,EACzB,YAA2B,EAAA;AAE3B,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;QAElC,IACE,CAAC,IAAI,CAAC,6BAA6B,CAAC,0BAA0B,CAC5D,aAAa,CACd,EACD;YACA,MAAM,YAAY,GAAG,wBAAwB;YAE7C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;YAExD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,oDAAoD,CACrD;QAED,OAAO,IAAI,CAAC;aACT,mCAAmC,CAAC,aAAa;aACjD,IAAI,CACH,SAAS,CAAC,MACR,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,aAAa,EAAE,WAAW,CAAC,CAC3D,EACD,SAAS,CAAC,CAAC,QAAqB,KAAI;YAClC,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,CAAA,cAAA,EAAiB,QAAQ,CAAA,CAAE,CAC5B;AAED,YAAA,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAC5C,QAAQ,CAAC,UAAU,EACnB,aAAa,CACd;YAED,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,mBAAmB,EAAE,GAAG,CAAC;YAEpE,IAAI,CAAC,GAAG,EAAE;AACR,gBAAA,MAAM,YAAY,GAAG,CAAA,gCAAA,EAAmC,QAAQ,CAAC,UAAU,SAAS;gBAEpF,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;gBAExD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAClD;YAEA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,EAAE,YAAY,EAAE,aAAa,CAAC;AAE7D,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CACnC,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,CAAC,MAAmB,KAAI;AAChC,gBAAA,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM;gBAE1C,IAAI,UAAU,EAAE;AACd,oBAAA,OAAO,EAAE,CAAC;AACR,wBAAA,eAAe,EAAE,KAAK;AACtB,wBAAA,YAAY,EAAE,mBAAmB;AACjC,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,WAAW,EAAE,EAAE;wBACf,QAAQ;AACT,qBAAA,CAAC;gBACJ;AAEA,gBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CACpC,aAAa,EACb,UAAU,EACV,WAAW,CACZ;YACH,CAAC,CAAC,CACH;QACH,CAAC,CAAC,CACH;IACL;8GAhJW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCFrB,iBAAiB,CAAA;AAD9B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,6BAA6B,GAAG,MAAM,CACrD,6BAA6B,CAC9B;AACgB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAiE7D,IAAA;AA/DC,IAAA,sBAAsB,CACpB,aAAkC,EAClC,UAAiC,EACjC,WAAyB,EACzB,YAA2B,EAAA;AAE3B,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,aAAa;QAElC,IACE,CAAC,IAAI,CAAC,6BAA6B,CAAC,0BAA0B,CAC5D,aAAa,CACd,EACD;YACA,MAAM,YAAY,GAAG,wBAAwB;YAE7C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,CAAC;YAExD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,oDAAoD,CACrD;QAED,OAAO,IAAI,CAAC;aACT,mCAAmC,CAAC,aAAa;AACjD,aAAA,IAAI,CACH,SAAS,CAAC,MACR,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,aAAa,EAAE,WAAW,CAAC,CAC5D,EACD,GAAG,CAAC,CAAC,OAAO,KACV,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,EAAE,aAAa,CAAC,CAClE,EACD,SAAS,CAAC,MAAK;AACb,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CACnC,IAAI,CAAC,CAAC,CAAC,EACP,SAAS,CAAC,CAAC,MAAmB,KAAI;AAChC,gBAAA,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,MAAM;gBAE1C,IAAI,UAAU,EAAE;AACd,oBAAA,MAAM,QAAQ,GAAkB;AAC9B,wBAAA,eAAe,EAAE,KAAK;AACtB,wBAAA,YAAY,EAAE,mBAAmB;AACjC,wBAAA,QAAQ,EAAE,IAAI;AACd,wBAAA,OAAO,EAAE,EAAE;AACX,wBAAA,WAAW,EAAE,EAAE;wBACf,QAAQ;qBACT;AAED,oBAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;gBACrB;AAEA,gBAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,SAAS,CACpC,aAAa,EACb,UAAU,EACV,WAAW,CACZ;YACH,CAAC,CAAC,CACH;QACH,CAAC,CAAC,CACH;IACL;8GAxEW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAjB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCJrB,oBAAoB,CAAA;AADjC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,6BAA6B,GAAG,MAAM,CACrD,6BAA6B,CAC9B;AACgB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAkD7D,IAAA;IAhDC,aAAa,CACX,aAAkC,EAClC,WAAyB,EAAA;QAEzB,IACE,CAAC,IAAI,CAAC,6BAA6B,CAAC,0BAA0B,CAC5D,aAAa,CACd,EACD;YACA,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,wBAAwB,CAAC;YAEpE;QACF;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,yCAAyC,CAC1C;AACD,QAAA,IAAI,CAAC,gBAAgB,CAAC,qBAAqB,CAAC,aAAa,CAAC;AAE1D,QAAA,IAAI,CAAC;aACF,mCAAmC,CAAC,aAAa;aACjD,SAAS,CAAC,MAAK;AACd,YAAA,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,IAAI,EAAE;AAExC,YAAA,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,aAAa,CAAC;AAE5D,YAAA,IAAI,CAAC;AACF,iBAAA,eAAe,CAAC,aAAa,EAAE,WAAW;AAC1C,iBAAA,SAAS,CAAC,CAAC,GAAG,KAAI;gBACjB,IAAI,CAAC,GAAG,EAAE;oBACR,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,sBAAsB,EACtB,GAAG,CACJ;oBAED;gBACF;gBAEA,IAAI,UAAU,EAAE;oBACd,UAAU,CAAC,GAAG,CAAC;gBACjB;qBAAO;AACL,oBAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,GAAG,CAAC;gBACtC;AACF,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;8GAzDW,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;2FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCGrB,YAAY,CAAA;AADzB,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,CAAC;AAC7C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AA+ErD,IAAA;IA7EC,KAAK,CACH,aAAyC,EACzC,WAAyB,EAAA;QAEzB,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D;QACH;AAEA,QAAA,MAAM,EAAE,8BAA8B,EAAE,GAAG,aAAa;AAExD,QAAA,IAAI,WAAW,EAAE,YAAY,EAAE;AAC7B,YAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,gCAAgC,EAChC,WAAW,CAAC,YAAY,EACxB,aAAa,CACd;QACH;QAEA,IAAI,8BAA8B,EAAE;YAClC,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC;QAClE;aAAO;YACL,OAAO,IAAI,CAAC,oBAAoB,CAAC,aAAa,CAC5C,aAAa,EACb,WAAW,CACZ;QACH;IACF;AAEA,IAAA,cAAc,CACZ,aAAyC,EACzC,UAAiC,EACjC,WAAyB,EACzB,YAA2B,EAAA;QAE3B,IAAI,CAAC,aAAa,EAAE;AAClB,YAAA,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D;QACH;QAEA,MAAM,gBAAgB,GACpB,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,aAAa,CAAC;QAErD,IAAI,gBAAgB,EAAE;AACpB,YAAA,OAAO,EAAE,CAAC;AACR,gBAAA,YAAY,EAAE,gCAAgC;AAC9B,aAAA,CAAC;QACrB;AAEA,QAAA,MAAM,EAAE,8BAA8B,EAAE,GAAG,aAAa;AAExD,QAAA,IAAI,WAAW,EAAE,YAAY,EAAE;AAC7B,YAAA,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAClC,gCAAgC,EAChC,WAAW,CAAC,YAAY,EACxB,aAAa,CACd;QACH;QAEA,IAAI,8BAA8B,EAAE;AAClC,YAAA,OAAO,IAAI,CAAC,eAAe,CAAC,iBAAiB,CAC3C,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,CACb;QACH;AAEA,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,sBAAsB,CAClD,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,CACb;IACH;8GArFW,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAZ,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,YAAY,cADC,MAAM,EAAA,CAAA,CAAA;;2FACnB,YAAY,EAAA,UAAA,EAAA,CAAA;kBADxB,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACZ5B,SAAU,4BAA4B,CAAC,GAAQ,EAAA;AACnD,IAAA,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE;AAEvB,IAAA,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;AACrB,QAAA,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;AAC/C,YAAA,OAAO,IAAI,CAAC,GAAG,CAAC;QAClB;IACF;AAEA,IAAA,OAAO,IAAI;AACb;;MCMa,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,yBAAyB,GAAG,MAAM,CACjD,yBAAyB,CAC1B;AACgB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AA2Q3D,IAAA;;;AAvQC,IAAA,MAAM,CACJ,MAAkC,EAClC,UAAiC,EACjC,iBAAqC,EAAA;QAErC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,6DAA6D,CAC9D,CACJ;QACH;QAEA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,qBAAqB,EACrB,iBAAiB,CAClB;QAED,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,iBAAiB,IAAI,EAAE;AAC5D,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,gBAAgB,CACpD,MAAM,EACN,YAAY,CACb;QAED,IAAI,CAAC,aAAa,EAAE;YAClB,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,+DAA+D,CAChE;AAED,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,IAAI,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE;YACvD,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,2DAA2D,CAC5D;AAED,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,MAAM,EACN,CAAA,+DAAA,EAAkE,aAAa,CAAA,CAAA,CAAG,CACnF;YACD,UAAU,CAAC,aAAa,CAAC;YACzB,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;AAEpE,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;AAEA,QAAA,OAAO,IAAI,CAAC,cAAc,CACxB,iBAAiB,EACjB,aAAa,EACb,MAAM,EACN,UAAU,CACX;IACH;IAEA,WAAW,CACT,MAAkC,EAClC,UAAiC,EAAA;QAEjC,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;AACpE,QAAA,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE;IACjC;AAEA,IAAA,mBAAmB,CAAC,UAAiC,EAAA;AACnD,QAAA,UAAU,CAAC,OAAO,CAAC,CAAC,aAAa,KAC/B,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CAC5C;IACH;;;AAIA,IAAA,qBAAqB,CACnB,MAAkC,EAClC,UAAiC,EACjC,iBAAqC,EAAA;QAErC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,6DAA6D,CAC9D,CACJ;QACH;AAEA,QAAA,MAAM,EAAE,kBAAkB,EAAE,GAC1B,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,wBAAwB,EAAE,MAAM,CAAC;AACrE,YAAA,EAAE;QAEJ,IAAI,CAAC,kBAAkB,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,mCAAmC,CAAC;YAExE,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC;QAC3D;QAEA,IAAI,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE;AAC1D,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CACzC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,EAChD,UAAU,CAAC,CAAC,KAAK,KAAI;gBACnB,MAAM,YAAY,GAAG,CAAA,mBAAA,CAAqB;gBAE1C,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;gBAExD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;AAClD,YAAA,CAAC,CAAC,EACF,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CACpE;QACH;aAAO;AACL,YAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,IAAI,CACxC,UAAU,CAAC,CAAC,KAAK,KAAI;gBACnB,MAAM,YAAY,GAAG,CAAA,yBAAA,CAA2B;gBAEhD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC;gBAExD,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;AAClD,YAAA,CAAC,CAAC,EACF,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,iBAAiB,CAAC,CAAC,CACpE;QACH;IACF;;;;;IAMA,iBAAiB,CACf,aAAyC,EACzC,WAAiB,EAAA;QAEjB,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,6DAA6D,CAC9D,CACJ;QACH;QAEA,MAAM,SAAS,GACb,WAAW;AACX,YAAA,IAAI,CAAC,yBAAyB,CAAC,cAAc,CAAC,aAAa,CAAC;AAC9D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,uCAAuC,CAClE,SAAS,EACT,aAAa,CACd;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC;IACpD;;;;;IAMA,kBAAkB,CAChB,aAAyC,EACzC,YAAkB,EAAA;QAElB,IAAI,CAAC,aAAa,EAAE;YAClB,OAAO,UAAU,CACf,MACE,IAAI,KAAK,CACP,6DAA6D,CAC9D,CACJ;QACH;QAEA,MAAM,UAAU,GACd,YAAY;AACZ,YAAA,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,aAAa,CAAC;AAC/D,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,wCAAwC,CACnE,UAAU,EACV,aAAa,CACd;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,IAAI,CAAC;IACpD;AAEQ,IAAA,cAAc,CACpB,iBAAgD,EAChD,aAAqB,EACrB,MAA2B,EAC3B,UAAiC,EAAA;QAEjC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,iBAAiB,IAAI,EAAE;AAE9D,QAAA,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,KAAK,EAAE;AAC3C,YAAA,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,aAAa,CAAC;YAE9C,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;AAEpE,YAAA,OAAO,EAAE,CAAC,IAAI,CAAC;QACjB;QAEA,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,YAAY,IAAI,EAAE;AAC7D,QAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,yBAAyB,CAAC,UAAU,CAAC,MAAM,CAAC;QACjE,MAAM,qBAAqB,GACzB,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,MAAM,CAAC;AAClD,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;AACjC,QAAA,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,MAAM,CAAC;AAC7D,QAAA,MAAM,IAAI,GAAG;AACX,YAAA,aAAa,EAAE,OAAO;AACtB,YAAA,SAAS,EAAE,QAAQ;AACnB,YAAA,wBAAwB,EAAE,qBAAqB;YAC/C,KAAK;YACL,WAAW;YACX,UAAU;SACX;AACD,QAAA,MAAM,0BAA0B,GAAG,4BAA4B,CAAC,IAAI,CAAC;QAErE,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,MAAM,EAAE,UAAU,CAAC;AAEpE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAC1B,GAAG,EACH,0BAA0B,EAC1B,MAAM,EACN,OAAO,CACR;IACH;IAEQ,iBAAiB,CACvB,aAAkC,EAClC,IAAmB,EAAA;QAEnB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,wBAAwB,CAAC,aAAa,CAAC;AACnE,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE;QAEjC,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,CAAC,CAAC,IAAI,CAClE,KAAK,CAAC,CAAC,CAAC,EACR,SAAS,CAAC,CAAC,QAAa,KAAI;YAC1B,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,aAAa,EACb,qCAAqC,EACrC,QAAQ,CACT;AAED,YAAA,OAAO,EAAE,CAAC,QAAQ,CAAC;AACrB,QAAA,CAAC,CAAC,EACF,UAAU,CAAC,CAAC,KAAK,KAAI;YACnB,MAAM,YAAY,GAAG,CAAA,yBAAA,CAA2B;YAEhD,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,KAAK,CAAC;YAE/D,OAAO,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAClD,CAAC,CAAC,CACH;IACH;IAEQ,UAAU,GAAA;AAChB,QAAA,IAAI,OAAO,GAAgB,IAAI,WAAW,EAAE;QAE5C,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,mCAAmC,CAAC;AAE1E,QAAA,OAAO,OAAO;IAChB;8GAnRW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCYrB,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACjD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACjC,QAAA,IAAA,CAAA,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,CAAC;AAC/C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;AACzC,QAAA,IAAA,CAAA,uBAAuB,GAAG,MAAM,CAAC,uBAAuB,CAAC;AACzD,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACrD,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;AAC/B,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AAYpE;;;;;AAKG;AACH,QAAA,IAAA,CAAA,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAe1D;;;;;;;;AAQG;AACH,QAAA,IAAA,CAAA,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;AAievE,IAAA;AAzgBC;;;;;AAKG;AACH,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS;IACnC;AAUA;;;;;;;;AAQG;AACH,IAAA,IAAI,gBAAgB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,cAAc;IAC7C;AAaA;;;AAGG;AACH,IAAA,IAAI,oBAAoB,GAAA;AACtB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,oBAAoB;IACtD;AAEA;;AAEG;AACH,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY;IAC1C;AAEA,IAAA,4BAA4B,CAC1B,QAAiB,EAAA;QAEjB,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;AAC/B,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,MAAM,KACf,IAAI,CAAC,oBAAoB,CAAC,mCAAmC,CAAC,MAAM,CAAC,CACtE,CACF;IACL;AAEA;;;;AAIG;IACH,iBAAiB,GAAA;AACf,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,EAAE;IACzD;AAEA;;;;AAIG;AACH,IAAA,gBAAgB,CAAC,QAAiB,EAAA;QAChC,OAAO,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,QAAQ,CAAC;IACnE;AAEA;;;;AAIG;AACH,IAAA,WAAW,CAAC,QAAiB,EAAA;QAC3B,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;AAC/B,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE;AAEA;;;;;;;;;AASG;IACH,SAAS,CAAC,GAAY,EAAE,QAAiB,EAAA;QACvC,OAAO,IAAI,CAAC;aACT,uBAAuB,CAAC,QAAQ;aAChC,IAAI,CACH,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,KACtC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,aAAa,EAAE,UAAU,EAAE,GAAG,CAAC,CAChE,CACF;IACL;AAEA;;;;;;;;;AASG;AACH,IAAA,iBAAiB,CAAC,GAAY,EAAA;QAC5B,OAAO,IAAI,CAAC;AACT,aAAA,uBAAuB;aACvB,IAAI,CACH,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,KACvB,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,UAAU,EAAE,GAAG,CAAC,CACzD,CACF;IACL;AAEA;;;;;;AAMG;AACH,IAAA,eAAe,CAAC,QAAiB,EAAA;QAC/B,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;AAC/B,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE;AAEA;;AAEG;AACH,IAAA,wBAAwB,CAAC,QAAiB,EAAA;QACxC,OAAO,IAAI,CAAC;aACT,uBAAuB,CAAC,QAAQ;aAChC,IAAI,CACH,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,KACtC,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAC5C,aAAa,EACb,UAAU,CACX,CACF,CACF;IACL;AAEA;;;;;;AAMG;AACH,IAAA,cAAc,CAAC,QAAiB,EAAA;QAC9B,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;AAC/B,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACxE;AAEA;;;;;;AAMG;AACH,IAAA,UAAU,CAAC,QAAiB,EAAA;QAC1B,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;AAC/B,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACpE;AAEA;;;;;;AAMG;AACH,IAAA,eAAe,CAAC,QAAiB,EAAA;QAC/B,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;AAC/B,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE;AAEA;;;;;;AAMG;AACH,IAAA,uBAAuB,CAAC,QAAiB,EAAA;QACvC,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;AAC/B,aAAA,IAAI,CACH,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,MAAM,CAAC,CAAC,CACvE;IACL;AAEA;;;;;;;AAOG;AACH,IAAA,qBAAqB,CAAC,MAAM,GAAG,KAAK,EAAE,QAAiB,EAAA;AACrD,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,IAAI,CACpE,GAAG,CAAC,CAAC,MAAM,KAAI;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC;AAEtD,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAChD,KAAK,EACL,MAAM,EACN,MAAM,CACP;QACH,CAAC,CAAC,CACH;IACH;AAEA;;;;;;;AAOG;AACH,IAAA,yBAAyB,CACvB,MAAM,GAAG,KAAK,EACd,QAAiB,EAAA;AAEjB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,IAAI,CACpE,GAAG,CAAC,CAAC,MAAM,KAAI;YACb,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,MAAM,CAAC;AAE1D,YAAA,OAAO,IAAI,CAAC,kBAAkB,CAAC,mBAAmB,CAChD,KAAK,EACL,MAAM,EACN,MAAM,CACP;QACH,CAAC,CAAC,CACH;IACH;AAEA;;;;;AAKG;IACH,QAAQ,CAAC,KAAa,EAAE,QAAiB,EAAA;QACvC,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;aAC/B,IAAI,CACH,GAAG,CAAC,CAAC,MAAM,KACT,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,CAAC,CACzD,CACF;IACL;AAEA;;;;;;AAMG;AACH,IAAA,QAAQ,CAAC,QAAiB,EAAA;QACxB,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;AAC/B,aAAA,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC7E;AAEA;;;;;AAKG;IACH,SAAS,CAAC,QAAiB,EAAE,WAAyB,EAAA;AACpD,QAAA,IAAI,CAAC;aACF,sBAAsB,CAAC,QAAQ;AAC/B,aAAA,SAAS,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACxE;AAEA;;;;;;;;AAQG;AACH,IAAA,kBAAkB,CAChB,WAAyB,EACzB,YAA2B,EAC3B,QAAiB,EAAA;QAEjB,OAAO,IAAI,CAAC;aACT,uBAAuB,CAAC,QAAQ;AAChC,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,KACtC,IAAI,CAAC,YAAY,CAAC,cAAc,CAC9B,aAAa,EACb,UAAU,EACV,WAAW,EACX,YAAY,CACb,CACF,CACF;IACL;AAEA;;;;;;;AAOG;IACH,mBAAmB,CACjB,YAA2D,EAC3D,QAAiB,EAAA;QAEjB,OAAO,IAAI,CAAC;aACT,uBAAuB,CAAC,QAAQ;aAChC,IAAI,CACH,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,KACtC,IAAI,CAAC,qBAAqB,CAAC,uBAAuB,CAChD,aAAa,EACb,UAAU,EACV,YAAY,CACb,CACF,CACF;IACL;AAEA;;;;;;;;;AASG;IACH,qBAAqB,CACnB,QAAiB,EACjB,iBAAqC,EAAA;QAErC,OAAO,IAAI,CAAC;aACT,uBAAuB,CAAC,QAAQ;aAChC,IAAI,CACH,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,KACtC,IAAI,CAAC,uBAAuB,CAAC,qBAAqB,CAChD,aAAa,EACb,UAAU,EACV,iBAAiB,CAClB,CACF,CACF;IACL;AAEA;;;;;;AAMG;IACH,MAAM,CACJ,QAAiB,EACjB,iBAAqC,EAAA;QAErC,OAAO,IAAI,CAAC;aACT,uBAAuB,CAAC,QAAQ;aAChC,IAAI,CACH,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,KACtC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CACjC,aAAa,EACb,UAAU,EACV,iBAAiB,CAClB,CACF,CACF;IACL;AAEA;;;;;AAKG;AACH,IAAA,WAAW,CAAC,QAAiB,EAAA;AAC3B,QAAA,IAAI,CAAC;aACF,uBAAuB,CAAC,QAAQ;aAChC,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,EAAE,KACvC,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,aAAa,EAAE,UAAU,CAAC,CACpE;IACL;AAEA;;;AAGG;IACH,mBAAmB,GAAA;AACjB,QAAA,IAAI,CAAC;AACF,aAAA,uBAAuB;AACvB,aAAA,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,KACxB,IAAI,CAAC,uBAAuB,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAC7D;IACL;AAEA;;;;;;;;;AASG;IACH,iBAAiB,CAAC,WAAiB,EAAE,QAAiB,EAAA;QACpD,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;aAC/B,IAAI,CACH,SAAS,CAAC,CAAC,MAAM,KACf,IAAI,CAAC,uBAAuB,CAAC,iBAAiB,CAAC,MAAM,EAAE,WAAW,CAAC,CACpE,CACF;IACL;AAEA;;;;;;;;;AASG;IACH,kBAAkB,CAAC,YAAkB,EAAE,QAAiB,EAAA;QACtD,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;aAC/B,IAAI,CACH,SAAS,CAAC,CAAC,MAAM,KACf,IAAI,CAAC,uBAAuB,CAAC,kBAAkB,CAAC,MAAM,EAAE,YAAY,CAAC,CACtE,CACF;IACL;AAEA;;;;;;;AAOG;IACH,gBAAgB,CACd,YAAyD,EACzD,QAAiB,EAAA;QAEjB,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;aAC/B,IAAI,CACH,GAAG,CAAC,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CACxE;IACL;AAEA;;;;;;;AAOG;IACH,eAAe,CACb,YAAyD,EACzD,QAAiB,EAAA;QAEjB,OAAO,IAAI,CAAC;aACT,sBAAsB,CAAC,QAAQ;AAC/B,aAAA,IAAI,CACH,SAAS,CAAC,CAAC,MAAM,KACf,IAAI,CAAC,UAAU,CAAC,eAAe,CAC7B,MAAM,EACN,YAAY,GAAG,EAAE,YAAY,EAAE,GAAG,SAAS,CAC5C,CACF,CACF;IACL;8GAvhBW,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,cADN,MAAM,EAAA,CAAA,CAAA;;2FACnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCtBrB,4BAA4B,CAAA;AAChC,IAAA,IAAI,CAAC,GAAW,EAAA;AACrB,QAAA,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC;IACpC;IAEO,KAAK,CAAC,GAAW,EAAE,KAAa,EAAA;AACrC,QAAA,cAAc,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;IACpC;AAEO,IAAA,MAAM,CAAC,GAAW,EAAA;AACvB,QAAA,cAAc,CAAC,UAAU,CAAC,GAAG,CAAC;IAChC;IAEO,KAAK,GAAA;QACV,cAAc,CAAC,KAAK,EAAE;IACxB;8GAfW,4BAA4B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA5B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,cADf,MAAM,EAAA,CAAA,CAAA;;2FACnB,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBADxC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;SCsBlB,WAAW,CACzB,YAAiC,EACjC,GAAG,QAAuB,EAAA;AAE1B,IAAA,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC;AAE5C,IAAA,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;QAC9B,SAAS,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IACvC;AAEA,IAAA,OAAO,wBAAwB,CAAC,SAAS,CAAC;AAC5C;AAEM,SAAU,YAAY,CAAC,YAAiC,EAAA;IAC5D,OAAO;;AAEL,QAAA,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,YAAY,EAAE;;QAGlD,YAAY,EAAE,MAAM,IAAI;AACtB,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,UAAU,EAAE,kBAAkB;YAC9B,IAAI,EAAE,CAAC,aAAa,CAAC;AACtB,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,uBAAuB;AAChC,YAAA,QAAQ,EAAE,4BAA4B;AACvC,SAAA;AACD,QAAA,EAAE,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,oBAAoB,EAAE;KACnE;AACH;AAEA;;;;;;;;AAQG;SACa,2BAA2B,GAAA;IACzC,OAAO;AACL,QAAA,UAAU,EAAE;AACV,YAAA;AACE,gBAAA,OAAO,EAAE,eAAe;AACxB,gBAAA,UAAU,EAAE,CAAC,mBAAwC,KAAK,MACxD,mBAAmB,CAAC,iBAAiB,EAAE;AACzC,gBAAA,KAAK,EAAE,IAAI;gBACX,IAAI,EAAE,CAAC,mBAAmB,CAAC;AAC5B,aAAA;AACF,SAAA;KACF;AACH;;MC/Da,UAAU,CAAA;IACrB,OAAO,OAAO,CACZ,YAAiC,EAAA;QAEjC,OAAO;AACL,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,SAAS,EAAE,CAAC,GAAG,YAAY,CAAC,YAAY,CAAC,CAAC;SAC3C;IACH;8GARW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAV,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,YAHX,YAAY,CAAA,EAAA,CAAA,CAAA;+GAGX,UAAU,EAAA,SAAA,EAFV,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC,EAAA,OAAA,EAAA,CAD9C,YAAY,CAAA,EAAA,CAAA,CAAA;;2FAGX,UAAU,EAAA,UAAA,EAAA,CAAA;kBANtB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,EAAE;oBACX,OAAO,EAAE,CAAC,YAAY,CAAC;AACvB,oBAAA,SAAS,EAAE,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,CAAC,CAAC;AACzD,iBAAA;;;ACAD;;AAEG;MAEU,uBAAuB,CAAA;AADpC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AA2CzC,IAAA;IAzCC,OAAO,GAAA;AACL,QAAA,MAAM,GAAG,GACP,IAAI,CAAC;AACF,aAAA,iBAAiB;cAChB,YAAY,CAAC,QAAQ;AACtB,aAAA,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;QAEvB,OAAOA,WAAS,CACd,GAAG,EACH,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,YAAY,CAClB;IACH;IAEA,WAAW,CACT,KAA6B,EAC7B,KAA0B,EAAA;QAE1B,OAAOA,WAAS,CACd,KAAK,CAAC,GAAG,EACT,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,YAAY,CAClB;IACH;IAEA,gBAAgB,CACd,KAA6B,EAC7B,KAA0B,EAAA;QAE1B,OAAOA,WAAS,CACd,KAAK,CAAC,GAAG,EACT,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,YAAY,CAClB;IACH;8GA/CW,uBAAuB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAvB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,uBAAuB,cADV,MAAM,EAAA,CAAA,CAAA;;2FACnB,uBAAuB,EAAA,UAAA,EAAA,CAAA;kBADnC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;AAmDlC,SAASA,WAAS,CAChB,GAAW,EACX,oBAA0C,EAC1C,gBAAkC,EAClC,gBAAkC,EAClC,YAA0B,EAAA;AAE1B,IAAA,OAAO,oBAAoB,CAAC,sBAAsB,EAAE,CAAC,IAAI,CACvD,SAAS,CAAC,CAAC,MAAM,KAAI;AACnB,QAAA,MAAM,UAAU,GAAG,oBAAoB,CAAC,oBAAoB,EAAE;QAE9D,OAAO,gBAAgB,CAAC,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,IAAI,CACxD,IAAI,CAAC,CAAC,CAAC,EACP,GAAG,CAAC,CAAC,EAAE,eAAe,EAAE,KAAI;YAC1B,IAAI,eAAe,EAAE;AACnB,gBAAA,gBAAgB,CAAC,kCAAkC,CAAC,MAAM,CAAC;YAC7D;YAEA,IAAI,CAAC,eAAe,EAAE;AACpB,gBAAA,gBAAgB,CAAC,iBAAiB,CAAC,MAAM,EAAE,GAAG,CAAC;AAC/C,gBAAA,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC;YAC5B;AAEA,YAAA,OAAO,eAAe;QACxB,CAAC,CAAC,CACH;IACH,CAAC,CAAC,CACH;AACH;;MCjFa,2BAA2B,CAAA;AADxC,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACnC,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAqDzC,IAAA;IAnDC,OAAO,GAAA;AACL,QAAA,MAAM,GAAG,GACP,IAAI,CAAC;AACF,aAAA,iBAAiB;cAChB,YAAY,CAAC,QAAQ;AACtB,aAAA,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;QAEvB,OAAO,SAAS,CACd,GAAG,EACH,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,YAAY,CAClB;IACH;IAEA,WAAW,CACT,KAA6B,EAC7B,KAA0B,EAAA;AAE1B,QAAA,MAAM,WAAW,GAA4B,KAAK,EAAE;AAClD,cAAE,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI;cAC1B,SAAS;QAEb,OAAO,SAAS,CACd,KAAK,CAAC,GAAG,EACT,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,YAAY,EACjB,WAAW,CACZ;IACH;IAEA,gBAAgB,CACd,KAA6B,EAC7B,KAA0B,EAAA;AAE1B,QAAA,MAAM,WAAW,GAA4B,KAAK,EAAE;AAClD,cAAE,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI;cAC1B,SAAS;QAEb,OAAO,SAAS,CACd,KAAK,CAAC,GAAG,EACT,IAAI,CAAC,oBAAoB,EACzB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,YAAY,EACjB,WAAW,CACZ;IACH;8GAzDW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;SA6DlB,2BAA2B,CACzC,KAA8B,EAC9B,KAA2B,EAC3B,QAAiB,EAAA;AAEjB,IAAA,MAAM,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACzD,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACjD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AACzC,IAAA,MAAM,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACjD,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,WAAW,GAA4B,KAAK,EAAE;AAClD,UAAE,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI;UAC1B,SAAS;AACb,IAAA,MAAM,GAAG,GACP,MAAM,CAAC,iBAAiB,EAAE,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,EAAE;AAExE,IAAA,OAAO,SAAS,CACd,GAAG,EACH,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,QAAQ,CACT;AACH;AAEM,SAAU,qCAAqC,CACnD,QAAgB,EAAA;AAKhB,IAAA,OAAO,CAAC,KAA8B,EAAE,KAA2B,KACjE,2BAA2B,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC;AACvD;AAEA,SAAS,SAAS,CAChB,GAAW,EACX,oBAA0C,EAC1C,gBAAkC,EAClC,gBAAkC,EAClC,YAA0B,EAC1B,WAAyB,EACzB,QAAiB,EAAA;AAEjB,IAAA,OAAO,oBAAoB,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC,IAAI,CAC/D,GAAG,CAAC,CAAC,aAAa,KAAI;QACpB,MAAM,eAAe,GACnB,gBAAgB,CAAC,yBAAyB,CAAC,aAAa,CAAC;QAE3D,IAAI,eAAe,EAAE;AACnB,YAAA,gBAAgB,CAAC,kCAAkC,CAAC,aAAa,CAAC;QACpE;QAEA,IAAI,CAAC,eAAe,EAAE;AACpB,YAAA,gBAAgB,CAAC,iBAAiB,CAAC,aAAa,EAAE,GAAG,CAAC;YACtD,IAAI,WAAW,EAAE;AACf,gBAAA,YAAY,CAAC,KAAK,CAAC,aAAa,EAAE,WAAW,CAAC;YAChD;iBAAO;AACL,gBAAA,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;YACnC;QACF;AAEA,QAAA,OAAO,eAAe;IACxB,CAAC,CAAC,CACH;AACH;;AC9IM,SAAU,YAAY,CAAC,KAAc,EAAA;AACzC,IAAA,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,SAAS,EAAE,IAAI,KACd,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EACnE,EAAE,CACH;AACH;;ACNA;;;AAGG;AACG,SAAU,gBAAgB,CAAC,KAAa,EAAA;AAC5C,IAAA,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC;AAExC,IAAA,OAAO,IAAI,MAAM,CAAC,IAAI,YAAY,CAAA,CAAA,CAAG,CAAC;AACxC;AAEA;;AAEG;AACH,SAAS,YAAY,CAAC,KAAa,EAAA;AACjC,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;AACzE;;MCVa,2BAA2B,CAAA;IACtC,kCAAkC,CAChC,KAAa,EACb,cAAqC,EAAA;AAErC,QAAA,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE;AACnC,YAAA,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM;YAC/B,MAAM,aAAa,GAAG,CAAC,YAAY,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,WAAW,KAC1D,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CACtC;YAED,IAAI,aAAa,EAAE;gBACjB,OAAO;oBACL,aAAa;AACb,oBAAA,cAAc,EAAE,MAAM;iBACvB;YACH;QACF;QAEA,OAAO;AACL,YAAA,aAAa,EAAE,IAAI;AACnB,YAAA,cAAc,EAAE,IAAI;SACrB;IACH;IAEQ,YAAY,CAAC,eAAuB,EAAE,KAAa,EAAA;AACzD,QAAA,QACE,KAAK,CAAC,UAAU,CAAC,eAAe,CAAC;YACjC,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,KAAK,CAAC;IAE7C;IAEQ,YAAY,CAAC,eAAuB,EAAE,KAAa,EAAA;AACzD,QAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,eAAe,CAAC;AAE/C,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC;IAC1B;8GApCW,2BAA2B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA3B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,2BAA2B,cADd,MAAM,EAAA,CAAA,CAAA;;2FACnB,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCarB,eAAe,CAAA;AAD5B,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,gBAAgB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAC3C,QAAA,IAAA,CAAA,oBAAoB,GAAG,MAAM,CAAC,oBAAoB,CAAC;AACnD,QAAA,IAAA,CAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;AACrC,QAAA,IAAA,CAAA,2BAA2B,GAAG,MAAM,CACnD,2BAA2B,CAC5B;AAaF,IAAA;IAXC,SAAS,CACP,GAAqB,EACrB,IAAiB,EAAA;AAEjB,QAAA,OAAO,gBAAgB,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE;YACxC,oBAAoB,EAAE,IAAI,CAAC,oBAAoB;YAC/C,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;YACvC,2BAA2B,EAAE,IAAI,CAAC,2BAA2B;YAC7D,aAAa,EAAE,IAAI,CAAC,aAAa;AAClC,SAAA,CAAC;IACJ;8GAlBW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAf,eAAe,EAAA,CAAA,CAAA;;2FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B;;SAsBe,eAAe,GAAA;AAC7B,IAAA,OAAO,CAAC,GAAG,EAAE,IAAI,KAAI;AACnB,QAAA,OAAO,gBAAgB,CAAC,GAAG,EAAE,IAAI,EAAE;AACjC,YAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC;AAClD,YAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;AAC1C,YAAA,2BAA2B,EAAE,MAAM,CAAC,2BAA2B,CAAC;AAChE,YAAA,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;AACrC,SAAA,CAAC;AACJ,IAAA,CAAC;AACH;AAEA,SAAS,gBAAgB,CACvB,GAAqB,EACrB,IAAmB,EACnB,IAKC,EAAA;IAED,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,EAAE,EAAE;AACpD,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB;IAEA,MAAM,iBAAiB,GAAG,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,EAAE;AAC1E,IAAA,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,GAAG,CAC/C,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,IAAI,EAAE,CAC5B;AACD,IAAA,MAAM,uBAAuB,GAAG,YAAY,CAAC,mBAAmB,CAAC;AAEjE,IAAA,IAAI,uBAAuB,CAAC,MAAM,KAAK,CAAC,EAAE;AACxC,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,iBAAiB,CAAC,CAAC,CAAC,EACpB,CAAA,6BAAA,CAA+B,CAChC;AAED,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB;AAEA,IAAA,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GACrC,IAAI,CAAC,2BAA2B,CAAC,kCAAkC,CACjE,GAAG,CAAC,GAAG,EACP,iBAAiB,CAClB;IAEH,IAAI,CAAC,cAAc,EAAE;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,iBAAiB,CAAC,CAAC,CAAC,EACpB,+CAA+C,GAAG,CAAC,GAAG,CAAA,CAAE,CACzD;AAED,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB;AAEA,IAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,cAAc,EACd,CAAA,CAAA,EAAI,GAAG,CAAC,GAAG,CAAA,4BAAA,EAA+B,aAAa,CAAA,CAAA,CAAG,CAC3D;IACD,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,cAAc,CAAC;IAElE,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,cAAc,EACd,CAAA,uBAAA,EAA0B,GAAG,CAAC,GAAG,CAAA,sBAAA,EAAyB,KAAK,CAAA,CAAA,CAAG,CACnE;AAED,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB;AAEA,IAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,CACzB,cAAc,EACd,CAAA,CAAA,EAAI,GAAG,CAAC,GAAG,CAAA,4BAAA,EAA+B,aAAa,CAAA,eAAA,CAAiB,CACzE;AACD,IAAA,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC;AACd,QAAA,OAAO,EAAE,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,GAAG,KAAK,CAAC;AAC7D,KAAA,CAAC;AAEF,IAAA,OAAO,IAAI,CAAC,GAAG,CAAC;AAClB;;MC/Ga,0BAA0B,CAAA;AAC9B,IAAA,IAAI,CAAC,GAAW,EAAA;AACrB,QAAA,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC;IAClC;IAEO,KAAK,CAAC,GAAW,EAAE,KAAa,EAAA;AACrC,QAAA,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;IAClC;AAEO,IAAA,MAAM,CAAC,GAAW,EAAA;AACvB,QAAA,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC;IAC9B;IAEO,KAAK,GAAA;QACV,YAAY,CAAC,KAAK,EAAE;IACtB;8GAfW,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAA1B,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,cAFzB,MAAM,EAAA,CAAA,CAAA;;2FAEP,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAHtC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACLD;;ACAA;;AAEG;;ACFH;;AAEG;;;;"}