{"version":3,"file":"o3r-localization.mjs","sources":["../../src/annotations/localization.ts","../../src/core/localization.configuration.ts","../../src/core/translate-messageformat-lazy.compiler.ts","../../src/stores/localization-override/localization-override.actions.ts","../../src/stores/localization-override/localization-override.reducer.ts","../../src/stores/localization-override/localization-override.state.ts","../../src/stores/localization-override/localization-override.module.ts","../../src/stores/localization-override/localization-override.selectors.ts","../../src/stores/localization-override/localization-override.sync.ts","../../src/tools/localization.token.ts","../../src/tools/localization.service.ts","../../src/tools/localization-translate.directive.ts","../../src/tools/localization-translate.pipe.ts","../../src/tools/localized-currency.pipe.ts","../../src/tools/localized-date.pipe.ts","../../src/tools/localized-decimal.pipe.ts","../../src/tools/text-direction.service.ts","../../src/tools/text-directionality.service.ts","../../src/tools/localization.module.ts","../../src/tools/translations-loader.ts","../../src/tools/localization.provider.ts","../../src/devkit/localization-devtools.service.ts","../../src/devkit/localization-devtools.token.ts","../../src/devkit/localization-devtools.console.service.ts","../../src/devkit/localization-devtools.message.service.ts","../../src/devkit/localization-devtools.module.ts","../../src/o3r-localization.ts"],"sourcesContent":["import {\n  deepFill,\n  immutablePrimitive,\n  otterComponentInfoPropertyName,\n} from '@o3r/core';\n\n/**\n * Decorator to pass localization url\n * @param _url\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention -- decorator should start with a capital letter\nexport function Localization(_url: string) {\n  return (target: any, key: string) => {\n    const privateField = _url || `_${key}`;\n    const privateValue = target[key];\n\n    if (delete target[key]) {\n      Object.defineProperty(target, key, {\n        get: function (this: any) {\n          return this[privateField];\n        },\n        set: function (this: any, value: Record<string, unknown>) {\n          const currentField = this[privateField] || privateValue;\n          this[privateField] = typeof currentField === 'undefined' ? immutablePrimitive(value) : deepFill(currentField, value);\n          if (this[otterComponentInfoPropertyName]) {\n            this[otterComponentInfoPropertyName].translations = this[privateField];\n          }\n        },\n        enumerable: true,\n        configurable: true\n      });\n    }\n  };\n}\n","/**\n * Describes configuration for LocalizationModule\n */\nexport interface LocalizationConfiguration {\n  /** List of available languages */\n  supportedLocales: string[];\n  /** Application display language */\n  language?: string;\n  /** Url to fetch translation bundles from */\n  endPointUrl: string;\n  /** Prefix endPoinrUrl with dynamicContentPath provided by DynamicContentPath */\n  useDynamicContent: boolean;\n  /** List of RTL language codes */\n  rtlLanguages: string[];\n  /**\n   * Fallback language map of resource in case translation in language does not exist.\n   * translate to unsupported language will try to map to supportedLocales from below property.\n   * @example\n   * ```typescript\n   * {\n   *   supportedLocales: ['en-GB', 'en-US', 'fr-FR'],\n   *   fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}\n   * }\n   * // translate to en-CA -> fallback to en-US, translate to de-DE -> fallback to fr-FR,\n   * // translate to en-NZ -> fallback to en-GB, translate to en -> fallback to en-GB.\n   * ```\n   */\n  fallbackLocalesMap?: {\n    [supportedLocale: string]: string;\n  };\n  /** Fallback language of resource in case translation in language does not exist */\n  fallbackLanguage: string;\n  /** Path relative to published folder where webpack will copy translation bundles */\n  bundlesOutputPath: string;\n  /** Debug mode switch */\n  debugMode: boolean;\n  /** Query parameters for fetching the localization resources */\n  queryParams?: { [key: string]: string };\n  /** Fetch options object as per https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch#Parameters */\n  fetchOptions?: RequestInit;\n  /** Enable the ability to switch the translations on and off at runtime. */\n  enableTranslationDeactivation: boolean;\n  /**\n   * Merge the translations from DynamicContentPath with the local translations\n   * Warning: Enable this option will download two localization bundles and can delay the display of the text on application first page\n   * @default false\n   */\n  mergeWithLocalTranslations: boolean;\n}\n\n/**\n * Default configuration for LocalizationModule\n */\nexport const DEFAULT_LOCALIZATION_CONFIGURATION: Readonly<LocalizationConfiguration> = {\n  supportedLocales: [],\n  endPointUrl: '',\n  useDynamicContent: false,\n  rtlLanguages: ['ar', 'he'],\n  fallbackLanguage: 'en',\n  bundlesOutputPath: '',\n  debugMode: false,\n  enableTranslationDeactivation: false,\n  mergeWithLocalTranslations: false\n} as const;\n","import {\n  Inject,\n  Injectable,\n  InjectionToken,\n  Optional,\n} from '@angular/core';\nimport {\n  TranslateCompiler,\n} from '@ngx-translate/core';\nimport {\n  IntlMessageFormat,\n  Options,\n} from 'intl-messageformat';\n\n/**\n * Options for Lazy Message Format compiler\n */\nexport interface LazyMessageFormatConfig extends Options {\n  /**\n   * Enables compiled translation caching\n   * @default true\n   */\n  enableCache?: boolean;\n\n  /**\n   * Enables HTML in translation\n   * @default true\n   */\n  ignoreTag?: boolean;\n}\n\n/**\n * Message format configuration default value\n */\nexport const lazyMessageDefaultConfig: Readonly<LazyMessageFormatConfig> = {\n  enableCache: true,\n  ignoreTag: true\n} as const;\n\n/** Message Format configuration Token */\nexport const MESSAGE_FORMAT_CONFIG = new InjectionToken<LazyMessageFormatConfig>('Message Format configuration');\n\n/**\n * This compiler expects ICU syntax and compiles the expressions with messageformat.js\n * Compare to ngx-translate-messageformat-compiler package, the compilation of the translation is done only on demand\n */\n@Injectable()\nexport class TranslateMessageFormatLazyCompiler extends TranslateCompiler {\n  /** Configuration */\n  private readonly config: LazyMessageFormatConfig;\n\n  /** Cache of compiled translations */\n  private cache: { [x: string]: IntlMessageFormat } = {};\n\n  constructor(@Optional() @Inject(MESSAGE_FORMAT_CONFIG) config?: LazyMessageFormatConfig) {\n    super();\n\n    this.config = config ? { ...lazyMessageDefaultConfig, ...config } : lazyMessageDefaultConfig;\n  }\n\n  /**\n   * Clear the cache of the compiled translations\n   */\n  public clearCache() {\n    this.cache = {};\n  }\n\n  /** @inheritDoc */\n  public compile(value: string, lang: string): (params: any) => string {\n    return (params: any) => (new IntlMessageFormat(value, lang, undefined, this.config).format(params) as string);\n  }\n\n  /** @inheritDoc */\n  public compileTranslations(translations: { [x: string]: any }, lang: string) {\n    type CompiledTranslationMap = { [key in keyof typeof translations]: (params: any) => string };\n\n    const compilingStrategy = this.config.enableCache\n      ? (acc: CompiledTranslationMap, key: string) => {\n        acc[key] = (params: any) => {\n          const cached = this.cache[`${lang}_${key}`];\n          if (cached) {\n            return cached.format(params) as string;\n          }\n\n          const newCachedItem = new IntlMessageFormat(translations[key], lang, undefined, this.config);\n          this.cache[`${lang}_${key}`] = newCachedItem;\n          return newCachedItem.format(params) as string;\n        };\n        return acc;\n      }\n\n      : (acc: CompiledTranslationMap, key: string) => {\n        acc[key] = (params: any) => new IntlMessageFormat(translations[key], lang, undefined, this.config).format(params) as string;\n        return acc;\n      };\n\n    return Object.keys(translations).reduce<CompiledTranslationMap>((acc, key) => compilingStrategy(acc, key), {});\n  }\n}\n","import {\n  createAction,\n  props,\n} from '@ngrx/store';\nimport {\n  SetStateActionPayload,\n} from '@o3r/core';\nimport {\n  LocalizationOverrideState,\n} from './localization-override.state';\n\n/** Actions */\nconst ACTION_SET = '[LocalizationOverride] set';\n\n/**\n * Clear all overrides and fill the store with the payload\n */\nexport const setLocalizationOverride = createAction(ACTION_SET, props<SetStateActionPayload<LocalizationOverrideState>>());\n","import {\n  ActionCreator,\n  createReducer,\n  on,\n  ReducerTypes,\n} from '@ngrx/store';\nimport * as actions from './localization-override.actions';\nimport {\n  LocalizationOverrideState,\n} from './localization-override.state';\n\n/**\n * LocalizationOverride Store initial value\n */\nexport const localizationOverrideInitialState: LocalizationOverrideState = { localizationOverrides: {} };\n\n/**\n *  List of basic actions for LocalizationOverride Store\n */\nexport const localizationOverrideReducerFeatures: ReducerTypes<LocalizationOverrideState, ActionCreator[]>[] = [\n  on(actions.setLocalizationOverride, (_state, payload) => ({ ...payload.state }))\n];\n\n/**\n * LocalizationOverride Store reducer\n */\nexport const localizationOverrideReducer = createReducer(\n  localizationOverrideInitialState,\n  ...localizationOverrideReducerFeatures\n);\n","/**\n * LocalizationOverride store state\n */\nexport interface LocalizationOverrideState {\n  /** Mapping of initial localization keys to the one they are replaced with */\n  localizationOverrides: Record<string, string>;\n}\n\n/**\n * Name of the LocalizationOverride Store\n */\nexport const LOCALIZATION_OVERRIDE_STORE_NAME = 'localizationOverride';\n\n/**\n * LocalizationOverride Store Interface\n */\nexport interface LocalizationOverrideStore {\n  /** LocalizationOverride state */\n  [LOCALIZATION_OVERRIDE_STORE_NAME]: LocalizationOverrideState;\n}\n","import {\n  InjectionToken,\n  ModuleWithProviders,\n  NgModule,\n} from '@angular/core';\nimport {\n  Action,\n  ActionReducer,\n  StoreModule,\n} from '@ngrx/store';\nimport {\n  localizationOverrideReducer,\n} from './localization-override.reducer';\nimport {\n  LOCALIZATION_OVERRIDE_STORE_NAME,\n  LocalizationOverrideState,\n} from './localization-override.state';\n\n/** Token of the LocalizationOverride reducer */\nexport const LOCALIZATION_OVERRIDE_REDUCER_TOKEN = new InjectionToken<ActionReducer<LocalizationOverrideState, Action>>('Feature LocalizationOverride Reducer');\n\n/** Provide default reducer for LocalizationOverride store */\nexport function getDefaultLocalizationOverrideReducer() {\n  return localizationOverrideReducer;\n}\n\n@NgModule({\n  imports: [\n    StoreModule.forFeature(LOCALIZATION_OVERRIDE_STORE_NAME, LOCALIZATION_OVERRIDE_REDUCER_TOKEN)\n  ],\n  providers: [\n    { provide: LOCALIZATION_OVERRIDE_REDUCER_TOKEN, useFactory: getDefaultLocalizationOverrideReducer }\n  ]\n})\nexport class LocalizationOverrideStoreModule {\n  public static forRoot<T extends LocalizationOverrideState>(reducerFactory: () => ActionReducer<T, Action>): ModuleWithProviders<LocalizationOverrideStoreModule> {\n    return {\n      ngModule: LocalizationOverrideStoreModule,\n      providers: [\n        { provide: LOCALIZATION_OVERRIDE_REDUCER_TOKEN, useFactory: reducerFactory }\n      ]\n    };\n  }\n}\n","import {\n  createFeatureSelector,\n  createSelector,\n} from '@ngrx/store';\nimport {\n  LOCALIZATION_OVERRIDE_STORE_NAME,\n  LocalizationOverrideState,\n} from './localization-override.state';\n\n/** Select LocalizationOverride State */\nexport const selectLocalizationOverrideState = createFeatureSelector<LocalizationOverrideState>(LOCALIZATION_OVERRIDE_STORE_NAME);\n\n/** Select all localization override map */\nexport const selectLocalizationOverride = createSelector(selectLocalizationOverrideState, (state) => state?.localizationOverrides || {});\n","import {\n  Serializer,\n} from '@o3r/core';\nimport {\n  localizationOverrideInitialState,\n} from './localization-override.reducer';\nimport {\n  LocalizationOverrideState,\n} from './localization-override.state';\n\nexport const localizationOverrideStorageDeserializer = (rawObject: any) => {\n  if (!rawObject) {\n    return localizationOverrideInitialState;\n  }\n  return rawObject;\n};\n\nexport const localizationOverrideStorageSync: Serializer<LocalizationOverrideState> = {\n  deserialize: localizationOverrideStorageDeserializer\n};\n","import {\n  InjectionToken,\n} from '@angular/core';\nimport {\n  LocalizationConfiguration,\n} from '../core';\n\n/** Localization Configuration Token */\nexport const LOCALIZATION_CONFIGURATION_TOKEN = new InjectionToken<LocalizationConfiguration>('Localization Configuration injection token');\n","import {\n  Inject,\n  Injectable,\n  Optional,\n} from '@angular/core';\nimport {\n  select,\n  Store,\n} from '@ngrx/store';\nimport {\n  TranslateService,\n} from '@ngx-translate/core';\nimport {\n  LoggerService,\n} from '@o3r/logger';\nimport {\n  BehaviorSubject,\n  combineLatest,\n  Observable,\n  of,\n} from 'rxjs';\nimport {\n  distinctUntilChanged,\n  map,\n  shareReplay,\n  switchMap,\n} from 'rxjs/operators';\nimport {\n  LocalizationConfiguration,\n} from '../core/localization.configuration';\nimport {\n  LocalizationOverrideStore,\n  selectLocalizationOverride,\n} from '../stores/index';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization.token';\n\n/**\n * Service which is wrapping the configuration logic of TranslateService from ngx-translate\n * Any application willing to use localization just needs to inject LocalizationService\n * in the root component and call its configure() method.\n */\n@Injectable()\nexport class LocalizationService {\n  private readonly localeSplitIdentifier: string = '-';\n\n  /**\n   * Internal subject that we use to track changes between keys only and translation mode\n   */\n  private readonly _showKeys$ = new BehaviorSubject(false);\n\n  /**\n   * Map of localization keys to replace a key to another\n   */\n  private readonly keyMapping$?: Observable<Record<string, any>>;\n\n  /**\n   * _showKeys$ exposed as an Observable\n   */\n  public showKeys$ = this._showKeys$.asObservable();\n\n  constructor(\n    private readonly translateService: TranslateService,\n    private readonly logger: LoggerService,\n    @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private readonly configuration: LocalizationConfiguration,\n    @Optional() private readonly store?: Store<LocalizationOverrideStore>\n  ) {\n    this.configure();\n    if (this.store) {\n      this.keyMapping$ = this.store.pipe(\n        select(selectLocalizationOverride)\n      );\n    }\n  }\n\n  /**\n   * This will handle the fallback language hierarchy to find out fallback language.\n   * supportedLocales language has highest priority, next priority goes to fallbackLocalesMap and default would be\n   * fallbackLanguage.\n   * @param language Selected language.\n   * @returns selected language if supported, fallback language otherwise.\n   */\n  private checkFallbackLocalesMap<T extends string | undefined>(language: T) {\n    if (language && !this.configuration.supportedLocales.includes(language)) {\n      const closestSupportedLanguageCode = this.getFirstClosestSupportedLanguageCode(language);\n      const fallbackForLanguage = this.getFallbackMapLangCode(language);\n      const fallbackStrategyDebug = (fallbackForLanguage && ' associated fallback language ')\n        || (closestSupportedLanguageCode && ' closest supported language ')\n        || (this.configuration.fallbackLanguage && ' configured default language ');\n      const fallbackLang = fallbackForLanguage || closestSupportedLanguageCode || this.configuration.fallbackLanguage || language;\n      if (language !== fallbackLang) {\n        this.logger.debug(`Non supported languages ${language} will fallback to ${fallbackStrategyDebug} ${fallbackLang}`);\n      }\n      return fallbackLang;\n    } else if (!language) {\n      this.logger.debug('Language is not defined');\n    }\n    return language;\n  }\n\n  /**\n   * This function checks if fallback language can be provided from fallbackLocalesMap.\n   * supportedLocales: ['en-GB', 'en-US', 'fr-FR'], fallbackLocalesMap: {'en-CA': 'en-US', 'de': 'fr-FR'}\n   * translate to en-CA -> fallback to en-US, translate to de-DE -> fallback to fr-FR\n   * translate to en-NZ -> fallback to en-GB\n   * @param language Selected language.\n   * @returns Fallback language if available, undefined otherwise.\n   */\n  private getFallbackMapLangCode(language: string): string | undefined {\n    const fallbackLocalesMap = this.configuration.fallbackLocalesMap;\n    const [locale] = language.split(this.localeSplitIdentifier);\n\n    return fallbackLocalesMap && (fallbackLocalesMap[language] || fallbackLocalesMap[locale]);\n  }\n\n  /**\n   * This function checks if closest supported language available incase of selected language is not\n   * supported language.\n   * supportedLocales: ['en-GB', 'en-US', 'fr-FR']\n   * translate to en-CA -> fallback to en-GB\n   * @param language Selected language.\n   * @returns Closest supported language if available, undefined otherwise.\n   */\n  private getFirstClosestSupportedLanguageCode(language: string): string | undefined {\n    const [locale] = language.split(this.localeSplitIdentifier);\n    const firstClosestRegx = new RegExp(`^${locale}${this.localeSplitIdentifier}?`, 'i');\n\n    return this.configuration.supportedLocales.find((supportedLang) => firstClosestRegx.test(supportedLang));\n  }\n\n  /**\n   * Returns a stream of translated values of a key which updates whenever the language changes.\n   * @param translationKey Key to translate\n   * @param interpolateParams Object to use in translation binding\n   * @returns A stream of the translated key\n   */\n  private getTranslationStream(translationKey: string, interpolateParams?: object) {\n    const translation$ = this.translateService.stream(translationKey, interpolateParams).pipe(\n      map((value: string) => this.configuration.debugMode ? `${translationKey} - ${value}` : value)\n    );\n\n    if (!this.configuration.enableTranslationDeactivation) {\n      return translation$;\n    }\n\n    return combineLatest([\n      translation$,\n      this.showKeys$\n    ]).pipe(\n      map(([value, showKeys]) => showKeys ? translationKey : value)\n    );\n  }\n\n  /**\n   * Configures TranslateService and registers locales. This method is called from the application level.\n   */\n  public configure() {\n    const language = this.checkFallbackLocalesMap(this.configuration.language || this.configuration.fallbackLanguage);\n    this.translateService.addLangs(this.configuration.supportedLocales);\n    this.translateService.setDefaultLang(language);\n    this.useLanguage(language);\n  }\n\n  /**\n   * Is the translation deactivation enabled\n   */\n  public isTranslationDeactivationEnabled() {\n    return this.configuration.enableTranslationDeactivation;\n  }\n\n  /**\n   * Wrapper to call the ngx-translate service TranslateService method getLangs().\n   */\n  public getLanguages() {\n    return this.translateService.getLangs();\n  }\n\n  /**\n   * Wrapper to call the ngx-translate service TranslateService method use(language).\n   * @param language\n   */\n  public useLanguage(language: string): Observable<any> {\n    language = this.checkFallbackLocalesMap(language);\n    return this.translateService.use(language);\n  }\n\n  /**\n   * Wrapper to get the ngx-translate service TranslateService currentLang.\n   */\n  public getCurrentLanguage() {\n    return this.translateService.currentLang;\n  }\n\n  /**\n   * Get the instance of the ngx-translate TranslateService used by LocalizationService.\n   */\n  public getTranslateService() {\n    return this.translateService;\n  }\n\n  /**\n   * Toggle the ShowKeys mode between active and inactive.\n   * @param value if specified, set the ShowKeys mode to value. If not specified, toggle the ShowKeys mode.\n   */\n  public toggleShowKeys(value?: boolean) {\n    if (!this.configuration.enableTranslationDeactivation) {\n      throw new Error('Translation deactivation is not enabled. Please set the LocalizationConfiguration property \"enableTranslationDeactivation\" accordingly.');\n    }\n    const newValue = value === undefined ? !this.showKeys : value;\n    this._showKeys$.next(newValue);\n  }\n\n  /**\n   * Return the current value of debug show/hide translation keys.\n   */\n  public get showKeys() {\n    return this._showKeys$.value;\n  }\n\n  /**\n   * Get an observable of translation key after global mapping\n   * @param requestedKey Original translation key\n   */\n  public getKey(requestedKey: string) {\n    return this.keyMapping$\n      ? this.keyMapping$.pipe(\n        map((keyMapping) => keyMapping?.[requestedKey] || requestedKey),\n        distinctUntilChanged()\n      )\n      : of(requestedKey);\n  }\n\n  /**\n   * Returns a stream of translated values of a key which updates whenever the language changes.\n   * @param key Key to translate\n   * @param interpolateParams Object to use in translation binding\n   * @returns A stream of the translated key\n   */\n  public translate(key: string, interpolateParams?: object) {\n    return this.getKey(key).pipe(\n      switchMap((translationKey) => this.getTranslationStream(translationKey, interpolateParams)),\n      shareReplay({ refCount: true, bufferSize: 1 })\n    );\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Directive,\n  ElementRef,\n  Inject,\n  Input,\n  OnDestroy,\n} from '@angular/core';\nimport {\n  TranslateDirective,\n  TranslateService,\n} from '@ngx-translate/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LocalizationService,\n} from './localization.service';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization.token';\n/**\n * TranslateDirective class adding debug functionality\n */\n@Directive({\n  selector: '[translate],[ngx-translate]',\n  standalone: false\n})\nexport class LocalizationTranslateDirective extends TranslateDirective implements OnDestroy {\n  /**\n   * Internal subscription to the LocalizationService showKeys mode changes\n   */\n  private readonly onShowKeysChange?: Subscription;\n\n  /**\n   * Should we display keys instead of translations\n   */\n  private showKeys = false;\n\n  /**\n   * Internal subscription to the LocalizationService key mapping\n   */\n  private onKeyChange?: Subscription;\n\n  /** @inheritdoc */\n  @Input()\n  public set translate(key: string) {\n    if (key && key !== this.key) {\n      if (this.onKeyChange) {\n        this.onKeyChange.unsubscribe();\n      }\n      this.onKeyChange = this.localizationService.getKey(key).subscribe((newKey) => {\n        this.key = newKey;\n        this.checkNodes();\n      });\n    }\n  }\n\n  constructor(private readonly localizationService: LocalizationService, translateService: TranslateService, element: ElementRef, _ref: ChangeDetectorRef,\n    @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private readonly localizationConfig: LocalizationConfiguration) {\n    super(translateService, element, _ref);\n\n    if (localizationConfig.enableTranslationDeactivation) {\n      this.onShowKeysChange = localizationService.showKeys$.subscribe((showKeys) => {\n        this.showKeys = showKeys;\n        this.checkNodes(true);\n      });\n    }\n  }\n\n  /**\n   * Overriding parent's setContent to plug debugging feature\n   * @param node\n   * @param content\n   */\n  public setContent(node: any, content: string): void {\n    const key = node.originalContent;\n    const newContent = this.showKeys ? key : (this.localizationConfig.debugMode && key ? `${key as string} - ${content}` : content);\n    if (typeof node.textContent !== 'undefined' && node.textContent !== null) {\n      node.textContent = newContent;\n    } else {\n      node.data = newContent;\n    }\n  }\n\n  public ngOnDestroy() {\n    super.ngOnDestroy();\n    if (this.onShowKeysChange) {\n      this.onShowKeysChange.unsubscribe();\n    }\n    if (this.onKeyChange) {\n      this.onKeyChange?.unsubscribe();\n    }\n  }\n}\n","import {\n  ChangeDetectorRef,\n  Inject,\n  OnDestroy,\n  Pipe,\n  PipeTransform,\n} from '@angular/core';\nimport {\n  TranslatePipe,\n  TranslateService,\n} from '@ngx-translate/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LocalizationService,\n} from './localization.service';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization.token';\n\n/**\n * TranslatePipe class adding debug functionality\n */\n@Pipe({\n  name: 'o3rTranslate',\n  pure: false,\n  standalone: false\n})\nexport class O3rLocalizationTranslatePipe extends TranslatePipe implements PipeTransform, OnDestroy {\n  /**\n   * Internal subscription to the LocalizationService showKeys mode changes\n   */\n  protected readonly onShowKeysChange?: Subscription;\n\n  /**\n   * Internal subscription to the LocalizationService key mapping\n   */\n  protected onKeyChange?: Subscription;\n\n  /**\n   * Should we display keys instead of translations\n   */\n  protected showKeys = false;\n\n  /** last key queried */\n  protected lastQueryKey?: string;\n\n  /** last key resolved */\n  protected lastResolvedKey?: string;\n\n  constructor(protected readonly localizationService: LocalizationService, translateService: TranslateService, protected readonly changeDetector: ChangeDetectorRef,\n    @Inject(LOCALIZATION_CONFIGURATION_TOKEN) protected readonly localizationConfig: LocalizationConfiguration) {\n    super(translateService, changeDetector);\n\n    if (localizationConfig.enableTranslationDeactivation) {\n      this.onShowKeysChange = this.localizationService.showKeys$.subscribe((showKeys) => {\n        this.showKeys = showKeys;\n        this.changeDetector.markForCheck();\n      });\n    }\n  }\n\n  /**\n   * Calls original transform method and eventually outputs the key if debugMode (in LocalizationConfiguration) is enabled\n   * @inheritdoc\n   */\n  public transform(query: string, ...args: any[]): any {\n    if (this.showKeys) {\n      return query;\n    }\n\n    if (query !== this.lastQueryKey) {\n      this.lastQueryKey = query;\n      if (this.onKeyChange) {\n        this.onKeyChange.unsubscribe();\n      }\n      this.onKeyChange = this.localizationService.getKey(query).subscribe((key) => {\n        this.lastResolvedKey = key;\n        this.changeDetector.markForCheck();\n      });\n    }\n\n    if (this.lastResolvedKey) {\n      const value = super.transform(this.lastResolvedKey, ...args);\n\n      if (this.localizationConfig.debugMode) {\n        return `${this.lastResolvedKey} - ${value as string}`;\n      }\n\n      return value;\n    }\n\n    return this.value;\n  }\n\n  public ngOnDestroy() {\n    super.ngOnDestroy();\n    if (this.onShowKeysChange) {\n      this.onShowKeysChange.unsubscribe();\n    }\n    if (this.onKeyChange) {\n      this.onKeyChange.unsubscribe();\n    }\n  }\n}\n","import {\n  CurrencyPipe,\n} from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  OnDestroy,\n  Pipe,\n  PipeTransform,\n} from '@angular/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationService,\n} from './localization.service';\n\n/**\n * Native angular CurrencyPipe taking the current lang into consideration\n */\n@Pipe({\n  name: 'currency',\n  pure: false,\n  standalone: false\n})\nexport class LocalizedCurrencyPipe extends CurrencyPipe implements OnDestroy, PipeTransform {\n  private readonly onLangChange: Subscription;\n\n  constructor(private readonly localizationService: LocalizationService, private readonly changeDetectorRef: ChangeDetectorRef) {\n    super(localizationService.getCurrentLanguage());\n    this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n      this.changeDetectorRef.markForCheck()\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public transform(value: number | string, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null;\n  public transform(value: null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): null;\n  public transform(\n    // eslint-disable-next-line @typescript-eslint/unified-signatures -- Expose same signatures as angular CurrencyPipe\n    value: number | string | null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null;\n  public transform(\n    value: number | string | null | undefined, currencyCode?: string, display?: string | boolean, digitsInfo?: string, locale?: string): string | null {\n    return super.transform(value, currencyCode, display, digitsInfo, locale || this.localizationService.getCurrentLanguage());\n  }\n\n  public ngOnDestroy(): void {\n    this.onLangChange.unsubscribe();\n  }\n}\n","import {\n  DatePipe,\n} from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  OnDestroy,\n  Pipe,\n  PipeTransform,\n} from '@angular/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationService,\n} from './localization.service';\n\n/**\n * Native angular DatePipe taking the current lang into consideration\n */\n@Pipe({\n  name: 'date',\n  pure: false,\n  standalone: false\n})\nexport class LocalizedDatePipe extends DatePipe implements OnDestroy, PipeTransform {\n  private readonly onLangChange: Subscription;\n\n  constructor(private readonly localizationService: LocalizationService, private readonly changeDetectorRef: ChangeDetectorRef) {\n    super(localizationService.getCurrentLanguage());\n    this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n      this.changeDetectorRef.markForCheck()\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public transform(value: Date | string | number, format?: string, timezone?: string, locale?: string): string\n    | null;\n  public transform(value: null | undefined, format?: string, timezone?: string, locale?: string): null;\n  public transform(\n    value: Date | string | number | null | undefined, format?: string, timezone?: string,\n    locale?: string): string | null;\n  public transform(\n    value: Date | string | number | null | undefined, format = 'mediumDate', timezone?: string,\n    locale?: string): string | null {\n    return this.localizationService.showKeys ? format : super.transform(value, format, timezone, locale || this.localizationService.getCurrentLanguage());\n  }\n\n  public ngOnDestroy(): void {\n    this.onLangChange.unsubscribe();\n  }\n}\n","import {\n  DecimalPipe,\n} from '@angular/common';\nimport {\n  ChangeDetectorRef,\n  OnDestroy,\n  Pipe,\n  PipeTransform,\n} from '@angular/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationService,\n} from './localization.service';\n\n/**\n * Native angular DecimalPipe taking the current lang into consideration\n */\n@Pipe({\n  name: 'decimal',\n  pure: false,\n  standalone: false\n})\nexport class LocalizedDecimalPipe extends DecimalPipe implements OnDestroy, PipeTransform {\n  private readonly onLangChange: Subscription;\n\n  constructor(private readonly localizationService: LocalizationService, private readonly changeDetectorRef: ChangeDetectorRef) {\n    super(localizationService.getCurrentLanguage());\n    this.onLangChange = this.localizationService.getTranslateService().onLangChange.subscribe(() =>\n      this.changeDetectorRef.markForCheck()\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public transform(value: number | string, digitsInfo?: string, locale?: string): string | null;\n  public transform(value: null | undefined, digitsInfo?: string, locale?: string): null;\n  public transform(value: number | string | null | undefined, digitsInfo?: string, locale?: string): string | null {\n    return super.transform(value, digitsInfo, locale || this.localizationService.getCurrentLanguage());\n  }\n\n  public ngOnDestroy(): void {\n    this.onLangChange.unsubscribe();\n  }\n}\n","import {\n  Directionality,\n} from '@angular/cdk/bidi';\nimport {\n  Inject,\n  Injectable,\n  Renderer2,\n  RendererFactory2,\n} from '@angular/core';\nimport {\n  LangChangeEvent,\n  TranslateService,\n} from '@ngx-translate/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization.token';\n\n/**\n * Service for handling the text direction based on the LocalizationConfiguration\n */\n@Injectable()\nexport class TextDirectionService {\n  private subscription?: Subscription;\n  private readonly renderer: Renderer2;\n\n  constructor(\n    private readonly translateService: TranslateService,\n    @Inject(LOCALIZATION_CONFIGURATION_TOKEN) private readonly configuration: LocalizationConfiguration,\n    private readonly rendererFactory: RendererFactory2,\n    private readonly directionality: Directionality) {\n    this.renderer = this.rendererFactory.createRenderer(null, null);\n  }\n\n  /**\n   * Updates the dir attribute on body HTML tag.\n   * @returns a subscription that updates the dir attribute\n   */\n  public onLangChangeSubscription() {\n    if (this.subscription && !this.subscription.closed) {\n      return this.subscription;\n    }\n    this.subscription = this.translateService.onLangChange.subscribe((event: LangChangeEvent) => {\n      const direction = this.configuration.rtlLanguages.includes(event.lang.split('-')[0]) ? 'rtl' : 'ltr';\n      this.renderer.setAttribute(document.body, 'dir', direction);\n      this.directionality.change.emit(direction);\n    });\n    return this.subscription;\n  }\n}\n","import {\n  DIR_DOCUMENT,\n  Direction,\n  Directionality,\n} from '@angular/cdk/bidi';\nimport {\n  Inject,\n  Injectable,\n  OnDestroy,\n  Optional,\n} from '@angular/core';\nimport {\n  startWith,\n} from 'rxjs/operators';\n\n@Injectable()\nexport class TextDirectionality extends Directionality implements OnDestroy {\n  /**\n   * The current 'ltr' or 'rtl' value.\n   * @override\n   */\n  public value!: Direction;\n\n  constructor(@Optional() @Inject(DIR_DOCUMENT) _document?: any) {\n    super(_document);\n    this.change\n      .pipe(startWith(this.value))\n      .subscribe((value: Direction) => this.value = value);\n  }\n\n  public ngOnDestroy() {\n    this.change.complete();\n  }\n}\n","import {\n  BidiModule,\n  Directionality,\n} from '@angular/cdk/bidi';\nimport {\n  CommonModule,\n  CurrencyPipe,\n  DatePipe,\n  DecimalPipe,\n} from '@angular/common';\nimport {\n  InjectionToken,\n  LOCALE_ID,\n  ModuleWithProviders,\n  NgModule,\n  Optional,\n} from '@angular/core';\nimport {\n  TranslateModule,\n} from '@ngx-translate/core';\nimport {\n  DynamicContentModule,\n} from '@o3r/dynamic-content';\nimport {\n  DEFAULT_LOCALIZATION_CONFIGURATION,\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LocalizationTranslateDirective,\n} from './localization-translate.directive';\nimport {\n  O3rLocalizationTranslatePipe,\n} from './localization-translate.pipe';\nimport {\n  LocalizationService,\n} from './localization.service';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization.token';\nimport {\n  LocalizedCurrencyPipe,\n} from './localized-currency.pipe';\nimport {\n  LocalizedDatePipe,\n} from './localized-date.pipe';\nimport {\n  LocalizedDecimalPipe,\n} from './localized-decimal.pipe';\nimport {\n  TextDirectionService,\n} from './text-direction.service';\nimport {\n  TextDirectionality,\n} from './text-directionality.service';\n\n/**\n * creates LocalizationConfiguration, which is used if the application\n * @param configuration Localization configuration\n */\nexport function createLocalizationConfiguration(configuration?: Partial<LocalizationConfiguration>): LocalizationConfiguration {\n  return {\n    ...DEFAULT_LOCALIZATION_CONFIGURATION,\n    ...configuration\n  };\n}\n\n/**\n * Factory to inject the LOCALE_ID token with the current language into Angular context\n * @param localizationService Localization service\n */\nexport function localeIdNgBridge(localizationService: LocalizationService) {\n  return localizationService.getCurrentLanguage();\n}\n\n/** Custom Localization Configuration Token to override default localization configuration */\nexport const CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN = new InjectionToken<Partial<LocalizationConfiguration>>('Partial Localization configuration');\n\n@NgModule({\n  declarations: [O3rLocalizationTranslatePipe, LocalizationTranslateDirective, LocalizedDatePipe, LocalizedDecimalPipe, LocalizedCurrencyPipe],\n  imports: [TranslateModule, BidiModule, DynamicContentModule, CommonModule],\n  exports: [TranslateModule, O3rLocalizationTranslatePipe, LocalizationTranslateDirective, LocalizedDatePipe, LocalizedDecimalPipe, LocalizedCurrencyPipe],\n  providers: [\n    { provide: LOCALIZATION_CONFIGURATION_TOKEN, useFactory: createLocalizationConfiguration, deps: [[new Optional(), CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN]] },\n    { provide: LOCALE_ID, useFactory: localeIdNgBridge, deps: [LocalizationService] },\n    { provide: Directionality, useClass: TextDirectionality },\n    { provide: DatePipe, useClass: LocalizedDatePipe },\n    { provide: DecimalPipe, useClass: LocalizedDecimalPipe },\n    { provide: CurrencyPipe, useClass: LocalizedCurrencyPipe },\n    TextDirectionService\n  ]\n})\nexport class LocalizationModule {\n  /**\n   * forRoot method should be called only once from the application index.ts\n   * It will do several things:\n   * - provide the configuration for the whole application\n   * - register all locales specified in the LocalizationConfiguration\n   * - configure TranslateService\n   * - inject LOCALE_ID token\n   * @param configuration LocalizationConfiguration\n   */\n  public static forRoot(\n    configuration?: () => Partial<LocalizationConfiguration>\n  ): ModuleWithProviders<LocalizationModule> {\n    return {\n      ngModule: LocalizationModule,\n      providers: [\n        LocalizationService,\n        ...(configuration\n          ? [{\n            provide: CUSTOM_LOCALIZATION_CONFIGURATION_TOKEN,\n            useFactory: configuration\n          }]\n          : [])\n      ]\n    };\n  }\n}\n","import {\n  Inject,\n  Injectable,\n  Optional,\n} from '@angular/core';\nimport {\n  TranslateLoader,\n} from '@ngx-translate/core';\nimport {\n  DynamicContentService,\n} from '@o3r/dynamic-content';\nimport {\n  LoggerService,\n} from '@o3r/logger';\nimport {\n  combineLatest,\n  from,\n  Observable,\n  of,\n} from 'rxjs';\nimport {\n  catchError,\n  map,\n  switchMap,\n} from 'rxjs/operators';\nimport {\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization.token';\n\nconst JSON_EXT = '.json';\n\n/**\n * This class is responsible for loading translation bundles from remote or local endpoints depending on the LocalizationConfiguration.\n * Fallback mechanism ensures that if a bundle in some language cannot be fetched remotely\n * we try to fetch the same language bundle locally (bundles stored inside the application)\n * and finally load the fallback language bundle (if all previous fetches failed)\n */\n@Injectable()\nexport class TranslationsLoader implements TranslateLoader {\n  constructor(@Inject(LOCALIZATION_CONFIGURATION_TOKEN) private readonly localizationConfiguration: LocalizationConfiguration,\n    @Optional() private readonly logger?: LoggerService,\n    @Optional() private readonly dynamicContentService?: DynamicContentService) {}\n\n  /**\n   * Download a language bundle file\n   * @param  url Url to the bundle file\n   */\n  private downloadLanguageBundle$(url: string) {\n    const queryParams = this.localizationConfiguration.queryParams;\n\n    let queryString = '';\n    if (queryParams) {\n      queryString = '?' + Object.keys(queryParams).map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(queryParams[key])).join('&');\n    }\n    return from(fetch(url + queryString, this.localizationConfiguration.fetchOptions)).pipe(\n      switchMap((response) => from(response.json()))\n    );\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public getTranslation(lang: string): Observable<any> {\n    const fallback = this.localizationConfiguration.fallbackLanguage;\n    let localizationPath$ = of(this.localizationConfiguration.endPointUrl);\n\n    if (this.localizationConfiguration.useDynamicContent) {\n      if (!this.dynamicContentService) {\n        throw new Error('Dynamic Content is not available. Please verify you have imported the module DynamicContentModule in your application');\n      }\n      localizationPath$ = this.dynamicContentService.getContentPathStream(this.localizationConfiguration.endPointUrl);\n    }\n\n    return localizationPath$.pipe(\n      switchMap((localizationPath: string) => {\n        if (localizationPath) {\n          const localizationBundle$ = this.downloadLanguageBundle$(localizationPath + lang + JSON_EXT);\n\n          if (this.localizationConfiguration.mergeWithLocalTranslations) {\n            return combineLatest([\n              localizationBundle$.pipe(catchError(() => of({}))),\n              this.getTranslationFromLocal(lang, fallback).pipe(\n                map((translations) => {\n                  Object.keys(translations).forEach((key) => translations[key] = `[local] ${translations[key] as string}`);\n                  return translations;\n                })\n              )\n            ]).pipe(map(([dynamicTranslations, localTranslations]) => ({ ...localTranslations, ...dynamicTranslations })));\n          }\n\n          /*\n          * if endPointUrl is specified by the configuration then:\n          *   1. try to load lang from endPointUrl\n          *   2. if 1 fails then try to load from the app (local file)\n          */\n          return localizationBundle$.pipe(\n            catchError(() => {\n              this.logger?.warn(`Failed to load the localization resource from ${localizationPath + lang + JSON_EXT}, trying from the application resources`);\n              return this.getTranslationFromLocal(lang, fallback);\n            })\n          );\n        }\n        /*\n        * else if endPointUrl NOT specified by then configuration then:\n        *   1. try to load from the app (local file)\n        */\n        this.logger?.warn('No localization endpoint specified, localization fetch from application resources');\n        return this.getTranslationFromLocal(lang, fallback);\n      })\n    );\n  }\n\n  /**\n   *\n   *Fetches localization bundles from published folder (internal to application)\n   *\n   *1. try to load lang from local\n   *2. if 1 fails try to load fallback lang but only if it's different from lang in 1\n   * @param lang - language of the bundle\n   * @param fallbackLanguage - fallback language in case bundle in language not found\n   */\n  public getTranslationFromLocal(lang: string, fallbackLanguage: string): Observable<any> {\n    const pathPrefix: string = this.localizationConfiguration.bundlesOutputPath;\n    return this.downloadLanguageBundle$(pathPrefix + lang + JSON_EXT).pipe(\n      catchError(() => {\n        if (lang === fallbackLanguage) {\n          this.logger?.warn(`Failed to load ${lang} from ${pathPrefix + lang + JSON_EXT}.`);\n          return of({});\n        } else {\n          this.logger?.warn(`Failed to load ${lang} from ${pathPrefix + lang + JSON_EXT}. Application will fallback to ${fallbackLanguage}`);\n          return this.downloadLanguageBundle$(pathPrefix + fallbackLanguage + JSON_EXT).pipe(\n            catchError(() => of({}))\n          );\n        }\n      })\n    );\n  }\n}\n","import {\n  FactoryProvider,\n  Optional,\n} from '@angular/core';\nimport {\n  TranslateLoader,\n} from '@ngx-translate/core';\nimport {\n  DynamicContentService,\n} from '@o3r/dynamic-content';\nimport {\n  LoggerService,\n} from '@o3r/logger';\nimport {\n  LocalizationConfiguration,\n} from '../core';\nimport {\n  LOCALIZATION_CONFIGURATION_TOKEN,\n} from './localization.token';\nimport {\n  TranslationsLoader,\n} from './translations-loader';\n\n/**\n * Creates a loader of translations bundles based on the configuration\n * (endPointUrl and language determine which bundle we load and where do we fetch it from)\n * @param localizationConfiguration\n * @param logger service to handle the log of warning and errors\n * @param dynamicContentService (optional)\n */\nexport function createTranslateLoader(localizationConfiguration: LocalizationConfiguration, logger?: LoggerService, dynamicContentService?: DynamicContentService) {\n  return new TranslationsLoader(localizationConfiguration, logger, dynamicContentService);\n}\n\n/**\n * TranslateLoader provider, using framework's TranslationsLoader class\n */\nexport const translateLoaderProvider: Readonly<FactoryProvider> = {\n  provide: TranslateLoader,\n  useFactory: createTranslateLoader,\n  deps: [LOCALIZATION_CONFIGURATION_TOKEN, [new Optional(), LoggerService], [new Optional(), DynamicContentService]]\n} as const;\n","import {\n  ApplicationRef,\n  Injectable,\n} from '@angular/core';\nimport {\n  TranslateCompiler,\n} from '@ngx-translate/core';\nimport {\n  firstValueFrom,\n  lastValueFrom,\n  Subscription,\n} from 'rxjs';\nimport type {\n  TranslateMessageFormatLazyCompiler,\n} from '../core';\nimport {\n  LocalizationService,\n} from '../tools';\n\n@Injectable()\nexport class OtterLocalizationDevtools {\n  constructor(\n    private readonly localizationService: LocalizationService,\n    private readonly translateCompiler: TranslateCompiler,\n    private readonly appRef: ApplicationRef\n  ) {}\n\n  /**\n   * Is the translation deactivation enabled\n   */\n  public isTranslationDeactivationEnabled() {\n    return this.localizationService.isTranslationDeactivationEnabled();\n  }\n\n  /**\n   * Show localization keys\n   * @param value value enforced by the DevTools extension\n   */\n  public showLocalizationKeys(value?: boolean): void {\n    this.localizationService.toggleShowKeys(value);\n    this.appRef.tick();\n  }\n\n  /**\n   * Returns the current language\n   */\n  public getCurrentLanguage() {\n    return this.localizationService.getCurrentLanguage();\n  }\n\n  /**\n   * Setup a listener on language change\n   * @param fn called when the language is changed in the app\n   */\n  public onLanguageChange(fn: (language: string) => any): Subscription {\n    return this.localizationService\n      .getTranslateService()\n      .onLangChange\n      .subscribe(({ lang }) => {\n        fn(lang);\n      });\n  }\n\n  /**\n   * Switch the current language to the specified value\n   * @param language new language to switch to\n   */\n  public async switchLanguage(language: string | undefined) {\n    if (!language) {\n      return;\n    }\n    await lastValueFrom(this.localizationService.useLanguage(language));\n    this.appRef.tick();\n  }\n\n  /**\n   * Updates the specified localization key/values for the current language.\n   *\n   * Recommendation: To be used with a small number of keys to update to avoid performance issues.\n   * @param keyValues key/values to update\n   * @param language if not provided, the current language value\n   */\n  public async updateLocalizationKeys(keyValues: { [key: string]: string }, language?: string) {\n    const lang = language || this.getCurrentLanguage();\n    const translateService = this.localizationService.getTranslateService();\n    await firstValueFrom(translateService.getTranslation(lang));\n    Object.entries(keyValues).forEach(([key, value]) => {\n      translateService.set(key, value, lang);\n    });\n    this.appRef.tick();\n  }\n\n  /**\n   * Reload a language from the language file\n   * @see https://github.com/ngx-translate/core/blob/master/packages/core/lib/translate.service.ts#L490\n   * @param language language to reload\n   */\n  public async reloadLocalizationKeys(language?: string) {\n    const lang = language || this.getCurrentLanguage();\n    if ((this.translateCompiler as TranslateMessageFormatLazyCompiler).clearCache) {\n      (this.translateCompiler as TranslateMessageFormatLazyCompiler).clearCache();\n    }\n    const initialLocs = await lastValueFrom(\n      this.localizationService\n        .getTranslateService()\n        .reloadLang(lang)\n    );\n    this.localizationService.getTranslateService().setTranslation(\n      language || this.getCurrentLanguage(),\n      initialLocs\n    );\n    this.appRef.tick();\n  }\n}\n","import {\n  InjectionToken,\n} from '@angular/core';\nimport {\n  LocalizationDevtoolsServiceOptions,\n} from './localization-devkit.interface';\n\nexport const OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS: Readonly<LocalizationDevtoolsServiceOptions> = {\n  isActivatedOnBootstrap: false,\n  isActivatedOnBootstrapWhenCMSContext: true,\n  metadataFilePath: './metadata/localisation.metadata.json'\n} as const;\n\nexport const OTTER_LOCALIZATION_DEVTOOLS_OPTIONS = new InjectionToken<LocalizationDevtoolsServiceOptions>('Otter Localization Devtools options');\n","/* eslint-disable no-console -- This is the purpose of this service */\nimport {\n  Inject,\n  Injectable,\n  Optional,\n} from '@angular/core';\nimport type {\n  ContextualizationDataset,\n  DevtoolsServiceInterface,\n  WindowWithDevtools,\n} from '@o3r/core';\nimport {\n  Subscription,\n} from 'rxjs';\nimport {\n  LocalizationContextualizationDevtools,\n  LocalizationDevtoolsServiceOptions,\n} from './localization-devkit.interface';\nimport {\n  OtterLocalizationDevtools,\n} from './localization-devtools.service';\nimport {\n  OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n  OTTER_LOCALIZATION_DEVTOOLS_OPTIONS,\n} from './localization-devtools.token';\n\n@Injectable()\nexport class LocalizationDevtoolsConsoleService implements DevtoolsServiceInterface, LocalizationContextualizationDevtools {\n  /** Name of the Window property to access to the devtools */\n  public static readonly windowModuleName = 'localization';\n\n  constructor(\n    private readonly localizationDevtools: OtterLocalizationDevtools,\n    @Optional() @Inject(OTTER_LOCALIZATION_DEVTOOLS_OPTIONS) private readonly options: LocalizationDevtoolsServiceOptions = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS\n  ) {\n    if (\n      this.options.isActivatedOnBootstrap\n      || (\n        this.options.isActivatedOnBootstrapWhenCMSContext\n        && (document.body.dataset as ContextualizationDataset).cmscontext === 'true'\n      )\n    ) {\n      this.activate();\n    }\n  }\n\n  /** @inheritDoc */\n  public activate() {\n    const windowWithDevtools: WindowWithDevtools = window;\n\n    windowWithDevtools._OTTER_DEVTOOLS_ ||= {};\n\n    windowWithDevtools._OTTER_DEVTOOLS_[LocalizationDevtoolsConsoleService.windowModuleName] = this;\n\n    console.info(`Otter localization Devtools is now accessible via the _OTTER_DEVTOOLS_.${LocalizationDevtoolsConsoleService.windowModuleName} variable`);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public isTranslationDeactivationEnabled(): boolean | Promise<boolean> {\n    return this.localizationDevtools.isTranslationDeactivationEnabled();\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public showLocalizationKeys(value?: boolean): void | Promise<void> {\n    this.localizationDevtools.showLocalizationKeys(value);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public getCurrentLanguage(): string | Promise<string> {\n    const currentLanguage = this.localizationDevtools.getCurrentLanguage();\n    return currentLanguage;\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public async switchLanguage(language: string): Promise<{ previous: string; requested: string; current: string }> {\n    const previous = this.localizationDevtools.getCurrentLanguage();\n    await this.localizationDevtools.switchLanguage(language);\n    const current = this.localizationDevtools.getCurrentLanguage();\n    return {\n      requested: language,\n      previous,\n      current\n    };\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public onLanguageChange(fn: (language: string) => any): Subscription {\n    return this.localizationDevtools.onLanguageChange(fn);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public updateLocalizationKeys(keyValues: { [key: string]: string }, language?: string): void | Promise<void> {\n    return this.localizationDevtools.updateLocalizationKeys(keyValues, language);\n  }\n\n  /**\n   * @inheritdoc\n   */\n  public reloadLocalizationKeys(language?: string) {\n    return this.localizationDevtools.reloadLocalizationKeys(language);\n  }\n}\n","import {\n  DestroyRef,\n  inject,\n  Inject,\n  Injectable,\n  Optional,\n} from '@angular/core';\nimport {\n  takeUntilDestroyed,\n} from '@angular/core/rxjs-interop';\nimport {\n  filterMessageContent,\n  sendOtterMessage,\n} from '@o3r/core';\nimport {\n  LoggerService,\n} from '@o3r/logger';\nimport {\n  firstValueFrom,\n  fromEvent,\n} from 'rxjs';\nimport {\n  LocalizationService,\n} from '../tools';\nimport {\n  type AvailableLocalizationMessageContents,\n  LocalizationDevtoolsServiceOptions,\n  type LocalizationMessageDataTypes,\n} from './localization-devkit.interface';\nimport {\n  OtterLocalizationDevtools,\n} from './localization-devtools.service';\nimport {\n  OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n  OTTER_LOCALIZATION_DEVTOOLS_OPTIONS,\n} from './localization-devtools.token';\n\nconst isLocalizationMessage = (message: any): message is AvailableLocalizationMessageContents => {\n  return message && (\n    message.dataType === 'displayLocalizationKeys'\n    || message.dataType === 'languages'\n    || message.dataType === 'switchLanguage'\n    || message.dataType === 'localizations'\n    || message.dataType === 'updateLocalization'\n    || message.dataType === 'requestMessages'\n    || message.dataType === 'connect'\n    || message.dataType === 'reloadLocalizationKeys'\n    || message.dataType === 'isTranslationDeactivationEnabled'\n    || message.dataType === 'getTranslationValuesContentMessage'\n  );\n};\n\n@Injectable()\nexport class LocalizationDevtoolsMessageService {\n  private readonly sendMessage = sendOtterMessage<AvailableLocalizationMessageContents>;\n  private readonly destroyRef = inject(DestroyRef);\n\n  constructor(\n    private readonly logger: LoggerService,\n    private readonly localizationDevTools: OtterLocalizationDevtools,\n    private readonly localizationService: LocalizationService,\n    @Optional() @Inject(OTTER_LOCALIZATION_DEVTOOLS_OPTIONS) private readonly options: LocalizationDevtoolsServiceOptions = OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS\n  ) {\n    this.options = {\n      ...OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n      ...this.options\n    };\n    if (this.options.isActivatedOnBootstrap) {\n      this.activate();\n    }\n  }\n\n  private async sendLocalizationsMetadata() {\n    const metadata = await (await fetch(this.options.metadataFilePath)).json();\n    this.sendMessage('localizations', {\n      localizations: metadata\n    });\n  }\n\n  /**\n   * Function to trigger a re-send a requested messages to the Otter Chrome DevTools extension\n   * @param only restricted list of messages to re-send\n   */\n  private async handleReEmitRequest(only?: LocalizationMessageDataTypes[]) {\n    if (!only || only.includes('localizations')) {\n      void this.sendLocalizationsMetadata();\n    }\n    if (!only || only.includes('switchLanguage')) {\n      this.sendMessage('switchLanguage', { language: this.localizationDevTools.getCurrentLanguage() });\n    }\n    if (!only || only.includes('languages')) {\n      this.sendMessage('languages', { languages: this.localizationService.getLanguages() });\n    }\n    if (!only || only.includes('getTranslationValuesContentMessage')) {\n      this.sendMessage('getTranslationValuesContentMessage', {\n        translations: await firstValueFrom(this.localizationService.getTranslateService().getTranslation(this.localizationService.getCurrentLanguage()))\n      });\n    }\n    if (!only || only.includes('isTranslationDeactivationEnabled')) {\n      this.sendMessage('isTranslationDeactivationEnabled', { enabled: this.localizationService.isTranslationDeactivationEnabled() });\n    }\n  }\n\n  /**\n   * Function to handle the incoming messages from Otter Chrome DevTools extension\n   * @param message Message coming from the Otter Chrome DevTools extension\n   */\n  private handleEvents(message: AvailableLocalizationMessageContents) {\n    this.logger.debug('Message handling by the localization service', message);\n\n    switch (message.dataType) {\n      case 'connect': {\n        this.connectPlugin();\n        break;\n      }\n      case 'displayLocalizationKeys': {\n        this.localizationDevTools.showLocalizationKeys(message.toggle);\n        break;\n      }\n      case 'requestMessages': {\n        void this.handleReEmitRequest(message.only);\n        break;\n      }\n      case 'switchLanguage': {\n        void this.localizationDevTools.switchLanguage(message.language);\n        break;\n      }\n      case 'updateLocalization': {\n        void this.localizationDevTools.updateLocalizationKeys({\n          [message.key]: message.value\n        }, message.lang);\n        break;\n      }\n      case 'reloadLocalizationKeys': {\n        void this.localizationDevTools.reloadLocalizationKeys(message.lang);\n        break;\n      }\n      default: {\n        this.logger.warn('Message ignored by the localization service', message);\n      }\n    }\n  }\n\n  /**\n   * Function to connect the plugin to the Otter Chrome DevTools extension\n   */\n  private connectPlugin() {\n    this.logger.debug('Otter DevTools is plugged to localization service of the application');\n  }\n\n  /** @inheritDoc */\n  public activate() {\n    fromEvent(window, 'message').pipe(\n      takeUntilDestroyed(this.destroyRef),\n      filterMessageContent(isLocalizationMessage)\n    ).subscribe((e) => this.handleEvents(e));\n  }\n}\n","import {\n  ModuleWithProviders,\n  NgModule,\n} from '@angular/core';\nimport {\n  LocalizationModule,\n} from '../tools/index';\nimport type {\n  LocalizationDevtoolsServiceOptions,\n} from './localization-devkit.interface';\nimport {\n  LocalizationDevtoolsConsoleService,\n} from './localization-devtools.console.service';\nimport {\n  LocalizationDevtoolsMessageService,\n} from './localization-devtools.message.service';\nimport {\n  OtterLocalizationDevtools,\n} from './localization-devtools.service';\nimport {\n  OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS,\n  OTTER_LOCALIZATION_DEVTOOLS_OPTIONS,\n} from './localization-devtools.token';\n\n@NgModule({\n  imports: [\n    LocalizationModule\n  ],\n  providers: [\n    { provide: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, useValue: OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS },\n    LocalizationDevtoolsMessageService,\n    LocalizationDevtoolsConsoleService,\n    OtterLocalizationDevtools\n  ]\n})\nexport class LocalizationDevtoolsModule {\n  /**\n   * Initialize Otter Devtools\n   * @param options\n   */\n  public static instrument(options: Partial<LocalizationDevtoolsServiceOptions>): ModuleWithProviders<LocalizationDevtoolsModule> {\n    return {\n      ngModule: LocalizationDevtoolsModule,\n      providers: [\n        { provide: OTTER_LOCALIZATION_DEVTOOLS_OPTIONS, useValue: { ...OTTER_LOCALIZATION_DEVTOOLS_DEFAULT_OPTIONS, ...options }, multi: false },\n        LocalizationDevtoolsMessageService,\n        LocalizationDevtoolsConsoleService,\n        OtterLocalizationDevtools\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["actions.setLocalizationOverride","i1","i1.LocalizationService","i2"],"mappings":";;;;;;;;;;;;;;;;;;;AAMA;;;AAGG;AACH;AACM,SAAU,YAAY,CAAC,IAAY,EAAA;AACvC,IAAA,OAAO,CAAC,MAAW,EAAE,GAAW,KAAI;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,IAAI,CAAI,CAAA,EAAA,GAAG,EAAE;AACtC,QAAA,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC;AAEhC,QAAA,IAAI,OAAO,MAAM,CAAC,GAAG,CAAC,EAAE;AACtB,YAAA,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE;AACjC,gBAAA,GAAG,EAAE,YAAA;AACH,oBAAA,OAAO,IAAI,CAAC,YAAY,CAAC;iBAC1B;gBACD,GAAG,EAAE,UAAqB,KAA8B,EAAA;oBACtD,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,YAAY;oBACvD,IAAI,CAAC,YAAY,CAAC,GAAG,OAAO,YAAY,KAAK,WAAW,GAAG,kBAAkB,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC;AACpH,oBAAA,IAAI,IAAI,CAAC,8BAA8B,CAAC,EAAE;wBACxC,IAAI,CAAC,8BAA8B,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC;;iBAEzE;AACD,gBAAA,UAAU,EAAE,IAAI;AAChB,gBAAA,YAAY,EAAE;AACf,aAAA,CAAC;;AAEN,KAAC;AACH;;ACiBA;;AAEG;AACU,MAAA,kCAAkC,GAAwC;AACrF,IAAA,gBAAgB,EAAE,EAAE;AACpB,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,iBAAiB,EAAE,KAAK;AACxB,IAAA,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;AAC1B,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,iBAAiB,EAAE,EAAE;AACrB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,6BAA6B,EAAE,KAAK;AACpC,IAAA,0BAA0B,EAAE;;;AC/B9B;;AAEG;AACU,MAAA,wBAAwB,GAAsC;AACzE,IAAA,WAAW,EAAE,IAAI;AACjB,IAAA,SAAS,EAAE;;AAGb;MACa,qBAAqB,GAAG,IAAI,cAAc,CAA0B,8BAA8B;AAE/G;;;AAGG;AAEG,MAAO,kCAAmC,SAAQ,iBAAiB,CAAA;AAOvE,IAAA,WAAA,CAAuD,MAAgC,EAAA;AACrF,QAAA,KAAK,EAAE;;QAHD,IAAK,CAAA,KAAA,GAAuC,EAAE;AAKpD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,GAAG,EAAE,GAAG,wBAAwB,EAAE,GAAG,MAAM,EAAE,GAAG,wBAAwB;;AAG9F;;AAEG;IACI,UAAU,GAAA;AACf,QAAA,IAAI,CAAC,KAAK,GAAG,EAAE;;;IAIV,OAAO,CAAC,KAAa,EAAE,IAAY,EAAA;QACxC,OAAO,CAAC,MAAW,KAAM,IAAI,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAY;;;IAIxG,mBAAmB,CAAC,YAAkC,EAAE,IAAY,EAAA;AAGzE,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;AACpC,cAAE,CAAC,GAA2B,EAAE,GAAW,KAAI;AAC7C,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAW,KAAI;AACzB,oBAAA,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,GAAG,CAAE,CAAA,CAAC;oBAC3C,IAAI,MAAM,EAAE;AACV,wBAAA,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAW;;AAGxC,oBAAA,MAAM,aAAa,GAAG,IAAI,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC;oBAC5F,IAAI,CAAC,KAAK,CAAC,CAAG,EAAA,IAAI,CAAI,CAAA,EAAA,GAAG,CAAE,CAAA,CAAC,GAAG,aAAa;AAC5C,oBAAA,OAAO,aAAa,CAAC,MAAM,CAAC,MAAM,CAAW;AAC/C,iBAAC;AACD,gBAAA,OAAO,GAAG;;AAGZ,cAAE,CAAC,GAA2B,EAAE,GAAW,KAAI;AAC7C,gBAAA,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAW,KAAK,IAAI,iBAAiB,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,MAAM,CAAW;AAC3H,gBAAA,OAAO,GAAG;AACZ,aAAC;QAEH,OAAO,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,CAAyB,CAAC,GAAG,EAAE,GAAG,KAAK,iBAAiB,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC;;AAjDrG,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,kBAOb,qBAAqB,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qIAP1C,kCAAkC,EAAA,CAAA,CAAA;;2FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C;;0BAQc;;0BAAY,MAAM;2BAAC,qBAAqB;;;AC3CvD;AACA,MAAM,UAAU,GAAG,4BAA4B;AAE/C;;AAEG;AACU,MAAA,uBAAuB,GAAG,YAAY,CAAC,UAAU,EAAE,KAAK,EAAoD;;ACNzH;;AAEG;MACU,gCAAgC,GAA8B,EAAE,qBAAqB,EAAE,EAAE;AAEtG;;AAEG;AACU,MAAA,mCAAmC,GAA+D;IAC7G,EAAE,CAACA,uBAA+B,EAAE,CAAC,MAAM,EAAE,OAAO,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;;AAGjF;;AAEG;AACU,MAAA,2BAA2B,GAAG,aAAa,CACtD,gCAAgC,EAChC,GAAG,mCAAmC;;ACpBxC;;AAEG;AACI,MAAM,gCAAgC,GAAG;;ACOhD;MACa,mCAAmC,GAAG,IAAI,cAAc,CAAmD,sCAAsC;AAE9J;SACgB,qCAAqC,GAAA;AACnD,IAAA,OAAO,2BAA2B;AACpC;MAUa,+BAA+B,CAAA;IACnC,OAAO,OAAO,CAAsC,cAA8C,EAAA;QACvG,OAAO;AACL,YAAA,QAAQ,EAAE,+BAA+B;AACzC,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,mCAAmC,EAAE,UAAU,EAAE,cAAc;AAC3E;SACF;;iIAPQ,+BAA+B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;kIAA/B,+BAA+B,EAAA,OAAA,EAAA,CAAAC,EAAA,CAAA,kBAAA,CAAA,EAAA,CAAA,CAAA;AAA/B,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,+BAA+B,EAJ/B,SAAA,EAAA;AACT,YAAA,EAAE,OAAO,EAAE,mCAAmC,EAAE,UAAU,EAAE,qCAAqC;AAClG,SAAA,EAAA,OAAA,EAAA,CAJC,WAAW,CAAC,UAAU,CAAC,gCAAgC,EAAE,mCAAmC,CAAC,CAAA,EAAA,CAAA,CAAA;;2FAMpF,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAR3C,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;AACP,wBAAA,WAAW,CAAC,UAAU,CAAC,gCAAgC,EAAE,mCAAmC;AAC7F,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,mCAAmC,EAAE,UAAU,EAAE,qCAAqC;AAClG;AACF,iBAAA;;;ACxBD;MACa,+BAA+B,GAAG,qBAAqB,CAA4B,gCAAgC;AAEhI;AACa,MAAA,0BAA0B,GAAG,cAAc,CAAC,+BAA+B,EAAE,CAAC,KAAK,KAAK,KAAK,EAAE,qBAAqB,IAAI,EAAE;;ACH1H,MAAA,uCAAuC,GAAG,CAAC,SAAc,KAAI;IACxE,IAAI,CAAC,SAAS,EAAE;AACd,QAAA,OAAO,gCAAgC;;AAEzC,IAAA,OAAO,SAAS;AAClB;AAEa,MAAA,+BAA+B,GAA0C;AACpF,IAAA,WAAW,EAAE;;;ACXf;MACa,gCAAgC,GAAG,IAAI,cAAc,CAA4B,4CAA4C;;AC8B1I;;;;AAIG;MAEU,mBAAmB,CAAA;AAkB9B,IAAA,WAAA,CACmB,gBAAkC,EAClC,MAAqB,EACqB,aAAwC,EACtE,KAAwC,EAAA;QAHpD,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAChB,IAAM,CAAA,MAAA,GAAN,MAAM;QACoC,IAAa,CAAA,aAAA,GAAb,aAAa;QAC3C,IAAK,CAAA,KAAA,GAAL,KAAK;QArBnB,IAAqB,CAAA,qBAAA,GAAW,GAAG;AAEpD;;AAEG;AACc,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,eAAe,CAAC,KAAK,CAAC;AAOxD;;AAEG;AACI,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE;QAQ/C,IAAI,CAAC,SAAS,EAAE;AAChB,QAAA,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAChC,MAAM,CAAC,0BAA0B,CAAC,CACnC;;;AAIL;;;;;;AAMG;AACK,IAAA,uBAAuB,CAA+B,QAAW,EAAA;AACvE,QAAA,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;YACvE,MAAM,4BAA4B,GAAG,IAAI,CAAC,oCAAoC,CAAC,QAAQ,CAAC;YACxF,MAAM,mBAAmB,GAAG,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC;AACjE,YAAA,MAAM,qBAAqB,GAAG,CAAC,mBAAmB,IAAI,gCAAgC;oBAChF,4BAA4B,IAAI,8BAA8B;oBAC9D,IAAI,CAAC,aAAa,CAAC,gBAAgB,IAAI,+BAA+B,CAAC;AAC7E,YAAA,MAAM,YAAY,GAAG,mBAAmB,IAAI,4BAA4B,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,IAAI,QAAQ;AAC3H,YAAA,IAAI,QAAQ,KAAK,YAAY,EAAE;AAC7B,gBAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA,wBAAA,EAA2B,QAAQ,CAAA,kBAAA,EAAqB,qBAAqB,CAAA,CAAA,EAAI,YAAY,CAAA,CAAE,CAAC;;AAEpH,YAAA,OAAO,YAAY;;aACd,IAAI,CAAC,QAAQ,EAAE;AACpB,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,CAAC;;AAE9C,QAAA,OAAO,QAAQ;;AAGjB;;;;;;;AAOG;AACK,IAAA,sBAAsB,CAAC,QAAgB,EAAA;AAC7C,QAAA,MAAM,kBAAkB,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB;AAChE,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAE3D,QAAA,OAAO,kBAAkB,KAAK,kBAAkB,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;;AAG3F;;;;;;;AAOG;AACK,IAAA,oCAAoC,CAAC,QAAgB,EAAA;AAC3D,QAAA,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC;AAC3D,QAAA,MAAM,gBAAgB,GAAG,IAAI,MAAM,CAAC,CAAI,CAAA,EAAA,MAAM,CAAG,EAAA,IAAI,CAAC,qBAAqB,CAAA,CAAA,CAAG,EAAE,GAAG,CAAC;QAEpF,OAAO,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,aAAa,KAAK,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;AAG1G;;;;;AAKG;IACK,oBAAoB,CAAC,cAAsB,EAAE,iBAA0B,EAAA;AAC7E,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,IAAI,CACvF,GAAG,CAAC,CAAC,KAAa,KAAK,IAAI,CAAC,aAAa,CAAC,SAAS,GAAG,CAAA,EAAG,cAAc,CAAM,GAAA,EAAA,KAAK,EAAE,GAAG,KAAK,CAAC,CAC9F;AAED,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAAE;AACrD,YAAA,OAAO,YAAY;;AAGrB,QAAA,OAAO,aAAa,CAAC;YACnB,YAAY;AACZ,YAAA,IAAI,CAAC;SACN,CAAC,CAAC,IAAI,CACL,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,QAAQ,GAAG,cAAc,GAAG,KAAK,CAAC,CAC9D;;AAGH;;AAEG;IACI,SAAS,GAAA;AACd,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,IAAI,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;QACjH,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC;AACnE,QAAA,IAAI,CAAC,gBAAgB,CAAC,cAAc,CAAC,QAAQ,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;;AAG5B;;AAEG;IACI,gCAAgC,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,6BAA6B;;AAGzD;;AAEG;IACI,YAAY,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,QAAQ,EAAE;;AAGzC;;;AAGG;AACI,IAAA,WAAW,CAAC,QAAgB,EAAA;AACjC,QAAA,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC;QACjD,OAAO,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;;AAG5C;;AAEG;IACI,kBAAkB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW;;AAG1C;;AAEG;IACI,mBAAmB,GAAA;QACxB,OAAO,IAAI,CAAC,gBAAgB;;AAG9B;;;AAGG;AACI,IAAA,cAAc,CAAC,KAAe,EAAA;AACnC,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,6BAA6B,EAAE;AACrD,YAAA,MAAM,IAAI,KAAK,CAAC,yIAAyI,CAAC;;AAE5J,QAAA,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,GAAG,CAAC,IAAI,CAAC,QAAQ,GAAG,KAAK;AAC7D,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC;;AAGhC;;AAEG;AACH,IAAA,IAAW,QAAQ,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK;;AAG9B;;;AAGG;AACI,IAAA,MAAM,CAAC,YAAoB,EAAA;QAChC,OAAO,IAAI,CAAC;cACR,IAAI,CAAC,WAAW,CAAC,IAAI,CACrB,GAAG,CAAC,CAAC,UAAU,KAAK,UAAU,GAAG,YAAY,CAAC,IAAI,YAAY,CAAC,EAC/D,oBAAoB,EAAE;AAExB,cAAE,EAAE,CAAC,YAAY,CAAC;;AAGtB;;;;;AAKG;IACI,SAAS,CAAC,GAAW,EAAE,iBAA0B,EAAA;AACtD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAC1B,SAAS,CAAC,CAAC,cAAc,KAAK,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC,EAC3F,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAC/C;;AAvMQ,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,+EAqBpB,gCAAgC,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qIArB/B,mBAAmB,EAAA,CAAA,CAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B;;0BAsBI,MAAM;2BAAC,gCAAgC;;0BACvC;;;AC1CL;;AAEG;AAKG,MAAO,8BAA+B,SAAQ,kBAAkB,CAAA;;IAiBpE,IACW,SAAS,CAAC,GAAW,EAAA;QAC9B,IAAI,GAAG,IAAI,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE;AAC3B,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;;AAEhC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,KAAI;AAC3E,gBAAA,IAAI,CAAC,GAAG,GAAG,MAAM;gBACjB,IAAI,CAAC,UAAU,EAAE;AACnB,aAAC,CAAC;;;IAIN,WAA6B,CAAA,mBAAwC,EAAE,gBAAkC,EAAE,OAAmB,EAAE,IAAuB,EAC1F,kBAA6C,EAAA;AACxG,QAAA,KAAK,CAAC,gBAAgB,EAAE,OAAO,EAAE,IAAI,CAAC;QAFX,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACa,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;AAzB/E;;AAEG;QACK,IAAQ,CAAA,QAAA,GAAG,KAAK;AAyBtB,QAAA,IAAI,kBAAkB,CAAC,6BAA6B,EAAE;AACpD,YAAA,IAAI,CAAC,gBAAgB,GAAG,mBAAmB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AAC3E,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,gBAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;AACvB,aAAC,CAAC;;;AAIN;;;;AAIG;IACI,UAAU,CAAC,IAAS,EAAE,OAAe,EAAA;AAC1C,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,eAAe;AAChC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,IAAI,GAAG,GAAG,CAAG,EAAA,GAAa,CAAM,GAAA,EAAA,OAAO,EAAE,GAAG,OAAO,CAAC;AAC/H,QAAA,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE;AACxE,YAAA,IAAI,CAAC,WAAW,GAAG,UAAU;;aACxB;AACL,YAAA,IAAI,CAAC,IAAI,GAAG,UAAU;;;IAInB,WAAW,GAAA;QAChB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;;AAErC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE;;;AA/DxB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,8BAA8B,6IA+B/B,gCAAgC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;qHA/B/B,8BAA8B,EAAA,YAAA,EAAA,KAAA,EAAA,QAAA,EAAA,6BAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,eAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAA9B,8BAA8B,EAAA,UAAA,EAAA,CAAA;kBAJ1C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,6BAA6B;AACvC,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAgCI,MAAM;2BAAC,gCAAgC;yCAb/B,SAAS,EAAA,CAAA;sBADnB;;;ACxBH;;AAEG;AAMG,MAAO,4BAA6B,SAAQ,aAAa,CAAA;AAsB7D,IAAA,WAAA,CAA+B,mBAAwC,EAAE,gBAAkC,EAAqB,cAAiC,EAClG,kBAA6C,EAAA;AAC1G,QAAA,KAAK,CAAC,gBAAgB,EAAE,cAAc,CAAC;QAFV,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QAA8E,IAAc,CAAA,cAAA,GAAd,cAAc;QAC/E,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB;AAZjF;;AAEG;QACO,IAAQ,CAAA,QAAA,GAAG,KAAK;AAYxB,QAAA,IAAI,kBAAkB,CAAC,6BAA6B,EAAE;AACpD,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,QAAQ,KAAI;AAChF,gBAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AACpC,aAAC,CAAC;;;AAIN;;;AAGG;AACI,IAAA,SAAS,CAAC,KAAa,EAAE,GAAG,IAAW,EAAA;AAC5C,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,OAAO,KAAK;;AAGd,QAAA,IAAI,KAAK,KAAK,IAAI,CAAC,YAAY,EAAE;AAC/B,YAAA,IAAI,CAAC,YAAY,GAAG,KAAK;AACzB,YAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,gBAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;;AAEhC,YAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,KAAI;AAC1E,gBAAA,IAAI,CAAC,eAAe,GAAG,GAAG;AAC1B,gBAAA,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;AACpC,aAAC,CAAC;;AAGJ,QAAA,IAAI,IAAI,CAAC,eAAe,EAAE;AACxB,YAAA,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,eAAe,EAAE,GAAG,IAAI,CAAC;AAE5D,YAAA,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,EAAE;AACrC,gBAAA,OAAO,GAAG,IAAI,CAAC,eAAe,CAAM,GAAA,EAAA,KAAe,EAAE;;AAGvD,YAAA,OAAO,KAAK;;QAGd,OAAO,IAAI,CAAC,KAAK;;IAGZ,WAAW,GAAA;QAChB,KAAK,CAAC,WAAW,EAAE;AACnB,QAAA,IAAI,IAAI,CAAC,gBAAgB,EAAE;AACzB,YAAA,IAAI,CAAC,gBAAgB,CAAC,WAAW,EAAE;;AAErC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AACpB,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE;;;AAzEvB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,4BAA4B,mHAuB7B,gCAAgC,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;+HAvB/B,4BAA4B,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,cAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAA5B,4BAA4B,EAAA,UAAA,EAAA,CAAA;kBALxC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,cAAc;AACpB,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAwBI,MAAM;2BAAC,gCAAgC;;;ACvC5C;;AAEG;AAMG,MAAO,qBAAsB,SAAQ,YAAY,CAAA;IAGrD,WAA6B,CAAA,mBAAwC,EAAmB,iBAAoC,EAAA;AAC1H,QAAA,KAAK,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;QADpB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QAAwC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QAEvG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,MACxF,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CACtC;;IAWI,SAAS,CACd,KAAyC,EAAE,YAAqB,EAAE,OAA0B,EAAE,UAAmB,EAAE,MAAe,EAAA;QAClI,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;;IAGpH,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;iIAxBtB,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAC,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;+HAArB,qBAAqB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBALjC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,UAAU;AAChB,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACPD;;AAEG;AAMG,MAAO,iBAAkB,SAAQ,QAAQ,CAAA;IAG7C,WAA6B,CAAA,mBAAwC,EAAmB,iBAAoC,EAAA;AAC1H,QAAA,KAAK,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;QADpB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QAAwC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QAEvG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,MACxF,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CACtC;;IAYI,SAAS,CACd,KAAgD,EAAE,MAAM,GAAG,YAAY,EAAE,QAAiB,EAC1F,MAAe,EAAA;AACf,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;;IAGhJ,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;iIA1BtB,iBAAiB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;+HAAjB,iBAAiB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,MAAM;AACZ,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACPD;;AAEG;AAMG,MAAO,oBAAqB,SAAQ,WAAW,CAAA;IAGnD,WAA6B,CAAA,mBAAwC,EAAmB,iBAAoC,EAAA;AAC1H,QAAA,KAAK,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;QADpB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QAAwC,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QAEvG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,MACxF,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CACtC;;AAQI,IAAA,SAAS,CAAC,KAAyC,EAAE,UAAmB,EAAE,MAAe,EAAA;AAC9F,QAAA,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;;IAG7F,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;;iIApBtB,oBAAoB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAA,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;+HAApB,oBAAoB,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,IAAA,EAAA,KAAA,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBALhC,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACJ,oBAAA,IAAI,EAAE,SAAS;AACf,oBAAA,IAAI,EAAE,KAAK;AACX,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACAD;;AAEG;MAEU,oBAAoB,CAAA;AAI/B,IAAA,WAAA,CACmB,gBAAkC,EACQ,aAAwC,EAClF,eAAiC,EACjC,cAA8B,EAAA;QAH9B,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB;QAC0B,IAAa,CAAA,aAAA,GAAb,aAAa;QACvD,IAAe,CAAA,eAAA,GAAf,eAAe;QACf,IAAc,CAAA,cAAA,GAAd,cAAc;AAC/B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC;;AAGjE;;;AAGG;IACI,wBAAwB,GAAA;QAC7B,IAAI,IAAI,CAAC,YAAY,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE;YAClD,OAAO,IAAI,CAAC,YAAY;;AAE1B,QAAA,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,KAAsB,KAAI;AAC1F,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,KAAK;AACpG,YAAA,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,CAAC;YAC3D,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;AAC5C,SAAC,CAAC;QACF,OAAO,IAAI,CAAC,YAAY;;AAzBf,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,kDAMrB,gCAAgC,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAAC,IAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qIAN/B,oBAAoB,EAAA,CAAA,CAAA;;2FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC;;0BAOI,MAAM;2BAAC,gCAAgC;;;ACjBtC,MAAO,kBAAmB,SAAQ,cAAc,CAAA;AAOpD,IAAA,WAAA,CAA8C,SAAe,EAAA;QAC3D,KAAK,CAAC,SAAS,CAAC;AAChB,QAAA,IAAI,CAAC;AACF,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAC1B,aAAA,SAAS,CAAC,CAAC,KAAgB,KAAK,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;;IAGjD,WAAW,GAAA;AAChB,QAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;;AAfb,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBAOG,YAAY,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qIAPjC,kBAAkB,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;0BAQc;;0BAAY,MAAM;2BAAC,YAAY;;;ACgC9C;;;AAGG;AACG,SAAU,+BAA+B,CAAC,aAAkD,EAAA;IAChG,OAAO;AACL,QAAA,GAAG,kCAAkC;AACrC,QAAA,GAAG;KACJ;AACH;AAEA;;;AAGG;AACG,SAAU,gBAAgB,CAAC,mBAAwC,EAAA;AACvE,IAAA,OAAO,mBAAmB,CAAC,kBAAkB,EAAE;AACjD;AAEA;MACa,uCAAuC,GAAG,IAAI,cAAc,CAAqC,oCAAoC;MAgBrI,kBAAkB,CAAA;AAC7B;;;;;;;;AAQG;IACI,OAAO,OAAO,CACnB,aAAwD,EAAA;QAExD,OAAO;AACL,YAAA,QAAQ,EAAE,kBAAkB;AAC5B,YAAA,SAAS,EAAE;gBACT,mBAAmB;AACnB,gBAAA,IAAI;AACF,sBAAE,CAAC;AACD,4BAAA,OAAO,EAAE,uCAAuC;AAChD,4BAAA,UAAU,EAAE;yBACb;sBACC,EAAE;AACP;SACF;;iIAxBQ,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAlB,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAbd,YAAA,EAAA,CAAA,4BAA4B,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,CACjI,EAAA,OAAA,EAAA,CAAA,eAAe,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAAY,CAC/D,EAAA,OAAA,EAAA,CAAA,eAAe,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;AAW5I,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAVlB,SAAA,EAAA;AACT,YAAA,EAAE,OAAO,EAAE,gCAAgC,EAAE,UAAU,EAAE,+BAA+B,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,EAAE,uCAAuC,CAAC,CAAC,EAAE;AAC7J,YAAA,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,mBAAmB,CAAC,EAAE;AACjF,YAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE;AACzD,YAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAClD,YAAA,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,oBAAoB,EAAE;AACxD,YAAA,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,qBAAqB,EAAE;YAC1D;SACD,EAVS,OAAA,EAAA,CAAA,eAAe,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAAY,EAC/D,eAAe,CAAA,EAAA,CAAA,CAAA;;2FAWd,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAd9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACR,YAAY,EAAE,CAAC,4BAA4B,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC;oBAC5I,OAAO,EAAE,CAAC,eAAe,EAAE,UAAU,EAAE,oBAAoB,EAAE,YAAY,CAAC;AAC1E,oBAAA,OAAO,EAAE,CAAC,eAAe,EAAE,4BAA4B,EAAE,8BAA8B,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,qBAAqB,CAAC;AACxJ,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,gCAAgC,EAAE,UAAU,EAAE,+BAA+B,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,QAAQ,EAAE,EAAE,uCAAuC,CAAC,CAAC,EAAE;AAC7J,wBAAA,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,mBAAmB,CAAC,EAAE;AACjF,wBAAA,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,EAAE;AACzD,wBAAA,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,iBAAiB,EAAE;AAClD,wBAAA,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,oBAAoB,EAAE;AACxD,wBAAA,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,qBAAqB,EAAE;wBAC1D;AACD;AACF,iBAAA;;;AC1DD,MAAM,QAAQ,GAAG,OAAO;AAExB;;;;;AAKG;MAEU,kBAAkB,CAAA;AAC7B,IAAA,WAAA,CAAuE,yBAAoD,EAC5F,MAAsB,EACtB,qBAA6C,EAAA;QAFL,IAAyB,CAAA,yBAAA,GAAzB,yBAAyB;QACjE,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAqB,CAAA,qBAAA,GAArB,qBAAqB;;AAEpD;;;AAGG;AACK,IAAA,uBAAuB,CAAC,GAAW,EAAA;AACzC,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,yBAAyB,CAAC,WAAW;QAE9D,IAAI,WAAW,GAAG,EAAE;QACpB,IAAI,WAAW,EAAE;AACf,YAAA,WAAW,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,kBAAkB,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,kBAAkB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;AAE3I,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,EAAE,IAAI,CAAC,yBAAyB,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CACrF,SAAS,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAC/C;;AAGH;;AAEG;AACI,IAAA,cAAc,CAAC,IAAY,EAAA;AAChC,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,yBAAyB,CAAC,gBAAgB;QAChE,IAAI,iBAAiB,GAAG,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC;AAEtE,QAAA,IAAI,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,EAAE;AACpD,YAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,gBAAA,MAAM,IAAI,KAAK,CAAC,uHAAuH,CAAC;;AAE1I,YAAA,iBAAiB,GAAG,IAAI,CAAC,qBAAqB,CAAC,oBAAoB,CAAC,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC;;QAGjH,OAAO,iBAAiB,CAAC,IAAI,CAC3B,SAAS,CAAC,CAAC,gBAAwB,KAAI;YACrC,IAAI,gBAAgB,EAAE;AACpB,gBAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,gBAAgB,GAAG,IAAI,GAAG,QAAQ,CAAC;AAE5F,gBAAA,IAAI,IAAI,CAAC,yBAAyB,CAAC,0BAA0B,EAAE;AAC7D,oBAAA,OAAO,aAAa,CAAC;AACnB,wBAAA,mBAAmB,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAClD,wBAAA,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,CAC/C,GAAG,CAAC,CAAC,YAAY,KAAI;4BACnB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC,GAAG,CAAC,GAAG,CAAA,QAAA,EAAW,YAAY,CAAC,GAAG,CAAW,CAAE,CAAA,CAAC;AACxG,4BAAA,OAAO,YAAY;AACrB,yBAAC,CAAC;qBAEL,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,MAAM,EAAE,GAAG,iBAAiB,EAAE,GAAG,mBAAmB,EAAE,CAAC,CAAC,CAAC;;AAGhH;;;;AAIE;AACF,gBAAA,OAAO,mBAAmB,CAAC,IAAI,CAC7B,UAAU,CAAC,MAAK;AACd,oBAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA,8CAAA,EAAiD,gBAAgB,GAAG,IAAI,GAAG,QAAQ,CAAA,uCAAA,CAAyC,CAAC;oBAC/I,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC;iBACpD,CAAC,CACH;;AAEH;;;AAGE;AACF,YAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,mFAAmF,CAAC;YACtG,OAAO,IAAI,CAAC,uBAAuB,CAAC,IAAI,EAAE,QAAQ,CAAC;SACpD,CAAC,CACH;;AAGH;;;;;;;;AAQG;IACI,uBAAuB,CAAC,IAAY,EAAE,gBAAwB,EAAA;AACnE,QAAA,MAAM,UAAU,GAAW,IAAI,CAAC,yBAAyB,CAAC,iBAAiB;AAC3E,QAAA,OAAO,IAAI,CAAC,uBAAuB,CAAC,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,IAAI,CACpE,UAAU,CAAC,MAAK;AACd,YAAA,IAAI,IAAI,KAAK,gBAAgB,EAAE;AAC7B,gBAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAkB,eAAA,EAAA,IAAI,CAAS,MAAA,EAAA,UAAU,GAAG,IAAI,GAAG,QAAQ,CAAA,CAAA,CAAG,CAAC;AACjF,gBAAA,OAAO,EAAE,CAAC,EAAE,CAAC;;iBACR;AACL,gBAAA,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,kBAAkB,IAAI,CAAA,MAAA,EAAS,UAAU,GAAG,IAAI,GAAG,QAAQ,kCAAkC,gBAAgB,CAAA,CAAE,CAAC;gBAClI,OAAO,IAAI,CAAC,uBAAuB,CAAC,UAAU,GAAG,gBAAgB,GAAG,QAAQ,CAAC,CAAC,IAAI,CAChF,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CACzB;;SAEJ,CAAC,CACH;;AAjGQ,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBACT,gCAAgC,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,IAAA,CAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qIADzC,kBAAkB,EAAA,CAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B;;0BAEc,MAAM;2BAAC,gCAAgC;;0BACjD;;0BACA;;;ACrBL;;;;;;AAMG;SACa,qBAAqB,CAAC,yBAAoD,EAAE,MAAsB,EAAE,qBAA6C,EAAA;IAC/J,OAAO,IAAI,kBAAkB,CAAC,yBAAyB,EAAE,MAAM,EAAE,qBAAqB,CAAC;AACzF;AAEA;;AAEG;AACU,MAAA,uBAAuB,GAA8B;AAChE,IAAA,OAAO,EAAE,eAAe;AACxB,IAAA,UAAU,EAAE,qBAAqB;AACjC,IAAA,IAAI,EAAE,CAAC,gCAAgC,EAAE,CAAC,IAAI,QAAQ,EAAE,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,QAAQ,EAAE,EAAE,qBAAqB,CAAC;;;MCpBtG,yBAAyB,CAAA;AACpC,IAAA,WAAA,CACmB,mBAAwC,EACxC,iBAAoC,EACpC,MAAsB,EAAA;QAFtB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACnB,IAAiB,CAAA,iBAAA,GAAjB,iBAAiB;QACjB,IAAM,CAAA,MAAA,GAAN,MAAM;;AAGzB;;AAEG;IACI,gCAAgC,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,gCAAgC,EAAE;;AAGpE;;;AAGG;AACI,IAAA,oBAAoB,CAAC,KAAe,EAAA;AACzC,QAAA,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,KAAK,CAAC;AAC9C,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;AAGpB;;AAEG;IACI,kBAAkB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE;;AAGtD;;;AAGG;AACI,IAAA,gBAAgB,CAAC,EAA6B,EAAA;QACnD,OAAO,IAAI,CAAC;AACT,aAAA,mBAAmB;aACnB;AACA,aAAA,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,KAAI;YACtB,EAAE,CAAC,IAAI,CAAC;AACV,SAAC,CAAC;;AAGN;;;AAGG;IACI,MAAM,cAAc,CAAC,QAA4B,EAAA;QACtD,IAAI,CAAC,QAAQ,EAAE;YACb;;QAEF,MAAM,aAAa,CAAC,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACnE,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;AAGpB;;;;;;AAMG;AACI,IAAA,MAAM,sBAAsB,CAAC,SAAoC,EAAE,QAAiB,EAAA;QACzF,MAAM,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;QAClD,MAAM,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE;QACvE,MAAM,cAAc,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAC3D,QAAA,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;YACjD,gBAAgB,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC;AACxC,SAAC,CAAC;AACF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;AAGpB;;;;AAIG;IACI,MAAM,sBAAsB,CAAC,QAAiB,EAAA;QACnD,MAAM,IAAI,GAAG,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE;AAClD,QAAA,IAAK,IAAI,CAAC,iBAAwD,CAAC,UAAU,EAAE;AAC5E,YAAA,IAAI,CAAC,iBAAwD,CAAC,UAAU,EAAE;;AAE7E,QAAA,MAAM,WAAW,GAAG,MAAM,aAAa,CACrC,IAAI,CAAC;AACF,aAAA,mBAAmB;AACnB,aAAA,UAAU,CAAC,IAAI,CAAC,CACpB;AACD,QAAA,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,CAAC,cAAc,CAC3D,QAAQ,IAAI,IAAI,CAAC,kBAAkB,EAAE,EACrC,WAAW,CACZ;AACD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE;;iIA3FT,yBAAyB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAAD,mBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qIAAzB,yBAAyB,EAAA,CAAA,CAAA;;2FAAzB,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBADrC;;;ACZY,MAAA,2CAA2C,GAAiD;AACvG,IAAA,sBAAsB,EAAE,KAAK;AAC7B,IAAA,oCAAoC,EAAE,IAAI;AAC1C,IAAA,gBAAgB,EAAE;;MAGP,mCAAmC,GAAG,IAAI,cAAc,CAAqC,qCAAqC;;ACb/I;MA2Ba,kCAAkC,CAAA;;aAEtB,IAAgB,CAAA,gBAAA,GAAG,cAAH,CAAkB;IAEzD,WACmB,CAAA,oBAA+C,EACU,OAAA,GAA8C,2CAA2C,EAAA;QADlJ,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACqC,IAAO,CAAA,OAAA,GAAP,OAAO;AAEjF,QAAA,IACE,IAAI,CAAC,OAAO,CAAC;AACV,gBACD,IAAI,CAAC,OAAO,CAAC;mBACT,QAAQ,CAAC,IAAI,CAAC,OAAoC,CAAC,UAAU,KAAK,MAAM,CAC7E,EACD;YACA,IAAI,CAAC,QAAQ,EAAE;;;;IAKZ,QAAQ,GAAA;QACb,MAAM,kBAAkB,GAAuB,MAAM;AAErD,QAAA,kBAAkB,CAAC,gBAAgB,KAAK,EAAE;QAE1C,kBAAkB,CAAC,gBAAgB,CAAC,kCAAkC,CAAC,gBAAgB,CAAC,GAAG,IAAI;QAE/F,OAAO,CAAC,IAAI,CAAC,CAAA,uEAAA,EAA0E,kCAAkC,CAAC,gBAAgB,CAAW,SAAA,CAAA,CAAC;;AAGxJ;;AAEG;IACI,gCAAgC,GAAA;AACrC,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,gCAAgC,EAAE;;AAGrE;;AAEG;AACI,IAAA,oBAAoB,CAAC,KAAe,EAAA;AACzC,QAAA,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,KAAK,CAAC;;AAGvD;;AAEG;IACI,kBAAkB,GAAA;QACvB,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE;AACtE,QAAA,OAAO,eAAe;;AAGxB;;AAEG;IACI,MAAM,cAAc,CAAC,QAAgB,EAAA;QAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE;QAC/D,MAAM,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,QAAQ,CAAC;QACxD,MAAM,OAAO,GAAG,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE;QAC9D,OAAO;AACL,YAAA,SAAS,EAAE,QAAQ;YACnB,QAAQ;YACR;SACD;;AAGH;;AAEG;AACI,IAAA,gBAAgB,CAAC,EAA6B,EAAA;QACnD,OAAO,IAAI,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,EAAE,CAAC;;AAGvD;;AAEG;IACI,sBAAsB,CAAC,SAAoC,EAAE,QAAiB,EAAA;QACnF,OAAO,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,SAAS,EAAE,QAAQ,CAAC;;AAG9E;;AAEG;AACI,IAAA,sBAAsB,CAAC,QAAiB,EAAA;QAC7C,OAAO,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,QAAQ,CAAC;;AApFxD,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,wDAMvB,mCAAmC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qIAN9C,kCAAkC,EAAA,CAAA,CAAA;;2FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C;;0BAOI;;0BAAY,MAAM;2BAAC,mCAAmC;;;ACI3D,MAAM,qBAAqB,GAAG,CAAC,OAAY,KAAqD;AAC9F,IAAA,OAAO,OAAO,KACZ,OAAO,CAAC,QAAQ,KAAK;WAClB,OAAO,CAAC,QAAQ,KAAK;WACrB,OAAO,CAAC,QAAQ,KAAK;WACrB,OAAO,CAAC,QAAQ,KAAK;WACrB,OAAO,CAAC,QAAQ,KAAK;WACrB,OAAO,CAAC,QAAQ,KAAK;WACrB,OAAO,CAAC,QAAQ,KAAK;WACrB,OAAO,CAAC,QAAQ,KAAK;WACrB,OAAO,CAAC,QAAQ,KAAK;AACrB,WAAA,OAAO,CAAC,QAAQ,KAAK,oCAAoC,CAC7D;AACH,CAAC;MAGY,kCAAkC,CAAA;AAI7C,IAAA,WAAA,CACmB,MAAqB,EACrB,oBAA+C,EAC/C,mBAAwC,EACiB,UAA8C,2CAA2C,EAAA;QAHlJ,IAAM,CAAA,MAAA,GAAN,MAAM;QACN,IAAoB,CAAA,oBAAA,GAApB,oBAAoB;QACpB,IAAmB,CAAA,mBAAA,GAAnB,mBAAmB;QACsC,IAAO,CAAA,OAAA,GAAP,OAAO;AAPlE,QAAA,IAAA,CAAA,WAAW,IAAG,gBAAsD,CAAA;AACpE,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;QAQ9C,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,GAAG,2CAA2C;YAC9C,GAAG,IAAI,CAAC;SACT;AACD,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE;YACvC,IAAI,CAAC,QAAQ,EAAE;;;AAIX,IAAA,MAAM,yBAAyB,GAAA;AACrC,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,IAAI,EAAE;AAC1E,QAAA,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE;AAChC,YAAA,aAAa,EAAE;AAChB,SAAA,CAAC;;AAGJ;;;AAGG;IACK,MAAM,mBAAmB,CAAC,IAAqC,EAAA;QACrE,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;AAC3C,YAAA,KAAK,IAAI,CAAC,yBAAyB,EAAE;;QAEvC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,oBAAoB,CAAC,kBAAkB,EAAE,EAAE,CAAC;;QAElG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,EAAE,CAAC;;QAEvF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,oCAAoC,CAAC,EAAE;AAChE,YAAA,IAAI,CAAC,WAAW,CAAC,oCAAoC,EAAE;gBACrD,YAAY,EAAE,MAAM,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,mBAAmB,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;AAChJ,aAAA,CAAC;;QAEJ,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,kCAAkC,CAAC,EAAE;AAC9D,YAAA,IAAI,CAAC,WAAW,CAAC,kCAAkC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,mBAAmB,CAAC,gCAAgC,EAAE,EAAE,CAAC;;;AAIlI;;;AAGG;AACK,IAAA,YAAY,CAAC,OAA6C,EAAA;QAChE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8CAA8C,EAAE,OAAO,CAAC;AAE1E,QAAA,QAAQ,OAAO,CAAC,QAAQ;YACtB,KAAK,SAAS,EAAE;gBACd,IAAI,CAAC,aAAa,EAAE;gBACpB;;YAEF,KAAK,yBAAyB,EAAE;gBAC9B,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC;gBAC9D;;YAEF,KAAK,iBAAiB,EAAE;gBACtB,KAAK,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC;gBAC3C;;YAEF,KAAK,gBAAgB,EAAE;gBACrB,KAAK,IAAI,CAAC,oBAAoB,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAC/D;;YAEF,KAAK,oBAAoB,EAAE;AACzB,gBAAA,KAAK,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC;AACpD,oBAAA,CAAC,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;AACxB,iBAAA,EAAE,OAAO,CAAC,IAAI,CAAC;gBAChB;;YAEF,KAAK,wBAAwB,EAAE;gBAC7B,KAAK,IAAI,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,OAAO,CAAC,IAAI,CAAC;gBACnE;;YAEF,SAAS;gBACP,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,6CAA6C,EAAE,OAAO,CAAC;;;;AAK9E;;AAEG;IACK,aAAa,GAAA;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sEAAsE,CAAC;;;IAIpF,QAAQ,GAAA;AACb,QAAA,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,IAAI,CAC/B,kBAAkB,CAAC,IAAI,CAAC,UAAU,CAAC,EACnC,oBAAoB,CAAC,qBAAqB,CAAC,CAC5C,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;;AAtG/B,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kCAAkC,qHAQvB,mCAAmC,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;qIAR9C,kCAAkC,EAAA,CAAA,CAAA;;2FAAlC,kCAAkC,EAAA,UAAA,EAAA,CAAA;kBAD9C;;0BASI;;0BAAY,MAAM;2BAAC,mCAAmC;;;MC1B9C,0BAA0B,CAAA;AACrC;;;AAGG;IACI,OAAO,UAAU,CAAC,OAAoD,EAAA;QAC3E,OAAO;AACL,YAAA,QAAQ,EAAE,0BAA0B;AACpC,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,mCAAmC,EAAE,QAAQ,EAAE,EAAE,GAAG,2CAA2C,EAAE,GAAG,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;gBACxI,kCAAkC;gBAClC,kCAAkC;gBAClC;AACD;SACF;;iIAdQ,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAA1B,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,YATnC,kBAAkB,CAAA,EAAA,CAAA,CAAA;AAST,uBAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,0BAA0B,EAP1B,SAAA,EAAA;AACT,YAAA,EAAE,OAAO,EAAE,mCAAmC,EAAE,QAAQ,EAAE,2CAA2C,EAAE;YACvG,kCAAkC;YAClC,kCAAkC;YAClC;AACD,SAAA,EAAA,OAAA,EAAA,CAPC,kBAAkB,CAAA,EAAA,CAAA,CAAA;;2FAST,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAXtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE;wBACP;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,mCAAmC,EAAE,QAAQ,EAAE,2CAA2C,EAAE;wBACvG,kCAAkC;wBAClC,kCAAkC;wBAClC;AACD;AACF,iBAAA;;;AClCD;;AAEG;;;;"}