{"version":3,"file":"verben-workflow-ui-src-lib-base.mjs","sources":["../../../projects/verben-workflow-ui/src/lib/base/models/api-payload.ts","../../../projects/verben-workflow-ui/src/lib/base/utils/column-helpers.ts","../../../projects/verben-workflow-ui/src/lib/base/core/base-data-page.state.ts","../../../projects/verben-workflow-ui/src/lib/base/handlers/filter-handler.service.ts","../../../projects/verben-workflow-ui/src/lib/base/handlers/sort-handler.service.ts","../../../projects/verben-workflow-ui/src/lib/base/core/base-data-page.service.ts","../../../projects/verben-workflow-ui/src/lib/base/handlers/search-handler.service.ts","../../../projects/verben-workflow-ui/src/lib/base/core/base-data-page.facade.ts","../../../projects/verben-workflow-ui/src/lib/base/public-api.ts","../../../projects/verben-workflow-ui/src/lib/base/verben-workflow-ui-src-lib-base.ts"],"sourcesContent":["// Re-export the shared API payload models so base-page consumers can import\n// them from a single place without reaching into the models entry point.\n//\n// Values and types are exported separately: `isolatedModules` is on, so\n// re-exporting a type alongside values in one statement fails with TS1205.\nexport {\n  SearchOperator,\n  SearchPropertySign,\n  SearchPropertyValueType,\n  SortDirection,\n} from 'verben-workflow-ui/src/lib/models';\n\nexport type { SearchPropertyValue } from 'verben-workflow-ui/src/lib/models';\n","import { ColumnDefinition } from 'verben-ng-ui';\nimport { SearchPropertyValueType } from '../models/api-payload';\n\n/**\n * Extract property name from column definition.\n * Only columns with accessorKey can be used for filter/sort — a column defined\n * with accessorFn alone (e.g. the actors \"tags\" column) has no server-side\n * property to filter or sort on.\n */\nexport function getPropertyName<T>(column: ColumnDefinition<T>): string {\n  if (!column.accessorKey) {\n    throw new Error(\n      `Column '${column.id}' must have accessorKey for filter/sort operations`,\n    );\n  }\n  return String(column.accessorKey);\n}\n\n/**\n * Infer API property type from column definition.\n * Uses basic heuristics based on the accessor key name.\n */\nexport function inferPropertyType<T>(\n  column: ColumnDefinition<T>,\n): SearchPropertyValueType {\n  if (!column.accessorKey) {\n    return SearchPropertyValueType.String;\n  }\n\n  const propertyName = String(column.accessorKey).toLowerCase();\n\n  // Date detection. Includes the common audit fields (CreatedAt, UpdatedAt,\n  // ModifiedAt, DeletedAt) whose names contain neither \"date\" nor \"time\".\n  if (\n    propertyName.includes('date') ||\n    propertyName.includes('time') ||\n    /^(created|updated|modified|deleted)/.test(propertyName)\n  ) {\n    return SearchPropertyValueType.Date;\n  }\n\n  if (propertyName.startsWith('is') || propertyName.startsWith('has')) {\n    return SearchPropertyValueType.Bool;\n  }\n\n  if (\n    propertyName.includes('count') ||\n    propertyName.includes('amount') ||\n    propertyName.includes('price') ||\n    propertyName.includes('total')\n  ) {\n    return SearchPropertyValueType.Decimal;\n  }\n\n  return SearchPropertyValueType.String;\n}\n\n/**\n * Find a column by its id.\n */\nexport function findColumn<T>(\n  columns: ColumnDefinition<T>[],\n  columnId: string,\n): ColumnDefinition<T> | undefined {\n  return columns.find((col) => col.id === columnId);\n}\n\n/**\n * Columns that can take part in filter/sort — i.e. those backed by a real\n * property on the entity. Use this to feed the filter and sort builders so a\n * display-only column never produces a payload the API cannot honour.\n */\nexport function filterableColumns<T>(\n  columns: ColumnDefinition<T>[],\n): ColumnDefinition<T>[] {\n  return columns.filter((col) => !!col.accessorKey);\n}\n","import { signal, WritableSignal } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport {\n  BaseModel,\n  QueryParams,\n  SortDirection,\n} from 'verben-workflow-ui/src/lib/models';\nimport {\n  CardData,\n  ColumnDefinition,\n  FilterCondition,\n  SortCondition,\n} from 'verben-ng-ui';\n\n/**\n * Abstract state management for base data pages.\n * Tracks items, loading state, query params, filters, sorts, search, and\n * visible columns. Card data is held in signals for cheap change detection.\n */\nexport abstract class BaseDataPageState<T extends BaseModel> {\n  protected updating$ = new BehaviorSubject<boolean>(false);\n\n  protected items$ = new BehaviorSubject<T[]>([]);\n  protected totalCount$ = new BehaviorSubject<number>(0);\n\n  protected queryParams$ = new BehaviorSubject<QueryParams<T>>({\n    skip: 0,\n    limit: 20,\n    sortOrder: SortDirection.Desc,\n  });\n\n  protected searchTerm$ = new BehaviorSubject<string>('');\n\n  protected filters$ = new BehaviorSubject<FilterCondition[]>([]);\n  protected sorts$ = new BehaviorSubject<SortCondition[]>([]);\n\n  protected visibleColumns$ = new BehaviorSubject<ColumnDefinition<T>[]>([]);\n\n  // Last table/card view (true = table, false = card). Persisted per page.\n  protected isTableView$ = new BehaviorSubject<boolean>(false);\n\n  protected cardData = signal<CardData[]>([]);\n  protected currentCardData = signal<CardData | null>(null);\n\n  protected cardDataMapper?: (item: T) => CardData;\n\n  /**\n   * Stable identity for a record. `Code` comes first: it is what every page in\n   * this library matches on, and what the backend assigns on persist. `Id` is\n   * frequently the empty string on records that came back from a save, and the\n   * lowercase `id` is a client-generated UUID that exists only on unsaved rows.\n   */\n  protected getItemKey(item: T): string {\n    return item.Code || item.Id || item.id;\n  }\n\n  protected updateCardDataFromItems(items: T[]): void {\n    if (this.cardDataMapper) {\n      this.cardData.set(items.map((item) => this.cardDataMapper!(item)));\n    }\n  }\n\n  // ===== Loading State =====\n\n  isUpdating$(): Observable<boolean> {\n    return this.updating$.asObservable();\n  }\n\n  setUpdating(isUpdating: boolean): void {\n    this.updating$.next(isUpdating);\n  }\n\n  // ===== Items =====\n\n  getItems$(): Observable<T[]> {\n    return this.items$.asObservable();\n  }\n\n  getItemsValue(): T[] {\n    return this.items$.getValue();\n  }\n\n  setItems(items: T[]): void {\n    this.items$.next(items);\n    this.updateCardDataFromItems(items);\n  }\n\n  appendItems(newItems: T[]): void {\n    const allItems = [...this.items$.getValue(), ...newItems];\n    this.items$.next(allItems);\n    this.updateCardDataFromItems(allItems);\n  }\n\n  addItem(item: T): void {\n    const allItems = [item, ...this.items$.getValue()];\n    this.items$.next(allItems);\n    this.updateCardDataFromItems(allItems);\n  }\n\n  updateItem(updatedItem: T): void {\n    const items = this.items$.getValue();\n    const key = this.getItemKey(updatedItem);\n    const index = items.findIndex((item) => this.getItemKey(item) === key);\n    if (index !== -1) {\n      items[index] = updatedItem;\n      const allItems = [...items];\n      this.items$.next(allItems);\n      this.updateCardDataFromItems(allItems);\n    }\n  }\n\n  /** Update the item when its key already exists, otherwise prepend it. */\n  upsertItem(item: T): void {\n    const key = this.getItemKey(item);\n    const exists = this.items$\n      .getValue()\n      .some((existing) => this.getItemKey(existing) === key);\n    if (exists) {\n      this.updateItem(item);\n    } else {\n      this.addItem(item);\n    }\n  }\n\n  removeItem(itemKey: string): void {\n    const filteredItems = this.items$\n      .getValue()\n      .filter((item) => this.getItemKey(item) !== itemKey);\n    this.items$.next(filteredItems);\n    this.updateCardDataFromItems(filteredItems);\n  }\n\n  clearItems(): void {\n    this.items$.next([]);\n    this.updateCardDataFromItems([]);\n  }\n\n  // ===== Total Count =====\n\n  getTotalCount$(): Observable<number> {\n    return this.totalCount$.asObservable();\n  }\n\n  setTotalCount(count: number): void {\n    this.totalCount$.next(count);\n  }\n\n  // ===== Query Parameters =====\n\n  getQueryParams$(): Observable<QueryParams<T>> {\n    return this.queryParams$.asObservable();\n  }\n\n  getQueryParamsValue(): QueryParams<T> {\n    return this.queryParams$.getValue();\n  }\n\n  updateQueryParams(params: Partial<QueryParams<T>>): void {\n    this.queryParams$.next({ ...this.queryParams$.getValue(), ...params });\n  }\n\n  resetPagination(): void {\n    this.queryParams$.next({ ...this.queryParams$.getValue(), skip: 0 });\n  }\n\n  incrementPagination(): void {\n    const currentParams = this.queryParams$.getValue();\n    this.queryParams$.next({\n      ...currentParams,\n      skip: currentParams.skip + currentParams.limit,\n    });\n  }\n\n  // ===== Search =====\n\n  getSearchTerm$(): Observable<string> {\n    return this.searchTerm$.asObservable();\n  }\n\n  getSearchTermValue(): string {\n    return this.searchTerm$.getValue();\n  }\n\n  setSearchTerm(term: string): void {\n    this.searchTerm$.next(term);\n  }\n\n  // ===== Filters =====\n\n  getFilters$(): Observable<FilterCondition[]> {\n    return this.filters$.asObservable();\n  }\n\n  getFiltersValue(): FilterCondition[] {\n    return this.filters$.getValue();\n  }\n\n  setFilters(filters: FilterCondition[]): void {\n    this.filters$.next(filters);\n  }\n\n  clearFilters(): void {\n    this.filters$.next([]);\n  }\n\n  // ===== Sorts =====\n\n  getSorts$(): Observable<SortCondition[]> {\n    return this.sorts$.asObservable();\n  }\n\n  getSortsValue(): SortCondition[] {\n    return this.sorts$.getValue();\n  }\n\n  setSorts(sorts: SortCondition[]): void {\n    this.sorts$.next(sorts);\n  }\n\n  clearSorts(): void {\n    this.sorts$.next([]);\n  }\n\n  // ===== Visible Columns =====\n\n  getVisibleColumns$(): Observable<ColumnDefinition<T>[]> {\n    return this.visibleColumns$.asObservable();\n  }\n\n  getVisibleColumnsValue(): ColumnDefinition<T>[] {\n    return this.visibleColumns$.getValue();\n  }\n\n  setVisibleColumns(columns: ColumnDefinition<T>[]): void {\n    this.visibleColumns$.next(columns);\n  }\n\n  // ===== Table/Card View =====\n\n  getIsTableView$(): Observable<boolean> {\n    return this.isTableView$.asObservable();\n  }\n\n  getIsTableViewValue(): boolean {\n    return this.isTableView$.getValue();\n  }\n\n  setIsTableView(isTableView: boolean): void {\n    this.isTableView$.next(isTableView);\n  }\n\n  // ===== Card Data =====\n\n  setCardDataMapper(mapper: (item: T) => CardData): void {\n    this.cardDataMapper = mapper;\n  }\n\n  getCardData(): WritableSignal<CardData[]> {\n    return this.cardData;\n  }\n\n  setCardData(data: CardData[]): void {\n    this.cardData.set(data);\n  }\n\n  getCurrentCardData(): WritableSignal<CardData | null> {\n    return this.currentCardData;\n  }\n\n  setCurrentCardData(data: CardData | null): void {\n    this.currentCardData.set(data);\n  }\n\n  // ===== Reset All =====\n\n  reset(): void {\n    this.clearItems();\n    this.setSearchTerm('');\n    this.clearFilters();\n    this.clearSorts();\n    this.setVisibleColumns([]);\n    this.cardData.set([]);\n    this.currentCardData.set(null);\n    this.resetPagination();\n    this.setTotalCount(0);\n  }\n}\n","import { Injectable } from '@angular/core';\nimport {\n  ColumnDefinition,\n  DataFilterType,\n  FilterCondition,\n  IDataFilter,\n} from 'verben-ng-ui';\nimport {\n  SearchOperator,\n  SearchPropertySign,\n  SearchPropertyValue,\n  SearchPropertyValueType,\n} from '../models/api-payload';\nimport { findColumn, getPropertyName, inferPropertyType } from '../utils/column-helpers';\n\n/**\n * Converts filter conditions emitted by the verben-ng-ui filter components into\n * the SearchPropertyValue[] payload the search API expects.\n *\n * Two input shapes are supported. `lib-data-filter` emits `FilterCondition[]`,\n * which carries a columnId and an operator and is the shape the base prefers.\n * `verben-table-filter` emits `IDataFilter[]`, which names the property directly\n * and has no operator; it is kept working so pages can migrate one at a time.\n */\n@Injectable({ providedIn: 'root' })\nexport class FilterHandlerService {\n  buildFilterPayload<T>(\n    filters: FilterCondition[] | IDataFilter[],\n    columns: ColumnDefinition<T>[],\n  ): SearchPropertyValue[] {\n    return (filters as Array<FilterCondition | IDataFilter>)\n      .map((filter) =>\n        this.isDataFilter(filter)\n          ? this.fromDataFilter(filter)\n          : this.fromFilterCondition(filter, columns),\n      )\n      .filter(Boolean) as SearchPropertyValue[];\n  }\n\n  private isDataFilter(\n    filter: FilterCondition | IDataFilter,\n  ): filter is IDataFilter {\n    return (filter as IDataFilter).name !== undefined;\n  }\n\n  private fromFilterCondition<T>(\n    filter: FilterCondition,\n    columns: ColumnDefinition<T>[],\n  ): SearchPropertyValue | null {\n    const column = findColumn(columns, filter.columnId);\n\n    if (!column) {\n      return null;\n    }\n\n    // A display-only column (accessorFn with no accessorKey) has no server-side\n    // property to filter on; skip it rather than throwing out of getPropertyName.\n    if (!column.accessorKey) {\n      return null;\n    }\n\n    return {\n      PropertyName: getPropertyName(column),\n      EntityValue: String(filter.value),\n      Type: inferPropertyType(column),\n      Operator: SearchOperator.And,\n      Sign: this.mapOperatorToSign(filter.operator),\n    };\n  }\n\n  /** Legacy `verben-table-filter` shape: property name and type, no operator. */\n  private fromDataFilter(filter: IDataFilter): SearchPropertyValue | null {\n    if (filter.value === undefined || filter.value === null) {\n      return null;\n    }\n\n    return {\n      PropertyName: filter.name,\n      EntityValue: String(filter.value),\n      Type: this.mapDataFilterType(filter.type),\n      Operator: SearchOperator.And,\n      Sign: filter.condition\n        ? this.mapOperatorToSign(filter.condition)\n        : SearchPropertySign.EQ,\n    };\n  }\n\n  /**\n   * Inverse of {@link buildFilterPayload}: rebuild FilterCondition[] from a\n   * persisted SearchPropertyValue[] (restoring saved filters). Sign-preserving,\n   * so re-running buildFilterPayload reproduces the same query.\n   */\n  buildFilterConditions<T>(\n    payload: SearchPropertyValue[],\n    columns: ColumnDefinition<T>[],\n  ): FilterCondition[] {\n    return payload\n      .map((pv) => {\n        const column = columns.find(\n          (col) => col.accessorKey && String(col.accessorKey) === pv.PropertyName,\n        );\n        if (!column) {\n          console.warn(`Column not found for saved filter property: ${pv.PropertyName}`);\n          return null;\n        }\n        return {\n          columnId: column.id,\n          operator: this.mapSignToOperator(pv.Sign),\n          value: pv.EntityValue,\n        } as FilterCondition;\n      })\n      .filter(Boolean) as FilterCondition[];\n  }\n\n  private mapSignToOperator(sign: SearchPropertySign): string {\n    switch (sign) {\n      case SearchPropertySign.LIKE:\n        return 'contains';\n      case SearchPropertySign.GT:\n        return 'greaterThan';\n      case SearchPropertySign.LT:\n        return 'lessThan';\n      case SearchPropertySign.EQ:\n      default:\n        return 'equals';\n    }\n  }\n\n  private mapOperatorToSign(operator: string): SearchPropertySign {\n    const operatorMap: Record<string, SearchPropertySign> = {\n      startsWith: SearchPropertySign.LIKE,\n      endsWith: SearchPropertySign.LIKE,\n      contains: SearchPropertySign.LIKE,\n      equals: SearchPropertySign.EQ,\n      equal: SearchPropertySign.EQ,\n      greaterThan: SearchPropertySign.GT,\n      lessThan: SearchPropertySign.LT,\n      on: SearchPropertySign.EQ,\n      before: SearchPropertySign.LT,\n      after: SearchPropertySign.GT,\n    };\n\n    return operatorMap[operator] || SearchPropertySign.EQ;\n  }\n\n  /**\n   * Carried over from the original workflows.helper.ts so the legacy\n   * `verben-table-filter` path keeps producing the same payload types.\n   */\n  private mapDataFilterType(type: DataFilterType): SearchPropertyValueType {\n    switch (type) {\n      case DataFilterType.String:\n        return SearchPropertyValueType.String;\n      case DataFilterType.Integer:\n      case DataFilterType.Number:\n        return SearchPropertyValueType.Int;\n      case DataFilterType.Decimal:\n        return SearchPropertyValueType.Decimal;\n      case DataFilterType.Credit:\n        return SearchPropertyValueType.Float;\n      case DataFilterType.Date:\n        return SearchPropertyValueType.Date;\n      case DataFilterType.Bool:\n        return SearchPropertyValueType.Bool;\n      default:\n        return SearchPropertyValueType.String;\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport {\n  ColumnDefinition,\n  SortCondition,\n  SortDirection as UiSortDirection,\n} from 'verben-ng-ui';\nimport {\n  SearchOperator,\n  SearchPropertySign,\n  SearchPropertyValue,\n  SortDirection as ApiSortDirection,\n} from '../models/api-payload';\nimport { findColumn, getPropertyName, inferPropertyType } from '../utils/column-helpers';\n\n/** The sort segment every list/search URL in this API ends with. */\nexport interface PrimarySort {\n  sortParam: string;\n  sortOrder: ApiSortDirection;\n}\n\n/**\n * Converts SortCondition[] emitted by lib-data-sort into what the workflow API\n * needs.\n *\n * This API carries sort in the URL — every endpoint ends\n * `/{skip}/{limit}/{sortParam}/{sortOrder}`, including the POST search — so\n * `buildPrimarySort()` is the load-bearing one and only the first condition can\n * be honoured. `buildSortPayload()` still emits the full set on the POST body so\n * multi-column sort starts working the moment the backend reads it.\n */\n@Injectable({ providedIn: 'root' })\nexport class SortHandlerService {\n  /**\n   * Collapse the sort conditions to the single sort the URL can carry.\n   * Returns null when nothing sortable was selected, so callers fall back to\n   * the page's configured default.\n   */\n  buildPrimarySort<T>(\n    sorts: SortCondition[],\n    columns: ColumnDefinition<T>[],\n  ): PrimarySort | null {\n    for (const sort of sorts) {\n      const column = findColumn(columns, sort.columnId);\n      if (!column?.accessorKey) {\n        continue;\n      }\n      return {\n        sortParam: getPropertyName(column),\n        sortOrder: this.mapSortDirection(sort.direction),\n      };\n    }\n    return null;\n  }\n\n  buildSortPayload<T>(\n    sorts: SortCondition[],\n    columns: ColumnDefinition<T>[],\n  ): SearchPropertyValue[] {\n    return sorts\n      .map((sort) => {\n        const column = findColumn(columns, sort.columnId);\n\n        if (!column) {\n          return null;\n        }\n\n        if (!column.accessorKey) {\n          return null;\n        }\n\n        return {\n          PropertyName: getPropertyName(column),\n          EntityValue: '',\n          Type: inferPropertyType(column),\n          Operator: SearchOperator.And,\n          Sign: SearchPropertySign.EQ,\n          Sort: this.mapSortDirection(sort.direction),\n        };\n      })\n      .filter(Boolean) as SearchPropertyValue[];\n  }\n\n  private mapSortDirection(direction: UiSortDirection): ApiSortDirection {\n    switch (direction) {\n      case UiSortDirection.Asc:\n        return ApiSortDirection.Asc;\n      case UiSortDirection.Desc:\n        return ApiSortDirection.Desc;\n      default:\n        return ApiSortDirection.None;\n    }\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { lastValueFrom } from 'rxjs';\nimport {\n  BaseModel,\n  ErrorResponse,\n  Paged,\n  SortDirection,\n} from 'verben-workflow-ui/src/lib/models';\nimport { HttpWebRequestService } from 'verben-workflow-ui/src/lib/services';\nimport { ColumnDefinition, FilterCondition, SortCondition } from 'verben-ng-ui';\nimport { FilterHandlerService } from '../handlers/filter-handler.service';\nimport { PrimarySort, SortHandlerService } from '../handlers/sort-handler.service';\nimport { SearchPropertyValue } from '../models/api-payload';\n\n/**\n * Abstract base service for data pages.\n * Handles list/search/save/delete with filter and sort support.\n *\n * The concrete URLs are built by the protected `*Url` seams below. Unlike the\n * sibling libraries, every endpoint in the workflow API carries the sort as URL\n * segments — `Get{Endpoint}/{skip}/{limit}/{sortParam}/{sortOrder}`, and the\n * POST search does too — so the seams take sort parameters. Services whose\n * endpoint names or shapes deviate (plural vs singular, query-string deletes)\n * override just the URL rather than reimplementing `getData()`.\n *\n * When `baseUrl` is omitted, HttpWebRequestService falls back to the WorkFlowAPI\n * base.\n */\n@Injectable()\nexport abstract class BaseDataPageService<T extends BaseModel> {\n  constructor(\n    protected server: HttpWebRequestService,\n    protected filterHandler: FilterHandlerService,\n    protected sortHandler: SortHandlerService,\n    protected baseUrl?: string,\n  ) {}\n\n  /** API endpoint name (e.g. 'FlowableStatus'). Must be implemented by child classes. */\n  abstract getEndpoint(): string;\n\n  /** Sort property used when the user has not chosen one. */\n  protected defaultSortParam(): string {\n    return 'CreatedAt';\n  }\n\n  protected defaultSortOrder(): SortDirection {\n    return SortDirection.Desc;\n  }\n\n  // ===== URL seams (override in child services when the API deviates) =====\n\n  protected listUrl(\n    skip: number,\n    limit: number,\n    sortParam: string,\n    sortOrder: string,\n  ): string {\n    return `Get${this.getEndpoint()}/${skip}/${limit}/${sortParam}/${sortOrder}`;\n  }\n\n  protected searchTermUrl(\n    term: string,\n    skip: number,\n    limit: number,\n    sortParam: string,\n    sortOrder: string,\n  ): string {\n    return `Get${this.getEndpoint()}WithParam/${term}/${skip}/${limit}/${sortParam}/${sortOrder}`;\n  }\n\n  protected filterSearchUrl(\n    skip: number,\n    limit: number,\n    sortParam: string,\n    sortOrder: string,\n  ): string {\n    return `Search${this.getEndpoint()}/${skip}/${limit}/${sortParam}/${sortOrder}`;\n  }\n\n  protected saveUrl(): string {\n    return `Save${this.getEndpoint()}`;\n  }\n\n  protected deleteUrl(itemIds: string[]): string {\n    return `${this.getEndpoint()}/${itemIds.join(',')}`;\n  }\n\n  // ===== Payload =====\n\n  buildPayload(\n    filters: FilterCondition[],\n    sorts: SortCondition[],\n    columns: ColumnDefinition<T>[],\n  ): SearchPropertyValue[] {\n    const filterPayload = this.filterHandler.buildFilterPayload(filters, columns);\n    const sortPayload = this.sortHandler.buildSortPayload(sorts, columns);\n    return [...filterPayload, ...sortPayload];\n  }\n\n  /** Filter-only payload (no sorts) for persisting saved filters. */\n  buildFilterPayloadOnly(\n    filters: FilterCondition[],\n    columns: ColumnDefinition<T>[],\n  ): SearchPropertyValue[] {\n    return this.filterHandler.buildFilterPayload(filters, columns);\n  }\n\n  /** Inverse of {@link buildFilterPayloadOnly}: rebuild FilterCondition[] on restore. */\n  parseFilterPayload(\n    payload: SearchPropertyValue[],\n    columns: ColumnDefinition<T>[],\n  ): FilterCondition[] {\n    return this.filterHandler.buildFilterConditions(payload, columns);\n  }\n\n  /**\n   * The sort the URL will carry: the user's first sortable selection, else the\n   * page default.\n   */\n  protected resolveSort(\n    sorts: SortCondition[] | undefined,\n    columns: ColumnDefinition<T>[] | undefined,\n  ): PrimarySort {\n    const chosen =\n      sorts && columns ? this.sortHandler.buildPrimarySort(sorts, columns) : null;\n\n    return (\n      chosen ?? {\n        sortParam: this.defaultSortParam(),\n        sortOrder: this.defaultSortOrder(),\n      }\n    );\n  }\n\n  // ===== Reads =====\n\n  /**\n   * Fetch data, automatically choosing the endpoint based on parameters:\n   * search-only -> GET WithParam, filters -> POST Search, otherwise plain GET.\n   *\n   * Sorts alone do not force the POST path: the plain GET already carries sort\n   * in its URL, so a sort-only request stays a GET.\n   */\n  async getData(\n    skip: number,\n    limit: number,\n    filters?: FilterCondition[],\n    sorts?: SortCondition[],\n    searchTerm?: string,\n    columns?: ColumnDefinition<T>[],\n  ): Promise<Paged<T> | ErrorResponse> {\n    const hasFilters = !!filters && filters.length > 0;\n    const { sortParam, sortOrder } = this.resolveSort(sorts, columns);\n\n    if (hasFilters) {\n      if (!columns) {\n        throw new Error('Columns required for filter operations');\n      }\n      const payload = this.buildPayload(filters!, sorts || [], columns);\n      // NOTE: post() here is (url, body, overrideToken?, baseUrl?) — baseUrl is\n      // the FOURTH argument, unlike get()/delete() where it is the second.\n      // Passing it third would send the URL as an auth token, and because\n      // HttpWebRequestService resolves errors into ErrorResponse rather than\n      // throwing, the failure would be silent.\n      return this.server.post<Paged<T>>(\n        this.filterSearchUrl(skip, limit, sortParam, sortOrder),\n        payload,\n        undefined,\n        this.baseUrl,\n      );\n    }\n\n    if (searchTerm) {\n      return this.server.get<Paged<T>>(\n        this.searchTermUrl(searchTerm, skip, limit, sortParam, sortOrder),\n        this.baseUrl,\n      );\n    }\n\n    return this.server.get<Paged<T>>(\n      this.listUrl(skip, limit, sortParam, sortOrder),\n      this.baseUrl,\n    );\n  }\n\n  // ===== Writes =====\n\n  async saveItems(items: T[]): Promise<T[] | ErrorResponse> {\n    return this.server.post<T[]>(this.saveUrl(), items, undefined, this.baseUrl);\n  }\n\n  async deleteItems(itemIds: string[]): Promise<boolean | ErrorResponse> {\n    // HttpWebRequestService.delete returns a raw observable that rejects on HTTP\n    // error (unlike get/post, which resolve an ErrorResponse), so normalize here\n    // to keep the facade's error-handling contract uniform.\n    try {\n      const result = await lastValueFrom(\n        this.server.delete<boolean>(this.deleteUrl(itemIds), this.baseUrl),\n      );\n      return result ?? false;\n    } catch (err: any) {\n      const msg =\n        err?.error?.ErrorMsg || err?.ErrorMsg || err?.message || 'Delete failed';\n      return new ErrorResponse(msg);\n    }\n  }\n\n  // ===== Export =====\n\n  async exportData(\n    filters?: FilterCondition[],\n    sorts?: SortCondition[],\n    searchTerm?: string,\n    columns?: ColumnDefinition<T>[],\n  ): Promise<T[] | ErrorResponse> {\n    const result = await this.getData(0, 999999, filters, sorts, searchTerm, columns);\n    if (result instanceof ErrorResponse) {\n      return result;\n    }\n    return result.Result || [];\n  }\n}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { Subject, debounce, distinctUntilChanged, timer } from 'rxjs';\n\n/**\n * Debounces search terms. Emits the term after the user stops typing.\n * Provided per page so each page owns its own debounce stream.\n *\n * `search$` is a stable observable whose debounce interval is read live from\n * `debounceMs`, so `setDebounceTime()` can be called after subscribers have\n * attached (e.g. from a runtime `@Input`) and still take effect.\n */\n@Injectable()\nexport class SearchHandlerService implements OnDestroy {\n  private searchSubject = new Subject<string>();\n  private debounceMs = 500;\n\n  search$ = this.searchSubject.asObservable().pipe(\n    debounce(() => timer(this.debounceMs)),\n    distinctUntilChanged(),\n  );\n\n  search(term: string): void {\n    this.searchSubject.next(term);\n  }\n\n  setDebounceTime(ms: number): void {\n    this.debounceMs = ms;\n  }\n\n  ngOnDestroy(): void {\n    this.searchSubject.complete();\n  }\n}\n","import { Injectable, OnDestroy, WritableSignal } from '@angular/core';\nimport { Observable, Subject, takeUntil } from 'rxjs';\nimport {\n  BaseModel,\n  ErrorResponse,\n  ObjectState,\n} from 'verben-workflow-ui/src/lib/models';\nimport { UtilService } from 'verben-workflow-ui/src/lib/services';\nimport {\n  CardData,\n  ColumnDefinition,\n  FilterCondition,\n  SortCondition,\n} from 'verben-ng-ui';\nimport { SearchHandlerService } from '../handlers/search-handler.service';\nimport { BasePageConfig } from '../models/page-config.interface';\nimport { PageFilterTabOption } from '../models/page-filter-tab-option.interface';\nimport { BaseDataPageService } from './base-data-page.service';\nimport { BaseDataPageState } from './base-data-page.state';\n\n/**\n * Abstract facade for base data pages.\n * Orchestrates state, service, and search handler, and surfaces the host app's\n * busy indicator / toasts through UtilService.\n */\n@Injectable()\nexport abstract class BaseDataPageFacade<T extends BaseModel> implements OnDestroy {\n  private destroy$ = new Subject<void>();\n  private cardSelectionCleared = new Subject<void>();\n\n  /**\n   * The saved config record for this page (once loaded/created), retained so\n   * successive saves in a session update the same record instead of duplicating.\n   */\n  private savedOption?: PageFilterTabOption;\n\n  constructor(\n    protected state: BaseDataPageState<T>,\n    protected service: BaseDataPageService<T>,\n    protected searchHandler: SearchHandlerService,\n    protected utilService: UtilService,\n    protected config: BasePageConfig<T>,\n  ) {\n    this.initializeSearchHandler();\n    this.state.setVisibleColumns(this.config.columns);\n    this.state.updateQueryParams({ limit: this.config.pageSize });\n\n    if (this.config.cardDataMapper) {\n      this.state.setCardDataMapper(this.config.cardDataMapper);\n    }\n\n    // Drive the host busy indicator from the shared loading flag.\n    this.state\n      .isUpdating$()\n      .pipe(takeUntil(this.destroy$))\n      .subscribe((loading) => this.utilService.sendBI(loading));\n  }\n\n  // ===== Configuration =====\n\n  getConfig(): BasePageConfig<T> {\n    return this.config;\n  }\n\n  getColumns(): ColumnDefinition<T>[] {\n    return this.config.columns;\n  }\n\n  // ===== Observables =====\n\n  get items$(): Observable<T[]> {\n    return this.state.getItems$();\n  }\n\n  get isLoading$(): Observable<boolean> {\n    return this.state.isUpdating$();\n  }\n\n  get totalCount$(): Observable<number> {\n    return this.state.getTotalCount$();\n  }\n\n  get filters$(): Observable<FilterCondition[]> {\n    return this.state.getFilters$();\n  }\n\n  get sorts$(): Observable<SortCondition[]> {\n    return this.state.getSorts$();\n  }\n\n  get searchTerm$(): Observable<string> {\n    return this.state.getSearchTerm$();\n  }\n\n  get visibleColumns$(): Observable<ColumnDefinition<T>[]> {\n    return this.state.getVisibleColumns$();\n  }\n\n  /** Last table/card view (true = table). Restored on load, persisted on change. */\n  get isTableView$(): Observable<boolean> {\n    return this.state.getIsTableView$();\n  }\n\n  getIsTableViewValue(): boolean {\n    return this.state.getIsTableViewValue();\n  }\n\n  get cardData(): WritableSignal<CardData[]> {\n    return this.state.getCardData();\n  }\n\n  get currentCardData(): WritableSignal<CardData | null> {\n    return this.state.getCurrentCardData();\n  }\n\n  /**\n   * Emits when a refetch invalidates the current card selection.\n   * Card views listen to this to clear their own selection state.\n   */\n  get cardSelectionCleared$(): Observable<void> {\n    return this.cardSelectionCleared.asObservable();\n  }\n\n  // ===== Data Loading =====\n\n  async loadData(): Promise<void> {\n    // Drop the open record before the list underneath it is replaced. Without\n    // this the detail form keeps rendering the previous record after a search\n    // or filter refetch — the \"form doesn't close after search\" bug.\n    this.clearCardSelection();\n    this.state.setUpdating(true);\n    this.state.clearItems();\n    this.state.resetPagination();\n\n    const params = this.state.getQueryParamsValue();\n    const filters = this.state.getFiltersValue();\n    const sorts = this.state.getSortsValue();\n    const searchTerm = this.state.getSearchTermValue();\n\n    const result = await this.service.getData(\n      params.skip,\n      params.limit,\n      filters,\n      sorts,\n      searchTerm,\n      this.config.columns,\n    );\n\n    this.state.setUpdating(false);\n\n    if (result instanceof ErrorResponse) {\n      this.utilService.showError(result.ErrorMsg);\n      return;\n    }\n\n    this.state.setItems(result.Result || []);\n    this.state.setTotalCount(result.Total || 0);\n  }\n\n  addItem(item: T): void {\n    this.state.addItem(item);\n  }\n\n  async loadMore(): Promise<void> {\n    this.state.setUpdating(true);\n    // Advance first, then fetch: the first page was loaded at skip=0 without\n    // moving the pointer, so the next page starts at skip + limit.\n    this.state.incrementPagination();\n\n    const params = this.state.getQueryParamsValue();\n    const filters = this.state.getFiltersValue();\n    const sorts = this.state.getSortsValue();\n    // Paging must stay inside the active search/filter, or page 2 returns\n    // unfiltered rows.\n    const searchTerm = this.state.getSearchTermValue();\n\n    const result = await this.service.getData(\n      params.skip,\n      params.limit,\n      filters,\n      sorts,\n      searchTerm,\n      this.config.columns,\n    );\n\n    this.state.setUpdating(false);\n\n    if (result instanceof ErrorResponse) {\n      this.utilService.showError(result.ErrorMsg);\n      return;\n    }\n\n    this.state.appendItems(result.Result || []);\n  }\n\n  /**\n   * Fetch an arbitrary window without touching page state, honouring the active\n   * search, filters and sorts. Backs the export component's dataQueryFunction.\n   */\n  async loadRange(skip: number, limit: number): Promise<T[]> {\n    const result = await this.service.getData(\n      skip,\n      limit,\n      this.state.getFiltersValue(),\n      this.state.getSortsValue(),\n      this.state.getSearchTermValue(),\n      this.config.columns,\n    );\n\n    if (result instanceof ErrorResponse) {\n      this.utilService.showError(result.ErrorMsg);\n      return [];\n    }\n\n    return result.Result || [];\n  }\n\n  async refresh(): Promise<void> {\n    await this.loadData();\n  }\n\n  // ===== Search =====\n\n  onSearch(term: string): void {\n    this.searchHandler.search(term);\n  }\n\n  private initializeSearchHandler(): void {\n    if (this.config.searchDebounceTime) {\n      this.searchHandler.setDebounceTime(this.config.searchDebounceTime);\n    }\n\n    this.searchHandler.search$.pipe(takeUntil(this.destroy$)).subscribe((term) => {\n      this.state.setSearchTerm(term);\n      this.loadData();\n    });\n  }\n\n  // ===== Filters / Sorts =====\n\n  async applyFilters(filters: FilterCondition[]): Promise<void> {\n    this.state.setFilters(filters);\n    this.persistConfig();\n    await this.loadData();\n  }\n\n  async clearFilters(): Promise<void> {\n    this.state.clearFilters();\n    this.persistConfig();\n    await this.loadData();\n  }\n\n  async applySorts(sorts: SortCondition[]): Promise<void> {\n    this.state.setSorts(sorts);\n    await this.loadData();\n  }\n\n  async clearSorts(): Promise<void> {\n    this.state.clearSorts();\n    await this.loadData();\n  }\n\n  // ===== Visible Columns =====\n\n  updateVisibleColumns(columns: ColumnDefinition<T>[]): void {\n    this.state.setVisibleColumns(columns);\n    this.persistConfig();\n  }\n\n  // ===== Table/Card View =====\n\n  /**\n   * Update the table/card view flag WITHOUT persisting. Use for transient or\n   * internal switches (e.g. dropping to card view to open a create form).\n   */\n  setViewState(isTableView: boolean): void {\n    this.state.setIsTableView(isTableView);\n  }\n\n  /** Record the user's table/card choice and persist it (non-blocking). */\n  setView(isTableView: boolean): void {\n    this.setViewState(isTableView);\n    this.persistConfig();\n  }\n\n  // ===== Persistence (saved filters, column arrangement, last view) =====\n\n  /**\n   * Restore this page's saved config (via the host UTIL_SERVICE), then load data.\n   * Safe to call in place of loadData() from the page's ngOnInit. When the page\n   * has no `ui` (opt-out) or nothing is saved / the host doesn't support it, it\n   * just loads data.\n   */\n  async restoreSavedConfig(): Promise<void> {\n    const ui = this.config.ui;\n    if (ui) {\n      const option = await this.utilService.getUserPageConfig(ui);\n      if (option) {\n        this.savedOption = option;\n\n        if (option.VisibleColumns?.length) {\n          const restored = this.rebuildColumns(option.VisibleColumns);\n          if (restored.length) {\n            this.state.setVisibleColumns(restored);\n          }\n        }\n\n        if (option.SavedFilters?.length) {\n          const conditions = this.service.parseFilterPayload(\n            option.SavedFilters,\n            this.config.columns,\n          );\n          this.state.setFilters(conditions);\n        }\n\n        this.state.setIsTableView(!option.IsCardView);\n      }\n    }\n\n    await this.loadData();\n  }\n\n  /**\n   * Assemble the current page config and persist it through the host. Fire-and-\n   * forget: never awaited, so the triggering UI action is not blocked. No-op when\n   * the page opts out of persistence (`ui` unset).\n   */\n  private persistConfig(): void {\n    const ui = this.config.ui;\n    if (!ui) return;\n\n    const option: PageFilterTabOption = {\n      ...this.newOption(ui),\n      ...(this.savedOption ?? {}),\n      UIRoute: ui,\n      IsCardView: !this.state.getIsTableViewValue(),\n      VisibleColumns: this.state.getVisibleColumnsValue().map((col) => col.id),\n      SavedFilters: this.service.buildFilterPayloadOnly(\n        this.state.getFiltersValue(),\n        this.config.columns,\n      ),\n      DataState: this.savedOption ? ObjectState.Changed : ObjectState.New,\n    };\n\n    this.utilService.saveUserPageConfig(option).then((saved) => {\n      if (saved) this.savedOption = saved;\n    });\n  }\n\n  /** Map ordered saved column ids back onto the config's ColumnDefinitions. */\n  private rebuildColumns(ids: string[]): ColumnDefinition<T>[] {\n    const byId = new Map(this.config.columns.map((col) => [col.id, col]));\n    return ids\n      .map((id) => byId.get(id))\n      .filter((col): col is ColumnDefinition<T> => !!col);\n  }\n\n  /** A fresh, unsaved PageFilterTabOption for this page. */\n  private newOption(ui: string): PageFilterTabOption {\n    return {\n      id: '',\n      Id: '',\n      Code: '',\n      TenantId: '',\n      ServiceName: '',\n      CreatedAt: new Date(),\n      UpdatedAt: new Date(),\n      DataState: ObjectState.New,\n      UIRoute: ui,\n      IsCardView: false,\n      VisibleColumns: [],\n      SavedFilters: [],\n    };\n  }\n\n  // ===== Card Data =====\n\n  selectCard(cardData: CardData | null): void {\n    this.state.setCurrentCardData(cardData);\n  }\n\n  /**\n   * Close the detail form.\n   *\n   * Goes through clearCardSelection rather than `selectCard(null)`: nulling the\n   * signal alone only empties the form's fields, because CardDataViewComponent\n   * holds its own `currentItem` that keeps the right-hand panel on screen. The\n   * cardSelectionCleared$ notification is what lets the component tear that down.\n   */\n  closeForm(): void {\n    this.clearCardSelection();\n  }\n\n  /**\n   * Open the detail form for a record. Routed through selectCard so table-row\n   * edit and card click share one source of truth for the open record — the\n   * form template binds the current card, not a separate \"selected item\".\n   * Reuses the matching existing card when there is one.\n   */\n  openForm(item?: T): void {\n    if (!item) {\n      this.selectCard(null);\n      return;\n    }\n    const key = this.itemKey(item);\n    const existing = this.state\n      .getCardData()()\n      .find((card) => card.data && this.itemKey(card.data as T) === key);\n    this.selectCard(existing ?? this.config.cardDataMapper(item));\n  }\n\n  /**\n   * Prepend a blank record and open it. Replaces the old approach of inferring\n   * \"this must be the new one\" from a falsy Name, which re-opened the form\n   * whenever a refetch happened to contain a blank-named record.\n   */\n  createItem(blank: T): T {\n    this.state.addItem(blank);\n    this.openForm(blank);\n    return blank;\n  }\n\n  /**\n   * Stable identity, matching BaseDataPageState.getItemKey. Kept here so the\n   * facade can match cards without widening the state's protected seam.\n   */\n  protected itemKey(item: T): string {\n    return item.Code || item.Id || item.id;\n  }\n\n  /**\n   * Drop the current card selection because the data it referred to is being\n   * replaced. Called by loadData(); deliberately not by loadMore(), which only\n   * appends and leaves an existing selection valid.\n   */\n  protected clearCardSelection(): void {\n    this.state.setCurrentCardData(null);\n    this.cardSelectionCleared.next();\n  }\n\n  // ===== CRUD =====\n\n  /**\n   * Stamp the write state a record should be saved with.\n   *\n   * A record is new only when it has no Code yet (the backend always assigns\n   * Code on persisted records). Don't trust the loaded DataState here: records\n   * returned from the backend come through unchanged and report DataState\n   * 'New', which would force an insert (and thus duplicate) on every edit.\n   */\n  protected withDataState(item: T): T {\n    return {\n      ...item,\n      DataState: item.Code ? ObjectState.Changed : ObjectState.New,\n    };\n  }\n\n  async saveItems(items: T[]): Promise<boolean> {\n    this.state.setUpdating(true);\n    const result = await this.service.saveItems(\n      items.map((item) => this.withDataState(item)),\n    );\n    this.state.setUpdating(false);\n\n    if (result instanceof ErrorResponse) {\n      this.utilService.showError(result.ErrorMsg);\n      return false;\n    }\n\n    this.utilService.showSuccess('Record(s) saved successfully');\n\n    // A save that inserted assigns a Code the client never had, so the saved\n    // record cannot be matched against the blank one it replaces. Refetch in\n    // that case; otherwise reconcile in place.\n    //\n    // The save endpoints are typed `Promise<any>` across this library and not\n    // all of them echo the saved rows back, so only reconcile when the response\n    // actually is an array — and refetch when it is not, rather than leaving the\n    // list showing pre-save values.\n    const inserted = items.some((item) => !item.Code);\n    if (inserted || !Array.isArray(result)) {\n      await this.refresh();\n    } else {\n      (result as T[]).forEach((savedItem) => this.state.upsertItem(savedItem));\n    }\n\n    return true;\n  }\n\n  async deleteItems(itemIds: string[]): Promise<boolean> {\n    this.state.setUpdating(true);\n    const result = await this.service.deleteItems(itemIds);\n    this.state.setUpdating(false);\n\n    if (result instanceof ErrorResponse) {\n      this.utilService.showError(result.ErrorMsg);\n      return false;\n    }\n\n    itemIds.forEach((id) => this.state.removeItem(id));\n    this.utilService.showSuccess('Record(s) deleted successfully');\n    return true;\n  }\n\n  // ===== Export =====\n\n  async exportData(): Promise<T[]> {\n    const filters = this.state.getFiltersValue();\n    const sorts = this.state.getSortsValue();\n    const searchTerm = this.state.getSearchTermValue();\n\n    const result = await this.service.exportData(\n      filters,\n      sorts,\n      searchTerm,\n      this.config.columns,\n    );\n\n    if (result instanceof ErrorResponse) {\n      return [];\n    }\n\n    return result;\n  }\n\n  // ===== Cleanup =====\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    this.cardSelectionCleared.complete();\n  }\n}\n","// Models and interfaces\nexport * from './models/api-payload';\nexport * from './models/page-config.interface';\n\n// Utilities\nexport * from './utils/column-helpers';\n\n// Core base classes\nexport * from './core/base-data-page.facade';\nexport * from './core/base-data-page.service';\nexport * from './core/base-data-page.state';\n\n// Handlers\nexport * from './handlers/filter-handler.service';\nexport * from './handlers/search-handler.service';\nexport * from './handlers/sort-handler.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["UiSortDirection","ApiSortDirection"],"mappings":";;;;;;;;AAAA;AACA;AACA;AACA;AACA;;ACDA;;;;;AAKG;AACG,SAAU,eAAe,CAAI,MAA2B,EAAA;AAC5D,IAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QACvB,MAAM,IAAI,KAAK,CACb,CAAA,QAAA,EAAW,MAAM,CAAC,EAAE,CAAoD,kDAAA,CAAA,CACzE,CAAC;KACH;AACD,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AACpC,CAAC;AAED;;;AAGG;AACG,SAAU,iBAAiB,CAC/B,MAA2B,EAAA;AAE3B,IAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;QACvB,OAAO,uBAAuB,CAAC,MAAM,CAAC;KACvC;IAED,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC;;;AAI9D,IAAA,IACE,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,QAAA,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC7B,QAAA,qCAAqC,CAAC,IAAI,CAAC,YAAY,CAAC,EACxD;QACA,OAAO,uBAAuB,CAAC,IAAI,CAAC;KACrC;AAED,IAAA,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;QACnE,OAAO,uBAAuB,CAAC,IAAI,CAAC;KACrC;AAED,IAAA,IACE,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC9B,QAAA,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC/B,QAAA,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC;AAC9B,QAAA,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,EAC9B;QACA,OAAO,uBAAuB,CAAC,OAAO,CAAC;KACxC;IAED,OAAO,uBAAuB,CAAC,MAAM,CAAC;AACxC,CAAC;AAED;;AAEG;AACa,SAAA,UAAU,CACxB,OAA8B,EAC9B,QAAgB,EAAA;AAEhB,IAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;AACpD,CAAC;AAED;;;;AAIG;AACG,SAAU,iBAAiB,CAC/B,OAA8B,EAAA;AAE9B,IAAA,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;AACpD;;AC9DA;;;;AAIG;MACmB,iBAAiB,CAAA;AAC3B,IAAA,SAAS,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAEhD,IAAA,MAAM,GAAG,IAAI,eAAe,CAAM,EAAE,CAAC,CAAC;AACtC,IAAA,WAAW,GAAG,IAAI,eAAe,CAAS,CAAC,CAAC,CAAC;IAE7C,YAAY,GAAG,IAAI,eAAe,CAAiB;AAC3D,QAAA,IAAI,EAAE,CAAC;AACP,QAAA,KAAK,EAAE,EAAE;QACT,SAAS,EAAE,aAAa,CAAC,IAAI;AAC9B,KAAA,CAAC,CAAC;AAEO,IAAA,WAAW,GAAG,IAAI,eAAe,CAAS,EAAE,CAAC,CAAC;AAE9C,IAAA,QAAQ,GAAG,IAAI,eAAe,CAAoB,EAAE,CAAC,CAAC;AACtD,IAAA,MAAM,GAAG,IAAI,eAAe,CAAkB,EAAE,CAAC,CAAC;AAElD,IAAA,eAAe,GAAG,IAAI,eAAe,CAAwB,EAAE,CAAC,CAAC;;AAGjE,IAAA,YAAY,GAAG,IAAI,eAAe,CAAU,KAAK,CAAC,CAAC;AAEnD,IAAA,QAAQ,GAAG,MAAM,CAAa,EAAE,CAAC,CAAC;AAClC,IAAA,eAAe,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;AAEhD,IAAA,cAAc,CAAyB;AAEjD;;;;;AAKG;AACO,IAAA,UAAU,CAAC,IAAO,EAAA;QAC1B,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;KACxC;AAES,IAAA,uBAAuB,CAAC,KAAU,EAAA;AAC1C,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;YACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,cAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;SACpE;KACF;;IAID,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC;KACtC;AAED,IAAA,WAAW,CAAC,UAAmB,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;KACjC;;IAID,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;KACnC;IAED,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;KAC/B;AAED,IAAA,QAAQ,CAAC,KAAU,EAAA;AACjB,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxB,QAAA,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,CAAC;KACrC;AAED,IAAA,WAAW,CAAC,QAAa,EAAA;AACvB,QAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,QAAQ,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;KACxC;AAED,IAAA,OAAO,CAAC,IAAO,EAAA;AACb,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;KACxC;AAED,IAAA,UAAU,CAAC,WAAc,EAAA;QACvB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QACzC,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;AACvE,QAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AAChB,YAAA,KAAK,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC;AAC3B,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC;AAC5B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC3B,YAAA,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC;SACxC;KACF;;AAGD,IAAA,UAAU,CAAC,IAAO,EAAA;QAChB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAClC,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;AACvB,aAAA,QAAQ,EAAE;AACV,aAAA,IAAI,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QACzD,IAAI,MAAM,EAAE;AACV,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;SACvB;aAAM;AACL,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;SACpB;KACF;AAED,IAAA,UAAU,CAAC,OAAe,EAAA;AACxB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM;AAC9B,aAAA,QAAQ,EAAE;AACV,aAAA,MAAM,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,CAAC;KAC7C;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrB,QAAA,IAAI,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC;KAClC;;IAID,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;KACxC;AAED,IAAA,aAAa,CAAC,KAAa,EAAA;AACzB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KAC9B;;IAID,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;KACzC;IAED,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KACrC;AAED,IAAA,iBAAiB,CAAC,MAA+B,EAAA;AAC/C,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;KACxE;IAED,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;KACtE;IAED,mBAAmB,GAAA;QACjB,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;AACnD,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;AACrB,YAAA,GAAG,aAAa;AAChB,YAAA,IAAI,EAAE,aAAa,CAAC,IAAI,GAAG,aAAa,CAAC,KAAK;AAC/C,SAAA,CAAC,CAAC;KACJ;;IAID,cAAc,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;KACxC;IAED,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KACpC;AAED,IAAA,aAAa,CAAC,IAAY,EAAA;AACxB,QAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC7B;;IAID,WAAW,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;KACrC;IAED,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;KACjC;AAED,IAAA,UAAU,CAAC,OAA0B,EAAA;AACnC,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC7B;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACxB;;IAID,SAAS,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;KACnC;IAED,aAAa,GAAA;AACX,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;KAC/B;AAED,IAAA,QAAQ,CAAC,KAAsB,EAAA;AAC7B,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzB;IAED,UAAU,GAAA;AACR,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACtB;;IAID,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,YAAY,EAAE,CAAC;KAC5C;IAED,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC;KACxC;AAED,IAAA,iBAAiB,CAAC,OAA8B,EAAA;AAC9C,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KACpC;;IAID,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;KACzC;IAED,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC;KACrC;AAED,IAAA,cAAc,CAAC,WAAoB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KACrC;;AAID,IAAA,iBAAiB,CAAC,MAA6B,EAAA;AAC7C,QAAA,IAAI,CAAC,cAAc,GAAG,MAAM,CAAC;KAC9B;IAED,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AAED,IAAA,WAAW,CAAC,IAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KACzB;IAED,kBAAkB,GAAA;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;KAC7B;AAED,IAAA,kBAAkB,CAAC,IAAqB,EAAA;AACtC,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;KAChC;;IAID,KAAK,GAAA;QACH,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,UAAU,EAAE,CAAC;AAClB,QAAA,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AACtB,QAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC/B,IAAI,CAAC,eAAe,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;KACvB;AACF;;AC/QD;;;;;;;;AAQG;MAEU,oBAAoB,CAAA;IAC/B,kBAAkB,CAChB,OAA0C,EAC1C,OAA8B,EAAA;AAE9B,QAAA,OAAQ,OAAgD;aACrD,GAAG,CAAC,CAAC,MAAM,KACV,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC;AACvB,cAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;cAC3B,IAAI,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAC9C;aACA,MAAM,CAAC,OAAO,CAA0B,CAAC;KAC7C;AAEO,IAAA,YAAY,CAClB,MAAqC,EAAA;AAErC,QAAA,OAAQ,MAAsB,CAAC,IAAI,KAAK,SAAS,CAAC;KACnD;IAEO,mBAAmB,CACzB,MAAuB,EACvB,OAA8B,EAAA;QAE9B,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM,EAAE;AACX,YAAA,OAAO,IAAI,CAAC;SACb;;;AAID,QAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACvB,YAAA,OAAO,IAAI,CAAC;SACb;QAED,OAAO;AACL,YAAA,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC;AACrC,YAAA,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AACjC,YAAA,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC;YAC/B,QAAQ,EAAE,cAAc,CAAC,GAAG;YAC5B,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;SAC9C,CAAC;KACH;;AAGO,IAAA,cAAc,CAAC,MAAmB,EAAA;AACxC,QAAA,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE;AACvD,YAAA,OAAO,IAAI,CAAC;SACb;QAED,OAAO;YACL,YAAY,EAAE,MAAM,CAAC,IAAI;AACzB,YAAA,WAAW,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;YACjC,IAAI,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;YACzC,QAAQ,EAAE,cAAc,CAAC,GAAG;YAC5B,IAAI,EAAE,MAAM,CAAC,SAAS;kBAClB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC;kBACxC,kBAAkB,CAAC,EAAE;SAC1B,CAAC;KACH;AAED;;;;AAIG;IACH,qBAAqB,CACnB,OAA8B,EAC9B,OAA8B,EAAA;AAE9B,QAAA,OAAO,OAAO;AACX,aAAA,GAAG,CAAC,CAAC,EAAE,KAAI;YACV,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CACzB,CAAC,GAAG,KAAK,GAAG,CAAC,WAAW,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,YAAY,CACxE,CAAC;YACF,IAAI,CAAC,MAAM,EAAE;gBACX,OAAO,CAAC,IAAI,CAAC,CAAA,4CAAA,EAA+C,EAAE,CAAC,YAAY,CAAE,CAAA,CAAC,CAAC;AAC/E,gBAAA,OAAO,IAAI,CAAC;aACb;YACD,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,EAAE;gBACnB,QAAQ,EAAE,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,CAAC;gBACzC,KAAK,EAAE,EAAE,CAAC,WAAW;aACH,CAAC;AACvB,SAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAAsB,CAAC;KACzC;AAEO,IAAA,iBAAiB,CAAC,IAAwB,EAAA;QAChD,QAAQ,IAAI;YACV,KAAK,kBAAkB,CAAC,IAAI;AAC1B,gBAAA,OAAO,UAAU,CAAC;YACpB,KAAK,kBAAkB,CAAC,EAAE;AACxB,gBAAA,OAAO,aAAa,CAAC;YACvB,KAAK,kBAAkB,CAAC,EAAE;AACxB,gBAAA,OAAO,UAAU,CAAC;YACpB,KAAK,kBAAkB,CAAC,EAAE,CAAC;AAC3B,YAAA;AACE,gBAAA,OAAO,QAAQ,CAAC;SACnB;KACF;AAEO,IAAA,iBAAiB,CAAC,QAAgB,EAAA;AACxC,QAAA,MAAM,WAAW,GAAuC;YACtD,UAAU,EAAE,kBAAkB,CAAC,IAAI;YACnC,QAAQ,EAAE,kBAAkB,CAAC,IAAI;YACjC,QAAQ,EAAE,kBAAkB,CAAC,IAAI;YACjC,MAAM,EAAE,kBAAkB,CAAC,EAAE;YAC7B,KAAK,EAAE,kBAAkB,CAAC,EAAE;YAC5B,WAAW,EAAE,kBAAkB,CAAC,EAAE;YAClC,QAAQ,EAAE,kBAAkB,CAAC,EAAE;YAC/B,EAAE,EAAE,kBAAkB,CAAC,EAAE;YACzB,MAAM,EAAE,kBAAkB,CAAC,EAAE;YAC7B,KAAK,EAAE,kBAAkB,CAAC,EAAE;SAC7B,CAAC;QAEF,OAAO,WAAW,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC;KACvD;AAED;;;AAGG;AACK,IAAA,iBAAiB,CAAC,IAAoB,EAAA;QAC5C,QAAQ,IAAI;YACV,KAAK,cAAc,CAAC,MAAM;gBACxB,OAAO,uBAAuB,CAAC,MAAM,CAAC;YACxC,KAAK,cAAc,CAAC,OAAO,CAAC;YAC5B,KAAK,cAAc,CAAC,MAAM;gBACxB,OAAO,uBAAuB,CAAC,GAAG,CAAC;YACrC,KAAK,cAAc,CAAC,OAAO;gBACzB,OAAO,uBAAuB,CAAC,OAAO,CAAC;YACzC,KAAK,cAAc,CAAC,MAAM;gBACxB,OAAO,uBAAuB,CAAC,KAAK,CAAC;YACvC,KAAK,cAAc,CAAC,IAAI;gBACtB,OAAO,uBAAuB,CAAC,IAAI,CAAC;YACtC,KAAK,cAAc,CAAC,IAAI;gBACtB,OAAO,uBAAuB,CAAC,IAAI,CAAC;AACtC,YAAA;gBACE,OAAO,uBAAuB,CAAC,MAAM,CAAC;SACzC;KACF;wGA9IU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAApB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,oBAAoB,cADP,MAAM,EAAA,CAAA,CAAA;;4FACnB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;ACJlC;;;;;;;;;AASG;MAEU,kBAAkB,CAAA;AAC7B;;;;AAIG;IACH,gBAAgB,CACd,KAAsB,EACtB,OAA8B,EAAA;AAE9B,QAAA,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,MAAM,EAAE,WAAW,EAAE;gBACxB,SAAS;aACV;YACD,OAAO;AACL,gBAAA,SAAS,EAAE,eAAe,CAAC,MAAM,CAAC;gBAClC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;aACjD,CAAC;SACH;AACD,QAAA,OAAO,IAAI,CAAC;KACb;IAED,gBAAgB,CACd,KAAsB,EACtB,OAA8B,EAAA;AAE9B,QAAA,OAAO,KAAK;AACT,aAAA,GAAG,CAAC,CAAC,IAAI,KAAI;YACZ,MAAM,MAAM,GAAG,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAElD,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,IAAI,CAAC;aACb;AAED,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE;AACvB,gBAAA,OAAO,IAAI,CAAC;aACb;YAED,OAAO;AACL,gBAAA,YAAY,EAAE,eAAe,CAAC,MAAM,CAAC;AACrC,gBAAA,WAAW,EAAE,EAAE;AACf,gBAAA,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC;gBAC/B,QAAQ,EAAE,cAAc,CAAC,GAAG;gBAC5B,IAAI,EAAE,kBAAkB,CAAC,EAAE;gBAC3B,IAAI,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC;aAC5C,CAAC;AACJ,SAAC,CAAC;aACD,MAAM,CAAC,OAAO,CAA0B,CAAC;KAC7C;AAEO,IAAA,gBAAgB,CAAC,SAA0B,EAAA;QACjD,QAAQ,SAAS;YACf,KAAKA,eAAe,CAAC,GAAG;gBACtB,OAAOC,aAAgB,CAAC,GAAG,CAAC;YAC9B,KAAKD,eAAe,CAAC,IAAI;gBACvB,OAAOC,aAAgB,CAAC,IAAI,CAAC;AAC/B,YAAA;gBACE,OAAOA,aAAgB,CAAC,IAAI,CAAC;SAChC;KACF;wGA5DU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cADL,MAAM,EAAA,CAAA,CAAA;;4FACnB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAD9B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE,CAAA;;;AChBlC;;;;;;;;;;;;;AAaG;MAEmB,mBAAmB,CAAA;AAE3B,IAAA,MAAA,CAAA;AACA,IAAA,aAAA,CAAA;AACA,IAAA,WAAA,CAAA;AACA,IAAA,OAAA,CAAA;AAJZ,IAAA,WAAA,CACY,MAA6B,EAC7B,aAAmC,EACnC,WAA+B,EAC/B,OAAgB,EAAA;QAHhB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAuB;QAC7B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAsB;QACnC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAoB;QAC/B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;KACxB;;IAMM,gBAAgB,GAAA;AACxB,QAAA,OAAO,WAAW,CAAC;KACpB;IAES,gBAAgB,GAAA;QACxB,OAAO,aAAa,CAAC,IAAI,CAAC;KAC3B;;AAIS,IAAA,OAAO,CACf,IAAY,EACZ,KAAa,EACb,SAAiB,EACjB,SAAiB,EAAA;AAEjB,QAAA,OAAO,CAAM,GAAA,EAAA,IAAI,CAAC,WAAW,EAAE,CAAI,CAAA,EAAA,IAAI,CAAI,CAAA,EAAA,KAAK,CAAI,CAAA,EAAA,SAAS,CAAI,CAAA,EAAA,SAAS,EAAE,CAAC;KAC9E;IAES,aAAa,CACrB,IAAY,EACZ,IAAY,EACZ,KAAa,EACb,SAAiB,EACjB,SAAiB,EAAA;AAEjB,QAAA,OAAO,MAAM,IAAI,CAAC,WAAW,EAAE,aAAa,IAAI,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,KAAK,CAAI,CAAA,EAAA,SAAS,CAAI,CAAA,EAAA,SAAS,EAAE,CAAC;KAC/F;AAES,IAAA,eAAe,CACvB,IAAY,EACZ,KAAa,EACb,SAAiB,EACjB,SAAiB,EAAA;AAEjB,QAAA,OAAO,CAAS,MAAA,EAAA,IAAI,CAAC,WAAW,EAAE,CAAI,CAAA,EAAA,IAAI,CAAI,CAAA,EAAA,KAAK,CAAI,CAAA,EAAA,SAAS,CAAI,CAAA,EAAA,SAAS,EAAE,CAAC;KACjF;IAES,OAAO,GAAA;AACf,QAAA,OAAO,OAAO,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;KACpC;AAES,IAAA,SAAS,CAAC,OAAiB,EAAA;AACnC,QAAA,OAAO,CAAG,EAAA,IAAI,CAAC,WAAW,EAAE,CAAA,CAAA,EAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;KACrD;;AAID,IAAA,YAAY,CACV,OAA0B,EAC1B,KAAsB,EACtB,OAA8B,EAAA;AAE9B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9E,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACtE,QAAA,OAAO,CAAC,GAAG,aAAa,EAAE,GAAG,WAAW,CAAC,CAAC;KAC3C;;IAGD,sBAAsB,CACpB,OAA0B,EAC1B,OAA8B,EAAA;QAE9B,OAAO,IAAI,CAAC,aAAa,CAAC,kBAAkB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KAChE;;IAGD,kBAAkB,CAChB,OAA8B,EAC9B,OAA8B,EAAA;QAE9B,OAAO,IAAI,CAAC,aAAa,CAAC,qBAAqB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;KACnE;AAED;;;AAGG;IACO,WAAW,CACnB,KAAkC,EAClC,OAA0C,EAAA;QAE1C,MAAM,MAAM,GACV,KAAK,IAAI,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QAE9E,QACE,MAAM,IAAI;AACR,YAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE;AAClC,YAAA,SAAS,EAAE,IAAI,CAAC,gBAAgB,EAAE;AACnC,SAAA,EACD;KACH;;AAID;;;;;;AAMG;AACH,IAAA,MAAM,OAAO,CACX,IAAY,EACZ,KAAa,EACb,OAA2B,EAC3B,KAAuB,EACvB,UAAmB,EACnB,OAA+B,EAAA;QAE/B,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;AACnD,QAAA,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QAElE,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,OAAO,EAAE;AACZ,gBAAA,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;aAC3D;AACD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAQ,EAAE,KAAK,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;;;;;;YAMlE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CACrB,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EACvD,OAAO,EACP,SAAS,EACT,IAAI,CAAC,OAAO,CACb,CAAC;SACH;QAED,IAAI,UAAU,EAAE;YACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CACpB,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EACjE,IAAI,CAAC,OAAO,CACb,CAAC;SACH;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CACpB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,EAC/C,IAAI,CAAC,OAAO,CACb,CAAC;KACH;;IAID,MAAM,SAAS,CAAC,KAAU,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAM,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;KAC9E;IAED,MAAM,WAAW,CAAC,OAAiB,EAAA;;;;AAIjC,QAAA,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAU,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CACnE,CAAC;YACF,OAAO,MAAM,IAAI,KAAK,CAAC;SACxB;QAAC,OAAO,GAAQ,EAAE;AACjB,YAAA,MAAM,GAAG,GACP,GAAG,EAAE,KAAK,EAAE,QAAQ,IAAI,GAAG,EAAE,QAAQ,IAAI,GAAG,EAAE,OAAO,IAAI,eAAe,CAAC;AAC3E,YAAA,OAAO,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;SAC/B;KACF;;IAID,MAAM,UAAU,CACd,OAA2B,EAC3B,KAAuB,EACvB,UAAmB,EACnB,OAA+B,EAAA;AAE/B,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;AAClF,QAAA,IAAI,MAAM,YAAY,aAAa,EAAE;AACnC,YAAA,OAAO,MAAM,CAAC;SACf;AACD,QAAA,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;KAC5B;wGA/LmB,mBAAmB,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAAnB,mBAAmB,EAAA,CAAA,CAAA;;4FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBADxC,UAAU;;;ACzBX;;;;;;;AAOG;MAEU,oBAAoB,CAAA;AACvB,IAAA,aAAa,GAAG,IAAI,OAAO,EAAU,CAAC;IACtC,UAAU,GAAG,GAAG,CAAC;IAEzB,OAAO,GAAG,IAAI,CAAC,aAAa,CAAC,YAAY,EAAE,CAAC,IAAI,CAC9C,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EACtC,oBAAoB,EAAE,CACvB,CAAC;AAEF,IAAA,MAAM,CAAC,IAAY,EAAA;AACjB,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC/B;AAED,IAAA,eAAe,CAAC,EAAU,EAAA;AACxB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;KAC/B;wGAnBU,oBAAoB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAApB,oBAAoB,EAAA,CAAA,CAAA;;4FAApB,oBAAoB,EAAA,UAAA,EAAA,CAAA;kBADhC,UAAU;;;ACSX;;;;AAIG;MAEmB,kBAAkB,CAAA;AAW1B,IAAA,KAAA,CAAA;AACA,IAAA,OAAA,CAAA;AACA,IAAA,aAAA,CAAA;AACA,IAAA,WAAA,CAAA;AACA,IAAA,MAAA,CAAA;AAdJ,IAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;AAC/B,IAAA,oBAAoB,GAAG,IAAI,OAAO,EAAQ,CAAC;AAEnD;;;AAGG;AACK,IAAA,WAAW,CAAuB;IAE1C,WACY,CAAA,KAA2B,EAC3B,OAA+B,EAC/B,aAAmC,EACnC,WAAwB,EACxB,MAAyB,EAAA;QAJzB,IAAK,CAAA,KAAA,GAAL,KAAK,CAAsB;QAC3B,IAAO,CAAA,OAAA,GAAP,OAAO,CAAwB;QAC/B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAsB;QACnC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAa;QACxB,IAAM,CAAA,MAAA,GAAN,MAAM,CAAmB;QAEnC,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClD,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AAE9D,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE;YAC9B,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;SAC1D;;AAGD,QAAA,IAAI,CAAC,KAAK;AACP,aAAA,WAAW,EAAE;AACb,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;KAC7D;;IAID,SAAS,GAAA;QACP,OAAO,IAAI,CAAC,MAAM,CAAC;KACpB;IAED,UAAU,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;KAC5B;;AAID,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;KAC/B;AAED,IAAA,IAAI,UAAU,GAAA;AACZ,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;KACjC;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;KACpC;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;KACjC;AAED,IAAA,IAAI,MAAM,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;KAC/B;AAED,IAAA,IAAI,WAAW,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,cAAc,EAAE,CAAC;KACpC;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;KACxC;;AAGD,IAAA,IAAI,YAAY,GAAA;AACd,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;KACrC;IAED,mBAAmB,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;KACzC;AAED,IAAA,IAAI,QAAQ,GAAA;AACV,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;KACjC;AAED,IAAA,IAAI,eAAe,GAAA;AACjB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;KACxC;AAED;;;AAGG;AACH,IAAA,IAAI,qBAAqB,GAAA;AACvB,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,YAAY,EAAE,CAAC;KACjD;;AAID,IAAA,MAAM,QAAQ,GAAA;;;;QAIZ,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAC7B,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAE7B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;AAEnD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACvC,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,KAAK,EACZ,OAAO,EACP,KAAK,EACL,UAAU,EACV,IAAI,CAAC,MAAM,CAAC,OAAO,CACpB,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAE9B,QAAA,IAAI,MAAM,YAAY,aAAa,EAAE;YACnC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,OAAO;SACR;QAED,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;KAC7C;AAED,IAAA,OAAO,CAAC,IAAO,EAAA;AACb,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1B;AAED,IAAA,MAAM,QAAQ,GAAA;AACZ,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;;;AAG7B,QAAA,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAEjC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;;;QAGzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;AAEnD,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACvC,MAAM,CAAC,IAAI,EACX,MAAM,CAAC,KAAK,EACZ,OAAO,EACP,KAAK,EACL,UAAU,EACV,IAAI,CAAC,MAAM,CAAC,OAAO,CACpB,CAAC;AAEF,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAE9B,QAAA,IAAI,MAAM,YAAY,aAAa,EAAE;YACnC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAC5C,OAAO;SACR;QAED,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;KAC7C;AAED;;;AAGG;AACH,IAAA,MAAM,SAAS,CAAC,IAAY,EAAE,KAAa,EAAA;AACzC,QAAA,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CACvC,IAAI,EACJ,KAAK,EACL,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,EAC5B,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,EAC1B,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,EAC/B,IAAI,CAAC,MAAM,CAAC,OAAO,CACpB,CAAC;AAEF,QAAA,IAAI,MAAM,YAAY,aAAa,EAAE;YACnC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C,YAAA,OAAO,EAAE,CAAC;SACX;AAED,QAAA,OAAO,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;KAC5B;AAED,IAAA,MAAM,OAAO,GAAA;AACX,QAAA,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;KACvB;;AAID,IAAA,QAAQ,CAAC,IAAY,EAAA;AACnB,QAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACjC;IAEO,uBAAuB,GAAA;AAC7B,QAAA,IAAI,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE;YAClC,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;SACpE;QAED,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,KAAI;AAC3E,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,QAAQ,EAAE,CAAC;AAClB,SAAC,CAAC,CAAC;KACJ;;IAID,MAAM,YAAY,CAAC,OAA0B,EAAA;AAC3C,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;KACvB;AAED,IAAA,MAAM,YAAY,GAAA;AAChB,QAAA,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;QAC1B,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,QAAA,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;KACvB;IAED,MAAM,UAAU,CAAC,KAAsB,EAAA;AACrC,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3B,QAAA,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;KACvB;AAED,IAAA,MAAM,UAAU,GAAA;AACd,QAAA,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;AACxB,QAAA,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;KACvB;;AAID,IAAA,oBAAoB,CAAC,OAA8B,EAAA;AACjD,QAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACtC,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;AAID;;;AAGG;AACH,IAAA,YAAY,CAAC,WAAoB,EAAA;AAC/B,QAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;KACxC;;AAGD,IAAA,OAAO,CAAC,WAAoB,EAAA;AAC1B,QAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QAC/B,IAAI,CAAC,aAAa,EAAE,CAAC;KACtB;;AAID;;;;;AAKG;AACH,IAAA,MAAM,kBAAkB,GAAA;AACtB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC1B,IAAI,EAAE,EAAE;YACN,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;YAC5D,IAAI,MAAM,EAAE;AACV,gBAAA,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC;AAE1B,gBAAA,IAAI,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE;oBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;AAC5D,oBAAA,IAAI,QAAQ,CAAC,MAAM,EAAE;AACnB,wBAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;qBACxC;iBACF;AAED,gBAAA,IAAI,MAAM,CAAC,YAAY,EAAE,MAAM,EAAE;AAC/B,oBAAA,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAChD,MAAM,CAAC,YAAY,EACnB,IAAI,CAAC,MAAM,CAAC,OAAO,CACpB,CAAC;AACF,oBAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;iBACnC;gBAED,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;aAC/C;SACF;AAED,QAAA,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;KACvB;AAED;;;;AAIG;IACK,aAAa,GAAA;AACnB,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;AAC1B,QAAA,IAAI,CAAC,EAAE;YAAE,OAAO;AAEhB,QAAA,MAAM,MAAM,GAAwB;AAClC,YAAA,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;AACrB,YAAA,IAAI,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC;AAC3B,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,UAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,EAAE;AAC7C,YAAA,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,sBAAsB,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,CAAC;AACxE,YAAA,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAC/C,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,EAC5B,IAAI,CAAC,MAAM,CAAC,OAAO,CACpB;AACD,YAAA,SAAS,EAAE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG;SACpE,CAAC;AAEF,QAAA,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;AACzD,YAAA,IAAI,KAAK;AAAE,gBAAA,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;AACtC,SAAC,CAAC,CAAC;KACJ;;AAGO,IAAA,cAAc,CAAC,GAAa,EAAA;QAClC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;AACtE,QAAA,OAAO,GAAG;AACP,aAAA,GAAG,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;aACzB,MAAM,CAAC,CAAC,GAAG,KAAiC,CAAC,CAAC,GAAG,CAAC,CAAC;KACvD;;AAGO,IAAA,SAAS,CAAC,EAAU,EAAA;QAC1B,OAAO;AACL,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,EAAE,EAAE,EAAE;AACN,YAAA,IAAI,EAAE,EAAE;AACR,YAAA,QAAQ,EAAE,EAAE;AACZ,YAAA,WAAW,EAAE,EAAE;YACf,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,SAAS,EAAE,WAAW,CAAC,GAAG;AAC1B,YAAA,OAAO,EAAE,EAAE;AACX,YAAA,UAAU,EAAE,KAAK;AACjB,YAAA,cAAc,EAAE,EAAE;AAClB,YAAA,YAAY,EAAE,EAAE;SACjB,CAAC;KACH;;AAID,IAAA,UAAU,CAAC,QAAyB,EAAA;AAClC,QAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACzC;AAED;;;;;;;AAOG;IACH,SAAS,GAAA;QACP,IAAI,CAAC,kBAAkB,EAAE,CAAC;KAC3B;AAED;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,IAAQ,EAAA;QACf,IAAI,CAAC,IAAI,EAAE;AACT,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YACtB,OAAO;SACR;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/B,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK;AACxB,aAAA,WAAW,EAAE,EAAE;aACf,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAS,CAAC,KAAK,GAAG,CAAC,CAAC;AACrE,QAAA,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC;KAC/D;AAED;;;;AAIG;AACH,IAAA,UAAU,CAAC,KAAQ,EAAA;AACjB,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1B,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrB,QAAA,OAAO,KAAK,CAAC;KACd;AAED;;;AAGG;AACO,IAAA,OAAO,CAAC,IAAO,EAAA;QACvB,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;KACxC;AAED;;;;AAIG;IACO,kBAAkB,GAAA;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC;KAClC;;AAID;;;;;;;AAOG;AACO,IAAA,aAAa,CAAC,IAAO,EAAA;QAC7B,OAAO;AACL,YAAA,GAAG,IAAI;AACP,YAAA,SAAS,EAAE,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,GAAG;SAC7D,CAAC;KACH;IAED,MAAM,SAAS,CAAC,KAAU,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,CACzC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAC9C,CAAC;AACF,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAE9B,QAAA,IAAI,MAAM,YAAY,aAAa,EAAE;YACnC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,8BAA8B,CAAC,CAAC;;;;;;;;;AAU7D,QAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACtC,YAAA,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;SACtB;aAAM;AACJ,YAAA,MAAc,CAAC,OAAO,CAAC,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;SAC1E;AAED,QAAA,OAAO,IAAI,CAAC;KACb;IAED,MAAM,WAAW,CAAC,OAAiB,EAAA;AACjC,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AACvD,QAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAE9B,QAAA,IAAI,MAAM,YAAY,aAAa,EAAE;YACnC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC5C,YAAA,OAAO,KAAK,CAAC;SACd;AAED,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AACnD,QAAA,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,gCAAgC,CAAC,CAAC;AAC/D,QAAA,OAAO,IAAI,CAAC;KACb;;AAID,IAAA,MAAM,UAAU,GAAA;QACd,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;QAEnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAC1C,OAAO,EACP,KAAK,EACL,UAAU,EACV,IAAI,CAAC,MAAM,CAAC,OAAO,CACpB,CAAC;AAEF,QAAA,IAAI,MAAM,YAAY,aAAa,EAAE;AACnC,YAAA,OAAO,EAAE,CAAC;SACX;AAED,QAAA,OAAO,MAAM,CAAC;KACf;;IAID,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,CAAC;KACtC;wGAzfmB,kBAAkB,EAAA,IAAA,EAAA,SAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAAlB,kBAAkB,EAAA,CAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBADvC,UAAU;;;ACzBX;;ACAA;;AAEG;;;;"}