{"version":3,"file":"acontplus-ng-infrastructure.mjs","sources":["../../../../packages/ng-infrastructure/src/lib/interceptors/api-interceptor.ts","../../../../packages/ng-infrastructure/src/lib/services/logging-service.ts","../../../../packages/ng-infrastructure/src/lib/services/tenant-info.ts","../../../../packages/ng-infrastructure/src/lib/services/correlation-info.ts","../../../../packages/ng-infrastructure/src/lib/interceptors/http-context-interceptor.ts","../../../../packages/ng-infrastructure/src/lib/interceptors/spinner-interceptor.ts","../../../../packages/ng-infrastructure/src/lib/repositories/base-http-repository.ts","../../../../packages/ng-infrastructure/src/lib/repositories/generic-repository.ts","../../../../packages/ng-infrastructure/src/lib/repositories/repository-factory.ts","../../../../packages/ng-infrastructure/src/lib/adapters/angular-http-adapter.ts","../../../../packages/ng-infrastructure/src/lib/services/core-config-service.ts","../../../../packages/ng-infrastructure/src/lib/use-cases/base-use-case.ts","../../../../packages/ng-infrastructure/src/lib/use-cases/commands.ts","../../../../packages/ng-infrastructure/src/lib/use-cases/queries.ts","../../../../packages/ng-infrastructure/src/acontplus-ng-infrastructure.ts"],"sourcesContent":["import {\n  HttpInterceptorFn,\n  HttpEvent,\n  HttpResponse,\n  HttpErrorResponse,\n  HttpRequest,\n  HttpContextToken,\n} from '@angular/common/http';\nimport { inject } from '@angular/core';\nimport { catchError, switchMap, of, throwError, Observable } from 'rxjs';\nimport { ApiResponse } from '@acontplus/core';\nimport { NotificationService } from '@acontplus/ng-notifications';\nimport { AUTH_TOKEN } from '@acontplus/ng-config';\n\n//const RETRY_COUNT = 2;\n\n// ---------------------------------------------------------------------------\n// HTTP Context Tokens\n// ---------------------------------------------------------------------------\n\n/**\n * Skip all toast notifications for a specific request.\n * Usage: new HttpContext().set(SKIP_NOTIFICATION, true)\n */\nexport const SKIP_NOTIFICATION = new HttpContextToken<boolean>(() => false);\n\n/**\n * Force-show or force-hide notifications, overriding URL/method exclusion logic.\n * Usage: new HttpContext().set(SHOW_NOTIFICATIONS, true)\n */\nexport const SHOW_NOTIFICATIONS = new HttpContextToken<boolean | undefined>(() => undefined);\n\n// ---------------------------------------------------------------------------\n// Interceptor\n// ---------------------------------------------------------------------------\n\nexport const apiInterceptor: HttpInterceptorFn = (req, next) => {\n  const toastr = inject(NotificationService);\n  const tokenProvider = inject(AUTH_TOKEN, { optional: true });\n\n  // Attach Bearer token when available\n  const token = tokenProvider?.getToken();\n  const modifiedReq = token ? req.clone({ setHeaders: { Authorization: `Bearer ${token}` } }) : req;\n\n  return next(modifiedReq).pipe(\n    // Retry only on network errors or 5xx — never on 4xx client errors.\n    // Shows toast + updates spinner message so the user knows what is happening.\n    // retry({\n    //   count: RETRY_COUNT,\n    //   delay: (error: HttpErrorResponse, attempt) => {\n    //     const isRetryable = error.status === 0 || (error.status >= 500 && error.status < 600);\n    //     if (!isRetryable) throw error; // 4xx — bubble up immediately, no retry\n\n    //     // Toast informa al usuario\n    //     toastr.warning({\n    //       message: `Reintentando solicitud (${attempt} de ${RETRY_COUNT})...`,\n    //       title: 'Conexión inestable',\n    //       config: { duration: 2500 },\n    //     });\n\n    //     return timer(1000 * attempt);\n    //   },\n    // }),\n\n    // Handle successful responses via switchMap so we can return an Observable\n    // (needed to properly throw ApiResponse errors into the RxJS stream).\n    switchMap((event: HttpEvent<unknown>) => {\n      if (event instanceof HttpResponse) {\n        const standardized = standardizeApiResponse(event.body);\n        handleToastNotifications(standardized, toastr, req);\n\n        if (standardized.status === 'error') {\n          handleApiResponseError(standardized, toastr, req);\n          return throwError(() => standardized);\n        }\n\n        return of(transformResponseForConsumers(standardized, event));\n      }\n      return of(event);\n    }),\n\n    // Handle HTTP-level errors — show notification for critical errors, always re-throw.\n    catchError((error: HttpErrorResponse) => {\n      return handleHttpError(error, toastr);\n    }),\n  );\n};\n\n// ---------------------------------------------------------------------------\n// Standardisation\n// ---------------------------------------------------------------------------\n\nfunction standardizeApiResponse(body: unknown): ApiResponse<unknown> {\n  if (isValidApiResponse(body)) return body;\n\n  // Wrap any non-null/undefined body (including objects with non-standard status fields)\n  if (body !== null && body !== undefined) {\n    return wrapSuccess(body);\n  }\n\n  return wrapSuccess(undefined);\n}\n\nfunction wrapSuccess(data: unknown): ApiResponse<unknown> {\n  return {\n    status: 'success',\n    code: '200',\n    message: 'Operation completed successfully',\n    data,\n    timestamp: new Date().toISOString(),\n  };\n}\n\nfunction isValidApiResponse(response: unknown): response is ApiResponse<unknown> {\n  if (response === null || typeof response !== 'object') return false;\n  const r = response as Record<string, unknown>;\n  return (\n    'status' in r &&\n    'code' in r &&\n    typeof r['status'] === 'string' &&\n    ['success', 'error', 'warning'].includes(r['status'] as string)\n  );\n}\n\n// ---------------------------------------------------------------------------\n// Notifications\n// ---------------------------------------------------------------------------\n\nfunction handleToastNotifications(\n  response: ApiResponse<unknown>,\n  notificationService: NotificationService,\n  req: HttpRequest<unknown>,\n): void {\n  // SKIP_NOTIFICATION always wins — even over SHOW_NOTIFICATIONS\n  if (req.context.get(SKIP_NOTIFICATION)) return;\n\n  const forceShow = req.context.get(SHOW_NOTIFICATIONS);\n  const autoShow = shouldShowSuccessToast(req);\n  const showNotifications = forceShow !== undefined ? forceShow : autoShow;\n\n  if (!showNotifications) return;\n  if (!response.message) return;\n  if (!(['success', 'warning', 'error'] as string[]).includes(response.status)) return;\n\n  // Primary notification — show main message once\n  notificationService.show({\n    type: response.status as 'success' | 'warning' | 'error',\n    message: response.message,\n  });\n\n  // Secondary: show individual warnings only when no primary message covered them\n  if (response.status === 'warning' && response.warnings?.length && !response.message) {\n    response.warnings.forEach((w) =>\n      notificationService.show({ type: 'warning', message: w.message }),\n    );\n  }\n\n  // Secondary: show individual errors only when no primary message covered them\n  if (response.status === 'error' && response.errors?.length && !response.message) {\n    response.errors.forEach((e) => notificationService.show({ type: 'error', message: e.message }));\n  }\n}\n\nfunction handleApiResponseError(\n  response: ApiResponse<unknown>,\n  notificationService: NotificationService,\n  req: HttpRequest<unknown>,\n): void {\n  if (req.context.get(SKIP_NOTIFICATION)) return;\n\n  const message =\n    response.message || response.errors?.[0]?.message || 'An unexpected error occurred';\n\n  notificationService.error({ message, config: { duration: 5000 } });\n}\n\n// ---------------------------------------------------------------------------\n// Response transformation\n// ---------------------------------------------------------------------------\n\nfunction transformResponseForConsumers(\n  response: ApiResponse<unknown>,\n  originalEvent: HttpResponse<unknown>,\n): HttpResponse<unknown> {\n  switch (response.status) {\n    case 'success':\n    case 'warning':\n      // Unwrap data for consumers; fall back to full envelope when no data\n      return response.data !== undefined && response.data !== null\n        ? originalEvent.clone({ body: response.data })\n        : originalEvent.clone({ body: response });\n\n    case 'error':\n      // Already handled in switchMap — this is a safety fallback\n      return originalEvent.clone({ body: response });\n\n    default:\n      return originalEvent.clone({ body: response });\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Error handling\n// ---------------------------------------------------------------------------\n\nfunction handleHttpError(\n  error: HttpErrorResponse,\n  notificationService: NotificationService,\n): Observable<never> {\n  if (shouldShowCriticalErrorNotification(error.status)) {\n    notificationService.error({\n      message: getCriticalErrorMessage(error),\n      title: getErrorTitle(error.status),\n      config: { duration: 5000 },\n    });\n  }\n  return throwError(() => error);\n}\n\nfunction shouldShowCriticalErrorNotification(status: number): boolean {\n  return status === 0 || (status >= 500 && status < 600);\n}\n\nfunction getErrorTitle(status: number): string {\n  if (status === 0) return 'Connection Error';\n  if (status >= 500) return 'Server Error';\n  return 'Error';\n}\n\nfunction getCriticalErrorMessage(error: HttpErrorResponse): string {\n  if (error.status === 0) {\n    return 'Unable to connect to the server. Please check your network connection.';\n  }\n  if (error.status >= 500) {\n    return (\n      error.error?.message ?? error.message ?? 'A server error occurred. Please try again later.'\n    );\n  }\n  return error.error?.message ?? error.message ?? 'An unexpected error occurred';\n}\n\n// ---------------------------------------------------------------------------\n// Utility: decide whether to auto-show toast\n// ---------------------------------------------------------------------------\n\nconst MUTABLE_METHODS = new Set(['post', 'put', 'patch', 'delete']);\n\nconst EXCLUDED_URL_PATTERNS = [\n  '/list',\n  '/search',\n  '/query',\n  '/page',\n  '/paginated',\n  '/health',\n  '/status',\n  '/ping',\n];\n\nfunction shouldShowSuccessToast(req: HttpRequest<unknown>): boolean {\n  const method = req.method.toLowerCase();\n  const url = req.url.toLowerCase();\n\n  if (!MUTABLE_METHODS.has(method)) return false;\n  if (EXCLUDED_URL_PATTERNS.some((p) => url.includes(p))) return false;\n\n  return true;\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ENVIRONMENT } from '@acontplus/ng-config';\nimport { HttpRequestLog, HttpErrorLog } from '../interceptors';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class LoggingService {\n  private environment = inject(ENVIRONMENT);\n\n  log(level: 'info' | 'warn' | 'error', message: string, context?: unknown): void {\n    if (this.environment.isProduction) {\n      // Production logging (e.g., to external service)\n      this.logToExternalService(level, message, context);\n    } else {\n      console[level](`[${level.toUpperCase()}] ${message}`, context);\n    }\n  }\n\n  info(message: string, context?: unknown): void {\n    this.log('info', message, context);\n  }\n\n  warn(message: string, context?: unknown): void {\n    this.log('warn', message, context);\n  }\n\n  error(message: string, context?: unknown): void {\n    this.log('error', message, context);\n  }\n\n  // HTTP Request Logging\n  logHttpRequest(log: HttpRequestLog): void {\n    this.info(`HTTP Request - ${log.method} ${log.url}`, {\n      requestId: log.requestId,\n      correlationId: log.correlationId,\n      tenantId: log.tenantId,\n      headers: log.headers,\n      isCustomUrl: log.isCustomUrl,\n      timestamp: log.timestamp,\n    });\n  }\n\n  // HTTP Error Logging\n  logHttpError(error: HttpErrorLog): void {\n    this.error(`HTTP Error - ${error.method} ${error.url}`, {\n      status: error.status,\n      statusText: error.statusText,\n      requestId: error.requestId,\n      correlationId: error.correlationId,\n      tenantId: error.tenantId,\n      errorDetails: error.errorDetails,\n      environment: error.environment,\n      timestamp: error.timestamp,\n    });\n  }\n\n  // Network Error Logging\n  logNetworkError(correlationId: string): void {\n    this.error('Network connection failed', {\n      type: 'network-error',\n      correlationId,\n      userAgent: navigator.userAgent,\n      online: navigator.onLine,\n    });\n  }\n\n  // Rate Limit Error Logging\n  logRateLimitError(correlationId: string, url: string): void {\n    this.warn('Rate limit exceeded', {\n      type: 'rate-limit-error',\n      correlationId,\n      url,\n    });\n  }\n\n  private logToExternalService(_level: string, _message: string, _context?: unknown): void {\n    // Implement external logging service integration\n    // e.g., Sentry, LogRocket, etc.\n    // This is a placeholder for production logging implementation\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { LoggingService } from './logging-service';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class TenantInfo {\n  private tenantId: string | null = null;\n  private logger = inject(LoggingService);\n\n  getTenantId(): string {\n    if (!this.tenantId) {\n      // Get from localStorage, sessionStorage, or JWT token\n      this.tenantId =\n        localStorage.getItem('tenantId') ||\n        sessionStorage.getItem('tenantId') ||\n        this.extractTenantFromToken() ||\n        'default-tenant';\n    }\n    return this.tenantId;\n  }\n\n  getCurrentTenant(): string | null {\n    return this.tenantId;\n  }\n\n  setTenantId(tenantId: string): void {\n    this.tenantId = tenantId;\n    localStorage.setItem('tenantId', tenantId);\n  }\n\n  handleForbidden(): void {\n    this.logger.error('Access forbidden for tenant:', this.tenantId);\n    // Redirect to tenant selection or show error message\n    // this.router.navigate(['/tenant-access-denied']);\n  }\n\n  private extractTenantFromToken(): string | null {\n    // Implementation depends on your JWT token structure\n    // This is a placeholder\n    return null;\n  }\n\n  clearTenant(): void {\n    this.tenantId = null;\n    localStorage.removeItem('tenantId');\n    sessionStorage.removeItem('tenantId');\n  }\n}\n","import { Injectable, signal, computed } from '@angular/core';\nimport { v4 as uuidv4 } from 'uuid';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CorrelationInfo {\n  private correlationId = signal<string | null>(null);\n  private readonly CORRELATION_KEY = 'correlation-id';\n\n  // Signal-based getter for reactive updates\n  readonly currentCorrelationId = computed(() => this.correlationId());\n\n  getOrCreateCorrelationId(): string {\n    if (!this.correlationId()) {\n      // Try to get from sessionStorage first (for page refreshes)\n      const id = sessionStorage.getItem(this.CORRELATION_KEY) || uuidv4();\n      this.correlationId.set(id);\n      sessionStorage.setItem(this.CORRELATION_KEY, id);\n    }\n    return this.correlationId()!;\n  }\n\n  setCorrelationId(correlationId: string): void {\n    this.correlationId.set(correlationId);\n    sessionStorage.setItem(this.CORRELATION_KEY, correlationId);\n  }\n\n  resetCorrelationId(): void {\n    this.correlationId.set(null);\n    sessionStorage.removeItem(this.CORRELATION_KEY);\n  }\n\n  getId(): string {\n    return this.getOrCreateCorrelationId();\n  }\n}\n","import { inject, InjectionToken } from '@angular/core';\nimport { Router } from '@angular/router';\nimport {\n  HttpContextToken,\n  HttpContext,\n  HttpInterceptorFn,\n  HttpErrorResponse,\n  HttpRequest,\n} from '@angular/common/http';\nimport { catchError, throwError, switchMap, Observable } from 'rxjs';\nimport { v4 as uuidv4 } from 'uuid';\nimport { AUTH_TOKEN, ENVIRONMENT } from '@acontplus/ng-config';\nimport { TenantInfo } from '../services/tenant-info';\nimport { CorrelationInfo } from '../services/correlation-info';\nimport { LoggingService } from '../services/logging-service';\n\n// ---------------------------------------------------------------------------\n// HTTP Context Tokens & helpers\n// ---------------------------------------------------------------------------\n\n/** Mark a request as using an absolute URL (skip base-URL injection). */\nconst CUSTOM_URL = new HttpContextToken<boolean>(() => false);\n\n/** Skip all context headers (correlation, tenant, etc.) for this request. */\nconst SKIP_CONTEXT_HEADERS = new HttpContextToken<boolean>(() => false);\n\n/** Merge additional headers into the request at call-site. */\nconst CUSTOM_HEADERS = new HttpContextToken<Record<string, string>>(() => ({}));\n\nexport function customUrl(): HttpContext {\n  return new HttpContext().set(CUSTOM_URL, true);\n}\n\nexport function skipContextHeaders(): HttpContext {\n  return new HttpContext().set(SKIP_CONTEXT_HEADERS, true);\n}\n\nexport function withCustomHeaders(headers: Record<string, string>): HttpContext {\n  return new HttpContext().set(CUSTOM_HEADERS, headers);\n}\n\n// ---------------------------------------------------------------------------\n// Configuration\n// ---------------------------------------------------------------------------\n\nexport interface HttpContextConfig {\n  enableCorrelationTracking?: boolean;\n  enableRequestLogging?: boolean;\n  enableErrorLogging?: boolean;\n  customHeaders?: Record<string, string | (() => string)>;\n  clientVersion?: string;\n  tenantIdHeader?: string;\n  correlationIdHeader?: string;\n  requestIdHeader?: string;\n  timestampHeader?: string;\n  /** URL substrings or regex patterns to exclude from header injection. */\n  excludeUrls?: string[];\n  /** URL substrings that should NOT receive an Authorization header. */\n  skipAuthUrls?: string[];\n  includeAuthToken?: boolean;\n  baseUrlInjection?: boolean;\n  /** Called when a 401 is received and a refresh token is available. */\n  refreshTokenCallback?: () => Observable<{ token: string; refreshToken?: string }>;\n  /** Called after a failed token refresh — should clear auth state. */\n  logoutCallback?: () => void;\n}\n\nconst DEFAULT_CONFIG: Required<HttpContextConfig> = {\n  enableCorrelationTracking: true,\n  enableRequestLogging: false,\n  enableErrorLogging: true,\n  customHeaders: {},\n  clientVersion: '1.0.0',\n  tenantIdHeader: 'Tenant-Id',\n  correlationIdHeader: 'Correlation-Id',\n  requestIdHeader: 'Request-Id',\n  timestampHeader: 'Timestamp',\n  excludeUrls: [],\n  skipAuthUrls: ['/login', '/register', '/refresh'],\n  includeAuthToken: true,\n  baseUrlInjection: true,\n  refreshTokenCallback: undefined as any,\n  logoutCallback: undefined as any,\n};\n\nexport const HTTP_CONTEXT_CONFIG = new InjectionToken<HttpContextConfig>('HTTP_CONTEXT_CONFIG', {\n  factory: () => DEFAULT_CONFIG,\n});\n\n// ---------------------------------------------------------------------------\n// Interceptor\n// ---------------------------------------------------------------------------\n\nexport const httpContextInterceptor: HttpInterceptorFn = (req, next) => {\n  const tokenProvider = inject(AUTH_TOKEN, { optional: true });\n  const router = inject(Router);\n  const tenantService = inject(TenantInfo);\n  const correlationService = inject(CorrelationInfo);\n  const loggingService = inject(LoggingService);\n  const environment = inject(ENVIRONMENT);\n\n  const config: Required<HttpContextConfig> = {\n    ...DEFAULT_CONFIG,\n    enableRequestLogging: !environment.isProduction,\n    ...inject(HTTP_CONTEXT_CONFIG, { optional: true }),\n  };\n\n  // ── Context token flags ──────────────────────────────────────────────────\n  const isCustomUrl = req.context.get(CUSTOM_URL);\n  const skipHeaders = req.context.get(SKIP_CONTEXT_HEADERS);\n  const contextHeaders = req.context.get(CUSTOM_HEADERS);\n\n  if (skipHeaders) return next(req);\n\n  // ── URL exclusion (with ReDoS protection) ────────────────────────────────\n  const shouldExclude = config.excludeUrls.some((pattern) => {\n    try {\n      return req.url.includes(pattern) || new RegExp(pattern).test(req.url);\n    } catch {\n      return false; // malformed regex — skip safely\n    }\n  });\n\n  if (shouldExclude) return next(req);\n\n  // ── Auth skip check ──────────────────────────────────────────────────────\n  const skipAuth = config.skipAuthUrls.some((u) => req.url.includes(u));\n\n  // ── URL resolution ───────────────────────────────────────────────────────\n  const baseUrl = environment.apiBaseUrl;\n  const finalUrl = isCustomUrl || !config.baseUrlInjection ? req.url : `${baseUrl}${req.url}`;\n\n  // ── Header construction ──────────────────────────────────────────────────\n  const correlationId = config.enableCorrelationTracking\n    ? correlationService.getOrCreateCorrelationId()\n    : uuidv4();\n  const tenantId = tenantService.getTenantId();\n  const requestId = uuidv4();\n\n  const headers: Record<string, string> = {\n    [config.requestIdHeader]: requestId,\n    [config.timestampHeader]: new Date().toISOString(),\n  };\n\n  if (config.enableCorrelationTracking) {\n    headers[config.correlationIdHeader] = correlationId;\n  }\n\n  if (tenantId) {\n    headers[config.tenantIdHeader] = tenantId;\n  }\n\n  if (config.clientVersion) {\n    headers['Client-Version'] = config.clientVersion;\n  }\n\n  if (environment.clientId) {\n    headers['Client-Id'] = environment.clientId;\n  }\n\n  if (config.includeAuthToken && !skipAuth) {\n    const authToken = tokenProvider?.getToken();\n    if (authToken) headers['Authorization'] = `Bearer ${authToken}`;\n  }\n\n  // Static and dynamic custom headers from config\n  Object.entries(config.customHeaders).forEach(([key, value]) => {\n    headers[key] = typeof value === 'function' ? value() : value;\n  });\n\n  // Per-request headers from HttpContext\n  Object.entries(contextHeaders).forEach(([key, value]) => {\n    headers[key] = value;\n  });\n\n  // Content-Type for mutation requests (do not override if already set).\n  // Only set application/json when the body is JSON-serializable.\n  // Binary types (FormData, Blob, ArrayBuffer, etc.) need the browser to set Content-Type.\n  if (\n    ['POST', 'PUT', 'PATCH'].includes(req.method) &&\n    !req.headers.has('Content-Type') &&\n    isJsonBody(req.body)\n  ) {\n    headers['Content-Type'] = 'application/json';\n  }\n\n  // ── Clone request ────────────────────────────────────────────────────────\n  const enhancedReq = req.clone({ url: finalUrl, setHeaders: headers });\n\n  // ── Request logging ──────────────────────────────────────────────────────\n  if (config.enableRequestLogging) {\n    loggingService.logHttpRequest({\n      method: req.method,\n      url: finalUrl,\n      originalUrl: req.url,\n      requestId,\n      correlationId,\n      tenantId,\n      timestamp: new Date().toISOString(),\n      headers: Object.keys(headers),\n      isCustomUrl,\n    });\n  }\n\n  // ── Execute request with unified error handling ──────────────────────────\n  const hasAuth = !!headers['Authorization'];\n\n  // Shared error context for both handlers below\n  const errorCtx = {\n    req,\n    finalUrl,\n    requestId,\n    correlationId,\n    tenantId,\n    isCustomUrl,\n    hasAuth,\n    config,\n    router,\n    loggingService,\n    tenantService,\n    tokenProvider,\n    environment,\n  };\n\n  // Base pipeline — always present\n  const base$ = next(enhancedReq).pipe(\n    catchError((error: HttpErrorResponse) => handleContextError(error, errorCtx)),\n  );\n\n  // When auth + refresh callback are available, prepend a 401-refresh layer\n  if (!hasAuth || !config.refreshTokenCallback) {\n    return base$;\n  }\n\n  return next(enhancedReq).pipe(\n    // Intercept 401 first — attempt token refresh before general error handling\n    catchError((error: HttpErrorResponse) => {\n      if (error.status !== 401) return throwError(() => error);\n\n      const refreshToken = tokenProvider?.getRefreshToken?.();\n      if (!refreshToken?.trim()) return throwError(() => error);\n\n      return config.refreshTokenCallback!().pipe(\n        switchMap(({ token }) =>\n          next(\n            req.clone({\n              url: finalUrl,\n              setHeaders: { ...headers, Authorization: `Bearer ${token}` },\n            }),\n          ),\n        ),\n        catchError((refreshError) => {\n          config.logoutCallback?.();\n          return throwError(() => refreshError);\n        }),\n      );\n    }),\n    // General error handling (logs, redirects, tenant, rate-limit, etc.)\n    catchError((error: HttpErrorResponse) => handleContextError(error, errorCtx)),\n  );\n};\n\n// ---------------------------------------------------------------------------\n// Unified error handler (eliminates duplicated catchError blocks)\n// ---------------------------------------------------------------------------\n\ninterface ErrorContext {\n  req: HttpRequest<unknown>;\n  finalUrl: string;\n  requestId: string;\n  correlationId: string;\n  tenantId: string;\n  isCustomUrl: boolean;\n  hasAuth: boolean;\n  config: Required<HttpContextConfig>;\n  router: Router;\n  loggingService: LoggingService;\n  tenantService: TenantInfo;\n  tokenProvider: any;\n  environment: any;\n}\n\nfunction handleContextError(error: HttpErrorResponse, ctx: ErrorContext) {\n  const {\n    req,\n    finalUrl,\n    requestId,\n    correlationId,\n    tenantId,\n    isCustomUrl,\n    config,\n    router,\n    loggingService,\n    tenantService,\n    environment,\n  } = ctx;\n\n  if (config.enableErrorLogging) {\n    loggingService.logHttpError({\n      method: req.method,\n      url: finalUrl,\n      originalUrl: req.url,\n      requestId,\n      correlationId,\n      tenantId,\n      status: error.status,\n      statusText: error.statusText,\n      message: error.message,\n      timestamp: new Date().toISOString(),\n      errorDetails: error.error,\n      environment: environment.clientId,\n      isCustomUrl,\n      headers: [],\n    });\n  }\n\n  switch (error.status) {\n    case 401:\n      loggingService.error('Unauthorized — redirecting to login');\n      // Let auth service clear tokens before navigation\n      config.logoutCallback?.();\n      router.navigate([`/${environment.loginRoute}`]);\n      break;\n    case 403:\n      tenantService.handleForbidden();\n      break;\n    case 0:\n      loggingService.logNetworkError(correlationId);\n      break;\n    case 429:\n      loggingService.logRateLimitError(correlationId, finalUrl);\n      break;\n  }\n\n  return throwError(() => error);\n}\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nfunction isJsonBody(body: unknown): boolean {\n  if (body === null || body === undefined) return true;\n  if (typeof body === 'string' || typeof body === 'number' || typeof body === 'boolean')\n    return true;\n  if (Array.isArray(body)) return true;\n  if (\n    typeof body === 'object' &&\n    !(body instanceof FormData) &&\n    !(body instanceof Blob) &&\n    !(body instanceof ArrayBuffer) &&\n    !(body instanceof URLSearchParams)\n  )\n    return true;\n  return false;\n}\n\nexport interface HttpRequestLog {\n  method: string;\n  url: string;\n  originalUrl: string;\n  requestId: string;\n  correlationId: string;\n  tenantId: string;\n  timestamp: string;\n  headers: string[];\n  isCustomUrl: boolean;\n}\n\nexport interface HttpErrorLog extends HttpRequestLog {\n  status: number;\n  statusText: string;\n  message: string;\n  errorDetails: unknown;\n  environment: string;\n}\n\n// ---------------------------------------------------------------------------\n// Public helpers for library consumers\n// ---------------------------------------------------------------------------\n\nexport function createHttpContextConfig(\n  overrides: Partial<HttpContextConfig> = {},\n): HttpContextConfig {\n  return { ...DEFAULT_CONFIG, ...overrides };\n}\n\n/**\n * Register the interceptor configuration in your app providers.\n *\n * @example\n * // app.config.ts\n * provideHttpClient(\n *   withInterceptors([\n *     httpContextInterceptor,  // 1st — adds headers, handles 401 refresh\n *     apiInterceptor,          // 2nd — normalises response, shows toasts\n *   ])\n * ),\n * ...provideHttpContext({ clientVersion: '2.0.0' }),\n */\nexport function provideHttpContext(config: Partial<HttpContextConfig> = {}) {\n  return [\n    {\n      provide: HTTP_CONTEXT_CONFIG,\n      useValue: createHttpContextConfig(config),\n    },\n  ];\n}\n","import {\n  HttpContext,\n  HttpContextToken,\n  HttpInterceptorFn,\n  HttpRequest,\n} from '@angular/common/http';\nimport { finalize } from 'rxjs/operators';\nimport { inject, Injectable } from '@angular/core';\nimport { OverlayService } from '@acontplus/ng-components';\n\nexport const SHOW_SPINNER = new HttpContextToken<boolean>(() => true);\n\nexport function withoutSpinner(): HttpContext {\n  return new HttpContext().set(SHOW_SPINNER, false);\n}\n\n@Injectable({ providedIn: 'root' })\nexport class ActiveRequestsTracker {\n  private readonly requests: HttpRequest<unknown>[] = [];\n\n  get count(): number {\n    return this.requests.length;\n  }\n\n  /** Retorna true si se pasa de 0 → 1 (primera request activa). */\n  add(request: HttpRequest<unknown>): boolean {\n    this.requests.push(request);\n    return this.requests.length === 1;\n  }\n\n  /** Retorna true si se pasa de 1 → 0 (última request completada). */\n  remove(request: HttpRequest<unknown>): boolean {\n    const index = this.requests.indexOf(request);\n    if (index >= 0) {\n      this.requests.splice(index, 1);\n    }\n    return this.requests.length === 0;\n  }\n}\n\nexport const spinnerInterceptor: HttpInterceptorFn = (req, next) => {\n  const activeRequests = inject(ActiveRequestsTracker);\n  const overlayService = inject(OverlayService);\n\n  if (!req.context.get(SHOW_SPINNER)) {\n    return next(req);\n  }\n\n  // showSpinner solo cuando pasamos de 0 → 1 requests\n  const isFirst = activeRequests.add(req);\n  if (isFirst) {\n    overlayService.showSpinner();\n  }\n\n  return next(req).pipe(\n    finalize(() => {\n      // hideSpinner solo cuando pasamos de 1 → 0 requests\n      const isEmpty = activeRequests.remove(req);\n      if (isEmpty) {\n        overlayService.hideSpinner();\n      }\n    }),\n  );\n};\n","import { Injectable, inject } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { RepositoryConfig } from '@acontplus/core';\n\n@Injectable()\nexport abstract class BaseHttpRepository {\n  protected http = inject(HttpClient);\n  protected abstract config: RepositoryConfig; // Abstract property\n\n  protected buildUrl(path = ''): string {\n    const baseUrl = (this.config.baseUrl || '/api').replace(/\\/+$/, '');\n    const version = this.config.version ? `/v${this.config.version}` : '';\n    const endpoint = path\n      ? `${this.config.endpoint}/${path}`.replace(/\\/+/g, '/')\n      : this.config.endpoint;\n\n    return `${baseUrl}${version}/${endpoint.replace(/^\\/+/, '')}`;\n  }\n\n  protected get<T>(path = '', params?: Record<string, string | number | boolean>): Observable<T> {\n    return this.http.get<T>(this.buildUrl(path), { params });\n  }\n\n  protected post<T>(path = '', body: unknown): Observable<T> {\n    return this.http.post<T>(this.buildUrl(path), body);\n  }\n\n  protected put<T>(path = '', body: unknown): Observable<T> {\n    return this.http.put<T>(this.buildUrl(path), body);\n  }\n\n  protected patch<T>(path = '', body?: unknown): Observable<T> {\n    return this.http.patch<T>(this.buildUrl(path), body);\n  }\n\n  protected delete<T>(path = ''): Observable<T> {\n    return this.http.delete<T>(this.buildUrl(path));\n  }\n}\n","import { Injectable, InjectionToken, inject } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BaseHttpRepository } from './base-http-repository';\nimport { PagedResult, PaginationParams, RepositoryConfig } from '@acontplus/core';\nimport { BaseRepository, SearchableRepository } from '@acontplus/ng-config';\n\n// Create an injection token for RepositoryConfig\nexport const REPOSITORY_CONFIG = new InjectionToken<RepositoryConfig>('REPOSITORY_CONFIG');\n\n@Injectable()\nexport class GenericRepository<TEntity = any, TId extends string | number = number>\n  extends BaseHttpRepository\n  implements BaseRepository<TEntity, TId>\n{\n  protected override config: RepositoryConfig;\n\n  constructor() {\n    const config = inject<RepositoryConfig>(REPOSITORY_CONFIG);\n    super();\n    this.config = config;\n  }\n\n  getById(id: TId): Observable<TEntity> {\n    return this.get<TEntity>(id.toString());\n  }\n\n  getAll(pagination?: PaginationParams): Observable<PagedResult<TEntity>> {\n    const params = this.buildParams(pagination);\n    return this.get<PagedResult<TEntity>>('', params);\n  }\n\n  create(entity: Partial<TEntity>): Observable<TEntity> {\n    return this.post<TEntity>('', entity);\n  }\n\n  update(id: TId, entity: Partial<TEntity>): Observable<TEntity> {\n    return this.put<TEntity>(id.toString(), entity);\n  }\n\n  remove(id: TId): Observable<void> {\n    return super.delete<void>(id.toString());\n  }\n\n  protected buildParams(pagination?: PaginationParams, filters?: Record<string, any>): any {\n    const params: any = {};\n\n    if (pagination) {\n      params.pageIndex = pagination.pageIndex?.toString() || '1';\n      params.pageSize = pagination.pageSize?.toString() || '20';\n      if (pagination.sortBy) params.sortBy = pagination.sortBy;\n      if (pagination.sortDirection) params.sortDirection = pagination.sortDirection;\n    }\n\n    if (filters) {\n      Object.assign(params, filters);\n    }\n\n    return params;\n  }\n}\n\n@Injectable()\nexport class SearchableGenericRepository<TEntity = any, TId extends string | number = number>\n  extends GenericRepository<TEntity, TId>\n  implements SearchableRepository<TEntity, TId>\n{\n  search(query: string, pagination: PaginationParams): Observable<PagedResult<TEntity>> {\n    const searchFilters = { q: query };\n    const params = this.buildParams(pagination, searchFilters);\n    return this.get<PagedResult<TEntity>>('search', params);\n  }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { PagedResult, PaginationParams, RepositoryConfig } from '@acontplus/core';\nimport { BaseRepository } from '@acontplus/ng-config';\n\n@Injectable({ providedIn: 'root' })\nexport class RepositoryFactory {\n  private http = inject(HttpClient);\n\n  create<TEntity, TId extends string | number = number>(\n    config: RepositoryConfig,\n  ): BaseRepository<TEntity, TId> {\n    const buildUrl = (path = '') => {\n      const baseUrl = config.baseUrl || '/api';\n      const version = config.version ? `/v${config.version}` : '';\n      const endpoint = path ? `${config.endpoint}/${path}` : config.endpoint;\n      return `${baseUrl}${version}/${endpoint}`.replace(/\\/+/g, '/');\n    };\n\n    const buildParams = (pagination?: PaginationParams) => {\n      const params: any = {};\n      if (pagination) {\n        params.page = pagination.pageIndex?.toString() || '1';\n        params.pageSize = pagination.pageSize?.toString() || '20';\n        if (pagination.sortBy) params.sortBy = pagination.sortBy;\n        if (pagination.sortDirection) params.sortDirection = pagination.sortDirection;\n      }\n      return params;\n    };\n\n    // Safe ID conversion function\n    const idToString = (id: TId): string => {\n      if (typeof id === 'string' || typeof id === 'number' || typeof id === 'bigint') {\n        return id.toString();\n      }\n      // Fallback for other types - you might want to handle this differently\n      return String(id);\n    };\n\n    return {\n      getById: (id: TId) => this.http.get<TEntity>(buildUrl(idToString(id))),\n\n      getAll: (pagination?) =>\n        this.http.get<PagedResult<TEntity>>(buildUrl(), {\n          params: buildParams(pagination),\n        }),\n\n      create: (entity: Partial<TEntity>) => this.http.post<TEntity>(buildUrl(), entity),\n\n      update: (id: TId, entity: Partial<TEntity>) =>\n        this.http.put<TEntity>(buildUrl(idToString(id)), entity),\n\n      remove: (id: TId) => this.http.delete<void>(buildUrl(idToString(id))),\n    };\n  }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { lastValueFrom } from 'rxjs';\nimport { HttpOptions, HttpPort } from '@acontplus/core';\n\nfunction mergeUrl(baseURL: string | undefined, endpoint: string): string {\n  if (!baseURL) return endpoint;\n  return `${baseURL.replace(/\\/+$/, '')}/${endpoint.replace(/^\\/+/, '')}`;\n}\n\nexport class AngularHttpAdapter implements HttpPort {\n  constructor(\n    private readonly http: HttpClient,\n    private readonly baseURL?: string,\n  ) {}\n\n  private buildOptions(options?: HttpOptions) {\n    return {\n      headers: options?.headers ?? {},\n      params: options?.params ?? {},\n    };\n  }\n\n  private async request<T>(params: {\n    method: 'get' | 'post' | 'put' | 'delete';\n    url: string;\n    data?: unknown;\n    options?: HttpOptions;\n  }): Promise<T> {\n    const fullUrl = mergeUrl(this.baseURL, params.url);\n    const httpOptions = this.buildOptions(params.options);\n\n    const observable = this.http.request<T>(params.method, fullUrl, {\n      body: params.data,\n      ...httpOptions,\n    });\n\n    return await lastValueFrom(observable);\n  }\n\n  /** GET */\n  get<T>(url: string, options?: HttpOptions): Promise<T> {\n    return this.request({ method: 'get', url, options });\n  }\n\n  /** POST */\n  post<T>(url: string, data?: unknown, options?: HttpOptions): Promise<T> {\n    return this.request({ method: 'post', url, data, options });\n  }\n\n  /** PUT */\n  put<T>(url: string, data?: unknown, options?: HttpOptions): Promise<T> {\n    return this.request({ method: 'put', url, data, options });\n  }\n\n  /** DELETE */\n  delete<T>(url: string, options?: HttpOptions): Promise<T> {\n    return this.request({ method: 'delete', url, options });\n  }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { CORE_CONFIG, DEFAULT_CONFIG, ENVIRONMENT } from '@acontplus/ng-config';\nimport { CoreConfig } from '@acontplus/core';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class CoreConfigService {\n  private config: Required<CoreConfig>;\n  private environment = inject(ENVIRONMENT);\n\n  constructor() {\n    this.config = this.initializeConfig();\n  }\n\n  /**\n   * Initialize configuration with defaults and environment overrides\n   */\n  private initializeConfig(): Required<CoreConfig> {\n    const injectedConfig = inject(CORE_CONFIG, { optional: true });\n\n    return {\n      ...DEFAULT_CONFIG,\n      // Environment overrides\n      apiBaseUrl: this.environment.apiBaseUrl || DEFAULT_CONFIG.apiBaseUrl,\n      enableRequestLogging: !this.environment.isProduction,\n      // Injected config overrides\n      ...injectedConfig,\n    };\n  }\n\n  /**\n   * Get the current configuration\n   */\n  getConfig(): Required<CoreConfig> {\n    return { ...this.config };\n  }\n\n  /**\n   * Update configuration at runtime\n   */\n  updateConfig(updates: Partial<CoreConfig>): void {\n    this.config = { ...this.config, ...updates };\n  }\n\n  /**\n   * Get a specific configuration value\n   */\n  get<K extends keyof CoreConfig>(key: K): CoreConfig[K] {\n    return this.config[key];\n  }\n\n  /**\n   * Check if a feature is enabled\n   */\n  isFeatureEnabled(feature: keyof CoreConfig): boolean {\n    const value = this.config[feature];\n    return typeof value === 'boolean' ? value : false;\n  }\n\n  /**\n   * Get API URL for a specific entity\n   */\n  getApiUrl(entityName?: string): string {\n    const baseUrl = this.config.apiBaseUrl;\n    if (!entityName) return baseUrl;\n    return `${baseUrl}/${entityName}`.replace(/\\/+/g, '/');\n  }\n\n  /**\n   * Check if a URL should be excluded from processing\n   */\n  shouldExcludeUrl(url: string): boolean {\n    return this.config.excludeUrls.some(\n      (excludePattern) => url.includes(excludePattern) || new RegExp(excludePattern).test(url),\n    );\n  }\n\n  /**\n   * Check if a method should be excluded from processing\n   */\n  shouldExcludeMethod(method: string): boolean {\n    return this.config.excludeMethods.some(\n      (excludeMethod) => excludeMethod.toLowerCase() === method.toLowerCase(),\n    );\n  }\n\n  /**\n   * Get custom headers with dynamic values resolved\n   */\n  getCustomHeaders(): Record<string, string> {\n    const headers: Record<string, string> = {};\n\n    Object.entries(this.config.customHeaders).forEach(([key, value]) => {\n      headers[key] = typeof value === 'function' ? value() : value;\n    });\n\n    return headers;\n  }\n\n  /**\n   * Reset configuration to defaults\n   */\n  resetConfig(): void {\n    this.config = this.initializeConfig();\n  }\n}\n\n// Provider function for easy setup\nexport function provideCoreConfig(config: Partial<CoreConfig> = {}) {\n  return [\n    {\n      provide: CORE_CONFIG,\n      useValue: config,\n    },\n  ];\n}\n\n// Helper function to create configuration\nexport function createCoreConfig(overrides: Partial<CoreConfig> = {}): CoreConfig {\n  return {\n    ...DEFAULT_CONFIG,\n    ...overrides,\n  };\n}\n","import { Observable } from 'rxjs';\n\nexport interface UseCase<TRequest = void, TResponse = void> {\n  execute(request: TRequest): Observable<TResponse>;\n}\n\nexport abstract class BaseUseCase<TRequest = void, TResponse = void> implements UseCase<\n  TRequest,\n  TResponse\n> {\n  abstract execute(request: TRequest): Observable<TResponse>;\n}\n","import { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { inject } from '@angular/core';\nimport { BaseUseCase } from './base-use-case';\nimport { LoggingService } from '../services/logging-service';\n\n// Only create commands if you have complex validation logic\nexport abstract class Command<TRequest, TResponse = void> extends BaseUseCase<TRequest, TResponse> {\n  // Simple validation - override only when needed\n  protected validate(_request: TRequest): string[] {\n    return []; // Return array of error messages\n  }\n\n  override execute(request: TRequest): Observable<TResponse> {\n    const errors = this.validate(request);\n    if (errors.length > 0) {\n      return throwError(() => ({\n        status: 'error',\n        code: 'VALIDATION_FAILED',\n        message: 'Validation failed',\n        errors: errors.map((msg) => ({ code: 'VALIDATION', message: msg })),\n        timestamp: new Date().toISOString(),\n      }));\n    }\n\n    return this.executeInternal(request).pipe(\n      catchError((error) => {\n        // Log the error for debugging\n        const logger = inject(LoggingService);\n        logger.error('An error occurred during command execution:', error);\n\n        // Re-throw the error so the caller can handle it\n        return throwError(() => error);\n      }),\n    );\n  }\n\n  protected abstract executeInternal(request: TRequest): Observable<TResponse>;\n}\n","import { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\nimport { inject } from '@angular/core';\nimport { BaseUseCase } from './base-use-case';\nimport { LoggingService } from '../services/logging-service';\n\nexport abstract class Query<TRequest, TResponse> extends BaseUseCase<TRequest, TResponse> {\n  override execute(request: TRequest): Observable<TResponse> {\n    return this.executeInternal(request).pipe(\n      catchError((error) => {\n        const logger = inject(LoggingService);\n        logger.error('An error occurred during query execution:', error);\n        return throwError(() => error);\n      }),\n    );\n  }\n\n  protected abstract executeInternal(request: TRequest): Observable<TResponse>;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["uuidv4","DEFAULT_CONFIG","catchError"],"mappings":";;;;;;;;;;;AAcA;AAEA;AACA;AACA;AAEA;;;AAGG;AACI,MAAM,iBAAiB,GAAG,IAAI,gBAAgB,CAAU,MAAM,KAAK;AAE1E;;;AAGG;AACI,MAAM,kBAAkB,GAAG,IAAI,gBAAgB,CAAsB,MAAM,SAAS;AAE3F;AACA;AACA;MAEa,cAAc,GAAsB,CAAC,GAAG,EAAE,IAAI,KAAI;AAC7D,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAC1C,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;AAG5D,IAAA,MAAM,KAAK,GAAG,aAAa,EAAE,QAAQ,EAAE;IACvC,MAAM,WAAW,GAAG,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,EAAE,aAAa,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,EAAE,EAAE,CAAC,GAAG,GAAG;AAEjG,IAAA,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI;;;;;;;;;;;;;;;;;;;AAsB3B,IAAA,SAAS,CAAC,CAAC,KAAyB,KAAI;AACtC,QAAA,IAAI,KAAK,YAAY,YAAY,EAAE;YACjC,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,CAAC,IAAI,CAAC;AACvD,YAAA,wBAAwB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC;AAEnD,YAAA,IAAI,YAAY,CAAC,MAAM,KAAK,OAAO,EAAE;AACnC,gBAAA,sBAAsB,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,CAAC;AACjD,gBAAA,OAAO,UAAU,CAAC,MAAM,YAAY,CAAC;YACvC;YAEA,OAAO,EAAE,CAAC,6BAA6B,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAC/D;AACA,QAAA,OAAO,EAAE,CAAC,KAAK,CAAC;AAClB,IAAA,CAAC,CAAC;;AAGF,IAAA,UAAU,CAAC,CAAC,KAAwB,KAAI;AACtC,QAAA,OAAO,eAAe,CAAC,KAAK,EAAE,MAAM,CAAC;IACvC,CAAC,CAAC,CACH;AACH;AAEA;AACA;AACA;AAEA,SAAS,sBAAsB,CAAC,IAAa,EAAA;IAC3C,IAAI,kBAAkB,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI;;IAGzC,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS,EAAE;AACvC,QAAA,OAAO,WAAW,CAAC,IAAI,CAAC;IAC1B;AAEA,IAAA,OAAO,WAAW,CAAC,SAAS,CAAC;AAC/B;AAEA,SAAS,WAAW,CAAC,IAAa,EAAA;IAChC,OAAO;AACL,QAAA,MAAM,EAAE,SAAS;AACjB,QAAA,IAAI,EAAE,KAAK;AACX,QAAA,OAAO,EAAE,kCAAkC;QAC3C,IAAI;AACJ,QAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACpC;AACH;AAEA,SAAS,kBAAkB,CAAC,QAAiB,EAAA;AAC3C,IAAA,IAAI,QAAQ,KAAK,IAAI,IAAI,OAAO,QAAQ,KAAK,QAAQ;AAAE,QAAA,OAAO,KAAK;IACnE,MAAM,CAAC,GAAG,QAAmC;IAC7C,QACE,QAAQ,IAAI,CAAC;AACb,QAAA,MAAM,IAAI,CAAC;AACX,QAAA,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,QAAQ;AAC/B,QAAA,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAW,CAAC;AAEnE;AAEA;AACA;AACA;AAEA,SAAS,wBAAwB,CAC/B,QAA8B,EAC9B,mBAAwC,EACxC,GAAyB,EAAA;;AAGzB,IAAA,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAAE;IAExC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC;AACrD,IAAA,MAAM,QAAQ,GAAG,sBAAsB,CAAC,GAAG,CAAC;AAC5C,IAAA,MAAM,iBAAiB,GAAG,SAAS,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ;AAExE,IAAA,IAAI,CAAC,iBAAiB;QAAE;IACxB,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE;AACvB,IAAA,IAAI,CAAE,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,CAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE;;IAG9E,mBAAmB,CAAC,IAAI,CAAC;QACvB,IAAI,EAAE,QAAQ,CAAC,MAAyC;QACxD,OAAO,EAAE,QAAQ,CAAC,OAAO;AAC1B,KAAA,CAAC;;AAGF,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QACnF,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAC1B,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAClE;IACH;;AAGA,IAAA,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,IAAI,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE;QAC/E,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,mBAAmB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;IACjG;AACF;AAEA,SAAS,sBAAsB,CAC7B,QAA8B,EAC9B,mBAAwC,EACxC,GAAyB,EAAA;AAEzB,IAAA,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;QAAE;AAExC,IAAA,MAAM,OAAO,GACX,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,OAAO,IAAI,8BAA8B;AAErF,IAAA,mBAAmB,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;AACpE;AAEA;AACA;AACA;AAEA,SAAS,6BAA6B,CACpC,QAA8B,EAC9B,aAAoC,EAAA;AAEpC,IAAA,QAAQ,QAAQ,CAAC,MAAM;AACrB,QAAA,KAAK,SAAS;AACd,QAAA,KAAK,SAAS;;YAEZ,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,QAAQ,CAAC,IAAI,KAAK;AACtD,kBAAE,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE;kBAC3C,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAE7C,QAAA,KAAK,OAAO;;YAEV,OAAO,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAEhD,QAAA;YACE,OAAO,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;;AAEpD;AAEA;AACA;AACA;AAEA,SAAS,eAAe,CACtB,KAAwB,EACxB,mBAAwC,EAAA;AAExC,IAAA,IAAI,mCAAmC,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE;QACrD,mBAAmB,CAAC,KAAK,CAAC;AACxB,YAAA,OAAO,EAAE,uBAAuB,CAAC,KAAK,CAAC;AACvC,YAAA,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC;AAClC,YAAA,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;AAC3B,SAAA,CAAC;IACJ;AACA,IAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;AAChC;AAEA,SAAS,mCAAmC,CAAC,MAAc,EAAA;AACzD,IAAA,OAAO,MAAM,KAAK,CAAC,KAAK,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;AACxD;AAEA,SAAS,aAAa,CAAC,MAAc,EAAA;IACnC,IAAI,MAAM,KAAK,CAAC;AAAE,QAAA,OAAO,kBAAkB;IAC3C,IAAI,MAAM,IAAI,GAAG;AAAE,QAAA,OAAO,cAAc;AACxC,IAAA,OAAO,OAAO;AAChB;AAEA,SAAS,uBAAuB,CAAC,KAAwB,EAAA;AACvD,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AACtB,QAAA,OAAO,wEAAwE;IACjF;AACA,IAAA,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE;AACvB,QAAA,QACE,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,kDAAkD;IAE/F;IACA,OAAO,KAAK,CAAC,KAAK,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,8BAA8B;AAChF;AAEA;AACA;AACA;AAEA,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAEnE,MAAM,qBAAqB,GAAG;IAC5B,OAAO;IACP,SAAS;IACT,QAAQ;IACR,OAAO;IACP,YAAY;IACZ,SAAS;IACT,SAAS;IACT,OAAO;CACR;AAED,SAAS,sBAAsB,CAAC,GAAyB,EAAA;IACvD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE;IACvC,MAAM,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE;AAEjC,IAAA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AAAE,QAAA,OAAO,KAAK;AAC9C,IAAA,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;AAAE,QAAA,OAAO,KAAK;AAEpE,IAAA,OAAO,IAAI;AACb;;MCnQa,cAAc,CAAA;AACjB,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAEzC,IAAA,GAAG,CAAC,KAAgC,EAAE,OAAe,EAAE,OAAiB,EAAA;AACtE,QAAA,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE;;YAEjC,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC;QACpD;aAAO;AACL,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,CAAA,CAAE,EAAE,OAAO,CAAC;QAChE;IACF;IAEA,IAAI,CAAC,OAAe,EAAE,OAAiB,EAAA;QACrC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;IACpC;IAEA,IAAI,CAAC,OAAe,EAAE,OAAiB,EAAA;QACrC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC;IACpC;IAEA,KAAK,CAAC,OAAe,EAAE,OAAiB,EAAA;QACtC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC;IACrC;;AAGA,IAAA,cAAc,CAAC,GAAmB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,CAAA,eAAA,EAAkB,GAAG,CAAC,MAAM,CAAA,CAAA,EAAI,GAAG,CAAC,GAAG,CAAA,CAAE,EAAE;YACnD,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,QAAQ,EAAE,GAAG,CAAC,QAAQ;YACtB,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;AACzB,SAAA,CAAC;IACJ;;AAGA,IAAA,YAAY,CAAC,KAAmB,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,CAAC,CAAA,aAAA,EAAgB,KAAK,CAAC,MAAM,CAAA,CAAA,EAAI,KAAK,CAAC,GAAG,CAAA,CAAE,EAAE;YACtD,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,YAAY,EAAE,KAAK,CAAC,YAAY;YAChC,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,SAAS,EAAE,KAAK,CAAC,SAAS;AAC3B,SAAA,CAAC;IACJ;;AAGA,IAAA,eAAe,CAAC,aAAqB,EAAA;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,2BAA2B,EAAE;AACtC,YAAA,IAAI,EAAE,eAAe;YACrB,aAAa;YACb,SAAS,EAAE,SAAS,CAAC,SAAS;YAC9B,MAAM,EAAE,SAAS,CAAC,MAAM;AACzB,SAAA,CAAC;IACJ;;IAGA,iBAAiB,CAAC,aAAqB,EAAE,GAAW,EAAA;AAClD,QAAA,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;AAC/B,YAAA,IAAI,EAAE,kBAAkB;YACxB,aAAa;YACb,GAAG;AACJ,SAAA,CAAC;IACJ;AAEQ,IAAA,oBAAoB,CAAC,MAAc,EAAE,QAAgB,EAAE,QAAkB,EAAA;;;;IAIjF;uGAzEW,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAd,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,cAFb,MAAM,EAAA,CAAA;;2FAEP,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCAY,UAAU,CAAA;IACb,QAAQ,GAAkB,IAAI;AAC9B,IAAA,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;IAEvC,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAElB,YAAA,IAAI,CAAC,QAAQ;AACX,gBAAA,YAAY,CAAC,OAAO,CAAC,UAAU,CAAC;AAChC,oBAAA,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC;oBAClC,IAAI,CAAC,sBAAsB,EAAE;AAC7B,oBAAA,gBAAgB;QACpB;QACA,OAAO,IAAI,CAAC,QAAQ;IACtB;IAEA,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,QAAQ;IACtB;AAEA,IAAA,WAAW,CAAC,QAAgB,EAAA;AAC1B,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;AACxB,QAAA,YAAY,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC;IAC5C;IAEA,eAAe,GAAA;QACb,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,IAAI,CAAC,QAAQ,CAAC;;;IAGlE;IAEQ,sBAAsB,GAAA;;;AAG5B,QAAA,OAAO,IAAI;IACb;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI;AACpB,QAAA,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC;AACnC,QAAA,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC;IACvC;uGAzCW,UAAU,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAV,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAU,cAFT,MAAM,EAAA,CAAA;;2FAEP,UAAU,EAAA,UAAA,EAAA,CAAA;kBAHtB,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;MCCY,eAAe,CAAA;AAClB,IAAA,aAAa,GAAG,MAAM,CAAgB,IAAI,yDAAC;IAClC,eAAe,GAAG,gBAAgB;;IAG1C,oBAAoB,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,aAAa,EAAE,EAAA,IAAA,SAAA,GAAA,CAAA,EAAA,SAAA,EAAA,sBAAA,EAAA,CAAA,GAAA,EAAA,CAAA,CAAC;IAEpE,wBAAwB,GAAA;AACtB,QAAA,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE;;AAEzB,YAAA,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,IAAIA,EAAM,EAAE;AACnE,YAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,CAAC;QAClD;AACA,QAAA,OAAO,IAAI,CAAC,aAAa,EAAG;IAC9B;AAEA,IAAA,gBAAgB,CAAC,aAAqB,EAAA;AACpC,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,aAAa,CAAC;QACrC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,aAAa,CAAC;IAC7D;IAEA,kBAAkB,GAAA;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;AAC5B,QAAA,cAAc,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC;IACjD;IAEA,KAAK,GAAA;AACH,QAAA,OAAO,IAAI,CAAC,wBAAwB,EAAE;IACxC;uGA7BW,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAf,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cAFd,MAAM,EAAA,CAAA;;2FAEP,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;;ACWD;AACA;AACA;AAEA;AACA,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAU,MAAM,KAAK,CAAC;AAE7D;AACA,MAAM,oBAAoB,GAAG,IAAI,gBAAgB,CAAU,MAAM,KAAK,CAAC;AAEvE;AACA,MAAM,cAAc,GAAG,IAAI,gBAAgB,CAAyB,OAAO,EAAE,CAAC,CAAC;SAE/D,SAAS,GAAA;IACvB,OAAO,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC;AAChD;SAEgB,kBAAkB,GAAA;IAChC,OAAO,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC;AAC1D;AAEM,SAAU,iBAAiB,CAAC,OAA+B,EAAA;IAC/D,OAAO,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC;AACvD;AA4BA,MAAM,cAAc,GAAgC;AAClD,IAAA,yBAAyB,EAAE,IAAI;AAC/B,IAAA,oBAAoB,EAAE,KAAK;AAC3B,IAAA,kBAAkB,EAAE,IAAI;AACxB,IAAA,aAAa,EAAE,EAAE;AACjB,IAAA,aAAa,EAAE,OAAO;AACtB,IAAA,cAAc,EAAE,WAAW;AAC3B,IAAA,mBAAmB,EAAE,gBAAgB;AACrC,IAAA,eAAe,EAAE,YAAY;AAC7B,IAAA,eAAe,EAAE,WAAW;AAC5B,IAAA,WAAW,EAAE,EAAE;AACf,IAAA,YAAY,EAAE,CAAC,QAAQ,EAAE,WAAW,EAAE,UAAU,CAAC;AACjD,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,gBAAgB,EAAE,IAAI;AACtB,IAAA,oBAAoB,EAAE,SAAgB;AACtC,IAAA,cAAc,EAAE,SAAgB;CACjC;MAEY,mBAAmB,GAAG,IAAI,cAAc,CAAoB,qBAAqB,EAAE;AAC9F,IAAA,OAAO,EAAE,MAAM,cAAc;AAC9B,CAAA;AAED;AACA;AACA;MAEa,sBAAsB,GAAsB,CAAC,GAAG,EAAE,IAAI,KAAI;AACrE,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAC5D,IAAA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC7B,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC,UAAU,CAAC;AACxC,IAAA,MAAM,kBAAkB,GAAG,MAAM,CAAC,eAAe,CAAC;AAClD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;AAC7C,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAEvC,IAAA,MAAM,MAAM,GAAgC;AAC1C,QAAA,GAAG,cAAc;AACjB,QAAA,oBAAoB,EAAE,CAAC,WAAW,CAAC,YAAY;QAC/C,GAAG,MAAM,CAAC,mBAAmB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;KACnD;;IAGD,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IAC/C,MAAM,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IACzD,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAEtD,IAAA,IAAI,WAAW;AAAE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;;IAGjC,MAAM,aAAa,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,KAAI;AACxD,QAAA,IAAI;YACF,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QACvE;AAAE,QAAA,MAAM;YACN,OAAO,KAAK,CAAC;QACf;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,IAAI,aAAa;AAAE,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;;IAGnC,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;;AAGrE,IAAA,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU;IACtC,MAAM,QAAQ,GAAG,WAAW,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,GAAG,CAAC,GAAG,GAAG,CAAA,EAAG,OAAO,GAAG,GAAG,CAAC,GAAG,CAAA,CAAE;;AAG3F,IAAA,MAAM,aAAa,GAAG,MAAM,CAAC;AAC3B,UAAE,kBAAkB,CAAC,wBAAwB;UAC3CA,EAAM,EAAE;AACZ,IAAA,MAAM,QAAQ,GAAG,aAAa,CAAC,WAAW,EAAE;AAC5C,IAAA,MAAM,SAAS,GAAGA,EAAM,EAAE;AAE1B,IAAA,MAAM,OAAO,GAA2B;AACtC,QAAA,CAAC,MAAM,CAAC,eAAe,GAAG,SAAS;QACnC,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACnD;AAED,IAAA,IAAI,MAAM,CAAC,yBAAyB,EAAE;AACpC,QAAA,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,GAAG,aAAa;IACrD;IAEA,IAAI,QAAQ,EAAE;AACZ,QAAA,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC,GAAG,QAAQ;IAC3C;AAEA,IAAA,IAAI,MAAM,CAAC,aAAa,EAAE;AACxB,QAAA,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,aAAa;IAClD;AAEA,IAAA,IAAI,WAAW,CAAC,QAAQ,EAAE;AACxB,QAAA,OAAO,CAAC,WAAW,CAAC,GAAG,WAAW,CAAC,QAAQ;IAC7C;AAEA,IAAA,IAAI,MAAM,CAAC,gBAAgB,IAAI,CAAC,QAAQ,EAAE;AACxC,QAAA,MAAM,SAAS,GAAG,aAAa,EAAE,QAAQ,EAAE;AAC3C,QAAA,IAAI,SAAS;AAAE,YAAA,OAAO,CAAC,eAAe,CAAC,GAAG,CAAA,OAAA,EAAU,SAAS,EAAE;IACjE;;AAGA,IAAA,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AAC5D,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,EAAE,GAAG,KAAK;AAC9D,IAAA,CAAC,CAAC;;AAGF,IAAA,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACtD,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK;AACtB,IAAA,CAAC,CAAC;;;;AAKF,IAAA,IACE,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;AAC7C,QAAA,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAChC,QAAA,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EACpB;AACA,QAAA,OAAO,CAAC,cAAc,CAAC,GAAG,kBAAkB;IAC9C;;AAGA,IAAA,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC;;AAGrE,IAAA,IAAI,MAAM,CAAC,oBAAoB,EAAE;QAC/B,cAAc,CAAC,cAAc,CAAC;YAC5B,MAAM,EAAE,GAAG,CAAC,MAAM;AAClB,YAAA,GAAG,EAAE,QAAQ;YACb,WAAW,EAAE,GAAG,CAAC,GAAG;YACpB,SAAS;YACT,aAAa;YACb,QAAQ;AACR,YAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACnC,YAAA,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,WAAW;AACZ,SAAA,CAAC;IACJ;;IAGA,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;;AAG1C,IAAA,MAAM,QAAQ,GAAG;QACf,GAAG;QACH,QAAQ;QACR,SAAS;QACT,aAAa;QACb,QAAQ;QACR,WAAW;QACX,OAAO;QACP,MAAM;QACN,MAAM;QACN,cAAc;QACd,aAAa;QACb,aAAa;QACb,WAAW;KACZ;;IAGD,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAClC,UAAU,CAAC,CAAC,KAAwB,KAAK,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAC9E;;IAGD,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,oBAAoB,EAAE;AAC5C,QAAA,OAAO,KAAK;IACd;AAEA,IAAA,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI;;AAE3B,IAAA,UAAU,CAAC,CAAC,KAAwB,KAAI;AACtC,QAAA,IAAI,KAAK,CAAC,MAAM,KAAK,GAAG;AAAE,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;AAExD,QAAA,MAAM,YAAY,GAAG,aAAa,EAAE,eAAe,IAAI;AACvD,QAAA,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE;AAAE,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAEzD,OAAO,MAAM,CAAC,oBAAqB,EAAE,CAAC,IAAI,CACxC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,KAClB,IAAI,CACF,GAAG,CAAC,KAAK,CAAC;AACR,YAAA,GAAG,EAAE,QAAQ;YACb,UAAU,EAAE,EAAE,GAAG,OAAO,EAAE,aAAa,EAAE,CAAA,OAAA,EAAU,KAAK,CAAA,CAAE,EAAE;SAC7D,CAAC,CACH,CACF,EACD,UAAU,CAAC,CAAC,YAAY,KAAI;AAC1B,YAAA,MAAM,CAAC,cAAc,IAAI;AACzB,YAAA,OAAO,UAAU,CAAC,MAAM,YAAY,CAAC;QACvC,CAAC,CAAC,CACH;AACH,IAAA,CAAC,CAAC;;AAEF,IAAA,UAAU,CAAC,CAAC,KAAwB,KAAK,kBAAkB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAC9E;AACH;AAsBA,SAAS,kBAAkB,CAAC,KAAwB,EAAE,GAAiB,EAAA;IACrE,MAAM,EACJ,GAAG,EACH,QAAQ,EACR,SAAS,EACT,aAAa,EACb,QAAQ,EACR,WAAW,EACX,MAAM,EACN,MAAM,EACN,cAAc,EACd,aAAa,EACb,WAAW,GACZ,GAAG,GAAG;AAEP,IAAA,IAAI,MAAM,CAAC,kBAAkB,EAAE;QAC7B,cAAc,CAAC,YAAY,CAAC;YAC1B,MAAM,EAAE,GAAG,CAAC,MAAM;AAClB,YAAA,GAAG,EAAE,QAAQ;YACb,WAAW,EAAE,GAAG,CAAC,GAAG;YACpB,SAAS;YACT,aAAa;YACb,QAAQ;YACR,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;AACtB,YAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,YAAY,EAAE,KAAK,CAAC,KAAK;YACzB,WAAW,EAAE,WAAW,CAAC,QAAQ;YACjC,WAAW;AACX,YAAA,OAAO,EAAE,EAAE;AACZ,SAAA,CAAC;IACJ;AAEA,IAAA,QAAQ,KAAK,CAAC,MAAM;AAClB,QAAA,KAAK,GAAG;AACN,YAAA,cAAc,CAAC,KAAK,CAAC,qCAAqC,CAAC;;AAE3D,YAAA,MAAM,CAAC,cAAc,IAAI;YACzB,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAA,CAAA,EAAI,WAAW,CAAC,UAAU,CAAA,CAAE,CAAC,CAAC;YAC/C;AACF,QAAA,KAAK,GAAG;YACN,aAAa,CAAC,eAAe,EAAE;YAC/B;AACF,QAAA,KAAK,CAAC;AACJ,YAAA,cAAc,CAAC,eAAe,CAAC,aAAa,CAAC;YAC7C;AACF,QAAA,KAAK,GAAG;AACN,YAAA,cAAc,CAAC,iBAAiB,CAAC,aAAa,EAAE,QAAQ,CAAC;YACzD;;AAGJ,IAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;AAChC;AAEA;AACA;AACA;AAEA,SAAS,UAAU,CAAC,IAAa,EAAA;AAC/B,IAAA,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,SAAS;AAAE,QAAA,OAAO,IAAI;AACpD,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,SAAS;AACnF,QAAA,OAAO,IAAI;AACb,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;AAAE,QAAA,OAAO,IAAI;IACpC,IACE,OAAO,IAAI,KAAK,QAAQ;AACxB,QAAA,EAAE,IAAI,YAAY,QAAQ,CAAC;AAC3B,QAAA,EAAE,IAAI,YAAY,IAAI,CAAC;AACvB,QAAA,EAAE,IAAI,YAAY,WAAW,CAAC;AAC9B,QAAA,EAAE,IAAI,YAAY,eAAe,CAAC;AAElC,QAAA,OAAO,IAAI;AACb,IAAA,OAAO,KAAK;AACd;AAsBA;AACA;AACA;AAEM,SAAU,uBAAuB,CACrC,SAAA,GAAwC,EAAE,EAAA;AAE1C,IAAA,OAAO,EAAE,GAAG,cAAc,EAAE,GAAG,SAAS,EAAE;AAC5C;AAEA;;;;;;;;;;;;AAYG;AACG,SAAU,kBAAkB,CAAC,MAAA,GAAqC,EAAE,EAAA;IACxE,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,mBAAmB;AAC5B,YAAA,QAAQ,EAAE,uBAAuB,CAAC,MAAM,CAAC;AAC1C,SAAA;KACF;AACH;;AC7YO,MAAM,YAAY,GAAG,IAAI,gBAAgB,CAAU,MAAM,IAAI;SAEpD,cAAc,GAAA;IAC5B,OAAO,IAAI,WAAW,EAAE,CAAC,GAAG,CAAC,YAAY,EAAE,KAAK,CAAC;AACnD;MAGa,qBAAqB,CAAA;IACf,QAAQ,GAA2B,EAAE;AAEtD,IAAA,IAAI,KAAK,GAAA;AACP,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM;IAC7B;;AAGA,IAAA,GAAG,CAAC,OAA6B,EAAA;AAC/B,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;IACnC;;AAGA,IAAA,MAAM,CAAC,OAA6B,EAAA;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AAC5C,QAAA,IAAI,KAAK,IAAI,CAAC,EAAE;YACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;QAChC;AACA,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;IACnC;uGApBW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAArB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cADR,MAAM,EAAA,CAAA;;2FACnB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;MAwBrB,kBAAkB,GAAsB,CAAC,GAAG,EAAE,IAAI,KAAI;AACjE,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACpD,IAAA,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,CAAC;IAE7C,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;AAClC,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC;IAClB;;IAGA,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,IAAI,OAAO,EAAE;QACX,cAAc,CAAC,WAAW,EAAE;IAC9B;IAEA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CACnB,QAAQ,CAAC,MAAK;;QAEZ,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC;QAC1C,IAAI,OAAO,EAAE;YACX,cAAc,CAAC,WAAW,EAAE;QAC9B;IACF,CAAC,CAAC,CACH;AACH;;MCzDsB,kBAAkB,CAAA;AAC5B,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;IAGzB,QAAQ,CAAC,IAAI,GAAG,EAAE,EAAA;AAC1B,QAAA,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACnE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE;QACrE,MAAM,QAAQ,GAAG;AACf,cAAE,CAAA,EAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,CAAA,CAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;AACvD,cAAE,IAAI,CAAC,MAAM,CAAC,QAAQ;AAExB,QAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;IAC/D;AAEU,IAAA,GAAG,CAAI,IAAI,GAAG,EAAE,EAAE,MAAkD,EAAA;AAC5E,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC;IAC1D;AAEU,IAAA,IAAI,CAAI,IAAI,GAAG,EAAE,EAAE,IAAa,EAAA;AACxC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACrD;AAEU,IAAA,GAAG,CAAI,IAAI,GAAG,EAAE,EAAE,IAAa,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACpD;AAEU,IAAA,KAAK,CAAI,IAAI,GAAG,EAAE,EAAE,IAAc,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACtD;IAEU,MAAM,CAAI,IAAI,GAAG,EAAE,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD;uGAhCoB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAlB,kBAAkB,EAAA,CAAA;;2FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBADvC;;;ACCD;MACa,iBAAiB,GAAG,IAAI,cAAc,CAAmB,mBAAmB;AAGnF,MAAO,iBACX,SAAQ,kBAAkB,CAAA;AAGP,IAAA,MAAM;AAEzB,IAAA,WAAA,GAAA;AACE,QAAA,MAAM,MAAM,GAAG,MAAM,CAAmB,iBAAiB,CAAC;AAC1D,QAAA,KAAK,EAAE;AACP,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM;IACtB;AAEA,IAAA,OAAO,CAAC,EAAO,EAAA;QACb,OAAO,IAAI,CAAC,GAAG,CAAU,EAAE,CAAC,QAAQ,EAAE,CAAC;IACzC;AAEA,IAAA,MAAM,CAAC,UAA6B,EAAA;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;QAC3C,OAAO,IAAI,CAAC,GAAG,CAAuB,EAAE,EAAE,MAAM,CAAC;IACnD;AAEA,IAAA,MAAM,CAAC,MAAwB,EAAA;QAC7B,OAAO,IAAI,CAAC,IAAI,CAAU,EAAE,EAAE,MAAM,CAAC;IACvC;IAEA,MAAM,CAAC,EAAO,EAAE,MAAwB,EAAA;QACtC,OAAO,IAAI,CAAC,GAAG,CAAU,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC;IACjD;AAEA,IAAA,MAAM,CAAC,EAAO,EAAA;QACZ,OAAO,KAAK,CAAC,MAAM,CAAO,EAAE,CAAC,QAAQ,EAAE,CAAC;IAC1C;IAEU,WAAW,CAAC,UAA6B,EAAE,OAA6B,EAAA;QAChF,MAAM,MAAM,GAAQ,EAAE;QAEtB,IAAI,UAAU,EAAE;YACd,MAAM,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG;YAC1D,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI;YACzD,IAAI,UAAU,CAAC,MAAM;AAAE,gBAAA,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;YACxD,IAAI,UAAU,CAAC,aAAa;AAAE,gBAAA,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa;QAC/E;QAEA,IAAI,OAAO,EAAE;AACX,YAAA,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;QAChC;AAEA,QAAA,OAAO,MAAM;IACf;uGAhDW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAAjB,iBAAiB,EAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;AAqDK,MAAO,2BACX,SAAQ,iBAA+B,CAAA;IAGvC,MAAM,CAAC,KAAa,EAAE,UAA4B,EAAA;AAChD,QAAA,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC;QAC1D,OAAO,IAAI,CAAC,GAAG,CAAuB,QAAQ,EAAE,MAAM,CAAC;IACzD;uGARW,2BAA2B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;2GAA3B,2BAA2B,EAAA,CAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADvC;;;MCvDY,iBAAiB,CAAA;AACpB,IAAA,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;AAEjC,IAAA,MAAM,CACJ,MAAwB,EAAA;AAExB,QAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,GAAG,EAAE,KAAI;AAC7B,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM;AACxC,YAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,GAAG,CAAA,EAAA,EAAK,MAAM,CAAC,OAAO,CAAA,CAAE,GAAG,EAAE;AAC3D,YAAA,MAAM,QAAQ,GAAG,IAAI,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAA,CAAA,EAAI,IAAI,EAAE,GAAG,MAAM,CAAC,QAAQ;AACtE,YAAA,OAAO,CAAA,EAAG,OAAO,CAAA,EAAG,OAAO,IAAI,QAAQ,CAAA,CAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AAChE,QAAA,CAAC;AAED,QAAA,MAAM,WAAW,GAAG,CAAC,UAA6B,KAAI;YACpD,MAAM,MAAM,GAAQ,EAAE;YACtB,IAAI,UAAU,EAAE;gBACd,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,GAAG;gBACrD,MAAM,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI;gBACzD,IAAI,UAAU,CAAC,MAAM;AAAE,oBAAA,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;gBACxD,IAAI,UAAU,CAAC,aAAa;AAAE,oBAAA,MAAM,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa;YAC/E;AACA,YAAA,OAAO,MAAM;AACf,QAAA,CAAC;;AAGD,QAAA,MAAM,UAAU,GAAG,CAAC,EAAO,KAAY;AACrC,YAAA,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,OAAO,EAAE,KAAK,QAAQ,EAAE;AAC9E,gBAAA,OAAO,EAAE,CAAC,QAAQ,EAAE;YACtB;;AAEA,YAAA,OAAO,MAAM,CAAC,EAAE,CAAC;AACnB,QAAA,CAAC;QAED,OAAO;AACL,YAAA,OAAO,EAAE,CAAC,EAAO,KAAK,IAAI,CAAC,IAAI,CAAC,GAAG,CAAU,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AAEtE,YAAA,MAAM,EAAE,CAAC,UAAW,KAClB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAuB,QAAQ,EAAE,EAAE;AAC9C,gBAAA,MAAM,EAAE,WAAW,CAAC,UAAU,CAAC;aAChC,CAAC;AAEJ,YAAA,MAAM,EAAE,CAAC,MAAwB,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAU,QAAQ,EAAE,EAAE,MAAM,CAAC;YAEjF,MAAM,EAAE,CAAC,EAAO,EAAE,MAAwB,KACxC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAU,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC;AAE1D,YAAA,MAAM,EAAE,CAAC,EAAO,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,CAAO,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;SACtE;IACH;uGAhDW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cADJ,MAAM,EAAA,CAAA;;2FACnB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACDlC,SAAS,QAAQ,CAAC,OAA2B,EAAE,QAAgB,EAAA;AAC7D,IAAA,IAAI,CAAC,OAAO;AAAE,QAAA,OAAO,QAAQ;AAC7B,IAAA,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;AACzE;MAEa,kBAAkB,CAAA;AAEV,IAAA,IAAA;AACA,IAAA,OAAA;IAFnB,WAAA,CACmB,IAAgB,EAChB,OAAgB,EAAA;QADhB,IAAA,CAAA,IAAI,GAAJ,IAAI;QACJ,IAAA,CAAA,OAAO,GAAP,OAAO;IACvB;AAEK,IAAA,YAAY,CAAC,OAAqB,EAAA;QACxC,OAAO;AACL,YAAA,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,EAAE;AAC/B,YAAA,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE;SAC9B;IACH;IAEQ,MAAM,OAAO,CAAI,MAKxB,EAAA;AACC,QAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC;QAClD,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;AAErD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAI,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE;YAC9D,IAAI,EAAE,MAAM,CAAC,IAAI;AACjB,YAAA,GAAG,WAAW;AACf,SAAA,CAAC;AAEF,QAAA,OAAO,MAAM,aAAa,CAAC,UAAU,CAAC;IACxC;;IAGA,GAAG,CAAI,GAAW,EAAE,OAAqB,EAAA;AACvC,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IACtD;;AAGA,IAAA,IAAI,CAAI,GAAW,EAAE,IAAc,EAAE,OAAqB,EAAA;AACxD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC7D;;AAGA,IAAA,GAAG,CAAI,GAAW,EAAE,IAAc,EAAE,OAAqB,EAAA;AACvD,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC5D;;IAGA,MAAM,CAAI,GAAW,EAAE,OAAqB,EAAA;AAC1C,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IACzD;AACD;;MCnDY,iBAAiB,CAAA;AACpB,IAAA,MAAM;AACN,IAAA,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;AAEzC,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;IACvC;AAEA;;AAEG;IACK,gBAAgB,GAAA;AACtB,QAAA,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QAE9D,OAAO;AACL,YAAA,GAAGC,gBAAc;;YAEjB,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,UAAU,IAAIA,gBAAc,CAAC,UAAU;AACpE,YAAA,oBAAoB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY;;AAEpD,YAAA,GAAG,cAAc;SAClB;IACH;AAEA;;AAEG;IACH,SAAS,GAAA;AACP,QAAA,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE;IAC3B;AAEA;;AAEG;AACH,IAAA,YAAY,CAAC,OAA4B,EAAA;AACvC,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,EAAE;IAC9C;AAEA;;AAEG;AACH,IAAA,GAAG,CAA6B,GAAM,EAAA;AACpC,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACzB;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,OAAyB,EAAA;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AAClC,QAAA,OAAO,OAAO,KAAK,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;IACnD;AAEA;;AAEG;AACH,IAAA,SAAS,CAAC,UAAmB,EAAA;AAC3B,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU;AACtC,QAAA,IAAI,CAAC,UAAU;AAAE,YAAA,OAAO,OAAO;AAC/B,QAAA,OAAO,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;IACxD;AAEA;;AAEG;AACH,IAAA,gBAAgB,CAAC,GAAW,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CACjC,CAAC,cAAc,KAAK,GAAG,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,IAAI,MAAM,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CACzF;IACH;AAEA;;AAEG;AACH,IAAA,mBAAmB,CAAC,MAAc,EAAA;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CACpC,CAAC,aAAa,KAAK,aAAa,CAAC,WAAW,EAAE,KAAK,MAAM,CAAC,WAAW,EAAE,CACxE;IACH;AAEA;;AAEG;IACH,gBAAgB,GAAA;QACd,MAAM,OAAO,GAA2B,EAAE;AAE1C,QAAA,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAI;AACjE,YAAA,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,UAAU,GAAG,KAAK,EAAE,GAAG,KAAK;AAC9D,QAAA,CAAC,CAAC;AAEF,QAAA,OAAO,OAAO;IAChB;AAEA;;AAEG;IACH,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE;IACvC;uGAlGW,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAjB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,iBAAiB,cAFhB,MAAM,EAAA,CAAA;;2FAEP,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE,MAAM;AACnB,iBAAA;;AAsGD;AACM,SAAU,iBAAiB,CAAC,MAAA,GAA8B,EAAE,EAAA;IAChE,OAAO;AACL,QAAA;AACE,YAAA,OAAO,EAAE,WAAW;AACpB,YAAA,QAAQ,EAAE,MAAM;AACjB,SAAA;KACF;AACH;AAEA;AACM,SAAU,gBAAgB,CAAC,SAAA,GAAiC,EAAE,EAAA;IAClE,OAAO;AACL,QAAA,GAAGA,gBAAc;AACjB,QAAA,GAAG,SAAS;KACb;AACH;;MCtHsB,WAAW,CAAA;AAKhC;;ACLD;AACM,MAAgB,OAAoC,SAAQ,WAAgC,CAAA;;AAEtF,IAAA,QAAQ,CAAC,QAAkB,EAAA;QACnC,OAAO,EAAE,CAAC;IACZ;AAES,IAAA,OAAO,CAAC,OAAiB,EAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AACrC,QAAA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;AACrB,YAAA,OAAO,UAAU,CAAC,OAAO;AACvB,gBAAA,MAAM,EAAE,OAAO;AACf,gBAAA,IAAI,EAAE,mBAAmB;AACzB,gBAAA,OAAO,EAAE,mBAAmB;gBAC5B,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;AACnE,gBAAA,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;AACpC,aAAA,CAAC,CAAC;QACL;AAEA,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CACvCC,YAAU,CAAC,CAAC,KAAK,KAAI;;AAEnB,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,YAAA,MAAM,CAAC,KAAK,CAAC,6CAA6C,EAAE,KAAK,CAAC;;AAGlE,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,CACH;IACH;AAGD;;AChCK,MAAgB,KAA2B,SAAQ,WAAgC,CAAA;AAC9E,IAAA,OAAO,CAAC,OAAiB,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,IAAI,CACvCA,YAAU,CAAC,CAAC,KAAK,KAAI;AACnB,YAAA,MAAM,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;AACrC,YAAA,MAAM,CAAC,KAAK,CAAC,2CAA2C,EAAE,KAAK,CAAC;AAChE,YAAA,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC;QAChC,CAAC,CAAC,CACH;IACH;AAGD;;AClBD;;AAEG;;;;"}