{"version":3,"file":"ngx-socket-io.mjs","sources":["../../src/socket-io.service.ts","../../src/socket-io.module.ts","../../ngx-socket-io.ts"],"sourcesContent":["import { Observable } from 'rxjs';\nimport { share } from 'rxjs/operators';\n\nimport * as ioModule from 'socket.io-client';\nimport type { io, Socket } from 'socket.io-client';\nimport type {\n  ReservedOrUserListener,\n  ReservedOrUserEventNames,\n  DefaultEventsMap,\n} from '@socket.io/component-emitter';\n\nexport type IoSocket = Socket;\n// This is not exported in the original, but let's export as helpers for those declaring disconnect handlers\nexport type DisconnectDescription =\n  | Error\n  | {\n      description: string;\n      context?: unknown;\n    };\n\n// Not exported but needed to properly map ReservedEvents to their signatures\ninterface SocketReservedEvents {\n  connect: () => void;\n  connect_error: (err: Error) => void;\n  disconnect: (\n    reason: Socket.DisconnectReason,\n    description?: DisconnectDescription\n  ) => void;\n}\n\ntype EventNames = ReservedOrUserEventNames<\n  SocketReservedEvents,\n  DefaultEventsMap\n>;\ntype EventListener<Ev extends EventNames> = ReservedOrUserListener<\n  SocketReservedEvents,\n  DefaultEventsMap,\n  Ev\n>;\ntype EventParameters<Ev extends EventNames> = Parameters<EventListener<Ev>>;\ntype EventPayload<Ev extends EventNames> =\n  EventParameters<Ev> extends [] ? undefined : EventParameters<Ev>[0];\n\ntype IgnoredWrapperEvents = 'receiveBuffer' | 'sendBuffer';\n\ntype WrappedSocketIface<Wrapper> = {\n  [K in Exclude<keyof IoSocket, IgnoredWrapperEvents>]: IoSocket[K] extends (\n    ...args: any[]\n  ) => IoSocket\n    ? (...args: Parameters<IoSocket[K]>) => Wrapper // chainable methods on().off().emit()...\n    : IoSocket[K] extends IoSocket\n      ? Wrapper // ie: volatile is a getter\n      : IoSocket[K];\n};\n\nimport { SocketIoConfig } from './config/socket-io.config';\n\nexport class WrappedSocket implements WrappedSocketIface<WrappedSocket> {\n  private readonly subscribersCounter: Record<string, number> = {};\n  private readonly eventObservables$: Record<string, Observable<any>> = {};\n  private readonly namespaces: Record<string, WrappedSocket> = {};\n  readonly ioSocket: IoSocket;\n  private readonly emptyConfig: SocketIoConfig = {\n    url: '',\n    options: {},\n  };\n\n  constructor(private config: SocketIoConfig) {\n    if (config === undefined) {\n      config = this.emptyConfig;\n    }\n    const url: string = config.url;\n    const options: any = config.options;\n    const ioFunc = (\n      (ioModule as any).default ? (ioModule as any).default : ioModule\n    ) as typeof io;\n    this.ioSocket = ioFunc(url, options);\n  }\n\n  get auth(): Socket['auth'] {\n    return this.ioSocket.auth;\n  }\n\n  set auth(value: Socket['auth']) {\n    this.ioSocket.auth = value;\n  }\n\n  /** readonly access to io manager */\n  get io(): Socket['io'] {\n    return this.ioSocket.io;\n  }\n\n  /** alias to connect */\n  get open(): WrappedSocket['connect'] {\n    return this.connect;\n  }\n\n  /** alias to disconnect */\n  get close(): WrappedSocket['disconnect'] {\n    return this.disconnect;\n  }\n\n  /**\n   * Gets a WrappedSocket for the given namespace.\n   *\n   * @note if an existing socket exists for the given namespace, it will be reused.\n   *\n   * @param namespace the namespace to create a new socket based on the current config.\n   *        If empty or `/`, then the current instance is returned.\n   * @returns a socket that is bound to the given namespace. If namespace is empty or `/`,\n   *          then `this` is returned, otherwise another instance is returned, creating\n   *          it if it's the first use of such namespace.\n   */\n  of(namespace: string): WrappedSocket {\n    if (!namespace || namespace === '/') {\n      return this;\n    }\n    const existing = this.namespaces[namespace];\n    if (existing) {\n      return existing;\n    }\n    const { url, ...rest } = this.config;\n    const config = {\n      url:\n        !url.endsWith('/') && !namespace.startsWith('/')\n          ? `${url}/${namespace}`\n          : `${url}${namespace}`,\n      ...rest,\n    };\n    const created = new WrappedSocket(config);\n    this.namespaces[namespace] = created;\n    return created;\n  }\n\n  on<Ev extends EventNames>(eventName: Ev, callback: EventListener<Ev>): this {\n    this.ioSocket.on(eventName, callback);\n    return this;\n  }\n\n  once<Ev extends EventNames>(\n    eventName: Ev,\n    callback: EventListener<Ev>\n  ): this {\n    this.ioSocket.once(eventName, callback);\n    return this;\n  }\n\n  connect(): this {\n    this.ioSocket.connect();\n    return this;\n  }\n\n  disconnect(): this {\n    this.ioSocket.disconnect();\n    return this;\n  }\n\n  emit(_eventName: string, ..._args: any[]): this {\n    this.ioSocket.emit.apply(this.ioSocket, arguments);\n    return this;\n  }\n\n  send(..._args: any[]): this {\n    this.ioSocket.send.apply(this.ioSocket, arguments);\n    return this;\n  }\n\n  emitWithAck<T>(_eventName: string, ..._args: any[]): Promise<T> {\n    return this.ioSocket.emitWithAck.apply(this.ioSocket, arguments);\n  }\n\n  removeListener<Ev extends EventNames>(\n    _eventName?: Ev,\n    _callback?: EventListener<Ev>\n  ): this {\n    this.ioSocket.removeListener.apply(this.ioSocket, arguments);\n    return this;\n  }\n\n  removeAllListeners<Ev extends EventNames>(_eventName?: Ev): this {\n    this.ioSocket.removeAllListeners.apply(this.ioSocket, arguments);\n    return this;\n  }\n\n  fromEvent<T extends EventPayload<Ev>, Ev extends EventNames>(\n    eventName: Ev\n  ): Observable<T> {\n    if (!this.subscribersCounter[eventName]) {\n      this.subscribersCounter[eventName] = 0;\n    }\n    this.subscribersCounter[eventName]++;\n\n    if (!this.eventObservables$[eventName]) {\n      this.eventObservables$[eventName] = new Observable((observer: any) => {\n        const listener = (data: T) => {\n          observer.next(data);\n        };\n        this.ioSocket.on(eventName, listener as EventListener<Ev>);\n        return () => {\n          this.subscribersCounter[eventName]--;\n          if (this.subscribersCounter[eventName] === 0) {\n            this.ioSocket.removeListener(\n              eventName,\n              listener as EventListener<Ev>\n            );\n            delete this.eventObservables$[eventName];\n          }\n        };\n      }).pipe(share());\n    }\n    return this.eventObservables$[eventName];\n  }\n\n  fromOneTimeEvent<T extends EventPayload<Ev>, Ev extends EventNames>(\n    eventName: Ev\n  ): Promise<T> {\n    return new Promise<T>(resolve =>\n      this.once(eventName, resolve as EventListener<Ev>)\n    );\n  }\n\n  listeners<Ev extends EventNames>(eventName: Ev): EventListener<Ev>[] {\n    return this.ioSocket.listeners(eventName);\n  }\n\n  hasListeners<Ev extends EventNames>(eventName: Ev): boolean {\n    return this.ioSocket.hasListeners(eventName);\n  }\n\n  listenersAny(): ((...args: any[]) => void)[] {\n    return this.ioSocket.listenersAny();\n  }\n\n  listenersAnyOutgoing(): ((...args: any[]) => void)[] {\n    return this.ioSocket.listenersAnyOutgoing();\n  }\n\n  off<Ev extends EventNames>(\n    eventName?: Ev,\n    listener?: EventListener<Ev>\n  ): this {\n    this.ioSocket.off(eventName, listener);\n    return this;\n  }\n\n  offAny(callback?: (event: string, ...args: any[]) => void): this {\n    this.ioSocket.offAny(callback);\n    return this;\n  }\n\n  offAnyOutgoing(callback?: (event: string, ...args: any[]) => void): this {\n    this.ioSocket.offAnyOutgoing(callback);\n    return this;\n  }\n\n  onAny(callback: (event: string, ...args: any[]) => void): this {\n    this.ioSocket.onAny(callback);\n    return this;\n  }\n\n  onAnyOutgoing(callback: (event: string, ...args: any[]) => void): this {\n    this.ioSocket.onAnyOutgoing(callback);\n    return this;\n  }\n\n  prependAny(callback: (event: string, ...args: any[]) => void): this {\n    this.ioSocket.prependAny(callback);\n    return this;\n  }\n\n  prependAnyOutgoing(\n    callback: (event: string | symbol, ...args: any[]) => void\n  ): this {\n    this.ioSocket.prependAnyOutgoing(callback);\n    return this;\n  }\n\n  timeout(value: number): this {\n    this.ioSocket.timeout(value);\n    return this;\n  }\n\n  get volatile(): this {\n    // this getter has a side-effect of turning the socket instance true,\n    // but it returns the actual instance, so we need to get the value to force the side effect\n    const _ = this.ioSocket.volatile;\n    return this;\n  }\n\n  get active(): Socket['active'] {\n    return this.ioSocket.active;\n  }\n\n  get connected(): Socket['connected'] {\n    return this.ioSocket.connected;\n  }\n\n  get disconnected(): Socket['disconnected'] {\n    return this.ioSocket.disconnected;\n  }\n\n  get recovered(): Socket['recovered'] {\n    return this.ioSocket.recovered;\n  }\n\n  get id(): Socket['id'] {\n    return this.ioSocket.id;\n  }\n\n  compress(value: boolean): this {\n    this.ioSocket.compress(value);\n    return this;\n  }\n}\n","import { NgModule, ModuleWithProviders, InjectionToken } from '@angular/core';\nimport { SocketIoConfig } from './config/socket-io.config';\nimport { WrappedSocket } from './socket-io.service';\n\n/** Socket factory */\nexport function SocketFactory(config: SocketIoConfig) {\n  return new WrappedSocket(config);\n}\n\nexport const SOCKET_CONFIG_TOKEN = new InjectionToken<SocketIoConfig>(\n  '__SOCKET_IO_CONFIG__'\n);\n\n@NgModule({})\nexport class SocketIoModule {\n  static forRoot(config: SocketIoConfig): ModuleWithProviders<SocketIoModule> {\n    return {\n      ngModule: SocketIoModule,\n      providers: [\n        { provide: SOCKET_CONFIG_TOKEN, useValue: config },\n        {\n          provide: WrappedSocket,\n          useFactory: SocketFactory,\n          deps: [SOCKET_CONFIG_TOKEN],\n        },\n      ],\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;MAyDa,aAAa,CAAA;AAUJ,IAAA,MAAA;IATH,kBAAkB,GAA2B,EAAE;IAC/C,iBAAiB,GAAoC,EAAE;IACvD,UAAU,GAAkC,EAAE;AACtD,IAAA,QAAQ;AACA,IAAA,WAAW,GAAmB;AAC7C,QAAA,GAAG,EAAE,EAAE;AACP,QAAA,OAAO,EAAE,EAAE;KACZ;AAED,IAAA,WAAA,CAAoB,MAAsB,EAAA;QAAtB,IAAM,CAAA,MAAA,GAAN,MAAM;AACxB,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;AACxB,YAAA,MAAM,GAAG,IAAI,CAAC,WAAW;;AAE3B,QAAA,MAAM,GAAG,GAAW,MAAM,CAAC,GAAG;AAC9B,QAAA,MAAM,OAAO,GAAQ,MAAM,CAAC,OAAO;AACnC,QAAA,MAAM,MAAM,IACT,QAAgB,CAAC,OAAO,GAAI,QAAgB,CAAC,OAAO,GAAG,QAAQ,CACpD;QACd,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC;;AAGtC,IAAA,IAAI,IAAI,GAAA;AACN,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;;IAG3B,IAAI,IAAI,CAAC,KAAqB,EAAA;AAC5B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,KAAK;;;AAI5B,IAAA,IAAI,EAAE,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE;;;AAIzB,IAAA,IAAI,IAAI,GAAA;QACN,OAAO,IAAI,CAAC,OAAO;;;AAIrB,IAAA,IAAI,KAAK,GAAA;QACP,OAAO,IAAI,CAAC,UAAU;;AAGxB;;;;;;;;;;AAUG;AACH,IAAA,EAAE,CAAC,SAAiB,EAAA;AAClB,QAAA,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,GAAG,EAAE;AACnC,YAAA,OAAO,IAAI;;QAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3C,IAAI,QAAQ,EAAE;AACZ,YAAA,OAAO,QAAQ;;QAEjB,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM;AACpC,QAAA,MAAM,MAAM,GAAG;AACb,YAAA,GAAG,EACD,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG;AAC7C,kBAAE,CAAA,EAAG,GAAG,CAAA,CAAA,EAAI,SAAS,CAAE;AACvB,kBAAE,CAAA,EAAG,GAAG,CAAA,EAAG,SAAS,CAAE,CAAA;AAC1B,YAAA,GAAG,IAAI;SACR;AACD,QAAA,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC;AACzC,QAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,OAAO;AACpC,QAAA,OAAO,OAAO;;IAGhB,EAAE,CAAwB,SAAa,EAAE,QAA2B,EAAA;QAClE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC;AACrC,QAAA,OAAO,IAAI;;IAGb,IAAI,CACF,SAAa,EACb,QAA2B,EAAA;QAE3B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC;AACvC,QAAA,OAAO,IAAI;;IAGb,OAAO,GAAA;AACL,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;AACvB,QAAA,OAAO,IAAI;;IAGb,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,EAAE;AAC1B,QAAA,OAAO,IAAI;;AAGb,IAAA,IAAI,CAAC,UAAkB,EAAE,GAAG,KAAY,EAAA;AACtC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AAClD,QAAA,OAAO,IAAI;;IAGb,IAAI,CAAC,GAAG,KAAY,EAAA;AAClB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AAClD,QAAA,OAAO,IAAI;;AAGb,IAAA,WAAW,CAAI,UAAkB,EAAE,GAAG,KAAY,EAAA;AAChD,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;;IAGlE,cAAc,CACZ,UAAe,EACf,SAA6B,EAAA;AAE7B,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC5D,QAAA,OAAO,IAAI;;AAGb,IAAA,kBAAkB,CAAwB,UAAe,EAAA;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;AAChE,QAAA,OAAO,IAAI;;AAGb,IAAA,SAAS,CACP,SAAa,EAAA;QAEb,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE;AACvC,YAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,GAAG,CAAC;;AAExC,QAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE;QAEpC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE;AACtC,YAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,GAAG,IAAI,UAAU,CAAC,CAAC,QAAa,KAAI;AACnE,gBAAA,MAAM,QAAQ,GAAG,CAAC,IAAO,KAAI;AAC3B,oBAAA,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACrB,iBAAC;gBACD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,SAAS,EAAE,QAA6B,CAAC;AAC1D,gBAAA,OAAO,MAAK;AACV,oBAAA,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE;oBACpC,IAAI,IAAI,CAAC,kBAAkB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;wBAC5C,IAAI,CAAC,QAAQ,CAAC,cAAc,CAC1B,SAAS,EACT,QAA6B,CAC9B;AACD,wBAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;;AAE5C,iBAAC;AACH,aAAC,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;;AAElB,QAAA,OAAO,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC;;AAG1C,IAAA,gBAAgB,CACd,SAAa,EAAA;AAEb,QAAA,OAAO,IAAI,OAAO,CAAI,OAAO,IAC3B,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAA4B,CAAC,CACnD;;AAGH,IAAA,SAAS,CAAwB,SAAa,EAAA;QAC5C,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC;;AAG3C,IAAA,YAAY,CAAwB,SAAa,EAAA;QAC/C,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC;;IAG9C,YAAY,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE;;IAGrC,oBAAoB,GAAA;AAClB,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE;;IAG7C,GAAG,CACD,SAAc,EACd,QAA4B,EAAA;QAE5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,QAAQ,CAAC;AACtC,QAAA,OAAO,IAAI;;AAGb,IAAA,MAAM,CAAC,QAAkD,EAAA;AACvD,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC;AAC9B,QAAA,OAAO,IAAI;;AAGb,IAAA,cAAc,CAAC,QAAkD,EAAA;AAC/D,QAAA,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,CAAC;AACtC,QAAA,OAAO,IAAI;;AAGb,IAAA,KAAK,CAAC,QAAiD,EAAA;AACrD,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC;AAC7B,QAAA,OAAO,IAAI;;AAGb,IAAA,aAAa,CAAC,QAAiD,EAAA;AAC7D,QAAA,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC;AACrC,QAAA,OAAO,IAAI;;AAGb,IAAA,UAAU,CAAC,QAAiD,EAAA;AAC1D,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC;AAClC,QAAA,OAAO,IAAI;;AAGb,IAAA,kBAAkB,CAChB,QAA0D,EAAA;AAE1D,QAAA,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,QAAQ,CAAC;AAC1C,QAAA,OAAO,IAAI;;AAGb,IAAA,OAAO,CAAC,KAAa,EAAA;AACnB,QAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;AAC5B,QAAA,OAAO,IAAI;;AAGb,IAAA,IAAI,QAAQ,GAAA;;;AAGV,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ;AAChC,QAAA,OAAO,IAAI;;AAGb,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM;;AAG7B,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS;;AAGhC,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY;;AAGnC,IAAA,IAAI,SAAS,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS;;AAGhC,IAAA,IAAI,EAAE,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE;;AAGzB,IAAA,QAAQ,CAAC,KAAc,EAAA;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC7B,QAAA,OAAO,IAAI;;AAEd;;ACrTD;AACM,SAAU,aAAa,CAAC,MAAsB,EAAA;AAClD,IAAA,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC;AAClC;MAEa,mBAAmB,GAAG,IAAI,cAAc,CACnD,sBAAsB;MAIX,cAAc,CAAA;IACzB,OAAO,OAAO,CAAC,MAAsB,EAAA;QACnC,OAAO;AACL,YAAA,QAAQ,EAAE,cAAc;AACxB,YAAA,SAAS,EAAE;AACT,gBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,EAAE;AAClD,gBAAA;AACE,oBAAA,OAAO,EAAE,aAAa;AACtB,oBAAA,UAAU,EAAE,aAAa;oBACzB,IAAI,EAAE,CAAC,mBAAmB,CAAC;AAC5B,iBAAA;AACF,aAAA;SACF;;uGAZQ,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA;wGAAd,cAAc,EAAA,CAAA;wGAAd,cAAc,EAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B,QAAQ;mBAAC,EAAE;;;ACbZ;;AAEG;;;;"}