{"version":3,"file":"rx-mind-data-component-store.mjs","sources":["../../../../libs/data-component-store/src/lib/data-effects-builder.ts","../../../../libs/data-component-store/src/lib/helpers.ts","../../../../libs/data-component-store/src/lib/data-service.ts","../../../../libs/data-component-store/src/lib/data-component-store.ts","../../../../libs/data-component-store/src/lib/data-state.ts","../../../../libs/data-component-store/src/rx-mind-data-component-store.ts"],"sourcesContent":["import { Update } from '@rx-mind/entity-component-store';\r\nimport { QueryParams } from './models';\r\n\r\nexport interface DataEffectsBuilder<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number = string | number\r\n> {\r\n  loadStart<Params extends QueryParams | undefined>(callback: (params: Params) => void): void;\r\n  loadSuccess<Response extends Entity[] | Record<string, any>>(\r\n    callback: (response: Response) => void\r\n  ): void;\r\n  loadError<Error>(callback: (error: Error) => void): void;\r\n\r\n  loadByIdStart(callback: (id: Id) => void): void;\r\n  loadByIdSuccess(callback: (entity: Entity) => void): void;\r\n  loadByIdError<Error>(callback: (error: Error) => void): void;\r\n\r\n  createStart(callback: (entity: Partial<Entity>) => void): void;\r\n  createSuccess(callback: (entity: Entity) => void): void;\r\n  createError<Error>(callback: (error: Error) => void): void;\r\n\r\n  updateStart(callback: (entityUpdate: Update<Entity, Id>) => void): void;\r\n  updateSuccess(callback: (entity: Entity) => void): void;\r\n  updateError<Error>(callback: (error: Error) => void): void;\r\n\r\n  deleteStart(callback: (id: Id) => void): void;\r\n  deleteSuccess<Response extends Entity | Id | null>(callback: (response: Response) => void): void;\r\n  deleteError<Error>(callback: (error: Error) => void): void;\r\n\r\n  error<Error>(callback: (error: Error) => void): void;\r\n}\r\n\r\nexport interface DataEffectCallbacks<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number = string | number\r\n> {\r\n  loadStart<Params extends QueryParams | undefined>(params: Params): void;\r\n  loadSuccess<Response extends Entity[] | Record<string, any>>(response: Response): void;\r\n  loadError<Error>(error: Error): void;\r\n\r\n  loadByIdStart(id: Id): void;\r\n  loadByIdSuccess(entity: Entity): void;\r\n  loadByIdError<Error>(error: Error): void;\r\n\r\n  createStart(entity: Partial<Entity>): void;\r\n  createSuccess(entity: Entity): void;\r\n  createError<Error>(error: Error): void;\r\n\r\n  updateStart(entityUpdate: Update<Entity, Id>): void;\r\n  updateSuccess(entity: Entity): void;\r\n  updateError<Error>(error: Error): void;\r\n\r\n  deleteStart(id: Id): void;\r\n  deleteSuccess<Response extends Entity | Id | null>(response: Response): void;\r\n  deleteError<Error>(error: Error): void;\r\n\r\n  error<Error>(error: Error): void;\r\n}\r\n\r\nexport function createDataEffectsBuilder<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number = string | number\r\n>(): {\r\n  builder: DataEffectsBuilder<Entity, Id>;\r\n  overriddenEffects: Partial<DataEffectCallbacks<Entity, Id>>;\r\n} {\r\n  const overriddenEffects: Partial<DataEffectCallbacks<Entity, Id>> = {};\r\n\r\n  return {\r\n    builder: {\r\n      loadStart(callback) {\r\n        overriddenEffects.loadStart = callback as <Params>(params: Params) => void;\r\n      },\r\n      loadSuccess(callback) {\r\n        overriddenEffects.loadSuccess = callback as <Response>(response: Response) => void;\r\n      },\r\n      loadError(callback) {\r\n        overriddenEffects.loadError = callback as <Error>(error: Error) => void;\r\n      },\r\n      loadByIdStart(callback) {\r\n        overriddenEffects.loadByIdStart = callback;\r\n      },\r\n      loadByIdSuccess(callback) {\r\n        overriddenEffects.loadByIdSuccess = callback;\r\n      },\r\n      loadByIdError(callback) {\r\n        overriddenEffects.loadByIdError = callback as <Error>(error: Error) => void;\r\n      },\r\n      createStart(callback) {\r\n        overriddenEffects.createStart = callback;\r\n      },\r\n      createSuccess(callback) {\r\n        overriddenEffects.createSuccess = callback;\r\n      },\r\n      createError(callback) {\r\n        overriddenEffects.createError = callback as <Error>(error: Error) => void;\r\n      },\r\n      updateStart(callback) {\r\n        overriddenEffects.updateStart = callback;\r\n      },\r\n      updateSuccess(callback) {\r\n        overriddenEffects.updateSuccess = callback;\r\n      },\r\n      updateError(callback) {\r\n        overriddenEffects.updateError = callback as <Error>(error: Error) => void;\r\n      },\r\n      deleteStart(callback) {\r\n        overriddenEffects.deleteStart = callback;\r\n      },\r\n      deleteSuccess(callback) {\r\n        overriddenEffects.deleteSuccess = callback as <Response>(response: Response) => void;\r\n      },\r\n      deleteError(callback) {\r\n        overriddenEffects.deleteError = callback as <Error>(error: Error) => void;\r\n      },\r\n      error(callback) {\r\n        overriddenEffects.error = callback as <Error>(error: Error) => void;\r\n      },\r\n    },\r\n    overriddenEffects,\r\n  };\r\n}\r\n","export function capitalize<T extends string>(text: T): Capitalize<T> {\r\n  return (text.charAt(0).toUpperCase() + text.substr(1)) as Capitalize<T>;\r\n}\r\n\r\nexport function removeTrailingSlashes(url: string): string {\r\n  return url.replace(/\\/+$/, '');\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { Update } from '@rx-mind/entity-component-store';\r\nimport { QueryParams } from './models';\r\nimport { removeTrailingSlashes } from './helpers';\r\n\r\nexport interface DataService<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number = string | number\r\n> {\r\n  get(params?: QueryParams): Observable<Entity[] | Record<string, any>>;\r\n  getById(id: Id): Observable<Entity>;\r\n  create(entity: Partial<Entity>): Observable<Entity>;\r\n  update(entityUpdate: Update<Entity, Id>): Observable<Entity>;\r\n  delete(id: Id): Observable<Entity | Id | null>;\r\n}\r\n\r\nexport class DefaultDataService<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number = string | number\r\n> implements DataService<Entity, Id> {\r\n  protected readonly http: HttpClient;\r\n  protected readonly baseUrl: string;\r\n\r\n  constructor(baseUrl: string) {\r\n    this.http = inject(HttpClient);\r\n    this.baseUrl = removeTrailingSlashes(baseUrl);\r\n  }\r\n\r\n  get(params?: QueryParams): Observable<Entity[] | Record<string, any>> {\r\n    return this.http.get<Entity[] | Record<string, any>>(this.baseUrl, { params });\r\n  }\r\n\r\n  getById(id: Id): Observable<Entity> {\r\n    return this.http.get<Entity>(`${this.baseUrl}/${id}`);\r\n  }\r\n\r\n  create(entity: Partial<Entity>): Observable<Entity> {\r\n    return this.http.post<Entity>(this.baseUrl, entity);\r\n  }\r\n\r\n  update(entityUpdate: Update<Entity, Id>): Observable<Entity> {\r\n    return this.http.put<Entity>(`${this.baseUrl}/${entityUpdate.id}`, entityUpdate.changes);\r\n  }\r\n\r\n  delete(id: Id): Observable<Entity | Id | null> {\r\n    return this.http.delete<Entity | Id | null>(`${this.baseUrl}/${id}`);\r\n  }\r\n}\r\n\r\nexport function createDefaultDataService<\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number = string | number\r\n>(baseUrl: string): DefaultDataService<Entity, Id> {\r\n  return new DefaultDataService(baseUrl);\r\n}\r\n","import { Inject, Injectable, InjectionToken } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { mergeMap, scan, startWith, switchMap, tap } from 'rxjs/operators';\r\nimport { tapResponse } from '@ngrx/component-store';\r\nimport {\r\n  EntityComponentStore,\r\n  ExtractEntity,\r\n  ExtractId,\r\n  Update,\r\n} from '@rx-mind/entity-component-store';\r\nimport {\r\n  createDataEffectsBuilder,\r\n  DataEffectCallbacks,\r\n  DataEffectsBuilder,\r\n} from './data-effects-builder';\r\nimport { createDefaultDataService, DataService } from './data-service';\r\nimport { capitalize } from './helpers';\r\nimport { DataComponentStoreConfig, DataState, QueryParams } from './models';\r\n\r\nexport const DATA_COMPONENT_STORE_CONFIG = new InjectionToken(\r\n  '@rx-mind/data-component-store: Data Component Store Config'\r\n);\r\n\r\n@Injectable()\r\nexport class DataComponentStore<\r\n  State extends DataState<Entity, Id>,\r\n  Entity extends Record<string, any> = ExtractEntity<State>,\r\n  Id extends string | number = ExtractId<State>\r\n> extends EntityComponentStore<State, Entity, Id> {\r\n  protected readonly dataService: DataService<Entity, Id>;\r\n  private readonly overriddenEffects: Partial<DataEffectCallbacks<Entity, Id>>;\r\n\r\n  constructor(\r\n    @Inject(DATA_COMPONENT_STORE_CONFIG) config: DataComponentStoreConfig<State, Entity, Id>\r\n  ) {\r\n    super(config);\r\n\r\n    if ('baseUrl' in config) {\r\n      this.dataService = createDefaultDataService<Entity, Id>(config.baseUrl);\r\n    } else {\r\n      this.dataService = config.dataService;\r\n    }\r\n\r\n    const { builder, overriddenEffects } = createDataEffectsBuilder<Entity, Id>();\r\n    this.overrideDataEffects(builder);\r\n    this.overriddenEffects = overriddenEffects;\r\n  }\r\n\r\n  readonly isLoadPending$ = this.select((s) => s.isLoadPending);\r\n  readonly isLoadByIdPending$ = this.select((s) => s.isLoadByIdPending);\r\n  readonly isCreatePending$ = this.select((s) => s.isCreatePending);\r\n  readonly isUpdatePending$ = this.select((s) => s.isUpdatePending);\r\n  readonly isDeletePending$ = this.select((s) => s.isDeletePending);\r\n  readonly isPending$ = this.select(\r\n    this.isLoadPending$,\r\n    this.isLoadByIdPending$,\r\n    this.isCreatePending$,\r\n    this.isUpdatePending$,\r\n    this.isDeletePending$,\r\n    (...isPending) => isPending.some(Boolean)\r\n  );\r\n\r\n  readonly load = this.effect<QueryParams | void>((params$) =>\r\n    params$.pipe(\r\n      tap((params) => {\r\n        this.patchState({ isLoadPending: true } as Partial<State>);\r\n\r\n        if (this.overriddenEffects.loadStart) {\r\n          this.overriddenEffects.loadStart(params || undefined);\r\n        }\r\n      }),\r\n      switchMap((params) => {\r\n        return this.dataService.get(params || undefined).pipe(\r\n          tapResponse(\r\n            (response) => {\r\n              this.patchState({ isLoadPending: false } as Partial<State>);\r\n\r\n              if (this.overriddenEffects.loadSuccess) {\r\n                this.overriddenEffects.loadSuccess(response);\r\n              } else if (Array.isArray(response)) {\r\n                this.setAll(response);\r\n              } else {\r\n                console.error(\r\n                  '@rx-mind/data-component-store: Load request does not return an array of entities. ' +\r\n                    'Use `overrideDataEffects` method to change the default behavior of `loadSuccess` method.'\r\n                );\r\n              }\r\n            },\r\n            (error) => {\r\n              this.patchState({ isLoadPending: false } as Partial<State>);\r\n\r\n              if (this.overriddenEffects.loadError) {\r\n                this.overriddenEffects.loadError(error);\r\n              } else if (this.overriddenEffects.error) {\r\n                this.overriddenEffects.error(error);\r\n              }\r\n            }\r\n          )\r\n        );\r\n      })\r\n    )\r\n  );\r\n\r\n  readonly loadById = this.effect<Id>((id$) => {\r\n    return id$.pipe(\r\n      tap((id) => {\r\n        this.addToLoadByIdRequestCount(1);\r\n\r\n        if (this.overriddenEffects.loadByIdStart) {\r\n          this.overriddenEffects.loadByIdStart(id);\r\n        }\r\n      }),\r\n      mergeMap((id) => {\r\n        return this.dataService.getById(id).pipe(\r\n          tapResponse(\r\n            (entity) => {\r\n              this.addToLoadByIdRequestCount(-1);\r\n\r\n              if (this.overriddenEffects.loadByIdSuccess) {\r\n                this.overriddenEffects.loadByIdSuccess(entity);\r\n              } else {\r\n                this.setOne(entity);\r\n              }\r\n            },\r\n            (error) => {\r\n              this.addToLoadByIdRequestCount(-1);\r\n\r\n              if (this.overriddenEffects.loadByIdError) {\r\n                this.overriddenEffects.loadByIdError(error);\r\n              } else if (this.overriddenEffects.error) {\r\n                this.overriddenEffects.error(error);\r\n              }\r\n            }\r\n          )\r\n        );\r\n      })\r\n    );\r\n  });\r\n\r\n  readonly create = this.effect<Partial<Entity>>((entity$) => {\r\n    return entity$.pipe(\r\n      tap((entity) => {\r\n        this.addToCreateRequestCount(1);\r\n\r\n        if (this.overriddenEffects.createStart) {\r\n          this.overriddenEffects.createStart(entity);\r\n        }\r\n      }),\r\n      mergeMap((entity) => {\r\n        return this.dataService.create(entity).pipe(\r\n          tapResponse(\r\n            (createdEntity) => {\r\n              this.addToCreateRequestCount(-1);\r\n\r\n              if (this.overriddenEffects.createSuccess) {\r\n                this.overriddenEffects.createSuccess(createdEntity);\r\n              } else {\r\n                this.addOne(createdEntity);\r\n              }\r\n            },\r\n            (error) => {\r\n              this.addToCreateRequestCount(-1);\r\n\r\n              if (this.overriddenEffects.createError) {\r\n                this.overriddenEffects.createError(error);\r\n              } else if (this.overriddenEffects.error) {\r\n                this.overriddenEffects.error(error);\r\n              }\r\n            }\r\n          )\r\n        );\r\n      })\r\n    );\r\n  });\r\n\r\n  readonly update = this.effect<Update<Entity, Id>>((entityUpdate$) => {\r\n    return entityUpdate$.pipe(\r\n      tap((entityUpdate) => {\r\n        this.addToUpdateRequestCount(1);\r\n\r\n        if (this.overriddenEffects.updateStart) {\r\n          this.overriddenEffects.updateStart(entityUpdate);\r\n        }\r\n      }),\r\n      mergeMap((entityUpdate) => {\r\n        return this.dataService.update(entityUpdate).pipe(\r\n          tapResponse(\r\n            (updatedEntity) => {\r\n              this.addToUpdateRequestCount(-1);\r\n\r\n              if (this.overriddenEffects.updateSuccess) {\r\n                this.overriddenEffects.updateSuccess(updatedEntity);\r\n              } else {\r\n                this.updateOne({ id: entityUpdate.id, changes: updatedEntity });\r\n              }\r\n            },\r\n            (error) => {\r\n              this.addToUpdateRequestCount(-1);\r\n\r\n              if (this.overriddenEffects.updateError) {\r\n                this.overriddenEffects.updateError(error);\r\n              } else if (this.overriddenEffects.error) {\r\n                this.overriddenEffects.error(error);\r\n              }\r\n            }\r\n          )\r\n        );\r\n      })\r\n    );\r\n  });\r\n\r\n  readonly delete = this.effect<Id>((id$) => {\r\n    return id$.pipe(\r\n      tap((id) => {\r\n        this.addToDeleteRequestCount(1);\r\n\r\n        if (this.overriddenEffects.deleteStart) {\r\n          this.overriddenEffects.deleteStart(id);\r\n        }\r\n      }),\r\n      mergeMap((id) => {\r\n        return this.dataService.delete(id).pipe(\r\n          tapResponse(\r\n            (response) => {\r\n              this.addToDeleteRequestCount(-1);\r\n\r\n              if (this.overriddenEffects.deleteSuccess) {\r\n                this.overriddenEffects.deleteSuccess(response);\r\n              } else {\r\n                this.removeOne(id);\r\n              }\r\n            },\r\n            (error) => {\r\n              this.addToDeleteRequestCount(-1);\r\n\r\n              if (this.overriddenEffects.deleteError) {\r\n                this.overriddenEffects.deleteError(error);\r\n              } else if (this.overriddenEffects.error) {\r\n                this.overriddenEffects.error(error);\r\n              }\r\n            }\r\n          )\r\n        );\r\n      })\r\n    );\r\n  });\r\n\r\n  private readonly addToLoadByIdRequestCount = this.createAddToRequestCountEffect('loadById');\r\n  private readonly addToCreateRequestCount = this.createAddToRequestCountEffect('create');\r\n  private readonly addToUpdateRequestCount = this.createAddToRequestCountEffect('update');\r\n  private readonly addToDeleteRequestCount = this.createAddToRequestCountEffect('delete');\r\n\r\n  private createAddToRequestCountEffect(\r\n    entityMethodName: 'loadById' | 'create' | 'update' | 'delete'\r\n  ): (value: number) => Subscription {\r\n    return this.effect<number>((value$) => {\r\n      return value$.pipe(\r\n        startWith(0),\r\n        scan((pendingRequestCount, value) => {\r\n          pendingRequestCount = pendingRequestCount + value;\r\n\r\n          this.patchState(({\r\n            [`is${capitalize(entityMethodName)}Pending`]: pendingRequestCount > 0,\r\n          } as unknown) as Partial<State>);\r\n\r\n          return pendingRequestCount;\r\n        })\r\n      );\r\n    });\r\n  }\r\n\r\n  // eslint-disable-next-line @typescript-eslint/no-empty-function,@typescript-eslint/no-unused-vars\r\n  protected overrideDataEffects(builder: DataEffectsBuilder<Entity, Id>): void {}\r\n}\r\n","import {\r\n  EntityState,\r\n  ExtractEntity,\r\n  ExtractId,\r\n  getInitialEntityState,\r\n} from '@rx-mind/entity-component-store';\r\nimport { DataState, PendingStatuses } from './models';\r\n\r\nexport function getInitialDataState<\r\n  State extends DataState<Entity, Id>,\r\n  Entity extends Record<string, any> = ExtractEntity<State>,\r\n  Id extends string | number = ExtractId<State>,\r\n  AdditionalState = Omit<State, keyof DataState<Entity, Id>>,\r\n  Args extends [Record<string, any>?] = keyof AdditionalState extends never\r\n    ? []\r\n    : [additionalState: AdditionalState]\r\n>(...additionalState: Args): State;\r\nexport function getInitialDataState<\r\n  State extends DataState<Entity, Id>,\r\n  Entity extends Record<string, any>,\r\n  Id extends string | number\r\n>(additionalState = {}): State {\r\n  const initialEntityState = (getInitialEntityState() as unknown) as EntityState<Entity, Id>;\r\n  const initialPendingStatuses = getInitialPendingStatuses();\r\n\r\n  return {\r\n    ...initialEntityState,\r\n    ...initialPendingStatuses,\r\n    ...additionalState,\r\n  } as State;\r\n}\r\n\r\nfunction getInitialPendingStatuses(): PendingStatuses {\r\n  return {\r\n    isLoadPending: false,\r\n    isLoadByIdPending: false,\r\n    isCreatePending: false,\r\n    isUpdatePending: false,\r\n    isDeletePending: false,\r\n  };\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;SA2DgB,wBAAwB,GAAA;IAOtC,MAAM,iBAAiB,GAA6C,EAAE,CAAC;IAEvE,OAAO;AACL,QAAA,OAAO,EAAE;AACP,YAAA,SAAS,CAAC,QAAQ,EAAA;AAChB,gBAAA,iBAAiB,CAAC,SAAS,GAAG,QAA4C,CAAC;aAC5E;AACD,YAAA,WAAW,CAAC,QAAQ,EAAA;AAClB,gBAAA,iBAAiB,CAAC,WAAW,GAAG,QAAkD,CAAC;aACpF;AACD,YAAA,SAAS,CAAC,QAAQ,EAAA;AAChB,gBAAA,iBAAiB,CAAC,SAAS,GAAG,QAAyC,CAAC;aACzE;AACD,YAAA,aAAa,CAAC,QAAQ,EAAA;AACpB,gBAAA,iBAAiB,CAAC,aAAa,GAAG,QAAQ,CAAC;aAC5C;AACD,YAAA,eAAe,CAAC,QAAQ,EAAA;AACtB,gBAAA,iBAAiB,CAAC,eAAe,GAAG,QAAQ,CAAC;aAC9C;AACD,YAAA,aAAa,CAAC,QAAQ,EAAA;AACpB,gBAAA,iBAAiB,CAAC,aAAa,GAAG,QAAyC,CAAC;aAC7E;AACD,YAAA,WAAW,CAAC,QAAQ,EAAA;AAClB,gBAAA,iBAAiB,CAAC,WAAW,GAAG,QAAQ,CAAC;aAC1C;AACD,YAAA,aAAa,CAAC,QAAQ,EAAA;AACpB,gBAAA,iBAAiB,CAAC,aAAa,GAAG,QAAQ,CAAC;aAC5C;AACD,YAAA,WAAW,CAAC,QAAQ,EAAA;AAClB,gBAAA,iBAAiB,CAAC,WAAW,GAAG,QAAyC,CAAC;aAC3E;AACD,YAAA,WAAW,CAAC,QAAQ,EAAA;AAClB,gBAAA,iBAAiB,CAAC,WAAW,GAAG,QAAQ,CAAC;aAC1C;AACD,YAAA,aAAa,CAAC,QAAQ,EAAA;AACpB,gBAAA,iBAAiB,CAAC,aAAa,GAAG,QAAQ,CAAC;aAC5C;AACD,YAAA,WAAW,CAAC,QAAQ,EAAA;AAClB,gBAAA,iBAAiB,CAAC,WAAW,GAAG,QAAyC,CAAC;aAC3E;AACD,YAAA,WAAW,CAAC,QAAQ,EAAA;AAClB,gBAAA,iBAAiB,CAAC,WAAW,GAAG,QAAQ,CAAC;aAC1C;AACD,YAAA,aAAa,CAAC,QAAQ,EAAA;AACpB,gBAAA,iBAAiB,CAAC,aAAa,GAAG,QAAkD,CAAC;aACtF;AACD,YAAA,WAAW,CAAC,QAAQ,EAAA;AAClB,gBAAA,iBAAiB,CAAC,WAAW,GAAG,QAAyC,CAAC;aAC3E;AACD,YAAA,KAAK,CAAC,QAAQ,EAAA;AACZ,gBAAA,iBAAiB,CAAC,KAAK,GAAG,QAAyC,CAAC;aACrE;AACF,SAAA;QACD,iBAAiB;KAClB,CAAC;AACJ;;ACzHM,SAAU,UAAU,CAAmB,IAAO,EAAA;AAClD,IAAA,QAAQ,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAmB;AAC1E,CAAC;AAEK,SAAU,qBAAqB,CAAC,GAAW,EAAA;IAC/C,OAAO,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACjC;;MCYa,kBAAkB,CAAA;AAO7B,IAAA,WAAA,CAAY,OAAe,EAAA;AACzB,QAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAC/B,QAAA,IAAI,CAAC,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;KAC/C;AAED,IAAA,GAAG,CAAC,MAAoB,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAiC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;KAChF;AAED,IAAA,OAAO,CAAC,EAAM,EAAA;AACZ,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAC,CAAC;KACvD;AAED,IAAA,MAAM,CAAC,MAAuB,EAAA;AAC5B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAS,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;KACrD;AAED,IAAA,MAAM,CAAC,YAAgC,EAAA;QACrC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAS,CAAA,EAAG,IAAI,CAAC,OAAO,IAAI,YAAY,CAAC,EAAE,CAAE,CAAA,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;KAC1F;AAED,IAAA,MAAM,CAAC,EAAM,EAAA;AACX,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAqB,CAAA,EAAG,IAAI,CAAC,OAAO,CAAA,CAAA,EAAI,EAAE,CAAA,CAAE,CAAC,CAAC;KACtE;AACF,CAAA;AAEK,SAAU,wBAAwB,CAGtC,OAAe,EAAA;AACf,IAAA,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC;;MCrCa,2BAA2B,GAAG,IAAI,cAAc,CAC3D,4DAA4D,EAC5D;AAGI,MAAO,kBAIX,SAAQ,oBAAuC,CAAA;AAI/C,IAAA,WAAA,CACuC,MAAmD,EAAA;QAExF,KAAK,CAAC,MAAM,CAAC,CAAC;AAaP,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,CAAC;AACrD,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,iBAAiB,CAAC,CAAC;AAC7D,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC;AACzD,QAAA,IAAA,CAAA,UAAU,GAAG,IAAI,CAAC,MAAM,CAC/B,IAAI,CAAC,cAAc,EACnB,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,gBAAgB,EACrB,CAAC,GAAG,SAAS,KAAK,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAC1C,CAAC;AAEO,QAAA,IAAA,CAAA,IAAI,GAAG,IAAI,CAAC,MAAM,CAAqB,CAAC,OAAO,KACtD,OAAO,CAAC,IAAI,CACV,GAAG,CAAC,CAAC,MAAM,KAAI;YACb,IAAI,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,IAAI,EAAoB,CAAC,CAAC;AAE3D,YAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;gBACpC,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC;AACvD,aAAA;AACH,SAAC,CAAC,EACF,SAAS,CAAC,CAAC,MAAM,KAAI;AACnB,YAAA,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,IAAI,CACnD,WAAW,CACT,CAAC,QAAQ,KAAI;gBACX,IAAI,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,KAAK,EAAoB,CAAC,CAAC;AAE5D,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACtC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AAC9C,iBAAA;AAAM,qBAAA,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;AAClC,oBAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvB,iBAAA;AAAM,qBAAA;oBACL,OAAO,CAAC,KAAK,CACX,oFAAoF;AAClF,wBAAA,0FAA0F,CAC7F,CAAC;AACH,iBAAA;AACH,aAAC,EACD,CAAC,KAAK,KAAI;gBACR,IAAI,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,KAAK,EAAoB,CAAC,CAAC;AAE5D,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE;AACpC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACzC,iBAAA;AAAM,qBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACvC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,iBAAA;aACF,CACF,CACF,CAAC;SACH,CAAC,CACH,CACF,CAAC;QAEO,IAAQ,CAAA,QAAA,GAAG,IAAI,CAAC,MAAM,CAAK,CAAC,GAAG,KAAI;YAC1C,OAAO,GAAG,CAAC,IAAI,CACb,GAAG,CAAC,CAAC,EAAE,KAAI;AACT,gBAAA,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC;AAElC,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACxC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAC1C,iBAAA;AACH,aAAC,CAAC,EACF,QAAQ,CAAC,CAAC,EAAE,KAAI;AACd,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CACtC,WAAW,CACT,CAAC,MAAM,KAAI;AACT,oBAAA,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,eAAe,EAAE;AAC1C,wBAAA,IAAI,CAAC,iBAAiB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AAChD,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACrB,qBAAA;AACH,iBAAC,EACD,CAAC,KAAK,KAAI;AACR,oBAAA,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEnC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACxC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AAC7C,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACvC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,qBAAA;iBACF,CACF,CACF,CAAC;aACH,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CAAC;QAEM,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM,CAAkB,CAAC,OAAO,KAAI;YACzD,OAAO,OAAO,CAAC,IAAI,CACjB,GAAG,CAAC,CAAC,MAAM,KAAI;AACb,gBAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAEhC,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACtC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC5C,iBAAA;AACH,aAAC,CAAC,EACF,QAAQ,CAAC,CAAC,MAAM,KAAI;AAClB,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACzC,WAAW,CACT,CAAC,aAAa,KAAI;AAChB,oBAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACxC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AACrD,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;AAC5B,qBAAA;AACH,iBAAC,EACD,CAAC,KAAK,KAAI;AACR,oBAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACtC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3C,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACvC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,qBAAA;iBACF,CACF,CACF,CAAC;aACH,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CAAC;QAEM,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM,CAAqB,CAAC,aAAa,KAAI;YAClE,OAAO,aAAa,CAAC,IAAI,CACvB,GAAG,CAAC,CAAC,YAAY,KAAI;AACnB,gBAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAEhC,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACtC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;AAClD,iBAAA;AACH,aAAC,CAAC,EACF,QAAQ,CAAC,CAAC,YAAY,KAAI;AACxB,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,IAAI,CAC/C,WAAW,CACT,CAAC,aAAa,KAAI;AAChB,oBAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACxC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;AACrD,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,YAAY,CAAC,EAAE,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC;AACjE,qBAAA;AACH,iBAAC,EACD,CAAC,KAAK,KAAI;AACR,oBAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACtC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3C,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACvC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,qBAAA;iBACF,CACF,CACF,CAAC;aACH,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CAAC;QAEM,IAAM,CAAA,MAAA,GAAG,IAAI,CAAC,MAAM,CAAK,CAAC,GAAG,KAAI;YACxC,OAAO,GAAG,CAAC,IAAI,CACb,GAAG,CAAC,CAAC,EAAE,KAAI;AACT,gBAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC;AAEhC,gBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACtC,oBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AACxC,iBAAA;AACH,aAAC,CAAC,EACF,QAAQ,CAAC,CAAC,EAAE,KAAI;AACd,gBAAA,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CACrC,WAAW,CACT,CAAC,QAAQ,KAAI;AACX,oBAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE;AACxC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAChD,qBAAA;AAAM,yBAAA;AACL,wBAAA,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACpB,qBAAA;AACH,iBAAC,EACD,CAAC,KAAK,KAAI;AACR,oBAAA,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjC,oBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,WAAW,EAAE;AACtC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3C,qBAAA;AAAM,yBAAA,IAAI,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE;AACvC,wBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrC,qBAAA;iBACF,CACF,CACF,CAAC;aACH,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CAAC;AAEc,QAAA,IAAA,CAAA,yBAAyB,GAAG,IAAI,CAAC,6BAA6B,CAAC,UAAU,CAAC,CAAC;AAC3E,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;AACvE,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;AACvE,QAAA,IAAA,CAAA,uBAAuB,GAAG,IAAI,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;QArNtF,IAAI,SAAS,IAAI,MAAM,EAAE;YACvB,IAAI,CAAC,WAAW,GAAG,wBAAwB,CAAa,MAAM,CAAC,OAAO,CAAC,CAAC;AACzE,SAAA;AAAM,aAAA;AACL,YAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AACvC,SAAA;QAED,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,wBAAwB,EAAc,CAAC;AAC9E,QAAA,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;KAC5C;AA8MO,IAAA,6BAA6B,CACnC,gBAA6D,EAAA;AAE7D,QAAA,OAAO,IAAI,CAAC,MAAM,CAAS,CAAC,MAAM,KAAI;AACpC,YAAA,OAAO,MAAM,CAAC,IAAI,CAChB,SAAS,CAAC,CAAC,CAAC,EACZ,IAAI,CAAC,CAAC,mBAAmB,EAAE,KAAK,KAAI;AAClC,gBAAA,mBAAmB,GAAG,mBAAmB,GAAG,KAAK,CAAC;gBAElD,IAAI,CAAC,UAAU,CAAE;oBACf,CAAC,CAAA,EAAA,EAAK,UAAU,CAAC,gBAAgB,CAAC,SAAS,GAAG,mBAAmB,GAAG,CAAC;AACxC,iBAAA,CAAC,CAAC;AAEjC,gBAAA,OAAO,mBAAmB,CAAC;aAC5B,CAAC,CACH,CAAC;AACJ,SAAC,CAAC,CAAC;KACJ;;IAGS,mBAAmB,CAAC,OAAuC,EAAA,GAAU;;AAxPpE,kBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,kBASnB,2BAA2B,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;mHAT1B,kBAAkB,EAAA,CAAA,CAAA;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;;0BAUN,MAAM;2BAAC,2BAA2B,CAAA;;;AChBvB,SAAA,mBAAmB,CAIjC,eAAe,GAAG,EAAE,EAAA;AACpB,IAAA,MAAM,kBAAkB,GAAI,qBAAqB,EAAyC,CAAC;AAC3F,IAAA,MAAM,sBAAsB,GAAG,yBAAyB,EAAE,CAAC;IAE3D,OAAO;AACL,QAAA,GAAG,kBAAkB;AACrB,QAAA,GAAG,sBAAsB;AACzB,QAAA,GAAG,eAAe;KACV,CAAC;AACb,CAAC;AAED,SAAS,yBAAyB,GAAA;IAChC,OAAO;AACL,QAAA,aAAa,EAAE,KAAK;AACpB,QAAA,iBAAiB,EAAE,KAAK;AACxB,QAAA,eAAe,EAAE,KAAK;AACtB,QAAA,eAAe,EAAE,KAAK;AACtB,QAAA,eAAe,EAAE,KAAK;KACvB,CAAC;AACJ;;ACxCA;;AAEG;;;;"}