{"version":3,"file":"index.mjs","sources":["../src/ErrorFactory.ts","../src/Mapping.ts","../src/Mapping/Attribute.ts","../src/utils/repositoryGenerator.ts","../src/client/headerUtils.ts","../src/client/AbstractClient.ts","../src/Mapping/ClassMetadata.ts","../src/Mapping/Relation.ts","../src/isImmutable.ts","../src/UnitOfWork.ts","../src/serializer/Serializer.ts","../src/serializer/JsSerializer.ts","../src/utils/levenshtein.ts","../src/utils/logging.ts","../src/RestClientSdk.ts","../src/TokenGenerator/AbstractTokenGenerator.ts","../src/TokenGenerator/AuthorizationCodeFlowTokenGenerator.ts","../src/decorator.ts","../src/TokenGenerator/ClientCredentialsGenerator.ts","../src/TokenGenerator/PasswordGenerator.ts","../src/TokenGenerator/ProvidedTokenGenerator.ts","../src/TokenStorage.ts"],"sourcesContent":["/**\n * It's a bit tricky to extends native errors\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error\n */\n\nimport { ErrorBody, Token, TokenBody } from './TokenGenerator/types';\n\nclass HttpError extends Error {\n  public baseResponse: Response;\n\n  constructor(message: null | string, baseResponse: Response) {\n    super(message || 'Http errort');\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, OauthError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, OauthError);\n    }\n\n    this.name = 'HttpError';\n    this.baseResponse = baseResponse;\n  }\n\n  /**\n   * Get the JSON of the baseResponse directly, if possible\n   */\n  public responseJson(): Promise<Record<string, unknown>> {\n    return this.baseResponse.json();\n  }\n}\n\nclass OauthError extends Error {\n  public previousError: HttpError | undefined;\n\n  constructor(message: null | string, previousError?: HttpError) {\n    super(message || 'Oauth error');\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, OauthError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, OauthError);\n    }\n\n    this.name = 'OauthError';\n    this.previousError = previousError;\n  }\n}\n\nclass InvalidGrantError extends OauthError {\n  public previousError: HttpError | undefined;\n\n  constructor(message: null | string, previousError?: HttpError) {\n    super(message || 'Invalid grant error', previousError);\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, InvalidGrantError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, InvalidGrantError);\n    }\n\n    this.name = 'InvalidGrantError';\n    this.previousError = previousError;\n  }\n}\n\nclass InvalidScopeError extends OauthError {\n  public previousError: HttpError | undefined;\n\n  constructor(message: null | string, previousError?: HttpError) {\n    super(message || 'Invalid scope error', previousError);\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, InvalidScopeError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, InvalidScopeError);\n    }\n\n    this.name = 'InvalidScopeError';\n    this.previousError = previousError;\n  }\n}\n\n// 400\nclass BadRequestError extends HttpError {\n  public baseResponse: Response;\n\n  constructor(message: null | string, baseResponse: Response) {\n    super(message || 'Bad request', baseResponse);\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, BadRequestError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, BadRequestError);\n    }\n\n    this.name = 'BadRequestError';\n    this.baseResponse = baseResponse;\n  }\n}\n\n// 401\nclass UnauthorizedError extends BadRequestError {\n  public baseResponse: Response;\n\n  constructor(message: null | string, baseResponse: Response) {\n    super(message || 'Unauthorized', baseResponse);\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, UnauthorizedError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, UnauthorizedError);\n    }\n\n    this.name = 'UnauthorizedError';\n    this.baseResponse = baseResponse;\n  }\n}\n\n// 403\nclass ForbiddenError extends BadRequestError {\n  public baseResponse: Response;\n\n  constructor(message: null | string, baseResponse: Response) {\n    super(message || 'Forbidden', baseResponse);\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, ForbiddenError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, ForbiddenError);\n    }\n\n    this.name = 'ForbiddenError';\n    this.baseResponse = baseResponse;\n  }\n}\n\n// 404\nclass ResourceNotFoundError extends BadRequestError {\n  public baseResponse: Response;\n\n  constructor(message: null | string, baseResponse: Response) {\n    super(message || 'Resource is not found', baseResponse);\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, ResourceNotFoundError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, ResourceNotFoundError);\n    }\n\n    this.name = 'ResourceNotFoundError';\n    this.baseResponse = baseResponse;\n  }\n}\n\n// 409\nclass ConflictError extends BadRequestError {\n  public baseResponse: Response;\n\n  constructor(message: null | string, baseResponse: Response) {\n    super(message || 'Conflict detected', baseResponse);\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, ConflictError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, ConflictError);\n    }\n\n    this.name = 'ConflictError';\n    this.baseResponse = baseResponse;\n  }\n}\n\n// 500\nclass InternalServerError extends HttpError {\n  public baseResponse: Response;\n\n  constructor(message: null | string, baseResponse: Response) {\n    super(message || 'Internal server error', baseResponse);\n\n    // Set the prototype explicitly.\n    Object.setPrototypeOf(this, InternalServerError.prototype);\n\n    // Maintains proper stack trace for where our error was thrown (only available on V8)\n    if (Error.captureStackTrace) {\n      Error.captureStackTrace(this, InternalServerError);\n    }\n\n    this.name = 'InternalServerError';\n    this.baseResponse = baseResponse;\n  }\n}\n\n/**\n * @returns {HttpError}\n */\nfunction getHttpErrorFromResponse(originalResponse: Response): HttpError {\n  const response = originalResponse.clone();\n  switch (true) {\n    case response.status === 401:\n      return new UnauthorizedError(null, response);\n\n    case response.status === 403:\n      return new ForbiddenError(null, response);\n\n    case response.status === 404:\n      return new ResourceNotFoundError(null, response);\n\n    case response.status === 409:\n      return new ConflictError(null, response);\n\n    case response.status >= 400 && response.status < 500:\n      return new BadRequestError(null, response);\n\n    case response.status >= 500 && response.status < 600:\n      return new InternalServerError(null, response);\n\n    default:\n      return new HttpError(null, response);\n  }\n}\n\nfunction isOauthError(body: TokenBody<Token>): body is ErrorBody {\n  return typeof (body as ErrorBody)?.error === 'string';\n}\n\nexport {\n  UnauthorizedError,\n  BadRequestError,\n  ConflictError,\n  ForbiddenError,\n  HttpError,\n  InternalServerError,\n  ResourceNotFoundError,\n  getHttpErrorFromResponse,\n  OauthError,\n  InvalidGrantError,\n  InvalidScopeError,\n  isOauthError,\n};\n","import ClassMetadata from './Mapping/ClassMetadata';\n\nconst DEFAULT_CONFIG = {\n  collectionKey: 'hydra:member',\n};\n\nclass Mapping {\n  readonly idPrefix: string;\n\n  #config!: Record<string, unknown>;\n\n  #classMetadataList: ClassMetadata[];\n\n  constructor(idPrefix = '', config = {}) {\n    this.idPrefix = idPrefix;\n\n    this.#classMetadataList = [];\n\n    this.setConfig(config);\n  }\n\n  getConfig(): Record<string, unknown> {\n    return this.#config;\n  }\n\n  setConfig(config: Record<string, unknown>): void {\n    this.#config = { ...DEFAULT_CONFIG, ...config };\n  }\n\n  setMapping(classMetadataList: ClassMetadata[] = []): void {\n    this.#classMetadataList = classMetadataList;\n  }\n\n  getMappingKeys(): string[] {\n    return this.#classMetadataList.map((classMetadata) => classMetadata.key);\n  }\n\n  getClassMetadataByKey(key: string): null | ClassMetadata {\n    const filterList = this.#classMetadataList.filter(\n      (classMetadata) => classMetadata.key === key\n    );\n\n    return filterList.length > 0 ? filterList[0] : null;\n  }\n\n  isMappingValid(): boolean {\n    return !this.#classMetadataList.some((classMetadata) => {\n      // check that the relations exists\n      const errorList = Object.values(classMetadata.getAttributeList()).map(\n        (attribute) => {\n          const relation = classMetadata.getRelation(attribute.serializedKey);\n\n          if (!relation) {\n            // attribute can not be \"invalid\" (for now ?)\n            return false;\n          }\n\n          const relationMetadata = this.getClassMetadataByKey(\n            relation.targetMetadataKey\n          );\n\n          // relation name seems weird\n          if (\n            relation.isRelationToOne() &&\n            attribute.attributeName.endsWith('List')\n          ) {\n            return `\"${classMetadata.key}.${attribute.serializedKey} is defined as a MANY_TO_ONE relation, but the attribute name ends with \"List\".`;\n          }\n\n          if (relation.isRelationToMany()) {\n            const message = `\"${classMetadata.key}.${attribute.serializedKey} is defined as a ${relation.type} relation, but the attribute name is nor plural not ends with \"List\".`;\n\n            const endsWithList = attribute.attributeName.endsWith('List');\n\n            try {\n              // eslint-disable-next-line @typescript-eslint/no-require-imports\n              const pluralize = require('pluralize') as {\n                isPlural(word: string): boolean;\n              };\n              if (\n                !endsWithList &&\n                !pluralize.isPlural(attribute.attributeName)\n              ) {\n                return message;\n              }\n            } catch {\n              if (!endsWithList) {\n                return `${message}.\\nIf your keys does not ends with \"List\", then you should install the \"pluralize\" package.`;\n              }\n            }\n          }\n\n          // no error if there is metadata linked\n          if (!relationMetadata) {\n            return `\"${classMetadata.key}.${attribute.serializedKey}\" defined a relation to the metadata named \"${relation.targetMetadataKey}\" but this metadata is not knowned by the mapping`;\n          }\n\n          return false;\n        }\n      );\n\n      if (!classMetadata.hasIdentifierAttribute()) {\n        errorList.push(\n          `\"${classMetadata.key}\" has no identifier attribute set`\n        );\n      }\n\n      const nbError = errorList.filter((error) => {\n        if (error) {\n          console.warn(error);\n        }\n\n        return error;\n      });\n\n      return nbError.length > 0;\n    });\n  }\n}\n\nexport default Mapping;\n","class Attribute {\n  readonly serializedKey: string;\n\n  readonly attributeName: string;\n\n  readonly type: string;\n\n  readonly isIdentifier: boolean;\n\n  /**\n   * @param {string} serializedKey the key returned from your API\n   * @param {null|string} attributeName the name in your entity, default to the `serializedKey` attribute\n   * @param {string} type type of the attribute\n   * @param {boolean} isIdentifier is this attribute the entity identifier\n   */\n  constructor(\n    serializedKey: string,\n    attributeName: null | string = null,\n    type = 'string',\n    isIdentifier = false\n  ) {\n    if (!serializedKey) {\n      throw new TypeError('`serializedKey` must not be empty');\n    }\n\n    this.serializedKey = serializedKey;\n    this.attributeName = attributeName || this.serializedKey;\n    this.type = type;\n    this.isIdentifier = isIdentifier;\n  }\n}\n\nexport default Attribute;\n","import type ClassMetadata from '../Mapping/ClassMetadata';\n\nimport type RestClientSdk from '../RestClientSdk';\n\nimport type { MetadataDefinition, SdkMetadata } from '../RestClientSdk';\nimport type AbstractClient from '../client/AbstractClient';\n\nexport function generateRepository<D extends MetadataDefinition>(\n  sdk: RestClientSdk<SdkMetadata>,\n  metadata: ClassMetadata,\n  isUnitOfWorkEnabled = true\n): AbstractClient<D> {\n  // eslint-disable-next-line new-cap\n  return new metadata.repositoryClass(sdk, metadata, isUnitOfWorkEnabled);\n}\n","export function removeAuthorization(\n  headers: undefined | HeadersInit\n): undefined | HeadersInit {\n  if (!headers) {\n    return;\n  }\n\n  if (headers instanceof Headers) {\n    headers.delete('Authorization');\n    return headers;\n  }\n\n  const filterAuthorization = (\n    entries: Array<[string, string]>\n  ): Array<[string, string]> =>\n    entries.filter((header) => header[0] !== 'Authorization');\n\n  if (Array.isArray(headers)) {\n    return filterAuthorization(headers);\n  }\n\n  return Object.fromEntries(filterAuthorization(Object.entries(headers)));\n}\n\n/**\n * remove undefined key, usefull to remove Content-Type for example.\n * Does not apply on \"Headers\" instance as values are string in there.\n */\nexport function removeUndefinedHeaders(headers: HeadersInit): HeadersInit {\n  if (headers instanceof Headers) {\n    return headers;\n  }\n\n  const filterEntries = (entries: Array<[string, string]>): Array<[string, string]> =>\n    entries.filter((header) => header[1] !== undefined);\n\n  if (Array.isArray(headers)) {\n    return filterEntries(headers);\n  }\n\n  return Object.fromEntries(filterEntries(Object.entries(headers)));\n}\n\nexport function convertToRecord(headers: HeadersInit): Record<string, string> {\n  if (headers instanceof Headers) {\n    return Object.fromEntries(headers.entries());\n  }\n\n  if (Array.isArray(headers)) {\n    return Object.fromEntries(headers);\n  }\n\n  return headers;\n}\n","import URI from 'urijs';\nimport { OauthError, getHttpErrorFromResponse } from '../ErrorFactory';\nimport type ClassMetadata from '../Mapping/ClassMetadata';\n\nimport type RestClientSdk from '../RestClientSdk';\n\nimport type { MetadataDefinition, SdkMetadata } from '../RestClientSdk';\nimport { Token } from '../TokenGenerator/types';\nimport TokenStorageInterface from '../TokenStorageInterface';\nimport type SerializerInterface from '../serializer/SerializerInterface';\nimport { generateRepository } from '../utils/repositoryGenerator';\nimport { removeAuthorization, removeUndefinedHeaders } from './headerUtils';\n\nconst EXPIRE_LIMIT_SECONDS = 300; // = 5 minutes\n\nclass AbstractClient<D extends MetadataDefinition> {\n  sdk: RestClientSdk<SdkMetadata>;\n\n  #tokenStorage: TokenStorageInterface<Token>;\n\n  serializer: SerializerInterface;\n\n  metadata: ClassMetadata;\n\n  #isUnitOfWorkEnabled: boolean;\n\n  constructor(\n    sdk: RestClientSdk<SdkMetadata>,\n    metadata: ClassMetadata,\n    isUnitOfWorkEnabled = true\n  ) {\n    this.sdk = sdk;\n    this.#tokenStorage = sdk.tokenStorage;\n    this.serializer = sdk.serializer;\n    this.metadata = metadata;\n    this.#isUnitOfWorkEnabled = isUnitOfWorkEnabled;\n  }\n\n  withUnitOfWork(enabled: boolean): AbstractClient<D> {\n    return generateRepository<D>(this.sdk, this.metadata, enabled);\n  }\n\n  getDefaultParameters(): Record<string, unknown> {\n    return {};\n  }\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  getPathBase(pathParameters: Record<string, unknown>): string {\n    return `/${this.metadata.pathRoot}`;\n  }\n\n  getEntityURI(entity: D['entity']): string {\n    let idValue = this._getEntityIdentifier(entity);\n\n    if (idValue === null) {\n      throw new Error('Cannot call `getEntityURI for entity without id.`');\n    }\n\n    if (typeof idValue === 'number') {\n      if (Number.isFinite(idValue)) {\n        idValue = idValue.toString();\n      } else {\n        throw new Error('Unable to handle non-finite number');\n      }\n    }\n\n    const pathBase = this.getPathBase({});\n    if (idValue.indexOf(pathBase) > -1) {\n      return idValue;\n    }\n    return `${pathBase}/${idValue}`;\n  }\n\n  /**\n   * get an entity by its id\n   *\n   * @param {string|number} id the entity identifier\n   * @param {Record<string, unknown>} queryParam query parameters that will be added to the request\n   * @param {Record<string, unknown>} pathParameters path parameters, will be pass to the `getPathBase` method\n   * @param {Record<string, unknown>} requestParams parameters that will be send as second parameter to the `fetch` call\n   */\n  find(\n    id: string | number,\n    queryParam: Record<string, unknown> = {},\n    pathParameters: Record<string, unknown> = {},\n    requestParams: Record<string, unknown> = {}\n  ): Promise<D['entity']> {\n    const url = this._generateUrlFromParams(queryParam, pathParameters, id);\n\n    return this.deserializeResponse(\n      this.authorizedFetch(url, requestParams),\n      'item'\n    );\n  }\n\n  /**\n   * get a list of entities by some parameters\n   *\n   * @param {Record<string, unknown>} queryParam query parameters that will be added to the request\n   * @param {Record<string, unknown>} pathParameters path parameters, will be pass to the `getPathBase` method\n   * @param {Record<string, unknown>} requestParams parameters that will be send as second parameter to the `fetch` call\n   */\n  findBy(\n    queryParam: Record<string, unknown>,\n    pathParameters: Record<string, unknown> = {},\n    requestParams: Record<string, unknown> = {}\n  ): Promise<D['list']> {\n    const url = this._generateUrlFromParams(queryParam, pathParameters);\n\n    return this.deserializeResponse(\n      this.authorizedFetch(url, requestParams),\n      'list'\n    );\n  }\n\n  /**\n   * get a list of all entities\n   *\n   * @param {Record<string, unknown>} queryParam query parameters that will be added to the request\n   * @param {Record<string, unknown>} pathParameters path parameters, will be pass to the `getPathBase` method\n   * @param {Record<string, unknown>} requestParams parameters that will be send as second parameter to the `fetch` call\n   */\n  findAll(\n    queryParam: Record<string, unknown> = {},\n    pathParameters: Record<string, unknown> = {},\n    requestParams: Record<string, unknown> = {}\n  ): Promise<D['list']> {\n    return this.findBy(queryParam, pathParameters, requestParams);\n  }\n\n  /**\n   * create an entity\n   *\n   * @param {Record<string, unknown>} entity the entity to persist\n   * @param {Record<string, unknown>} queryParam query parameters that will be added to the request\n   * @param {Record<string, unknown>} pathParameters path parameters, will be pass to the `getPathBase` method\n   * @param {Record<string, unknown>} requestParams parameters that will be send as second parameter to the `fetch` call\n   */\n  create(\n    entity: D['entity'],\n    queryParam: Record<string, unknown> = {},\n    pathParameters: Record<string, unknown> = {},\n    requestParams: Record<string, unknown> = {}\n  ): Promise<D['entity']> {\n    const url = new URI(this.getPathBase(pathParameters));\n    url.addSearch(queryParam);\n\n    const oldSerializedModel = this.metadata.getDefaultSerializedModel();\n    const newSerializedModel = this.serializer.normalizeItem(\n      entity,\n      this.metadata\n    );\n\n    const diff = this.sdk.unitOfWork.getDirtyData(\n      newSerializedModel,\n      oldSerializedModel,\n      this.metadata\n    );\n\n    return this.deserializeResponse(\n      this.authorizedFetch(url, {\n        method: 'POST',\n        body: this.serializer.encodeItem(diff, this.metadata),\n        ...requestParams,\n      }),\n      'item'\n    );\n  }\n\n  /**\n   * update an entity\n   *\n   * @param {Record<string, unknown>} entity the entity to update\n   * @param {Record<string, unknown>} queryParam query parameters that will be added to the request\n   * @param {Record<string, unknown>} requestParams parameters that will be send as second parameter to the `fetch` call\n   */\n  update(\n    entity: D['entity'],\n    queryParam: Record<string, unknown> = {},\n    requestParams: Record<string, unknown> = {}\n  ): Promise<D['entity']> {\n    return this._update('PUT', entity, queryParam, requestParams);\n  }\n\n  /**\n   * partially update an entity using the `PATCH` HTTP verb\n   *\n   * @param {Record<string, unknown>} entity the entity to update\n   * @param {Record<string, unknown>} queryParam query parameters that will be added to the request\n   * @param {Record<string, unknown>} requestParams parameters that will be send as second parameter to the `fetch` call\n   */\n  patch(\n    entity: D['entity'],\n    queryParam: Record<string, unknown> = {},\n    requestParams: Record<string, unknown> = {}\n  ): Promise<D['entity']> {\n    return this._update('PATCH', entity, queryParam, requestParams);\n  }\n\n  private _update(\n    method: 'PUT' | 'PATCH',\n    entity: D['entity'],\n    queryParam: Record<string, unknown> = {},\n    requestParams: Record<string, unknown> = {}\n  ): Promise<D['entity']> {\n    const url = new URI(this.getEntityURI(entity));\n    url.addSearch(queryParam);\n\n    let newSerializedModel = this.serializer.normalizeItem(\n      entity,\n      this.metadata\n    );\n\n    const identifier = this._getEntityIdentifier(newSerializedModel);\n    let oldModel;\n    if (identifier !== null) {\n      oldModel = this.sdk.unitOfWork.getDirtyEntity(identifier);\n    }\n\n    if (oldModel) {\n      newSerializedModel = this.sdk.unitOfWork.getDirtyData(\n        newSerializedModel,\n        oldModel,\n        this.metadata\n      );\n    }\n\n    return this.deserializeResponse(\n      this.authorizedFetch(url, {\n        method,\n        body: this.serializer.encodeItem(newSerializedModel, this.metadata),\n        ...requestParams,\n      }),\n      'item'\n    );\n  }\n\n  /**\n   * delete an entity\n   *\n   * @param {Record<string, unknown>} the entity to delete\n   * @param {Record<string, unknown>} requestParams parameters that will be send as second parameter to the `fetch` call\n   */\n  delete(entity: D['entity'], requestParams = {}): Promise<Response> {\n    const url = this.getEntityURI(entity);\n    const identifier = this._getEntityIdentifier(entity);\n\n    return this.authorizedFetch(url, {\n      method: 'DELETE',\n      ...requestParams,\n    }).then((response) => {\n      if (identifier !== null) {\n        this.sdk.unitOfWork.clear(identifier);\n      }\n\n      return response;\n    });\n  }\n\n  deserializeResponse(\n    requestPromise: Promise<Response>,\n    listOrItem: 'list'\n  ): Promise<D['list']>;\n\n  deserializeResponse(\n    requestPromise: Promise<Response>,\n    listOrItem: 'item'\n  ): Promise<D['entity']>;\n\n  deserializeResponse<LOR extends 'list' | 'item'>(\n    requestPromise: Promise<Response>,\n    listOrItem: LOR\n  ): Promise<D['entity'] | D['list']> {\n    return requestPromise\n      .then((response) => response.text().then((text) => ({ response, text })))\n      .then(({ response, text }) => {\n        if (listOrItem === 'list') {\n          // for list, we need to deserialize the result to get an object\n          const itemList = this.serializer.deserializeList(\n            text,\n            this.metadata,\n            response\n          ) as D['list'];\n\n          if (this.#isUnitOfWorkEnabled) {\n            for (const decodedItem of itemList) {\n              const identifier = this._getEntityIdentifier(decodedItem);\n              const normalizedItem = this.serializer.normalizeItem(\n                decodedItem,\n                this.metadata\n              );\n\n              // then we register the re-normalized item\n              if (identifier !== null) {\n                this.sdk.unitOfWork.registerClean(identifier, normalizedItem);\n              }\n            }\n          }\n\n          return itemList as D['list'];\n        }\n\n        // for items, we can just decode the item (ie. transform it to JS object)\n        const decodedItem = this.serializer.decodeItem(\n          text,\n          this.metadata,\n          response\n        );\n\n        // and register it directy without deserializing + renormalizing\n        const identifier = this._getEntityIdentifier(decodedItem);\n\n        // and finally return the denormalized item\n        const item = this.serializer.denormalizeItem(\n          decodedItem,\n          this.metadata,\n          response\n        ) as D['entity'];\n\n        if (this.#isUnitOfWorkEnabled && identifier !== null) {\n          this.sdk.unitOfWork.registerClean(\n            identifier,\n            this.serializer.normalizeItem(item, this.metadata)\n          );\n        }\n\n        return item as D['entity'];\n      });\n  }\n\n  makeUri(input: string | URI): URI {\n    const url = input instanceof URI ? input : new URI(input);\n    url.host(this.sdk.config.path).scheme(this.sdk.config.scheme);\n\n    if (this.sdk.config.port) {\n      url.port(String(this.sdk.config.port));\n    }\n\n    if (this.sdk.mapping.idPrefix) {\n      const segments = url.segment();\n\n      if (!url.pathname().startsWith(this.sdk.mapping.idPrefix)) {\n        segments.unshift(this.sdk.mapping.idPrefix);\n        url.segment(segments);\n      }\n    }\n\n    return url;\n  }\n\n  authorizedFetch(input: string | URI, requestParams = {}): Promise<Response> {\n    const url = this.makeUri(input);\n\n    return this._fetchWithToken(url.toString(), requestParams);\n  }\n\n  private _generateUrlFromParams(\n    queryParam: Record<string, unknown>,\n    pathParameters: Record<string, unknown> = {},\n    id: null | string | number = null\n  ): URI {\n    const params = queryParam;\n    if (this.sdk.config.useDefaultParameters) {\n      Object.assign(params, this.getDefaultParameters());\n    }\n\n    const pathBase = this.getPathBase(pathParameters);\n\n    let url: URI;\n    if (id) {\n      const testPathBase = this.sdk.mapping.idPrefix\n        ? `${this.sdk.mapping.idPrefix}${pathBase}`\n        : pathBase;\n\n      if (typeof id === 'string' && id.startsWith(testPathBase)) {\n        url = new URI(id);\n      } else {\n        url = new URI(`${pathBase}/${id}`);\n      }\n    } else {\n      url = new URI(pathBase);\n    }\n\n    if (params) {\n      url.addSearch(params);\n    }\n\n    return url;\n  }\n\n  private _fetchWithToken(\n    input: string,\n    requestParams = {}\n  ): Promise<Response> {\n    if (!input) {\n      throw new Error('input is empty');\n    }\n\n    if (this.#tokenStorage) {\n      return this.#tokenStorage\n        .getCurrentTokenExpiresIn()\n        .then((accessTokenExpiresIn) => {\n          if (\n            accessTokenExpiresIn !== null &&\n            accessTokenExpiresIn <= EXPIRE_LIMIT_SECONDS\n          ) {\n            return this.#tokenStorage\n              .refreshToken()\n              .then((refreshedTokenObject) => refreshedTokenObject.access_token)\n              .catch((e) => {\n                this._handleRefreshTokenFailure(e);\n\n                throw e;\n              });\n          }\n\n          return this.#tokenStorage.getAccessToken();\n        })\n        .then((token) => this._doFetch(token, input, requestParams));\n    }\n\n    return this._doFetch(null, input, requestParams);\n  }\n\n  private _refreshTokenAndRefetch(\n    input: string,\n    requestParams: RequestInit = {}\n  ): Promise<Response> {\n    return this.#tokenStorage\n      .refreshToken()\n      .then(() => {\n        // eslint-disable-next-line prefer-const\n        let { headers, ...rest } = requestParams;\n\n        const updatedRequestParams: RequestInit = {\n          ...rest,\n          headers: removeAuthorization(headers),\n        };\n\n        return this._fetchWithToken(input, updatedRequestParams);\n      })\n      .catch((e) => {\n        this._handleRefreshTokenFailure(e);\n\n        throw e;\n      });\n  }\n\n  private _manageUnauthorized(\n    response: Response,\n    input: string,\n    requestParams = {}\n  ): Promise<Response> {\n    const error = getHttpErrorFromResponse(response);\n\n    // https://tools.ietf.org/html/rfc2617#section-1.2\n    const authorizationHeader = response.headers.get('www-authenticate');\n    if (authorizationHeader) {\n      const invalidGrant =\n        authorizationHeader.indexOf('error=\"invalid_grant\"') > -1;\n\n      if (invalidGrant && this.#tokenStorage) {\n        return this._refreshTokenAndRefetch(input, requestParams);\n      }\n\n      throw error;\n    } else {\n      // if www-authenticate header is missing, try and read json response\n      return response\n        .json()\n        .then((body) => {\n          if (\n            this.#tokenStorage &&\n            (body.error === 'invalid_scope' || body.error === 'access_denied')\n          ) {\n            return this._refreshTokenAndRefetch(input, requestParams);\n          }\n          throw error;\n        })\n        .catch((err) => {\n          if (err instanceof OauthError) {\n            throw err;\n          }\n          throw error;\n        });\n    }\n  }\n\n  private _doFetch(\n    accessToken: null | string,\n    input: string,\n    requestParams: RequestInit\n  ): Promise<Response> {\n    let params = requestParams;\n    let baseHeaders: HeadersInit = {};\n\n    if (\n      params.method !== 'GET' ||\n      (params.method !== 'GET' && params.method !== 'DELETE')\n    ) {\n      baseHeaders = {\n        'Content-Type': 'application/json',\n      };\n    }\n\n    if (accessToken) {\n      baseHeaders.Authorization = `${this.sdk.config.authorizationType} ${accessToken}`;\n    }\n\n    if (params) {\n      if (!params.headers) {\n        params.headers = {};\n      }\n\n      params.headers = Object.assign(baseHeaders, params.headers);\n    } else {\n      params = { headers: baseHeaders };\n    }\n\n    if (params.headers) {\n      params.headers = removeUndefinedHeaders(params.headers);\n    }\n\n    let logId: undefined | string;\n    if (this.sdk.logger) {\n      logId = this.sdk.logger.logRequest({ url: input, ...params });\n    }\n\n    return fetch(input, params).then((response) => {\n      if (this.sdk.logger) {\n        this.sdk.logger.logResponse(response, logId);\n      }\n\n      if (response.status < 400) {\n        return response;\n      }\n\n      if (response.status === 401) {\n        return this._manageUnauthorized(response, input, params);\n      }\n\n      const httpError = getHttpErrorFromResponse(response);\n      throw httpError;\n    });\n  }\n\n  private _getEntityIdentifier(\n    object: Record<string, unknown>\n  ): null | string | number {\n    const idKey = this.metadata.getIdentifierAttribute().serializedKey;\n\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore\n    return object[idKey];\n  }\n\n  private _handleRefreshTokenFailure(error: Error): void {\n    if (error instanceof OauthError) {\n      this.#tokenStorage.logout().then(() => {\n        if (this.sdk.config.onRefreshTokenFailure) {\n          this.sdk.config.onRefreshTokenFailure(error);\n        }\n      });\n    }\n  }\n}\n\nexport default AbstractClient;\n","import AbstractClient from '../client/AbstractClient';\nimport Attribute from './Attribute';\nimport Relation from './Relation';\n\ntype AttributeListType = { [key: string]: Attribute };\ntype RelationListType = { [key: string]: Relation };\nexport type DefaultSerializedModelType = {\n  [key: string]: null | null[];\n};\n\nclass ClassMetadata {\n  readonly key: string;\n\n  readonly pathRoot: string;\n\n  repositoryClass: typeof AbstractClient;\n\n  #attributeList: AttributeListType;\n\n  #relationList: RelationListType;\n\n  #identifierAttribute?: Attribute;\n\n  /**\n   * @param {string} key mandatory, will be passed in your serializer\n   * @param {string|null} pathRoot the endpoint of your API: will be added to the mapping prefix ('/v1' here)\n   * @param {typeof AbstractClient} repositoryClass [Overriding repository]{@link https://github.com/mapado/rest-client-js-sdk#overriding-repository} for more detail\n   */\n  constructor(\n    key: string,\n    pathRoot: string | null = null,\n    //  modelName,\n    repositoryClass: typeof AbstractClient = AbstractClient\n  ) {\n    if (!key) {\n      throw new TypeError('key attribute are required');\n    }\n\n    this.key = key;\n    this.pathRoot = pathRoot || key;\n    // this.modelName = modelName;\n    this.repositoryClass = repositoryClass;\n\n    this.#attributeList = {};\n    this.#relationList = {};\n  }\n\n  getAttribute(name: string): Attribute {\n    return this.#attributeList[name];\n  }\n\n  hasIdentifierAttribute(): boolean {\n    return !!this.#identifierAttribute;\n  }\n\n  getIdentifierAttribute(): Attribute {\n    if (!this.#identifierAttribute) {\n      throw new TypeError(\n        `\"${this.key}\" has no identifier attribute set. Did you call \"setAttributeList\" first ?`\n      );\n    }\n\n    return this.#identifierAttribute;\n  }\n\n  getAttributeList(): AttributeListType {\n    return this.#attributeList;\n  }\n\n  setAttributeList(attributeList: Attribute[]): void {\n    this.#attributeList = {};\n    this.#identifierAttribute = undefined;\n\n    attributeList.forEach((attribute) => {\n      this.#attributeList[attribute.serializedKey] = attribute;\n\n      if (attribute.isIdentifier) {\n        this.#identifierAttribute = attribute;\n      }\n    });\n\n    if (!this.#identifierAttribute) {\n      throw new TypeError(\n        `\"${this.key}\" has no identifier attribute set. You must set all your attributes in one time and send an attribute with \"isIdentifier=true\"`\n      );\n    }\n  }\n\n  setRelationList(relationList: Relation[]): void {\n    this.#relationList = {};\n\n    relationList.forEach((relation) => {\n      this.#relationList[relation.serializedKey] = relation;\n      this.#attributeList[relation.serializedKey] = new Attribute(\n        relation.serializedKey,\n        relation.serializedKey,\n        relation.isRelationToMany() ? 'array' : 'object'\n      );\n    });\n  }\n\n  getRelation(key: string): Relation {\n    return this.#relationList[key];\n  }\n\n  getDefaultSerializedModel(): DefaultSerializedModelType {\n    const out: DefaultSerializedModelType = {};\n\n    Object.keys(this.#attributeList).forEach((serializedKey) => {\n      out[serializedKey] = null;\n    });\n\n    Object.keys(this.#relationList).forEach((serializedKey) => {\n      const relation = this.#relationList[serializedKey];\n\n      if (relation.isRelationToMany()) {\n        out[serializedKey] = [];\n      }\n    });\n\n    return out;\n  }\n}\n\nexport default ClassMetadata;\n","enum RelationTypes {\n  ONE_TO_ONE = 'ONE_TO_ONE',\n  ONE_TO_MANY = 'ONE_TO_MANY',\n  MANY_TO_MANY = 'MANY_TO_MANY',\n  MANY_TO_ONE = 'MANY_TO_ONE',\n}\n\nclass Relation {\n  public static ONE_TO_ONE = RelationTypes.ONE_TO_ONE;\n\n  public static ONE_TO_MANY = RelationTypes.ONE_TO_MANY;\n\n  public static MANY_TO_ONE = RelationTypes.MANY_TO_ONE;\n\n  public static MANY_TO_MANY = RelationTypes.MANY_TO_MANY;\n\n  type: RelationTypes;\n\n  readonly targetMetadataKey: string;\n\n  readonly serializedKey: string;\n\n  readonly attributeName: string;\n\n  /**\n   * @param {RelationTypes} type the type of relation\n   * @param {string} targetMetadataKey must match the first argument of `ClassMetadata` constructor of the target entity\n   * @param {string} serializedKey the key returned from your API\n   * @param {string|null} attributeName the name in your entity, default to the `serializedKey` attribute\n   */\n  constructor(\n    type: RelationTypes,\n    targetMetadataKey: string,\n    serializedKey: string,\n    attributeName: string | null = null\n  ) {\n    this.type = type;\n    this.targetMetadataKey = targetMetadataKey;\n    this.serializedKey = serializedKey;\n    this.attributeName = attributeName || this.serializedKey;\n  }\n\n  isOneToOne(): boolean {\n    return this.type === Relation.ONE_TO_ONE;\n  }\n\n  isOneToMany(): boolean {\n    return this.type === Relation.ONE_TO_MANY;\n  }\n\n  isManyToOne(): boolean {\n    return this.type === Relation.MANY_TO_ONE;\n  }\n\n  isManyToMany(): boolean {\n    return this.type === Relation.MANY_TO_MANY;\n  }\n\n  isRelationToMany(): boolean {\n    return this.isManyToMany() || this.isOneToMany();\n  }\n\n  isRelationToOne(): boolean {\n    return this.isManyToOne() || this.isOneToOne();\n  }\n}\n\nexport default Relation;\n","/* eslint-disable */\n// \"fork\" of https://github.com/facebook/immutable-js/blob/v4.0.0-rc.9/src/Predicates.js\n// because tree-shaking does not seems to work as expected\n\n/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nexport const IS_ITERABLE_SENTINEL = '@@__IMMUTABLE_ITERABLE__@@';\nexport const IS_KEYED_SENTINEL = '@@__IMMUTABLE_KEYED__@@';\nexport const IS_INDEXED_SENTINEL = '@@__IMMUTABLE_INDEXED__@@';\nexport const IS_ORDERED_SENTINEL = '@@__IMMUTABLE_ORDERED__@@';\nexport const IS_RECORD_SENTINEL = '@@__IMMUTABLE_RECORD__@@';\n\nexport function isImmutable(maybeImmutable: unknown): boolean {\n  return isCollection(maybeImmutable) || isRecord(maybeImmutable);\n}\n\nexport function isCollection(maybeCollection: any): boolean {\n  return !!(maybeCollection && maybeCollection[IS_ITERABLE_SENTINEL]);\n}\n\nexport function isKeyed(maybeKeyed: any): boolean {\n  return !!(maybeKeyed && maybeKeyed[IS_KEYED_SENTINEL]);\n}\n\nexport function isIndexed(maybeIndexed: any): boolean {\n  return !!(maybeIndexed && maybeIndexed[IS_INDEXED_SENTINEL]);\n}\n\nexport function isAssociative(maybeAssociative: any): boolean {\n  return isKeyed(maybeAssociative) || isIndexed(maybeAssociative);\n}\n\nexport function isOrdered(maybeOrdered: any): boolean {\n  return !!(maybeOrdered && maybeOrdered[IS_ORDERED_SENTINEL]);\n}\n\nexport function isRecord(maybeRecord: any): boolean {\n  return !!(maybeRecord && maybeRecord[IS_RECORD_SENTINEL]);\n}\n\nexport function isValueObject(maybeValue: any): boolean {\n  return !!(\n    maybeValue &&\n    typeof maybeValue.equals === 'function' &&\n    typeof maybeValue.hashCode === 'function'\n  );\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport diff from 'deep-diff';\nimport Mapping from './Mapping';\nimport Attribute from './Mapping/Attribute';\nimport ClassMetadata, {\n  DefaultSerializedModelType,\n} from './Mapping/ClassMetadata';\nimport { isImmutable } from './isImmutable';\n\ntype Id = string | number;\ntype StringKeyObject = Record<string, any>;\n\n/**\n * deep comparaison between objects\n */\nfunction objectDiffers(\n  left: Record<string, unknown>,\n  right: Record<string, unknown>\n): boolean {\n  const result = diff(left, right);\n\n  return result ? result.length > 0 : false;\n}\n\n/**\n * get the id of an entity or return itself if string\n */\nfunction getEntityId(\n  stringOrEntity: string | Record<string, unknown>,\n  idSerializedKey: string\n): Id {\n  if (typeof stringOrEntity !== 'object') {\n    return stringOrEntity;\n  }\n\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  return stringOrEntity[idSerializedKey] as Id;\n}\n\n/**\n * find old relation value from the new relation id\n * if not found, returs the default serilazed model\n */\nfunction findOldRelation(\n  newRelationValue: any[],\n  oldRelationValue: any[],\n  classMetadata: ClassMetadata\n): DefaultSerializedModelType {\n  const idSerializedKey = classMetadata.getIdentifierAttribute().serializedKey;\n  // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n  // @ts-ignore\n  const relationValueId = getEntityId(newRelationValue, idSerializedKey);\n\n  const foundValue =\n    oldRelationValue &&\n    oldRelationValue.find((innerOldRelationValue) => {\n      const oldRelationValueId = getEntityId(\n        innerOldRelationValue,\n        idSerializedKey\n      );\n\n      return relationValueId === oldRelationValueId;\n    });\n\n  if (foundValue) {\n    return foundValue;\n  }\n\n  return classMetadata.getDefaultSerializedModel();\n}\n\n/**\n * add all identifier from one to many relation list\n */\nfunction getIdentifierForList(\n  newValue: any[],\n  idSerializedKey: string\n): StringKeyObject | string {\n  return newValue.map((value) => {\n    if (Object.keys(value).includes(idSerializedKey)) {\n      return {\n        [idSerializedKey]: value[idSerializedKey],\n      };\n    }\n\n    if (typeof value === 'string') {\n      return value;\n    }\n\n    throw new TypeError(\n      'new value should include a list of string or objects containing the serialized key'\n    );\n  });\n}\n\nclass UnitOfWork {\n  mapping: Mapping;\n\n  #storage: { [key in Id]: Record<string, unknown> };\n\n  #enabled: boolean;\n\n  constructor(mapping: Mapping, enabled = false) {\n    this.mapping = mapping;\n\n    this.#enabled = enabled;\n    this.#storage = {};\n  }\n\n  registerClean(id: Id, entity: Record<string, unknown>): void {\n    if (!this.#enabled) {\n      return;\n    }\n    if (isImmutable(entity)) {\n      this.#storage[id] = entity;\n    } else {\n      this.#storage[id] = { ...entity };\n    }\n  }\n\n  getDirtyEntity(id: Id): Record<string, unknown> {\n    return this.#storage[id];\n  }\n\n  clear(id: Id): void {\n    delete this.#storage[id];\n  }\n\n  getDirtyData(\n    newSerializedModel: Record<string, unknown>,\n    oldSerializedModel: Record<string, unknown>,\n    classMetadata: ClassMetadata\n  ): StringKeyObject {\n    return this._getDirtyFields(\n      newSerializedModel,\n      oldSerializedModel,\n      classMetadata\n    );\n  }\n\n  private _getDirtyFieldsForAttribute(\n    dirtyFieldsParam: StringKeyObject,\n    key: string,\n    attribute: Attribute,\n    oldValue: Record<string, unknown>,\n    newValue: Record<string, unknown>\n  ): StringKeyObject {\n    const dirtyFields = dirtyFieldsParam;\n\n    if (attribute.type === 'object' || attribute.type === 'array') {\n      if (oldValue === undefined || objectDiffers(oldValue, newValue)) {\n        dirtyFields[key] = newValue;\n      }\n    } else if (oldValue !== newValue) {\n      dirtyFields[key] = newValue;\n    }\n\n    return dirtyFields;\n  }\n\n  private _getDirtyFieldsForManyToOne(\n    dirtyFieldsParam: StringKeyObject,\n    key: string,\n    oldValue: Record<string, unknown>,\n    newValue: Record<string, unknown>,\n    relationMetadata: ClassMetadata,\n    idSerializedKey: string\n  ): StringKeyObject {\n    const dirtyFields = dirtyFieldsParam;\n    if (oldValue !== newValue) {\n      if (newValue === null) {\n        dirtyFields[key] = null;\n\n        return dirtyFields;\n      }\n\n      if (typeof oldValue === 'string' || typeof newValue === 'string') {\n        dirtyFields[key] = newValue;\n      }\n\n      const recursiveDiff = this._getDirtyFields(\n        newValue,\n        oldValue,\n        relationMetadata\n      );\n\n      if (Object.keys(recursiveDiff).length > 0) {\n        recursiveDiff[idSerializedKey] = getEntityId(newValue, idSerializedKey);\n        dirtyFields[key] = recursiveDiff;\n      }\n    }\n\n    return dirtyFields;\n  }\n\n  private _getDirtyFieldsForOneToMany(\n    dirtyFieldsParam: StringKeyObject,\n    key: string,\n    idSerializedKey: string,\n    relationMetadata: ClassMetadata,\n    oldValue: any[],\n    newValue: any[]\n  ): StringKeyObject {\n    const dirtyFields = dirtyFieldsParam;\n    const newValueLength = newValue ? newValue.length : 0;\n    const oldValueLength = oldValue ? oldValue.length : 0;\n\n    // number of items changed\n    if (newValueLength !== oldValueLength) {\n      dirtyFields[key] = getIdentifierForList(newValue, idSerializedKey);\n    }\n\n    if (newValue && newValue.length > 0) {\n      if (dirtyFields[key] === undefined) {\n        dirtyFields[key] = [];\n      }\n\n      const relationList = newValue;\n\n      relationList.forEach((newRelationValue, relationAttributeName) => {\n        const oldRelationValue = findOldRelation(\n          newRelationValue,\n          oldValue,\n          relationMetadata\n        );\n\n        if (newRelationValue !== oldRelationValue) {\n          if (\n            typeof newRelationValue === 'string' ||\n            typeof oldRelationValue === 'string'\n          ) {\n            dirtyFields[key][relationAttributeName] = newRelationValue;\n\n            return;\n          }\n\n          const recursiveDiff = this._getDirtyFields(\n            newRelationValue,\n            oldRelationValue,\n            relationMetadata\n          );\n\n          if (Object.keys(recursiveDiff).length > 0) {\n            const entityId = getEntityId(newRelationValue, idSerializedKey);\n\n            if (entityId !== null) {\n              recursiveDiff[idSerializedKey] = entityId;\n            }\n\n            if (dirtyFields[key][relationAttributeName]) {\n              Object.assign(\n                dirtyFields[key][relationAttributeName],\n                recursiveDiff\n              );\n            } else {\n              dirtyFields[key][relationAttributeName] = recursiveDiff;\n            }\n          }\n        }\n      });\n\n      if (dirtyFields[key].length > 0) {\n        // add identifier because one or more object linked has been updated\n        // see test: 'get dirty data many to one update item'\n        dirtyFields[key] = Object.assign(\n          getIdentifierForList(newValue, idSerializedKey),\n          dirtyFields[key]\n        );\n      } else {\n        // no changes, no need to send the key with an empty array as value\n        delete dirtyFields[key];\n      }\n    }\n\n    return dirtyFields;\n  }\n\n  private _getDirtyFields(\n    newSerializedModel: StringKeyObject,\n    oldSerializedModel: StringKeyObject,\n    classMetadata: ClassMetadata\n  ): StringKeyObject {\n    let dirtyFields = {};\n\n    Object.values(classMetadata.getAttributeList()).forEach((attribute) => {\n      const key = attribute.attributeName;\n      const newValue = newSerializedModel[key];\n      const oldValue = oldSerializedModel ? oldSerializedModel[key] : null;\n\n      const currentRelation = classMetadata.getRelation(\n        attribute.serializedKey\n      );\n\n      if (newValue === undefined) {\n        return;\n      }\n\n      // not a relation\n      if (!currentRelation) {\n        dirtyFields = this._getDirtyFieldsForAttribute(\n          dirtyFields,\n          key,\n          attribute,\n          oldValue,\n          newValue\n        );\n\n        return;\n      }\n\n      const relationMetadata = this.mapping.getClassMetadataByKey(\n        currentRelation.targetMetadataKey\n      );\n\n      if (!relationMetadata) {\n        throw new TypeError(\n          `relation metadata is not set for relation ${classMetadata.key}.${currentRelation.targetMetadataKey}`\n        );\n      }\n\n      const idSerializedKey =\n        relationMetadata.getIdentifierAttribute().serializedKey;\n\n      // MANY_TO_ONE relation\n      if (currentRelation.isRelationToOne()) {\n        dirtyFields = this._getDirtyFieldsForManyToOne(\n          dirtyFields,\n          key,\n          oldValue,\n          newValue,\n          relationMetadata,\n          idSerializedKey\n        );\n\n        return;\n      }\n\n      // *_TO_MANY relation\n      dirtyFields = this._getDirtyFieldsForOneToMany(\n        dirtyFields,\n        key,\n        idSerializedKey,\n        relationMetadata,\n        oldValue,\n        newValue\n      );\n    });\n\n    return dirtyFields;\n  }\n}\n\nexport default UnitOfWork;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport ClassMetadata from '../Mapping/ClassMetadata';\nimport SerializerInterface, {\n  Entity,\n  NormalizedObject,\n  NormalizedList,\n  EntityList,\n} from './SerializerInterface';\n\nclass Serializer implements SerializerInterface {\n  /**\n   * convert an entity to a plain javascript object\n   * @param {object} entity - The entity to convert\n   * @param {ClassMetadata} classMetadata - the class metadata\n   * @return {object} the object to serialize\n   */\n  normalizeItem(\n    entity: Entity,\n    classMetadata: ClassMetadata\n  ): NormalizedObject {\n    return entity;\n  }\n\n  /**\n   * convert a plain javascript object to string\n   * @param {object} object - The object to convert to convert\n   * @param {ClassMetadata} classMetadata - the class metadata\n   * @return {string} the content of the request\n   */\n  encodeItem(object: NormalizedObject, classMetadata: ClassMetadata): string {\n    throw new TypeError('`encodeItem` method must be implemented');\n  }\n\n  /**\n   * convert an entity to string that will be sent as the request content\n   * @param {any} entity - The entity to convert\n   * @param {ClassMetadata} classMetadata - the class metadata\n   * @return {string} the content of the request\n   */\n  serializeItem(object: Entity, classMetadata: ClassMetadata): string {\n    const noralizedData = this.normalizeItem(object, classMetadata);\n    return this.encodeItem(noralizedData, classMetadata);\n  }\n\n  /**\n   * convert a plain object to an entity\n   * @param {object} object - The plain javascript object\n   * @param {ClassMetadata} classMetadata - the class metadata\n   * @param {Record<string, unknown>} response - the HTTP response\n   * @return {object} an entity\n   */\n  denormalizeItem(\n    object: NormalizedObject,\n    classMetadata: ClassMetadata,\n    response: Response\n  ): Entity {\n    return object;\n  }\n\n  /**\n   * convert a string containing an object to a plain javascript object\n   * @param {string} rawData - The string fetched from the response\n   * @param {ClassMetadata} classMetadata - the class metadata\n   * @param {Record<string, unknown>} response - the HTTP response\n   * @return {object} the normalized object\n   */\n  decodeItem(\n    rawData: string,\n    classMetadata: ClassMetadata,\n    response: Response\n  ): NormalizedObject {\n    throw new TypeError('`decodeItem` method must be implemented');\n  }\n\n  /**\n   * convert a string containing an object to an entity\n   * @param {string} rawData - The string fetched from the response\n   * @param {ClassMetadata} classMetadata - the class metadata\n   * @param {Record<string, unknown>} response - the HTTP response\n   * @return {object} the entity\n   */\n  deserializeItem(\n    rawData: string,\n    classMetadata: ClassMetadata,\n    response: Response\n  ): Entity {\n    const object = this.decodeItem(rawData, classMetadata, response);\n    return this.denormalizeItem(object, classMetadata, response);\n  }\n\n  /**\n   * convert a plain object list to an entity list\n   * @param {Iterable<object>} objectList - The plain javascript object list (or an iterable object)\n   * @param {ClassMetadata} classMetadata - the class metadata\n   * @param {Record<string, unknown>} response - the HTTP response\n   * @return {Iterable<object>} a list of entities\n   */\n  denormalizeList(\n    objectList: NormalizedList,\n    classMetadata: ClassMetadata,\n    response: Response\n  ): EntityList {\n    return objectList; // weird conversion as the declaration of list type is fuzzy\n  }\n\n  /**\n   * convert a string containing a list of objects to a list of plain javascript objects\n   * @param {string} rawListData - The string fetched from the response\n   * @param {ClassMetadata} classMetadata - the class metadata\n   * @param {Record<string, unknown>} response - the HTTP response\n   * @return {Iterable<object>} a list of normalized objects\n   */\n  decodeList(\n    rawListData: string,\n    classMetadata: ClassMetadata,\n    response: Response\n  ): NormalizedList {\n    throw new TypeError('`deserializeList` method must be implemented');\n  }\n\n  /**\n   * convert a string containing a list of objects to a list of entities\n   * @param {string} rawListData - The string fetched from the response\n   * @param {ClassMetadata} classMetadata - the class metadata\n   * @param {Record<string, unknown>} response - the HTTP response\n   * @return {Iterable<object>} a list of entities\n   */\n  deserializeList(\n    rawListData: string,\n    classMetadata: ClassMetadata,\n    response: Response\n  ): EntityList {\n    const objectList = this.decodeList(rawListData, classMetadata, response);\n    return this.denormalizeList(objectList, classMetadata, response);\n  }\n}\n\nexport default Serializer;\n","/* eslint-disable @typescript-eslint/no-unused-vars */\nimport ClassMetadata from '../Mapping/ClassMetadata';\nimport Serializer from './Serializer';\n\nclass JsSerializer extends Serializer {\n  encodeItem(\n    object: Record<string, unknown>,\n    classMetadata: ClassMetadata\n  ): string {\n    return JSON.stringify(object);\n  }\n\n  decodeItem(\n    rawData: string,\n    classMetadata: ClassMetadata,\n    response: Response\n  ): Record<string, unknown> {\n    return JSON.parse(rawData);\n  }\n\n  decodeList(\n    rawListData: string,\n    classMetadata: ClassMetadata,\n    response: Response\n  ): Iterable<Record<string, unknown>> {\n    return JSON.parse(rawListData);\n  }\n}\n\nexport default JsSerializer;\n","function levenshteinDistance(a: string, b: string): number {\n  const matrix: number[][] = [];\n\n  // Increment along the first column of each row\n  for (let i = 0; i <= b.length; i += 1) {\n    matrix[i] = [i];\n  }\n\n  // Increment each column in the first row\n  for (let j = 0; j <= a.length; j += 1) {\n    matrix[0][j] = j;\n  }\n\n  // Fill in the rest of the matrix\n  for (let i = 1; i <= b.length; i += 1) {\n    for (let j = 1; j <= a.length; j += 1) {\n      if (b.charAt(i - 1) === a.charAt(j - 1)) {\n        matrix[i][j] = matrix[i - 1][j - 1];\n      } else {\n        matrix[i][j] = Math.min(\n          matrix[i - 1][j - 1] + 1, // substitution\n          matrix[i][j - 1] + 1, // insertion\n          matrix[i - 1][j] + 1 // deletion\n        );\n      }\n    }\n  }\n\n  return matrix[b.length][a.length];\n}\n\nexport function findClosestWord(\n  word: string,\n  list: string[],\n  maxDistance = Infinity\n): string | null {\n  let closestWord: string | null = null;\n  let minDistance = Infinity;\n\n  for (let i = 0; i < list.length; i += 1) {\n    const candidate = list[i];\n    const distance = levenshteinDistance(word, candidate);\n\n    if (distance < minDistance && distance <= maxDistance) {\n      minDistance = distance;\n      closestWord = candidate;\n    }\n  }\n\n  return closestWord;\n}\n","import { convertToRecord } from '../client/headerUtils';\n\ntype SdkRequest = RequestInit & { url: string };\n\n// type SdkResponse = Partial<Response>;\ntype SdkResponse = {\n  status: number;\n  headers: Record<string, string>;\n};\n\nconst generateId = () =>\n  `rest-client-sdk|${Date.now()}-${\n    Math.floor(Math.random() * (9e12 - 1)) + 1e12\n  }`;\n\nexport type SerializableRequest = {\n  url: string;\n  method?: string;\n  headers?: Record<string, string>;\n  body?: string;\n};\n\nexport type Log = {\n  id: string;\n  request?: SerializableRequest;\n  response?: SdkResponse;\n  logTimes: {\n    request?: number;\n    response?: number;\n  };\n};\n\nexport type LoggerHistory = Array<Log>;\n\nfunction serializeRequest(req: SdkRequest): SerializableRequest {\n  const request = { ...req }; // Make a clone, useful for doing destructive things\n  return {\n    method: request.method, // The Request Method, e.g. GET, POST, DELETE\n    url: request.url, // The URL\n    headers: request.headers ? convertToRecord(request.headers) : undefined,\n    body: typeof request.body === 'string' ? request.body : undefined,\n  };\n}\n\nexport class Logger {\n  #history: LoggerHistory;\n\n  get history(): LoggerHistory {\n    return this.#history;\n  }\n\n  constructor() {\n    this.#history = [];\n  }\n\n  logRequest(params: SdkRequest): string {\n    const log: Log = {\n      id: generateId(),\n      request: serializeRequest(params),\n      logTimes: { request: Date.now() },\n    };\n\n    this.#history.push(log);\n\n    return log.id;\n  }\n\n  logResponse(response: Response, requestId?: undefined | string): string {\n    const id = requestId || generateId();\n\n    // console.log('clone');\n    // const clonedResponse = response.clone(); // THIS IS THE LINE THAT CAUSES THE PROBLEM\n    // console.log('after clone', clonedResponse.status);\n\n    const logContent: SdkResponse = {\n      status: response.status, // clonedResponse.status,\n      headers: Object.fromEntries(response.headers),\n    };\n\n    const foundLogIndex = this.#history.findIndex((log) => log.id === id);\n\n    if (foundLogIndex > -1) {\n      this.#history[foundLogIndex].response = logContent;\n      this.#history[foundLogIndex].logTimes.response = Date.now();\n    } else {\n      this.#history.push({\n        id,\n        response: logContent,\n        logTimes: { response: Date.now() },\n      });\n    }\n\n    return id;\n  }\n}\n","import Mapping from './Mapping';\n\nimport type RestClientSdkInterface from './RestClientSdkInterface';\n\nimport type { Config } from './RestClientSdkInterface';\nimport { Token } from './TokenGenerator/types';\nimport TokenStorageInterface from './TokenStorageInterface';\nimport UnitOfWork from './UnitOfWork';\nimport AbstractClient from './client/AbstractClient';\nimport JsSerializer from './serializer/JsSerializer';\nimport SerializerInterface from './serializer/SerializerInterface';\nimport { findClosestWord } from './utils/levenshtein';\nimport { Logger } from './utils/logging';\nimport { generateRepository } from './utils/repositoryGenerator';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Entity = any;\n\n// export type SdkMetadata = Record<string, [any, Iterable<any>, undefined | any]>;\nexport type MetadataDefinition = {\n  entity: Entity;\n  list: Iterable<Entity>;\n  // repository?: typeof AbstractClient;\n};\n\nexport type SdkMetadata = Record<string, MetadataDefinition>;\n\nclass RestClientSdk<\n  M extends SdkMetadata,\n> implements RestClientSdkInterface<M> {\n  config: Config;\n\n  public tokenStorage: TokenStorageInterface<Token>;\n\n  public serializer: SerializerInterface;\n\n  public mapping: Mapping;\n\n  public unitOfWork: UnitOfWork;\n\n  #repositoryList: Partial<Record<keyof M, AbstractClient<M[keyof M]>>>;\n\n  public readonly logger?: Logger;\n\n  constructor(\n    tokenStorage: TokenStorageInterface<Token>,\n    config: Config,\n    mapping: Mapping,\n    serializer: SerializerInterface = new JsSerializer()\n  ) {\n    this.checkConfigValidity(config);\n\n    if (!(mapping instanceof Mapping)) {\n      throw new TypeError('mapping should be an instance of `Mapping`');\n    }\n\n    this.config = this._mergeWithBaseConfig(config);\n    this.tokenStorage = tokenStorage;\n    this.serializer = serializer;\n    this.mapping = mapping;\n\n    this.unitOfWork = new UnitOfWork(\n      this.mapping,\n      this.config.unitOfWorkEnabled\n    );\n\n    if (config.loggerEnabled) {\n      this.logger = new Logger();\n    }\n\n    this.#repositoryList = {};\n  }\n\n  /**\n   * get a repository by it's metadata \"key\" attribute\n   *\n   * @param {string} key the repository \"key\" (the first argument of `new ClassMetadata`)\n   */\n  getRepository<K extends keyof M & string>(key: K): AbstractClient<M[K]> {\n    if (!this.#repositoryList[key]) {\n      const metadata = this.mapping.getClassMetadataByKey(key);\n\n      if (!metadata) {\n        const closeKey = findClosestWord(key, this.mapping.getMappingKeys(), 5);\n\n        const suggestions = closeKey ? ` Did you mean \"${closeKey}\"?` : '';\n\n        throw new Error(\n          `Unable to get metadata for repository \"${key}\".${suggestions}`\n        );\n      }\n\n      this.#repositoryList[key] = generateRepository<M[K]>(\n        this,\n        metadata,\n        this.config.unitOfWorkEnabled\n      );\n    }\n\n    return this.#repositoryList[key]! as unknown as AbstractClient<M[K]>;\n  }\n\n  private _mergeWithBaseConfig(config: Config): Config {\n    const newConfig = config;\n    newConfig.useDefaultParameters =\n      config.useDefaultParameters === undefined\n        ? true\n        : config.useDefaultParameters;\n\n    newConfig.authorizationType = config.authorizationType || 'Bearer';\n\n    return newConfig;\n  }\n\n  private checkConfigValidity(config: Config): void {\n    if (!(config && config.path && config.scheme)) {\n      throw new RangeError(\n        `SDK config is not valid, it should contain a \"path\", a \"scheme\" parameter,\n        and may contain a \"port\" and a \"useDefaultParameters\" parameter`\n      );\n    }\n  }\n}\n\nexport default RestClientSdk;\n","/* eslint no-unused-vars: 0 */\nimport URI from 'urijs';\nimport {\n  getHttpErrorFromResponse,\n  InvalidGrantError,\n  InvalidScopeError,\n  OauthError,\n} from '../ErrorFactory';\nimport { Logger } from '../utils/logging';\nimport TokenGeneratorInterface, {\n  TokenBodyReturn,\n} from './TokenGeneratorInterface';\nimport { ErrorBody, Token, TokenResponse } from './types';\n\ninterface UrlConfig {\n  scheme: string;\n  path: string;\n  port?: string;\n}\nabstract class AbstractTokenGenerator<\n  T extends Token,\n  C,\n> implements TokenGeneratorInterface<T> {\n  readonly tokenGeneratorConfig: C;\n\n  protected logger?: Logger;\n\n  constructor(tokenGeneratorConfig: C, logger?: Logger) {\n    if (logger) {\n      this.logger = logger;\n    }\n    this.tokenGeneratorConfig = tokenGeneratorConfig;\n    if (typeof this.checkTokenGeneratorConfig === 'function') {\n      this.checkTokenGeneratorConfig(this.tokenGeneratorConfig);\n    }\n  }\n\n  abstract generateToken(\n    parameters: unknown\n  ): Promise<TokenBodyReturn<T> | TokenResponse<T>>;\n\n  abstract refreshToken(\n    accessToken: null | T\n  ): Promise<TokenBodyReturn<T> | TokenResponse<T>>;\n\n  abstract checkTokenGeneratorConfig(config: C): void;\n\n  /** @deprecated */\n  protected _manageOauthError(response: Response): Promise<never> {\n    return response\n      .clone()\n      .json()\n      .then((body: ErrorBody) => {\n        if (body.error === 'invalid_grant') {\n          throw new InvalidGrantError(\n            body.error,\n            getHttpErrorFromResponse(response)\n          );\n        }\n        if (body.error === 'invalid_scope') {\n          throw new InvalidScopeError(\n            body.error,\n            getHttpErrorFromResponse(response)\n          );\n        }\n        throw new OauthError(body.error, getHttpErrorFromResponse(response));\n      })\n      .catch((err) => {\n        if (!(err instanceof OauthError)) {\n          throw new OauthError(err.type, getHttpErrorFromResponse(response));\n        }\n\n        throw err;\n      });\n  }\n\n  protected generateUrlFromConfig(config: UrlConfig): string {\n    const uri = new URI(`${config.scheme}://${config.path}`);\n\n    if (config.port) {\n      uri.port(config.port);\n    }\n\n    return uri.toString();\n  }\n}\n\nexport default AbstractTokenGenerator;\n","import AbstractTokenGenerator from './AbstractTokenGenerator';\nimport { Token, TokenResponse } from './types';\n\ntype AuthorizationCodeFlowTokenGeneratorConfig = {\n  clientId: string;\n  clientSecret: string;\n  path: string;\n  scheme: string;\n  redirectUri: string;\n  port?: string;\n  scope?: string;\n};\n\ntype GenerateTokenParameters = {\n  code: string;\n  state?: string;\n};\n\ninterface AuthorizationCodeToken extends Token {\n  access_token: string;\n  token_type: string;\n  refresh_token: string;\n  expires_in?: number;\n  scope?: string;\n}\n\ntype AuthorizationCodeFlowResponse = TokenResponse<AuthorizationCodeToken>;\n\n/**\n * This generator take cares of the second part of the authorization code flow : the part where you have a \"code\"\n * and you have validated the \"state\"\n * @See {@link https://oauth2.thephpleague.com/authorization-server/auth-code-grant/|the great article of the PHP League} about authorization code flow.\n */\nclass AuthorizationCodeFlowTokenGenerator extends AbstractTokenGenerator<\n  AuthorizationCodeToken,\n  AuthorizationCodeFlowTokenGeneratorConfig\n> {\n  /**\n   * This function needs no generate an access token\n   */\n  generateToken(\n    parameters: GenerateTokenParameters\n  ): Promise<AuthorizationCodeFlowResponse> {\n    this._checkGenerateParameters(parameters);\n\n    const url = this.generateUrlFromConfig(this.tokenGeneratorConfig);\n\n    const params = {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n      },\n      body: new URLSearchParams({\n        grant_type: 'authorization_code',\n        client_id: this.tokenGeneratorConfig.clientId,\n        client_secret: this.tokenGeneratorConfig.clientSecret, // TODO : secure this ?\n        redirect_uri: this.tokenGeneratorConfig.redirectUri,\n        code: parameters.code,\n      }).toString(),\n    };\n\n    if (this.logger) {\n      this.logger.logRequest({ url, ...params });\n    }\n\n    return fetch(url, params);\n  }\n\n  /**\n   * This function needs to refresh the current possibly expired access token\n   * and return a Promise that will be resolved with a fresh access token\n   */\n  refreshToken(\n    oldAccessToken: null | AuthorizationCodeToken\n  ): Promise<AuthorizationCodeFlowResponse> {\n    if (!oldAccessToken) {\n      throw new Error(\n        'refresh_token is not set. Did you called `generateToken` before ?'\n      );\n    }\n\n    if (!oldAccessToken?.refresh_token) {\n      throw new Error('Unable to refreshToken as there are no refresh_token');\n    }\n\n    const url = this.generateUrlFromConfig(this.tokenGeneratorConfig);\n\n    const params = {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n      },\n      body: new URLSearchParams({\n        grant_type: 'refresh_token',\n        client_id: this.tokenGeneratorConfig.clientId,\n        client_secret: this.tokenGeneratorConfig.clientSecret,\n        refresh_token: oldAccessToken.refresh_token,\n      }).toString(),\n    };\n\n    if (this.logger) {\n      this.logger.logRequest({ url, ...params });\n    }\n\n    return fetch(url, params);\n  }\n\n  checkTokenGeneratorConfig(\n    config: AuthorizationCodeFlowTokenGeneratorConfig\n  ): void {\n    if (!config || Object.keys(config).length === 0) {\n      throw new RangeError('TokenGenerator config must be set');\n    }\n\n    if (!(config.path && config.scheme)) {\n      throw new RangeError(\n        'TokenGenerator config is not valid, it should contain a \"path\", a \"scheme\" parameter'\n      );\n    }\n\n    if (!(config.clientId && config.clientSecret)) {\n      throw new RangeError(\n        'TokenGenerator config is not valid, it should contain a \"clientId\", a \"clientSecret\" parameter'\n      );\n    }\n\n    if (!config.redirectUri) {\n      throw new RangeError(\n        'TokenGenerator config is not valid, it should contain a \"redirectUri\" parameter'\n      );\n    }\n  }\n\n  private _checkGenerateParameters(parameters: GenerateTokenParameters): void {\n    if (!(parameters && Object.keys(parameters).length > 0)) {\n      throw new RangeError('parameters must be set');\n    }\n\n    if (!parameters.code) {\n      throw new RangeError('\"code\" must be passed as parameter');\n    }\n  }\n}\n\nexport default AuthorizationCodeFlowTokenGenerator;\n","// memoize promise returning function so that it returns\n// the same promise if called again before resolve / reject\n\ninterface MemoizableFunction<P, R> {\n  (...params: P[]): Promise<R> | false;\n}\n\ntype FalsableCallbackReturn<R> = false | Promise<R>;\n\nexport function memoizePromise<P, R>(\n  callback: MemoizableFunction<P, R>\n): () => Promise<R> {\n  const cache: { [key: string]: FalsableCallbackReturn<R> } = {};\n\n  function memoized(this: unknown, ...parameters: P[]): Promise<R> {\n    const cacheKey = JSON.stringify(parameters);\n    const cacheValue = cache[cacheKey];\n\n    if (cacheValue) {\n      return cacheValue;\n    }\n\n    // Get and add the value to the cache\n    const value = callback.apply(this, parameters);\n    cache[cacheKey] = value;\n\n    if (!value || typeof value.then !== 'function') {\n      throw new Error(\n        'Memoization Error, Async function returned non-promise value'\n      );\n    }\n\n    // Delete the value regardless of whether it resolves or rejects\n    return value.then(\n      (internalValue: R) => {\n        cache[cacheKey] = false;\n\n        return internalValue;\n      },\n      (err: Error) => {\n        cache[cacheKey] = false;\n\n        throw err;\n      }\n    );\n  }\n\n  memoized.cache = cache;\n\n  return memoized;\n}\n","import { memoizePromise } from '../decorator';\nimport AbstractTokenGenerator from './AbstractTokenGenerator';\nimport { Token, TokenResponse } from './types';\n\nconst ERROR_CONFIG_EMPTY = 'TokenGenerator config must be set';\nconst ERROR_CONFIG_PATH_SCHEME =\n  'TokenGenerator config is not valid, it should contain a \"path\", a \"scheme\" parameter';\nconst ERROR_CONFIG_CLIENT_INFORMATIONS =\n  'TokenGenerator config is not valid, it should contain a \"clientId\", a \"clientSecret\" parameter';\n\ntype Config = {\n  clientId: string;\n  clientSecret: string;\n  path: string;\n  scheme: string;\n  port?: string;\n  scope?: string;\n};\n\ntype BaseParameters = {\n  scope?: string;\n};\n\ninterface ClientCredentialToken extends Token {\n  access_token: string;\n  token_type: string;\n  refresh_token: never;\n  expires_in?: number;\n  scope?: string;\n}\n\ntype ClientCredentialResponse = TokenResponse<ClientCredentialToken>;\n\nclass ClientCredentialsGenerator extends AbstractTokenGenerator<\n  ClientCredentialToken,\n  Config\n> {\n  constructor(tokenGeneratorConfig: Config) {\n    super(tokenGeneratorConfig);\n    this.generateToken = memoizePromise(this.generateToken);\n  }\n\n  generateToken(\n    baseParameters: BaseParameters = {}\n  ): Promise<ClientCredentialResponse> {\n    const body = new URLSearchParams({\n      grant_type: 'client_credentials',\n      client_id: this.tokenGeneratorConfig.clientId,\n      client_secret: this.tokenGeneratorConfig.clientSecret,\n    });\n    if (baseParameters.scope) {\n      body.append('scope', baseParameters.scope);\n    } else if (this.tokenGeneratorConfig.scope) {\n      body.append('scope', this.tokenGeneratorConfig.scope);\n    }\n\n    const params = {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n      },\n      body: body.toString(),\n    };\n\n    const url = this.generateUrlFromConfig(this.tokenGeneratorConfig);\n\n    if (this.logger) {\n      this.logger.logRequest({ url, ...params });\n    }\n\n    return fetch(url, params);\n  }\n\n  refreshToken(\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    accessToken: null | ClientCredentialToken\n  ): Promise<ClientCredentialResponse> {\n    return this.generateToken({});\n  }\n\n  checkTokenGeneratorConfig(config: Config): void {\n    if (!config || Object.keys(config).length === 0) {\n      throw new RangeError(ERROR_CONFIG_EMPTY);\n    }\n\n    if (!(config.path && config.scheme)) {\n      throw new RangeError(ERROR_CONFIG_PATH_SCHEME);\n    }\n\n    if (!(config.clientId && config.clientSecret)) {\n      throw new RangeError(ERROR_CONFIG_CLIENT_INFORMATIONS);\n    }\n  }\n}\n\nexport default ClientCredentialsGenerator;\n","import AbstractTokenGenerator from './AbstractTokenGenerator';\nimport { Token, TokenResponse } from './types';\n\nconst ERROR_CONFIG_EMPTY = 'TokenGenerator config must be set';\nconst ERROR_CONFIG_PATH_SCHEME =\n  'TokenGenerator config is not valid, it should contain a \"path\", a \"scheme\" parameter';\nconst ERROR_CONFIG_CLIENT_INFORMATIONS =\n  'TokenGenerator config is not valid, it should contain a \"clientId\", a \"clientSecret\" parameter';\n\nconst ERROR_TOKEN_EMPTY = 'parameters must be set';\nconst ERROR_TOKEN_USERNAME_PASSWORD =\n  'username and password must be passed as parameters';\n\ntype Config = {\n  clientId: string;\n  clientSecret: string;\n  path: string;\n  scheme: string;\n  port?: string;\n  scope?: string;\n};\n\ntype GenerateTokenParameters = {\n  username: string;\n  password: string;\n  scope?: string;\n};\n\ninterface PasswordToken extends Token {\n  access_token: string;\n  token_type: string;\n  refresh_token?: string;\n  expires_in?: number;\n  scope?: string;\n}\n\ntype PasswordTokenResponse = TokenResponse<PasswordToken>;\n\nclass PasswordGenerator extends AbstractTokenGenerator<PasswordToken, Config> {\n  generateToken(\n    baseParameters: GenerateTokenParameters\n  ): Promise<PasswordTokenResponse> {\n    this._checkGenerateParameters(baseParameters);\n\n    const body = new URLSearchParams({\n      grant_type: 'password',\n      username: baseParameters.username,\n      password: baseParameters.password,\n      client_id: this.tokenGeneratorConfig.clientId,\n      client_secret: this.tokenGeneratorConfig.clientSecret,\n    });\n\n    if (baseParameters.scope) {\n      body.append('scope', baseParameters.scope);\n    } else if (this.tokenGeneratorConfig.scope) {\n      body.append('scope', this.tokenGeneratorConfig.scope);\n    }\n\n    const url = this.generateUrlFromConfig(this.tokenGeneratorConfig);\n\n    const params = {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n      },\n      body: body.toString(),\n    };\n\n    if (this.logger) {\n      this.logger.logRequest({ url, ...params });\n    }\n\n    return fetch(url, params);\n  }\n\n  refreshToken(\n    accessToken: null | PasswordToken\n  ): Promise<PasswordTokenResponse> {\n    const refreshToken = accessToken?.refresh_token;\n    if (!refreshToken) {\n      throw new Error(\n        'refresh_token is not set. Did you called `generateToken` before ?'\n      );\n    }\n\n    const body = new URLSearchParams({\n      grant_type: 'refresh_token',\n      client_id: this.tokenGeneratorConfig.clientId,\n      client_secret: this.tokenGeneratorConfig.clientSecret,\n      refresh_token: refreshToken,\n    });\n\n    if (this.tokenGeneratorConfig.scope) {\n      body.append('scope', this.tokenGeneratorConfig.scope);\n    }\n\n    const url = this.generateUrlFromConfig(this.tokenGeneratorConfig);\n\n    const params = {\n      method: 'POST',\n      headers: {\n        'Content-Type': 'application/x-www-form-urlencoded',\n      },\n      body: body.toString(),\n    };\n\n    if (this.logger) {\n      this.logger.logRequest({ url, ...params });\n    }\n\n    return fetch(url, params);\n  }\n\n  checkTokenGeneratorConfig(config: Config): void {\n    if (!config || Object.keys(config).length === 0) {\n      throw new RangeError(ERROR_CONFIG_EMPTY);\n    }\n\n    if (!(config.path && config.scheme)) {\n      throw new RangeError(ERROR_CONFIG_PATH_SCHEME);\n    }\n\n    if (!(config.clientId && config.clientSecret)) {\n      throw new RangeError(ERROR_CONFIG_CLIENT_INFORMATIONS);\n    }\n  }\n\n  _checkGenerateParameters(parameters: GenerateTokenParameters): void {\n    if (!(parameters && Object.keys(parameters).length > 0)) {\n      throw new RangeError(ERROR_TOKEN_EMPTY);\n    }\n\n    if (!(parameters.username && parameters.password)) {\n      throw new RangeError(ERROR_TOKEN_USERNAME_PASSWORD);\n    }\n  }\n}\n\nexport default PasswordGenerator;\n","import TokenGeneratorInterface from './TokenGeneratorInterface';\nimport { Token } from './types';\n\ntype RefreshTokenFunc = (oldAccessToken: null | Token) => Promise<Token>;\n\n/**\n * @deprecated ProvidedTokenGenerator is not an Oauth valid generator.\n * You should use one of the official generator or implement your own custom generator.\n */\nclass ProvidedTokenGenerator implements TokenGeneratorInterface<Token> {\n  #token: Token;\n\n  #refreshTokenFunc: null | RefreshTokenFunc;\n\n  constructor(token: Token, refreshTokenFunc: null | RefreshTokenFunc = null) {\n    this.#token = token;\n    this.#refreshTokenFunc = refreshTokenFunc;\n  }\n\n  set token(token: Token) {\n    this.#token = token;\n  }\n\n  generateToken(): Promise<Token> {\n    return Promise.resolve(this.#token);\n  }\n\n  refreshToken(accessToken: null | Token): Promise<Token> {\n    if (typeof this.#refreshTokenFunc === 'function') {\n      return this.#refreshTokenFunc(accessToken);\n    }\n\n    return this.generateToken();\n  }\n\n  autoGenerateToken(): Promise<Token> {\n    return this.generateToken();\n  }\n}\n\nexport default ProvidedTokenGenerator;\n","import AsyncStorageInterface from './AsyncStorageInterface';\nimport {\n  getHttpErrorFromResponse,\n  InvalidGrantError,\n  InvalidScopeError,\n  isOauthError,\n  OauthError,\n} from './ErrorFactory';\nimport TokenGeneratorInterface, {\n  TokenBodyReturn,\n} from './TokenGenerator/TokenGeneratorInterface';\nimport { ErrorBody, Token, TokenResponse } from './TokenGenerator/types';\n\nimport type TokenStorageInterface from './TokenStorageInterface';\n\nimport type { HasExpiresAt } from './TokenStorageInterface';\nimport { memoizePromise } from './decorator';\nimport { Logger } from './utils/logging';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nfunction isResponse(response: any): response is Response {\n  return typeof response?.json === 'function';\n}\n\nfunction manageOauthError(body: ErrorBody, response?: Response): never {\n  let error;\n  if (response) {\n    error = getHttpErrorFromResponse(response);\n  }\n\n  if (body.error === 'invalid_grant') {\n    throw new InvalidGrantError(body.error, error);\n  }\n  if (body.error === 'invalid_scope') {\n    throw new InvalidScopeError(body.error, error);\n  }\n\n  throw new OauthError(body.error, error);\n}\n\nclass TokenStorage<T extends Token> implements TokenStorageInterface<T> {\n  #tokenGenerator: TokenGeneratorInterface<T>;\n\n  #hasATokenBeenGenerated: boolean;\n\n  accessTokenKey: string;\n\n  #asyncStorage!: AsyncStorageInterface;\n\n  #logger?: Logger;\n\n  constructor(\n    tokenGenerator: TokenGeneratorInterface<T>,\n    asyncStorage: AsyncStorageInterface,\n    accessTokenKey = 'rest_client_sdk.api.access_token',\n    logger?: Logger\n  ) {\n    if (logger) {\n      this.#logger = logger;\n    }\n    this.#tokenGenerator = tokenGenerator;\n    this.#hasATokenBeenGenerated = false;\n    this.setAsyncStorage(asyncStorage);\n    this.accessTokenKey = accessTokenKey;\n\n    this.handleTokenResponse = this.handleTokenResponse.bind(this);\n\n    this.generateToken = memoizePromise(this.generateToken);\n    this.refreshToken = memoizePromise(this.refreshToken);\n  }\n\n  setAsyncStorage(asyncStorage: AsyncStorageInterface): void {\n    this.#asyncStorage = asyncStorage;\n  }\n\n  hasAccessToken(): Promise<boolean> {\n    return this.#asyncStorage\n      .getItem(this.accessTokenKey)\n      .then((accessToken) => !!accessToken);\n  }\n\n  getAccessToken(): Promise<null | string> {\n    return this.getAccessTokenObject().then(\n      (token) => token && token.access_token\n    );\n  }\n\n  getAccessTokenObject(): Promise<null | (T & HasExpiresAt)> {\n    return this.#asyncStorage.getItem(this.accessTokenKey).then((token) => {\n      if (token) {\n        const tokenObject = JSON.parse(token);\n\n        if (typeof tokenObject !== 'object') {\n          return null;\n        }\n\n        return tokenObject;\n      }\n\n      if (this.#hasATokenBeenGenerated) {\n        return null;\n      }\n\n      if (typeof this.#tokenGenerator.autoGenerateToken === 'function') {\n        return this.#tokenGenerator.autoGenerateToken();\n      }\n\n      throw new Error('No token has been generated yet.');\n    });\n  }\n\n  logout(): Promise<void> {\n    return this.#asyncStorage.removeItem(this.accessTokenKey);\n  }\n\n  private _addExpiresAtToResponseData(\n    responseData: T,\n    callTimestamp: number\n  ): T & HasExpiresAt {\n    if (!responseData) {\n      return responseData;\n    }\n\n    const updatedResponseData: T & HasExpiresAt = {\n      ...responseData,\n      expires_at: null,\n    };\n\n    if (\n      typeof updatedResponseData.expires_in !== 'undefined' &&\n      updatedResponseData.expires_in !== null\n      // && updatedResponseData.expires_in >= 0\n    ) {\n      updatedResponseData.expires_at =\n        Math.round(callTimestamp / 1000) + updatedResponseData.expires_in;\n    }\n\n    return updatedResponseData;\n  }\n\n  generateToken(parameters: unknown): Promise<T & HasExpiresAt> {\n    const callTimestamp = Date.now();\n\n    return this.#tokenGenerator\n      .generateToken(parameters)\n      .then(this.handleTokenResponse)\n      .then((body) => {\n        const updatedResponseData = this._addExpiresAtToResponseData(\n          body,\n          callTimestamp\n        );\n\n        return this._storeAccessToken(updatedResponseData).then(() => {\n          this.#hasATokenBeenGenerated = true;\n          return updatedResponseData;\n        });\n      });\n  }\n\n  refreshToken(): Promise<T & HasExpiresAt> {\n    return this.#asyncStorage.getItem(this.accessTokenKey).then((token) => {\n      const callTimestamp = Date.now();\n      return this.#tokenGenerator\n        .refreshToken(token ? JSON.parse(token) : null)\n        .then(this.handleTokenResponse)\n        .then((body) => {\n          const updatedResponseData = this._addExpiresAtToResponseData(\n            body,\n            callTimestamp\n          );\n\n          return this._storeAccessToken(updatedResponseData).then(\n            () => updatedResponseData\n          );\n        });\n    });\n  }\n\n  private handleTokenResponse(\n    responseOrBody: TokenBodyReturn<T> | TokenResponse<T>\n  ): Promise<T> {\n    if (isResponse(responseOrBody)) {\n      const response = responseOrBody;\n      const originalResponse = response.clone();\n\n      if (this.#logger) {\n        this.#logger.logResponse(response);\n      }\n\n      return response\n        .json()\n        .then((body) => {\n          if (isOauthError(body)) {\n            // throw error if response body is an oauth error\n            manageOauthError(body, originalResponse);\n          } else if (response.status >= 400) {\n            // throw an error if response status code is an \"error\" status code\n            throw getHttpErrorFromResponse(originalResponse);\n          }\n\n          return body;\n        })\n        .catch((err) => {\n          if (!(err instanceof OauthError)) {\n            throw new OauthError(\n              err.type,\n              getHttpErrorFromResponse(originalResponse)\n            );\n          }\n\n          throw err;\n        });\n    }\n\n    const body = responseOrBody;\n\n    if (isOauthError(body)) {\n      // throw error if response body is an oauth error\n      manageOauthError(body);\n    }\n\n    return Promise.resolve(body);\n  }\n\n  /**\n   * Return the number of second when the token will expire\n   * return value can be negative if the token is already expired\n   */\n  getCurrentTokenExpiresIn(): Promise<number | null> {\n    return this.getAccessTokenObject().then((accessTokenObject) => {\n      if (accessTokenObject === null) {\n        throw new Error('No token has been stored.');\n      }\n\n      if (\n        typeof accessTokenObject.expires_at === 'undefined' ||\n        accessTokenObject.expires_at === null\n      ) {\n        return null;\n      }\n\n      const now = Math.round(Date.now() / 1000);\n      return accessTokenObject.expires_at - now;\n    });\n  }\n\n  private _storeAccessToken(responseData: T): Promise<unknown> {\n    return this.#asyncStorage.setItem(\n      this.accessTokenKey,\n      JSON.stringify(responseData)\n    );\n  }\n}\n\nexport default TokenStorage;\n"],"names":["HttpError","_Error","message","baseResponse","_this","_classCallCheck","_callSuper","_defineProperty","Object","setPrototypeOf","OauthError","prototype","Error","captureStackTrace","name","_inherits","_createClass","key","value","responseJson","json","_wrapNativeSuper","_Error2","previousError","_this2","InvalidGrantError","_OauthError2","_this3","InvalidScopeError","_OauthError3","_this4","BadRequestError","_HttpError2","_this5","UnauthorizedError","_BadRequestError2","_this6","ForbiddenError","_BadRequestError3","_this7","ResourceNotFoundError","_BadRequestError4","_this8","ConflictError","_BadRequestError5","_this9","InternalServerError","_HttpError3","_this0","getHttpErrorFromResponse","originalResponse","response","clone","status","isOauthError","body","error","DEFAULT_CONFIG","collectionKey","_config","WeakMap","_classMetadataList","Mapping","idPrefix","arguments","length","undefined","config","_classPrivateFieldInitSpec","_classPrivateFieldSet","setConfig","getConfig","_classPrivateFieldGet","_objectSpread","setMapping","classMetadataList","getMappingKeys","map","classMetadata","getClassMetadataByKey","filterList","filter","isMappingValid","some","errorList","values","getAttributeList","attribute","relation","getRelation","serializedKey","relationMetadata","targetMetadataKey","isRelationToOne","attributeName","endsWith","concat","isRelationToMany","type","endsWithList","pluralize","require","isPlural","_unused","hasIdentifierAttribute","push","nbError","console","warn","Attribute","isIdentifier","TypeError","generateRepository","sdk","metadata","isUnitOfWorkEnabled","repositoryClass","removeAuthorization","headers","Headers","filterAuthorization","entries","header","Array","isArray","fromEntries","removeUndefinedHeaders","filterEntries","convertToRecord","EXPIRE_LIMIT_SECONDS","_tokenStorage","_isUnitOfWorkEnabled","AbstractClient","tokenStorage","serializer","withUnitOfWork","enabled","getDefaultParameters","getPathBase","pathParameters","pathRoot","getEntityURI","entity","idValue","_getEntityIdentifier","Number","isFinite","toString","pathBase","indexOf","find","id","queryParam","requestParams","url","_generateUrlFromParams","deserializeResponse","authorizedFetch","findBy","findAll","create","URI","addSearch","oldSerializedModel","getDefaultSerializedModel","newSerializedModel","normalizeItem","diff","unitOfWork","getDirtyData","method","encodeItem","update","_update","patch","identifier","oldModel","getDirtyEntity","delete","then","clear","requestPromise","listOrItem","text","_ref","itemList","deserializeList","_iterator","_createForOfIteratorHelper","_step","s","n","done","decodedItem","normalizedItem","registerClean","err","e","f","decodeItem","item","denormalizeItem","makeUri","input","host","path","scheme","port","String","mapping","segments","segment","pathname","startsWith","unshift","_fetchWithToken","params","useDefaultParameters","assign","testPathBase","getCurrentTokenExpiresIn","accessTokenExpiresIn","refreshToken","refreshedTokenObject","access_token","_handleRefreshTokenFailure","getAccessToken","token","_doFetch","_refreshTokenAndRefetch","rest","_objectWithoutProperties","_excluded","updatedRequestParams","_manageUnauthorized","authorizationHeader","get","invalidGrant","accessToken","baseHeaders","Authorization","authorizationType","logId","logger","logRequest","fetch","logResponse","httpError","object","idKey","getIdentifierAttribute","logout","onRefreshTokenFailure","_attributeList","_relationList","_identifierAttribute","ClassMetadata","getAttribute","setAttributeList","attributeList","forEach","setRelationList","relationList","out","keys","RelationTypes","Relation","isOneToOne","ONE_TO_ONE","isOneToMany","ONE_TO_MANY","isManyToOne","MANY_TO_ONE","isManyToMany","MANY_TO_MANY","IS_ITERABLE_SENTINEL","IS_RECORD_SENTINEL","isImmutable","maybeImmutable","isCollection","isRecord","maybeCollection","maybeRecord","objectDiffers","left","right","result","getEntityId","stringOrEntity","idSerializedKey","_typeof","findOldRelation","newRelationValue","oldRelationValue","relationValueId","foundValue","innerOldRelationValue","oldRelationValueId","getIdentifierForList","newValue","includes","_storage","_enabled","UnitOfWork","_getDirtyFields","_getDirtyFieldsForAttribute","dirtyFieldsParam","oldValue","dirtyFields","_getDirtyFieldsForManyToOne","recursiveDiff","_getDirtyFieldsForOneToMany","newValueLength","oldValueLength","relationAttributeName","entityId","currentRelation","Serializer","serializeItem","noralizedData","rawData","deserializeItem","denormalizeList","objectList","decodeList","rawListData","JsSerializer","_Serializer","JSON","stringify","parse","levenshteinDistance","a","b","matrix","i","j","charAt","Math","min","findClosestWord","word","list","maxDistance","Infinity","closestWord","minDistance","candidate","distance","generateId","Date","now","floor","random","serializeRequest","req","request","_history","Logger","log","logTimes","requestId","logContent","foundLogIndex","findIndex","_repositoryList","RestClientSdk","checkConfigValidity","_mergeWithBaseConfig","unitOfWorkEnabled","loggerEnabled","getRepository","closeKey","suggestions","newConfig","RangeError","AbstractTokenGenerator","tokenGeneratorConfig","checkTokenGeneratorConfig","_manageOauthError","generateUrlFromConfig","uri","AuthorizationCodeFlowTokenGenerator","_AbstractTokenGenerat","generateToken","parameters","_checkGenerateParameters","URLSearchParams","grant_type","client_id","clientId","client_secret","clientSecret","redirect_uri","redirectUri","code","oldAccessToken","refresh_token","memoizePromise","callback","cache","memoized","_len","_key","cacheKey","cacheValue","apply","internalValue","ERROR_CONFIG_EMPTY","ERROR_CONFIG_PATH_SCHEME","ERROR_CONFIG_CLIENT_INFORMATIONS","ClientCredentialsGenerator","baseParameters","scope","append","ERROR_TOKEN_EMPTY","ERROR_TOKEN_USERNAME_PASSWORD","PasswordGenerator","username","password","ProvidedTokenGenerator","refreshTokenFunc","_token","_refreshTokenFunc","set","Promise","resolve","call","autoGenerateToken","isResponse","manageOauthError","_tokenGenerator","_hasATokenBeenGenerated","_asyncStorage","_logger","TokenStorage","tokenGenerator","asyncStorage","accessTokenKey","setAsyncStorage","handleTokenResponse","bind","hasAccessToken","getItem","getAccessTokenObject","tokenObject","removeItem","_addExpiresAtToResponseData","responseData","callTimestamp","updatedResponseData","expires_at","expires_in","round","_storeAccessToken","responseOrBody","accessTokenObject","setItem"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AAHA,IAOMA,SAAS,0BAAAC,MAAA,EAAA;AAGb,EAAA,SAAAD,SAAAA,CAAYE,OAAsB,EAAEC,YAAsB,EAAE;AAAA,IAAA,IAAAC,KAAA;AAAAC,IAAAA,eAAA,OAAAL,SAAA,CAAA;AAC1DI,IAAAA,KAAA,GAAAE,UAAA,CAAA,IAAA,EAAAN,SAAA,EAAA,CAAME,OAAO,IAAI,aAAa,CAAA,CAAA;;AAE9B;AAAAK,IAAAA,eAAA,CAAAH,KAAA,EAAA,cAAA,EAAA,MAAA,CAAA;IACAI,MAAM,CAACC,cAAc,CAAAL,KAAA,EAAOM,UAAU,CAACC,SAAS,CAAC;;AAEjD;IACA,IAAIC,KAAK,CAACC,iBAAiB,EAAE;AAC3BD,MAAAA,KAAK,CAACC,iBAAiB,CAAAT,KAAA,EAAOM,UAAU,CAAC;AAC3C,IAAA;IAEAN,KAAA,CAAKU,IAAI,GAAG,WAAW;IACvBV,KAAA,CAAKD,YAAY,GAAGA,YAAY;AAAC,IAAA,OAAAC,KAAA;AACnC,EAAA;;AAEA;AACF;AACA;EAFEW,SAAA,CAAAf,SAAA,EAAAC,MAAA,CAAA;EAAA,OAAAe,YAAA,CAAAhB,SAAA,EAAA,CAAA;IAAAiB,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAGA,SAAOC,YAAYA,GAAqC;AACtD,MAAA,OAAO,IAAI,CAAChB,YAAY,CAACiB,IAAI,EAAE;AACjC,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA,cAAAC,gBAAA,CAvBqBT,KAAK,CAAA;AAAA,IA0BvBF,UAAU,0BAAAY,OAAA,EAAA;AAGd,EAAA,SAAAZ,UAAAA,CAAYR,OAAsB,EAAEqB,aAAyB,EAAE;AAAA,IAAA,IAAAC,MAAA;AAAAnB,IAAAA,eAAA,OAAAK,UAAA,CAAA;AAC7Dc,IAAAA,MAAA,GAAAlB,UAAA,CAAA,IAAA,EAAAI,UAAA,EAAA,CAAMR,OAAO,IAAI,aAAa,CAAA,CAAA;;AAE9B;AAAAK,IAAAA,eAAA,CAAAiB,MAAA,EAAA,eAAA,EAAA,MAAA,CAAA;IACAhB,MAAM,CAACC,cAAc,CAAAe,MAAA,EAAOd,UAAU,CAACC,SAAS,CAAC;;AAEjD;IACA,IAAIC,KAAK,CAACC,iBAAiB,EAAE;AAC3BD,MAAAA,KAAK,CAACC,iBAAiB,CAAAW,MAAA,EAAOd,UAAU,CAAC;AAC3C,IAAA;IAEAc,MAAA,CAAKV,IAAI,GAAG,YAAY;IACxBU,MAAA,CAAKD,aAAa,GAAGA,aAAa;AAAC,IAAA,OAAAC,MAAA;AACrC,EAAA;EAACT,SAAA,CAAAL,UAAA,EAAAY,OAAA,CAAA;EAAA,OAAAN,YAAA,CAAAN,UAAA,CAAA;AAAA,CAAA,cAAAW,gBAAA,CAhBsBT,KAAK,CAAA;AAAA,IAmBxBa,iBAAiB,0BAAAC,YAAA,EAAA;AAGrB,EAAA,SAAAD,iBAAAA,CAAYvB,OAAsB,EAAEqB,aAAyB,EAAE;AAAA,IAAA,IAAAI,MAAA;AAAAtB,IAAAA,eAAA,OAAAoB,iBAAA,CAAA;IAC7DE,MAAA,GAAArB,UAAA,CAAA,IAAA,EAAAmB,iBAAA,GAAMvB,OAAO,IAAI,qBAAqB,EAAEqB,aAAa,CAAA,CAAA;;AAErD;AAAAhB,IAAAA,eAAA,CAAAoB,MAAA,EAAA,eAAA,EAAA,MAAA,CAAA;IACAnB,MAAM,CAACC,cAAc,CAAAkB,MAAA,EAAOF,iBAAiB,CAACd,SAAS,CAAC;;AAExD;IACA,IAAIC,KAAK,CAACC,iBAAiB,EAAE;AAC3BD,MAAAA,KAAK,CAACC,iBAAiB,CAAAc,MAAA,EAAOF,iBAAiB,CAAC;AAClD,IAAA;IAEAE,MAAA,CAAKb,IAAI,GAAG,mBAAmB;IAC/Ba,MAAA,CAAKJ,aAAa,GAAGA,aAAa;AAAC,IAAA,OAAAI,MAAA;AACrC,EAAA;EAACZ,SAAA,CAAAU,iBAAA,EAAAC,YAAA,CAAA;EAAA,OAAAV,YAAA,CAAAS,iBAAA,CAAA;AAAA,CAAA,CAhB6Bf,UAAU;AAAA,IAmBpCkB,iBAAiB,0BAAAC,YAAA,EAAA;AAGrB,EAAA,SAAAD,iBAAAA,CAAY1B,OAAsB,EAAEqB,aAAyB,EAAE;AAAA,IAAA,IAAAO,MAAA;AAAAzB,IAAAA,eAAA,OAAAuB,iBAAA,CAAA;IAC7DE,MAAA,GAAAxB,UAAA,CAAA,IAAA,EAAAsB,iBAAA,GAAM1B,OAAO,IAAI,qBAAqB,EAAEqB,aAAa,CAAA,CAAA;;AAErD;AAAAhB,IAAAA,eAAA,CAAAuB,MAAA,EAAA,eAAA,EAAA,MAAA,CAAA;IACAtB,MAAM,CAACC,cAAc,CAAAqB,MAAA,EAAOF,iBAAiB,CAACjB,SAAS,CAAC;;AAExD;IACA,IAAIC,KAAK,CAACC,iBAAiB,EAAE;AAC3BD,MAAAA,KAAK,CAACC,iBAAiB,CAAAiB,MAAA,EAAOF,iBAAiB,CAAC;AAClD,IAAA;IAEAE,MAAA,CAAKhB,IAAI,GAAG,mBAAmB;IAC/BgB,MAAA,CAAKP,aAAa,GAAGA,aAAa;AAAC,IAAA,OAAAO,MAAA;AACrC,EAAA;EAACf,SAAA,CAAAa,iBAAA,EAAAC,YAAA,CAAA;EAAA,OAAAb,YAAA,CAAAY,iBAAA,CAAA;AAAA,CAAA,CAhB6BlB,UAAU,EAAA;AAmB1C,IACMqB,eAAe,0BAAAC,WAAA,EAAA;AAGnB,EAAA,SAAAD,eAAAA,CAAY7B,OAAsB,EAAEC,YAAsB,EAAE;AAAA,IAAA,IAAA8B,MAAA;AAAA5B,IAAAA,eAAA,OAAA0B,eAAA,CAAA;IAC1DE,MAAA,GAAA3B,UAAA,CAAA,IAAA,EAAAyB,eAAA,GAAM7B,OAAO,IAAI,aAAa,EAAEC,YAAY,CAAA,CAAA;;AAE5C;AAAAI,IAAAA,eAAA,CAAA0B,MAAA,EAAA,cAAA,EAAA,MAAA,CAAA;IACAzB,MAAM,CAACC,cAAc,CAAAwB,MAAA,EAAOF,eAAe,CAACpB,SAAS,CAAC;;AAEtD;IACA,IAAIC,KAAK,CAACC,iBAAiB,EAAE;AAC3BD,MAAAA,KAAK,CAACC,iBAAiB,CAAAoB,MAAA,EAAOF,eAAe,CAAC;AAChD,IAAA;IAEAE,MAAA,CAAKnB,IAAI,GAAG,iBAAiB;IAC7BmB,MAAA,CAAK9B,YAAY,GAAGA,YAAY;AAAC,IAAA,OAAA8B,MAAA;AACnC,EAAA;EAAClB,SAAA,CAAAgB,eAAA,EAAAC,WAAA,CAAA;EAAA,OAAAhB,YAAA,CAAAe,eAAA,CAAA;AAAA,CAAA,CAhB2B/B,SAAS,EAAA;AAmBvC,IACMkC,iBAAiB,0BAAAC,iBAAA,EAAA;AAGrB,EAAA,SAAAD,iBAAAA,CAAYhC,OAAsB,EAAEC,YAAsB,EAAE;AAAA,IAAA,IAAAiC,MAAA;AAAA/B,IAAAA,eAAA,OAAA6B,iBAAA,CAAA;IAC1DE,MAAA,GAAA9B,UAAA,CAAA,IAAA,EAAA4B,iBAAA,GAAMhC,OAAO,IAAI,cAAc,EAAEC,YAAY,CAAA,CAAA;;AAE7C;AAAAI,IAAAA,eAAA,CAAA6B,MAAA,EAAA,cAAA,EAAA,MAAA,CAAA;IACA5B,MAAM,CAACC,cAAc,CAAA2B,MAAA,EAAOF,iBAAiB,CAACvB,SAAS,CAAC;;AAExD;IACA,IAAIC,KAAK,CAACC,iBAAiB,EAAE;AAC3BD,MAAAA,KAAK,CAACC,iBAAiB,CAAAuB,MAAA,EAAOF,iBAAiB,CAAC;AAClD,IAAA;IAEAE,MAAA,CAAKtB,IAAI,GAAG,mBAAmB;IAC/BsB,MAAA,CAAKjC,YAAY,GAAGA,YAAY;AAAC,IAAA,OAAAiC,MAAA;AACnC,EAAA;EAACrB,SAAA,CAAAmB,iBAAA,EAAAC,iBAAA,CAAA;EAAA,OAAAnB,YAAA,CAAAkB,iBAAA,CAAA;AAAA,CAAA,CAhB6BH,eAAe,EAAA;AAmB/C,IACMM,cAAc,0BAAAC,iBAAA,EAAA;AAGlB,EAAA,SAAAD,cAAAA,CAAYnC,OAAsB,EAAEC,YAAsB,EAAE;AAAA,IAAA,IAAAoC,MAAA;AAAAlC,IAAAA,eAAA,OAAAgC,cAAA,CAAA;IAC1DE,MAAA,GAAAjC,UAAA,CAAA,IAAA,EAAA+B,cAAA,GAAMnC,OAAO,IAAI,WAAW,EAAEC,YAAY,CAAA,CAAA;;AAE1C;AAAAI,IAAAA,eAAA,CAAAgC,MAAA,EAAA,cAAA,EAAA,MAAA,CAAA;IACA/B,MAAM,CAACC,cAAc,CAAA8B,MAAA,EAAOF,cAAc,CAAC1B,SAAS,CAAC;;AAErD;IACA,IAAIC,KAAK,CAACC,iBAAiB,EAAE;AAC3BD,MAAAA,KAAK,CAACC,iBAAiB,CAAA0B,MAAA,EAAOF,cAAc,CAAC;AAC/C,IAAA;IAEAE,MAAA,CAAKzB,IAAI,GAAG,gBAAgB;IAC5ByB,MAAA,CAAKpC,YAAY,GAAGA,YAAY;AAAC,IAAA,OAAAoC,MAAA;AACnC,EAAA;EAACxB,SAAA,CAAAsB,cAAA,EAAAC,iBAAA,CAAA;EAAA,OAAAtB,YAAA,CAAAqB,cAAA,CAAA;AAAA,CAAA,CAhB0BN,eAAe,EAAA;AAmB5C,IACMS,qBAAqB,0BAAAC,iBAAA,EAAA;AAGzB,EAAA,SAAAD,qBAAAA,CAAYtC,OAAsB,EAAEC,YAAsB,EAAE;AAAA,IAAA,IAAAuC,MAAA;AAAArC,IAAAA,eAAA,OAAAmC,qBAAA,CAAA;IAC1DE,MAAA,GAAApC,UAAA,CAAA,IAAA,EAAAkC,qBAAA,GAAMtC,OAAO,IAAI,uBAAuB,EAAEC,YAAY,CAAA,CAAA;;AAEtD;AAAAI,IAAAA,eAAA,CAAAmC,MAAA,EAAA,cAAA,EAAA,MAAA,CAAA;IACAlC,MAAM,CAACC,cAAc,CAAAiC,MAAA,EAAOF,qBAAqB,CAAC7B,SAAS,CAAC;;AAE5D;IACA,IAAIC,KAAK,CAACC,iBAAiB,EAAE;AAC3BD,MAAAA,KAAK,CAACC,iBAAiB,CAAA6B,MAAA,EAAOF,qBAAqB,CAAC;AACtD,IAAA;IAEAE,MAAA,CAAK5B,IAAI,GAAG,uBAAuB;IACnC4B,MAAA,CAAKvC,YAAY,GAAGA,YAAY;AAAC,IAAA,OAAAuC,MAAA;AACnC,EAAA;EAAC3B,SAAA,CAAAyB,qBAAA,EAAAC,iBAAA,CAAA;EAAA,OAAAzB,YAAA,CAAAwB,qBAAA,CAAA;AAAA,CAAA,CAhBiCT,eAAe,EAAA;AAmBnD,IACMY,aAAa,0BAAAC,iBAAA,EAAA;AAGjB,EAAA,SAAAD,aAAAA,CAAYzC,OAAsB,EAAEC,YAAsB,EAAE;AAAA,IAAA,IAAA0C,MAAA;AAAAxC,IAAAA,eAAA,OAAAsC,aAAA,CAAA;IAC1DE,MAAA,GAAAvC,UAAA,CAAA,IAAA,EAAAqC,aAAA,GAAMzC,OAAO,IAAI,mBAAmB,EAAEC,YAAY,CAAA,CAAA;;AAElD;AAAAI,IAAAA,eAAA,CAAAsC,MAAA,EAAA,cAAA,EAAA,MAAA,CAAA;IACArC,MAAM,CAACC,cAAc,CAAAoC,MAAA,EAAOF,aAAa,CAAChC,SAAS,CAAC;;AAEpD;IACA,IAAIC,KAAK,CAACC,iBAAiB,EAAE;AAC3BD,MAAAA,KAAK,CAACC,iBAAiB,CAAAgC,MAAA,EAAOF,aAAa,CAAC;AAC9C,IAAA;IAEAE,MAAA,CAAK/B,IAAI,GAAG,eAAe;IAC3B+B,MAAA,CAAK1C,YAAY,GAAGA,YAAY;AAAC,IAAA,OAAA0C,MAAA;AACnC,EAAA;EAAC9B,SAAA,CAAA4B,aAAA,EAAAC,iBAAA,CAAA;EAAA,OAAA5B,YAAA,CAAA2B,aAAA,CAAA;AAAA,CAAA,CAhByBZ,eAAe,EAAA;AAmB3C,IACMe,mBAAmB,0BAAAC,WAAA,EAAA;AAGvB,EAAA,SAAAD,mBAAAA,CAAY5C,OAAsB,EAAEC,YAAsB,EAAE;AAAA,IAAA,IAAA6C,MAAA;AAAA3C,IAAAA,eAAA,OAAAyC,mBAAA,CAAA;IAC1DE,MAAA,GAAA1C,UAAA,CAAA,IAAA,EAAAwC,mBAAA,GAAM5C,OAAO,IAAI,uBAAuB,EAAEC,YAAY,CAAA,CAAA;;AAEtD;AAAAI,IAAAA,eAAA,CAAAyC,MAAA,EAAA,cAAA,EAAA,MAAA,CAAA;IACAxC,MAAM,CAACC,cAAc,CAAAuC,MAAA,EAAOF,mBAAmB,CAACnC,SAAS,CAAC;;AAE1D;IACA,IAAIC,KAAK,CAACC,iBAAiB,EAAE;AAC3BD,MAAAA,KAAK,CAACC,iBAAiB,CAAAmC,MAAA,EAAOF,mBAAmB,CAAC;AACpD,IAAA;IAEAE,MAAA,CAAKlC,IAAI,GAAG,qBAAqB;IACjCkC,MAAA,CAAK7C,YAAY,GAAGA,YAAY;AAAC,IAAA,OAAA6C,MAAA;AACnC,EAAA;EAACjC,SAAA,CAAA+B,mBAAA,EAAAC,WAAA,CAAA;EAAA,OAAA/B,YAAA,CAAA8B,mBAAA,CAAA;AAAA,CAAA,CAhB+B9C,SAAS;AAmB3C;AACA;AACA;AACA,SAASiD,wBAAwBA,CAACC,gBAA0B,EAAa;AACvE,EAAA,IAAMC,QAAQ,GAAGD,gBAAgB,CAACE,KAAK,EAAE;AACzC,EAAA,QAAQ,IAAI;AACV,IAAA,KAAKD,QAAQ,CAACE,MAAM,KAAK,GAAG;AAC1B,MAAA,OAAO,IAAInB,iBAAiB,CAAC,IAAI,EAAEiB,QAAQ,CAAC;AAE9C,IAAA,KAAKA,QAAQ,CAACE,MAAM,KAAK,GAAG;AAC1B,MAAA,OAAO,IAAIhB,cAAc,CAAC,IAAI,EAAEc,QAAQ,CAAC;AAE3C,IAAA,KAAKA,QAAQ,CAACE,MAAM,KAAK,GAAG;AAC1B,MAAA,OAAO,IAAIb,qBAAqB,CAAC,IAAI,EAAEW,QAAQ,CAAC;AAElD,IAAA,KAAKA,QAAQ,CAACE,MAAM,KAAK,GAAG;AAC1B,MAAA,OAAO,IAAIV,aAAa,CAAC,IAAI,EAAEQ,QAAQ,CAAC;IAE1C,KAAKA,QAAQ,CAACE,MAAM,IAAI,GAAG,IAAIF,QAAQ,CAACE,MAAM,GAAG,GAAG;AAClD,MAAA,OAAO,IAAItB,eAAe,CAAC,IAAI,EAAEoB,QAAQ,CAAC;IAE5C,KAAKA,QAAQ,CAACE,MAAM,IAAI,GAAG,IAAIF,QAAQ,CAACE,MAAM,GAAG,GAAG;AAClD,MAAA,OAAO,IAAIP,mBAAmB,CAAC,IAAI,EAAEK,QAAQ,CAAC;AAEhD,IAAA;AACE,MAAA,OAAO,IAAInD,SAAS,CAAC,IAAI,EAAEmD,QAAQ,CAAC;AACxC;AACF;AAEA,SAASG,YAAYA,CAACC,IAAsB,EAAqB;EAC/D,OAAO,QAAQA,IAAI,KAAA,IAAA,IAAJA,IAAI,uBAAJA,IAAI,CAAgBC,KAAK,CAAA,KAAK,QAAQ;AACvD;;AC/OA,IAAMC,cAAc,GAAG;AACrBC,EAAAA,aAAa,EAAE;AACjB,CAAC;AAAC,IAAAC,OAAA,oBAAAC,OAAA,EAAA;AAAA,IAAAC,kBAAA,oBAAAD,OAAA,EAAA;AAAA,IAEIE,OAAO,gBAAA,YAAA;AAOX,EAAA,SAAAA,UAAwC;AAAA,IAAA,IAA5BC,QAAQ,GAAAC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,IAAA,IAAEG,MAAM,GAAAH,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA3D,IAAAA,eAAA,OAAAyD,OAAA,CAAA;IAAAvD,eAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAJtC6D,IAAAA,0BAAA,OAAAT,OAAO,EAAA,MAAA,CAAA;AAEPS,IAAAA,0BAAA,OAAAP,kBAAkB,EAAA,MAAA,CAAA;IAGhB,IAAI,CAACE,QAAQ,GAAGA,QAAQ;AAExBM,IAAAA,sBAAA,CAAKR,kBAAkB,EAAvB,IAAI,EAAsB,EAAJ,CAAC;AAEvB,IAAA,IAAI,CAACS,SAAS,CAACH,MAAM,CAAC;AACxB,EAAA;EAAC,OAAAnD,YAAA,CAAA8C,OAAA,EAAA,CAAA;IAAA7C,GAAA,EAAA,WAAA;AAAAC,IAAAA,KAAA,EAED,SAAAqD,SAASA,GAA4B;AACnC,MAAA,OAAOC,sBAAA,CAAKb,OAAO,EAAZ,IAAW,CAAC;AACrB,IAAA;AAAC,GAAA,EAAA;IAAA1C,GAAA,EAAA,WAAA;AAAAC,IAAAA,KAAA,EAED,SAAAoD,SAASA,CAACH,MAA+B,EAAQ;AAC/CE,MAAAA,sBAAA,CAAKV,OAAO,EAAZ,IAAI,EAAAc,cAAA,CAAAA,cAAA,CAAA,EAAA,EAAgBhB,cAAc,CAAA,EAAKU,MAAM,CAAlC,CAAC;AACd,IAAA;AAAC,GAAA,EAAA;IAAAlD,GAAA,EAAA,YAAA;AAAAC,IAAAA,KAAA,EAED,SAAAwD,UAAUA,GAAgD;AAAA,MAAA,IAA/CC,iBAAkC,GAAAX,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAChDK,MAAAA,sBAAA,CAAKR,kBAAkB,EAAvB,IAAI,EAAsBc,iBAAJ,CAAC;AACzB,IAAA;AAAC,GAAA,EAAA;IAAA1D,GAAA,EAAA,gBAAA;AAAAC,IAAAA,KAAA,EAED,SAAA0D,cAAcA,GAAa;MACzB,OAAOJ,sBAAA,CAAKX,kBAAkB,EAAvB,IAAsB,CAAC,CAACgB,GAAG,CAAC,UAACC,aAAa,EAAA;QAAA,OAAKA,aAAa,CAAC7D,GAAG;MAAA,CAAA,CAAC;AAC1E,IAAA;AAAC,GAAA,EAAA;IAAAA,GAAA,EAAA,uBAAA;AAAAC,IAAAA,KAAA,EAED,SAAA6D,qBAAqBA,CAAC9D,GAAW,EAAwB;AACvD,MAAA,IAAM+D,UAAU,GAAGR,sBAAA,CAAKX,kBAAkB,EAAvB,IAAsB,CAAC,CAACoB,MAAM,CAC/C,UAACH,aAAa,EAAA;AAAA,QAAA,OAAKA,aAAa,CAAC7D,GAAG,KAAKA,GAAG;AAAA,MAAA,CAC9C,CAAC;MAED,OAAO+D,UAAU,CAACf,MAAM,GAAG,CAAC,GAAGe,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI;AACrD,IAAA;AAAC,GAAA,EAAA;IAAA/D,GAAA,EAAA,gBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAgE,cAAcA,GAAY;AAAA,MAAA,IAAA9E,KAAA,GAAA,IAAA;AACxB,MAAA,OAAO,CAACoE,sBAAA,CAAKX,kBAAkB,EAAvB,IAAsB,CAAC,CAACsB,IAAI,CAAC,UAACL,aAAa,EAAK;AACtD;AACA,QAAA,IAAMM,SAAS,GAAG5E,MAAM,CAAC6E,MAAM,CAACP,aAAa,CAACQ,gBAAgB,EAAE,CAAC,CAACT,GAAG,CACnE,UAACU,SAAS,EAAK;UACb,IAAMC,QAAQ,GAAGV,aAAa,CAACW,WAAW,CAACF,SAAS,CAACG,aAAa,CAAC;UAEnE,IAAI,CAACF,QAAQ,EAAE;AACb;AACA,YAAA,OAAO,KAAK;AACd,UAAA;UAEA,IAAMG,gBAAgB,GAAGvF,KAAI,CAAC2E,qBAAqB,CACjDS,QAAQ,CAACI,iBACX,CAAC;;AAED;AACA,UAAA,IACEJ,QAAQ,CAACK,eAAe,EAAE,IAC1BN,SAAS,CAACO,aAAa,CAACC,QAAQ,CAAC,MAAM,CAAC,EACxC;YACA,OAAA,IAAA,CAAAC,MAAA,CAAWlB,aAAa,CAAC7D,GAAG,OAAA+E,MAAA,CAAIT,SAAS,CAACG,aAAa,EAAA,mFAAA,CAAA;AACzD,UAAA;AAEA,UAAA,IAAIF,QAAQ,CAACS,gBAAgB,EAAE,EAAE;AAC/B,YAAA,IAAM/F,OAAO,GAAA,IAAA,CAAA8F,MAAA,CAAOlB,aAAa,CAAC7D,GAAG,EAAA,GAAA,CAAA,CAAA+E,MAAA,CAAIT,SAAS,CAACG,aAAa,EAAA,mBAAA,CAAA,CAAAM,MAAA,CAAoBR,QAAQ,CAACU,IAAI,EAAA,yEAAA,CAAuE;YAExK,IAAMC,YAAY,GAAGZ,SAAS,CAACO,aAAa,CAACC,QAAQ,CAAC,MAAM,CAAC;YAE7D,IAAI;AACF;AACA,cAAA,IAAMK,SAAS,GAAGC,OAAO,CAAC,WAAW,CAEpC;AACD,cAAA,IACE,CAACF,YAAY,IACb,CAACC,SAAS,CAACE,QAAQ,CAACf,SAAS,CAACO,aAAa,CAAC,EAC5C;AACA,gBAAA,OAAO5F,OAAO;AAChB,cAAA;YACF,CAAC,CAAC,OAAAqG,OAAA,EAAM;cACN,IAAI,CAACJ,YAAY,EAAE;gBACjB,OAAA,EAAA,CAAAH,MAAA,CAAU9F,OAAO,EAAA,iGAAA,CAAA;AACnB,cAAA;AACF,YAAA;AACF,UAAA;;AAEA;UACA,IAAI,CAACyF,gBAAgB,EAAE;AACrB,YAAA,OAAA,IAAA,CAAAK,MAAA,CAAWlB,aAAa,CAAC7D,GAAG,OAAA+E,MAAA,CAAIT,SAAS,CAACG,aAAa,EAAA,gDAAA,CAAA,CAAAM,MAAA,CAA+CR,QAAQ,CAACI,iBAAiB,EAAA,oDAAA,CAAA;AAClI,UAAA;AAEA,UAAA,OAAO,KAAK;AACd,QAAA,CACF,CAAC;AAED,QAAA,IAAI,CAACd,aAAa,CAAC0B,sBAAsB,EAAE,EAAE;UAC3CpB,SAAS,CAACqB,IAAI,CAAA,IAAA,CAAAT,MAAA,CACRlB,aAAa,CAAC7D,GAAG,EAAA,oCAAA,CACvB,CAAC;AACH,QAAA;QAEA,IAAMyF,OAAO,GAAGtB,SAAS,CAACH,MAAM,CAAC,UAACzB,KAAK,EAAK;AAC1C,UAAA,IAAIA,KAAK,EAAE;AACTmD,YAAAA,OAAO,CAACC,IAAI,CAACpD,KAAK,CAAC;AACrB,UAAA;AAEA,UAAA,OAAOA,KAAK;AACd,QAAA,CAAC,CAAC;AAEF,QAAA,OAAOkD,OAAO,CAACzC,MAAM,GAAG,CAAC;AAC3B,MAAA,CAAC,CAAC;AACJ,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA;;ACrHG4C,IAAAA,SAAS,gBAAA7F,YAAA;AASb;AACF;AACA;AACA;AACA;AACA;AACE,SAAA6F,SAAAA,CACEnB,aAAqB,EAIrB;AAAA,EAAA,IAHAI,aAA4B,GAAA9B,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI;AAAA,EAAA,IACnCkC,IAAI,GAAAlC,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,QAAQ;AAAA,EAAA,IACf8C,YAAY,GAAA9C,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK;AAAA3D,EAAAA,eAAA,OAAAwG,SAAA,CAAA;EAAAtG,eAAA,CAAA,IAAA,EAAA,eAAA,EAAA,MAAA,CAAA;EAAAA,eAAA,CAAA,IAAA,EAAA,eAAA,EAAA,MAAA,CAAA;EAAAA,eAAA,CAAA,IAAA,EAAA,MAAA,EAAA,MAAA,CAAA;EAAAA,eAAA,CAAA,IAAA,EAAA,cAAA,EAAA,MAAA,CAAA;EAEpB,IAAI,CAACmF,aAAa,EAAE;AAClB,IAAA,MAAM,IAAIqB,SAAS,CAAC,mCAAmC,CAAC;AAC1D,EAAA;EAEA,IAAI,CAACrB,aAAa,GAAGA,aAAa;AAClC,EAAA,IAAI,CAACI,aAAa,GAAGA,aAAa,IAAI,IAAI,CAACJ,aAAa;EACxD,IAAI,CAACQ,IAAI,GAAGA,IAAI;EAChB,IAAI,CAACY,YAAY,GAAGA,YAAY;AAClC,CAAC;;ACtBI,SAASE,kBAAkBA,CAChCC,GAA+B,EAC/BC,QAAuB,EAEJ;AAAA,EAAA,IADnBC,mBAAmB,GAAAnD,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI;AAE1B;EACA,OAAO,IAAIkD,QAAQ,CAACE,eAAe,CAACH,GAAG,EAAEC,QAAQ,EAAEC,mBAAmB,CAAC;AACzE;;ACdO,SAASE,mBAAmBA,CACjCC,OAAgC,EACP;EACzB,IAAI,CAACA,OAAO,EAAE;AACZ,IAAA;AACF,EAAA;EAEA,IAAIA,OAAO,YAAYC,OAAO,EAAE;IAC9BD,OAAO,CAAA,QAAA,CAAO,CAAC,eAAe,CAAC;AAC/B,IAAA,OAAOA,OAAO;AAChB,EAAA;AAEA,EAAA,IAAME,mBAAmB,GAAG,SAAtBA,mBAAmBA,CACvBC,OAAgC,EAAA;AAAA,IAAA,OAEhCA,OAAO,CAACxC,MAAM,CAAC,UAACyC,MAAM,EAAA;AAAA,MAAA,OAAKA,MAAM,CAAC,CAAC,CAAC,KAAK,eAAe;IAAA,CAAA,CAAC;AAAA,EAAA,CAAA;AAE3D,EAAA,IAAIC,KAAK,CAACC,OAAO,CAACN,OAAO,CAAC,EAAE;IAC1B,OAAOE,mBAAmB,CAACF,OAAO,CAAC;AACrC,EAAA;AAEA,EAAA,OAAO9G,MAAM,CAACqH,WAAW,CAACL,mBAAmB,CAAChH,MAAM,CAACiH,OAAO,CAACH,OAAO,CAAC,CAAC,CAAC;AACzE;;AAEA;AACA;AACA;AACA;AACO,SAASQ,sBAAsBA,CAACR,OAAoB,EAAe;EACxE,IAAIA,OAAO,YAAYC,OAAO,EAAE;AAC9B,IAAA,OAAOD,OAAO;AAChB,EAAA;AAEA,EAAA,IAAMS,aAAa,GAAG,SAAhBA,aAAaA,CAAIN,OAAgC,EAAA;AAAA,IAAA,OACrDA,OAAO,CAACxC,MAAM,CAAC,UAACyC,MAAM,EAAA;AAAA,MAAA,OAAKA,MAAM,CAAC,CAAC,CAAC,KAAKxD,SAAS;IAAA,CAAA,CAAC;AAAA,EAAA,CAAA;AAErD,EAAA,IAAIyD,KAAK,CAACC,OAAO,CAACN,OAAO,CAAC,EAAE;IAC1B,OAAOS,aAAa,CAACT,OAAO,CAAC;AAC/B,EAAA;AAEA,EAAA,OAAO9G,MAAM,CAACqH,WAAW,CAACE,aAAa,CAACvH,MAAM,CAACiH,OAAO,CAACH,OAAO,CAAC,CAAC,CAAC;AACnE;AAEO,SAASU,eAAeA,CAACV,OAAoB,EAA0B;EAC5E,IAAIA,OAAO,YAAYC,OAAO,EAAE;IAC9B,OAAO/G,MAAM,CAACqH,WAAW,CAACP,OAAO,CAACG,OAAO,EAAE,CAAC;AAC9C,EAAA;AAEA,EAAA,IAAIE,KAAK,CAACC,OAAO,CAACN,OAAO,CAAC,EAAE;AAC1B,IAAA,OAAO9G,MAAM,CAACqH,WAAW,CAACP,OAAO,CAAC;AACpC,EAAA;AAEA,EAAA,OAAOA,OAAO;AAChB;;;ACxCA,IAAMW,oBAAoB,GAAG,GAAG,CAAC;AAAC,IAAAC,aAAA,oBAAAtE,OAAA,EAAA;AAAA,IAAAuE,oBAAA,oBAAAvE,OAAA,EAAA;AAAA,IAE5BwE,cAAc,gBAAA,YAAA;AAWlB,EAAA,SAAAA,cAAAA,CACEnB,GAA+B,EAC/BC,QAAuB,EAEvB;AAAA,IAAA,IADAC,mBAAmB,GAAAnD,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI;AAAA3D,IAAAA,eAAA,OAAA+H,cAAA,CAAA;IAAA7H,eAAA,CAAA,IAAA,EAAA,KAAA,EAAA,MAAA,CAAA;AAX5B6D,IAAAA,0BAAA,OAAA8D,aAAa,EAAA,MAAA,CAAA;IAA+B3H,eAAA,CAAA,IAAA,EAAA,YAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,CAAA;AAM5C6D,IAAAA,0BAAA,OAAA+D,oBAAoB,EAAA,MAAA,CAAA;IAOlB,IAAI,CAAClB,GAAG,GAAGA,GAAG;IACd5C,sBAAA,CAAK6D,aAAa,EAAlB,IAAI,EAAiBjB,GAAG,CAACoB,YAAR,CAAC;AAClB,IAAA,IAAI,CAACC,UAAU,GAAGrB,GAAG,CAACqB,UAAU;IAChC,IAAI,CAACpB,QAAQ,GAAGA,QAAQ;AACxB7C,IAAAA,sBAAA,CAAK8D,oBAAoB,EAAzB,IAAI,EAAwBhB,mBAAJ,CAAC;AAC3B,EAAA;EAAC,OAAAnG,YAAA,CAAAoH,cAAA,EAAA,CAAA;IAAAnH,GAAA,EAAA,gBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAqH,cAAcA,CAACC,OAAgB,EAAqB;MAClD,OAAOxB,kBAAkB,CAAI,IAAI,CAACC,GAAG,EAAE,IAAI,CAACC,QAAQ,EAAEsB,OAAO,CAAC;AAChE,IAAA;AAAC,GAAA,EAAA;IAAAvH,GAAA,EAAA,sBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAuH,oBAAoBA,GAA4B;AAC9C,MAAA,OAAO,EAAE;AACX,IAAA;;AAEA;AAAA,GAAA,EAAA;IAAAxH,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EACA,SAAAwH,WAAWA,CAACC,cAAuC,EAAU;AAC3D,MAAA,OAAA,GAAA,CAAA3C,MAAA,CAAW,IAAI,CAACkB,QAAQ,CAAC0B,QAAQ,CAAA;AACnC,IAAA;AAAC,GAAA,EAAA;IAAA3H,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAED,SAAA2H,YAAYA,CAACC,MAAmB,EAAU;AACxC,MAAA,IAAIC,OAAO,GAAG,IAAI,CAACC,oBAAoB,CAACF,MAAM,CAAC;MAE/C,IAAIC,OAAO,KAAK,IAAI,EAAE;AACpB,QAAA,MAAM,IAAInI,KAAK,CAAC,mDAAmD,CAAC;AACtE,MAAA;AAEA,MAAA,IAAI,OAAOmI,OAAO,KAAK,QAAQ,EAAE;AAC/B,QAAA,IAAIE,MAAM,CAACC,QAAQ,CAACH,OAAO,CAAC,EAAE;AAC5BA,UAAAA,OAAO,GAAGA,OAAO,CAACI,QAAQ,EAAE;AAC9B,QAAA,CAAC,MAAM;AACL,UAAA,MAAM,IAAIvI,KAAK,CAAC,oCAAoC,CAAC;AACvD,QAAA;AACF,MAAA;MAEA,IAAMwI,QAAQ,GAAG,IAAI,CAACV,WAAW,CAAC,EAAE,CAAC;MACrC,IAAIK,OAAO,CAACM,OAAO,CAACD,QAAQ,CAAC,GAAG,EAAE,EAAE;AAClC,QAAA,OAAOL,OAAO;AAChB,MAAA;AACA,MAAA,OAAA,EAAA,CAAA/C,MAAA,CAAUoD,QAAQ,EAAA,GAAA,CAAA,CAAApD,MAAA,CAAI+C,OAAO,CAAA;AAC/B,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AAPE,GAAA,EAAA;IAAA9H,GAAA,EAAA,MAAA;AAAAC,IAAAA,KAAA,EAQA,SAAAoI,IAAIA,CACFC,EAAmB,EAIG;AAAA,MAAA,IAHtBC,UAAmC,GAAAxF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IACxC2E,cAAuC,GAAA3E,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IAC5CyF,aAAsC,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;MAE3C,IAAM0F,GAAG,GAAG,IAAI,CAACC,sBAAsB,CAACH,UAAU,EAAEb,cAAc,EAAEY,EAAE,CAAC;AAEvE,MAAA,OAAO,IAAI,CAACK,mBAAmB,CAC7B,IAAI,CAACC,eAAe,CAACH,GAAG,EAAED,aAAa,CAAC,EACxC,MACF,CAAC;AACH,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AANE,GAAA,EAAA;IAAAxI,GAAA,EAAA,QAAA;AAAAC,IAAAA,KAAA,EAOA,SAAA4I,MAAMA,CACJN,UAAmC,EAGf;AAAA,MAAA,IAFpBb,cAAuC,GAAA3E,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IAC5CyF,aAAsC,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;MAE3C,IAAM0F,GAAG,GAAG,IAAI,CAACC,sBAAsB,CAACH,UAAU,EAAEb,cAAc,CAAC;AAEnE,MAAA,OAAO,IAAI,CAACiB,mBAAmB,CAC7B,IAAI,CAACC,eAAe,CAACH,GAAG,EAAED,aAAa,CAAC,EACxC,MACF,CAAC;AACH,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AANE,GAAA,EAAA;IAAAxI,GAAA,EAAA,SAAA;AAAAC,IAAAA,KAAA,EAOA,SAAA6I,OAAOA,GAIe;AAAA,MAAA,IAHpBP,UAAmC,GAAAxF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IACxC2E,cAAuC,GAAA3E,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IAC5CyF,aAAsC,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;MAE3C,OAAO,IAAI,CAAC8F,MAAM,CAACN,UAAU,EAAEb,cAAc,EAAEc,aAAa,CAAC;AAC/D,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AAPE,GAAA,EAAA;IAAAxI,GAAA,EAAA,QAAA;AAAAC,IAAAA,KAAA,EAQA,SAAA8I,MAAMA,CACJlB,MAAmB,EAIG;AAAA,MAAA,IAHtBU,UAAmC,GAAAxF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IACxC2E,cAAuC,GAAA3E,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IAC5CyF,aAAsC,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;MAE3C,IAAM0F,GAAG,GAAG,IAAIO,GAAG,CAAC,IAAI,CAACvB,WAAW,CAACC,cAAc,CAAC,CAAC;AACrDe,MAAAA,GAAG,CAACQ,SAAS,CAACV,UAAU,CAAC;MAEzB,IAAMW,kBAAkB,GAAG,IAAI,CAACjD,QAAQ,CAACkD,yBAAyB,EAAE;AACpE,MAAA,IAAMC,kBAAkB,GAAG,IAAI,CAAC/B,UAAU,CAACgC,aAAa,CACtDxB,MAAM,EACN,IAAI,CAAC5B,QACP,CAAC;AAED,MAAA,IAAMqD,IAAI,GAAG,IAAI,CAACtD,GAAG,CAACuD,UAAU,CAACC,YAAY,CAC3CJ,kBAAkB,EAClBF,kBAAkB,EAClB,IAAI,CAACjD,QACP,CAAC;MAED,OAAO,IAAI,CAAC0C,mBAAmB,CAC7B,IAAI,CAACC,eAAe,CAACH,GAAG,EAAAjF,cAAA,CAAA;AACtBiG,QAAAA,MAAM,EAAE,MAAM;QACdnH,IAAI,EAAE,IAAI,CAAC+E,UAAU,CAACqC,UAAU,CAACJ,IAAI,EAAE,IAAI,CAACrD,QAAQ;AAAC,OAAA,EAClDuC,aAAa,CACjB,CAAC,EACF,MACF,CAAC;AACH,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AANE,GAAA,EAAA;IAAAxI,GAAA,EAAA,QAAA;AAAAC,IAAAA,KAAA,EAOA,SAAA0J,MAAMA,CACJ9B,MAAmB,EAGG;AAAA,MAAA,IAFtBU,UAAmC,GAAAxF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IACxCyF,aAAsC,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;MAE3C,OAAO,IAAI,CAAC6G,OAAO,CAAC,KAAK,EAAE/B,MAAM,EAAEU,UAAU,EAAEC,aAAa,CAAC;AAC/D,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AANE,GAAA,EAAA;IAAAxI,GAAA,EAAA,OAAA;AAAAC,IAAAA,KAAA,EAOA,SAAA4J,KAAKA,CACHhC,MAAmB,EAGG;AAAA,MAAA,IAFtBU,UAAmC,GAAAxF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IACxCyF,aAAsC,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;MAE3C,OAAO,IAAI,CAAC6G,OAAO,CAAC,OAAO,EAAE/B,MAAM,EAAEU,UAAU,EAAEC,aAAa,CAAC;AACjE,IAAA;AAAC,GAAA,EAAA;IAAAxI,GAAA,EAAA,SAAA;AAAAC,IAAAA,KAAA,EAED,SAAQ2J,OAAOA,CACbH,MAAuB,EACvB5B,MAAmB,EAGG;AAAA,MAAA,IAFtBU,UAAmC,GAAAxF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IACxCyF,aAAsC,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;MAE3C,IAAM0F,GAAG,GAAG,IAAIO,GAAG,CAAC,IAAI,CAACpB,YAAY,CAACC,MAAM,CAAC,CAAC;AAC9CY,MAAAA,GAAG,CAACQ,SAAS,CAACV,UAAU,CAAC;AAEzB,MAAA,IAAIa,kBAAkB,GAAG,IAAI,CAAC/B,UAAU,CAACgC,aAAa,CACpDxB,MAAM,EACN,IAAI,CAAC5B,QACP,CAAC;AAED,MAAA,IAAM6D,UAAU,GAAG,IAAI,CAAC/B,oBAAoB,CAACqB,kBAAkB,CAAC;AAChE,MAAA,IAAIW,QAAQ;MACZ,IAAID,UAAU,KAAK,IAAI,EAAE;QACvBC,QAAQ,GAAG,IAAI,CAAC/D,GAAG,CAACuD,UAAU,CAACS,cAAc,CAACF,UAAU,CAAC;AAC3D,MAAA;AAEA,MAAA,IAAIC,QAAQ,EAAE;AACZX,QAAAA,kBAAkB,GAAG,IAAI,CAACpD,GAAG,CAACuD,UAAU,CAACC,YAAY,CACnDJ,kBAAkB,EAClBW,QAAQ,EACR,IAAI,CAAC9D,QACP,CAAC;AACH,MAAA;MAEA,OAAO,IAAI,CAAC0C,mBAAmB,CAC7B,IAAI,CAACC,eAAe,CAACH,GAAG,EAAAjF,cAAA,CAAA;AACtBiG,QAAAA,MAAM,EAANA,MAAM;QACNnH,IAAI,EAAE,IAAI,CAAC+E,UAAU,CAACqC,UAAU,CAACN,kBAAkB,EAAE,IAAI,CAACnD,QAAQ;AAAC,OAAA,EAChEuC,aAAa,CACjB,CAAC,EACF,MACF,CAAC;AACH,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AALE,GAAA,EAAA;IAAAxI,GAAA,EAAA,QAAA;AAAAC,IAAAA,KAAA,EAMA,SAAAgK,OAAMA,CAACpC,MAAmB,EAAyC;AAAA,MAAA,IAAA1I,KAAA,GAAA,IAAA;AAAA,MAAA,IAAvCqJ,aAAa,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAC5C,MAAA,IAAM0F,GAAG,GAAG,IAAI,CAACb,YAAY,CAACC,MAAM,CAAC;AACrC,MAAA,IAAMiC,UAAU,GAAG,IAAI,CAAC/B,oBAAoB,CAACF,MAAM,CAAC;AAEpD,MAAA,OAAO,IAAI,CAACe,eAAe,CAACH,GAAG,EAAAjF,cAAA,CAAA;AAC7BiG,QAAAA,MAAM,EAAE;OAAQ,EACbjB,aAAa,CACjB,CAAC,CAAC0B,IAAI,CAAC,UAAChI,QAAQ,EAAK;QACpB,IAAI4H,UAAU,KAAK,IAAI,EAAE;UACvB3K,KAAI,CAAC6G,GAAG,CAACuD,UAAU,CAACY,KAAK,CAACL,UAAU,CAAC;AACvC,QAAA;AAEA,QAAA,OAAO5H,QAAQ;AACjB,MAAA,CAAC,CAAC;AACJ,IAAA;AAAC,GAAA,EAAA;IAAAlC,GAAA,EAAA,qBAAA;AAAAC,IAAAA,KAAA,EAYD,SAAA0I,mBAAmBA,CACjByB,cAAiC,EACjCC,UAAe,EACmB;AAAA,MAAA,IAAA9J,MAAA,GAAA,IAAA;AAClC,MAAA,OAAO6J,cAAc,CAClBF,IAAI,CAAC,UAAChI,QAAQ,EAAA;QAAA,OAAKA,QAAQ,CAACoI,IAAI,EAAE,CAACJ,IAAI,CAAC,UAACI,IAAI,EAAA;UAAA,OAAM;AAAEpI,YAAAA,QAAQ,EAARA,QAAQ;AAAEoI,YAAAA,IAAI,EAAJA;WAAM;AAAA,QAAA,CAAC,CAAC;AAAA,MAAA,CAAA,CAAC,CACxEJ,IAAI,CAAC,UAAAK,IAAA,EAAwB;AAAA,QAAA,IAArBrI,QAAQ,GAAAqI,IAAA,CAARrI,QAAQ;UAAEoI,IAAI,GAAAC,IAAA,CAAJD,IAAI;QACrB,IAAID,UAAU,KAAK,MAAM,EAAE;AACzB;AACA,UAAA,IAAMG,QAAQ,GAAGjK,MAAI,CAAC8G,UAAU,CAACoD,eAAe,CAC9CH,IAAI,EACJ/J,MAAI,CAAC0F,QAAQ,EACb/D,QACF,CAAc;AAEd,UAAA,IAAIqB,sBAAA,CAAK2D,oBAAoB,EAAzB3G,MAAwB,CAAC,EAAE;AAAA,YAAA,IAAAmK,SAAA,GAAAC,0BAAA,CACHH,QAAQ,CAAA;cAAAI,KAAA;AAAA,YAAA,IAAA;cAAlC,KAAAF,SAAA,CAAAG,CAAA,EAAA,EAAA,CAAA,CAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,EAAA,EAAAC,IAAA,GAAoC;AAAA,gBAAA,IAAzBC,YAAW,GAAAJ,KAAA,CAAA3K,KAAA;AACpB,gBAAA,IAAM6J,WAAU,GAAGvJ,MAAI,CAACwH,oBAAoB,CAACiD,YAAW,CAAC;AACzD,gBAAA,IAAMC,cAAc,GAAG1K,MAAI,CAAC8G,UAAU,CAACgC,aAAa,CAClD2B,YAAW,EACXzK,MAAI,CAAC0F,QACP,CAAC;;AAED;gBACA,IAAI6D,WAAU,KAAK,IAAI,EAAE;kBACvBvJ,MAAI,CAACyF,GAAG,CAACuD,UAAU,CAAC2B,aAAa,CAACpB,WAAU,EAAEmB,cAAc,CAAC;AAC/D,gBAAA;AACF,cAAA;AAAC,YAAA,CAAA,CAAA,OAAAE,GAAA,EAAA;cAAAT,SAAA,CAAAU,CAAA,CAAAD,GAAA,CAAA;AAAA,YAAA,CAAA,SAAA;AAAAT,cAAAA,SAAA,CAAAW,CAAA,EAAA;AAAA,YAAA;AACH,UAAA;AAEA,UAAA,OAAOb,QAAQ;AACjB,QAAA;;AAEA;AACA,QAAA,IAAMQ,WAAW,GAAGzK,MAAI,CAAC8G,UAAU,CAACiE,UAAU,CAC5ChB,IAAI,EACJ/J,MAAI,CAAC0F,QAAQ,EACb/D,QACF,CAAC;;AAED;AACA,QAAA,IAAM4H,UAAU,GAAGvJ,MAAI,CAACwH,oBAAoB,CAACiD,WAAW,CAAC;;AAEzD;AACA,QAAA,IAAMO,IAAI,GAAGhL,MAAI,CAAC8G,UAAU,CAACmE,eAAe,CAC1CR,WAAW,EACXzK,MAAI,CAAC0F,QAAQ,EACb/D,QACF,CAAgB;QAEhB,IAAIqB,sBAAA,CAAK2D,oBAAoB,EAAzB3G,MAAwB,CAAC,IAAIuJ,UAAU,KAAK,IAAI,EAAE;UACpDvJ,MAAI,CAACyF,GAAG,CAACuD,UAAU,CAAC2B,aAAa,CAC/BpB,UAAU,EACVvJ,MAAI,CAAC8G,UAAU,CAACgC,aAAa,CAACkC,IAAI,EAAEhL,MAAI,CAAC0F,QAAQ,CACnD,CAAC;AACH,QAAA;AAEA,QAAA,OAAOsF,IAAI;AACb,MAAA,CAAC,CAAC;AACN,IAAA;AAAC,GAAA,EAAA;IAAAvL,GAAA,EAAA,SAAA;AAAAC,IAAAA,KAAA,EAED,SAAAwL,OAAOA,CAACC,KAAmB,EAAO;AAChC,MAAA,IAAMjD,GAAG,GAAGiD,KAAK,YAAY1C,GAAG,GAAG0C,KAAK,GAAG,IAAI1C,GAAG,CAAC0C,KAAK,CAAC;MACzDjD,GAAG,CAACkD,IAAI,CAAC,IAAI,CAAC3F,GAAG,CAAC9C,MAAM,CAAC0I,IAAI,CAAC,CAACC,MAAM,CAAC,IAAI,CAAC7F,GAAG,CAAC9C,MAAM,CAAC2I,MAAM,CAAC;AAE7D,MAAA,IAAI,IAAI,CAAC7F,GAAG,CAAC9C,MAAM,CAAC4I,IAAI,EAAE;AACxBrD,QAAAA,GAAG,CAACqD,IAAI,CAACC,MAAM,CAAC,IAAI,CAAC/F,GAAG,CAAC9C,MAAM,CAAC4I,IAAI,CAAC,CAAC;AACxC,MAAA;AAEA,MAAA,IAAI,IAAI,CAAC9F,GAAG,CAACgG,OAAO,CAAClJ,QAAQ,EAAE;AAC7B,QAAA,IAAMmJ,QAAQ,GAAGxD,GAAG,CAACyD,OAAO,EAAE;AAE9B,QAAA,IAAI,CAACzD,GAAG,CAAC0D,QAAQ,EAAE,CAACC,UAAU,CAAC,IAAI,CAACpG,GAAG,CAACgG,OAAO,CAAClJ,QAAQ,CAAC,EAAE;UACzDmJ,QAAQ,CAACI,OAAO,CAAC,IAAI,CAACrG,GAAG,CAACgG,OAAO,CAAClJ,QAAQ,CAAC;AAC3C2F,UAAAA,GAAG,CAACyD,OAAO,CAACD,QAAQ,CAAC;AACvB,QAAA;AACF,MAAA;AAEA,MAAA,OAAOxD,GAAG;AACZ,IAAA;AAAC,GAAA,EAAA;IAAAzI,GAAA,EAAA,iBAAA;AAAAC,IAAAA,KAAA,EAED,SAAA2I,eAAeA,CAAC8C,KAAmB,EAAyC;AAAA,MAAA,IAAvClD,aAAa,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AACrD,MAAA,IAAM0F,GAAG,GAAG,IAAI,CAACgD,OAAO,CAACC,KAAK,CAAC;MAE/B,OAAO,IAAI,CAACY,eAAe,CAAC7D,GAAG,CAACP,QAAQ,EAAE,EAAEM,aAAa,CAAC;AAC5D,IAAA;AAAC,GAAA,EAAA;IAAAxI,GAAA,EAAA,wBAAA;AAAAC,IAAAA,KAAA,EAED,SAAQyI,sBAAsBA,CAC5BH,UAAmC,EAG9B;AAAA,MAAA,IAFLb,cAAuC,GAAA3E,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAAA,MAAA,IAC5CuF,EAA0B,GAAAvF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI;MAEjC,IAAMwJ,MAAM,GAAGhE,UAAU;AACzB,MAAA,IAAI,IAAI,CAACvC,GAAG,CAAC9C,MAAM,CAACsJ,oBAAoB,EAAE;QACxCjN,MAAM,CAACkN,MAAM,CAACF,MAAM,EAAE,IAAI,CAAC/E,oBAAoB,EAAE,CAAC;AACpD,MAAA;AAEA,MAAA,IAAMW,QAAQ,GAAG,IAAI,CAACV,WAAW,CAACC,cAAc,CAAC;AAEjD,MAAA,IAAIe,GAAQ;AACZ,MAAA,IAAIH,EAAE,EAAE;QACN,IAAMoE,YAAY,GAAG,IAAI,CAAC1G,GAAG,CAACgG,OAAO,CAAClJ,QAAQ,GAAA,EAAA,CAAAiC,MAAA,CACvC,IAAI,CAACiB,GAAG,CAACgG,OAAO,CAAClJ,QAAQ,EAAAiC,MAAA,CAAGoD,QAAQ,CAAA,GACvCA,QAAQ;QAEZ,IAAI,OAAOG,EAAE,KAAK,QAAQ,IAAIA,EAAE,CAAC8D,UAAU,CAACM,YAAY,CAAC,EAAE;AACzDjE,UAAAA,GAAG,GAAG,IAAIO,GAAG,CAACV,EAAE,CAAC;AACnB,QAAA,CAAC,MAAM;AACLG,UAAAA,GAAG,GAAG,IAAIO,GAAG,CAAA,EAAA,CAAAjE,MAAA,CAAIoD,QAAQ,EAAA,GAAA,CAAA,CAAApD,MAAA,CAAIuD,EAAE,CAAE,CAAC;AACpC,QAAA;AACF,MAAA,CAAC,MAAM;AACLG,QAAAA,GAAG,GAAG,IAAIO,GAAG,CAACb,QAAQ,CAAC;AACzB,MAAA;AAEA,MAAA,IAAIoE,MAAM,EAAE;AACV9D,QAAAA,GAAG,CAACQ,SAAS,CAACsD,MAAM,CAAC;AACvB,MAAA;AAEA,MAAA,OAAO9D,GAAG;AACZ,IAAA;AAAC,GAAA,EAAA;IAAAzI,GAAA,EAAA,iBAAA;AAAAC,IAAAA,KAAA,EAED,SAAQqM,eAAeA,CACrBZ,KAAa,EAEM;AAAA,MAAA,IAAAhL,MAAA,GAAA,IAAA;AAAA,MAAA,IADnB8H,aAAa,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;MAElB,IAAI,CAAC2I,KAAK,EAAE;AACV,QAAA,MAAM,IAAI/L,KAAK,CAAC,gBAAgB,CAAC;AACnC,MAAA;AAEA,MAAA,IAAI4D,sBAAA,CAAK0D,aAAa,EAAlB,IAAiB,CAAC,EAAE;AACtB,QAAA,OAAO1D,sBAAA,CAAK0D,aAAa,EAAlB,IAAiB,CAAC,CACtB0F,wBAAwB,EAAE,CAC1BzC,IAAI,CAAC,UAAC0C,oBAAoB,EAAK;AAC9B,UAAA,IACEA,oBAAoB,KAAK,IAAI,IAC7BA,oBAAoB,IAAI5F,oBAAoB,EAC5C;AACA,YAAA,OAAOzD,sBAAA,CAAK0D,aAAa,EAAlBvG,MAAiB,CAAC,CACtBmM,YAAY,EAAE,CACd3C,IAAI,CAAC,UAAC4C,oBAAoB,EAAA;cAAA,OAAKA,oBAAoB,CAACC,YAAY;AAAA,YAAA,CAAA,CAAC,CAAA,OAAA,CAC5D,CAAC,UAAC3B,CAAC,EAAK;AACZ1K,cAAAA,MAAI,CAACsM,0BAA0B,CAAC5B,CAAC,CAAC;AAElC,cAAA,MAAMA,CAAC;AACT,YAAA,CAAC,CAAC;AACN,UAAA;UAEA,OAAO7H,sBAAA,CAAK0D,aAAa,EAAlBvG,MAAiB,CAAC,CAACuM,cAAc,EAAE;AAC5C,QAAA,CAAC,CAAC,CACD/C,IAAI,CAAC,UAACgD,KAAK,EAAA;UAAA,OAAKxM,MAAI,CAACyM,QAAQ,CAACD,KAAK,EAAExB,KAAK,EAAElD,aAAa,CAAC;QAAA,CAAA,CAAC;AAChE,MAAA;MAEA,OAAO,IAAI,CAAC2E,QAAQ,CAAC,IAAI,EAAEzB,KAAK,EAAElD,aAAa,CAAC;AAClD,IAAA;AAAC,GAAA,EAAA;IAAAxI,GAAA,EAAA,yBAAA;AAAAC,IAAAA,KAAA,EAED,SAAQmN,uBAAuBA,CAC7B1B,KAAa,EAEM;AAAA,MAAA,IAAA7K,MAAA,GAAA,IAAA;AAAA,MAAA,IADnB2H,aAA0B,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAE/B,MAAA,OAAOQ,sBAAA,CAAK0D,aAAa,EAAlB,IAAiB,CAAC,CACtB4F,YAAY,EAAE,CACd3C,IAAI,CAAC,YAAM;AACV;AACA,QAAA,IAAM7D,OAAO,GAAcmC,aAAa,CAAlCnC,OAAO;AAAKgH,UAAAA,IAAI,GAAAC,wBAAA,CAAK9E,aAAa,EAAA+E,SAAA,CAAA;AAExC,QAAA,IAAMC,oBAAiC,GAAAhK,cAAA,CAAAA,cAAA,KAClC6J,IAAI,CAAA,EAAA,EAAA,EAAA;UACPhH,OAAO,EAAED,mBAAmB,CAACC,OAAO;SAAC,CACtC;AAED,QAAA,OAAOxF,MAAI,CAACyL,eAAe,CAACZ,KAAK,EAAE8B,oBAAoB,CAAC;AAC1D,MAAA,CAAC,CAAC,CAAA,OAAA,CACI,CAAC,UAACpC,CAAC,EAAK;AACZvK,QAAAA,MAAI,CAACmM,0BAA0B,CAAC5B,CAAC,CAAC;AAElC,QAAA,MAAMA,CAAC;AACT,MAAA,CAAC,CAAC;AACN,IAAA;AAAC,GAAA,EAAA;IAAApL,GAAA,EAAA,qBAAA;AAAAC,IAAAA,KAAA,EAED,SAAQwN,mBAAmBA,CACzBvL,QAAkB,EAClBwJ,KAAa,EAEM;AAAA,MAAA,IAAA1K,MAAA,GAAA,IAAA;AAAA,MAAA,IADnBwH,aAAa,GAAAzF,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAElB,MAAA,IAAMR,KAAK,GAAGP,wBAAwB,CAACE,QAAQ,CAAC;;AAEhD;MACA,IAAMwL,mBAAmB,GAAGxL,QAAQ,CAACmE,OAAO,CAACsH,GAAG,CAAC,kBAAkB,CAAC;AACpE,MAAA,IAAID,mBAAmB,EAAE;QACvB,IAAME,YAAY,GAChBF,mBAAmB,CAACtF,OAAO,CAAC,uBAAuB,CAAC,GAAG,EAAE;QAE3D,IAAIwF,YAAY,IAAIrK,sBAAA,CAAK0D,aAAa,EAAlB,IAAiB,CAAC,EAAE;AACtC,UAAA,OAAO,IAAI,CAACmG,uBAAuB,CAAC1B,KAAK,EAAElD,aAAa,CAAC;AAC3D,QAAA;AAEA,QAAA,MAAMjG,KAAK;AACb,MAAA,CAAC,MAAM;AACL;QACA,OAAOL,QAAQ,CACZ/B,IAAI,EAAE,CACN+J,IAAI,CAAC,UAAC5H,IAAI,EAAK;AACd,UAAA,IACEiB,sBAAA,CAAK0D,aAAa,EAAlBjG,MAAiB,CAAC,KACjBsB,IAAI,CAACC,KAAK,KAAK,eAAe,IAAID,IAAI,CAACC,KAAK,KAAK,eAAe,CAAC,EAClE;AACA,YAAA,OAAOvB,MAAI,CAACoM,uBAAuB,CAAC1B,KAAK,EAAElD,aAAa,CAAC;AAC3D,UAAA;AACA,UAAA,MAAMjG,KAAK;AACb,QAAA,CAAC,CAAC,CAAA,OAAA,CACI,CAAC,UAAC4I,GAAG,EAAK;UACd,IAAIA,GAAG,YAAY1L,UAAU,EAAE;AAC7B,YAAA,MAAM0L,GAAG;AACX,UAAA;AACA,UAAA,MAAM5I,KAAK;AACb,QAAA,CAAC,CAAC;AACN,MAAA;AACF,IAAA;AAAC,GAAA,EAAA;IAAAvC,GAAA,EAAA,UAAA;IAAAC,KAAA,EAED,SAAQkN,QAAQA,CACdU,WAA0B,EAC1BnC,KAAa,EACblD,aAA0B,EACP;AAAA,MAAA,IAAArH,MAAA,GAAA,IAAA;MACnB,IAAIoL,MAAM,GAAG/D,aAAa;MAC1B,IAAIsF,WAAwB,GAAG,EAAE;AAEjC,MAAA,IACEvB,MAAM,CAAC9C,MAAM,KAAK,KAAK,IACtB8C,MAAM,CAAC9C,MAAM,KAAK,KAAK,IAAI8C,MAAM,CAAC9C,MAAM,KAAK,QAAS,EACvD;AACAqE,QAAAA,WAAW,GAAG;AACZ,UAAA,cAAc,EAAE;SACjB;AACH,MAAA;AAEA,MAAA,IAAID,WAAW,EAAE;AACfC,QAAAA,WAAW,CAACC,aAAa,GAAA,EAAA,CAAAhJ,MAAA,CAAM,IAAI,CAACiB,GAAG,CAAC9C,MAAM,CAAC8K,iBAAiB,EAAA,GAAA,CAAA,CAAAjJ,MAAA,CAAI8I,WAAW,CAAE;AACnF,MAAA;AAEA,MAAA,IAAItB,MAAM,EAAE;AACV,QAAA,IAAI,CAACA,MAAM,CAAClG,OAAO,EAAE;AACnBkG,UAAAA,MAAM,CAAClG,OAAO,GAAG,EAAE;AACrB,QAAA;AAEAkG,QAAAA,MAAM,CAAClG,OAAO,GAAG9G,MAAM,CAACkN,MAAM,CAACqB,WAAW,EAAEvB,MAAM,CAAClG,OAAO,CAAC;AAC7D,MAAA,CAAC,MAAM;AACLkG,QAAAA,MAAM,GAAG;AAAElG,UAAAA,OAAO,EAAEyH;SAAa;AACnC,MAAA;MAEA,IAAIvB,MAAM,CAAClG,OAAO,EAAE;QAClBkG,MAAM,CAAClG,OAAO,GAAGQ,sBAAsB,CAAC0F,MAAM,CAAClG,OAAO,CAAC;AACzD,MAAA;AAEA,MAAA,IAAI4H,KAAyB;AAC7B,MAAA,IAAI,IAAI,CAACjI,GAAG,CAACkI,MAAM,EAAE;QACnBD,KAAK,GAAG,IAAI,CAACjI,GAAG,CAACkI,MAAM,CAACC,UAAU,CAAA3K,cAAA,CAAA;AAAGiF,UAAAA,GAAG,EAAEiD;SAAK,EAAKa,MAAM,CAAE,CAAC;AAC/D,MAAA;MAEA,OAAO6B,KAAK,CAAC1C,KAAK,EAAEa,MAAM,CAAC,CAACrC,IAAI,CAAC,UAAChI,QAAQ,EAAK;AAC7C,QAAA,IAAIf,MAAI,CAAC6E,GAAG,CAACkI,MAAM,EAAE;UACnB/M,MAAI,CAAC6E,GAAG,CAACkI,MAAM,CAACG,WAAW,CAACnM,QAAQ,EAAE+L,KAAK,CAAC;AAC9C,QAAA;AAEA,QAAA,IAAI/L,QAAQ,CAACE,MAAM,GAAG,GAAG,EAAE;AACzB,UAAA,OAAOF,QAAQ;AACjB,QAAA;AAEA,QAAA,IAAIA,QAAQ,CAACE,MAAM,KAAK,GAAG,EAAE;UAC3B,OAAOjB,MAAI,CAACsM,mBAAmB,CAACvL,QAAQ,EAAEwJ,KAAK,EAAEa,MAAM,CAAC;AAC1D,QAAA;AAEA,QAAA,IAAM+B,SAAS,GAAGtM,wBAAwB,CAACE,QAAQ,CAAC;AACpD,QAAA,MAAMoM,SAAS;AACjB,MAAA,CAAC,CAAC;AACJ,IAAA;AAAC,GAAA,EAAA;IAAAtO,GAAA,EAAA,sBAAA;AAAAC,IAAAA,KAAA,EAED,SAAQ8H,oBAAoBA,CAC1BwG,MAA+B,EACP;MACxB,IAAMC,KAAK,GAAG,IAAI,CAACvI,QAAQ,CAACwI,sBAAsB,EAAE,CAAChK,aAAa;;AAElE;AACA;MACA,OAAO8J,MAAM,CAACC,KAAK,CAAC;AACtB,IAAA;AAAC,GAAA,EAAA;IAAAxO,GAAA,EAAA,4BAAA;AAAAC,IAAAA,KAAA,EAED,SAAQ+M,0BAA0BA,CAACzK,KAAY,EAAQ;AAAA,MAAA,IAAAjB,MAAA,GAAA,IAAA;MACrD,IAAIiB,KAAK,YAAY9C,UAAU,EAAE;AAC/B8D,QAAAA,sBAAA,CAAK0D,aAAa,EAAlB,IAAiB,CAAC,CAACyH,MAAM,EAAE,CAACxE,IAAI,CAAC,YAAM;AACrC,UAAA,IAAI5I,MAAI,CAAC0E,GAAG,CAAC9C,MAAM,CAACyL,qBAAqB,EAAE;YACzCrN,MAAI,CAAC0E,GAAG,CAAC9C,MAAM,CAACyL,qBAAqB,CAACpM,KAAK,CAAC;AAC9C,UAAA;AACF,QAAA,CAAC,CAAC;AACJ,MAAA;AACF,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA;;ACnjBiC,IAAAqM,cAAA,oBAAAjM,OAAA,EAAA;AAAA,IAAAkM,aAAA,oBAAAlM,OAAA,EAAA;AAAA,IAAAmM,oBAAA,oBAAAnM,OAAA,EAAA;AAAA,IAS9BoM,aAAa,gBAAA,YAAA;AAajB;AACF;AACA;AACA;AACA;EACE,SAAAA,aAAAA,CACE/O,GAAW,EAIX;AAAA,IAAA,IAHA2H,QAAuB,GAAA5E,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI;AAAA,IAAA,IAE9BoD,eAAsC,GAAApD,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAGoE,cAAc;AAAA/H,IAAAA,eAAA,OAAA2P,aAAA,CAAA;IAAAzP,eAAA,CAAA,IAAA,EAAA,KAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,UAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,iBAAA,EAAA,MAAA,CAAA;AAfzD6D,IAAAA,0BAAA,OAAAyL,cAAc,EAAA,MAAA,CAAA;AAEdzL,IAAAA,0BAAA,OAAA0L,aAAa,EAAA,MAAA,CAAA;AAEb1L,IAAAA,0BAAA,OAAA2L,oBAAoB,EAAA,MAAA,CAAA;IAalB,IAAI,CAAC9O,GAAG,EAAE;AACR,MAAA,MAAM,IAAI8F,SAAS,CAAC,4BAA4B,CAAC;AACnD,IAAA;IAEA,IAAI,CAAC9F,GAAG,GAAGA,GAAG;AACd,IAAA,IAAI,CAAC2H,QAAQ,GAAGA,QAAQ,IAAI3H,GAAG;AAC/B;IACA,IAAI,CAACmG,eAAe,GAAGA,eAAe;AAEtC/C,IAAAA,sBAAA,CAAKwL,cAAc,EAAnB,IAAI,EAAkB,EAAJ,CAAC;AACnBxL,IAAAA,sBAAA,CAAKyL,aAAa,EAAlB,IAAI,EAAiB,EAAJ,CAAC;AACpB,EAAA;EAAC,OAAA9O,YAAA,CAAAgP,aAAA,EAAA,CAAA;IAAA/O,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAED,SAAA+O,YAAYA,CAACnP,IAAY,EAAa;MACpC,OAAO0D,sBAAA,CAAKqL,cAAc,EAAnB,IAAkB,CAAC,CAAC/O,IAAI,CAAC;AAClC,IAAA;AAAC,GAAA,EAAA;IAAAG,GAAA,EAAA,wBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAsF,sBAAsBA,GAAY;AAChC,MAAA,OAAO,CAAC,CAAChC,sBAAA,CAAKuL,oBAAoB,EAAzB,IAAwB,CAAC;AACpC,IAAA;AAAC,GAAA,EAAA;IAAA9O,GAAA,EAAA,wBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAwO,sBAAsBA,GAAc;AAClC,MAAA,IAAI,CAAClL,sBAAA,CAAKuL,oBAAoB,EAAzB,IAAwB,CAAC,EAAE;QAC9B,MAAM,IAAIhJ,SAAS,CAAA,IAAA,CAAAf,MAAA,CACb,IAAI,CAAC/E,GAAG,EAAA,+EAAA,CACd,CAAC;AACH,MAAA;AAEA,MAAA,OAAOuD,sBAAA,CAAKuL,oBAAoB,EAAzB,IAAwB,CAAC;AAClC,IAAA;AAAC,GAAA,EAAA;IAAA9O,GAAA,EAAA,kBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAoE,gBAAgBA,GAAsB;AACpC,MAAA,OAAOd,sBAAA,CAAKqL,cAAc,EAAnB,IAAkB,CAAC;AAC5B,IAAA;AAAC,GAAA,EAAA;IAAA5O,GAAA,EAAA,kBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAgP,gBAAgBA,CAACC,aAA0B,EAAQ;AAAA,MAAA,IAAA/P,KAAA,GAAA,IAAA;AACjDiE,MAAAA,sBAAA,CAAKwL,cAAc,EAAnB,IAAI,EAAkB,EAAJ,CAAC;AACnBxL,MAAAA,sBAAA,CAAK0L,oBAAoB,EAAzB,IAAI,EAAwB7L,SAAJ,CAAC;AAEzBiM,MAAAA,aAAa,CAACC,OAAO,CAAC,UAAC7K,SAAS,EAAK;QACnCf,sBAAA,CAAKqL,cAAc,EAAnBzP,KAAkB,CAAC,CAACmF,SAAS,CAACG,aAAa,CAAC,GAAGH,SAAS;QAExD,IAAIA,SAAS,CAACuB,YAAY,EAAE;AAC1BzC,UAAAA,sBAAA,CAAK0L,oBAAoB,EAAzB3P,KAAI,EAAwBmF,SAAJ,CAAC;AAC3B,QAAA;AACF,MAAA,CAAC,CAAC;AAEF,MAAA,IAAI,CAACf,sBAAA,CAAKuL,oBAAoB,EAAzB,IAAwB,CAAC,EAAE;QAC9B,MAAM,IAAIhJ,SAAS,CAAA,IAAA,CAAAf,MAAA,CACb,IAAI,CAAC/E,GAAG,EAAA,mIAAA,CACd,CAAC;AACH,MAAA;AACF,IAAA;AAAC,GAAA,EAAA;IAAAA,GAAA,EAAA,iBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAmP,eAAeA,CAACC,YAAwB,EAAQ;AAAA,MAAA,IAAA9O,MAAA,GAAA,IAAA;AAC9C6C,MAAAA,sBAAA,CAAKyL,aAAa,EAAlB,IAAI,EAAiB,EAAJ,CAAC;AAElBQ,MAAAA,YAAY,CAACF,OAAO,CAAC,UAAC5K,QAAQ,EAAK;QACjChB,sBAAA,CAAKsL,aAAa,EAAlBtO,MAAiB,CAAC,CAACgE,QAAQ,CAACE,aAAa,CAAC,GAAGF,QAAQ;AACrDhB,QAAAA,sBAAA,CAAKqL,cAAc,EAAnBrO,MAAkB,CAAC,CAACgE,QAAQ,CAACE,aAAa,CAAC,GAAG,IAAImB,SAAS,CACzDrB,QAAQ,CAACE,aAAa,EACtBF,QAAQ,CAACE,aAAa,EACtBF,QAAQ,CAACS,gBAAgB,EAAE,GAAG,OAAO,GAAG,QAC1C,CAAC;AACH,MAAA,CAAC,CAAC;AACJ,IAAA;AAAC,GAAA,EAAA;IAAAhF,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAED,SAAAuE,WAAWA,CAACxE,GAAW,EAAY;MACjC,OAAOuD,sBAAA,CAAKsL,aAAa,EAAlB,IAAiB,CAAC,CAAC7O,GAAG,CAAC;AAChC,IAAA;AAAC,GAAA,EAAA;IAAAA,GAAA,EAAA,2BAAA;AAAAC,IAAAA,KAAA,EAED,SAAAkJ,yBAAyBA,GAA+B;AAAA,MAAA,IAAAzI,MAAA,GAAA,IAAA;MACtD,IAAM4O,GAA+B,GAAG,EAAE;AAE1C/P,MAAAA,MAAM,CAACgQ,IAAI,CAAChM,sBAAA,CAAKqL,cAAc,EAAnB,IAAkB,CAAC,CAAC,CAACO,OAAO,CAAC,UAAC1K,aAAa,EAAK;AAC1D6K,QAAAA,GAAG,CAAC7K,aAAa,CAAC,GAAG,IAAI;AAC3B,MAAA,CAAC,CAAC;AAEFlF,MAAAA,MAAM,CAACgQ,IAAI,CAAChM,sBAAA,CAAKsL,aAAa,EAAlB,IAAiB,CAAC,CAAC,CAACM,OAAO,CAAC,UAAC1K,aAAa,EAAK;QACzD,IAAMF,QAAQ,GAAGhB,sBAAA,CAAKsL,aAAa,EAAlBnO,MAAiB,CAAC,CAAC+D,aAAa,CAAC;AAElD,QAAA,IAAIF,QAAQ,CAACS,gBAAgB,EAAE,EAAE;AAC/BsK,UAAAA,GAAG,CAAC7K,aAAa,CAAC,GAAG,EAAE;AACzB,QAAA;AACF,MAAA,CAAC,CAAC;AAEF,MAAA,OAAO6K,GAAG;AACZ,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA;;ACzHEE,IAAAA,aAAa,0BAAbA,aAAa,EAAA;EAAbA,aAAa,CAAA,YAAA,CAAA,GAAA,YAAA;EAAbA,aAAa,CAAA,aAAA,CAAA,GAAA,aAAA;EAAbA,aAAa,CAAA,cAAA,CAAA,GAAA,cAAA;EAAbA,aAAa,CAAA,aAAA,CAAA,GAAA,aAAA;AAAA,EAAA,OAAbA,aAAa;AAAA,CAAA,CAAbA,aAAa,IAAA,EAAA,CAAA;AAAA,IAOZC,QAAQ,gBAAA,YAAA;AAiBZ;AACF;AACA;AACA;AACA;AACA;AACE,EAAA,SAAAA,SACExK,IAAmB,EACnBN,iBAAyB,EACzBF,aAAqB,EAErB;AAAA,IAAA,IADAI,aAA4B,GAAA9B,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI;AAAA3D,IAAAA,eAAA,OAAAqQ,QAAA,CAAA;IAAAnQ,eAAA,CAAA,IAAA,EAAA,MAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,mBAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,eAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,eAAA,EAAA,MAAA,CAAA;IAEnC,IAAI,CAAC2F,IAAI,GAAGA,IAAI;IAChB,IAAI,CAACN,iBAAiB,GAAGA,iBAAiB;IAC1C,IAAI,CAACF,aAAa,GAAGA,aAAa;AAClC,IAAA,IAAI,CAACI,aAAa,GAAGA,aAAa,IAAI,IAAI,CAACJ,aAAa;AAC1D,EAAA;EAAC,OAAA1E,YAAA,CAAA0P,QAAA,EAAA,CAAA;IAAAzP,GAAA,EAAA,YAAA;AAAAC,IAAAA,KAAA,EAED,SAAAyP,UAAUA,GAAY;AACpB,MAAA,OAAO,IAAI,CAACzK,IAAI,KAAKwK,QAAQ,CAACE,UAAU;AAC1C,IAAA;AAAC,GAAA,EAAA;IAAA3P,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAED,SAAA2P,WAAWA,GAAY;AACrB,MAAA,OAAO,IAAI,CAAC3K,IAAI,KAAKwK,QAAQ,CAACI,WAAW;AAC3C,IAAA;AAAC,GAAA,EAAA;IAAA7P,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAED,SAAA6P,WAAWA,GAAY;AACrB,MAAA,OAAO,IAAI,CAAC7K,IAAI,KAAKwK,QAAQ,CAACM,WAAW;AAC3C,IAAA;AAAC,GAAA,EAAA;IAAA/P,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAED,SAAA+P,YAAYA,GAAY;AACtB,MAAA,OAAO,IAAI,CAAC/K,IAAI,KAAKwK,QAAQ,CAACQ,YAAY;AAC5C,IAAA;AAAC,GAAA,EAAA;IAAAjQ,GAAA,EAAA,kBAAA;AAAAC,IAAAA,KAAA,EAED,SAAA+E,gBAAgBA,GAAY;MAC1B,OAAO,IAAI,CAACgL,YAAY,EAAE,IAAI,IAAI,CAACJ,WAAW,EAAE;AAClD,IAAA;AAAC,GAAA,EAAA;IAAA5P,GAAA,EAAA,iBAAA;AAAAC,IAAAA,KAAA,EAED,SAAA2E,eAAeA,GAAY;MACzB,OAAO,IAAI,CAACkL,WAAW,EAAE,IAAI,IAAI,CAACJ,UAAU,EAAE;AAChD,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA;AAAApQ,eAAA,CAzDGmQ,QAAQ,EAAA,YAAA,EACeD,aAAa,CAACG,UAAU,CAAA;AAAArQ,eAAA,CAD/CmQ,QAAQ,EAAA,aAAA,EAGgBD,aAAa,CAACK,WAAW,CAAA;AAAAvQ,eAAA,CAHjDmQ,QAAQ,EAAA,aAAA,EAKgBD,aAAa,CAACO,WAAW,CAAA;AAAAzQ,eAAA,CALjDmQ,QAAQ,EAAA,cAAA,EAOiBD,aAAa,CAACS,YAAY,CAAA;;ACdzD;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO,IAAMC,oBAAoB,GAAG,4BAA4B;AAIzD,IAAMC,kBAAkB,GAAG,0BAA0B;AAErD,SAASC,WAAWA,CAACC,cAAuB,EAAW;EAC5D,OAAOC,YAAY,CAACD,cAAc,CAAC,IAAIE,QAAQ,CAACF,cAAc,CAAC;AACjE;AAEO,SAASC,YAAYA,CAACE,eAAoB,EAAW;EAC1D,OAAO,CAAC,EAAEA,eAAe,IAAIA,eAAe,CAACN,oBAAoB,CAAC,CAAC;AACrE;AAkBO,SAASK,QAAQA,CAACE,WAAgB,EAAW;EAClD,OAAO,CAAC,EAAEA,WAAW,IAAIA,WAAW,CAACN,kBAAkB,CAAC,CAAC;AAC3D;;AC/BA;AACA;AACA;AACA,SAASO,aAAaA,CACpBC,IAA6B,EAC7BC,KAA8B,EACrB;AACT,EAAA,IAAMC,MAAM,GAAGvH,IAAI,CAACqH,IAAI,EAAEC,KAAK,CAAC;EAEhC,OAAOC,MAAM,GAAGA,MAAM,CAAC7N,MAAM,GAAG,CAAC,GAAG,KAAK;AAC3C;;AAEA;AACA;AACA;AACA,SAAS8N,WAAWA,CAClBC,cAAgD,EAChDC,eAAuB,EACnB;AACJ,EAAA,IAAIC,OAAA,CAAOF,cAAc,CAAA,KAAK,QAAQ,EAAE;AACtC,IAAA,OAAOA,cAAc;AACvB,EAAA;;AAEA;AACA;EACA,OAAOA,cAAc,CAACC,eAAe,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA,SAASE,eAAeA,CACtBC,gBAAuB,EACvBC,gBAAuB,EACvBvN,aAA4B,EACA;EAC5B,IAAMmN,eAAe,GAAGnN,aAAa,CAAC4K,sBAAsB,EAAE,CAAChK,aAAa;AAC5E;AACA;AACA,EAAA,IAAM4M,eAAe,GAAGP,WAAW,CAACK,gBAAgB,EAAEH,eAAe,CAAC;EAEtE,IAAMM,UAAU,GACdF,gBAAgB,IAChBA,gBAAgB,CAAC/I,IAAI,CAAC,UAACkJ,qBAAqB,EAAK;AAC/C,IAAA,IAAMC,kBAAkB,GAAGV,WAAW,CACpCS,qBAAqB,EACrBP,eACF,CAAC;IAED,OAAOK,eAAe,KAAKG,kBAAkB;AAC/C,EAAA,CAAC,CAAC;AAEJ,EAAA,IAAIF,UAAU,EAAE;AACd,IAAA,OAAOA,UAAU;AACnB,EAAA;AAEA,EAAA,OAAOzN,aAAa,CAACsF,yBAAyB,EAAE;AAClD;;AAEA;AACA;AACA;AACA,SAASsI,oBAAoBA,CAC3BC,QAAe,EACfV,eAAuB,EACG;AAC1B,EAAA,OAAOU,QAAQ,CAAC9N,GAAG,CAAC,UAAC3D,KAAK,EAAK;IAC7B,IAAIV,MAAM,CAACgQ,IAAI,CAACtP,KAAK,CAAC,CAAC0R,QAAQ,CAACX,eAAe,CAAC,EAAE;AAChD,MAAA,OAAA1R,eAAA,CAAA,EAAA,EACG0R,eAAe,EAAG/Q,KAAK,CAAC+Q,eAAe,CAAC,CAAA;AAE7C,IAAA;AAEA,IAAA,IAAI,OAAO/Q,KAAK,KAAK,QAAQ,EAAE;AAC7B,MAAA,OAAOA,KAAK;AACd,IAAA;AAEA,IAAA,MAAM,IAAI6F,SAAS,CACjB,oFACF,CAAC;AACH,EAAA,CAAC,CAAC;AACJ;AAAC,IAAA8L,QAAA,oBAAAjP,OAAA,EAAA;AAAA,IAAAkP,QAAA,oBAAAlP,OAAA,EAAA;AAAA,IAEKmP,UAAU,gBAAA,YAAA;EAOd,SAAAA,UAAAA,CAAY9F,OAAgB,EAAmB;AAAA,IAAA,IAAjBzE,OAAO,GAAAxE,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,KAAK;AAAA3D,IAAAA,eAAA,OAAA0S,UAAA,CAAA;IAAAxS,eAAA,CAAA,IAAA,EAAA,SAAA,EAAA,MAAA,CAAA;AAJ7C6D,IAAAA,0BAAA,OAAAyO,QAAQ,EAAA,MAAA,CAAA;AAERzO,IAAAA,0BAAA,OAAA0O,QAAQ,EAAA,MAAA,CAAA;IAGN,IAAI,CAAC7F,OAAO,GAAGA,OAAO;AAEtB5I,IAAAA,sBAAA,CAAKyO,QAAQ,EAAb,IAAI,EAAYtK,OAAJ,CAAC;AACbnE,IAAAA,sBAAA,CAAKwO,QAAQ,EAAb,IAAI,EAAY,EAAJ,CAAC;AACf,EAAA;EAAC,OAAA7R,YAAA,CAAA+R,UAAA,EAAA,CAAA;IAAA9R,GAAA,EAAA,eAAA;AAAAC,IAAAA,KAAA,EAED,SAAAiL,aAAaA,CAAC5C,EAAM,EAAET,MAA+B,EAAQ;AAC3D,MAAA,IAAI,CAACtE,sBAAA,CAAKsO,QAAQ,EAAb,IAAY,CAAC,EAAE;AAClB,QAAA;AACF,MAAA;AACA,MAAA,IAAIzB,WAAW,CAACvI,MAAM,CAAC,EAAE;QACvBtE,sBAAA,CAAKqO,QAAQ,EAAb,IAAY,CAAC,CAACtJ,EAAE,CAAC,GAAGT,MAAM;AAC5B,MAAA,CAAC,MAAM;AACLtE,QAAAA,sBAAA,CAAKqO,QAAQ,EAAb,IAAY,CAAC,CAACtJ,EAAE,CAAC,GAAA9E,cAAA,CAAA,EAAA,EAAQqE,MAAM,CAAE;AACnC,MAAA;AACF,IAAA;AAAC,GAAA,EAAA;IAAA7H,GAAA,EAAA,gBAAA;AAAAC,IAAAA,KAAA,EAED,SAAA+J,cAAcA,CAAC1B,EAAM,EAA2B;MAC9C,OAAO/E,sBAAA,CAAKqO,QAAQ,EAAb,IAAY,CAAC,CAACtJ,EAAE,CAAC;AAC1B,IAAA;AAAC,GAAA,EAAA;IAAAtI,GAAA,EAAA,OAAA;AAAAC,IAAAA,KAAA,EAED,SAAAkK,KAAKA,CAAC7B,EAAM,EAAQ;MAClB,OAAO/E,sBAAA,CAAKqO,QAAQ,EAAb,IAAY,CAAC,CAACtJ,EAAE,CAAC;AAC1B,IAAA;AAAC,GAAA,EAAA;IAAAtI,GAAA,EAAA,cAAA;IAAAC,KAAA,EAED,SAAAuJ,YAAYA,CACVJ,kBAA2C,EAC3CF,kBAA2C,EAC3CrF,aAA4B,EACX;MACjB,OAAO,IAAI,CAACkO,eAAe,CACzB3I,kBAAkB,EAClBF,kBAAkB,EAClBrF,aACF,CAAC;AACH,IAAA;AAAC,GAAA,EAAA;IAAA7D,GAAA,EAAA,6BAAA;AAAAC,IAAAA,KAAA,EAED,SAAQ+R,2BAA2BA,CACjCC,gBAAiC,EACjCjS,GAAW,EACXsE,SAAoB,EACpB4N,QAAiC,EACjCR,QAAiC,EAChB;MACjB,IAAMS,WAAW,GAAGF,gBAAgB;MAEpC,IAAI3N,SAAS,CAACW,IAAI,KAAK,QAAQ,IAAIX,SAAS,CAACW,IAAI,KAAK,OAAO,EAAE;QAC7D,IAAIiN,QAAQ,KAAKjP,SAAS,IAAIyN,aAAa,CAACwB,QAAQ,EAAER,QAAQ,CAAC,EAAE;AAC/DS,UAAAA,WAAW,CAACnS,GAAG,CAAC,GAAG0R,QAAQ;AAC7B,QAAA;AACF,MAAA,CAAC,MAAM,IAAIQ,QAAQ,KAAKR,QAAQ,EAAE;AAChCS,QAAAA,WAAW,CAACnS,GAAG,CAAC,GAAG0R,QAAQ;AAC7B,MAAA;AAEA,MAAA,OAAOS,WAAW;AACpB,IAAA;AAAC,GAAA,EAAA;IAAAnS,GAAA,EAAA,6BAAA;AAAAC,IAAAA,KAAA,EAED,SAAQmS,2BAA2BA,CACjCH,gBAAiC,EACjCjS,GAAW,EACXkS,QAAiC,EACjCR,QAAiC,EACjChN,gBAA+B,EAC/BsM,eAAuB,EACN;MACjB,IAAMmB,WAAW,GAAGF,gBAAgB;MACpC,IAAIC,QAAQ,KAAKR,QAAQ,EAAE;QACzB,IAAIA,QAAQ,KAAK,IAAI,EAAE;AACrBS,UAAAA,WAAW,CAACnS,GAAG,CAAC,GAAG,IAAI;AAEvB,UAAA,OAAOmS,WAAW;AACpB,QAAA;QAEA,IAAI,OAAOD,QAAQ,KAAK,QAAQ,IAAI,OAAOR,QAAQ,KAAK,QAAQ,EAAE;AAChES,UAAAA,WAAW,CAACnS,GAAG,CAAC,GAAG0R,QAAQ;AAC7B,QAAA;QAEA,IAAMW,aAAa,GAAG,IAAI,CAACN,eAAe,CACxCL,QAAQ,EACRQ,QAAQ,EACRxN,gBACF,CAAC;QAED,IAAInF,MAAM,CAACgQ,IAAI,CAAC8C,aAAa,CAAC,CAACrP,MAAM,GAAG,CAAC,EAAE;UACzCqP,aAAa,CAACrB,eAAe,CAAC,GAAGF,WAAW,CAACY,QAAQ,EAAEV,eAAe,CAAC;AACvEmB,UAAAA,WAAW,CAACnS,GAAG,CAAC,GAAGqS,aAAa;AAClC,QAAA;AACF,MAAA;AAEA,MAAA,OAAOF,WAAW;AACpB,IAAA;AAAC,GAAA,EAAA;IAAAnS,GAAA,EAAA,6BAAA;AAAAC,IAAAA,KAAA,EAED,SAAQqS,2BAA2BA,CACjCL,gBAAiC,EACjCjS,GAAW,EACXgR,eAAuB,EACvBtM,gBAA+B,EAC/BwN,QAAe,EACfR,QAAe,EACE;AAAA,MAAA,IAAAvS,KAAA,GAAA,IAAA;MACjB,IAAMgT,WAAW,GAAGF,gBAAgB;MACpC,IAAMM,cAAc,GAAGb,QAAQ,GAAGA,QAAQ,CAAC1O,MAAM,GAAG,CAAC;MACrD,IAAMwP,cAAc,GAAGN,QAAQ,GAAGA,QAAQ,CAAClP,MAAM,GAAG,CAAC;;AAErD;MACA,IAAIuP,cAAc,KAAKC,cAAc,EAAE;QACrCL,WAAW,CAACnS,GAAG,CAAC,GAAGyR,oBAAoB,CAACC,QAAQ,EAAEV,eAAe,CAAC;AACpE,MAAA;AAEA,MAAA,IAAIU,QAAQ,IAAIA,QAAQ,CAAC1O,MAAM,GAAG,CAAC,EAAE;AACnC,QAAA,IAAImP,WAAW,CAACnS,GAAG,CAAC,KAAKiD,SAAS,EAAE;AAClCkP,UAAAA,WAAW,CAACnS,GAAG,CAAC,GAAG,EAAE;AACvB,QAAA;QAEA,IAAMqP,YAAY,GAAGqC,QAAQ;AAE7BrC,QAAAA,YAAY,CAACF,OAAO,CAAC,UAACgC,gBAAgB,EAAEsB,qBAAqB,EAAK;UAChE,IAAMrB,gBAAgB,GAAGF,eAAe,CACtCC,gBAAgB,EAChBe,QAAQ,EACRxN,gBACF,CAAC;UAED,IAAIyM,gBAAgB,KAAKC,gBAAgB,EAAE;YACzC,IACE,OAAOD,gBAAgB,KAAK,QAAQ,IACpC,OAAOC,gBAAgB,KAAK,QAAQ,EACpC;AACAe,cAAAA,WAAW,CAACnS,GAAG,CAAC,CAACyS,qBAAqB,CAAC,GAAGtB,gBAAgB;AAE1D,cAAA;AACF,YAAA;YAEA,IAAMkB,aAAa,GAAGlT,KAAI,CAAC4S,eAAe,CACxCZ,gBAAgB,EAChBC,gBAAgB,EAChB1M,gBACF,CAAC;YAED,IAAInF,MAAM,CAACgQ,IAAI,CAAC8C,aAAa,CAAC,CAACrP,MAAM,GAAG,CAAC,EAAE;AACzC,cAAA,IAAM0P,QAAQ,GAAG5B,WAAW,CAACK,gBAAgB,EAAEH,eAAe,CAAC;cAE/D,IAAI0B,QAAQ,KAAK,IAAI,EAAE;AACrBL,gBAAAA,aAAa,CAACrB,eAAe,CAAC,GAAG0B,QAAQ;AAC3C,cAAA;AAEA,cAAA,IAAIP,WAAW,CAACnS,GAAG,CAAC,CAACyS,qBAAqB,CAAC,EAAE;AAC3ClT,gBAAAA,MAAM,CAACkN,MAAM,CACX0F,WAAW,CAACnS,GAAG,CAAC,CAACyS,qBAAqB,CAAC,EACvCJ,aACF,CAAC;AACH,cAAA,CAAC,MAAM;AACLF,gBAAAA,WAAW,CAACnS,GAAG,CAAC,CAACyS,qBAAqB,CAAC,GAAGJ,aAAa;AACzD,cAAA;AACF,YAAA;AACF,UAAA;AACF,QAAA,CAAC,CAAC;QAEF,IAAIF,WAAW,CAACnS,GAAG,CAAC,CAACgD,MAAM,GAAG,CAAC,EAAE;AAC/B;AACA;AACAmP,UAAAA,WAAW,CAACnS,GAAG,CAAC,GAAGT,MAAM,CAACkN,MAAM,CAC9BgF,oBAAoB,CAACC,QAAQ,EAAEV,eAAe,CAAC,EAC/CmB,WAAW,CAACnS,GAAG,CACjB,CAAC;AACH,QAAA,CAAC,MAAM;AACL;UACA,OAAOmS,WAAW,CAACnS,GAAG,CAAC;AACzB,QAAA;AACF,MAAA;AAEA,MAAA,OAAOmS,WAAW;AACpB,IAAA;AAAC,GAAA,EAAA;IAAAnS,GAAA,EAAA,iBAAA;IAAAC,KAAA,EAED,SAAQ8R,eAAeA,CACrB3I,kBAAmC,EACnCF,kBAAmC,EACnCrF,aAA4B,EACX;AAAA,MAAA,IAAAtD,MAAA,GAAA,IAAA;MACjB,IAAI4R,WAAW,GAAG,EAAE;AAEpB5S,MAAAA,MAAM,CAAC6E,MAAM,CAACP,aAAa,CAACQ,gBAAgB,EAAE,CAAC,CAAC8K,OAAO,CAAC,UAAC7K,SAAS,EAAK;AACrE,QAAA,IAAMtE,GAAG,GAAGsE,SAAS,CAACO,aAAa;AACnC,QAAA,IAAM6M,QAAQ,GAAGtI,kBAAkB,CAACpJ,GAAG,CAAC;QACxC,IAAMkS,QAAQ,GAAGhJ,kBAAkB,GAAGA,kBAAkB,CAAClJ,GAAG,CAAC,GAAG,IAAI;QAEpE,IAAM2S,eAAe,GAAG9O,aAAa,CAACW,WAAW,CAC/CF,SAAS,CAACG,aACZ,CAAC;QAED,IAAIiN,QAAQ,KAAKzO,SAAS,EAAE;AAC1B,UAAA;AACF,QAAA;;AAEA;QACA,IAAI,CAAC0P,eAAe,EAAE;AACpBR,UAAAA,WAAW,GAAG5R,MAAI,CAACyR,2BAA2B,CAC5CG,WAAW,EACXnS,GAAG,EACHsE,SAAS,EACT4N,QAAQ,EACRR,QACF,CAAC;AAED,UAAA;AACF,QAAA;QAEA,IAAMhN,gBAAgB,GAAGnE,MAAI,CAACyL,OAAO,CAAClI,qBAAqB,CACzD6O,eAAe,CAAChO,iBAClB,CAAC;QAED,IAAI,CAACD,gBAAgB,EAAE;AACrB,UAAA,MAAM,IAAIoB,SAAS,CAAA,4CAAA,CAAAf,MAAA,CAC4BlB,aAAa,CAAC7D,GAAG,EAAA,GAAA,CAAA,CAAA+E,MAAA,CAAI4N,eAAe,CAAChO,iBAAiB,CACrG,CAAC;AACH,QAAA;QAEA,IAAMqM,eAAe,GACnBtM,gBAAgB,CAAC+J,sBAAsB,EAAE,CAAChK,aAAa;;AAEzD;AACA,QAAA,IAAIkO,eAAe,CAAC/N,eAAe,EAAE,EAAE;AACrCuN,UAAAA,WAAW,GAAG5R,MAAI,CAAC6R,2BAA2B,CAC5CD,WAAW,EACXnS,GAAG,EACHkS,QAAQ,EACRR,QAAQ,EACRhN,gBAAgB,EAChBsM,eACF,CAAC;AAED,UAAA;AACF,QAAA;;AAEA;AACAmB,QAAAA,WAAW,GAAG5R,MAAI,CAAC+R,2BAA2B,CAC5CH,WAAW,EACXnS,GAAG,EACHgR,eAAe,EACftM,gBAAgB,EAChBwN,QAAQ,EACRR,QACF,CAAC;AACH,MAAA,CAAC,CAAC;AAEF,MAAA,OAAOS,WAAW;AACpB,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA,EAAA;;AC9VH;AAAA,IASMS,UAAU,gBAAA,YAAA;AAAA,EAAA,SAAAA,UAAAA,GAAA;AAAAxT,IAAAA,eAAA,OAAAwT,UAAA,CAAA;AAAA,EAAA;EAAA,OAAA7S,YAAA,CAAA6S,UAAA,EAAA,CAAA;IAAA5S,GAAA,EAAA,eAAA;IAAAC,KAAA;AACd;AACF;AACA;AACA;AACA;AACA;AACE,IAAA,SAAAoJ,aAAaA,CACXxB,MAAc,EACdhE,aAA4B,EACV;AAClB,MAAA,OAAOgE,MAAM;AACf,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AALE,GAAA,EAAA;IAAA7H,GAAA,EAAA,YAAA;AAAAC,IAAAA,KAAA,EAMA,SAAAyJ,UAAUA,CAAC6E,MAAwB,EAAE1K,aAA4B,EAAU;AACzE,MAAA,MAAM,IAAIiC,SAAS,CAAC,yCAAyC,CAAC;AAChE,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AALE,GAAA,EAAA;IAAA9F,GAAA,EAAA,eAAA;AAAAC,IAAAA,KAAA,EAMA,SAAA4S,aAAaA,CAACtE,MAAc,EAAE1K,aAA4B,EAAU;MAClE,IAAMiP,aAAa,GAAG,IAAI,CAACzJ,aAAa,CAACkF,MAAM,EAAE1K,aAAa,CAAC;AAC/D,MAAA,OAAO,IAAI,CAAC6F,UAAU,CAACoJ,aAAa,EAAEjP,aAAa,CAAC;AACtD,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AANE,GAAA,EAAA;IAAA7D,GAAA,EAAA,iBAAA;IAAAC,KAAA,EAOA,SAAAuL,eAAeA,CACb+C,MAAwB,EACxB1K,aAA4B,EAC5B3B,QAAkB,EACV;AACR,MAAA,OAAOqM,MAAM;AACf,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AANE,GAAA,EAAA;IAAAvO,GAAA,EAAA,YAAA;IAAAC,KAAA,EAOA,SAAAqL,UAAUA,CACRyH,OAAe,EACflP,aAA4B,EAC5B3B,QAAkB,EACA;AAClB,MAAA,MAAM,IAAI4D,SAAS,CAAC,yCAAyC,CAAC;AAChE,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AANE,GAAA,EAAA;IAAA9F,GAAA,EAAA,iBAAA;IAAAC,KAAA,EAOA,SAAA+S,eAAeA,CACbD,OAAe,EACflP,aAA4B,EAC5B3B,QAAkB,EACV;MACR,IAAMqM,MAAM,GAAG,IAAI,CAACjD,UAAU,CAACyH,OAAO,EAAElP,aAAa,EAAE3B,QAAQ,CAAC;MAChE,OAAO,IAAI,CAACsJ,eAAe,CAAC+C,MAAM,EAAE1K,aAAa,EAAE3B,QAAQ,CAAC;AAC9D,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AANE,GAAA,EAAA;IAAAlC,GAAA,EAAA,iBAAA;IAAAC,KAAA,EAOA,SAAAgT,eAAeA,CACbC,UAA0B,EAC1BrP,aAA4B,EAC5B3B,QAAkB,EACN;MACZ,OAAOgR,UAAU,CAAC;AACpB,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AANE,GAAA,EAAA;IAAAlT,GAAA,EAAA,YAAA;IAAAC,KAAA,EAOA,SAAAkT,UAAUA,CACRC,WAAmB,EACnBvP,aAA4B,EAC5B3B,QAAkB,EACF;AAChB,MAAA,MAAM,IAAI4D,SAAS,CAAC,8CAA8C,CAAC;AACrE,IAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AANE,GAAA,EAAA;IAAA9F,GAAA,EAAA,iBAAA;IAAAC,KAAA,EAOA,SAAAwK,eAAeA,CACb2I,WAAmB,EACnBvP,aAA4B,EAC5B3B,QAAkB,EACN;MACZ,IAAMgR,UAAU,GAAG,IAAI,CAACC,UAAU,CAACC,WAAW,EAAEvP,aAAa,EAAE3B,QAAQ,CAAC;MACxE,OAAO,IAAI,CAAC+Q,eAAe,CAACC,UAAU,EAAErP,aAAa,EAAE3B,QAAQ,CAAC;AAClE,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA;;ACpImC,IAEhCmR,YAAY,0BAAAC,WAAA,EAAA;AAAA,EAAA,SAAAD,YAAAA,GAAA;AAAAjU,IAAAA,eAAA,OAAAiU,YAAA,CAAA;AAAA,IAAA,OAAAhU,UAAA,CAAA,IAAA,EAAAgU,YAAA,EAAAtQ,SAAA,CAAA;AAAA,EAAA;EAAAjD,SAAA,CAAAuT,YAAA,EAAAC,WAAA,CAAA;EAAA,OAAAvT,YAAA,CAAAsT,YAAA,EAAA,CAAA;IAAArT,GAAA,EAAA,YAAA;AAAAC,IAAAA,KAAA,EAChB,SAAAyJ,UAAUA,CACR6E,MAA+B,EAC/B1K,aAA4B,EACpB;AACR,MAAA,OAAO0P,IAAI,CAACC,SAAS,CAACjF,MAAM,CAAC;AAC/B,IAAA;AAAC,GAAA,EAAA;IAAAvO,GAAA,EAAA,YAAA;IAAAC,KAAA,EAED,SAAAqL,UAAUA,CACRyH,OAAe,EACflP,aAA4B,EAC5B3B,QAAkB,EACO;AACzB,MAAA,OAAOqR,IAAI,CAACE,KAAK,CAACV,OAAO,CAAC;AAC5B,IAAA;AAAC,GAAA,EAAA;IAAA/S,GAAA,EAAA,YAAA;IAAAC,KAAA,EAED,SAAAkT,UAAUA,CACRC,WAAmB,EACnBvP,aAA4B,EAC5B3B,QAAkB,EACiB;AACnC,MAAA,OAAOqR,IAAI,CAACE,KAAK,CAACL,WAAW,CAAC;AAChC,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA,CAtBwBR,UAAU,CAAA;;ACJrC,SAASc,mBAAmBA,CAACC,CAAS,EAAEC,CAAS,EAAU;EACzD,IAAMC,MAAkB,GAAG,EAAE;;AAE7B;AACA,EAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIF,CAAC,CAAC5Q,MAAM,EAAE8Q,CAAC,IAAI,CAAC,EAAE;AACrCD,IAAAA,MAAM,CAACC,CAAC,CAAC,GAAG,CAACA,CAAC,CAAC;AACjB,EAAA;;AAEA;AACA,EAAA,KAAK,IAAIC,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIJ,CAAC,CAAC3Q,MAAM,EAAE+Q,CAAC,IAAI,CAAC,EAAE;AACrCF,IAAAA,MAAM,CAAC,CAAC,CAAC,CAACE,CAAC,CAAC,GAAGA,CAAC;AAClB,EAAA;;AAEA;AACA,EAAA,KAAK,IAAID,EAAC,GAAG,CAAC,EAAEA,EAAC,IAAIF,CAAC,CAAC5Q,MAAM,EAAE8Q,EAAC,IAAI,CAAC,EAAE;AACrC,IAAA,KAAK,IAAIC,EAAC,GAAG,CAAC,EAAEA,EAAC,IAAIJ,CAAC,CAAC3Q,MAAM,EAAE+Q,EAAC,IAAI,CAAC,EAAE;AACrC,MAAA,IAAIH,CAAC,CAACI,MAAM,CAACF,EAAC,GAAG,CAAC,CAAC,KAAKH,CAAC,CAACK,MAAM,CAACD,EAAC,GAAG,CAAC,CAAC,EAAE;AACvCF,QAAAA,MAAM,CAACC,EAAC,CAAC,CAACC,EAAC,CAAC,GAAGF,MAAM,CAACC,EAAC,GAAG,CAAC,CAAC,CAACC,EAAC,GAAG,CAAC,CAAC;AACrC,MAAA,CAAC,MAAM;QACLF,MAAM,CAACC,EAAC,CAAC,CAACC,EAAC,CAAC,GAAGE,IAAI,CAACC,GAAG,CACrBL,MAAM,CAACC,EAAC,GAAG,CAAC,CAAC,CAACC,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAAE;QAC1BF,MAAM,CAACC,EAAC,CAAC,CAACC,EAAC,GAAG,CAAC,CAAC,GAAG,CAAC;AAAE;QACtBF,MAAM,CAACC,EAAC,GAAG,CAAC,CAAC,CAACC,EAAC,CAAC,GAAG,CAAC;SACrB;AACH,MAAA;AACF,IAAA;AACF,EAAA;EAEA,OAAOF,MAAM,CAACD,CAAC,CAAC5Q,MAAM,CAAC,CAAC2Q,CAAC,CAAC3Q,MAAM,CAAC;AACnC;AAEO,SAASmR,eAAeA,CAC7BC,IAAY,EACZC,IAAc,EAEC;AAAA,EAAA,IADfC,WAAW,GAAAvR,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAGwR,QAAQ;EAEtB,IAAIC,WAA0B,GAAG,IAAI;EACrC,IAAIC,WAAW,GAAGF,QAAQ;AAE1B,EAAA,KAAK,IAAIT,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGO,IAAI,CAACrR,MAAM,EAAE8Q,CAAC,IAAI,CAAC,EAAE;AACvC,IAAA,IAAMY,SAAS,GAAGL,IAAI,CAACP,CAAC,CAAC;AACzB,IAAA,IAAMa,QAAQ,GAAGjB,mBAAmB,CAACU,IAAI,EAAEM,SAAS,CAAC;AAErD,IAAA,IAAIC,QAAQ,GAAGF,WAAW,IAAIE,QAAQ,IAAIL,WAAW,EAAE;AACrDG,MAAAA,WAAW,GAAGE,QAAQ;AACtBH,MAAAA,WAAW,GAAGE,SAAS;AACzB,IAAA;AACF,EAAA;AAEA,EAAA,OAAOF,WAAW;AACpB;;AC9CA;;AAMA,IAAMI,UAAU,GAAG,SAAbA,UAAUA,GAAA;EAAA,OAAA,kBAAA,CAAA7P,MAAA,CACK8P,IAAI,CAACC,GAAG,EAAE,EAAA,GAAA,CAAA,CAAA/P,MAAA,CAC3BkP,IAAI,CAACc,KAAK,CAACd,IAAI,CAACe,MAAM,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;AAAA,CAC7C;AAqBJ,SAASC,gBAAgBA,CAACC,GAAe,EAAuB;AAC9D,EAAA,IAAMC,OAAO,GAAA3R,cAAA,KAAQ0R,GAAG,CAAE,CAAC;EAC3B,OAAO;IACLzL,MAAM,EAAE0L,OAAO,CAAC1L,MAAM;AAAE;IACxBhB,GAAG,EAAE0M,OAAO,CAAC1M,GAAG;AAAE;AAClBpC,IAAAA,OAAO,EAAE8O,OAAO,CAAC9O,OAAO,GAAGU,eAAe,CAACoO,OAAO,CAAC9O,OAAO,CAAC,GAAGpD,SAAS;IACvEX,IAAI,EAAE,OAAO6S,OAAO,CAAC7S,IAAI,KAAK,QAAQ,GAAG6S,OAAO,CAAC7S,IAAI,GAAGW;GACzD;AACH;AAAC,IAAAmS,QAAA,oBAAAzS,OAAA,EAAA;AAED,IAAa0S,MAAM,gBAAA,YAAA;AAOjB,EAAA,SAAAA,SAAc;AAAAjW,IAAAA,eAAA,OAAAiW,MAAA,CAAA;AANdlS,IAAAA,0BAAA,OAAAiS,QAAQ,EAAA,MAAA,CAAA;AAONhS,IAAAA,sBAAA,CAAKgS,QAAQ,EAAb,IAAI,EAAY,EAAJ,CAAC;AACf,EAAA;EAAC,OAAArV,YAAA,CAAAsV,MAAA,EAAA,CAAA;IAAArV,GAAA,EAAA,SAAA;IAAA2N,GAAA,EAND,SAAAA,GAAAA,GAA6B;AAC3B,MAAA,OAAOpK,sBAAA,CAAK6R,QAAQ,EAAb,IAAY,CAAC;AACtB,IAAA;AAAC,GAAA,EAAA;IAAApV,GAAA,EAAA,YAAA;AAAAC,IAAAA,KAAA,EAMD,SAAAkO,UAAUA,CAAC5B,MAAkB,EAAU;AACrC,MAAA,IAAM+I,GAAQ,GAAG;QACfhN,EAAE,EAAEsM,UAAU,EAAE;AAChBO,QAAAA,OAAO,EAAEF,gBAAgB,CAAC1I,MAAM,CAAC;AACjCgJ,QAAAA,QAAQ,EAAE;AAAEJ,UAAAA,OAAO,EAAEN,IAAI,CAACC,GAAG;AAAG;OACjC;MAEDvR,sBAAA,CAAK6R,QAAQ,EAAb,IAAY,CAAC,CAAC5P,IAAI,CAAC8P,GAAG,CAAC;MAEvB,OAAOA,GAAG,CAAChN,EAAE;AACf,IAAA;AAAC,GAAA,EAAA;IAAAtI,GAAA,EAAA,aAAA;AAAAC,IAAAA,KAAA,EAED,SAAAoO,WAAWA,CAACnM,QAAkB,EAAEsT,SAA8B,EAAU;AACtE,MAAA,IAAMlN,EAAE,GAAGkN,SAAS,IAAIZ,UAAU,EAAE;;AAEpC;AACA;AACA;;AAEA,MAAA,IAAMa,UAAuB,GAAG;QAC9BrT,MAAM,EAAEF,QAAQ,CAACE,MAAM;AAAE;AACzBiE,QAAAA,OAAO,EAAE9G,MAAM,CAACqH,WAAW,CAAC1E,QAAQ,CAACmE,OAAO;OAC7C;AAED,MAAA,IAAMqP,aAAa,GAAGnS,sBAAA,CAAK6R,QAAQ,EAAb,IAAY,CAAC,CAACO,SAAS,CAAC,UAACL,GAAG,EAAA;AAAA,QAAA,OAAKA,GAAG,CAAChN,EAAE,KAAKA,EAAE;MAAA,CAAA,CAAC;AAErE,MAAA,IAAIoN,aAAa,GAAG,EAAE,EAAE;QACtBnS,sBAAA,CAAK6R,QAAQ,EAAb,IAAY,CAAC,CAACM,aAAa,CAAC,CAACxT,QAAQ,GAAGuT,UAAU;AAClDlS,QAAAA,sBAAA,CAAK6R,QAAQ,EAAb,IAAY,CAAC,CAACM,aAAa,CAAC,CAACH,QAAQ,CAACrT,QAAQ,GAAG2S,IAAI,CAACC,GAAG,EAAE;AAC7D,MAAA,CAAC,MAAM;AACLvR,QAAAA,sBAAA,CAAK6R,QAAQ,EAAb,IAAY,CAAC,CAAC5P,IAAI,CAAC;AACjB8C,UAAAA,EAAE,EAAFA,EAAE;AACFpG,UAAAA,QAAQ,EAAEuT,UAAU;AACpBF,UAAAA,QAAQ,EAAE;AAAErT,YAAAA,QAAQ,EAAE2S,IAAI,CAACC,GAAG;AAAG;AACnC,SAAC,CAAC;AACJ,MAAA;AAEA,MAAA,OAAOxM,EAAE;AACX,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA;;AC9EH;;AAGA;AAAA,IAAAsN,eAAA,oBAAAjT,OAAA,EAAA;AAAA,IASMkT,aAAa,gBAAA,YAAA;AAiBjB,EAAA,SAAAA,cACEzO,YAA0C,EAC1ClE,MAAc,EACd8I,OAAgB,EAEhB;AAAA,IAAA,IADA3E,UAA+B,GAAAtE,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAIsQ,YAAY,EAAE;AAAAjU,IAAAA,eAAA,OAAAyW,aAAA,CAAA;IAAAvW,eAAA,CAAA,IAAA,EAAA,QAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,cAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,YAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,SAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,YAAA,EAAA,MAAA,CAAA;AARtD6D,IAAAA,0BAAA,OAAAyS,eAAe,EAAA,MAAA,CAAA;IAAuDtW,eAAA,CAAA,IAAA,EAAA,QAAA,EAAA,MAAA,CAAA;AAUpE,IAAA,IAAI,CAACwW,mBAAmB,CAAC5S,MAAM,CAAC;AAEhC,IAAA,IAAI,EAAE8I,OAAO,YAAYnJ,OAAO,CAAC,EAAE;AACjC,MAAA,MAAM,IAAIiD,SAAS,CAAC,4CAA4C,CAAC;AACnE,IAAA;IAEA,IAAI,CAAC5C,MAAM,GAAG,IAAI,CAAC6S,oBAAoB,CAAC7S,MAAM,CAAC;IAC/C,IAAI,CAACkE,YAAY,GAAGA,YAAY;IAChC,IAAI,CAACC,UAAU,GAAGA,UAAU;IAC5B,IAAI,CAAC2E,OAAO,GAAGA,OAAO;AAEtB,IAAA,IAAI,CAACzC,UAAU,GAAG,IAAIuI,UAAU,CAC9B,IAAI,CAAC9F,OAAO,EACZ,IAAI,CAAC9I,MAAM,CAAC8S,iBACd,CAAC;IAED,IAAI9S,MAAM,CAAC+S,aAAa,EAAE;AACxB,MAAA,IAAI,CAAC/H,MAAM,GAAG,IAAImH,MAAM,EAAE;AAC5B,IAAA;AAEAjS,IAAAA,sBAAA,CAAKwS,eAAe,EAApB,IAAI,EAAmB,EAAJ,CAAC;AACtB,EAAA;;AAEA;AACF;AACA;AACA;AACA;EAJE,OAAA7V,YAAA,CAAA8V,aAAA,EAAA,CAAA;IAAA7V,GAAA,EAAA,eAAA;AAAAC,IAAAA,KAAA,EAKA,SAAAiW,aAAaA,CAA6BlW,GAAM,EAAwB;MACtE,IAAI,CAACuD,sBAAA,CAAKqS,eAAe,EAApB,IAAmB,CAAC,CAAC5V,GAAG,CAAC,EAAE;QAC9B,IAAMiG,QAAQ,GAAG,IAAI,CAAC+F,OAAO,CAAClI,qBAAqB,CAAC9D,GAAG,CAAC;QAExD,IAAI,CAACiG,QAAQ,EAAE;AACb,UAAA,IAAMkQ,QAAQ,GAAGhC,eAAe,CAACnU,GAAG,EAAE,IAAI,CAACgM,OAAO,CAACrI,cAAc,EAAE,EAAE,CAAC,CAAC;UAEvE,IAAMyS,WAAW,GAAGD,QAAQ,GAAA,kBAAA,CAAApR,MAAA,CAAqBoR,QAAQ,WAAO,EAAE;UAElE,MAAM,IAAIxW,KAAK,CAAA,0CAAA,CAAAoF,MAAA,CAC6B/E,GAAG,EAAA,KAAA,CAAA,CAAA+E,MAAA,CAAKqR,WAAW,CAC/D,CAAC;AACH,QAAA;QAEA7S,sBAAA,CAAKqS,eAAe,EAApB,IAAmB,CAAC,CAAC5V,GAAG,CAAC,GAAG+F,kBAAkB,CAC5C,IAAI,EACJE,QAAQ,EACR,IAAI,CAAC/C,MAAM,CAAC8S,iBACd,CAAC;AACH,MAAA;MAEA,OAAOzS,sBAAA,CAAKqS,eAAe,EAApB,IAAmB,CAAC,CAAC5V,GAAG,CAAC;AAClC,IAAA;AAAC,GAAA,EAAA;IAAAA,GAAA,EAAA,sBAAA;AAAAC,IAAAA,KAAA,EAED,SAAQ8V,oBAAoBA,CAAC7S,MAAc,EAAU;MACnD,IAAMmT,SAAS,GAAGnT,MAAM;AACxBmT,MAAAA,SAAS,CAAC7J,oBAAoB,GAC5BtJ,MAAM,CAACsJ,oBAAoB,KAAKvJ,SAAS,GACrC,IAAI,GACJC,MAAM,CAACsJ,oBAAoB;AAEjC6J,MAAAA,SAAS,CAACrI,iBAAiB,GAAG9K,MAAM,CAAC8K,iBAAiB,IAAI,QAAQ;AAElE,MAAA,OAAOqI,SAAS;AAClB,IAAA;AAAC,GAAA,EAAA;IAAArW,GAAA,EAAA,qBAAA;AAAAC,IAAAA,KAAA,EAED,SAAQ6V,mBAAmBA,CAAC5S,MAAc,EAAQ;MAChD,IAAI,EAAEA,MAAM,IAAIA,MAAM,CAAC0I,IAAI,IAAI1I,MAAM,CAAC2I,MAAM,CAAC,EAAE;QAC7C,MAAM,IAAIyK,UAAU,CAAA,6JAGpB,CAAC;AACH,MAAA;AACF,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA;;AClHsB,IAYVC,sBAAsB,gBAAA,YAAA;AAQnC,EAAA,SAAAA,sBAAAA,CAAYC,oBAAuB,EAAEtI,MAAe,EAAE;AAAA9O,IAAAA,eAAA,OAAAmX,sBAAA,CAAA;IAAAjX,eAAA,CAAA,IAAA,EAAA,sBAAA,EAAA,MAAA,CAAA;IAAAA,eAAA,CAAA,IAAA,EAAA,QAAA,EAAA,MAAA,CAAA;AACpD,IAAA,IAAI4O,MAAM,EAAE;MACV,IAAI,CAACA,MAAM,GAAGA,MAAM;AACtB,IAAA;IACA,IAAI,CAACsI,oBAAoB,GAAGA,oBAAoB;AAChD,IAAA,IAAI,OAAO,IAAI,CAACC,yBAAyB,KAAK,UAAU,EAAE;AACxD,MAAA,IAAI,CAACA,yBAAyB,CAAC,IAAI,CAACD,oBAAoB,CAAC;AAC3D,IAAA;AACF,EAAA;EAAC,OAAAzW,YAAA,CAAAwW,sBAAA,EAAA,CAAA;IAAAvW,GAAA,EAAA,mBAAA;AAAAC,IAAAA,KAAA;IAaD,SAAUyW,iBAAiBA,CAACxU,QAAkB,EAAkB;AAC9D,MAAA,OAAOA,QAAQ,CACZC,KAAK,EAAE,CACPhC,IAAI,EAAE,CACN+J,IAAI,CAAC,UAAC5H,IAAe,EAAK;AACzB,QAAA,IAAIA,IAAI,CAACC,KAAK,KAAK,eAAe,EAAE;UAClC,MAAM,IAAI/B,iBAAiB,CACzB8B,IAAI,CAACC,KAAK,EACVP,wBAAwB,CAACE,QAAQ,CACnC,CAAC;AACH,QAAA;AACA,QAAA,IAAII,IAAI,CAACC,KAAK,KAAK,eAAe,EAAE;UAClC,MAAM,IAAI5B,iBAAiB,CACzB2B,IAAI,CAACC,KAAK,EACVP,wBAAwB,CAACE,QAAQ,CACnC,CAAC;AACH,QAAA;QACA,MAAM,IAAIzC,UAAU,CAAC6C,IAAI,CAACC,KAAK,EAAEP,wBAAwB,CAACE,QAAQ,CAAC,CAAC;AACtE,MAAA,CAAC,CAAC,CAAA,OAAA,CACI,CAAC,UAACiJ,GAAG,EAAK;AACd,QAAA,IAAI,EAAEA,GAAG,YAAY1L,UAAU,CAAC,EAAE;UAChC,MAAM,IAAIA,UAAU,CAAC0L,GAAG,CAAClG,IAAI,EAAEjD,wBAAwB,CAACE,QAAQ,CAAC,CAAC;AACpE,QAAA;AAEA,QAAA,MAAMiJ,GAAG;AACX,MAAA,CAAC,CAAC;AACN,IAAA;AAAC,GAAA,EAAA;IAAAnL,GAAA,EAAA,uBAAA;AAAAC,IAAAA,KAAA,EAED,SAAU0W,qBAAqBA,CAACzT,MAAiB,EAAU;AACzD,MAAA,IAAM0T,GAAG,GAAG,IAAI5N,GAAG,CAAA,EAAA,CAAAjE,MAAA,CAAI7B,MAAM,CAAC2I,MAAM,SAAA9G,MAAA,CAAM7B,MAAM,CAAC0I,IAAI,CAAE,CAAC;MAExD,IAAI1I,MAAM,CAAC4I,IAAI,EAAE;AACf8K,QAAAA,GAAG,CAAC9K,IAAI,CAAC5I,MAAM,CAAC4I,IAAI,CAAC;AACvB,MAAA;AAEA,MAAA,OAAO8K,GAAG,CAAC1O,QAAQ,EAAE;AACvB,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA;;ACxDH;AACA;AACA;AACA;AACA;AAJA,IAKM2O,mCAAmC,0BAAAC,qBAAA,EAAA;AAAA,EAAA,SAAAD,mCAAAA,GAAA;AAAAzX,IAAAA,eAAA,OAAAyX,mCAAA,CAAA;AAAA,IAAA,OAAAxX,UAAA,CAAA,IAAA,EAAAwX,mCAAA,EAAA9T,SAAA,CAAA;AAAA,EAAA;EAAAjD,SAAA,CAAA+W,mCAAA,EAAAC,qBAAA,CAAA;EAAA,OAAA/W,YAAA,CAAA8W,mCAAA,EAAA,CAAA;IAAA7W,GAAA,EAAA,eAAA;IAAAC,KAAA;AAIvC;AACF;AACA;IACE,SAAA8W,aAAaA,CACXC,UAAmC,EACK;AACxC,MAAA,IAAI,CAACC,wBAAwB,CAACD,UAAU,CAAC;MAEzC,IAAMvO,GAAG,GAAG,IAAI,CAACkO,qBAAqB,CAAC,IAAI,CAACH,oBAAoB,CAAC;AAEjE,MAAA,IAAMjK,MAAM,GAAG;AACb9C,QAAAA,MAAM,EAAE,MAAM;AACdpD,QAAAA,OAAO,EAAE;AACP,UAAA,cAAc,EAAE;SACjB;QACD/D,IAAI,EAAE,IAAI4U,eAAe,CAAC;AACxBC,UAAAA,UAAU,EAAE,oBAAoB;AAChCC,UAAAA,SAAS,EAAE,IAAI,CAACZ,oBAAoB,CAACa,QAAQ;AAC7CC,UAAAA,aAAa,EAAE,IAAI,CAACd,oBAAoB,CAACe,YAAY;AAAE;AACvDC,UAAAA,YAAY,EAAE,IAAI,CAAChB,oBAAoB,CAACiB,WAAW;UACnDC,IAAI,EAAEV,UAAU,CAACU;SAClB,CAAC,CAACxP,QAAQ;OACZ;MAED,IAAI,IAAI,CAACgG,MAAM,EAAE;AACf,QAAA,IAAI,CAACA,MAAM,CAACC,UAAU,CAAA3K,cAAA,CAAA;AAAGiF,UAAAA,GAAG,EAAHA;SAAG,EAAK8D,MAAM,CAAE,CAAC;AAC5C,MAAA;AAEA,MAAA,OAAO6B,KAAK,CAAC3F,GAAG,EAAE8D,MAAM,CAAC;AAC3B,IAAA;;AAEA;AACF;AACA;AACA;AAHE,GAAA,EAAA;IAAAvM,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAIA,SAAA4M,YAAYA,CACV8K,cAA6C,EACL;MACxC,IAAI,CAACA,cAAc,EAAE;AACnB,QAAA,MAAM,IAAIhY,KAAK,CACb,mEACF,CAAC;AACH,MAAA;MAEA,IAAI,EAACgY,cAAc,KAAA,IAAA,IAAdA,cAAc,eAAdA,cAAc,CAAEC,aAAa,CAAA,EAAE;AAClC,QAAA,MAAM,IAAIjY,KAAK,CAAC,sDAAsD,CAAC;AACzE,MAAA;MAEA,IAAM8I,GAAG,GAAG,IAAI,CAACkO,qBAAqB,CAAC,IAAI,CAACH,oBAAoB,CAAC;AAEjE,MAAA,IAAMjK,MAAM,GAAG;AACb9C,QAAAA,MAAM,EAAE,MAAM;AACdpD,QAAAA,OAAO,EAAE;AACP,UAAA,cAAc,EAAE;SACjB;QACD/D,IAAI,EAAE,IAAI4U,eAAe,CAAC;AACxBC,UAAAA,UAAU,EAAE,eAAe;AAC3BC,UAAAA,SAAS,EAAE,IAAI,CAACZ,oBAAoB,CAACa,QAAQ;AAC7CC,UAAAA,aAAa,EAAE,IAAI,CAACd,oBAAoB,CAACe,YAAY;UACrDK,aAAa,EAAED,cAAc,CAACC;SAC/B,CAAC,CAAC1P,QAAQ;OACZ;MAED,IAAI,IAAI,CAACgG,MAAM,EAAE;AACf,QAAA,IAAI,CAACA,MAAM,CAACC,UAAU,CAAA3K,cAAA,CAAA;AAAGiF,UAAAA,GAAG,EAAHA;SAAG,EAAK8D,MAAM,CAAE,CAAC;AAC5C,MAAA;AAEA,MAAA,OAAO6B,KAAK,CAAC3F,GAAG,EAAE8D,MAAM,CAAC;AAC3B,IAAA;AAAC,GAAA,EAAA;IAAAvM,GAAA,EAAA,2BAAA;AAAAC,IAAAA,KAAA,EAED,SAAAwW,yBAAyBA,CACvBvT,MAAiD,EAC3C;AACN,MAAA,IAAI,CAACA,MAAM,IAAI3D,MAAM,CAACgQ,IAAI,CAACrM,MAAM,CAAC,CAACF,MAAM,KAAK,CAAC,EAAE;AAC/C,QAAA,MAAM,IAAIsT,UAAU,CAAC,mCAAmC,CAAC;AAC3D,MAAA;MAEA,IAAI,EAAEpT,MAAM,CAAC0I,IAAI,IAAI1I,MAAM,CAAC2I,MAAM,CAAC,EAAE;AACnC,QAAA,MAAM,IAAIyK,UAAU,CAClB,sFACF,CAAC;AACH,MAAA;MAEA,IAAI,EAAEpT,MAAM,CAACmU,QAAQ,IAAInU,MAAM,CAACqU,YAAY,CAAC,EAAE;AAC7C,QAAA,MAAM,IAAIjB,UAAU,CAClB,gGACF,CAAC;AACH,MAAA;AAEA,MAAA,IAAI,CAACpT,MAAM,CAACuU,WAAW,EAAE;AACvB,QAAA,MAAM,IAAInB,UAAU,CAClB,iFACF,CAAC;AACH,MAAA;AACF,IAAA;AAAC,GAAA,EAAA;IAAAtW,GAAA,EAAA,0BAAA;AAAAC,IAAAA,KAAA,EAED,SAAQgX,wBAAwBA,CAACD,UAAmC,EAAQ;AAC1E,MAAA,IAAI,EAAEA,UAAU,IAAIzX,MAAM,CAACgQ,IAAI,CAACyH,UAAU,CAAC,CAAChU,MAAM,GAAG,CAAC,CAAC,EAAE;AACvD,QAAA,MAAM,IAAIsT,UAAU,CAAC,wBAAwB,CAAC;AAChD,MAAA;AAEA,MAAA,IAAI,CAACU,UAAU,CAACU,IAAI,EAAE;AACpB,QAAA,MAAM,IAAIpB,UAAU,CAAC,oCAAoC,CAAC;AAC5D,MAAA;AACF,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA,CA5G+CC,sBAAsB;;ACjCxE;AACA;;AAQO,SAASsB,cAAcA,CAC5BC,QAAkC,EAChB;EAClB,IAAMC,KAAmD,GAAG,EAAE;EAE9D,SAASC,QAAQA,GAAgD;AAAA,IAAA,KAAA,IAAAC,IAAA,GAAAlV,SAAA,CAAAC,MAAA,EAA7BgU,UAAU,GAAA,IAAAtQ,KAAA,CAAAuR,IAAA,GAAAC,IAAA,GAAA,CAAA,EAAAA,IAAA,GAAAD,IAAA,EAAAC,IAAA,EAAA,EAAA;AAAVlB,MAAAA,UAAU,CAAAkB,IAAA,CAAA,GAAAnV,SAAA,CAAAmV,IAAA,CAAA;AAAA,IAAA;AAC5C,IAAA,IAAMC,QAAQ,GAAG5E,IAAI,CAACC,SAAS,CAACwD,UAAU,CAAC;AAC3C,IAAA,IAAMoB,UAAU,GAAGL,KAAK,CAACI,QAAQ,CAAC;AAElC,IAAA,IAAIC,UAAU,EAAE;AACd,MAAA,OAAOA,UAAU;AACnB,IAAA;;AAEA;IACA,IAAMnY,KAAK,GAAG6X,QAAQ,CAACO,KAAK,CAAC,IAAI,EAAErB,UAAU,CAAC;AAC9Ce,IAAAA,KAAK,CAACI,QAAQ,CAAC,GAAGlY,KAAK;IAEvB,IAAI,CAACA,KAAK,IAAI,OAAOA,KAAK,CAACiK,IAAI,KAAK,UAAU,EAAE;AAC9C,MAAA,MAAM,IAAIvK,KAAK,CACb,8DACF,CAAC;AACH,IAAA;;AAEA;AACA,IAAA,OAAOM,KAAK,CAACiK,IAAI,CACf,UAACoO,aAAgB,EAAK;AACpBP,MAAAA,KAAK,CAACI,QAAQ,CAAC,GAAG,KAAK;AAEvB,MAAA,OAAOG,aAAa;IACtB,CAAC,EACD,UAACnN,GAAU,EAAK;AACd4M,MAAAA,KAAK,CAACI,QAAQ,CAAC,GAAG,KAAK;AAEvB,MAAA,MAAMhN,GAAG;AACX,IAAA,CACF,CAAC;AACH,EAAA;EAEA6M,QAAQ,CAACD,KAAK,GAAGA,KAAK;AAEtB,EAAA,OAAOC,QAAQ;AACjB;;AC9CA,IAAMO,oBAAkB,GAAG,mCAAmC;AAC9D,IAAMC,0BAAwB,GAC5B,sFAAsF;AACxF,IAAMC,kCAAgC,GACpC,gGAAgG;AAAC,IAyB7FC,0BAA0B,0BAAA5B,qBAAA,EAAA;EAI9B,SAAA4B,0BAAAA,CAAYlC,oBAA4B,EAAE;AAAA,IAAA,IAAArX,KAAA;AAAAC,IAAAA,eAAA,OAAAsZ,0BAAA,CAAA;AACxCvZ,IAAAA,KAAA,GAAAE,UAAA,CAAA,IAAA,EAAAqZ,0BAAA,GAAMlC,oBAAoB,CAAA,CAAA;IAC1BrX,KAAA,CAAK4X,aAAa,GAAGc,cAAc,CAAC1Y,KAAA,CAAK4X,aAAa,CAAC;AAAC,IAAA,OAAA5X,KAAA;AAC1D,EAAA;EAACW,SAAA,CAAA4Y,0BAAA,EAAA5B,qBAAA,CAAA;EAAA,OAAA/W,YAAA,CAAA2Y,0BAAA,EAAA,CAAA;IAAA1Y,GAAA,EAAA,eAAA;AAAAC,IAAAA,KAAA,EAED,SAAA8W,aAAaA,GAEwB;AAAA,MAAA,IADnC4B,cAA8B,GAAA5V,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,EAAE;AAEnC,MAAA,IAAMT,IAAI,GAAG,IAAI4U,eAAe,CAAC;AAC/BC,QAAAA,UAAU,EAAE,oBAAoB;AAChCC,QAAAA,SAAS,EAAE,IAAI,CAACZ,oBAAoB,CAACa,QAAQ;AAC7CC,QAAAA,aAAa,EAAE,IAAI,CAACd,oBAAoB,CAACe;AAC3C,OAAC,CAAC;MACF,IAAIoB,cAAc,CAACC,KAAK,EAAE;QACxBtW,IAAI,CAACuW,MAAM,CAAC,OAAO,EAAEF,cAAc,CAACC,KAAK,CAAC;AAC5C,MAAA,CAAC,MAAM,IAAI,IAAI,CAACpC,oBAAoB,CAACoC,KAAK,EAAE;QAC1CtW,IAAI,CAACuW,MAAM,CAAC,OAAO,EAAE,IAAI,CAACrC,oBAAoB,CAACoC,KAAK,CAAC;AACvD,MAAA;AAEA,MAAA,IAAMrM,MAAM,GAAG;AACb9C,QAAAA,MAAM,EAAE,MAAM;AACdpD,QAAAA,OAAO,EAAE;AACP,UAAA,cAAc,EAAE;SACjB;AACD/D,QAAAA,IAAI,EAAEA,IAAI,CAAC4F,QAAQ;OACpB;MAED,IAAMO,GAAG,GAAG,IAAI,CAACkO,qBAAqB,CAAC,IAAI,CAACH,oBAAoB,CAAC;MAEjE,IAAI,IAAI,CAACtI,MAAM,EAAE;AACf,QAAA,IAAI,CAACA,MAAM,CAACC,UAAU,CAAA3K,cAAA,CAAA;AAAGiF,UAAAA,GAAG,EAAHA;SAAG,EAAK8D,MAAM,CAAE,CAAC;AAC5C,MAAA;AAEA,MAAA,OAAO6B,KAAK,CAAC3F,GAAG,EAAE8D,MAAM,CAAC;AAC3B,IAAA;AAAC,GAAA,EAAA;IAAAvM,GAAA,EAAA,cAAA;IAAAC,KAAA,EAED,SAAA4M,YAAYA;AACV;AACAgB,IAAAA,WAAyC,EACN;AACnC,MAAA,OAAO,IAAI,CAACkJ,aAAa,CAAC,EAAE,CAAC;AAC/B,IAAA;AAAC,GAAA,EAAA;IAAA/W,GAAA,EAAA,2BAAA;AAAAC,IAAAA,KAAA,EAED,SAAAwW,yBAAyBA,CAACvT,MAAc,EAAQ;AAC9C,MAAA,IAAI,CAACA,MAAM,IAAI3D,MAAM,CAACgQ,IAAI,CAACrM,MAAM,CAAC,CAACF,MAAM,KAAK,CAAC,EAAE;AAC/C,QAAA,MAAM,IAAIsT,UAAU,CAACiC,oBAAkB,CAAC;AAC1C,MAAA;MAEA,IAAI,EAAErV,MAAM,CAAC0I,IAAI,IAAI1I,MAAM,CAAC2I,MAAM,CAAC,EAAE;AACnC,QAAA,MAAM,IAAIyK,UAAU,CAACkC,0BAAwB,CAAC;AAChD,MAAA;MAEA,IAAI,EAAEtV,MAAM,CAACmU,QAAQ,IAAInU,MAAM,CAACqU,YAAY,CAAC,EAAE;AAC7C,QAAA,MAAM,IAAIjB,UAAU,CAACmC,kCAAgC,CAAC;AACxD,MAAA;AACF,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA,CA3DsClC,sBAAsB;;AC9B/D,IAAMgC,kBAAkB,GAAG,mCAAmC;AAC9D,IAAMC,wBAAwB,GAC5B,sFAAsF;AACxF,IAAMC,gCAAgC,GACpC,gGAAgG;AAElG,IAAMK,iBAAiB,GAAG,wBAAwB;AAClD,IAAMC,6BAA6B,GACjC,oDAAoD;AAAC,IA2BjDC,iBAAiB,0BAAAlC,qBAAA,EAAA;AAAA,EAAA,SAAAkC,iBAAAA,GAAA;AAAA5Z,IAAAA,eAAA,OAAA4Z,iBAAA,CAAA;AAAA,IAAA,OAAA3Z,UAAA,CAAA,IAAA,EAAA2Z,iBAAA,EAAAjW,SAAA,CAAA;AAAA,EAAA;EAAAjD,SAAA,CAAAkZ,iBAAA,EAAAlC,qBAAA,CAAA;EAAA,OAAA/W,YAAA,CAAAiZ,iBAAA,EAAA,CAAA;IAAAhZ,GAAA,EAAA,eAAA;AAAAC,IAAAA,KAAA,EACrB,SAAA8W,aAAaA,CACX4B,cAAuC,EACP;AAChC,MAAA,IAAI,CAAC1B,wBAAwB,CAAC0B,cAAc,CAAC;AAE7C,MAAA,IAAMrW,IAAI,GAAG,IAAI4U,eAAe,CAAC;AAC/BC,QAAAA,UAAU,EAAE,UAAU;QACtB8B,QAAQ,EAAEN,cAAc,CAACM,QAAQ;QACjCC,QAAQ,EAAEP,cAAc,CAACO,QAAQ;AACjC9B,QAAAA,SAAS,EAAE,IAAI,CAACZ,oBAAoB,CAACa,QAAQ;AAC7CC,QAAAA,aAAa,EAAE,IAAI,CAACd,oBAAoB,CAACe;AAC3C,OAAC,CAAC;MAEF,IAAIoB,cAAc,CAACC,KAAK,EAAE;QACxBtW,IAAI,CAACuW,MAAM,CAAC,OAAO,EAAEF,cAAc,CAACC,KAAK,CAAC;AAC5C,MAAA,CAAC,MAAM,IAAI,IAAI,CAACpC,oBAAoB,CAACoC,KAAK,EAAE;QAC1CtW,IAAI,CAACuW,MAAM,CAAC,OAAO,EAAE,IAAI,CAACrC,oBAAoB,CAACoC,KAAK,CAAC;AACvD,MAAA;MAEA,IAAMnQ,GAAG,GAAG,IAAI,CAACkO,qBAAqB,CAAC,IAAI,CAACH,oBAAoB,CAAC;AAEjE,MAAA,IAAMjK,MAAM,GAAG;AACb9C,QAAAA,MAAM,EAAE,MAAM;AACdpD,QAAAA,OAAO,EAAE;AACP,UAAA,cAAc,EAAE;SACjB;AACD/D,QAAAA,IAAI,EAAEA,IAAI,CAAC4F,QAAQ;OACpB;MAED,IAAI,IAAI,CAACgG,MAAM,EAAE;AACf,QAAA,IAAI,CAACA,MAAM,CAACC,UAAU,CAAA3K,cAAA,CAAA;AAAGiF,UAAAA,GAAG,EAAHA;SAAG,EAAK8D,MAAM,CAAE,CAAC;AAC5C,MAAA;AAEA,MAAA,OAAO6B,KAAK,CAAC3F,GAAG,EAAE8D,MAAM,CAAC;AAC3B,IAAA;AAAC,GAAA,EAAA;IAAAvM,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAED,SAAA4M,YAAYA,CACVgB,WAAiC,EACD;MAChC,IAAMhB,YAAY,GAAGgB,WAAW,KAAA,IAAA,IAAXA,WAAW,KAAA,MAAA,GAAA,MAAA,GAAXA,WAAW,CAAE+J,aAAa;MAC/C,IAAI,CAAC/K,YAAY,EAAE;AACjB,QAAA,MAAM,IAAIlN,KAAK,CACb,mEACF,CAAC;AACH,MAAA;AAEA,MAAA,IAAM2C,IAAI,GAAG,IAAI4U,eAAe,CAAC;AAC/BC,QAAAA,UAAU,EAAE,eAAe;AAC3BC,QAAAA,SAAS,EAAE,IAAI,CAACZ,oBAAoB,CAACa,QAAQ;AAC7CC,QAAAA,aAAa,EAAE,IAAI,CAACd,oBAAoB,CAACe,YAAY;AACrDK,QAAAA,aAAa,EAAE/K;AACjB,OAAC,CAAC;AAEF,MAAA,IAAI,IAAI,CAAC2J,oBAAoB,CAACoC,KAAK,EAAE;QACnCtW,IAAI,CAACuW,MAAM,CAAC,OAAO,EAAE,IAAI,CAACrC,oBAAoB,CAACoC,KAAK,CAAC;AACvD,MAAA;MAEA,IAAMnQ,GAAG,GAAG,IAAI,CAACkO,qBAAqB,CAAC,IAAI,CAACH,oBAAoB,CAAC;AAEjE,MAAA,IAAMjK,MAAM,GAAG;AACb9C,QAAAA,MAAM,EAAE,MAAM;AACdpD,QAAAA,OAAO,EAAE;AACP,UAAA,cAAc,EAAE;SACjB;AACD/D,QAAAA,IAAI,EAAEA,IAAI,CAAC4F,QAAQ;OACpB;MAED,IAAI,IAAI,CAACgG,MAAM,EAAE;AACf,QAAA,IAAI,CAACA,MAAM,CAACC,UAAU,CAAA3K,cAAA,CAAA;AAAGiF,UAAAA,GAAG,EAAHA;SAAG,EAAK8D,MAAM,CAAE,CAAC;AAC5C,MAAA;AAEA,MAAA,OAAO6B,KAAK,CAAC3F,GAAG,EAAE8D,MAAM,CAAC;AAC3B,IAAA;AAAC,GAAA,EAAA;IAAAvM,GAAA,EAAA,2BAAA;AAAAC,IAAAA,KAAA,EAED,SAAAwW,yBAAyBA,CAACvT,MAAc,EAAQ;AAC9C,MAAA,IAAI,CAACA,MAAM,IAAI3D,MAAM,CAACgQ,IAAI,CAACrM,MAAM,CAAC,CAACF,MAAM,KAAK,CAAC,EAAE;AAC/C,QAAA,MAAM,IAAIsT,UAAU,CAACiC,kBAAkB,CAAC;AAC1C,MAAA;MAEA,IAAI,EAAErV,MAAM,CAAC0I,IAAI,IAAI1I,MAAM,CAAC2I,MAAM,CAAC,EAAE;AACnC,QAAA,MAAM,IAAIyK,UAAU,CAACkC,wBAAwB,CAAC;AAChD,MAAA;MAEA,IAAI,EAAEtV,MAAM,CAACmU,QAAQ,IAAInU,MAAM,CAACqU,YAAY,CAAC,EAAE;AAC7C,QAAA,MAAM,IAAIjB,UAAU,CAACmC,gCAAgC,CAAC;AACxD,MAAA;AACF,IAAA;AAAC,GAAA,EAAA;IAAAzY,GAAA,EAAA,0BAAA;AAAAC,IAAAA,KAAA,EAED,SAAAgX,wBAAwBA,CAACD,UAAmC,EAAQ;AAClE,MAAA,IAAI,EAAEA,UAAU,IAAIzX,MAAM,CAACgQ,IAAI,CAACyH,UAAU,CAAC,CAAChU,MAAM,GAAG,CAAC,CAAC,EAAE;AACvD,QAAA,MAAM,IAAIsT,UAAU,CAACwC,iBAAiB,CAAC;AACzC,MAAA;MAEA,IAAI,EAAE9B,UAAU,CAACiC,QAAQ,IAAIjC,UAAU,CAACkC,QAAQ,CAAC,EAAE;AACjD,QAAA,MAAM,IAAI5C,UAAU,CAACyC,6BAA6B,CAAC;AACrD,MAAA;AACF,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA,CAjG6BxC,sBAAsB;;;;ACjCtD;AACA;AACA;AACA;AAHA,IAIM4C,sBAAsB,gBAAA,YAAA;EAK1B,SAAAA,sBAAAA,CAAYjM,KAAY,EAAoD;AAAA,IAAA,IAAlDkM,gBAAyC,GAAArW,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,IAAI;AAAA3D,IAAAA,eAAA,OAAA+Z,sBAAA,CAAA;AAJ1EhW,IAAAA,0BAAA,OAAAkW,MAAM,EAAA,MAAA,CAAA;AAENlW,IAAAA,0BAAA,OAAAmW,iBAAiB,EAAA,MAAA,CAAA;AAGflW,IAAAA,sBAAA,CAAKiW,MAAM,EAAX,IAAI,EAAUnM,KAAJ,CAAC;AACX9J,IAAAA,sBAAA,CAAKkW,iBAAiB,EAAtB,IAAI,EAAqBF,gBAAJ,CAAC;AACxB,EAAA;EAAC,OAAArZ,YAAA,CAAAoZ,sBAAA,EAAA,CAAA;IAAAnZ,GAAA,EAAA,OAAA;AAAAuZ,IAAAA,GAAA,EAED,SAAAA,GAAAA,CAAUrM,KAAY,EAAE;AACtB9J,MAAAA,sBAAA,CAAKiW,MAAM,EAAX,IAAI,EAAUnM,KAAJ,CAAC;AACb,IAAA;AAAC,GAAA,EAAA;IAAAlN,GAAA,EAAA,eAAA;AAAAC,IAAAA,KAAA,EAED,SAAA8W,aAAaA,GAAmB;MAC9B,OAAOyC,OAAO,CAACC,OAAO,CAAClW,sBAAA,CAAK8V,MAAM,EAAX,IAAU,CAAC,CAAC;AACrC,IAAA;AAAC,GAAA,EAAA;IAAArZ,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAED,SAAA4M,YAAYA,CAACgB,WAAyB,EAAkB;MACtD,IAAI,OAAOtK,sBAAA,CAAK+V,iBAAiB,EAAtB,IAAqB,CAAC,KAAK,UAAU,EAAE;QAChD,OAAO/V,sBAAA,CAAK+V,iBAAiB,EAAtB,IAAqB,CAAC,CAAAI,IAAA,CAAtB,IAAI,EAAmB7L,WAAW,CAAA;AAC3C,MAAA;AAEA,MAAA,OAAO,IAAI,CAACkJ,aAAa,EAAE;AAC7B,IAAA;AAAC,GAAA,EAAA;IAAA/W,GAAA,EAAA,mBAAA;AAAAC,IAAAA,KAAA,EAED,SAAA0Z,iBAAiBA,GAAmB;AAClC,MAAA,OAAO,IAAI,CAAC5C,aAAa,EAAE;AAC7B,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA;;AClBH;AACA,SAAS6C,UAAUA,CAAC1X,QAAa,EAAwB;EACvD,OAAO,QAAOA,QAAQ,KAAA,IAAA,IAARA,QAAQ,uBAARA,QAAQ,CAAE/B,IAAI,CAAA,KAAK,UAAU;AAC7C;AAEA,SAAS0Z,gBAAgBA,CAACvX,IAAe,EAAEJ,QAAmB,EAAS;AACrE,EAAA,IAAIK,KAAK;AACT,EAAA,IAAIL,QAAQ,EAAE;AACZK,IAAAA,KAAK,GAAGP,wBAAwB,CAACE,QAAQ,CAAC;AAC5C,EAAA;AAEA,EAAA,IAAII,IAAI,CAACC,KAAK,KAAK,eAAe,EAAE;IAClC,MAAM,IAAI/B,iBAAiB,CAAC8B,IAAI,CAACC,KAAK,EAAEA,KAAK,CAAC;AAChD,EAAA;AACA,EAAA,IAAID,IAAI,CAACC,KAAK,KAAK,eAAe,EAAE;IAClC,MAAM,IAAI5B,iBAAiB,CAAC2B,IAAI,CAACC,KAAK,EAAEA,KAAK,CAAC;AAChD,EAAA;EAEA,MAAM,IAAI9C,UAAU,CAAC6C,IAAI,CAACC,KAAK,EAAEA,KAAK,CAAC;AACzC;AAAC,IAAAuX,eAAA,oBAAAnX,OAAA,EAAA;AAAA,IAAAoX,uBAAA,oBAAApX,OAAA,EAAA;AAAA,IAAAqX,aAAA,oBAAArX,OAAA,EAAA;AAAA,IAAAsX,OAAA,oBAAAtX,OAAA,EAAA;AAAA,IAEKuX,YAAY,gBAAA,YAAA;AAWhB,EAAA,SAAAA,YAAAA,CACEC,cAA0C,EAC1CC,YAAmC,EAGnC;AAAA,IAAA,IAFAC,cAAc,GAAAtX,SAAA,CAAAC,MAAA,GAAA,CAAA,IAAAD,SAAA,CAAA,CAAA,CAAA,KAAAE,SAAA,GAAAF,SAAA,CAAA,CAAA,CAAA,GAAG,kCAAkC;IAAA,IACnDmL,MAAe,GAAAnL,SAAA,CAAAC,MAAA,GAAA,CAAA,GAAAD,SAAA,MAAAE,SAAA;AAAA7D,IAAAA,eAAA,OAAA8a,YAAA,CAAA;AAdjB/W,IAAAA,0BAAA,OAAA2W,eAAe,EAAA,MAAA,CAAA;AAEf3W,IAAAA,0BAAA,OAAA4W,uBAAuB,EAAA,MAAA,CAAA;IAAUza,eAAA,CAAA,IAAA,EAAA,gBAAA,EAAA,MAAA,CAAA;AAIjC6D,IAAAA,0BAAA,OAAA6W,aAAa,EAAA,MAAA,CAAA;AAEb7W,IAAAA,0BAAA,OAAA8W,OAAO,EAAA,MAAA,CAAA;AAQL,IAAA,IAAI/L,MAAM,EAAE;AACV9K,MAAAA,sBAAA,CAAK6W,OAAO,EAAZ,IAAI,EAAW/L,MAAJ,CAAC;AACd,IAAA;AACA9K,IAAAA,sBAAA,CAAK0W,eAAe,EAApB,IAAI,EAAmBK,cAAJ,CAAC;AACpB/W,IAAAA,sBAAA,CAAK2W,uBAAuB,EAA5B,IAAI,EAA2B,KAAJ,CAAC;AAC5B,IAAA,IAAI,CAACO,eAAe,CAACF,YAAY,CAAC;IAClC,IAAI,CAACC,cAAc,GAAGA,cAAc;IAEpC,IAAI,CAACE,mBAAmB,GAAG,IAAI,CAACA,mBAAmB,CAACC,IAAI,CAAC,IAAI,CAAC;IAE9D,IAAI,CAACzD,aAAa,GAAGc,cAAc,CAAC,IAAI,CAACd,aAAa,CAAC;IACvD,IAAI,CAAClK,YAAY,GAAGgL,cAAc,CAAC,IAAI,CAAChL,YAAY,CAAC;AACvD,EAAA;EAAC,OAAA9M,YAAA,CAAAma,YAAA,EAAA,CAAA;IAAAla,GAAA,EAAA,iBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAqa,eAAeA,CAACF,YAAmC,EAAQ;AACzDhX,MAAAA,sBAAA,CAAK4W,aAAa,EAAlB,IAAI,EAAiBI,YAAJ,CAAC;AACpB,IAAA;AAAC,GAAA,EAAA;IAAApa,GAAA,EAAA,gBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAwa,cAAcA,GAAqB;AACjC,MAAA,OAAOlX,sBAAA,CAAKyW,aAAa,EAAlB,IAAiB,CAAC,CACtBU,OAAO,CAAC,IAAI,CAACL,cAAc,CAAC,CAC5BnQ,IAAI,CAAC,UAAC2D,WAAW,EAAA;QAAA,OAAK,CAAC,CAACA,WAAW;MAAA,CAAA,CAAC;AACzC,IAAA;AAAC,GAAA,EAAA;IAAA7N,GAAA,EAAA,gBAAA;AAAAC,IAAAA,KAAA,EAED,SAAAgN,cAAcA,GAA2B;MACvC,OAAO,IAAI,CAAC0N,oBAAoB,EAAE,CAACzQ,IAAI,CACrC,UAACgD,KAAK,EAAA;AAAA,QAAA,OAAKA,KAAK,IAAIA,KAAK,CAACH,YAAY;AAAA,MAAA,CACxC,CAAC;AACH,IAAA;AAAC,GAAA,EAAA;IAAA/M,GAAA,EAAA,sBAAA;AAAAC,IAAAA,KAAA,EAED,SAAA0a,oBAAoBA,GAAuC;AAAA,MAAA,IAAAxb,KAAA,GAAA,IAAA;AACzD,MAAA,OAAOoE,sBAAA,CAAKyW,aAAa,EAAlB,IAAiB,CAAC,CAACU,OAAO,CAAC,IAAI,CAACL,cAAc,CAAC,CAACnQ,IAAI,CAAC,UAACgD,KAAK,EAAK;AACrE,QAAA,IAAIA,KAAK,EAAE;AACT,UAAA,IAAM0N,WAAW,GAAGrH,IAAI,CAACE,KAAK,CAACvG,KAAK,CAAC;AAErC,UAAA,IAAI+D,OAAA,CAAO2J,WAAW,CAAA,KAAK,QAAQ,EAAE;AACnC,YAAA,OAAO,IAAI;AACb,UAAA;AAEA,UAAA,OAAOA,WAAW;AACpB,QAAA;AAEA,QAAA,IAAIrX,sBAAA,CAAKwW,uBAAuB,EAA5B5a,KAA2B,CAAC,EAAE;AAChC,UAAA,OAAO,IAAI;AACb,QAAA;QAEA,IAAI,OAAOoE,sBAAA,CAAKuW,eAAe,EAApB3a,KAAmB,CAAC,CAACwa,iBAAiB,KAAK,UAAU,EAAE;UAChE,OAAOpW,sBAAA,CAAKuW,eAAe,EAApB3a,KAAmB,CAAC,CAACwa,iBAAiB,EAAE;AACjD,QAAA;AAEA,QAAA,MAAM,IAAIha,KAAK,CAAC,kCAAkC,CAAC;AACrD,MAAA,CAAC,CAAC;AACJ,IAAA;AAAC,GAAA,EAAA;IAAAK,GAAA,EAAA,QAAA;AAAAC,IAAAA,KAAA,EAED,SAAAyO,MAAMA,GAAkB;AACtB,MAAA,OAAOnL,sBAAA,CAAKyW,aAAa,EAAlB,IAAiB,CAAC,CAACa,UAAU,CAAC,IAAI,CAACR,cAAc,CAAC;AAC3D,IAAA;AAAC,GAAA,EAAA;IAAAra,GAAA,EAAA,6BAAA;AAAAC,IAAAA,KAAA,EAED,SAAQ6a,2BAA2BA,CACjCC,YAAe,EACfC,aAAqB,EACH;MAClB,IAAI,CAACD,YAAY,EAAE;AACjB,QAAA,OAAOA,YAAY;AACrB,MAAA;AAEA,MAAA,IAAME,mBAAqC,GAAAzX,cAAA,CAAAA,cAAA,KACtCuX,YAAY,CAAA,EAAA,EAAA,EAAA;AACfG,QAAAA,UAAU,EAAE;OAAI,CACjB;MAED,IACE,OAAOD,mBAAmB,CAACE,UAAU,KAAK,WAAW,IACrDF,mBAAmB,CAACE,UAAU,KAAK;AACnC;QACA;AACAF,QAAAA,mBAAmB,CAACC,UAAU,GAC5BjH,IAAI,CAACmH,KAAK,CAACJ,aAAa,GAAG,IAAI,CAAC,GAAGC,mBAAmB,CAACE,UAAU;AACrE,MAAA;AAEA,MAAA,OAAOF,mBAAmB;AAC5B,IAAA;AAAC,GAAA,EAAA;IAAAjb,GAAA,EAAA,eAAA;AAAAC,IAAAA,KAAA,EAED,SAAA8W,aAAaA,CAACC,UAAmB,EAA6B;AAAA,MAAA,IAAAzW,MAAA,GAAA,IAAA;AAC5D,MAAA,IAAMya,aAAa,GAAGnG,IAAI,CAACC,GAAG,EAAE;MAEhC,OAAOvR,sBAAA,CAAKuW,eAAe,EAApB,IAAmB,CAAC,CACxB/C,aAAa,CAACC,UAAU,CAAC,CACzB9M,IAAI,CAAC,IAAI,CAACqQ,mBAAmB,CAAC,CAC9BrQ,IAAI,CAAC,UAAC5H,IAAI,EAAK;QACd,IAAM2Y,mBAAmB,GAAG1a,MAAI,CAACua,2BAA2B,CAC1DxY,IAAI,EACJ0Y,aACF,CAAC;QAED,OAAOza,MAAI,CAAC8a,iBAAiB,CAACJ,mBAAmB,CAAC,CAAC/Q,IAAI,CAAC,YAAM;AAC5D9G,UAAAA,sBAAA,CAAK2W,uBAAuB,EAA5BxZ,MAAI,EAA2B,IAAJ,CAAC;AAC5B,UAAA,OAAO0a,mBAAmB;AAC5B,QAAA,CAAC,CAAC;AACJ,MAAA,CAAC,CAAC;AACN,IAAA;AAAC,GAAA,EAAA;IAAAjb,GAAA,EAAA,cAAA;AAAAC,IAAAA,KAAA,EAED,SAAA4M,YAAYA,GAA8B;AAAA,MAAA,IAAAnM,MAAA,GAAA,IAAA;AACxC,MAAA,OAAO6C,sBAAA,CAAKyW,aAAa,EAAlB,IAAiB,CAAC,CAACU,OAAO,CAAC,IAAI,CAACL,cAAc,CAAC,CAACnQ,IAAI,CAAC,UAACgD,KAAK,EAAK;AACrE,QAAA,IAAM8N,aAAa,GAAGnG,IAAI,CAACC,GAAG,EAAE;AAChC,QAAA,OAAOvR,sBAAA,CAAKuW,eAAe,EAApBpZ,MAAmB,CAAC,CACxBmM,YAAY,CAACK,KAAK,GAAGqG,IAAI,CAACE,KAAK,CAACvG,KAAK,CAAC,GAAG,IAAI,CAAC,CAC9ChD,IAAI,CAACxJ,MAAI,CAAC6Z,mBAAmB,CAAC,CAC9BrQ,IAAI,CAAC,UAAC5H,IAAI,EAAK;UACd,IAAM2Y,mBAAmB,GAAGva,MAAI,CAACoa,2BAA2B,CAC1DxY,IAAI,EACJ0Y,aACF,CAAC;UAED,OAAOta,MAAI,CAAC2a,iBAAiB,CAACJ,mBAAmB,CAAC,CAAC/Q,IAAI,CACrD,YAAA;AAAA,YAAA,OAAM+Q,mBAAmB;AAAA,UAAA,CAC3B,CAAC;AACH,QAAA,CAAC,CAAC;AACN,MAAA,CAAC,CAAC;AACJ,IAAA;AAAC,GAAA,EAAA;IAAAjb,GAAA,EAAA,qBAAA;AAAAC,IAAAA,KAAA,EAED,SAAQsa,mBAAmBA,CACzBe,cAAqD,EACzC;AACZ,MAAA,IAAI1B,UAAU,CAAC0B,cAAc,CAAC,EAAE;QAC9B,IAAMpZ,QAAQ,GAAGoZ,cAAc;AAC/B,QAAA,IAAMrZ,gBAAgB,GAAGC,QAAQ,CAACC,KAAK,EAAE;AAEzC,QAAA,IAAIoB,sBAAA,CAAK0W,OAAO,EAAZ,IAAW,CAAC,EAAE;UAChB1W,sBAAA,CAAK0W,OAAO,EAAZ,IAAW,CAAC,CAAC5L,WAAW,CAACnM,QAAQ,CAAC;AACpC,QAAA;QAEA,OAAOA,QAAQ,CACZ/B,IAAI,EAAE,CACN+J,IAAI,CAAC,UAAC5H,IAAI,EAAK;AACd,UAAA,IAAID,YAAY,CAACC,IAAI,CAAC,EAAE;AACtB;AACAuX,YAAAA,gBAAgB,CAACvX,IAAI,EAAEL,gBAAgB,CAAC;AAC1C,UAAA,CAAC,MAAM,IAAIC,QAAQ,CAACE,MAAM,IAAI,GAAG,EAAE;AACjC;YACA,MAAMJ,wBAAwB,CAACC,gBAAgB,CAAC;AAClD,UAAA;AAEA,UAAA,OAAOK,IAAI;AACb,QAAA,CAAC,CAAC,CAAA,OAAA,CACI,CAAC,UAAC6I,GAAG,EAAK;AACd,UAAA,IAAI,EAAEA,GAAG,YAAY1L,UAAU,CAAC,EAAE;YAChC,MAAM,IAAIA,UAAU,CAClB0L,GAAG,CAAClG,IAAI,EACRjD,wBAAwB,CAACC,gBAAgB,CAC3C,CAAC;AACH,UAAA;AAEA,UAAA,MAAMkJ,GAAG;AACX,QAAA,CAAC,CAAC;AACN,MAAA;MAEA,IAAM7I,IAAI,GAAGgZ,cAAc;AAE3B,MAAA,IAAIjZ,YAAY,CAACC,IAAI,CAAC,EAAE;AACtB;QACAuX,gBAAgB,CAACvX,IAAI,CAAC;AACxB,MAAA;AAEA,MAAA,OAAOkX,OAAO,CAACC,OAAO,CAACnX,IAAI,CAAC;AAC9B,IAAA;;AAEA;AACF;AACA;AACA;AAHE,GAAA,EAAA;IAAAtC,GAAA,EAAA,0BAAA;AAAAC,IAAAA,KAAA,EAIA,SAAA0M,wBAAwBA,GAA2B;MACjD,OAAO,IAAI,CAACgO,oBAAoB,EAAE,CAACzQ,IAAI,CAAC,UAACqR,iBAAiB,EAAK;QAC7D,IAAIA,iBAAiB,KAAK,IAAI,EAAE;AAC9B,UAAA,MAAM,IAAI5b,KAAK,CAAC,2BAA2B,CAAC;AAC9C,QAAA;AAEA,QAAA,IACE,OAAO4b,iBAAiB,CAACL,UAAU,KAAK,WAAW,IACnDK,iBAAiB,CAACL,UAAU,KAAK,IAAI,EACrC;AACA,UAAA,OAAO,IAAI;AACb,QAAA;AAEA,QAAA,IAAMpG,GAAG,GAAGb,IAAI,CAACmH,KAAK,CAACvG,IAAI,CAACC,GAAG,EAAE,GAAG,IAAI,CAAC;AACzC,QAAA,OAAOyG,iBAAiB,CAACL,UAAU,GAAGpG,GAAG;AAC3C,MAAA,CAAC,CAAC;AACJ,IAAA;AAAC,GAAA,EAAA;IAAA9U,GAAA,EAAA,mBAAA;AAAAC,IAAAA,KAAA,EAED,SAAQob,iBAAiBA,CAACN,YAAe,EAAoB;AAC3D,MAAA,OAAOxX,sBAAA,CAAKyW,aAAa,EAAlB,IAAiB,CAAC,CAACwB,OAAO,CAC/B,IAAI,CAACnB,cAAc,EACnB9G,IAAI,CAACC,SAAS,CAACuH,YAAY,CAC7B,CAAC;AACH,IAAA;AAAC,GAAA,CAAA,CAAA;AAAA,CAAA;;;;"}