@fayz-ai/plugin-financial 0.1.2 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/dist/FinancialContext.d.ts +2 -0
  3. package/dist/FinancialContext.d.ts.map +1 -1
  4. package/dist/FinancialPage.d.ts.map +1 -1
  5. package/dist/components/PaymentModal.d.ts.map +1 -1
  6. package/dist/components/PersonStatementWidget.d.ts +18 -0
  7. package/dist/components/PersonStatementWidget.d.ts.map +1 -0
  8. package/dist/components/TransferModal.d.ts +7 -0
  9. package/dist/components/TransferModal.d.ts.map +1 -0
  10. package/dist/contract.test.d.ts +2 -0
  11. package/dist/contract.test.d.ts.map +1 -0
  12. package/dist/data/capability.test.d.ts +2 -0
  13. package/dist/data/capability.test.d.ts.map +1 -0
  14. package/dist/data/mock.d.ts.map +1 -1
  15. package/dist/data/supabase.d.ts.map +1 -1
  16. package/dist/data/types.d.ts +13 -2
  17. package/dist/data/types.d.ts.map +1 -1
  18. package/dist/index.cjs +1529 -263
  19. package/dist/index.cjs.map +1 -1
  20. package/dist/index.d.ts +2 -0
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +1437 -171
  23. package/dist/index.js.map +1 -1
  24. package/dist/locales/en.d.ts.map +1 -1
  25. package/dist/locales/pt-BR.d.ts.map +1 -1
  26. package/dist/registries.d.ts.map +1 -1
  27. package/dist/store.d.ts +4 -2
  28. package/dist/store.d.ts.map +1 -1
  29. package/dist/types.d.ts +111 -1
  30. package/dist/types.d.ts.map +1 -1
  31. package/dist/views/InvoiceDetailView.d.ts +3 -1
  32. package/dist/views/InvoiceDetailView.d.ts.map +1 -1
  33. package/dist/views/InvoiceFormView.d.ts.map +1 -1
  34. package/dist/views/PayablesView.d.ts +5 -1
  35. package/dist/views/PayablesView.d.ts.map +1 -1
  36. package/dist/views/ReceivablesView.d.ts +5 -1
  37. package/dist/views/ReceivablesView.d.ts.map +1 -1
  38. package/dist/views/ReconciliationView.d.ts +3 -0
  39. package/dist/views/ReconciliationView.d.ts.map +1 -0
  40. package/dist/views/StatementsView.d.ts +3 -1
  41. package/dist/views/StatementsView.d.ts.map +1 -1
  42. package/dist/views/navReferrer.d.ts +5 -0
  43. package/dist/views/navReferrer.d.ts.map +1 -0
  44. package/package.json +8 -5
  45. package/src/FinancialContext.tsx +2 -0
  46. package/src/FinancialPage.tsx +32 -17
  47. package/src/components/PaymentModal.tsx +58 -11
  48. package/src/components/PersonStatementWidget.tsx +133 -0
  49. package/src/components/TransferModal.tsx +150 -0
  50. package/src/contract.test.ts +58 -0
  51. package/src/data/capability.test.ts +90 -0
  52. package/src/data/mock.ts +265 -52
  53. package/src/data/supabase.ts +359 -30
  54. package/src/data/types.ts +22 -3
  55. package/src/index.ts +28 -2
  56. package/src/locales/en.ts +76 -0
  57. package/src/locales/pt-BR.ts +76 -0
  58. package/src/migrations/006_extract_fee_amount.sql +20 -0
  59. package/src/migrations/006_rls_policies.sql +37 -0
  60. package/src/migrations/007_reconciliation.sql +32 -0
  61. package/src/migrations/008_split_payment_movements.sql +29 -0
  62. package/src/registries.ts +3 -1
  63. package/src/store.ts +27 -7
  64. package/src/types.ts +126 -1
  65. package/src/views/InvoiceDetailView.tsx +70 -51
  66. package/src/views/InvoiceFormView.tsx +55 -20
  67. package/src/views/PayablesView.tsx +13 -2
  68. package/src/views/ReceivablesView.tsx +13 -2
  69. package/src/views/ReconciliationView.tsx +211 -0
  70. package/src/views/StatementsView.tsx +241 -29
  71. package/src/views/navReferrer.ts +24 -0
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/FinancialContext.tsx","../src/views/SummaryView.tsx","../src/views/InvoiceListView.tsx","../src/views/InvoiceFormView.tsx","../src/components/PaymentModal.tsx","../src/views/InvoiceDetailView.tsx","../src/views/PayablesView.tsx","../src/views/ReceivablesView.tsx","../src/views/CashRegistersView.tsx","../src/views/StatementsView.tsx","../src/views/CommissionsView.tsx","../src/views/CardsView.tsx","../src/components/FinancialGeneralSettings.tsx","../src/components/FinancialOnboarding.tsx","../src/FinancialPage.tsx","../src/views/dashboardWidgets.tsx","../src/data/mock.ts","../src/data/supabase.ts","../src/store.ts","../src/registries.ts","../src/locales/en.ts","../src/locales/pt-BR.ts","../src/locales/index.ts","../src/index.ts"],"names":["t","jsx","useTranslation","useState","useEffect","jsxs","SubpageHeader","Ban","useMemo","createPortal","X","CurrencyInput","DatePicker","Button","Check","CircleDashed","CircleEllipsis","CircleCheckBig","CircleAlert","useRef","Pencil","MoreVertical","FileText","PersonLink","Fragment","ChevronDown","CreditCard","Building2","DataTable","DollarSign","Landmark","ctx","today","createStore","toast","React"],"mappings":"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","file":"index.js","sourcesContent":["import { createPluginContext, formatCurrency, type CurrencyConfig, type EntityLookupMap, type EntityLookup } from '@fayz-ai/saas'\nimport type { FinancialPluginLabels, ItemTypeOption } from './index'\nimport type { FinancialDataProvider } from './data/types'\nimport type { FinancialUIState } from './store'\n\n// ---------------------------------------------------------------------------\n// Resolved config — fully merged, no optionals\n// ---------------------------------------------------------------------------\n\nexport interface FinancialModules {\n payables: boolean\n receivables: boolean\n cashRegisters: boolean\n statements: boolean\n commissions: boolean\n cards: boolean\n}\n\nexport type FinancialCurrency = CurrencyConfig\n\nexport interface LocationOption {\n id: string\n name: string\n isHQ?: boolean\n}\n\nexport interface ResolvedFinancialConfig {\n modules: FinancialModules\n labels: FinancialPluginLabels\n currency: FinancialCurrency\n itemTypes: ItemTypeOption[]\n enableServiceExecution: boolean\n contactEntity: { archetypeKind: string; label: string }\n locations: LocationOption[]\n entityLookups: EntityLookupMap\n contactLookup?: EntityLookup\n onBookingClick?: (orderId: string) => void\n}\n\nconst ctx = createPluginContext<ResolvedFinancialConfig, FinancialDataProvider, FinancialUIState>('FinancialPage')\n\nexport const FinancialContextProvider = ctx.ContextProvider\nexport const useFinancialConfig = ctx.useConfig\nexport const useFinancialProvider = ctx.useProvider\nexport const useFinancialStore = ctx.useStore\n\nexport { formatCurrency }\n","import React from 'react'\nimport { DashboardCanvas } from '@fayz-ai/ui'\n\n/**\n * Financial summary. KPIs, cash-flow chart, breakdown, overdue alerts and the\n * recent-transactions table are registered dashboard widgets (see\n * ./dashboardWidgets), rendered through the shared DashboardCanvas; the\n * total-balance KPI also surfaces on the global app home.\n */\nexport function SummaryView() {\n return <DashboardCanvas surface=\"plugin-home\" domain=\"financial\" showHeader={false} className=\"space-y-6\" />\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { FileText, CircleDashed, CircleEllipsis, CircleCheckBig, CircleAlert, Ban } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { ListView } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { PersonLink } from '@fayz-ai/saas'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { TransactionDirection, InvoiceStatus, Invoice } from '../types'\n\nconst STATUS_OPTIONS: { value: InvoiceStatus; labelKey: string; color: string; icon: React.ElementType }[] = [\n { value: 'open', labelKey: 'financial.invoice.statusOpen', color: 'bg-info-soft text-info-soft-foreground', icon: CircleDashed },\n { value: 'partial', labelKey: 'financial.invoice.statusPartial', color: 'bg-warning-soft text-warning-soft-foreground', icon: CircleEllipsis },\n { value: 'paid', labelKey: 'financial.invoice.statusPaid', color: 'bg-success-soft text-success-soft-foreground', icon: CircleCheckBig },\n { value: 'overdue', labelKey: 'financial.invoice.statusOverdue', color: 'bg-destructive-soft text-destructive-soft-foreground', icon: CircleAlert },\n { value: 'cancelled', labelKey: 'financial.invoice.statusCancelled', color: 'bg-muted text-muted-foreground', icon: Ban },\n]\n\nfunction StatusBadge({ status }: { status: string }) {\n const t = useTranslation()\n const opt = STATUS_OPTIONS.find((o) => o.value === status)\n const Icon = opt?.icon ?? CircleDashed\n return (\n <span className={`inline-flex items-center gap-0.5 rounded-full px-2 py-0.5 text-[10px] font-medium ${opt?.color ?? 'bg-muted text-muted-foreground'}`}>\n <Icon className=\"h-2.5 w-2.5\" /> {opt ? t(opt.labelKey) : status}\n </span>\n )\n}\n\nfunction useInvoiceColumns(currency: { code: string; locale: string; symbol: string }): ColumnDef<Invoice, any>[] {\n const t = useTranslation()\n return useMemo(() => [\n {\n accessorKey: 'fiscalNumber', header: '#', size: 110,\n cell: ({ getValue }) => {\n const num = getValue() as string | undefined\n return num ? <span className=\"text-xs font-mono text-muted-foreground\">#{num}</span> : <span className=\"text-muted-foreground\">—</span>\n },\n },\n {\n accessorKey: 'invoiceDate', header: t('financial.invoice.columnDate'),\n cell: ({ getValue }) => <span className=\"text-muted-foreground text-xs\">{getValue() as string}</span>,\n },\n {\n id: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => (\n <div onClick={(e) => e.stopPropagation()}>\n {row.original.contactName ? (\n <PersonLink personId={row.original.contactId} name={row.original.contactName} size=\"sm\" className=\"text-sm font-medium\" />\n ) : (\n <p className=\"font-medium\">—</p>\n )}\n {row.original.itemsSummary && <p className=\"text-[10px] text-muted-foreground truncate max-w-[250px]\">{row.original.itemsSummary}</p>}\n </div>\n ),\n },\n {\n accessorKey: 'totalAmount', header: t('financial.invoice.columnAmount'), enableSorting: true,\n cell: ({ row }) => (\n <span className={`font-medium ${row.original.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>\n {formatCurrency(row.original.totalAmount, currency)}\n </span>\n ),\n },\n {\n accessorKey: 'paidAmount', header: t('financial.invoice.columnPaid'),\n cell: ({ row }) => (\n <span className={row.original.status === 'cancelled' ? 'line-through text-muted-foreground' : 'text-muted-foreground'}>\n {formatCurrency(row.original.paidAmount, currency)}\n </span>\n ),\n },\n {\n accessorKey: 'status', header: t('financial.invoice.columnStatus'),\n cell: ({ getValue }) => <StatusBadge status={getValue() as string} />,\n },\n {\n accessorKey: 'totalInstallments', header: t('financial.invoice.columnInst'),\n cell: ({ getValue }) => <span className=\"text-muted-foreground\">{getValue() as number}</span>,\n },\n ], [currency, t])\n}\n\nexport function InvoiceListView({ direction, onNew, onEdit }: {\n direction: TransactionDirection\n onNew?: () => void\n onEdit?: (id: string) => void\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const invoices = useFinancialStore((s) => s.invoices)\n const invoicesTotal = useFinancialStore((s) => s.invoicesTotal)\n const invoicesLoading = useFinancialStore((s) => s.invoicesLoading)\n const fetchInvoices = useFinancialStore((s) => s.fetchInvoices)\n\n const [search, setSearch] = useState('')\n const [statusFilter, setStatusFilter] = useState<InvoiceStatus[]>([])\n\n useEffect(() => {\n fetchInvoices({\n direction,\n status: statusFilter.length > 0 ? statusFilter : undefined,\n search: search || undefined,\n })\n }, [direction, statusFilter, search])\n\n const filtered = invoices.filter((inv) => inv.direction === direction)\n const listTitle = direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')\n const columns = useInvoiceColumns(currency)\n const tags = useMemo(\n () => STATUS_OPTIONS.filter((o) => o.value !== 'cancelled').map((o) => ({ value: o.value, label: t(o.labelKey) })),\n [t],\n )\n\n // Summary totals from currently visible data\n const summary = useMemo(() => {\n let totalAmount = 0\n let paidAmount = 0\n let openAmount = 0\n for (const inv of filtered) {\n if (inv.status === 'cancelled') continue\n totalAmount += inv.totalAmount\n paidAmount += inv.paidAmount\n }\n openAmount = totalAmount - paidAmount\n return { totalAmount, paidAmount, openAmount }\n }, [filtered])\n\n const receivedLabel = direction === 'debit' ? t('financial.invoice.summaryPaid') : t('financial.invoice.summaryReceived')\n const pendingLabel = direction === 'debit' ? t('financial.invoice.summaryPayable') : t('financial.invoice.summaryReceivable')\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader\n title={listTitle}\n subtitle={t('financial.invoice.invoices', { count: filtered.length })}\n />\n <ListView<Invoice>\n columns={columns}\n data={filtered}\n loading={invoicesLoading}\n searchPlaceholder={t('financial.invoice.searchPlaceholder')}\n search={search}\n onSearchChange={setSearch}\n searchDebounce={0}\n tags={tags}\n activeTag={statusFilter.length === 1 ? statusFilter[0] : undefined}\n onTagChange={(v) => setStatusFilter(v ? [v as InvoiceStatus] : [])}\n newLabel={t('financial.invoice.new')}\n onNew={onNew}\n onRowClick={(row) => onEdit?.(row.id)}\n emptyIcon={FileText}\n emptyMessage={t('financial.invoice.noInvoices')}\n emptyActionLabel={onNew ? t('financial.invoice.createFirst') : undefined}\n onEmptyAction={onNew}\n />\n {filtered.length > 0 && !invoicesLoading && (\n <div className=\"flex items-center justify-end gap-6 rounded-lg border bg-muted/30 px-5 py-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.summaryTotal')}</span>\n <span className=\"font-semibold\">{formatCurrency(summary.totalAmount, currency)}</span>\n </div>\n <div className=\"h-4 w-px bg-border\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{receivedLabel}</span>\n <span className=\"font-semibold text-success\">{formatCurrency(summary.paidAmount, currency)}</span>\n </div>\n <div className=\"h-4 w-px bg-border\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{pendingLabel}</span>\n <span className=\"font-semibold text-warning\">{formatCurrency(summary.openAmount, currency)}</span>\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Plus, Trash2, Search, LayoutList, X, ChevronDown, Percent, Tag, Building2, Check, MoreVertical, Ban } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, useFinancialProvider, formatCurrency } from '../FinancialContext'\nimport { SearchSelect } from '@fayz-ai/ui'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport type { EntityLookupMap } from '@fayz-ai/saas'\nimport { SubpageHeader, useSaveBar, toast } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { TransactionDirection, CreateInvoiceItemInput, CreateMovementInput } from '../types'\n\n// ---------------------------------------------------------------------------\n// Location / unit selector\n// ---------------------------------------------------------------------------\n\nexport interface LocationOption {\n id: string\n name: string\n isHQ?: boolean\n}\n\nfunction LocationSelector({ locations, value, onChange }: {\n locations: LocationOption[]\n value: string\n onChange: (id: string) => void\n}) {\n const t = useTranslation()\n const [open, setOpen] = useState(false)\n const [search, setSearch] = useState('')\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n function handler(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [])\n\n const selected = locations.find((l) => l.id === value)\n const filtered = locations.filter((l) =>\n !search.trim() || l.name.toLowerCase().includes(search.toLowerCase())\n )\n\n return (\n <div ref={ref} className=\"relative\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.unit')}</label>\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"w-full mt-1 flex items-center gap-2 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm text-left hover:bg-muted/30 transition-colors\"\n >\n <Building2 className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <span className=\"flex-1 truncate\">{selected?.name ?? t('financial.invoiceForm.selectUnit')}</span>\n <ChevronDown className={`h-3 w-3 text-muted-foreground transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"fayz-glass-surface absolute top-full left-0 right-0 z-50 mt-1 rounded-lg border bg-popover shadow-lg overflow-hidden min-w-[260px]\">\n <div className=\"flex items-center gap-2 px-3 py-2 border-b\">\n <Building2 className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-semibold\">{t('financial.invoiceForm.selectUnitTitle')}</span>\n <button onClick={() => setOpen(false)} className=\"ml-auto text-muted-foreground hover:text-foreground\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n <div className=\"p-2 border-b\">\n <div className=\"flex items-center gap-2 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2.5 py-1.5\">\n <Search className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <input\n type=\"text\"\n autoFocus\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={t('financial.invoiceForm.searchUnit')}\n className=\"flex-1 bg-transparent text-sm outline-none\"\n />\n </div>\n </div>\n <div className=\"max-h-56 overflow-auto py-1\">\n {filtered.map((loc) => (\n <button\n key={loc.id}\n onClick={() => { onChange(loc.id); setOpen(false); setSearch('') }}\n className={`w-full flex items-center gap-3 px-3 py-2.5 text-left hover:bg-muted/50 transition-colors ${\n loc.id === value ? 'bg-muted/30' : ''\n }`}\n >\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-muted shrink-0\">\n <Building2 className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium truncate\">{loc.name}</p>\n {loc.isHQ && <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoiceForm.headquarters')}</p>}\n </div>\n </button>\n ))}\n {filtered.length === 0 && (\n <p className=\"px-3 py-4 text-center text-xs text-muted-foreground\">{t('financial.invoiceForm.noUnitsFound')}</p>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ID helper\n// ---------------------------------------------------------------------------\n\nlet formId = 1\nfunction fid(): string { return `f${formId++}` }\n\n// ---------------------------------------------------------------------------\n// Item row — compact by default, expandable for details\n// ---------------------------------------------------------------------------\n\ninterface FormItem extends CreateInvoiceItemInput {\n _id: string\n}\n\nfunction ItemRow({ item, index, itemTypes, currency, expanded, onToggle, onUpdate, onRemove, entityLookups }: {\n item: FormItem\n index: number\n itemTypes: Array<{ value: string; label: string; icon?: string }>\n currency: { code: string; locale: string; symbol: string }\n expanded: boolean\n onToggle: () => void\n onUpdate: (data: Partial<FormItem>) => void\n onRemove: () => void\n entityLookups: EntityLookupMap\n}) {\n const t = useTranslation()\n const total = item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0)\n const kindLabel = itemTypes.find((tp) => tp.value === item.itemKind)?.label ?? item.itemKind\n const hasAdjustments = (item.discount ?? 0) > 0 || (item.surcharge ?? 0) > 0\n const [showAdjustments, setShowAdjustments] = useState(hasAdjustments)\n\n return (\n <div className=\"border-b last:border-0\">\n {/* Compact row — always visible */}\n <div\n className=\"flex items-center gap-2 px-4 py-3 cursor-pointer hover:bg-muted/30 transition-colors group\"\n onClick={onToggle}\n >\n <ChevronDown className={`h-3 w-3 text-muted-foreground shrink-0 transition-transform ${expanded ? 'rotate-0' : '-rotate-90'}`} />\n <span className=\"text-[10px] font-medium text-muted-foreground w-5 shrink-0\">{index + 1}.</span>\n <span className=\"inline-flex items-center rounded px-1.5 py-0.5 text-[9px] font-medium bg-muted text-muted-foreground shrink-0\">\n {kindLabel}\n </span>\n <span className=\"text-sm truncate flex-1 min-w-0\">{item.description || <span className=\"text-muted-foreground italic\">{t('financial.invoiceForm.noDescription')}</span>}</span>\n <span className=\"text-xs text-muted-foreground shrink-0\">{item.quantity} x {formatCurrency(item.unitPrice, currency)}</span>\n {hasAdjustments && <Tag className=\"h-3 w-3 text-warning shrink-0\" />}\n <span className=\"text-sm font-semibold shrink-0 min-w-[80px] text-right\">{formatCurrency(total, currency)}</span>\n <button\n onClick={(e) => { e.stopPropagation(); onRemove() }}\n className=\"p-1 text-muted-foreground opacity-0 group-hover:opacity-100 hover:text-destructive transition-all shrink-0\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </button>\n </div>\n\n {/* Expanded detail — edit fields */}\n {expanded && (\n <div className=\"px-4 pb-4 pt-1 ml-8 space-y-3 bg-muted/10\">\n {/* Type selector */}\n <div className=\"flex gap-1.5\">\n {itemTypes.map((tp) => (\n <button\n key={tp.value}\n onClick={() => onUpdate({ itemKind: tp.value })}\n className={`rounded-full px-2.5 py-1 text-[10px] font-medium transition-colors ${\n item.itemKind === tp.value\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n >\n {tp.label}\n </button>\n ))}\n </div>\n\n {/* Main fields */}\n <div className=\"grid gap-3 grid-cols-12\">\n <div className=\"col-span-6 sm:col-span-7\">\n {entityLookups[item.itemKind] ? (\n <SearchSelect\n label={t('financial.invoiceForm.item')}\n value={item.referenceId ?? ''}\n displayValue={item.description}\n loadOnOpen\n onChange={(id, opt) => {\n const price = (opt?.data as any)?.price\n onUpdate({\n referenceId: id || undefined,\n description: opt?.label ?? '',\n ...(price != null ? { unitPrice: price } : {}),\n })\n }}\n onSearch={async (q) => {\n const results = await entityLookups[item.itemKind].search(q)\n return results.map((r) => ({\n id: r.id,\n label: r.label,\n subtitle: r.subtitle,\n group: r.group,\n data: r,\n }))\n }}\n placeholder={`Search ${itemTypes.find((tp) => tp.value === item.itemKind)?.label?.toLowerCase() ?? 'item'}...`}\n renderOption={(opt) => (\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm truncate\">{opt.label}</p>\n {opt.subtitle && <p className=\"text-[10px] text-muted-foreground\">{opt.subtitle}</p>}\n </div>\n )}\n />\n ) : (\n <>\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.description')}</label>\n <input\n type=\"text\"\n value={item.description}\n onChange={(e) => onUpdate({ description: e.target.value })}\n placeholder={t('financial.invoiceForm.itemDescription')}\n autoFocus\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2.5 py-1.5 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </>\n )}\n </div>\n <div className=\"col-span-2 sm:col-span-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.qty')}</label>\n <input\n type=\"number\"\n min={1}\n value={item.quantity}\n onChange={(e) => onUpdate({ quantity: Number(e.target.value) || 1 })}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-sm text-center focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n <div className=\"col-span-4\">\n <CurrencyInput\n label={t('financial.invoiceForm.unitPrice')}\n value={item.unitPrice}\n onChange={(v) => onUpdate({ unitPrice: v })}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n </div>\n </div>\n\n {/* Optional adjustments toggle */}\n {!showAdjustments ? (\n <button\n onClick={() => setShowAdjustments(true)}\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n <Plus className=\"h-3 w-3\" /> {t('financial.invoiceForm.discountSurcharge')}\n </button>\n ) : (\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.discount')}</label>\n <div className=\"flex items-center mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] focus-within:ring-2 focus-within:ring-primary/20\">\n <span className=\"pl-2 text-xs text-muted-foreground\">{currency.symbol}</span>\n <input\n type=\"number\"\n min={0}\n step={0.01}\n value={item.discount ?? 0}\n onChange={(e) => onUpdate({ discount: Number(e.target.value) || 0 })}\n className=\"flex-1 bg-transparent px-2 py-1 text-xs outline-none\"\n />\n </div>\n </div>\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.surcharge')}</label>\n <div className=\"flex items-center mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] focus-within:ring-2 focus-within:ring-primary/20\">\n <span className=\"pl-2 text-xs text-muted-foreground\">{currency.symbol}</span>\n <input\n type=\"number\"\n min={0}\n step={0.01}\n value={item.surcharge ?? 0}\n onChange={(e) => onUpdate({ surcharge: Number(e.target.value) || 0 })}\n className=\"flex-1 bg-transparent px-2 py-1 text-xs outline-none\"\n />\n </div>\n </div>\n <button\n onClick={() => { onUpdate({ discount: 0, surcharge: 0 }); setShowAdjustments(false) }}\n className=\"mt-3 p-1 text-muted-foreground hover:text-destructive transition-colors\"\n title={t('financial.invoiceForm.removeAdjustments')}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )}\n\n {/* Done — collapse row */}\n <div className=\"flex justify-end pt-1\">\n <button\n onClick={onToggle}\n className=\"inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-[11px] text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors\"\n >\n <Check className=\"h-3 w-3\" /> {t('financial.invoiceForm.done')}\n </button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Type selector step — shown when adding a new item\n// ---------------------------------------------------------------------------\n\nfunction AddItemStep({ itemTypes, onSelect, onCancel }: {\n itemTypes: Array<{ value: string; label: string; icon?: string }>\n onSelect: (kind: string) => void\n onCancel: () => void\n}) {\n const t = useTranslation()\n return (\n <div className=\"border-b px-4 py-3 bg-primary/5 animate-in fade-in-0 slide-in-from-top-1\">\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">{t('financial.invoiceForm.selectItemType')}</p>\n <div className=\"flex gap-2 flex-wrap\">\n {itemTypes.map((t) => (\n <button\n key={t.value}\n onClick={() => onSelect(t.value)}\n className=\"inline-flex items-center gap-1.5 rounded-lg border-2 border-transparent bg-card px-4 py-2 text-sm font-medium shadow-sm hover:border-primary hover:shadow-md transition-all\"\n >\n {t.label}\n </button>\n ))}\n <button\n onClick={onCancel}\n className=\"inline-flex items-center rounded-lg px-3 py-2 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('financial.invoiceForm.cancel')}\n </button>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Installment form\n// ---------------------------------------------------------------------------\n\ninterface FormInstallment {\n _id: string\n amount: number\n dueDate: string\n}\n\n// ---------------------------------------------------------------------------\n// Invoice form view\n// ---------------------------------------------------------------------------\n\nexport function InvoiceFormView({ direction, editId, onSaved }: {\n direction: TransactionDirection\n editId?: string\n onSaved?: (id?: string) => void\n}) {\n const t = useTranslation()\n const config = useFinancialConfig()\n const { currency, itemTypes, locations } = config\n const provider = useFinancialProvider()\n const createInvoice = useFinancialStore((s) => s.createInvoice)\n const hasLocations = locations.length > 0\n const isEdit = !!editId\n\n const [loaded, setLoaded] = useState(!editId)\n const [loading, setLoading] = useState(!!editId)\n const [contactName, setContactName] = useState('')\n const [contactId, setContactId] = useState<string | undefined>()\n const [unitId, setUnitId] = useState(locations[0]?.id ?? '')\n const [invoiceDate, setInvoiceDate] = useState(new Date().toISOString().slice(0, 10))\n const [fiscalNumber, setFiscalNumber] = useState('')\n const [observations, setObservations] = useState('')\n const [items, setItems] = useState<FormItem[]>([])\n const [expandedItemId, setExpandedItemId] = useState<string | null>(null)\n const [addingItem, setAddingItem] = useState(false)\n const [installments, setInstallments] = useState<FormInstallment[]>([])\n const [saving, setSaving] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const [confirmCancel, setConfirmCancel] = useState(false)\n const [cancelling, setCancelling] = useState(false)\n const menuRef = useRef<HTMLDivElement>(null)\n const cancelInvoice = useFinancialStore((s) => s.cancelInvoice)\n\n // Close menu on click outside\n useEffect(() => {\n if (!menuOpen) return\n function handleClick(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) setMenuOpen(false)\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [menuOpen])\n\n async function handleCancelInvoice() {\n if (!editId) return\n setCancelling(true)\n try {\n await cancelInvoice(editId)\n onSaved?.()\n } catch {\n // toast handled by store\n } finally {\n setCancelling(false)\n }\n }\n\n // Load existing invoice for edit mode\n useEffect(() => {\n if (!editId || loaded) return\n setLoading(true)\n ;(async () => {\n const invoice = await provider.getInvoiceById(editId)\n if (!invoice) return\n setContactName(invoice.contactName ?? '')\n setContactId(invoice.contactId)\n setUnitId(invoice.unitId ?? locations[0]?.id ?? '')\n setInvoiceDate(invoice.invoiceDate)\n setFiscalNumber(invoice.fiscalNumber ?? '')\n setObservations(invoice.observations ?? '')\n\n const invoiceItems = await provider.getInvoiceItems(editId)\n setItems(invoiceItems.map((it) => ({\n _id: fid(),\n itemKind: it.itemKind,\n referenceId: it.referenceId,\n description: it.description,\n quantity: it.quantity,\n unitPrice: it.unitPrice,\n discount: it.discount,\n surcharge: it.surcharge,\n })))\n\n const movements = await provider.getMovements({ direction: invoice.direction })\n const invoiceMovements = movements.data\n .filter((m) => m.invoiceId === editId && m.movementKind === 'bill')\n .sort((a, b) => (a.installmentNumber ?? 0) - (b.installmentNumber ?? 0))\n setInstallments(invoiceMovements.map((m) => ({\n _id: fid(),\n amount: m.amount,\n dueDate: m.dueDate,\n })))\n\n setLoaded(true)\n setLoading(false)\n })()\n }, [editId])\n\n const totalAmount = items.reduce((sum, it) => {\n return sum + it.quantity * it.unitPrice - (it.discount ?? 0) + (it.surcharge ?? 0)\n }, 0)\n\n // Auto-generate 1x installment when first item is added\n const prevItemCount = useRef(items.length)\n useEffect(() => {\n if (items.length > 0 && prevItemCount.current === 0 && installments.length === 0 && !isEdit) {\n // First item added — generate 1x installment\n const total = items.reduce((sum, it) => sum + it.quantity * it.unitPrice - (it.discount ?? 0) + (it.surcharge ?? 0), 0)\n if (total > 0) {\n setInstallments([{ _id: fid(), amount: total, dueDate: invoiceDate }])\n }\n }\n prevItemCount.current = items.length\n }, [items.length])\n\n // Recalculate installment amounts when total changes\n useEffect(() => {\n if (installments.length > 0 && totalAmount > 0 && !isEdit) {\n const count = installments.length\n const perInstallment = Math.floor(totalAmount * 100 / count) / 100\n const remainder = Math.round((totalAmount - perInstallment * count) * 100) / 100\n setInstallments((prev) => prev.map((inst, i) => ({\n ...inst,\n amount: i === 0 ? perInstallment + remainder : perInstallment,\n })))\n }\n }, [totalAmount])\n\n function addItemOfKind(kind: string) {\n const newItem: FormItem = {\n _id: fid(),\n itemKind: kind,\n description: '',\n quantity: 1,\n unitPrice: 0,\n }\n setItems([...items, newItem])\n setExpandedItemId(newItem._id)\n setAddingItem(false)\n }\n\n function updateItem(id: string, data: Partial<FormItem>) {\n setItems(items.map((it) => it._id === id ? { ...it, ...data } : it))\n }\n\n function removeItem(id: string) {\n setItems(items.filter((it) => it._id !== id))\n }\n\n function generateInstallments(count: number) {\n if (count < 1 || totalAmount <= 0) return\n const perInstallment = Math.floor(totalAmount * 100 / count) / 100\n const remainder = Math.round((totalAmount - perInstallment * count) * 100) / 100\n const base = new Date(invoiceDate)\n const inst: FormInstallment[] = []\n for (let i = 0; i < count; i++) {\n const due = new Date(base)\n due.setMonth(due.getMonth() + i + 1)\n inst.push({\n _id: fid(),\n amount: i === 0 ? perInstallment + remainder : perInstallment,\n dueDate: due.toISOString().slice(0, 10),\n })\n }\n setInstallments(inst)\n }\n\n async function handleSave() {\n if (items.length === 0) { toast.error(t('common.formIncomplete')); return }\n setSaving(true)\n try {\n const movInputs: CreateMovementInput[] = installments.map((inst, i) => ({\n direction,\n movementKind: 'bill' as const,\n amount: inst.amount,\n dueDate: inst.dueDate,\n installmentNumber: i + 1,\n }))\n\n if (movInputs.length === 0) {\n movInputs.push({\n direction,\n movementKind: 'bill',\n amount: totalAmount,\n dueDate: invoiceDate,\n installmentNumber: 1,\n })\n }\n\n if (isEdit && editId) {\n await provider.updateInvoice(editId, {\n invoiceDate,\n contactId,\n contactName: contactName || undefined,\n unitId: unitId || undefined,\n fiscalNumber: fiscalNumber || undefined,\n observations: observations || undefined,\n totalAmount,\n })\n onSaved?.(editId)\n } else {\n const invoice = await createInvoice({\n direction,\n invoiceDate,\n contactId,\n contactName: contactName || undefined,\n unitId: unitId || undefined,\n fiscalNumber: fiscalNumber || undefined,\n observations: observations || undefined,\n items: items.map(({ _id, ...rest }) => rest),\n installments: movInputs,\n })\n onSaved?.(invoice.id)\n }\n } finally {\n setSaving(false)\n }\n }\n\n const fields = {\n contactName,\n contactId,\n unitId,\n invoiceDate,\n fiscalNumber,\n observations,\n items: items.map(({ _id, ...rest }) => rest),\n installments: installments.map(({ _id, ...rest }) => rest),\n }\n const snapshot = useRef<string | null>(null)\n useEffect(() => {\n if (loaded && snapshot.current === null) snapshot.current = JSON.stringify(fields)\n }, [loaded])\n const dirty = snapshot.current !== null && JSON.stringify(fields) !== snapshot.current\n useSaveBar({\n dirty,\n saving,\n onSave: () => { void handleSave() },\n onDiscard: () => onSaved?.(),\n saveLabel: t('financial.invoiceForm.save'),\n })\n\n const title = direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')\n const subtitle = isEdit ? t('financial.invoiceForm.editing') : t('financial.invoiceForm.creating')\n\n return (\n <div className=\"space-y-6\">\n <SubpageHeader\n title={title}\n subtitle={subtitle}\n onBack={onSaved}\n parentLabel={direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables')}\n actions={\n isEdit ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"relative\" ref={menuRef}>\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setMenuOpen(!menuOpen)}\n aria-label=\"More actions\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {menuOpen && (\n <div className=\"fayz-glass-surface absolute right-0 top-full mt-1 w-44 rounded-lg border bg-popover shadow-md z-20 py-1\" style={{ animation: 'field-slide-in 150ms ease-out' }}>\n <button\n onClick={() => { setConfirmCancel(true); setMenuOpen(false) }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-xs text-destructive hover:bg-destructive/10 transition-colors\"\n >\n <Ban className=\"h-3.5 w-3.5\" /> {t('financial.invoiceForm.cancelInvoice')}\n </button>\n </div>\n )}\n </div>\n </div>\n ) : null\n }\n />\n\n {/* Top fields: Pay to + Unit + Date + Fiscal Number */}\n <div className=\"rounded-lg border bg-card shadow-sm p-5\">\n <div className={`grid gap-4 ${hasLocations ? 'sm:grid-cols-12' : 'sm:grid-cols-10'}`}>\n <div className={hasLocations ? 'sm:col-span-4' : 'sm:col-span-4'}>\n <SearchSelect\n label={direction === 'debit' ? t('financial.invoiceForm.payTo') : t('financial.invoiceForm.receiveFrom')}\n required\n value={contactId ?? ''}\n displayValue={contactName}\n onChange={(id, opt) => { setContactId(id || undefined); setContactName(opt?.label ?? '') }}\n onSearch={async (q) => {\n if (!config.contactLookup) return []\n const results = await config.contactLookup.search(q)\n return results.map((r) => ({ id: r.id, label: r.label, subtitle: r.subtitle, group: r.group, data: r }))\n }}\n placeholder={t('financial.invoiceForm.searchType')}\n />\n </div>\n {hasLocations && (\n <div className=\"sm:col-span-3\">\n <LocationSelector\n locations={locations}\n value={unitId}\n onChange={setUnitId}\n />\n </div>\n )}\n <div className={hasLocations ? 'sm:col-span-2' : 'sm:col-span-3'}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.date')}</label>\n <DatePicker value={invoiceDate} onChange={setInvoiceDate} className=\"mt-1\" />\n </div>\n <div className={hasLocations ? 'sm:col-span-3' : 'sm:col-span-3'}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.fiscalNumber')}</label>\n <input\n type=\"text\"\n value={fiscalNumber}\n onChange={(e) => setFiscalNumber(e.target.value)}\n placeholder={t('financial.invoiceForm.fiscalNumber')}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n </div>\n </div>\n\n {/* Items + Installments side by side */}\n {loading ? (\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 rounded-lg border bg-card shadow-sm overflow-hidden\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <LayoutList className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.items')}</h3>\n </div>\n </div>\n <div className=\"p-4 space-y-3\">\n {[1, 2].map((i) => (\n <div key={i} className=\"flex items-center gap-3 px-2 py-3\">\n <div className=\"h-4 w-4 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-8 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 flex-1 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-20 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"px-5 py-3 border-b\">\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.installments')}</h3>\n </div>\n <div className=\"p-4 space-y-3\">\n {[1, 2].map((i) => (\n <div key={i} className=\"rounded border p-2.5 space-y-2\">\n <div className=\"flex justify-between\">\n <div className=\"h-3 w-6 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n </div>\n <div className=\"h-7 rounded bg-muted animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n ) : (\n <div className=\"grid gap-4 lg:grid-cols-3\">\n {/* Items (left 2/3) */}\n <div className=\"lg:col-span-2 rounded-lg border bg-card shadow-sm overflow-hidden flex flex-col\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <LayoutList className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.items')}</h3>\n </div>\n <button\n onClick={() => setAddingItem(true)}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors\"\n >\n <Plus className=\"h-3 w-3\" /> {t('financial.invoiceForm.addItem')}\n </button>\n </div>\n\n {/* Content area — grows to push footer down */}\n <div className=\"flex-1\">\n {/* Type selector step */}\n {addingItem && (\n <AddItemStep\n itemTypes={itemTypes}\n onSelect={addItemOfKind}\n onCancel={() => setAddingItem(false)}\n />\n )}\n\n {/* Item rows */}\n {items.length === 0 && !addingItem ? (\n <div className=\"py-10 text-center\">\n <LayoutList className=\"h-8 w-8 text-muted-foreground/30 mx-auto mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.invoiceForm.noItems')}</p>\n <button onClick={() => setAddingItem(true)} className=\"text-xs text-primary hover:underline mt-1\">\n {t('financial.invoiceForm.addFirstItem')}\n </button>\n </div>\n ) : (\n items.map((item, i) => (\n <ItemRow\n key={item._id}\n item={item}\n index={i}\n itemTypes={itemTypes}\n currency={currency}\n expanded={expandedItemId === item._id}\n onToggle={() => setExpandedItemId(expandedItemId === item._id ? null : item._id)}\n onUpdate={(data) => updateItem(item._id, data)}\n onRemove={() => { removeItem(item._id); if (expandedItemId === item._id) setExpandedItemId(null) }}\n entityLookups={config.entityLookups}\n />\n ))\n )}\n </div>\n\n {/* Footer total — sticks to bottom */}\n {items.length > 0 && (\n <div className=\"px-4 py-3 border-t bg-muted/20 flex justify-between items-center mt-auto\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.itemCount', { count: items.length, plural: items.length !== 1 ? 's' : '' })}</span>\n <div className=\"text-right\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.total')} </span>\n <span className=\"text-lg font-bold\">{formatCurrency(totalAmount, currency)}</span>\n </div>\n </div>\n )}\n </div>\n\n {/* Installments (right 1/3) */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center justify-between px-5 py-3 border-b\">\n <h3 className=\"text-sm font-semibold\">Installments</h3>\n </div>\n <div className=\"p-4 space-y-3\">\n {/* Quick split buttons */}\n <div className=\"flex gap-1.5 flex-wrap\">\n {[1, 2, 3, 6, 12].map((n) => (\n <button\n key={n}\n onClick={() => generateInstallments(n)}\n disabled={totalAmount <= 0}\n className={`rounded-full px-2.5 py-1 text-[10px] font-medium transition-colors disabled:opacity-30 ${\n installments.length === n\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n >\n {n}x\n </button>\n ))}\n </div>\n\n {installments.length === 0 ? (\n <p className=\"text-xs text-muted-foreground py-4 text-center\">\n {totalAmount <= 0 ? t('financial.invoiceForm.addItemsFirst') : t('financial.invoiceForm.selectInstallments')}\n </p>\n ) : (\n <div className=\"space-y-2\">\n {installments.map((inst, i) => (\n <div key={inst._id} className=\"rounded border p-2.5 space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] font-medium text-muted-foreground\">#{i + 1}</span>\n <span className=\"text-sm font-semibold\">{formatCurrency(inst.amount, currency)}</span>\n </div>\n <DatePicker\n value={inst.dueDate}\n onChange={(v) => {\n const updated = [...installments]\n updated[i] = { ...inst, dueDate: v }\n setInstallments(updated)\n }}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* Observations */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.observations')}</label>\n <textarea\n value={observations}\n onChange={(e) => setObservations(e.target.value)}\n placeholder={t('financial.invoiceForm.additionalNotes')}\n rows={2}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring resize-none\"\n />\n </div>\n\n {/* Cancel confirmation */}\n {confirmCancel && createPortal(\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\" onClick={() => setConfirmCancel(false)}>\n <div className=\"w-full max-w-sm rounded-modal border bg-card shadow-lg mx-4 p-5\" onClick={(e) => e.stopPropagation()} style={{ animation: 'field-slide-in 200ms ease-out' }}>\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-destructive/10 shrink-0\">\n <Ban className=\"h-5 w-5 text-destructive\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.cancelInvoice')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.cancelConfirm')}</p>\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground mb-4\">\n {t('financial.invoiceForm.cancelDesc')}\n </p>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setConfirmCancel(false)}>\n {t('financial.invoiceForm.keepInvoice')}\n </Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={handleCancelInvoice} disabled={cancelling}>\n <Ban className=\"h-3.5 w-3.5\" />\n {cancelling ? t('financial.invoiceForm.cancelling') : t('financial.invoiceForm.yesCancel')}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )}\n\n <style>{`\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n","import React, { useState, useEffect, useMemo } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, Check, Banknote, QrCode, CreditCard, Building2, ArrowRightLeft, FileCheck, Pencil } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport type { FinancialMovement, PaymentMethodType } from '../types'\n\nconst TYPE_ICONS: Record<string, React.ElementType> = {\n cash: Banknote,\n pix: QrCode,\n credit_card: CreditCard,\n debit_card: CreditCard,\n bank_transfer: ArrowRightLeft,\n check: FileCheck,\n}\n\nconst TYPE_COLORS: Record<string, string> = {\n cash: 'border-success/30 bg-success/5 hover:bg-success/10 data-[active=true]:border-success data-[active=true]:bg-success/15',\n pix: 'border-teal-500/30 bg-teal-500/5 hover:bg-teal-500/10 data-[active=true]:border-teal-500 data-[active=true]:bg-teal-500/15',\n credit_card: 'border-info/30 bg-info/5 hover:bg-info/10 data-[active=true]:border-info data-[active=true]:bg-info/15',\n debit_card: 'border-magic/30 bg-magic/5 hover:bg-magic/10 data-[active=true]:border-magic data-[active=true]:bg-magic/15',\n bank_transfer: 'border-warning/30 bg-warning/5 hover:bg-warning/10 data-[active=true]:border-warning data-[active=true]:bg-warning/15',\n check: 'border-border bg-muted/40 hover:bg-muted/60 data-[active=true]:border-foreground data-[active=true]:bg-muted',\n}\n\nconst ICON_COLORS: Record<string, string> = {\n cash: 'text-success',\n pix: 'text-teal-500',\n credit_card: 'text-info',\n debit_card: 'text-magic',\n bank_transfer: 'text-warning',\n check: 'text-muted-foreground',\n}\n\nexport function PaymentModal({ movement, onClose, onPaid }: {\n movement: FinancialMovement\n onClose: () => void\n onPaid: () => void\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const payMovement = useFinancialStore((s) => s.payMovement)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n\n const remaining = movement.amount - movement.paidAmount\n const [amount, setAmount] = useState(remaining)\n const [paymentDate, setPaymentDate] = useState(new Date().toISOString().slice(0, 10))\n const [selectedTypeId, setSelectedTypeId] = useState('')\n const [paymentMethodId, setPaymentMethodId] = useState('')\n const [bankAccountId, setBankAccountId] = useState('')\n const [cardBrand, setCardBrand] = useState('')\n const [cardInstallments, setCardInstallments] = useState(1)\n const [notes, setNotes] = useState('')\n const [saving, setSaving] = useState(false)\n const [visible, setVisible] = useState(false)\n const [expandMethodPicker, setExpandMethodPicker] = useState(true)\n\n useEffect(() => {\n fetchBankAccounts()\n fetchPaymentMethods()\n requestAnimationFrame(() => setVisible(true))\n }, [])\n\n const selectedType = useMemo(() =>\n paymentMethodTypes.find((tp) => tp.id === selectedTypeId),\n [paymentMethodTypes, selectedTypeId]\n )\n\n const txType = selectedType?.transactionType ?? ''\n\n const filteredMethods = useMemo(() =>\n paymentMethods.filter((m) => m.paymentMethodTypeId === selectedTypeId),\n [paymentMethods, selectedTypeId]\n )\n\n const needsBankAccount = txType === 'bank_transfer' || txType === 'pix' || txType === 'check'\n const needsCard = txType === 'credit_card' || txType === 'debit_card'\n const needsCardInstallments = txType === 'credit_card'\n\n function handleSelectType(typeId: string) {\n setSelectedTypeId(typeId)\n setExpandMethodPicker(false)\n setPaymentMethodId('')\n setBankAccountId('')\n setCardBrand('')\n setCardInstallments(1)\n }\n\n function handleClose() {\n setVisible(false)\n setTimeout(onClose, 200)\n }\n\n async function handlePay() {\n if (amount <= 0 || !selectedTypeId) return\n setSaving(true)\n try {\n await payMovement({\n movementId: movement.id,\n amount,\n paymentDate,\n paymentMethodId: paymentMethodId || undefined,\n paymentMethodTypeId: selectedTypeId || undefined,\n bankAccountId: bankAccountId || undefined,\n cardBrand: needsCard ? cardBrand || undefined : undefined,\n cardInstallments: needsCardInstallments ? cardInstallments : undefined,\n })\n setVisible(false)\n setTimeout(onPaid, 200)\n } catch {\n // toast handled by store\n } finally {\n setSaving(false)\n }\n }\n\n const SelectedIcon = selectedType ? (TYPE_ICONS[txType] ?? Banknote) : null\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center transition-colors duration-200\"\n style={{ backgroundColor: visible ? 'rgba(0,0,0,0.5)' : 'rgba(0,0,0,0)' }}\n onClick={handleClose}\n >\n <div\n className=\"w-full max-w-md rounded-modal border bg-card shadow-lg mx-4 transition-all duration-200 max-h-[90vh] overflow-y-auto\"\n style={{\n opacity: visible ? 1 : 0,\n transform: visible ? 'scale(1) translateY(0)' : 'scale(0.95) translateY(8px)',\n }}\n onClick={(e) => e.stopPropagation()}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b sticky top-0 bg-card z-10\">\n <div>\n <h3 className=\"text-base font-semibold\">{t('financial.payment.title')}</h3>\n <p className=\"text-xs text-muted-foreground\">\n {t('financial.payment.installment', { number: String(movement.installmentNumber ?? 1) })} &middot; {t('financial.payment.remaining', { amount: formatCurrency(remaining, currency) })}\n </p>\n </div>\n <button onClick={handleClose} className=\"p-1 text-muted-foreground hover:text-foreground transition-colors\">\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"px-5 py-4 space-y-4\">\n {/* Payment method type selector */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.method')}</label>\n\n {/* Collapsed: show selected as inline chip */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: selectedTypeId && !expandMethodPicker ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {selectedType && (\n <button\n onClick={() => setExpandMethodPicker(true)}\n className={`flex items-center gap-2 mt-1.5 w-full rounded-lg border px-3 py-2.5 text-left transition-colors hover:bg-muted/30 ${TYPE_COLORS[txType] ?? ''}`}\n data-active=\"true\"\n >\n {SelectedIcon && <SelectedIcon className={`h-4 w-4 ${ICON_COLORS[txType] ?? ''}`} />}\n <span className=\"text-sm font-medium flex-1\">{selectedType?.name}</span>\n <Pencil className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Expanded: full grid */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: expandMethodPicker ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {paymentMethodTypes.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-input bg-muted/30 px-3 py-3 text-center mt-1.5\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.payment.noMethods')}</p>\n <a href=\"#/financial/settings\" className=\"mt-1.5 inline-block text-xs font-medium text-primary hover:underline\">\n {t('financial.payment.configureMethods')} →\n </a>\n </div>\n ) : (\n <div className=\"grid grid-cols-3 gap-2 mt-1.5\">\n {paymentMethodTypes.map((type) => {\n const tt = type.transactionType ?? ''\n const Icon = TYPE_ICONS[tt] ?? Banknote\n const isActive = selectedTypeId === type.id\n return (\n <button\n key={type.id}\n data-active={isActive}\n onClick={() => handleSelectType(type.id)}\n className={`flex flex-col items-center gap-1.5 rounded-lg border px-2 py-3 text-center transition-all ${TYPE_COLORS[tt] ?? TYPE_COLORS.cash}`}\n >\n <Icon className={`h-5 w-5 ${isActive ? ICON_COLORS[tt] ?? '' : 'text-muted-foreground'}`} />\n <span className={`text-[11px] font-medium leading-tight ${isActive ? 'text-foreground' : 'text-muted-foreground'}`}>{type.name}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Form fields — only after method selected */}\n {selectedTypeId && (\n <div key={selectedTypeId} className=\"space-y-4\">\n {/* Amount + Date side by side */}\n <div className=\"grid grid-cols-2 gap-3 stagger-field\" style={{ animationDelay: '0ms' }}>\n <CurrencyInput\n label={t('financial.payment.amount')}\n value={amount}\n onChange={setAmount}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.date')}</label>\n <DatePicker value={paymentDate} onChange={setPaymentDate} className=\"mt-1\" />\n </div>\n </div>\n\n {/* Specific payment method */}\n {filteredMethods.length > 0 && (\n <div className=\"stagger-field\" style={{ animationDelay: '50ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {needsCard ? t('financial.payment.card') : t('financial.payment.account')}\n </label>\n <select value={paymentMethodId} onChange={(e) => setPaymentMethodId(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.select')}</option>\n {filteredMethods.map((m) => <option key={m.id} value={m.id}>{m.name}</option>)}\n </select>\n </div>\n )}\n\n {/* Card fields side by side */}\n {needsCard && (\n <div className={`grid gap-3 stagger-field ${needsCardInstallments ? 'grid-cols-2' : 'grid-cols-1'}`} style={{ animationDelay: '100ms' }}>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.cardBrand')}</label>\n <select value={cardBrand} onChange={(e) => setCardBrand(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.selectBrand')}</option>\n {['Visa', 'Mastercard', 'American Express', 'Elo', 'Hipercard', 'Diners Club'].map((b) => (\n <option key={b} value={b}>{b}</option>\n ))}\n </select>\n </div>\n {needsCardInstallments && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.cardInstallments')}</label>\n <select value={cardInstallments} onChange={(e) => setCardInstallments(Number(e.target.value))} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n {Array.from({ length: 12 }, (_, i) => i + 1).map((n) => (\n <option key={n} value={n}>{n}x {n > 1 ? formatCurrency(amount / n, currency) : ''}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n )}\n\n {/* Bank account */}\n {needsBankAccount && bankAccounts.length > 0 && (\n <div className=\"stagger-field\" style={{ animationDelay: '100ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.bankAccount')}</label>\n <select value={bankAccountId} onChange={(e) => setBankAccountId(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.selectAccount')}</option>\n {bankAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n </div>\n )}\n\n {/* Notes */}\n <div className=\"stagger-field\" style={{ animationDelay: '150ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.notes')}</label>\n <input type=\"text\" value={notes} onChange={(e) => setNotes(e.target.value)} placeholder={t('financial.payment.optionalNotes')} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\" />\n </div>\n </div>\n )}\n </div>\n\n {/* Keyframe for staggered field entrance */}\n <style>{`\n .stagger-field {\n animation: field-slide-in 250ms ease-out both;\n }\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 px-5 py-4 border-t sticky bottom-0 bg-card\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleClose}>\n {t('financial.payment.cancel')}\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handlePay}\n disabled={amount <= 0 || !selectedTypeId || saving}\n >\n <Check className=\"h-3.5 w-3.5\" />\n {saving ? t('financial.payment.processing') : t('financial.payment.payAmount', { amount: formatCurrency(amount, currency) })}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )\n}\n","import React, { useEffect, useState, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Pencil, DollarSign, FileText, Calendar, Hash, User, X, MoreVertical, Ban, ChevronDown, CreditCard, Banknote, Building2, CircleDashed, CircleEllipsis, CircleCheckBig, CircleAlert, CalendarDays, ExternalLink } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { PersonLink } from '@fayz-ai/saas'\nimport { useFinancialConfig, useFinancialStore, useFinancialProvider, formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport { SubpageHeader, DataTable } from '@fayz-ai/ui'\nimport { PaymentModal } from '../components/PaymentModal'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Button } from '@fayz-ai/ui'\nimport type { Invoice, InvoiceItem, FinancialMovement, TransactionDirection } from '../types'\n\nconst STATUS_COLORS: Record<string, { bg: string; icon: React.ElementType; labelKey: string }> = {\n open: { bg: 'bg-info-soft text-info-soft-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusOpen' },\n pending: { bg: 'bg-warning-soft text-warning-soft-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusPending' },\n partial: { bg: 'bg-warning-soft text-warning-soft-foreground', icon: CircleEllipsis, labelKey: 'financial.invoice.statusPartial' },\n paid: { bg: 'bg-success-soft text-success-soft-foreground', icon: CircleCheckBig, labelKey: 'financial.invoice.statusPaid' },\n overdue: { bg: 'bg-destructive-soft text-destructive-soft-foreground', icon: CircleAlert, labelKey: 'financial.invoice.statusOverdue' },\n draft: { bg: 'bg-muted text-muted-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusDraft' },\n cancelled: { bg: 'bg-muted text-muted-foreground', icon: Ban, labelKey: 'financial.invoice.statusCancelled' },\n}\n\nexport function InvoiceDetailView({ invoiceId, direction, onBack, onEdit }: {\n invoiceId: string\n direction: TransactionDirection\n onBack: () => void\n onEdit: () => void\n}) {\n const t = useTranslation()\n const config = useFinancialConfig()\n const { currency } = config\n const provider = useFinancialProvider()\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const [detailsLoaded, setDetailsLoaded] = useState(false)\n const [detailsLoading, setDetailsLoading] = useState(false)\n\n const [invoice, setInvoice] = useState<Invoice | null>(null)\n const [items, setItems] = useState<InvoiceItem[]>([])\n const [movements, setMovements] = useState<FinancialMovement[]>([])\n const [loading, setLoading] = useState(true)\n const [payingMovement, setPayingMovement] = useState<FinancialMovement | null>(null)\n const [expandedMovId, setExpandedMovId] = useState<string | null>(null)\n const [menuOpen, setMenuOpen] = useState(false)\n const [confirmCancel, setConfirmCancel] = useState(false)\n const [cancelling, setCancelling] = useState(false)\n const menuRef = useRef<HTMLDivElement>(null)\n const cancelInvoice = useFinancialStore((s) => s.cancelInvoice)\n\n async function loadData() {\n setLoading(true)\n const [inv, invItems, movResult] = await Promise.all([\n provider.getInvoiceById(invoiceId),\n provider.getInvoiceItems(invoiceId),\n provider.getMovements({ direction }),\n ])\n setInvoice(inv)\n setItems(invItems)\n setMovements(\n movResult.data\n .filter((m) => m.invoiceId === invoiceId && m.movementKind === 'bill')\n .sort((a, b) => (a.installmentNumber ?? 0) - (b.installmentNumber ?? 0))\n )\n setLoading(false)\n }\n\n useEffect(() => { loadData() }, [invoiceId])\n\n // Close menu on click outside\n useEffect(() => {\n if (!menuOpen) return\n function handleClick(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) setMenuOpen(false)\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [menuOpen])\n\n async function loadPaymentDetails() {\n if (detailsLoaded || detailsLoading) return\n setDetailsLoading(true)\n await Promise.all([fetchPaymentMethods(), fetchBankAccounts()])\n setDetailsLoaded(true)\n setDetailsLoading(false)\n }\n\n function handleExpandMov(movId: string) {\n const opening = expandedMovId !== movId\n setExpandedMovId(opening ? movId : null)\n if (opening) loadPaymentDetails()\n }\n\n async function handleCancel() {\n setCancelling(true)\n try {\n await cancelInvoice(invoiceId)\n await loadData()\n setConfirmCancel(false)\n setMenuOpen(false)\n } catch {\n // toast handled by store\n } finally {\n setCancelling(false)\n }\n }\n\n if (loading) {\n return (\n <div className=\"space-y-5\">\n <SubpageHeader title=\"\" onBack={onBack} parentLabel={direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables')} />\n\n {/* Invoice card skeleton */}\n <div className=\"rounded-xl border bg-card shadow-sm overflow-hidden\">\n <div className=\"h-1 bg-muted animate-pulse\" />\n <div className=\"p-5 pb-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n <div className=\"h-10 w-10 rounded-lg bg-muted/40 animate-pulse\" />\n <div className=\"space-y-2\">\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-6 w-32 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n <div className=\"h-6 w-20 rounded-full bg-muted/40 animate-pulse\" />\n </div>\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3 mt-4 pt-4 border-t\">\n {[1, 2, 3, 4].map((i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted/30 animate-pulse\" />\n <div className=\"space-y-1\">\n <div className=\"h-2 w-10 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-16 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Items table skeleton */}\n <div className=\"px-5 pt-3 pb-1.5\">\n <div className=\"h-3 w-12 rounded bg-muted/30 animate-pulse\" />\n </div>\n <div className=\"px-5\">\n <div className=\"border-b py-2 flex justify-between\">\n <div className=\"h-2 w-24 rounded bg-muted/20 animate-pulse\" />\n <div className=\"h-2 w-16 rounded bg-muted/20 animate-pulse\" />\n </div>\n {[1, 2].map((i) => (\n <div key={i} className=\"flex items-center justify-between py-2.5 border-b last:border-0\">\n <div className=\"flex items-center gap-2\">\n <div className=\"h-3 w-4 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-5 w-14 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-28 rounded bg-muted/40 animate-pulse\" />\n </div>\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n </div>\n ))}\n </div>\n <div className=\"px-5 py-3 border-t bg-muted/10 flex justify-end\">\n <div className=\"h-4 w-32 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n\n {/* Installments skeleton */}\n <div className=\"space-y-2\">\n <div className=\"h-4 w-28 rounded bg-muted/30 animate-pulse\" />\n <div className=\"rounded-lg border bg-card shadow-sm divide-y\">\n {[1].map((i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3\">\n <div className=\"h-3 w-5 rounded bg-muted/30 animate-pulse\" />\n <div className=\"flex-1 space-y-1.5\">\n <div className=\"h-4 w-24 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-2 w-32 rounded bg-muted/30 animate-pulse\" />\n </div>\n <div className=\"h-7 w-16 rounded-lg bg-muted/30 animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n }\n\n if (!invoice) {\n return (\n <div className=\"space-y-6\">\n <SubpageHeader title={t('financial.invoice.notFound')} onBack={onBack} parentLabel={direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables')} />\n <p className=\"text-sm text-muted-foreground\">{t('financial.invoice.notFoundDesc')}</p>\n </div>\n )\n }\n\n const statusConfig = STATUS_COLORS[invoice.status] ?? STATUS_COLORS.pending\n const StatusIcon = statusConfig.icon\n const totalPaid = movements.reduce((sum, m) => sum + m.paidAmount, 0)\n const totalRemaining = invoice.totalAmount - totalPaid\n const subtotal = items.reduce((sum, it) => sum + it.quantity * it.unitPrice, 0)\n const totalDiscount = items.reduce((sum, it) => sum + it.discount, 0)\n const totalSurcharge = items.reduce((sum, it) => sum + it.surcharge, 0)\n\n const itemColumns: ColumnDef<InvoiceItem, any>[] = [\n {\n id: 'index', header: t('financial.invoice.columnNumber'),\n cell: ({ row }) => <span className=\"text-xs text-muted-foreground\">{row.index + 1}</span>,\n },\n {\n accessorKey: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"inline-flex items-center rounded px-1.5 py-0.5 text-[9px] font-medium bg-muted text-muted-foreground capitalize\">{row.original.itemKind}</span>\n <span className=\"truncate\">{row.original.description}</span>\n </div>\n ),\n },\n {\n accessorKey: 'quantity', header: () => <span className=\"block text-right\">{t('financial.invoice.columnQty')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right text-xs tabular-nums\">{getValue() as number}</span>,\n },\n {\n accessorKey: 'unitPrice', header: () => <span className=\"block text-right\">{t('financial.invoice.columnUnitPrice')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right text-xs tabular-nums\">{formatCurrency(getValue() as number, currency)}</span>,\n },\n {\n accessorKey: 'totalAmount', header: () => <span className=\"block text-right\">{t('financial.invoice.columnTotal')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right font-medium tabular-nums\">{formatCurrency(getValue() as number, currency)}</span>,\n },\n ]\n\n return (\n <div className=\"space-y-5\">\n <SubpageHeader\n title={invoice.fiscalNumber ? `#${invoice.fiscalNumber}` : invoice.contactName ?? invoice.invoiceDate}\n onBack={onBack}\n parentLabel={direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables')}\n actions={\n <div className=\"flex items-center gap-1.5\">\n {invoice.status !== 'cancelled' && invoice.status !== 'paid' && (\n <Button variant=\"outline\" size=\"sm\" onClick={onEdit}>\n <Pencil className=\"h-3.5 w-3.5\" /> {t('financial.invoice.edit')}\n </Button>\n )}\n {invoice.status !== 'cancelled' && invoice.status !== 'paid' && (\n <div className=\"relative\" ref={menuRef}>\n <Button variant=\"outline\" size=\"icon\" onClick={() => setMenuOpen(!menuOpen)} aria-label=\"More actions\">\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {menuOpen && (\n <div className=\"fayz-glass-surface absolute right-0 top-full mt-1 w-44 rounded-lg border bg-popover shadow-md z-20 py-1\" style={{ animation: 'field-slide-in 150ms ease-out' }}>\n <button\n onClick={() => { setConfirmCancel(true); setMenuOpen(false) }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-xs text-destructive hover:bg-destructive/10 transition-colors\"\n >\n <Ban className=\"h-3.5 w-3.5\" /> {t('financial.invoice.cancelInvoice')}\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n }\n />\n\n {/* Invoice document */}\n <div className=\"rounded-xl border bg-card shadow-sm overflow-hidden\">\n {/* Top accent stripe */}\n <div className=\"h-1 bg-primary\" />\n\n {/* Invoice header */}\n <div className=\"p-5 pb-4\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 shrink-0\">\n <FileText className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <p className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n {direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')}\n </p>\n <p className={`text-xl font-bold mt-0.5 ${invoice.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>{formatCurrency(invoice.totalAmount, currency)}</p>\n </div>\n </div>\n <span className={`inline-flex items-center gap-1 rounded-full px-2.5 py-1 text-[11px] font-semibold capitalize ${statusConfig.bg}`}>\n <StatusIcon className=\"h-3 w-3\" /> {t(statusConfig.labelKey)}\n </span>\n </div>\n\n {/* Meta grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3 mt-4 pt-4 border-t\">\n <div className=\"flex items-center gap-2\">\n <User className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.contact')}</p>\n {invoice.contactName ? (\n <PersonLink personId={invoice.contactId} name={invoice.contactName} size=\"sm\" />\n ) : (\n <p className=\"text-xs font-medium truncate\">—</p>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.date')}</p>\n <p className=\"text-xs font-medium\">{invoice.invoiceDate}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Hash className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.installments')}</p>\n <p className=\"text-xs font-medium\">{invoice.totalInstallments}x</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <DollarSign className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.columnPaid')}</p>\n <p className=\"text-xs font-medium\">{formatCurrency(totalPaid, currency)}</p>\n </div>\n </div>\n </div>\n\n {/* Booking link — shows when this order has a scheduled time */}\n {invoice.bookingStartsAt && (\n <div className=\"flex items-center gap-2 mt-3 pt-3 border-t\">\n <CalendarDays className=\"h-3.5 w-3.5 text-magic shrink-0\" />\n <div className=\"flex items-center gap-2 min-w-0\">\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.booking')}</p>\n <button\n type=\"button\"\n onClick={() => config.onBookingClick?.(invoice.id)}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-magic hover:underline\"\n >\n {new Date(invoice.bookingStartsAt).toLocaleDateString(undefined, { weekday: 'short', day: '2-digit', month: 'short' })}\n {' '}\n {new Date(invoice.bookingStartsAt).toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })}\n <ExternalLink className=\"h-2.5 w-2.5\" />\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Items table */}\n {items.length > 0 && (\n <>\n <div className=\"px-5 pt-3 pb-1.5\">\n <h3 className=\"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider\">{t('financial.invoice.items')}</h3>\n </div>\n <div className=\"px-5\">\n <DataTable columns={itemColumns} data={items} variant=\"flat\" compact />\n </div>\n\n {/* Totals */}\n <div className=\"px-5 py-3 mt-1 border-t bg-muted/10\">\n <div className=\"flex flex-col items-end gap-0.5\">\n {(totalDiscount > 0 || totalSurcharge > 0) && (\n <div className=\"flex items-center gap-6 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.subtotal')}</span>\n <span className=\"tabular-nums w-24 text-right\">{formatCurrency(subtotal, currency)}</span>\n </div>\n )}\n {totalDiscount > 0 && (\n <div className=\"flex items-center gap-6 text-xs text-success\">\n <span>{t('financial.invoice.discount')}</span>\n <span className=\"tabular-nums w-24 text-right\">-{formatCurrency(totalDiscount, currency)}</span>\n </div>\n )}\n {totalSurcharge > 0 && (\n <div className=\"flex items-center gap-6 text-xs text-warning\">\n <span>{t('financial.invoice.surcharge')}</span>\n <span className=\"tabular-nums w-24 text-right\">+{formatCurrency(totalSurcharge, currency)}</span>\n </div>\n )}\n <div className=\"flex items-center gap-6 text-sm font-bold pt-1\">\n <span>{t('financial.invoice.total')}</span>\n <span className={`tabular-nums w-24 text-right ${invoice.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>{formatCurrency(invoice.totalAmount, currency)}</span>\n </div>\n </div>\n </div>\n </>\n )}\n\n {/* Observations inside invoice */}\n {invoice.observations && (\n <div className=\"px-5 py-3 border-t\">\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase tracking-wider mb-1\">{t('financial.invoice.notes')}</p>\n <p className=\"text-xs text-muted-foreground\">{invoice.observations}</p>\n </div>\n )}\n </div>\n\n {/* Installments — outside the invoice card */}\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold text-muted-foreground\">{t('financial.invoice.paymentSchedule')}</h3>\n <div className=\"rounded-lg border bg-card shadow-sm\">\n {movements.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">{t('financial.invoice.noInstallments')}</div>\n ) : (\n <div className=\"divide-y\">\n {movements.map((mov) => {\n const remaining = mov.amount - mov.paidAmount\n const isPaid = mov.status === 'paid'\n const isPartial = mov.status === 'partial'\n const hasPaidDetails = isPaid || isPartial\n const isExpanded = expandedMovId === mov.id\n const movStatus = STATUS_COLORS[mov.status] ?? STATUS_COLORS.pending\n const MovIcon = movStatus.icon\n\n // Resolve names for payment details\n const method = paymentMethods.find((m) => m.id === mov.paymentMethodId)\n const methodType = paymentMethodTypes.find((t) => t.id === (method?.paymentMethodTypeId ?? mov.paymentMethodTypeId))\n const account = bankAccounts.find((a) => a.id === mov.bankAccountId)\n\n return (\n <div key={mov.id}>\n <div\n className={`flex items-center gap-3 px-4 py-3 ${hasPaidDetails ? 'cursor-pointer hover:bg-muted/20 transition-colors' : ''}`}\n onClick={hasPaidDetails ? () => handleExpandMov(mov.id) : undefined}\n >\n <span className=\"text-xs font-medium text-muted-foreground w-6 shrink-0\">#{mov.installmentNumber}</span>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium tabular-nums\">{formatCurrency(mov.amount, currency)}</span>\n <span className={`inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[9px] font-medium capitalize ${movStatus.bg}`}>\n <MovIcon className=\"h-2 w-2\" /> {t(movStatus.labelKey)}\n </span>\n </div>\n <p className=\"text-[10px] text-muted-foreground\">\n {t('financial.invoice.due')} {mov.dueDate}\n {mov.paidAmount > 0 && !isPaid && ` · ${t('financial.invoice.paidLabel')} ${formatCurrency(mov.paidAmount, currency)}`}\n {mov.paymentDate && ` · ${t('financial.invoice.paidOn')} ${mov.paymentDate}`}\n </p>\n </div>\n {!isPaid && !isPartial && invoice.status !== 'cancelled' && (\n <button\n onClick={(e) => { e.stopPropagation(); setPayingMovement(mov) }}\n className=\"inline-flex items-center gap-1 rounded-lg bg-primary border border-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors shrink-0\"\n >\n <DollarSign className=\"h-3 w-3\" />\n {t('financial.invoice.pay')} {remaining < mov.amount ? formatCurrency(remaining, currency) : ''}\n </button>\n )}\n {isPartial && invoice.status !== 'cancelled' && (\n <button\n onClick={(e) => { e.stopPropagation(); setPayingMovement(mov) }}\n className=\"inline-flex items-center gap-1 rounded-lg border px-3 py-1.5 text-xs font-medium hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors shrink-0\"\n >\n <DollarSign className=\"h-3 w-3\" />\n {t('financial.invoice.pay')} {formatCurrency(remaining, currency)}\n </button>\n )}\n {hasPaidDetails && (\n <ChevronDown className={`h-3.5 w-3.5 text-muted-foreground shrink-0 transition-transform duration-200 ${isExpanded ? 'rotate-180' : ''}`} />\n )}\n </div>\n\n {/* Expanded payment details */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: isExpanded ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-4 pb-2.5 pl-14\">\n {detailsLoading ? (\n <div className=\"flex items-center gap-3\">\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-3 w-16 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-24 rounded bg-muted/40 animate-pulse\" />\n </div>\n ) : (\n <div className=\"flex flex-wrap items-center gap-x-1 gap-y-0.5 text-[11px] text-muted-foreground\">\n {methodType && (\n <>\n <span className=\"font-medium text-foreground\">{methodType.name}</span>\n {method && <span>({method.name})</span>}\n </>\n )}\n {mov.cardBrand && (\n <>\n {methodType && <span>&middot;</span>}\n <CreditCard className=\"h-3 w-3 shrink-0\" />\n <span className=\"font-medium text-foreground\">{mov.cardBrand}</span>\n {mov.cardInstallments && <span>{mov.cardInstallments}x</span>}\n </>\n )}\n {account && (\n <>\n {(methodType || mov.cardBrand) && <span>&middot;</span>}\n <Building2 className=\"h-3 w-3 shrink-0\" />\n <span>{account.name}</span>\n </>\n )}\n {mov.paidAmount > 0 && (\n <>\n <span>&middot;</span>\n <span className=\"font-medium text-success\">{formatCurrency(mov.paidAmount, currency)}</span>\n </>\n )}\n {mov.paymentDate && (\n <>\n <span>&middot;</span>\n <span>{mov.paymentDate}</span>\n </>\n )}\n {mov.notes && (\n <>\n <span>&middot;</span>\n <span className=\"italic truncate max-w-[200px]\">{mov.notes}</span>\n </>\n )}\n {!methodType && !mov.cardBrand && !account && !mov.notes && (\n <span>{t('financial.invoice.noDetails')}</span>\n )}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n })}\n </div>\n )}\n </div>\n\n {/* Payment summary bar */}\n {movements.length > 0 && (\n <div className=\"flex items-center justify-between rounded-lg border bg-muted/20 px-4 py-2.5\">\n <div className=\"flex items-center gap-4 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.paidLabel')} <span className=\"font-semibold text-success\">{formatCurrency(totalPaid, currency)}</span></span>\n {totalRemaining > 0 && (\n <span className=\"text-muted-foreground\">{t('financial.invoice.remaining')} <span className=\"font-semibold text-foreground\">{formatCurrency(totalRemaining, currency)}</span></span>\n )}\n </div>\n {totalRemaining <= 0 && (\n <span className=\"inline-flex items-center gap-1 text-xs font-medium text-success\">\n <CircleCheckBig className=\"h-3 w-3\" /> {t('financial.invoice.fullyPaid')}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Payment Modal */}\n {payingMovement && (\n <PaymentModal\n movement={payingMovement}\n onClose={() => setPayingMovement(null)}\n onPaid={() => { setPayingMovement(null); loadData() }}\n />\n )}\n\n {/* Cancel confirmation */}\n {confirmCancel && createPortal(\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\" onClick={() => setConfirmCancel(false)}>\n <div className=\"w-full max-w-sm rounded-modal border bg-card shadow-lg mx-4 p-5\" onClick={(e) => e.stopPropagation()} style={{ animation: 'field-slide-in 200ms ease-out' }}>\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-destructive/10 shrink-0\">\n <Ban className=\"h-5 w-5 text-destructive\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('financial.invoice.cancelInvoice')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('financial.invoice.cancelConfirm')}</p>\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground mb-4\">\n {t('financial.invoice.cancelDesc')}\n </p>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setConfirmCancel(false)}>\n {t('financial.invoice.keepInvoice')}\n </Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={handleCancel} disabled={cancelling}>\n <Ban className=\"h-3.5 w-3.5\" />\n {cancelling ? t('financial.invoice.cancelling') : t('financial.invoice.yesCancel')}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )}\n\n <style>{`\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n","import React from 'react'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport type { ViewIntent } from '../FinancialPage'\n\nexport function PayablesView({ intent, onNavigate }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\n}) {\n if (intent.mode === 'new') {\n return <InvoiceFormView direction=\"debit\" onSaved={(id) => onNavigate(id ? `payables-detail:${id}` : 'payables-list')} />\n }\n\n if (intent.mode === 'edit' && intent.editId) {\n return <InvoiceFormView direction=\"debit\" editId={intent.editId} onSaved={() => onNavigate(`payables-detail:${intent.editId}`)} />\n }\n\n if (intent.mode === 'detail' && intent.editId) {\n return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"debit\"\n onBack={() => onNavigate('payables-list')}\n onEdit={() => onNavigate(`payables-edit:${intent.editId}`)}\n />\n )\n }\n\n return (\n <InvoiceListView\n direction=\"debit\"\n onNew={() => onNavigate('payables-new')}\n onEdit={(id) => onNavigate(`payables-detail:${id}`)}\n />\n )\n}\n","import React from 'react'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport type { ViewIntent } from '../FinancialPage'\n\nexport function ReceivablesView({ intent, onNavigate }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\n}) {\n if (intent.mode === 'new') {\n return <InvoiceFormView direction=\"credit\" onSaved={(id) => onNavigate(id ? `receivables-detail:${id}` : 'receivables-list')} />\n }\n\n if (intent.mode === 'edit' && intent.editId) {\n return <InvoiceFormView direction=\"credit\" editId={intent.editId} onSaved={() => onNavigate(`receivables-detail:${intent.editId}`)} />\n }\n\n if (intent.mode === 'detail' && intent.editId) {\n return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"credit\"\n onBack={() => onNavigate('receivables-list')}\n onEdit={() => onNavigate(`receivables-edit:${intent.editId}`)}\n />\n )\n }\n\n return (\n <InvoiceListView\n direction=\"credit\"\n onNew={() => onNavigate('receivables-new')}\n onEdit={(id) => onNavigate(`receivables-detail:${id}`)}\n />\n )\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { Landmark, Play, Square, Clock, ChevronDown, ChevronUp, Calculator, X, Check, StickyNote } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// Denomination definitions (BRL default — overridden by currency config)\n// ---------------------------------------------------------------------------\n\ninterface Denomination {\n label: string\n value: number\n type: 'bill' | 'coin'\n}\n\nconst BRL_DENOMINATIONS: Denomination[] = [\n { label: 'R$ 200', value: 200, type: 'bill' },\n { label: 'R$ 100', value: 100, type: 'bill' },\n { label: 'R$ 50', value: 50, type: 'bill' },\n { label: 'R$ 20', value: 20, type: 'bill' },\n { label: 'R$ 10', value: 10, type: 'bill' },\n { label: 'R$ 5', value: 5, type: 'bill' },\n { label: 'R$ 2', value: 2, type: 'bill' },\n { label: 'R$ 1', value: 1, type: 'coin' },\n { label: 'R$ 0,50', value: 0.5, type: 'coin' },\n { label: 'R$ 0,25', value: 0.25, type: 'coin' },\n { label: 'R$ 0,10', value: 0.1, type: 'coin' },\n { label: 'R$ 0,05', value: 0.05, type: 'coin' },\n]\n\n// ---------------------------------------------------------------------------\n// Denomination counter sub-component\n// ---------------------------------------------------------------------------\n\nfunction DenominationCounter({\n denominations,\n counts,\n onChange,\n currency,\n}: {\n denominations: Denomination[]\n counts: Record<number, number>\n onChange: (counts: Record<number, number>) => void\n currency: { code: string; locale: string; symbol: string }\n}) {\n const t = useTranslation()\n const bills = denominations.filter((d) => d.type === 'bill')\n const coins = denominations.filter((d) => d.type === 'coin')\n\n function setCount(value: number, count: number) {\n onChange({ ...counts, [value]: Math.max(0, count) })\n }\n\n function renderRow(d: Denomination) {\n const qty = counts[d.value] ?? 0\n const subtotal = qty * d.value\n return (\n <div key={d.value} className=\"flex items-center gap-2 py-1\">\n <span className=\"w-20 text-xs font-medium text-muted-foreground\">{d.label}</span>\n <span className=\"text-muted-foreground text-xs\">×</span>\n <input\n type=\"number\"\n min={0}\n value={qty || ''}\n onChange={(e) => setCount(d.value, parseInt(e.target.value) || 0)}\n placeholder=\"0\"\n className=\"w-16 rounded border bg-background px-2 py-1 text-xs text-center tabular-nums\"\n />\n <span className=\"text-xs text-muted-foreground\">=</span>\n <span className=\"w-24 text-xs text-right tabular-nums font-medium\">\n {formatCurrency(subtotal, currency)}\n </span>\n </div>\n )\n }\n\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {bills.length > 0 && (\n <div>\n <p className=\"text-[10px] font-semibold text-muted-foreground uppercase mb-1\">{t('financial.cash.bills')}</p>\n {bills.map(renderRow)}\n </div>\n )}\n {coins.length > 0 && (\n <div>\n <p className=\"text-[10px] font-semibold text-muted-foreground uppercase mb-1\">{t('financial.cash.coins')}</p>\n {coins.map(renderRow)}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Opening panel (step-based)\n// ---------------------------------------------------------------------------\n\ntype OpenMode = 'quick' | 'count'\n\nfunction CashOpeningPanel({\n cashAccounts,\n currency,\n onOpen,\n}: {\n cashAccounts: { id: string; name: string }[]\n currency: { code: string; locale: string; symbol: string }\n onOpen: (accountId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const [selectedAccountId, setSelectedAccountId] = useState<string>(cashAccounts[0]?.id ?? '')\n const [mode, setMode] = useState<OpenMode>('quick')\n const [quickBalance, setQuickBalance] = useState(0)\n const [counts, setCounts] = useState<Record<number, number>>({})\n const [notes, setNotes] = useState('')\n const [showNotes, setShowNotes] = useState(false)\n const [confirming, setConfirming] = useState(false)\n const [submitting, setSubmitting] = useState(false)\n const t = useTranslation()\n\n const countedTotal = useMemo(() => {\n return BRL_DENOMINATIONS.reduce((sum, d) => sum + (counts[d.value] ?? 0) * d.value, 0)\n }, [counts])\n\n const effectiveBalance = mode === 'count' ? countedTotal : quickBalance\n\n function resetForm() {\n setQuickBalance(0)\n setCounts({})\n setNotes('')\n setShowNotes(false)\n setConfirming(false)\n }\n\n async function handleConfirm() {\n setSubmitting(true)\n try {\n await onOpen(selectedAccountId, effectiveBalance, notes || undefined)\n resetForm()\n } finally {\n setSubmitting(false)\n }\n }\n\n if (cashAccounts.length === 0) {\n return (\n <p className=\"text-sm text-muted-foreground p-4\">\n {t('financial.cash.noAccounts')}\n </p>\n )\n }\n\n // Confirmation step\n if (confirming) {\n return (\n <div className=\"p-4 space-y-4\">\n <div className=\"rounded-lg border border-primary/20 bg-primary/5 p-4 space-y-3\">\n <p className=\"text-sm font-semibold\">{t('financial.cash.confirmOpening')}</p>\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.cash.register')}</span>\n <span className=\"font-medium\">{cashAccounts.find((a) => a.id === selectedAccountId)?.name}</span>\n <span className=\"text-muted-foreground\">{t('financial.cash.openingBalance')}</span>\n <span className=\"font-bold text-base\">{formatCurrency(effectiveBalance, currency)}</span>\n {mode === 'count' && (\n <>\n <span className=\"text-muted-foreground\">{t('financial.cash.method')}</span>\n <span className=\"font-medium\">{t('financial.cash.denominationCount')}</span>\n </>\n )}\n {notes && (\n <>\n <span className=\"text-muted-foreground\">{t('financial.cash.notes')}</span>\n <span className=\"font-medium\">{notes}</span>\n </>\n )}\n </div>\n </div>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setConfirming(false)}\n className=\"inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-xs font-medium hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n <X className=\"h-3 w-3\" /> {t('common.back')}\n </button>\n <button\n onClick={handleConfirm}\n disabled={submitting}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-4 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors disabled:opacity-50\"\n >\n <Check className=\"h-3 w-3\" /> {submitting ? t('financial.cash.opening') : t('financial.cash.confirmAndOpen')}\n </button>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"p-4 space-y-4\">\n {/* Account selector */}\n {cashAccounts.length > 1 && (\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.register')}</label>\n <select\n value={selectedAccountId}\n onChange={(e) => setSelectedAccountId(e.target.value)}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs\"\n >\n {cashAccounts.map((a) => (\n <option key={a.id} value={a.id}>{a.name}</option>\n ))}\n </select>\n </div>\n )}\n\n {/* Mode toggle */}\n <div className=\"flex gap-1 rounded-lg border p-0.5 w-fit\">\n <button\n onClick={() => setMode('quick')}\n className={`px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'quick' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n {t('financial.cash.quickAmount')}\n </button>\n <button\n onClick={() => setMode('count')}\n className={`inline-flex items-center gap-1 px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'count' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n <Calculator className=\"h-3 w-3\" /> {t('financial.cash.countBillsCoins')}\n </button>\n </div>\n\n {/* Quick mode */}\n {mode === 'quick' && (\n <CurrencyInput\n value={quickBalance}\n onChange={setQuickBalance}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n label={t('financial.cash.openingBalance')}\n />\n )}\n\n {/* Count mode */}\n {mode === 'count' && (\n <div className=\"space-y-3\">\n <DenominationCounter\n denominations={BRL_DENOMINATIONS}\n counts={counts}\n onChange={setCounts}\n currency={currency}\n />\n <div className=\"flex items-center justify-between pt-2 border-t\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase\">{t('financial.cash.countedTotal')}</span>\n <span className=\"text-lg font-bold\">{formatCurrency(countedTotal, currency)}</span>\n </div>\n </div>\n )}\n\n {/* Notes toggle */}\n <div>\n {!showNotes ? (\n <button\n onClick={() => setShowNotes(true)}\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n <StickyNote className=\"h-3 w-3\" /> {t('financial.cash.addNotes')}\n </button>\n ) : (\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.notes')}</label>\n <textarea\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n rows={2}\n placeholder={t('financial.cash.openingObservations')}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs resize-none\"\n />\n </div>\n )}\n </div>\n\n {/* Open button */}\n <button\n onClick={() => setConfirming(true)}\n disabled={effectiveBalance <= 0}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-4 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors disabled:opacity-50\"\n >\n <Play className=\"h-3 w-3\" /> {t('financial.cash.openSession')}\n </button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Closing panel (inline within open session card)\n// ---------------------------------------------------------------------------\n\nfunction CashClosingPanel({\n session,\n currency,\n onClose,\n}: {\n session: { id: string; openingBalance: number; bankAccountName?: string }\n currency: { code: string; locale: string; symbol: string }\n onClose: (sessionId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const [mode, setMode] = useState<OpenMode>('quick')\n const [quickBalance, setQuickBalance] = useState(0)\n const [counts, setCounts] = useState<Record<number, number>>({})\n const [notes, setNotes] = useState('')\n const [submitting, setSubmitting] = useState(false)\n const t = useTranslation()\n\n const countedTotal = useMemo(() => {\n return BRL_DENOMINATIONS.reduce((sum, d) => sum + (counts[d.value] ?? 0) * d.value, 0)\n }, [counts])\n\n const effectiveBalance = mode === 'count' ? countedTotal : quickBalance\n const difference = effectiveBalance - session.openingBalance\n\n async function handleClose() {\n setSubmitting(true)\n try {\n await onClose(session.id, effectiveBalance, notes || undefined)\n } finally {\n setSubmitting(false)\n }\n }\n\n return (\n <div className=\"space-y-3 pt-3 border-t\">\n {/* Mode toggle */}\n <div className=\"flex gap-1 rounded-lg border p-0.5 w-fit\">\n <button\n onClick={() => setMode('quick')}\n className={`px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'quick' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n {t('financial.cash.quickAmount')}\n </button>\n <button\n onClick={() => setMode('count')}\n className={`inline-flex items-center gap-1 px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'count' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n <Calculator className=\"h-3 w-3\" /> {t('financial.cash.count')}\n </button>\n </div>\n\n {mode === 'quick' ? (\n <CurrencyInput\n value={quickBalance}\n onChange={setQuickBalance}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n label={t('financial.cash.closingBalance')}\n />\n ) : (\n <div className=\"space-y-3\">\n <DenominationCounter\n denominations={BRL_DENOMINATIONS}\n counts={counts}\n onChange={setCounts}\n currency={currency}\n />\n <div className=\"flex items-center justify-between pt-2 border-t\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase\">{t('financial.cash.countedTotal')}</span>\n <span className=\"text-lg font-bold\">{formatCurrency(countedTotal, currency)}</span>\n </div>\n </div>\n )}\n\n {/* Difference indicator */}\n {effectiveBalance > 0 && (\n <div className=\"flex items-center justify-between rounded-lg bg-muted/50 px-3 py-2\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.cash.differenceFromOpening')}</span>\n <span className={`text-sm font-bold tabular-nums ${\n difference > 0 ? 'text-success' : difference < 0 ? 'text-destructive' : 'text-muted-foreground'\n }`}>\n {difference >= 0 ? '+' : ''}{formatCurrency(difference, currency)}\n </span>\n </div>\n )}\n\n {/* Notes */}\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.closingNotes')}</label>\n <textarea\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n rows={2}\n placeholder={t('financial.cash.closingObservations')}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs resize-none\"\n />\n </div>\n\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={handleClose}\n disabled={submitting || effectiveBalance <= 0}\n >\n <Square className=\"h-3.5 w-3.5\" />\n {submitting ? t('financial.cash.closing') : t('financial.cash.closeSession')}\n </Button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main view\n// ---------------------------------------------------------------------------\n\nexport function CashRegistersView() {\n const t = useTranslation()\n const { currency, labels } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const cashSessions = useFinancialStore((s) => s.cashSessions)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchCashSessions = useFinancialStore((s) => s.fetchCashSessions)\n const openCashSession = useFinancialStore((s) => s.openCashSession)\n const closeCashSession = useFinancialStore((s) => s.closeCashSession)\n\n const [expandedClosing, setExpandedClosing] = useState<string | null>(null)\n\n useEffect(() => {\n fetchBankAccounts()\n fetchCashSessions()\n }, [])\n\n const cashAccounts = bankAccounts.filter((a) => a.accountType === 'cash_register')\n const openSessions = cashSessions.filter((s) => s.status === 'open')\n const closedSessions = cashSessions.filter((s) => s.status === 'closed')\n\n async function handleOpen(accountId: string, balance: number, notes?: string) {\n await openCashSession({ bankAccountId: accountId, openingBalance: balance, notes })\n }\n\n async function handleClose(sessionId: string, balance: number, notes?: string) {\n await closeCashSession({ sessionId, closingBalance: balance, notes })\n setExpandedClosing(null)\n }\n\n return (\n <div className=\"space-y-6\">\n <SubpageHeader title={labels.cashRegisters ?? t('financial.cash.title')} subtitle={t('financial.cash.subtitle')} />\n\n {/* Open sessions */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <Landmark className=\"h-4 w-4 text-info\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.cash.openSessions')}</h3>\n {openSessions.length > 0 && (\n <span className=\"rounded-full bg-info/10 text-info px-2 py-0.5 text-[10px] font-semibold\">\n {openSessions.length}\n </span>\n )}\n </div>\n </div>\n\n {openSessions.length === 0 ? (\n <CashOpeningPanel cashAccounts={cashAccounts} currency={currency} onOpen={handleOpen} />\n ) : (\n <div className=\"divide-y\">\n {openSessions.map((session) => (\n <div key={session.id} className=\"p-4 space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{session.bankAccountName ?? t('financial.cash.title')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('financial.cash.opened')} {new Date(session.openedAt).toLocaleString()}\n {session.openedByName ? ` ${t('financial.cash.by')} ${session.openedByName}` : ''}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-[10px] text-muted-foreground uppercase\">{t('financial.cash.openingBalance')}</p>\n <p className=\"text-lg font-bold tabular-nums\">{formatCurrency(session.openingBalance, currency)}</p>\n </div>\n </div>\n\n {/* Expand/collapse closing controls */}\n {expandedClosing === session.id ? (\n <CashClosingPanel session={session} currency={currency} onClose={handleClose} />\n ) : (\n <button\n onClick={() => setExpandedClosing(session.id)}\n className=\"inline-flex items-center gap-1.5 text-xs text-destructive hover:text-destructive font-medium transition-colors\"\n >\n <ChevronDown className=\"h-3 w-3\" /> {t('financial.cash.closeThisSession')}\n </button>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Quick open — when sessions already exist but user may want another */}\n {openSessions.length > 0 && cashAccounts.length > openSessions.length && (\n <OpenAnotherCollapsible cashAccounts={cashAccounts} openSessions={openSessions} currency={currency} onOpen={handleOpen} />\n )}\n\n {/* Session history */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.cash.sessionHistory')}</h3>\n </div>\n {closedSessions.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">{t('financial.cash.noClosedSessions')}</div>\n ) : (\n <div className=\"divide-y\">\n {closedSessions.map((session) => (\n <div key={session.id} className=\"px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{session.bankAccountName ?? t('financial.cash.title')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {new Date(session.openedAt).toLocaleDateString()} — {session.closedAt ? new Date(session.closedAt).toLocaleDateString() : ''}\n </p>\n {session.openedByName && (\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.cash.by')} {session.openedByName}</p>\n )}\n </div>\n <div className=\"text-right\">\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <span>{t('financial.cash.openLabel')}: {formatCurrency(session.openingBalance, currency)}</span>\n <span>{t('financial.cash.closeLabel')}: {formatCurrency(session.closingBalance ?? 0, currency)}</span>\n </div>\n {session.difference !== undefined && session.difference !== 0 && (\n <p className={`text-xs font-semibold tabular-nums mt-0.5 ${session.difference > 0 ? 'text-success' : 'text-destructive'}`}>\n {t('financial.cash.diff')}: {session.difference >= 0 ? '+' : ''}{formatCurrency(session.difference, currency)}\n </p>\n )}\n {session.notes && (\n <p className=\"text-[10px] text-muted-foreground mt-0.5 max-w-[200px] truncate\" title={session.notes}>\n {session.notes}\n </p>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Collapsible \"Open another register\"\n// ---------------------------------------------------------------------------\n\nfunction OpenAnotherCollapsible({\n cashAccounts,\n openSessions,\n currency,\n onOpen,\n}: {\n cashAccounts: { id: string; name: string }[]\n openSessions: { bankAccountId: string }[]\n currency: { code: string; locale: string; symbol: string }\n onOpen: (accountId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const t = useTranslation()\n const [expanded, setExpanded] = useState(false)\n const availableAccounts = cashAccounts.filter((a) => !openSessions.some((s) => s.bankAccountId === a.id))\n\n if (availableAccounts.length === 0) return null\n\n return (\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"w-full flex items-center justify-between px-4 py-3 text-xs font-medium hover:bg-muted/50 transition-colors\"\n >\n <span className=\"flex items-center gap-2\">\n <Play className=\"h-3 w-3 text-primary\" />\n {t('financial.cash.openAnother')}\n </span>\n {expanded ? <ChevronUp className=\"h-3 w-3\" /> : <ChevronDown className=\"h-3 w-3\" />}\n </button>\n {expanded && <CashOpeningPanel cashAccounts={availableAccounts} currency={currency} onOpen={onOpen} />}\n </div>\n )\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { Receipt } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { StatementEntry } from '../types'\n\nexport function StatementsView() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const statementEntries = useFinancialStore((s) => s.statementEntries)\n const statementLoading = useFinancialStore((s) => s.statementLoading)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchStatement = useFinancialStore((s) => s.fetchStatement)\n\n const [accountId, setAccountId] = useState('')\n const [dateFrom, setDateFrom] = useState(() => {\n const d = new Date(); d.setMonth(d.getMonth() - 1)\n return d.toISOString().slice(0, 10)\n })\n const [dateTo, setDateTo] = useState(() => new Date().toISOString().slice(0, 10))\n\n useEffect(() => { fetchBankAccounts() }, [])\n\n useEffect(() => {\n if (accountId) {\n fetchStatement({ bankAccountId: accountId, dateRange: { from: dateFrom, to: dateTo } })\n }\n }, [accountId, dateFrom, dateTo])\n\n useEffect(() => {\n if (!accountId && bankAccounts.length > 0) setAccountId(bankAccounts[0].id)\n }, [bankAccounts])\n\n const columns: ColumnDef<StatementEntry, any>[] = useMemo(() => [\n {\n id: 'date', header: t('financial.statements.columnDate'),\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-xs\">{row.original.movement.paymentDate ?? row.original.movement.dueDate}</span>\n ),\n },\n {\n id: 'description', header: t('financial.statements.columnDescription'),\n cell: ({ row }) => (\n <div>\n <p className=\"text-xs font-medium\">{row.original.invoice?.contactName || row.original.movement.notes || 'Transaction'}</p>\n <p className=\"text-[10px] text-muted-foreground capitalize\">{row.original.movement.movementKind}</p>\n </div>\n ),\n },\n {\n id: 'debit', header: t('financial.statements.columnDebit'),\n cell: ({ row }) => (\n <span className=\"text-right block text-destructive text-xs\">\n {row.original.movement.direction === 'debit' ? formatCurrency(row.original.movement.paidAmount, currency) : ''}\n </span>\n ),\n },\n {\n id: 'credit', header: t('financial.statements.columnCredit'),\n cell: ({ row }) => (\n <span className=\"text-right block text-success text-xs\">\n {row.original.movement.direction === 'credit' ? formatCurrency(row.original.movement.paidAmount, currency) : ''}\n </span>\n ),\n },\n {\n id: 'balance', header: t('financial.statements.columnBalance'),\n cell: ({ row }) => (\n <span className=\"text-right block font-medium text-xs\">{formatCurrency(row.original.runningBalance, currency)}</span>\n ),\n },\n ], [currency, t])\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={t('financial.statements.title')} subtitle={t('financial.statements.subtitle')} />\n\n {/* Filters */}\n <div className=\"flex flex-col sm:flex-row gap-3 sm:items-end\">\n <div className=\"flex-1 max-w-xs\">\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.account')}</label>\n <select\n value={accountId}\n onChange={(e) => setAccountId(e.target.value)}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\"\n >\n <option value=\"\">{t('financial.statements.selectAccount')}</option>\n {bankAccounts.map((a) => (\n <option key={a.id} value={a.id}>{a.name}</option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.from')}</label>\n <DatePicker value={dateFrom} onChange={setDateFrom} className=\"mt-0.5\" />\n </div>\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.to')}</label>\n <DatePicker value={dateTo} onChange={setDateTo} className=\"mt-0.5\" />\n </div>\n </div>\n\n {/* Statement table */}\n {!accountId ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center rounded-lg border-2 border-dashed border-muted\">\n <Receipt className=\"h-8 w-8 text-muted-foreground mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.statements.selectToView')}</p>\n </div>\n ) : statementLoading ? (\n <DataTable columns={columns} data={[]} loading skeletonRows={5} />\n ) : statementEntries.length === 0 ? (\n <DataTable columns={columns} data={[]} emptyMessage={t('financial.statements.noTransactions')} />\n ) : (\n <DataTable columns={columns} data={statementEntries} />\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { useFinancialConfig } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nexport function CommissionsView() {\n const t = useTranslation()\n const { labels } = useFinancialConfig()\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={labels.commissions} subtitle={t('financial.commissions.subtitle')} />\n <div className=\"flex items-center justify-center rounded-lg border-2 border-dashed border-muted p-12\">\n <p className=\"text-sm text-muted-foreground\">{t('financial.commissions.comingSoon')}</p>\n </div>\n </div>\n )\n}\n","import React, { useEffect } from 'react'\nimport { CreditCard, Check } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nexport function CardsView() {\n const t = useTranslation()\n const { currency, labels } = useFinancialConfig()\n const cardTransactions = useFinancialStore((s) => s.cardTransactions)\n const cardsLoading = useFinancialStore((s) => s.cardsLoading)\n const fetchCardTransactions = useFinancialStore((s) => s.fetchCardTransactions)\n\n useEffect(() => { fetchCardTransactions() }, [])\n\n // Group by card brand\n const byBrand: Record<string, typeof cardTransactions> = {}\n for (const tx of cardTransactions) {\n const brand = tx.cardBrand || 'Other'\n if (!byBrand[brand]) byBrand[brand] = []\n byBrand[brand].push(tx)\n }\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={t('financial.cards.title')} subtitle={t('financial.cards.subtitle')} />\n {cardsLoading ? (\n <div className=\"text-center py-12 text-sm text-muted-foreground\">Loading...</div>\n ) : cardTransactions.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center rounded-lg border-2 border-dashed border-muted\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-50 dark:bg-indigo-500/20 mb-2\">\n <CreditCard className=\"h-5 w-5 text-indigo-500\" />\n </div>\n <p className=\"text-sm text-muted-foreground\">{t('financial.cards.noTransactions')}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">{t('financial.cards.transactionsAppear')}</p>\n </div>\n ) : (\n Object.entries(byBrand).map(([brand, txs]) => (\n <div key={brand} className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <CreditCard className=\"h-4 w-4 text-indigo-500\" />\n <h3 className=\"text-sm font-semibold\">{brand}</h3>\n <span className=\"text-xs text-muted-foreground\">({txs.length} transactions)</span>\n </div>\n <div className=\"divide-y\">\n {txs.map((tx) => (\n <div key={tx.id} className=\"px-4 py-3 flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">\n Installment {tx.currentInstallment}/{tx.installmentCount}\n </p>\n <p className=\"text-xs text-muted-foreground\">Due: {tx.expectedDate}</p>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-medium\">{formatCurrency(tx.installmentAmount, currency)}</span>\n {tx.status === 'received' ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-success/15 px-2 py-0.5 text-[10px] font-medium text-success dark:bg-success/20\">\n <Check className=\"h-2.5 w-2.5\" /> Received\n </span>\n ) : (\n <span className=\"inline-flex items-center rounded-full bg-warning/15 px-2 py-0.5 text-[10px] font-medium text-warning dark:bg-warning/20\">\n Pending\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { SettingsGroup, ToggleRow } from '@fayz-ai/saas'\nimport { useTranslation } from '@fayz-ai/core'\n\nexport function FinancialGeneralSettings() {\n const t = useTranslation()\n return (\n <div className=\"space-y-4\">\n <SettingsGroup title={t('financial.settings.invoices')} description={t('financial.settings.invoicesDesc')}>\n <ToggleRow label={t('financial.settings.autoInstallments')} description={t('financial.settings.autoInstallmentsDesc')} checked={true} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.requireDoc')} description={t('financial.settings.requireDocDesc')} checked={false} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.allowPartial')} description={t('financial.settings.allowPartialDesc')} checked={true} onChange={() => {}} />\n </SettingsGroup>\n\n <SettingsGroup title={t('financial.settings.cashRegister')} description={t('financial.settings.cashRegisterDesc')}>\n <ToggleRow label={t('financial.settings.requireOpening')} description={t('financial.settings.requireOpeningDesc')} checked={true} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.autoClose')} description={t('financial.settings.autoCloseDesc')} checked={false} onChange={() => {}} />\n </SettingsGroup>\n\n <SettingsGroup title={t('financial.settings.notifications')} description={t('financial.settings.notificationsDesc')}>\n <ToggleRow label={t('financial.settings.overdueAlerts')} description={t('financial.settings.overdueAlertsDesc')} checked={true} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.dailySummary')} description={t('financial.settings.dailySummaryDesc')} checked={false} onChange={() => {}} />\n </SettingsGroup>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport { DollarSign, Landmark, CreditCard, BookOpen, ChevronRight, Check } from 'lucide-react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Button } from '@fayz-ai/ui'\n\nconst STEPS = [\n { id: 'welcome', icon: DollarSign, titleKey: 'financial.onboarding.welcome', descKey: 'financial.onboarding.description' },\n { id: 'accounts', icon: Landmark, titleKey: 'financial.onboarding.accounts.title', descKey: 'financial.onboarding.accounts.description' },\n { id: 'payments', icon: CreditCard, titleKey: 'financial.onboarding.payments.title', descKey: 'financial.onboarding.payments.description' },\n { id: 'chart', icon: BookOpen, titleKey: 'financial.onboarding.chart.title', descKey: 'financial.onboarding.chart.description' },\n]\n\nexport function FinancialOnboarding({ onComplete }: { onComplete: () => void }) {\n const t = useTranslation()\n const [step, setStep] = useState(0)\n const current = STEPS[step]\n const isLast = step === STEPS.length - 1\n const Icon = current.icon\n\n return (\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"w-full max-w-lg\">\n {/* Progress */}\n <div className=\"flex items-center gap-1 mb-8\">\n {STEPS.map((s, i) => (\n <div\n key={s.id}\n className={`h-1 flex-1 rounded-full transition-colors ${\n i <= step ? 'bg-primary' : 'bg-muted'\n }`}\n />\n ))}\n </div>\n\n {/* Card */}\n <div className=\"rounded-card border bg-card p-8 text-center space-y-6 shadow-sm\">\n <div className=\"flex justify-center\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-primary/10\">\n <Icon className=\"h-8 w-8 text-primary\" />\n </div>\n </div>\n\n <div>\n <h2 className=\"text-xl font-bold\">{t(current.titleKey)}</h2>\n <p className=\"text-sm text-muted-foreground mt-2 max-w-sm mx-auto\">{t(current.descKey)}</p>\n </div>\n\n {/* Step-specific hint */}\n {step > 0 && step < STEPS.length - 1 && (\n <div className=\"rounded-lg bg-muted/30 px-4 py-3 text-xs text-muted-foreground\">\n {t('financial.onboarding.configureHint')}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center justify-center gap-3 pt-2\">\n {step > 0 && (\n <Button variant=\"outline\" size=\"lg\" onClick={() => setStep(step - 1)}>\n {t('financial.onboarding.back')}\n </Button>\n )}\n {isLast ? (\n <Button variant=\"default\" size=\"lg\" onClick={onComplete}>\n <Check className=\"h-4 w-4\" /> {t('financial.onboarding.startUsing')}\n </Button>\n ) : (\n <Button variant=\"default\" size=\"lg\" onClick={() => setStep(step + 1)}>\n {step === 0 ? t('financial.onboarding.getStarted') : t('financial.onboarding.next')}\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Skip */}\n {!isLast && step === 0 && (\n <button\n onClick={onComplete}\n className=\"text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('financial.onboarding.skip')}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import React, { useState, useCallback, useMemo } from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { useTranslation } from '@fayz-ai/core'\nimport { ModulePage, PageTransition, type ModuleNavItem } from '@fayz-ai/ui'\nimport { FinancialContextProvider, type ResolvedFinancialConfig } from './FinancialContext'\nimport type { FinancialDataProvider } from './data/types'\nimport type { FinancialUIState } from './store'\nimport type { PluginRegistryDef, PluginQuickAction } from '@fayz-ai/core'\nimport { useModuleNavigation, ModuleActionBar, parseViewId } from '@fayz-ai/saas'\nimport { SummaryView } from './views/SummaryView'\nimport { PayablesView } from './views/PayablesView'\nimport { ReceivablesView } from './views/ReceivablesView'\nimport { CashRegistersView } from './views/CashRegistersView'\nimport { StatementsView } from './views/StatementsView'\nimport { CommissionsView } from './views/CommissionsView'\nimport { CardsView } from './views/CardsView'\nimport { FinancialGeneralSettings } from './components/FinancialGeneralSettings'\nimport { FinancialOnboarding } from './components/FinancialOnboarding'\n\n// ---------------------------------------------------------------------------\n// View intent — what subpage + mode to show\n// ---------------------------------------------------------------------------\n\nexport interface ViewIntent {\n view: string\n mode?: 'list' | 'new' | 'edit' | 'detail'\n editId?: string\n}\n\nfunction parseIntent(activeView: string): ViewIntent {\n // `base` collapses 'payables-detail' / 'payables-edit' etc; `id` is the canonical :id param.\n const { base, id } = parseViewId(activeView)\n const m = base.match(/^(payables|receivables)-(new|list|detail|edit)$/)\n if (m) return { view: m[1], mode: m[2] as ViewIntent['mode'], editId: id }\n return { view: activeView }\n}\n\n// ---------------------------------------------------------------------------\n// Nav builder\n// ---------------------------------------------------------------------------\n\nfunction buildNav(\n config: ResolvedFinancialConfig,\n activeView: string,\n navigate: (view: string, hash?: string) => void,\n t: (key: string, params?: Record<string, string | number>) => string,\n): ModuleNavItem[] {\n const items: ModuleNavItem[] = [\n {\n id: 'summary',\n label: t('financial.nav.summary'),\n icon: 'BarChart3',\n active: activeView === 'summary',\n onClick: () => navigate('summary'),\n },\n ]\n\n if (config.modules.payables) {\n items.push({\n id: 'payables',\n label: t('financial.nav.payables'),\n icon: 'ArrowUpCircle',\n active: activeView.startsWith('payables'),\n children: [\n { id: 'payables-new', label: t('financial.nav.new'), active: activeView === 'payables-new', onClick: () => navigate('payables-new') },\n { id: 'payables-list', label: t('financial.nav.list'), active: activeView === 'payables-list', onClick: () => navigate('payables-list') },\n { id: 'payables-recurring', label: t('financial.nav.recurringExpenses'), active: activeView === 'payables-recurring', onClick: () => navigate('payables-recurring') },\n ],\n })\n }\n\n if (config.modules.receivables) {\n items.push({\n id: 'receivables',\n label: t('financial.nav.receivables'),\n icon: 'ArrowDownCircle',\n active: activeView.startsWith('receivables'),\n children: [\n { id: 'receivables-new', label: t('financial.nav.new'), active: activeView === 'receivables-new', onClick: () => navigate('receivables-new') },\n { id: 'receivables-list', label: t('financial.nav.list'), active: activeView === 'receivables-list', onClick: () => navigate('receivables-list') },\n ],\n })\n }\n\n if (config.modules.cashRegisters) {\n items.push({\n id: 'cash-registers',\n label: t('financial.nav.cashRegisters'),\n icon: 'Landmark',\n active: activeView === 'cash-registers',\n onClick: () => navigate('cash-registers'),\n })\n }\n\n if (config.modules.statements) {\n items.push({\n id: 'statements',\n label: t('financial.nav.statements'),\n icon: 'Receipt',\n active: activeView === 'statements',\n onClick: () => navigate('statements'),\n })\n }\n\n if (config.modules.commissions) {\n items.push({\n id: 'commissions',\n label: t('financial.nav.commissions'),\n icon: 'Users',\n children: [\n { id: 'commissions-overview', label: t('financial.nav.overview'), active: activeView === 'commissions', onClick: () => navigate('commissions') },\n { id: 'commissions-rules', label: t('financial.nav.rules'), active: activeView === 'commissions', onClick: () => navigate('commissions') },\n ],\n })\n }\n\n if (config.modules.cards) {\n items.push({\n id: 'cards',\n label: t('financial.nav.cards'),\n icon: 'CreditCard',\n children: [\n { id: 'cards-overview', label: t('financial.nav.overview'), active: activeView === 'cards', onClick: () => navigate('cards') },\n { id: 'cards-reconciliation', label: t('financial.nav.reconciliation'), active: activeView === 'cards', onClick: () => navigate('cards') },\n ],\n })\n }\n\n return items\n}\n\n// ---------------------------------------------------------------------------\n// Main page component\n// ---------------------------------------------------------------------------\n\nexport function FinancialPage({ config, provider, store, registries }: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n registries?: PluginRegistryDef[]\n}) {\n const { view, direction, navigate } = useModuleNavigation('/financial', {\n summary: 0,\n 'payables-list': 0, 'payables-new': 1, 'receivables-list': 0, 'receivables-new': 1,\n 'cash-registers': 0, statements: 0, commissions: 0, cards: 0,\n settings: 1,\n })\n\n const [onboardingComplete, setOnboardingComplete] = useState(() => {\n try { return localStorage.getItem('saas-core:financial-onboarded') === 'true' } catch { return false }\n })\n\n const t = useTranslation()\n const intent = parseIntent(view)\n const isSettings = view === 'settings'\n const nav = buildNav(config, view, navigate, t)\n\n const quickActions = useMemo<PluginQuickAction[]>(() => {\n const actions: PluginQuickAction[] = []\n if (config.modules.payables) {\n actions.push({\n id: 'new-payable',\n label: t('financial.quickActions.newPayable'),\n icon: 'ArrowUpCircle',\n description: t('financial.quickActions.newPayableDesc'),\n action: () => navigate('payables-new'),\n })\n }\n if (config.modules.receivables) {\n actions.push({\n id: 'new-receivable',\n label: t('financial.quickActions.newReceivable'),\n icon: 'ArrowDownCircle',\n description: t('financial.quickActions.newReceivableDesc'),\n action: () => navigate('receivables-new'),\n })\n }\n if (config.modules.cashRegisters) {\n actions.push({\n id: 'open-cash',\n label: t('financial.quickActions.openCashRegister'),\n icon: 'Landmark',\n description: t('financial.quickActions.openCashRegisterDesc'),\n action: () => navigate('cash-registers'),\n })\n }\n return actions\n }, [config.modules])\n\n function handleOnboardingComplete() {\n setOnboardingComplete(true)\n try { localStorage.setItem('saas-core:financial-onboarded', 'true') } catch {}\n }\n\n // Show onboarding on first visit\n if (!onboardingComplete) {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <FinancialOnboarding onComplete={handleOnboardingComplete} />\n </FinancialContextProvider>\n )\n }\n\n // Settings view\n if (isSettings && registries && registries.length > 0) {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <PageTransition transitionKey=\"settings\" direction={direction}>\n <div style={{ padding: '24px' }}>\n <div style={{ marginBottom: '16px' }}>\n <h1 style={{ fontSize: '20px', fontWeight: 600, margin: 0 }}>{t('financial.settingsPage.title')}</h1>\n <p style={{ color: 'var(--muted-foreground, #6b7280)', margin: '4px 0 0', fontSize: '14px' }}>{t('financial.settingsPage.subtitle')}</p>\n </div>\n <FinancialGeneralSettings />\n </div>\n </PageTransition>\n </FinancialContextProvider>\n )\n }\n\n function renderView() {\n switch (intent.view) {\n case 'payables':\n return <PayablesView intent={intent} onNavigate={navigate} />\n case 'receivables':\n return <ReceivablesView intent={intent} onNavigate={navigate} />\n case 'cash-registers':\n return <CashRegistersView />\n case 'statements':\n return <StatementsView />\n case 'commissions':\n return <CommissionsView />\n case 'cards':\n return <CardsView />\n default:\n return <SummaryView />\n }\n }\n\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <ModulePage\n title={config.labels.pageTitle}\n subtitle={config.labels.pageSubtitle}\n nav={nav}\n showHeader={intent.view === 'summary' || view === 'summary'}\n viewKey={view}\n direction={direction}\n headerAction={\n <ModuleActionBar\n quickActions={quickActions}\n settingsPath={registries && registries.length > 0 ? '/settings/financial' : undefined}\n settingsLabel={t('financial.settingsPage.title')}\n />\n }\n >\n {renderView()}\n </ModulePage>\n </FinancialContextProvider>\n )\n}\n","import React, { useEffect } from 'react'\nimport { ArrowUpRight, ArrowDownRight, AlertTriangle } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport type { StoreApi } from 'zustand'\nimport type { DashboardWidgetDef } from '@fayz-ai/core'\nimport { useTranslation } from '@fayz-ai/core'\nimport {\n KpiCard, ChartWidget, TableWidget, Card, CardHeader, CardTitle, CardContent,\n defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget,\n} from '@fayz-ai/ui'\nimport { FinancialContextProvider, useFinancialConfig, useFinancialStore, formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport type { FinancialDataProvider } from '../data/types'\nimport type { FinancialUIState } from '../store'\nimport type { Invoice } from '../types'\n\nfunction useEnsureSummary() {\n const fetchSummary = useFinancialStore((s) => s.fetchSummary)\n useEffect(() => { void fetchSummary() }, [])\n}\n\n// ---------------------------------------------------------------------------\n// KPIs\n// ---------------------------------------------------------------------------\n\nfunction TotalBalanceKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const loading = useFinancialStore((s) => s.summaryLoading)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.totalBalance')} icon=\"Wallet\" value={formatCurrency(summary?.totalBalance ?? 0, currency)} sub={loading ? undefined : t('financial.summary.allAccounts')} />\n}\n\nfunction ReceivableKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.receivable')} icon=\"TrendingUp\" value={formatCurrency(summary?.totalReceivable ?? 0, currency)} sub={t('financial.summary.overdue', { count: String(summary?.overdueReceivableCount ?? 0) })} />\n}\n\nfunction PayableKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.payable')} icon=\"TrendingDown\" value={formatCurrency(summary?.totalPayable ?? 0, currency)} sub={t('financial.summary.overdue', { count: String(summary?.overduePayableCount ?? 0) })} />\n}\n\nfunction MonthlyFlowKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n return <KpiCard label={t('financial.summary.monthlyFlow')} icon=\"BarChart3\" value={formatCurrency(inflow - outflow, currency)} sub={inflow >= outflow ? t('financial.summary.positiveBalance') : t('financial.summary.negativeBalance')} />\n}\n\n// ---------------------------------------------------------------------------\n// Cash flow (recharts) + breakdown + overdue alerts\n// ---------------------------------------------------------------------------\n\nfunction CashFlowChart() {\n const t = useTranslation()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const data = [{ name: t('financial.summary.cashFlow'), income: summary?.monthlyInflow ?? 0, expenses: summary?.monthlyOutflow ?? 0 }]\n return (\n <ChartWidget\n type=\"bar\" title={t('financial.summary.cashFlow')} icon=\"BarChart3\" categoryKey=\"name\" data={data}\n series={[\n { dataKey: 'income', label: t('financial.summary.income'), color: 'hsl(var(--success))' },\n { dataKey: 'expenses', label: t('financial.summary.expenses'), color: 'hsl(var(--destructive))' },\n ]}\n />\n )\n}\n\nfunction CashFlowBreakdown() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n const total = Math.max(inflow + outflow, 1)\n return (\n <Card>\n <CardHeader><CardTitle>{t('financial.summary.cashFlowBreakdown')}</CardTitle></CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"flex items-center gap-1.5 text-muted-foreground\"><span className=\"h-2 w-2 rounded-full bg-success\" />{t('financial.summary.received')}</span>\n <span className=\"font-medium\">{formatCurrency(inflow, currency)}</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-muted\"><div className=\"h-full rounded-full bg-success\" style={{ width: `${(inflow / total) * 100}%` }} /></div>\n </div>\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"flex items-center gap-1.5 text-muted-foreground\"><span className=\"h-2 w-2 rounded-full bg-destructive\" />{t('financial.summary.paid')}</span>\n <span className=\"font-medium\">{formatCurrency(outflow, currency)}</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-muted\"><div className=\"h-full rounded-full bg-destructive\" style={{ width: `${(outflow / total) * 100}%` }} /></div>\n </div>\n <div className=\"border-t pt-2\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.summary.net')}</span>\n <span className={`font-semibold ${inflow - outflow >= 0 ? 'text-success' : 'text-destructive'}`}>{formatCurrency(inflow - outflow, currency)}</span>\n </div>\n </div>\n </CardContent>\n </Card>\n )\n}\n\nfunction OverdueAlerts() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const items = [\n { label: t('financial.summary.overdueReceivable'), value: summary?.overdueReceivableAmount ?? 0, count: summary?.overdueReceivableCount ?? 0, Icon: ArrowUpRight, color: 'text-warning' },\n { label: t('financial.summary.overduePayable'), value: summary?.overduePayableAmount ?? 0, count: summary?.overduePayableCount ?? 0, Icon: ArrowDownRight, color: 'text-destructive' },\n ]\n return (\n <Card>\n <CardHeader><CardTitle className=\"flex items-center gap-2\"><AlertTriangle className=\"h-4 w-4 text-warning\" />{t('financial.summary.overdueTitle')}</CardTitle></CardHeader>\n <CardContent className=\"space-y-3\">\n {items.map((item) => (\n <div key={item.label} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\"><item.Icon className={`h-3.5 w-3.5 ${item.color}`} /><span className=\"text-sm text-muted-foreground\">{item.label}</span></div>\n <span className=\"text-sm font-semibold\">{formatCurrency(item.value, currency)}</span>\n </div>\n ))}\n {items.every((i) => i.count === 0) ? <p className=\"border-t pt-3 text-xs text-muted-foreground\">{t('financial.summary.noOverdue')}</p> : null}\n </CardContent>\n </Card>\n )\n}\n\nfunction RecentTransactions() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const invoices = useFinancialStore((s) => s.invoices)\n const fetchInvoices = useFinancialStore((s) => s.fetchInvoices)\n useEffect(() => { void fetchInvoices({ pageSize: 5 }) }, [])\n const columns: ColumnDef<Invoice, unknown>[] = [\n { accessorKey: 'contactName', header: t('financial.summary.recentTransactions'), cell: ({ row }) => <span className=\"font-medium\">{row.original.contactName || 'Unknown'}</span> },\n { id: 'date', header: '', cell: ({ row }) => <span className=\"text-xs capitalize text-muted-foreground\">{row.original.direction} · {row.original.invoiceDate}</span> },\n { accessorKey: 'totalAmount', header: '', cell: ({ row }) => (\n <span className={`font-semibold ${row.original.direction === 'credit' ? 'text-success' : 'text-destructive'}`}>\n {row.original.direction === 'credit' ? '+' : '-'}{formatCurrency(row.original.totalAmount, currency)}\n </span>\n ) },\n ]\n return <TableWidget title={t('financial.summary.recentTransactions')} icon=\"CircleDollarSign\" columns={columns} data={invoices.slice(0, 5)} emptyMessage={t('financial.summary.noTransactions')} />\n}\n\n// ---------------------------------------------------------------------------\n// Registry builder\n// ---------------------------------------------------------------------------\n\nexport function createFinancialDashboardWidgets(ctx: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n}): DashboardWidgetDef[] {\n const withCtx = (Inner: React.ComponentType): React.ComponentType<unknown> => {\n const Wrapped = () => (\n <FinancialContextProvider config={ctx.config} provider={ctx.provider} store={ctx.store}>\n <Inner />\n </FinancialContextProvider>\n )\n Wrapped.displayName = `FinancialWidget(${Inner.displayName ?? Inner.name})`\n return Wrapped\n }\n\n return [\n // Total balance is finance's headline KPI on the global home; the rest are\n // home-hidden by default (shown on the financial plugin-home, addable via Customize).\n defineKpiWidget({ id: 'financial.kpi.total-balance', title: 'financial.summary.totalBalance', domain: 'financial', defaultOrder: 0, component: withCtx(TotalBalanceKpi) }),\n defineKpiWidget({ id: 'financial.kpi.receivable', title: 'financial.summary.receivable', domain: 'financial', defaultOrder: 1, defaultVisible: false, component: withCtx(ReceivableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.payable', title: 'financial.summary.payable', domain: 'financial', defaultOrder: 2, defaultVisible: false, component: withCtx(PayableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.monthly-flow', title: 'financial.summary.monthlyFlow', domain: 'financial', defaultOrder: 3, defaultVisible: false, component: withCtx(MonthlyFlowKpi) }),\n defineChartWidget({ id: 'financial.chart.cash-flow', title: 'financial.summary.cashFlow', domain: 'financial', span: 2, defaultOrder: 10, surfaces: ['plugin-home'], component: withCtx(CashFlowChart) }),\n defineCustomWidget({ id: 'financial.panel.breakdown', title: 'financial.summary.cashFlowBreakdown', domain: 'financial', span: 1, defaultOrder: 11, surfaces: ['plugin-home'], component: withCtx(CashFlowBreakdown) }),\n defineCustomWidget({ id: 'financial.panel.overdue', title: 'financial.summary.overdueTitle', domain: 'financial', span: 1, defaultOrder: 12, surfaces: ['plugin-home'], component: withCtx(OverdueAlerts) }),\n defineTableWidget({ id: 'financial.table.recent', title: 'financial.summary.recentTransactions', domain: 'financial', span: 4, defaultOrder: 20, surfaces: ['plugin-home'], component: withCtx(RecentTransactions) }),\n ]\n}\n","import type { FinancialDataProvider } from './types'\nimport type {\n Invoice, InvoiceItem, FinancialMovement, BankAccount,\n CashSession, PaymentMethod, PaymentMethodType, ChartOfAccountsNode,\n CardTransaction,\n CreateInvoiceInput, PayMovementInput,\n OpenCashSessionInput, CloseCashSessionInput, CreateBankAccountInput,\n InvoiceQuery, MovementQuery, StatementQuery,\n PaginatedResult, FinancialSummary, StatementEntry, CashSessionSummary,\n DateRange, InvoiceStatus, MovementStatus,\n} from '../types'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nlet nextId = 1\nfunction uid(): string {\n return String(nextId++)\n}\n\nfunction now(): string {\n return new Date().toISOString()\n}\n\nfunction today(): string {\n return new Date().toISOString().slice(0, 10)\n}\n\nfunction matchesDateRange(dateStr: string | undefined, range?: DateRange): boolean {\n if (!range || !dateStr) return true\n return dateStr >= range.from && dateStr <= range.to\n}\n\nfunction matchesStatus<T extends string>(status: T, filter?: T | T[]): boolean {\n if (!filter) return true\n if (Array.isArray(filter)) return filter.includes(status)\n return status === filter\n}\n\nfunction paginate<T>(items: T[], page?: number, pageSize?: number): PaginatedResult<T> {\n const p = page ?? 1\n const ps = pageSize ?? 50\n const start = (p - 1) * ps\n return { data: items.slice(start, start + ps), total: items.length }\n}\n\n// ---------------------------------------------------------------------------\n// In-memory store\n// ---------------------------------------------------------------------------\n\ninterface MockStore {\n invoices: Invoice[]\n invoiceItems: InvoiceItem[]\n movements: FinancialMovement[]\n bankAccounts: BankAccount[]\n cashSessions: CashSession[]\n paymentMethods: PaymentMethod[]\n paymentMethodTypes: PaymentMethodType[]\n chartOfAccounts: ChartOfAccountsNode[]\n cardTransactions: CardTransaction[]\n}\n\nfunction createStore(seedPaymentMethodTypes?: Array<{ name: string; transactionType?: string }>): MockStore {\n const tenantId = 'mock-tenant'\n\n const defaultPMTypes: PaymentMethodType[] = (seedPaymentMethodTypes ?? [\n { name: 'Cash', transactionType: 'cash' },\n { name: 'Credit Card', transactionType: 'credit_card' },\n { name: 'Debit Card', transactionType: 'debit_card' },\n { name: 'PIX', transactionType: 'pix' },\n { name: 'Bank Transfer', transactionType: 'transfer' },\n ]).map((t) => ({\n id: uid(),\n name: t.name,\n transactionType: t.transactionType,\n isActive: true,\n tenantId,\n createdAt: now(),\n }))\n\n const cashAccount: BankAccount = {\n id: uid(),\n name: 'Main Cash Register',\n accountType: 'cash_register',\n currentBalance: 0,\n initialBalance: 0,\n isActive: true,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n\n const bankAccount: BankAccount = {\n id: uid(),\n name: 'Business Checking',\n accountType: 'bank_account',\n bankName: 'Main Bank',\n currentBalance: 0,\n initialBalance: 0,\n isActive: true,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n\n return {\n invoices: [],\n invoiceItems: [],\n movements: [],\n bankAccounts: [cashAccount, bankAccount],\n cashSessions: [],\n paymentMethods: [],\n paymentMethodTypes: defaultPMTypes,\n chartOfAccounts: [],\n cardTransactions: [],\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mock provider factory\n// ---------------------------------------------------------------------------\n\nexport interface MockFinancialProviderOptions {\n paymentMethodTypes?: Array<{ name: string; transactionType?: string }>\n}\n\nexport function createMockFinancialProvider(options?: MockFinancialProviderOptions): FinancialDataProvider {\n const store = createStore(options?.paymentMethodTypes)\n const tenantId = 'mock-tenant'\n\n function recalcInvoiceStatus(invoice: Invoice): void {\n if (invoice.paidAmount >= invoice.totalAmount) {\n invoice.status = 'paid'\n } else if (invoice.paidAmount > 0) {\n invoice.status = 'partial'\n } else {\n // Check if any movement is overdue\n const movements = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n const hasOverdue = movements.some((m) => m.status === 'overdue' || (m.status === 'pending' && m.dueDate < today()))\n invoice.status = hasOverdue ? 'overdue' : 'open'\n }\n invoice.updatedAt = now()\n }\n\n const provider: FinancialDataProvider = {\n // --- Invoices ---\n async getInvoices(query: InvoiceQuery): Promise<PaginatedResult<Invoice>> {\n let results = [...store.invoices]\n if (query.direction) results = results.filter((i) => i.direction === query.direction)\n if (query.status) results = results.filter((i) => matchesStatus(i.status, query.status as InvoiceStatus | InvoiceStatus[]))\n if (query.contactId) results = results.filter((i) => i.contactId === query.contactId)\n if (query.dateRange) results = results.filter((i) => matchesDateRange(i.invoiceDate, query.dateRange))\n if (query.search) {\n const s = query.search.toLowerCase()\n results = results.filter((i) =>\n i.contactName?.toLowerCase().includes(s) ||\n i.observations?.toLowerCase().includes(s) ||\n i.fiscalNumber?.toLowerCase().includes(s)\n )\n }\n results.sort((a, b) => b.createdAt.localeCompare(a.createdAt))\n return paginate(results, query.page, query.pageSize)\n },\n\n async getInvoiceById(id: string): Promise<Invoice | null> {\n return store.invoices.find((i) => i.id === id) ?? null\n },\n\n async getInvoiceItems(invoiceId: string): Promise<InvoiceItem[]> {\n return store.invoiceItems.filter((i) => i.invoiceId === invoiceId)\n },\n\n async createInvoice(input: CreateInvoiceInput): Promise<Invoice> {\n const invoiceId = uid()\n const totalAmount = input.items.reduce((sum, item) => {\n const itemTotal = item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0)\n return sum + itemTotal\n }, 0)\n\n const itemsSummary = input.items.map((i) => i.description).filter(Boolean).join(', ')\n\n const invoice: Invoice = {\n id: invoiceId,\n direction: input.direction,\n invoiceDate: input.invoiceDate,\n fiscalNumber: input.fiscalNumber,\n totalAmount,\n paidAmount: 0,\n status: 'open',\n totalInstallments: input.installments.length || 1,\n contactId: input.contactId,\n contactName: input.contactName,\n cashSessionId: input.cashSessionId,\n unitId: input.unitId,\n observations: input.observations,\n itemsSummary: itemsSummary || undefined,\n metadata: input.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.invoices.push(invoice)\n\n // Create items\n for (const itemInput of input.items) {\n const itemTotal = itemInput.quantity * itemInput.unitPrice - (itemInput.discount ?? 0) + (itemInput.surcharge ?? 0)\n const item: InvoiceItem = {\n id: uid(),\n invoiceId,\n itemKind: itemInput.itemKind,\n referenceId: itemInput.referenceId,\n description: itemInput.description,\n quantity: itemInput.quantity,\n unitPrice: itemInput.unitPrice,\n totalAmount: itemTotal,\n discount: itemInput.discount ?? 0,\n surcharge: itemInput.surcharge ?? 0,\n accountId: itemInput.accountId,\n costCenterId: itemInput.costCenterId,\n metadata: itemInput.metadata,\n createdAt: now(),\n }\n store.invoiceItems.push(item)\n }\n\n // Create installment movements\n for (const movInput of input.installments) {\n const movement: FinancialMovement = {\n id: uid(),\n invoiceId,\n direction: input.direction,\n movementKind: movInput.movementKind,\n amount: movInput.amount,\n paidAmount: 0,\n status: 'pending',\n dueDate: movInput.dueDate,\n installmentNumber: movInput.installmentNumber,\n paymentMethodId: movInput.paymentMethodId,\n bankAccountId: movInput.bankAccountId,\n notes: movInput.notes,\n metadata: movInput.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push(movement)\n }\n\n return invoice\n },\n\n async updateInvoice(id: string, data: Partial<Invoice>): Promise<Invoice> {\n const invoice = store.invoices.find((i) => i.id === id)\n if (!invoice) throw new Error(`Invoice ${id} not found`)\n Object.assign(invoice, data, { updatedAt: now() })\n return invoice\n },\n\n async cancelInvoice(id: string): Promise<void> {\n const invoice = store.invoices.find((i) => i.id === id)\n if (!invoice) throw new Error(`Invoice ${id} not found`)\n invoice.status = 'cancelled'\n invoice.updatedAt = now()\n // Cancel all pending movements\n store.movements\n .filter((m) => m.invoiceId === id && m.status === 'pending')\n .forEach((m) => { m.status = 'cancelled'; m.updatedAt = now() })\n },\n\n // --- Movements ---\n async getMovements(query: MovementQuery): Promise<PaginatedResult<FinancialMovement>> {\n let results = [...store.movements]\n if (query.direction) results = results.filter((m) => m.direction === query.direction)\n if (query.status) results = results.filter((m) => matchesStatus(m.status, query.status as MovementStatus | MovementStatus[]))\n if (query.bankAccountId) results = results.filter((m) => m.bankAccountId === query.bankAccountId)\n if (query.cashSessionId) results = results.filter((m) => m.cashSessionId === query.cashSessionId)\n if (query.dateRange) results = results.filter((m) => matchesDateRange(m.dueDate, query.dateRange))\n results.sort((a, b) => a.dueDate.localeCompare(b.dueDate))\n return paginate(results, query.page, query.pageSize)\n },\n\n async payMovement(input: PayMovementInput): Promise<FinancialMovement> {\n const movement = store.movements.find((m) => m.id === input.movementId)\n if (!movement) throw new Error(`Movement ${input.movementId} not found`)\n\n movement.paidAmount += input.amount\n movement.paymentDate = input.paymentDate\n movement.paymentMethodId = input.paymentMethodId ?? movement.paymentMethodId\n movement.bankAccountId = input.bankAccountId ?? movement.bankAccountId\n movement.cashSessionId = input.cashSessionId ?? movement.cashSessionId\n movement.cardBrand = input.cardBrand\n movement.cardInstallments = input.cardInstallments\n movement.status = movement.paidAmount >= movement.amount ? 'paid' : 'partial'\n movement.updatedAt = now()\n\n // Update bank account balance\n if (movement.bankAccountId) {\n const account = store.bankAccounts.find((a) => a.id === movement.bankAccountId)\n if (account) {\n if (movement.direction === 'credit') {\n account.currentBalance += input.amount\n } else {\n account.currentBalance -= input.amount\n }\n account.updatedAt = now()\n }\n }\n\n // Recalculate invoice status\n if (movement.invoiceId) {\n const invoice = store.invoices.find((i) => i.id === movement.invoiceId)\n if (invoice) {\n const invoiceMovements = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n invoice.paidAmount = invoiceMovements.reduce((sum, m) => sum + m.paidAmount, 0)\n recalcInvoiceStatus(invoice)\n }\n }\n\n return movement\n },\n\n async cancelMovement(id: string): Promise<void> {\n const movement = store.movements.find((m) => m.id === id)\n if (!movement) throw new Error(`Movement ${id} not found`)\n movement.status = 'cancelled'\n movement.updatedAt = now()\n },\n\n // --- Bank Accounts ---\n async getBankAccounts(): Promise<BankAccount[]> {\n return store.bankAccounts.filter((a) => a.isActive)\n },\n\n async createBankAccount(data: CreateBankAccountInput): Promise<BankAccount> {\n const account: BankAccount = {\n id: uid(),\n name: data.name,\n accountType: data.accountType,\n bankName: data.bankName,\n accountNumber: data.accountNumber,\n agencyNumber: data.agencyNumber,\n currentBalance: data.initialBalance ?? 0,\n initialBalance: data.initialBalance ?? 0,\n creditLimit: data.creditLimit,\n dueDay: data.dueDay,\n closingDay: data.closingDay,\n isActive: true,\n unitId: data.unitId,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.bankAccounts.push(account)\n return account\n },\n\n async updateBankAccount(id: string, data: Partial<BankAccount>): Promise<BankAccount> {\n const account = store.bankAccounts.find((a) => a.id === id)\n if (!account) throw new Error(`Bank account ${id} not found`)\n Object.assign(account, data, { updatedAt: now() })\n return account\n },\n\n // --- Cash Sessions ---\n async getCashSessions(bankAccountId?: string): Promise<CashSession[]> {\n let results = [...store.cashSessions]\n if (bankAccountId) results = results.filter((s) => s.bankAccountId === bankAccountId)\n return results.sort((a, b) => b.openedAt.localeCompare(a.openedAt))\n },\n\n async getOpenSession(bankAccountId: string): Promise<CashSession | null> {\n return store.cashSessions.find((s) => s.bankAccountId === bankAccountId && s.status === 'open') ?? null\n },\n\n async openCashSession(input: OpenCashSessionInput): Promise<CashSession> {\n const account = store.bankAccounts.find((a) => a.id === input.bankAccountId)\n const session: CashSession = {\n id: uid(),\n bankAccountId: input.bankAccountId,\n bankAccountName: account?.name,\n status: 'open',\n openedAt: now(),\n openedByUserId: input.openedByUserId,\n openedByName: input.openedByName,\n openingBalance: input.openingBalance,\n unitId: input.unitId,\n tenantId,\n createdAt: now(),\n }\n store.cashSessions.push(session)\n return session\n },\n\n async closeCashSession(input: CloseCashSessionInput): Promise<CashSession> {\n const session = store.cashSessions.find((s) => s.id === input.sessionId)\n if (!session) throw new Error(`Cash session ${input.sessionId} not found`)\n\n // Calculate expected balance\n const sessionMovements = store.movements.filter((m) => m.cashSessionId === session.id && m.status === 'paid')\n const inflow = sessionMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0)\n const outflow = sessionMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0)\n const expectedBalance = session.openingBalance + inflow - outflow\n\n session.status = 'closed'\n session.closedAt = now()\n session.closedByUserId = input.closedByUserId\n session.closedByName = input.closedByName\n session.closingBalance = input.closingBalance\n session.expectedBalance = expectedBalance\n session.difference = input.closingBalance - expectedBalance\n session.notes = input.notes\n\n return session\n },\n\n async getCashSessionSummary(sessionId: string): Promise<CashSessionSummary> {\n const session = store.cashSessions.find((s) => s.id === sessionId)\n if (!session) throw new Error(`Cash session ${sessionId} not found`)\n const sessionMovements = store.movements.filter((m) => m.cashSessionId === sessionId && m.status === 'paid')\n return {\n session,\n movementCount: sessionMovements.length,\n totalInflow: sessionMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0),\n totalOutflow: sessionMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0),\n }\n },\n\n // --- Payment Methods ---\n async getPaymentMethods(): Promise<PaymentMethod[]> {\n return store.paymentMethods.filter((pm) => pm.isActive)\n },\n\n async getPaymentMethodTypes(): Promise<PaymentMethodType[]> {\n return store.paymentMethodTypes.filter((t) => t.isActive)\n },\n\n // --- Chart of Accounts ---\n async getChartOfAccounts(): Promise<ChartOfAccountsNode[]> {\n return store.chartOfAccounts.filter((n) => n.isActive)\n },\n\n // --- Card Transactions ---\n async getCardTransactions(dateRange?: DateRange): Promise<CardTransaction[]> {\n let results = [...store.cardTransactions]\n if (dateRange) results = results.filter((t) => matchesDateRange(t.expectedDate, dateRange))\n return results.sort((a, b) => a.expectedDate.localeCompare(b.expectedDate))\n },\n\n // --- Statements ---\n async getStatement(query: StatementQuery): Promise<StatementEntry[]> {\n const account = store.bankAccounts.find((a) => a.id === query.bankAccountId)\n if (!account) return []\n\n const movements = store.movements\n .filter((m) =>\n m.bankAccountId === query.bankAccountId &&\n m.status === 'paid' &&\n matchesDateRange(m.paymentDate, query.dateRange)\n )\n .sort((a, b) => (a.paymentDate ?? '').localeCompare(b.paymentDate ?? ''))\n\n let runningBalance = account.initialBalance\n const entries: StatementEntry[] = []\n\n for (const movement of movements) {\n if (movement.direction === 'credit') {\n runningBalance += movement.paidAmount\n } else {\n runningBalance -= movement.paidAmount\n }\n const invoice = movement.invoiceId\n ? store.invoices.find((i) => i.id === movement.invoiceId)\n : undefined\n entries.push({ movement, invoice, runningBalance })\n }\n\n return entries\n },\n\n // --- Summary ---\n async getSummary(dateRange?: DateRange): Promise<FinancialSummary> {\n const totalBalance = store.bankAccounts\n .filter((a) => a.isActive)\n .reduce((sum, a) => sum + a.currentBalance, 0)\n\n const pendingReceivable = store.movements.filter((m) =>\n m.direction === 'credit' && m.movementKind === 'bill' && ['pending', 'partial'].includes(m.status)\n )\n const pendingPayable = store.movements.filter((m) =>\n m.direction === 'debit' && m.movementKind === 'bill' && ['pending', 'partial'].includes(m.status)\n )\n\n const todayStr = today()\n const monthStart = todayStr.slice(0, 7) + '-01'\n const monthEnd = todayStr\n\n const monthMovements = store.movements.filter((m) =>\n m.status === 'paid' && matchesDateRange(m.paymentDate, dateRange ?? { from: monthStart, to: monthEnd })\n )\n\n const overdueReceivable = pendingReceivable.filter((m) => m.dueDate < todayStr)\n const overduePayable = pendingPayable.filter((m) => m.dueDate < todayStr)\n\n return {\n totalBalance,\n totalReceivable: pendingReceivable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n totalPayable: pendingPayable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n monthlyInflow: monthMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0),\n monthlyOutflow: monthMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0),\n overdueReceivableCount: overdueReceivable.length,\n overdueReceivableAmount: overdueReceivable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n overduePayableCount: overduePayable.length,\n overduePayableAmount: overduePayable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n }\n },\n }\n\n return provider\n}\n","import type { FinancialDataProvider } from './types'\nimport type {\n Invoice, InvoiceItem, FinancialMovement, BankAccount,\n CashSession, PaymentMethod, PaymentMethodType, ChartOfAccountsNode,\n CardTransaction,\n CreateInvoiceInput, PayMovementInput,\n OpenCashSessionInput, CloseCashSessionInput, CreateBankAccountInput,\n InvoiceQuery, MovementQuery, StatementQuery,\n PaginatedResult, FinancialSummary, StatementEntry, CashSessionSummary,\n DateRange,\n} from '../types'\nimport { getSupabaseClientOptional, getActiveTenantId } from '@fayz-ai/core'\nimport { getFinancialTenantId } from '../lib/tenant'\n\nfunction getTenantId(): string | undefined {\n // Local override wins; else use the app's active tenant so writes pass RLS.\n return getFinancialTenantId() ?? getActiveTenantId()\n}\n\nfunction snakeToCamel(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n result[key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())] = value\n }\n return result\n}\n\nfunction camelToSnake(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n if (key.startsWith('_')) continue\n result[key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`)] = value\n }\n return result\n}\n\nfunction getClients() {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) throw new Error('Supabase not initialized')\n return { core: supabase.schema('saas_core'), pub: supabase }\n}\n\n/** Map order stage to InvoiceStatus for the financial UI */\nfunction mapStageToInvoiceStatus(stage?: string): string {\n switch (stage) {\n case 'paid': return 'paid'\n case 'partial': return 'partial'\n case 'overdue': return 'overdue'\n case 'cancelled': return 'cancelled'\n case 'invoiced': return 'open'\n case 'booked': return 'open'\n default: return 'open'\n }\n}\n\nlet _overdueSwept = false\n\n/** Batch-mark overdue: pending/partial movements past due → 'overdue', then update parent invoices */\nasync function sweepOverdue() {\n if (_overdueSwept) return\n _overdueSwept = true\n try {\n const { core, pub } = getClients()\n const today = new Date().toISOString().slice(0, 10)\n\n // Mark overdue movements\n const { data: overdueMovs } = await pub.from('financial_movements')\n .update({ status: 'overdue' })\n .in('status', ['pending', 'partial'])\n .lt('due_date', today)\n .select('invoice_id')\n\n // Collect unique invoice IDs and update their status\n if (overdueMovs && overdueMovs.length > 0) {\n const invoiceIds = [...new Set(overdueMovs.map((m: any) => m.invoice_id).filter(Boolean))]\n for (const invId of invoiceIds) {\n const { data: allMovs } = await pub.from('financial_movements')\n .select('status')\n .eq('invoice_id', invId)\n .eq('movement_kind', 'bill')\n const movs = allMovs ?? []\n const hasOverdue = movs.some((m: any) => m.status === 'overdue')\n const allPaid = movs.every((m: any) => m.status === 'paid')\n const invoiceStatus = allPaid ? 'paid' : hasOverdue ? 'overdue' : 'open'\n const invoiceStage = allPaid ? 'paid' : hasOverdue ? 'overdue' : 'invoiced'\n // Only update financial stage — don't overwrite agenda status\n await core.from('orders').update({ stage: invoiceStage }).eq('id', invId)\n }\n }\n } catch {\n // Non-critical — don't block the UI\n }\n}\n\n// S2 (data-model refactor): paid amount, balance and status are DERIVED from the\n// append-only ledger via v_invoice_balances — the single source of truth — not\n// from stored order.stage / metadata.paidAmount (which drift). See\n// docs/dogfood-sprint/DATA-MODEL-REFACTOR.md.\nasync function fetchInvoiceBalances(\n pub: any,\n ids: string[],\n): Promise<Map<string, { paid: number; balance: number; status: string }>> {\n const map = new Map<string, { paid: number; balance: number; status: string }>()\n if (!ids.length) return map\n const { data } = await pub\n .from('v_invoice_balances')\n .select('invoice_id, paid, balance, status')\n .in('invoice_id', ids)\n for (const r of (data ?? []) as any[]) {\n map.set(r.invoice_id, { paid: Number(r.paid) || 0, balance: Number(r.balance) || 0, status: r.status })\n }\n return map\n}\n\nexport function createSupabaseFinancialProvider(): FinancialDataProvider {\n const provider: FinancialDataProvider = {\n // --- Invoices (orders at stage=invoiced/paid/partial/overdue/cancelled with direction) ---\n async getInvoices(query: InvoiceQuery): Promise<PaginatedResult<Invoice>> {\n const { core, pub } = getClients()\n let qb = core.from('orders').select('*', { count: 'exact' })\n\n // Show orders with financial relevance: booked (with amount) + invoiced stages\n qb = qb.in('stage', ['booked', 'invoiced', 'paid', 'partial', 'overdue', 'cancelled'])\n qb = qb.gt('total', 0)\n\n // Filter by direction (credit=receivable, debit=payable)\n if (query.direction) {\n qb = qb.eq('direction', query.direction)\n }\n\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status]\n qb = qb.in('status', statuses)\n }\n if (query.contactId) qb = qb.eq('party_id', query.contactId)\n if (query.search) qb = qb.ilike('notes', `%${query.search}%`)\n if (query.dateRange) qb = qb.gte('created_at', query.dateRange.from).lte('created_at', query.dateRange.to)\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n qb = qb.range((page - 1) * pageSize, page * pageSize - 1).order('created_at', { ascending: false })\n const { data, count } = await qb\n\n const bal = await fetchInvoiceBalances(pub, (data ?? []).map((r: any) => r.id))\n const invoices: Invoice[] = (data ?? []).map((r: any) => {\n const meta = r.metadata ?? {}\n // Resolve direction from stage model or legacy kind\n const dir = r.direction ?? (r.kind === 'invoice_payable' ? 'debit' : 'credit')\n const b = bal.get(r.id)\n return {\n id: r.id,\n direction: dir,\n invoiceDate: r.created_at?.slice(0, 10) ?? '',\n fiscalNumber: r.reference_number,\n totalAmount: r.total ?? 0,\n paidAmount: b?.paid ?? meta.paidAmount ?? 0,\n status: b?.status ?? mapStageToInvoiceStatus(r.stage),\n totalInstallments: meta.installmentCount ?? 1,\n contactId: r.party_id,\n contactName: meta.contactName,\n observations: r.notes,\n itemsSummary: meta.itemsSummary,\n tenantId: r.tenant_id,\n createdAt: r.created_at,\n updatedAt: r.updated_at,\n } as Invoice\n })\n return { data: invoices, total: count ?? 0 }\n },\n\n async getInvoiceById(id: string): Promise<Invoice | null> {\n const { core, pub } = getClients()\n const { data } = await core.from('orders').select('*').eq('id', id).single()\n if (!data) return null\n const o = snakeToCamel(data) as any\n const meta = data.metadata ?? {}\n // Paid amount + status are DERIVED from the ledger view (single source of truth).\n const balance = (await fetchInvoiceBalances(pub, [id])).get(id)\n const { data: movs } = await pub.from('financial_movements')\n .select('paid_amount')\n .eq('invoice_id', id)\n .eq('movement_kind', 'bill')\n return {\n id: o.id,\n direction: o.direction ?? (o.kind === 'invoice_payable' ? 'debit' : 'credit'),\n invoiceDate: o.createdAt?.slice(0, 10) ?? '',\n fiscalNumber: o.referenceNumber,\n totalAmount: o.total ?? 0, paidAmount: balance?.paid ?? 0,\n status: balance?.status ?? mapStageToInvoiceStatus(o.stage),\n totalInstallments: (movs ?? []).length || 1, contactId: o.partyId,\n contactName: meta.contactName, itemsSummary: meta.itemsSummary,\n bookingStartsAt: o.startsAt ?? undefined,\n observations: o.notes,\n tenantId: o.tenantId, createdAt: o.createdAt, updatedAt: o.updatedAt,\n } as Invoice\n },\n\n async getInvoiceItems(invoiceId: string): Promise<InvoiceItem[]> {\n const { core, pub } = getClients()\n const { data } = await core.from('order_items').select('*').eq('order_id', invoiceId).order('sort_order')\n return (data ?? []).map((r: any) => {\n const i = snakeToCamel(r) as any\n return {\n id: i.id, invoiceId, itemKind: i.metadata?.itemKind ?? 'other',\n description: i.name ?? '', quantity: i.quantity ?? 1,\n unitPrice: i.unitPrice ?? 0, totalAmount: i.total ?? 0,\n discount: i.discount ?? 0, surcharge: 0,\n referenceId: i.productId ?? i.serviceId,\n createdAt: i.createdAt,\n } as InvoiceItem\n })\n },\n\n async createInvoice(input: CreateInvoiceInput): Promise<Invoice> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const kind = input.direction === 'debit' ? 'invoice_payable' : 'invoice_receivable'\n const totalAmount = input.items.reduce((sum, item) => sum + item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0), 0)\n const itemsSummary = input.items.map((i: any) => i.description).filter(Boolean).join(', ')\n\n // Auto-generate reference number if not provided\n let referenceNumber = input.fiscalNumber\n if (!referenceNumber && tenantId) {\n const prefix = input.direction === 'credit' ? 'REC' : 'PAG'\n const { data: seq } = await core.rpc('next_sequence', { p_tenant_id: tenantId, p_kind: kind })\n if (seq) referenceNumber = `${prefix}-${String(seq).padStart(5, '0')}`\n }\n\n const { data: order } = await core.from('orders').insert({\n tenant_id: tenantId, kind, status: 'open',\n stage: 'invoiced',\n direction: input.direction,\n reference_number: referenceNumber,\n total: totalAmount, party_id: input.contactId,\n notes: input.observations,\n currency: 'BRL',\n metadata: { itemsSummary, contactName: input.contactName, installmentCount: input.installments.length || 1 },\n }).select().single()\n\n if (order && input.items.length > 0) {\n await core.from('order_items').insert(\n input.items.map((item, i) => ({\n order_id: order.id, name: item.description,\n quantity: item.quantity, unit_price: item.unitPrice,\n discount: item.discount ?? 0,\n total: item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0),\n sort_order: i,\n metadata: { itemKind: item.itemKind, referenceId: item.referenceId },\n }))\n )\n }\n\n // Create installment movements\n if (order && input.installments.length > 0) {\n await pub.from('financial_movements').insert(\n input.installments.map((inst, i) => ({\n tenant_id: tenantId, invoice_id: order.id,\n direction: input.direction, movement_kind: inst.movementKind,\n amount: inst.amount, paid_amount: 0, status: 'pending',\n due_date: inst.dueDate, installment_number: inst.installmentNumber ?? i + 1,\n }))\n )\n }\n\n return {\n id: order!.id, direction: input.direction, invoiceDate: new Date().toISOString().slice(0, 10),\n fiscalNumber: referenceNumber,\n totalAmount, paidAmount: 0, status: 'open', totalInstallments: input.installments.length || 1,\n contactName: input.contactName, itemsSummary,\n tenantId: tenantId!, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(),\n } as Invoice\n },\n\n async updateInvoice(id: string, partial: Partial<Invoice>): Promise<Invoice> {\n const { core, pub } = getClients()\n const row: any = {}\n if (partial.observations) row.notes = partial.observations\n if (partial.totalAmount) row.total = partial.totalAmount\n if (partial.status) row.status = partial.status\n if (Object.keys(row).length > 0) await core.from('orders').update(row).eq('id', id)\n return (await provider.getInvoiceById(id))!\n },\n\n async cancelInvoice(id: string): Promise<void> {\n const { core, pub } = getClients()\n await core.from('orders').update({ status: 'cancelled' }).eq('id', id)\n await pub.from('financial_movements').update({ status: 'cancelled' }).eq('invoice_id', id).eq('status', 'pending')\n },\n\n // --- Movements (public.financial_movements) ---\n async getMovements(query: MovementQuery): Promise<PaginatedResult<FinancialMovement>> {\n const { core, pub } = getClients()\n let qb = pub.from('financial_movements').select('*', { count: 'exact' })\n if (query.direction) qb = qb.eq('direction', query.direction)\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status]\n qb = qb.in('status', statuses)\n }\n if (query.bankAccountId) qb = qb.eq('bank_account_id', query.bankAccountId)\n if (query.cashSessionId) qb = qb.eq('cash_session_id', query.cashSessionId)\n if (query.dateRange) qb = qb.gte('due_date', query.dateRange.from).lte('due_date', query.dateRange.to)\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n qb = qb.range((page - 1) * pageSize, page * pageSize - 1).order('due_date')\n const { data, count } = await qb\n return { data: (data ?? []).map((r: any) => snakeToCamel(r) as unknown as FinancialMovement), total: count ?? 0 }\n },\n\n async payMovement(input: PayMovementInput): Promise<FinancialMovement> {\n const { core, pub } = getClients()\n const { data: mov } = await pub.from('financial_movements').select('*').eq('id', input.movementId).single()\n if (!mov) throw new Error('Movement not found')\n const newPaid = (mov.paid_amount ?? 0) + input.amount\n const newStatus = newPaid >= mov.amount ? 'paid' : 'partial'\n const updates: any = { paid_amount: newPaid, status: newStatus, payment_date: input.paymentDate }\n if (input.paymentMethodId) updates.payment_method_id = input.paymentMethodId\n if (input.paymentMethodTypeId) updates.payment_method_type_id = input.paymentMethodTypeId\n if (input.bankAccountId) updates.bank_account_id = input.bankAccountId\n if (input.cashSessionId) updates.cash_session_id = input.cashSessionId\n if (input.cardBrand) updates.card_brand = input.cardBrand\n if (input.cardInstallments) updates.card_installments = input.cardInstallments\n const { data } = await pub.from('financial_movements').update(updates).eq('id', input.movementId).select().single()\n\n // Update invoice (order) status based on all its movements\n if (mov.invoice_id) {\n const { data: allMovs } = await pub.from('financial_movements')\n .select('status, amount, paid_amount')\n .eq('invoice_id', mov.invoice_id)\n .eq('movement_kind', 'bill')\n const movs = allMovs ?? []\n const allPaid = movs.length > 0 && movs.every((m: any) => m.status === 'paid')\n const anyPaid = movs.some((m: any) => m.status === 'paid' || m.status === 'partial')\n const invoiceStatus = allPaid ? 'paid' : anyPaid ? 'partial' : 'open'\n const totalPaid = movs.reduce((sum: number, m: any) => sum + (m.paid_amount ?? 0), 0)\n // Store paid amount in metadata (orders table has no dedicated paid column)\n const { data: order } = await core.from('orders').select('metadata').eq('id', mov.invoice_id).single()\n const meta = (order?.metadata as any) ?? {}\n const invoiceStage = allPaid ? 'paid' : anyPaid ? 'partial' : 'invoiced'\n // Only update financial order status. Agenda status lives on saas_core.bookings.\n await core.from('orders').update({\n status: invoiceStage,\n metadata: { ...meta, paidAmount: totalPaid },\n }).eq('id', mov.invoice_id)\n }\n\n return snakeToCamel(data!) as unknown as FinancialMovement\n },\n\n async cancelMovement(id: string): Promise<void> {\n const { core, pub } = getClients()\n await pub.from('financial_movements').update({ status: 'cancelled' }).eq('id', id)\n },\n\n // --- Bank Accounts ---\n async getBankAccounts(): Promise<BankAccount[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from('bank_accounts').select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as BankAccount)\n },\n\n async createBankAccount(input: CreateBankAccountInput): Promise<BankAccount> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const { data } = await pub.from('bank_accounts').insert({\n ...camelToSnake(input as any), tenant_id: tenantId, current_balance: input.initialBalance ?? 0,\n }).select().single()\n return snakeToCamel(data!) as unknown as BankAccount\n },\n\n async updateBankAccount(id: string, partial: Partial<BankAccount>): Promise<BankAccount> {\n const { core, pub } = getClients()\n const row = camelToSnake(partial as any)\n delete row.id; delete row.tenant_id\n const { data } = await pub.from('bank_accounts').update(row).eq('id', id).select().single()\n return snakeToCamel(data!) as unknown as BankAccount\n },\n\n // --- Cash Sessions ---\n async getCashSessions(bankAccountId?: string): Promise<CashSession[]> {\n const { core, pub } = getClients()\n let qb = pub.from('cash_register_sessions').select('*')\n if (bankAccountId) qb = qb.eq('bank_account_id', bankAccountId)\n const { data } = await qb.order('opened_at', { ascending: false })\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as CashSession)\n },\n\n async getOpenSession(bankAccountId: string): Promise<CashSession | null> {\n const { core, pub } = getClients()\n const { data } = await pub.from('cash_register_sessions').select('*').eq('bank_account_id', bankAccountId).eq('status', 'open').single()\n return data ? snakeToCamel(data) as unknown as CashSession : null\n },\n\n async openCashSession(input: OpenCashSessionInput): Promise<CashSession> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const { data } = await pub.from('cash_register_sessions').insert({\n tenant_id: tenantId, bank_account_id: input.bankAccountId,\n status: 'open', opening_balance: input.openingBalance,\n opened_by_user_id: input.openedByUserId, opened_by_name: input.openedByName,\n unit_id: input.unitId,\n }).select().single()\n return snakeToCamel(data!) as unknown as CashSession\n },\n\n async closeCashSession(input: CloseCashSessionInput): Promise<CashSession> {\n const { core, pub } = getClients()\n const { data } = await pub.from('cash_register_sessions').update({\n status: 'closed', closing_balance: input.closingBalance,\n closed_at: new Date().toISOString(),\n closed_by_user_id: input.closedByUserId, closed_by_name: input.closedByName,\n notes: input.notes,\n }).eq('id', input.sessionId).select().single()\n return snakeToCamel(data!) as unknown as CashSession\n },\n\n async getCashSessionSummary(sessionId: string): Promise<CashSessionSummary> {\n const { core, pub } = getClients()\n const session = (await pub.from('cash_register_sessions').select('*').eq('id', sessionId).single()).data\n const { data: movs } = await pub.from('financial_movements').select('direction, paid_amount').eq('cash_session_id', sessionId).eq('status', 'paid')\n const movements = movs ?? []\n return {\n session: snakeToCamel(session!) as unknown as CashSession,\n movementCount: movements.length,\n totalInflow: movements.filter((m: any) => m.direction === 'credit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n totalOutflow: movements.filter((m: any) => m.direction === 'debit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n }\n },\n\n // --- Payment Methods ---\n async getPaymentMethods(): Promise<PaymentMethod[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from('payment_methods').select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as PaymentMethod)\n },\n\n async getPaymentMethodTypes(): Promise<PaymentMethodType[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from('payment_method_types').select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as PaymentMethodType)\n },\n\n // --- Chart of Accounts ---\n async getChartOfAccounts(): Promise<ChartOfAccountsNode[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from('chart_of_accounts').select('*').eq('is_active', true).order('code')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as ChartOfAccountsNode)\n },\n\n // --- Card Transactions ---\n async getCardTransactions(dateRange?: DateRange): Promise<CardTransaction[]> {\n const { core, pub } = getClients()\n return [] // TODO: implement when card_transactions table exists\n },\n\n // --- Statements ---\n async getStatement(query: StatementQuery): Promise<StatementEntry[]> {\n const { core, pub } = getClients()\n const { data: movs } = await pub.from('financial_movements').select('*')\n .eq('bank_account_id', query.bankAccountId).eq('status', 'paid')\n .gte('payment_date', query.dateRange.from).lte('payment_date', query.dateRange.to)\n .order('payment_date')\n\n const { data: account } = await pub.from('bank_accounts').select('initial_balance').eq('id', query.bankAccountId).single()\n let balance = account?.initial_balance ?? 0\n\n return (movs ?? []).map((r: any) => {\n const mov = snakeToCamel(r) as unknown as FinancialMovement\n if (mov.direction === 'credit') balance += mov.paidAmount\n else balance -= mov.paidAmount\n return { movement: mov, runningBalance: balance }\n })\n },\n\n // --- Summary ---\n async getSummary(dateRange?: DateRange): Promise<FinancialSummary> {\n // Sweep overdue on first load (background, non-blocking)\n sweepOverdue()\n const { core, pub } = getClients()\n const { data: accounts } = await pub.from('bank_accounts').select('current_balance').eq('is_active', true)\n const totalBalance = (accounts ?? []).reduce((s: number, a: any) => s + (a.current_balance ?? 0), 0)\n\n const { data: movs } = await pub.from('financial_movements').select('direction, movement_kind, amount, paid_amount, status, due_date, payment_date')\n const allMovs = movs ?? []\n const unpaid = allMovs.filter((m: any) => ['pending', 'partial', 'overdue'].includes(m.status))\n const today = new Date().toISOString().slice(0, 10)\n\n const unpaidCredit = unpaid.filter((m: any) => m.direction === 'credit')\n const unpaidDebit = unpaid.filter((m: any) => m.direction === 'debit')\n const overdueCredit = unpaidCredit.filter((m: any) => m.status === 'overdue' || m.due_date < today)\n const overdueDebit = unpaidDebit.filter((m: any) => m.status === 'overdue' || m.due_date < today)\n\n const monthStart = today.slice(0, 7) + '-01'\n const monthPaid = allMovs.filter((m: any) => m.status === 'paid' && m.payment_date >= monthStart)\n\n return {\n totalBalance,\n totalReceivable: unpaidCredit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n totalPayable: unpaidDebit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n monthlyInflow: monthPaid.filter((m: any) => m.direction === 'credit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n monthlyOutflow: monthPaid.filter((m: any) => m.direction === 'debit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n overdueReceivableCount: overdueCredit.length,\n overdueReceivableAmount: overdueCredit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n overduePayableCount: overdueDebit.length,\n overduePayableAmount: overdueDebit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n }\n },\n }\n\n return provider\n}\n","import { createStore, type StoreApi } from 'zustand/vanilla'\nimport { dedup } from '@fayz-ai/saas'\nimport { toast } from '@fayz-ai/ui'\nimport type { FinancialDataProvider } from './data/types'\nimport type {\n Invoice, FinancialMovement, BankAccount, CashSession,\n PaymentMethod, PaymentMethodType, CardTransaction,\n FinancialSummary, StatementEntry,\n InvoiceQuery, MovementQuery, StatementQuery,\n CreateInvoiceInput, PayMovementInput,\n OpenCashSessionInput, CloseCashSessionInput,\n DateRange,\n} from './types'\n\n// ---------------------------------------------------------------------------\n// Store state\n// ---------------------------------------------------------------------------\n\nexport interface FinancialUIState {\n // Data cache\n invoices: Invoice[]\n invoicesTotal: number\n invoicesLoading: boolean\n invoiceQuery: InvoiceQuery\n\n movements: FinancialMovement[]\n movementsTotal: number\n movementsLoading: boolean\n\n bankAccounts: BankAccount[]\n bankAccountsLoading: boolean\n\n cashSessions: CashSession[]\n cashSessionsLoading: boolean\n\n paymentMethods: PaymentMethod[]\n paymentMethodTypes: PaymentMethodType[]\n\n summary: FinancialSummary | null\n summaryLoading: boolean\n\n statementEntries: StatementEntry[]\n statementLoading: boolean\n\n cardTransactions: CardTransaction[]\n cardsLoading: boolean\n\n // Actions\n fetchSummary(dateRange?: DateRange): Promise<void>\n fetchInvoices(query: InvoiceQuery): Promise<void>\n fetchBankAccounts(): Promise<void>\n fetchCashSessions(bankAccountId?: string): Promise<void>\n fetchPaymentMethods(): Promise<void>\n fetchStatement(query: StatementQuery): Promise<void>\n fetchCardTransactions(dateRange?: DateRange): Promise<void>\n createInvoice(input: CreateInvoiceInput): Promise<Invoice>\n payMovement(input: PayMovementInput): Promise<void>\n cancelInvoice(invoiceId: string): Promise<void>\n openCashSession(input: OpenCashSessionInput): Promise<CashSession>\n closeCashSession(input: CloseCashSessionInput): Promise<CashSession>\n}\n\n// ---------------------------------------------------------------------------\n// Store factory\n// ---------------------------------------------------------------------------\n\nexport function createFinancialStore(provider: FinancialDataProvider): StoreApi<FinancialUIState> {\n return createStore<FinancialUIState>((set, get) => ({\n invoices: [],\n invoicesTotal: 0,\n invoicesLoading: false,\n invoiceQuery: {},\n\n movements: [],\n movementsTotal: 0,\n movementsLoading: false,\n\n bankAccounts: [],\n bankAccountsLoading: false,\n\n cashSessions: [],\n cashSessionsLoading: false,\n\n paymentMethods: [],\n paymentMethodTypes: [],\n\n summary: null,\n summaryLoading: false,\n\n statementEntries: [],\n statementLoading: false,\n\n cardTransactions: [],\n cardsLoading: false,\n\n async fetchSummary(dateRange) {\n return dedup('fin:summary', async () => {\n set({ summaryLoading: true })\n const summary = await provider.getSummary(dateRange)\n set({ summary, summaryLoading: false })\n })\n },\n\n async fetchInvoices(query) {\n return dedup('fin:invoices:' + JSON.stringify(query), async () => {\n set({ invoicesLoading: true, invoiceQuery: query })\n const result = await provider.getInvoices(query)\n set({ invoices: result.data, invoicesTotal: result.total, invoicesLoading: false })\n })\n },\n\n async fetchBankAccounts() {\n return dedup('fin:bankAccounts', async () => {\n set({ bankAccountsLoading: true })\n const bankAccounts = await provider.getBankAccounts()\n set({ bankAccounts, bankAccountsLoading: false })\n })\n },\n\n async fetchCashSessions(bankAccountId) {\n return dedup('fin:cashSessions:' + (bankAccountId ?? ''), async () => {\n set({ cashSessionsLoading: true })\n const cashSessions = await provider.getCashSessions(bankAccountId)\n set({ cashSessions, cashSessionsLoading: false })\n })\n },\n\n async fetchPaymentMethods() {\n return dedup('fin:paymentMethods', async () => {\n const [paymentMethods, paymentMethodTypes] = await Promise.all([\n provider.getPaymentMethods(),\n provider.getPaymentMethodTypes(),\n ])\n set({ paymentMethods, paymentMethodTypes })\n })\n },\n\n async fetchStatement(query) {\n return dedup('fin:statement:' + JSON.stringify(query), async () => {\n set({ statementLoading: true })\n const statementEntries = await provider.getStatement(query)\n set({ statementEntries, statementLoading: false })\n })\n },\n\n async fetchCardTransactions(dateRange) {\n return dedup('fin:cards', async () => {\n set({ cardsLoading: true })\n const cardTransactions = await provider.getCardTransactions(dateRange)\n set({ cardTransactions, cardsLoading: false })\n })\n },\n\n async createInvoice(input) {\n try {\n const invoice = await provider.createInvoice(input)\n const query = get().invoiceQuery\n const result = await provider.getInvoices(query)\n const summary = await provider.getSummary()\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Invoice created')\n return invoice\n } catch (err: any) {\n toast.error('Failed to create invoice', { description: err?.message })\n throw err\n }\n },\n\n async payMovement(input) {\n try {\n await provider.payMovement(input)\n const query = get().invoiceQuery\n const [result, summary] = await Promise.all([provider.getInvoices(query), provider.getSummary()])\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Payment recorded')\n } catch (err: any) {\n toast.error('Failed to record payment', { description: err?.message })\n throw err\n }\n },\n\n async cancelInvoice(invoiceId) {\n try {\n await provider.cancelInvoice(invoiceId)\n const query = get().invoiceQuery\n const [result, summary] = await Promise.all([provider.getInvoices(query), provider.getSummary()])\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Invoice cancelled')\n } catch (err: any) {\n toast.error('Failed to cancel invoice', { description: err?.message })\n throw err\n }\n },\n\n async openCashSession(input) {\n try {\n const session = await provider.openCashSession(input)\n const cashSessions = await provider.getCashSessions()\n set({ cashSessions })\n toast.success('Cash session opened')\n return session\n } catch (err: any) {\n toast.error('Failed to open session', { description: err?.message })\n throw err\n }\n },\n\n async closeCashSession(input) {\n try {\n const session = await provider.closeCashSession(input)\n const cashSessions = await provider.getCashSessions()\n set({ cashSessions })\n toast.success('Cash session closed')\n return session\n } catch (err: any) {\n toast.error('Failed to close session', { description: err?.message })\n throw err\n }\n },\n }))\n}\n","import type { PluginRegistryDef } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Payment Method Types (seeded — Cash, PIX, Credit Card, etc.)\n// ---------------------------------------------------------------------------\n\nconst paymentMethodTypeEntity: EntityDef = {\n name: 'Payment Type',\n namePlural: 'Payment Types',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'transactionType', label: 'Transaction Type', type: 'select', options: ['cash', 'credit_card', 'debit_card', 'pix', 'bank_transfer', 'check', 'voucher'], showInTable: true, required: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'payment_method_types', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Payment Methods (user-created — e.g. \"Visa 2x\", \"PIX Store\")\n// ---------------------------------------------------------------------------\n\nconst paymentMethodEntity: EntityDef = {\n name: 'Payment Method',\n namePlural: 'Payment Methods',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'paymentMethodTypeId', label: 'Type', type: 'select', options: ['cash', 'credit_card', 'debit_card', 'pix', 'bank_transfer', 'check'], showInTable: true, required: true },\n { key: 'discountValue', label: 'Discount %', type: 'number', showInTable: true },\n { key: 'interestValue', label: 'Interest %', type: 'number', showInTable: true },\n { key: 'minInstallments', label: 'Min Installments', type: 'number', defaultValue: 1 },\n { key: 'maxInstallments', label: 'Max Installments', type: 'number', defaultValue: 1, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'payment_methods', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Chart of Accounts (tree structure)\n// ---------------------------------------------------------------------------\n\nconst chartOfAccountsEntity: EntityDef = {\n name: 'Ledger Account',\n namePlural: 'Chart of Accounts',\n icon: 'BookOpen',\n displayField: 'name',\n defaultSort: 'code',\n fields: [\n { key: 'code', label: 'Code', type: 'text', required: true, showInTable: true },\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'nodeType', label: 'Type', type: 'select', options: ['group', 'leaf'], showInTable: true, required: true, defaultValue: 'leaf' },\n { key: 'parentId', label: 'Parent', type: 'text', showInTable: false },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'chart_of_accounts', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Cost Centers\n// ---------------------------------------------------------------------------\n\nconst costCenterEntity: EntityDef = {\n name: 'Cost Center',\n namePlural: 'Cost Centers',\n icon: 'Target',\n displayField: 'name',\n defaultSort: 'code',\n fields: [\n { key: 'code', label: 'Code', type: 'text', required: true, showInTable: true },\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'cost_centers', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Bank Accounts (physical cash, bank, credit card, digital wallet)\n// ---------------------------------------------------------------------------\n\nconst bankAccountEntity: EntityDef = {\n name: 'Bank Account',\n namePlural: 'Bank Accounts',\n icon: 'Landmark',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'accountType', label: 'Type', type: 'select', options: [\n { label: 'Bank Account', value: 'bank_account' },\n { label: 'Cash Register', value: 'cash_register' },\n { label: 'Credit Card', value: 'credit_card' },\n { label: 'Digital Wallet', value: 'digital_wallet' },\n ], showInTable: true, required: true },\n { key: 'bankName', label: 'Bank', type: 'text', showInTable: true },\n { key: 'accountNumber', label: 'Account Number', type: 'text' },\n { key: 'agencyNumber', label: 'Agency', type: 'text' },\n { key: 'initialBalance', label: 'Initial Balance', type: 'currency', defaultValue: 0 },\n { key: 'creditLimit', label: 'Credit Limit', type: 'currency' },\n { key: 'closingDay', label: 'Closing Day', type: 'number' },\n { key: 'dueDay', label: 'Due Day', type: 'number' },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'bank_accounts', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Card Brands (seeded)\n// ---------------------------------------------------------------------------\n\nconst cardBrandEntity: EntityDef = {\n name: 'Card Brand',\n namePlural: 'Card Brands',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'card_brands', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Commission Rules\n// ---------------------------------------------------------------------------\n\nconst commissionRuleEntity: EntityDef = {\n name: 'Commission Rule',\n namePlural: 'Commission Rules',\n icon: 'TrendingUp',\n displayField: 'name',\n defaultSort: 'priority',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'priority', label: 'Priority', type: 'number', required: true, showInTable: true, defaultValue: 1 },\n { key: 'valueType', label: 'Type', type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true, defaultValue: 'percentage' },\n { key: 'value', label: 'Value', type: 'number', required: true, showInTable: true },\n { key: 'description', label: 'Description', type: 'textarea' },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'commission_rules', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Price Tables\n// ---------------------------------------------------------------------------\n\nconst priceTableEntity: EntityDef = {\n name: 'Price Table',\n namePlural: 'Price Tables',\n icon: 'Tag',\n displayField: 'description',\n defaultSort: 'createdAt',\n defaultSortDir: 'desc',\n fields: [\n { key: 'description', label: 'Description', type: 'text', required: true, showInTable: true },\n { key: 'type', label: 'Type', type: 'select', options: ['sale', 'cost'], required: true, showInTable: true, defaultValue: 'sale' },\n { key: 'validFrom', label: 'Valid From', type: 'date', showInTable: true },\n { key: 'validUntil', label: 'Valid Until', type: 'date', showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'price_tables', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Price Variations\n// ---------------------------------------------------------------------------\n\nconst priceVariationEntity: EntityDef = {\n name: 'Price Variation',\n namePlural: 'Price Variations',\n icon: 'Percent',\n displayField: 'name',\n defaultSort: 'createdAt',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'variationType', label: 'Type', type: 'select', options: ['discount', 'increase'], required: true, showInTable: true },\n { key: 'valueType', label: 'Value Type', type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true },\n { key: 'value', label: 'Value', type: 'number', required: true, showInTable: true },\n { key: 'firstAppointmentOnly', label: 'First Appointment Only', type: 'boolean', defaultValue: false },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'price_variations', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Export all registries\n// ---------------------------------------------------------------------------\n\nexport const financialRegistries: PluginRegistryDef[] = [\n // --- Editable registries (user manages) ---\n {\n id: 'payment-methods',\n entity: paymentMethodEntity,\n icon: 'Wallet',\n description: 'Configured payment methods with fees and installment rules',\n display: 'table',\n },\n {\n id: 'chart-of-accounts',\n entity: chartOfAccountsEntity,\n icon: 'BookOpen',\n description: 'Hierarchical chart of accounts for categorizing transactions',\n display: 'tree',\n seedData: [\n { id: 'coa-1', code: '1', name: 'Revenue', nodeType: 'group', isActive: true },\n { id: 'coa-1.1', code: '1.1', name: 'Sales Revenue', nodeType: 'group', parentId: 'coa-1', isActive: true },\n { id: 'coa-1.1.01', code: '1.1.01', name: 'Services', nodeType: 'leaf', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-1.1.02', code: '1.1.02', name: 'Products', nodeType: 'leaf', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-2', code: '2', name: 'Other Revenue', nodeType: 'group', isActive: true },\n { id: 'coa-2.1', code: '2.1', name: 'Financial Income', nodeType: 'leaf', parentId: 'coa-2', isActive: true },\n { id: 'coa-3', code: '3', name: 'Operational Costs', nodeType: 'group', isActive: true },\n { id: 'coa-3.1', code: '3.1', name: 'Materials & Supplies', nodeType: 'group', parentId: 'coa-3', isActive: true },\n { id: 'coa-3.1.01', code: '3.1.01', name: 'Raw Materials', nodeType: 'leaf', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-3.1.02', code: '3.1.02', name: 'Consumables', nodeType: 'leaf', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-4', code: '4', name: 'Expenses', nodeType: 'group', isActive: true },\n { id: 'coa-4.1', code: '4.1', name: 'Rent', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.2', code: '4.2', name: 'Utilities', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.3', code: '4.3', name: 'Payroll', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n ],\n },\n {\n id: 'cost-centers',\n entity: costCenterEntity,\n icon: 'Target',\n description: 'Cost centers for expense tracking and departmental budgets',\n display: 'table',\n seedData: [\n { id: 'cc-001', code: '001', name: 'General', isActive: true },\n ],\n },\n {\n id: 'bank-accounts',\n entity: bankAccountEntity,\n icon: 'Landmark',\n description: 'Bank accounts, cash registers, credit cards, and digital wallets',\n display: 'table',\n },\n {\n id: 'commission-rules',\n entity: commissionRuleEntity,\n icon: 'TrendingUp',\n description: 'Commission rules for service and product revenue sharing',\n display: 'table',\n },\n {\n id: 'price-tables',\n entity: priceTableEntity,\n icon: 'Tag',\n description: 'Price tables for sale and cost pricing',\n display: 'table',\n },\n {\n id: 'price-variations',\n entity: priceVariationEntity,\n icon: 'Percent',\n description: 'Discount and surcharge rules for pricing',\n display: 'table',\n },\n // --- Read-only registries (system / seeded data) ---\n {\n id: 'payment-method-types',\n entity: paymentMethodTypeEntity,\n icon: 'CreditCard',\n description: 'System payment types (cash, card, PIX, etc.)',\n display: 'table',\n readOnly: true,\n seedData: [\n { id: 'pmt-cash', name: 'Cash', transactionType: 'cash', isActive: true },\n { id: 'pmt-pix', name: 'PIX', transactionType: 'pix', isActive: true },\n { id: 'pmt-credit', name: 'Credit Card', transactionType: 'credit_card', isActive: true },\n { id: 'pmt-debit', name: 'Debit Card', transactionType: 'debit_card', isActive: true },\n { id: 'pmt-transfer', name: 'Bank Transfer', transactionType: 'bank_transfer', isActive: true },\n { id: 'pmt-check', name: 'Check', transactionType: 'check', isActive: true },\n ],\n },\n {\n id: 'card-brands',\n entity: cardBrandEntity,\n icon: 'CreditCard',\n description: 'Credit and debit card brands',\n display: 'table',\n readOnly: true,\n seedData: [\n { id: 'cb-visa', name: 'Visa', isActive: true },\n { id: 'cb-mastercard', name: 'Mastercard', isActive: true },\n { id: 'cb-amex', name: 'American Express', isActive: true },\n { id: 'cb-elo', name: 'Elo', isActive: true },\n { id: 'cb-hipercard', name: 'Hipercard', isActive: true },\n { id: 'cb-diners', name: 'Diners Club', isActive: true },\n { id: 'cb-discover', name: 'Discover', isActive: true },\n { id: 'cb-jcb', name: 'JCB', isActive: true },\n { id: 'cb-aura', name: 'Aura', isActive: true },\n { id: 'cb-hiper', name: 'Hiper', isActive: true },\n ],\n },\n]\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const en: Record<string, string> = {\n \"financial.cards.installment\": \"Installment {{current}}/{{total}}\",\n \"financial.cards.noTransactions\": \"No card transactions\",\n \"financial.cards.pending\": \"Pending\",\n \"financial.cards.received\": \"Received\",\n \"financial.cards.subtitle\": \"Credit and debit card transactions\",\n \"financial.cards.title\": \"Cards\",\n \"financial.cards.transactions\": \"({{count}} transactions)\",\n \"financial.cards.transactionsAppear\": \"Card transactions will appear here when payments are made via credit/debit cards\",\n \"financial.cashRegisters.addNotes\": \"Add notes\",\n \"financial.cashRegisters.back\": \"Back\",\n \"financial.cashRegisters.bills\": \"Bills\",\n \"financial.cashRegisters.closeSession\": \"Close Session\",\n \"financial.cashRegisters.closeThisSession\": \"Close this session\",\n \"financial.cashRegisters.closing\": \"Closing...\",\n \"financial.cashRegisters.closingBalance\": \"Closing Balance\",\n \"financial.cashRegisters.closingNotes\": \"Closing Notes\",\n \"financial.cashRegisters.coins\": \"Coins\",\n \"financial.cashRegisters.confirmOpen\": \"Confirm & Open\",\n \"financial.cashRegisters.confirmOpening\": \"Confirm Cash Opening\",\n \"financial.cashRegisters.count\": \"Count\",\n \"financial.cashRegisters.countBills\": \"Count Bills & Coins\",\n \"financial.cashRegisters.countedTotal\": \"Counted Total\",\n \"financial.cashRegisters.denominationCount\": \"Denomination count\",\n \"financial.cashRegisters.differenceFromOpening\": \"Difference from opening\",\n \"financial.cashRegisters.method\": \"Method\",\n \"financial.cashRegisters.noCashAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cashRegisters.noClosedSessions\": \"No closed sessions yet\",\n \"financial.cashRegisters.openAnother\": \"Open another register\",\n \"financial.cashRegisters.openSession\": \"Open Session\",\n \"financial.cashRegisters.openSessions\": \"Open Sessions\",\n \"financial.cashRegisters.opened\": \"Opened\",\n \"financial.cashRegisters.opening\": \"Opening...\",\n \"financial.cashRegisters.openingBalance\": \"Opening Balance\",\n \"financial.cashRegisters.quickAmount\": \"Quick Amount\",\n \"financial.cashRegisters.register\": \"Register\",\n \"financial.cashRegisters.sessionHistory\": \"Session History\",\n \"financial.cashRegisters.subtitle\": \"Open, count and close cash sessions\",\n \"financial.commissions.comingSoon\": \"Coming soon\",\n \"financial.commissions.subtitle\": \"Team commissions\",\n \"financial.invoice.accountsPayable\": \"Accounts Payable\",\n \"financial.invoice.accountsReceivable\": \"Accounts Receivable\",\n \"financial.invoice.cancelConfirm\": \"This action cannot be undone.\",\n \"financial.invoice.cancelDesc\": \"The invoice will be marked as cancelled. All pending installments will also be cancelled. This invoice will no longer count towards totals.\",\n \"financial.invoice.cancelInvoice\": \"Cancel Invoice\",\n \"financial.invoice.cancelling\": \"Cancelling...\",\n \"financial.invoice.contact\": \"Contact\",\n \"financial.invoice.createFirst\": \"Create your first invoice\",\n \"financial.invoice.date\": \"Date\",\n \"financial.invoice.booking\": \"Booking\",\n \"financial.invoice.discount\": \"Discount\",\n \"financial.invoice.due\": \"Due:\",\n \"financial.invoice.edit\": \"Edit Invoice\",\n \"financial.invoice.fullyPaid\": \"Fully paid\",\n \"financial.invoice.installments\": \"Installments\",\n \"financial.invoice.invoices\": \"{{count}} invoices\",\n \"financial.invoice.items\": \"Items\",\n \"financial.invoice.keepInvoice\": \"Keep Invoice\",\n \"financial.invoice.new\": \"New\",\n \"financial.invoice.noDetails\": \"No additional details recorded\",\n \"financial.invoice.noInstallments\": \"No installments\",\n \"financial.invoice.noInvoices\": \"No invoices yet\",\n \"financial.invoice.summaryTotal\": \"Total\",\n \"financial.invoice.summaryReceived\": \"Received\",\n \"financial.invoice.summaryReceivable\": \"Receivable\",\n \"financial.invoice.summaryPaid\": \"Paid\",\n \"financial.invoice.summaryPayable\": \"Payable\",\n \"financial.invoice.notFound\": \"Invoice not found\",\n \"financial.invoice.notFoundDesc\": \"This invoice could not be loaded.\",\n \"financial.invoice.notes\": \"Notes\",\n \"financial.invoice.paidLabel\": \"Paid:\",\n \"financial.invoice.paidOn\": \"Paid on:\",\n \"financial.invoice.pay\": \"Pay\",\n \"financial.invoice.paymentSchedule\": \"Payment Schedule\",\n \"financial.invoice.remaining\": \"Remaining:\",\n \"financial.invoice.searchPlaceholder\": \"Search by contact or description...\",\n \"financial.invoice.showing\": \"Showing {{shown}} of {{total}}\",\n \"financial.invoice.subtotal\": \"Subtotal\",\n \"financial.invoice.surcharge\": \"Surcharge\",\n \"financial.invoice.total\": \"Total\",\n \"financial.invoice.yesCancel\": \"Yes, Cancel\",\n \"financial.invoiceForm.addFirstItem\": \"Add your first item\",\n \"financial.invoiceForm.addItem\": \"Add Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Add items first\",\n \"financial.invoiceForm.additionalNotes\": \"Additional notes...\",\n \"financial.invoiceForm.cancel\": \"Cancel\",\n \"financial.invoiceForm.close\": \"Close\",\n \"financial.invoiceForm.creating\": \"Creating new invoice\",\n \"financial.invoiceForm.date\": \"Date\",\n \"financial.invoiceForm.description\": \"Description\",\n \"financial.invoiceForm.discountSurcharge\": \"Discount / Surcharge\",\n \"financial.invoiceForm.done\": \"Done\",\n \"financial.invoiceForm.editing\": \"Editing invoice\",\n \"financial.invoiceForm.fiscalNumber\": \"Fiscal Number (optional)\",\n \"financial.invoiceForm.headquarters\": \"Headquarters\",\n \"financial.invoiceForm.installments\": \"Installments\",\n \"financial.invoiceForm.item\": \"Item\",\n \"financial.invoiceForm.itemDescription\": \"Item description\",\n \"financial.invoiceForm.items\": \"Items\",\n \"financial.invoiceForm.noDescription\": \"No description\",\n \"financial.invoiceForm.noItems\": \"No items added yet\",\n \"financial.invoiceForm.noUnitsFound\": \"No units found\",\n \"financial.invoiceForm.observations\": \"Observations\",\n \"financial.invoiceForm.payTo\": \"Pay to\",\n \"financial.invoiceForm.qty\": \"Qty\",\n \"financial.invoiceForm.receiveFrom\": \"Receive from\",\n \"financial.invoiceForm.save\": \"Save\",\n \"financial.invoiceForm.saving\": \"Saving...\",\n \"financial.invoiceForm.searchType\": \"Type to search...\",\n \"financial.invoiceForm.searchUnit\": \"Search unit...\",\n \"financial.invoiceForm.selectInstallments\": \"Select installment count above\",\n \"financial.invoiceForm.selectItemType\": \"Select item type:\",\n \"financial.invoiceForm.selectUnit\": \"Select unit\",\n \"financial.invoiceForm.selectUnitTitle\": \"Select Unit\",\n \"financial.invoiceForm.unit\": \"Unit\",\n \"financial.invoiceForm.unitPrice\": \"Unit Price\",\n \"financial.nav.cards\": \"Cards\",\n \"financial.nav.cashRegisters\": \"Cash Registers\",\n \"financial.nav.commissions\": \"Commissions\",\n \"financial.nav.list\": \"List\",\n \"financial.nav.new\": \"New\",\n \"financial.nav.overview\": \"Overview\",\n \"financial.nav.payables\": \"Accounts Payable\",\n \"financial.nav.receivables\": \"Accounts Receivable\",\n \"financial.nav.reconciliation\": \"Reconciliation\",\n \"financial.nav.recurringExpenses\": \"Recurring Expenses\",\n \"financial.nav.rules\": \"Rules\",\n \"financial.nav.statements\": \"Statements\",\n \"financial.nav.summary\": \"Summary\",\n \"financial.onboarding.back\": \"Back\",\n \"financial.onboarding.configureHint\": \"You can configure this in detail from the Settings gear icon inside the Financial module.\",\n \"financial.onboarding.getStarted\": \"Get Started\",\n \"financial.onboarding.next\": \"Next\",\n \"financial.onboarding.startUsing\": \"Start using Financial\",\n \"financial.onboarding.skip\": \"Skip setup\",\n \"financial.onboarding.welcome\": \"Welcome to Financial\",\n \"financial.onboarding.description\": \"Let's set up your financial module. This quick wizard will help you configure the essentials.\",\n \"financial.onboarding.accounts.title\": \"Bank Accounts\",\n \"financial.onboarding.accounts.description\": \"Add your bank accounts, cash registers, and credit cards. You can always add more later from Settings.\",\n \"financial.onboarding.payments.title\": \"Payment Methods\",\n \"financial.onboarding.payments.description\": \"Review which payment types you accept. Default types (Cash, PIX, Credit Card, etc.) are already set up.\",\n \"financial.onboarding.chart.title\": \"Chart of Accounts\",\n \"financial.onboarding.chart.description\": \"A default chart of accounts template has been created. You can customize it anytime from Settings.\",\n \"financial.page.newPayable\": \"New Payable\",\n \"financial.page.newPayableDesc\": \"Record an expense or bill to pay\",\n \"financial.page.newReceivable\": \"New Receivable\",\n \"financial.page.newReceivableDesc\": \"Record income or amount to receive\",\n \"financial.page.openCash\": \"Open Cash Register\",\n \"financial.page.openCashDesc\": \"Start a new cash session\",\n \"financial.page.settingsSubtitle\": \"Preferences, payment methods, and accounts\",\n \"financial.page.settingsTitle\": \"Financial Settings\",\n \"financial.payment.amount\": \"Amount\",\n \"financial.payment.bankAccount\": \"Bank Account\",\n \"financial.payment.cancel\": \"Cancel\",\n \"financial.payment.card\": \"Card\",\n \"financial.payment.cardBrand\": \"Card Brand\",\n \"financial.payment.cardInstallments\": \"Installments\",\n \"financial.payment.date\": \"Date\",\n \"financial.payment.installment\": \"Installment #{{number}}\",\n \"financial.payment.method\": \"Payment Method\",\n \"financial.payment.notes\": \"Notes\",\n \"financial.payment.optionalNotes\": \"Optional notes...\",\n \"financial.payment.payAmount\": \"Pay {{amount}}\",\n \"financial.payment.processing\": \"Processing...\",\n \"financial.payment.remaining\": \"{{amount}} remaining\",\n \"financial.payment.select\": \"Select...\",\n \"financial.payment.selectAccount\": \"Select account...\",\n \"financial.payment.selectBrand\": \"Select brand...\",\n \"financial.payment.title\": \"Record Payment\",\n \"financial.settings.allowPartial\": \"Allow partial payments\",\n \"financial.settings.allowPartialDesc\": \"Accept payments less than the full installment amount\",\n \"financial.settings.autoClose\": \"Auto-close at end of day\",\n \"financial.settings.autoCloseDesc\": \"Remind to close open sessions at the end of business hours\",\n \"financial.settings.autoInstallments\": \"Auto-generate installments\",\n \"financial.settings.autoInstallmentsDesc\": \"Automatically split invoice total into equal installments\",\n \"financial.settings.cashRegister\": \"Cash Register\",\n \"financial.settings.cashRegisterDesc\": \"Cash session behavior\",\n \"financial.settings.dailySummary\": \"Daily financial summary\",\n \"financial.settings.dailySummaryDesc\": \"Send a daily email summary of receivables and payables\",\n \"financial.settings.invoices\": \"Invoices\",\n \"financial.settings.invoicesDesc\": \"How invoices and payments are handled\",\n \"financial.settings.notifications\": \"Notifications\",\n \"financial.settings.notificationsDesc\": \"Alerts and reminders\",\n \"financial.settings.overdueAlerts\": \"Overdue payment alerts\",\n \"financial.settings.overdueAlertsDesc\": \"Notify when invoices pass their due date\",\n \"financial.settings.requireDoc\": \"Require document number\",\n \"financial.settings.requireDocDesc\": \"Make document/invoice number mandatory on payments\",\n \"financial.settings.requireOpening\": \"Require opening balance\",\n \"financial.settings.requireOpeningDesc\": \"Opening balance must be confirmed before starting a session\",\n \"financial.settingsPage.subtitle\": \"Manage payment methods, accounts, and configurations\",\n \"financial.settingsPage.title\": \"Financial Settings\",\n \"financial.payment.noMethods\": \"No payment methods configured.\",\n \"financial.payment.configureMethods\": \"Set up payment methods\",\n \"financial.statements.account\": \"Account\",\n \"financial.statements.from\": \"From\",\n \"financial.statements.noTransactions\": \"No transactions in this period\",\n \"financial.statements.selectAccount\": \"Select an account to view statement\",\n \"financial.statements.selectToView\": \"Select an account to view statement\",\n \"financial.statements.subtitle\": \"Bank account transactions and balances\",\n \"financial.statements.title\": \"Statements\",\n \"financial.statements.to\": \"To\",\n \"financial.summary.allAccounts\": \"All accounts\",\n \"financial.summary.cashFlow\": \"Cash Flow\",\n \"financial.summary.cashFlowBreakdown\": \"Cash Flow Breakdown\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Receivables vs. payables this month\",\n \"financial.summary.cashFlowSubtitle\": \"Monthly income vs expenses\",\n \"financial.summary.expenses\": \"Expenses\",\n \"financial.summary.income\": \"Income\",\n \"financial.summary.monthlyFlow\": \"Monthly Flow\",\n \"financial.summary.negativeBalance\": \"Negative balance\",\n \"financial.summary.net\": \"Net\",\n \"financial.summary.noOverdue\": \"No overdue transactions\",\n \"financial.summary.noTransactions\": \"No transactions yet\",\n \"financial.summary.overdue\": \"{{count}} overdue\",\n \"financial.summary.overduePayable\": \"Overdue payable\",\n \"financial.summary.overdueReceivable\": \"Overdue receivable\",\n \"financial.summary.overdueTitle\": \"Overdue\",\n \"financial.summary.paid\": \"Paid\",\n \"financial.summary.payable\": \"Payable\",\n \"financial.summary.positiveBalance\": \"Positive balance\",\n \"financial.summary.receivable\": \"Receivable\",\n \"financial.summary.received\": \"Received\",\n \"financial.summary.recentTransactions\": \"Recent Transactions\",\n \"financial.summary.totalBalance\": \"Total Balance\",\n \"financial.summary.transactionsAppear\": \"Transactions will appear here once recorded\",\n \"financial.summary.viewAll\": \"View all\",\n \"financial.quickActions.newPayable\": \"New Payable\",\n \"financial.quickActions.newPayableDesc\": \"Record an expense or bill to pay\",\n \"financial.quickActions.newReceivable\": \"New Receivable\",\n \"financial.quickActions.newReceivableDesc\": \"Record income or amount to receive\",\n \"financial.quickActions.openCashRegister\": \"Open Cash Register\",\n \"financial.quickActions.openCashRegisterDesc\": \"Start a new cash session\",\n \"financial.cash.title\": \"Cash Registers\",\n \"financial.cash.subtitle\": \"Open, count and close cash sessions\",\n \"financial.cash.bills\": \"Bills\",\n \"financial.cash.coins\": \"Coins\",\n \"financial.cash.noAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cash.confirmOpening\": \"Confirm Cash Opening\",\n \"financial.cash.register\": \"Register\",\n \"financial.cash.openingBalance\": \"Opening Balance\",\n \"financial.cash.method\": \"Method\",\n \"financial.cash.denominationCount\": \"Denomination count\",\n \"financial.cash.notes\": \"Notes\",\n \"financial.cash.opening\": \"Opening...\",\n \"financial.cash.confirmAndOpen\": \"Confirm & Open\",\n \"financial.cash.quickAmount\": \"Quick Amount\",\n \"financial.cash.countBillsCoins\": \"Count Bills & Coins\",\n \"financial.cash.count\": \"Count\",\n \"financial.cash.countedTotal\": \"Counted Total\",\n \"financial.cash.addNotes\": \"Add notes\",\n \"financial.cash.openingObservations\": \"Opening observations...\",\n \"financial.cash.openSession\": \"Open Session\",\n \"financial.cash.closingBalance\": \"Closing Balance\",\n \"financial.cash.differenceFromOpening\": \"Difference from opening\",\n \"financial.cash.closingNotes\": \"Closing Notes\",\n \"financial.cash.closingObservations\": \"Closing observations...\",\n \"financial.cash.closing\": \"Closing...\",\n \"financial.cash.closeSession\": \"Close Session\",\n \"financial.cash.openSessions\": \"Open Sessions\",\n \"financial.cash.opened\": \"Opened\",\n \"financial.cash.by\": \"by\",\n \"financial.cash.closeThisSession\": \"Close this session\",\n \"financial.cash.sessionHistory\": \"Session History\",\n \"financial.cash.noClosedSessions\": \"No closed sessions yet\",\n \"financial.cash.openLabel\": \"Open\",\n \"financial.cash.closeLabel\": \"Close\",\n \"financial.cash.diff\": \"Diff\",\n \"financial.cash.openAnother\": \"Open another register\",\n \"financial.invoice.statusOpen\": \"Open\",\n \"financial.invoice.statusPartial\": \"Partial\",\n \"financial.invoice.statusPaid\": \"Paid\",\n \"financial.invoice.statusOverdue\": \"Overdue\",\n \"financial.invoice.statusCancelled\": \"Cancelled\",\n \"financial.invoice.statusPending\": \"Pending\",\n \"financial.invoice.statusDraft\": \"Draft\",\n \"financial.invoice.columnDate\": \"Date\",\n \"financial.invoice.columnDescription\": \"Description\",\n \"financial.invoice.columnAmount\": \"Amount\",\n \"financial.invoice.columnPaid\": \"Paid\",\n \"financial.invoice.columnStatus\": \"Status\",\n \"financial.invoice.columnInst\": \"Inst.\",\n \"financial.invoice.columnQty\": \"Qty\",\n \"financial.invoice.columnUnitPrice\": \"Unit Price\",\n \"financial.invoice.columnTotal\": \"Total\",\n \"financial.invoice.columnNumber\": \"#\",\n \"financial.invoice.invoice\": \"Invoice\",\n \"financial.invoice.loading\": \"Loading...\",\n \"financial.invoiceForm.cancelInvoice\": \"Cancel Invoice\",\n \"financial.invoiceForm.cancelConfirm\": \"This action cannot be undone.\",\n \"financial.invoiceForm.cancelDesc\": \"The invoice will be marked as cancelled. All pending installments will also be cancelled.\",\n \"financial.invoiceForm.keepInvoice\": \"Keep Invoice\",\n \"financial.invoiceForm.yesCancel\": \"Yes, Cancel\",\n \"financial.invoiceForm.cancelling\": \"Cancelling...\",\n \"financial.invoiceForm.removeAdjustments\": \"Remove adjustments\",\n \"financial.invoiceForm.discount\": \"Discount\",\n \"financial.invoiceForm.surcharge\": \"Surcharge\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Account\",\n \"financial.payment.due\": \"Due:\",\n \"financial.payment.paidAmount\": \"Paid:\",\n \"financial.payment.paidOn\": \"Paid on:\",\n \"financial.title\": \"Financial\",\n \"financial.summary.title\": \"Financial Summary\",\n \"financial.summary.revenue\": \"Revenue\",\n \"financial.invoice.title\": \"Invoices\",\n \"financial.invoice.create\": \"New Invoice\",\n \"financial.invoice.number\": \"Invoice #\",\n \"financial.invoice.client\": \"Client\",\n \"financial.invoice.amount\": \"Amount\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Due Date\",\n \"financial.invoice.addItem\": \"Add Item\",\n \"financial.invoice.tax\": \"Tax\",\n \"financial.invoice.save\": \"Save Invoice\",\n \"financial.invoice.saving\": \"Saving...\",\n \"financial.invoice.markPaid\": \"Mark as Paid\",\n \"financial.invoice.sendReminder\": \"Send Reminder\",\n \"financial.receivable.title\": \"Accounts Receivable\",\n \"financial.payable.title\": \"Accounts Payable\",\n \"financial.statements.loading\": \"Loading...\",\n \"financial.cards.empty\": \"No card transactions yet\",\n \"financial.commissions.title\": \"Commissions\",\n \"financial.cashRegister.title\": \"Cash Register\",\n \"financial.cashRegister.open\": \"Open Register\",\n \"financial.cashRegister.close\": \"Close Register\",\n \"financial.movements.title\": \"Movements\",\n \"financial.bankAccounts.title\": \"Bank Accounts\",\n \"financial.settings.title\": \"Financial Settings\",\n}\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const ptBR: Record<string, string> = {\n \"financial.cards.installment\": \"Parcela {{current}}/{{total}}\",\n \"financial.cards.noTransactions\": \"Nenhuma transação com cartão\",\n \"financial.cards.pending\": \"Pendente\",\n \"financial.cards.received\": \"Recebido\",\n \"financial.cards.subtitle\": \"Transações de cartão de crédito e débito\",\n \"financial.cards.title\": \"Cartões\",\n \"financial.cards.transactions\": \"({{count}} transações)\",\n \"financial.cards.transactionsAppear\": \"As transações com cartão aparecerão aqui quando pagamentos forem feitos via cartão de crédito/débito\",\n \"financial.cashRegisters.addNotes\": \"Adicionar observações\",\n \"financial.cashRegisters.back\": \"Voltar\",\n \"financial.cashRegisters.bills\": \"Notas\",\n \"financial.cashRegisters.closeSession\": \"Fechar Sessão\",\n \"financial.cashRegisters.closeThisSession\": \"Fechar esta sessão\",\n \"financial.cashRegisters.closing\": \"Fechando...\",\n \"financial.cashRegisters.closingBalance\": \"Saldo de Fechamento\",\n \"financial.cashRegisters.closingNotes\": \"Observações de Fechamento\",\n \"financial.cashRegisters.coins\": \"Moedas\",\n \"financial.cashRegisters.confirmOpen\": \"Confirmar e Abrir\",\n \"financial.cashRegisters.confirmOpening\": \"Confirmar Abertura do Caixa\",\n \"financial.cashRegisters.count\": \"Contagem\",\n \"financial.cashRegisters.countBills\": \"Contar Notas e Moedas\",\n \"financial.cashRegisters.countedTotal\": \"Total Contado\",\n \"financial.cashRegisters.denominationCount\": \"Contagem por denominação\",\n \"financial.cashRegisters.differenceFromOpening\": \"Diferença em relação à abertura\",\n \"financial.cashRegisters.method\": \"Método\",\n \"financial.cashRegisters.noCashAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cashRegisters.noClosedSessions\": \"Nenhuma sessão encerrada ainda\",\n \"financial.cashRegisters.openAnother\": \"Abrir outro caixa\",\n \"financial.cashRegisters.openSession\": \"Abrir Sessão\",\n \"financial.cashRegisters.openSessions\": \"Sessões Abertas\",\n \"financial.cashRegisters.opened\": \"Aberto\",\n \"financial.cashRegisters.opening\": \"Abrindo...\",\n \"financial.cashRegisters.openingBalance\": \"Saldo de Abertura\",\n \"financial.cashRegisters.quickAmount\": \"Valor Rápido\",\n \"financial.cashRegisters.register\": \"Caixa\",\n \"financial.cashRegisters.sessionHistory\": \"Histórico de Sessões\",\n \"financial.cashRegisters.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.commissions.comingSoon\": \"Em breve\",\n \"financial.commissions.subtitle\": \"Comissões da equipe\",\n \"financial.invoice.accountsPayable\": \"Contas a Pagar\",\n \"financial.invoice.accountsReceivable\": \"Contas a Receber\",\n \"financial.invoice.cancelConfirm\": \"Esta ação não pode ser desfeita.\",\n \"financial.invoice.cancelDesc\": \"A fatura será marcada como cancelada. Todas as parcelas pendentes também serão canceladas. Esta fatura não contará mais nos totais.\",\n \"financial.invoice.cancelInvoice\": \"Cancelar Fatura\",\n \"financial.invoice.cancelling\": \"Cancelando...\",\n \"financial.invoice.contact\": \"Contato\",\n \"financial.invoice.createFirst\": \"Crie sua primeira fatura\",\n \"financial.invoice.date\": \"Data\",\n \"financial.invoice.booking\": \"Agendamento\",\n \"financial.invoice.discount\": \"Desconto\",\n \"financial.invoice.due\": \"Vencimento:\",\n \"financial.invoice.edit\": \"Editar Fatura\",\n \"financial.invoice.fullyPaid\": \"Totalmente pago\",\n \"financial.invoice.installments\": \"Parcelas\",\n \"financial.invoice.invoices\": \"{{count}} faturas\",\n \"financial.invoice.items\": \"Itens\",\n \"financial.invoice.keepInvoice\": \"Manter Fatura\",\n \"financial.invoice.new\": \"Nova\",\n \"financial.invoice.noDetails\": \"Nenhum detalhe adicional registrado\",\n \"financial.invoice.noInstallments\": \"Sem parcelas\",\n \"financial.invoice.noInvoices\": \"Nenhuma fatura ainda\",\n \"financial.invoice.summaryTotal\": \"Total\",\n \"financial.invoice.summaryReceived\": \"Recebido\",\n \"financial.invoice.summaryReceivable\": \"A Receber\",\n \"financial.invoice.summaryPaid\": \"Pago\",\n \"financial.invoice.summaryPayable\": \"A Pagar\",\n \"financial.invoice.notFound\": \"Fatura não encontrada\",\n \"financial.invoice.notFoundDesc\": \"Esta fatura não pôde ser carregada.\",\n \"financial.invoice.notes\": \"Observações\",\n \"financial.invoice.paidLabel\": \"Pago:\",\n \"financial.invoice.paidOn\": \"Pago em:\",\n \"financial.invoice.pay\": \"Pagar\",\n \"financial.invoice.paymentSchedule\": \"Cronograma de Pagamento\",\n \"financial.invoice.remaining\": \"Restante:\",\n \"financial.invoice.searchPlaceholder\": \"Buscar por contato ou descrição...\",\n \"financial.invoice.showing\": \"Exibindo {{shown}} de {{total}}\",\n \"financial.invoice.subtotal\": \"Subtotal\",\n \"financial.invoice.surcharge\": \"Acréscimo\",\n \"financial.invoice.total\": \"Total\",\n \"financial.invoice.yesCancel\": \"Sim, Cancelar\",\n \"financial.invoiceForm.addFirstItem\": \"Adicione seu primeiro item\",\n \"financial.invoiceForm.addItem\": \"Adicionar Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Adicione itens primeiro\",\n \"financial.invoiceForm.additionalNotes\": \"Observações adicionais...\",\n \"financial.invoiceForm.cancel\": \"Cancelar\",\n \"financial.invoiceForm.close\": \"Fechar\",\n \"financial.invoiceForm.creating\": \"Criando nova fatura\",\n \"financial.invoiceForm.date\": \"Data\",\n \"financial.invoiceForm.description\": \"Descrição\",\n \"financial.invoiceForm.discountSurcharge\": \"Desconto / Acréscimo\",\n \"financial.invoiceForm.done\": \"Pronto\",\n \"financial.invoiceForm.editing\": \"Editando fatura\",\n \"financial.invoiceForm.fiscalNumber\": \"Número Fiscal (opcional)\",\n \"financial.invoiceForm.headquarters\": \"Sede\",\n \"financial.invoiceForm.installments\": \"Parcelas\",\n \"financial.invoiceForm.item\": \"Item\",\n \"financial.invoiceForm.itemDescription\": \"Descrição do item\",\n \"financial.invoiceForm.items\": \"Itens\",\n \"financial.invoiceForm.noDescription\": \"Sem descrição\",\n \"financial.invoiceForm.noItems\": \"Nenhum item adicionado ainda\",\n \"financial.invoiceForm.noUnitsFound\": \"Nenhuma unidade encontrada\",\n \"financial.invoiceForm.observations\": \"Observações\",\n \"financial.invoiceForm.payTo\": \"Pagar para\",\n \"financial.invoiceForm.qty\": \"Qtd\",\n \"financial.invoiceForm.receiveFrom\": \"Receber de\",\n \"financial.invoiceForm.save\": \"Salvar\",\n \"financial.invoiceForm.saving\": \"Salvando...\",\n \"financial.invoiceForm.searchType\": \"Digite para buscar...\",\n \"financial.invoiceForm.searchUnit\": \"Buscar unidade...\",\n \"financial.invoiceForm.selectInstallments\": \"Selecione a quantidade de parcelas acima\",\n \"financial.invoiceForm.selectItemType\": \"Selecione o tipo do item:\",\n \"financial.invoiceForm.selectUnit\": \"Selecionar unidade\",\n \"financial.invoiceForm.selectUnitTitle\": \"Selecionar Unidade\",\n \"financial.invoiceForm.unit\": \"Unidade\",\n \"financial.invoiceForm.unitPrice\": \"Preço Unitário\",\n \"financial.nav.cards\": \"Cartões\",\n \"financial.nav.cashRegisters\": \"Caixas\",\n \"financial.nav.commissions\": \"Comissões\",\n \"financial.nav.list\": \"Lista\",\n \"financial.nav.new\": \"Novo\",\n \"financial.nav.overview\": \"Visão Geral\",\n \"financial.nav.payables\": \"Contas a Pagar\",\n \"financial.nav.receivables\": \"Contas a Receber\",\n \"financial.nav.reconciliation\": \"Conciliação\",\n \"financial.nav.recurringExpenses\": \"Despesas Recorrentes\",\n \"financial.nav.rules\": \"Regras\",\n \"financial.nav.statements\": \"Extratos\",\n \"financial.nav.summary\": \"Resumo\",\n \"financial.onboarding.back\": \"Voltar\",\n \"financial.onboarding.configureHint\": \"Você pode configurar isso em detalhes pelo ícone de Configurações dentro do módulo Financeiro.\",\n \"financial.onboarding.getStarted\": \"Começar\",\n \"financial.onboarding.next\": \"Próximo\",\n \"financial.onboarding.startUsing\": \"Começar a usar o Financeiro\",\n \"financial.onboarding.skip\": \"Pular configuração\",\n \"financial.onboarding.welcome\": \"Bem-vindo ao Financeiro\",\n \"financial.onboarding.description\": \"Vamos configurar seu módulo financeiro. Este assistente rápido ajudará a configurar o essencial.\",\n \"financial.onboarding.accounts.title\": \"Contas Bancárias\",\n \"financial.onboarding.accounts.description\": \"Adicione suas contas bancárias, caixas registradoras e cartões de crédito. Você pode adicionar mais depois em Configurações.\",\n \"financial.onboarding.payments.title\": \"Métodos de Pagamento\",\n \"financial.onboarding.payments.description\": \"Revise os tipos de pagamento que você aceita. Os tipos padrão (Dinheiro, PIX, Cartão de Crédito, etc.) já estão configurados.\",\n \"financial.onboarding.chart.title\": \"Plano de Contas\",\n \"financial.onboarding.chart.description\": \"Um modelo padrão de plano de contas foi criado. Você pode personalizá-lo a qualquer momento em Configurações.\",\n \"financial.page.newPayable\": \"Nova Conta a Pagar\",\n \"financial.page.newPayableDesc\": \"Registrar uma despesa ou conta a pagar\",\n \"financial.page.newReceivable\": \"Nova Conta a Receber\",\n \"financial.page.newReceivableDesc\": \"Registrar receita ou valor a receber\",\n \"financial.page.openCash\": \"Abrir Caixa\",\n \"financial.page.openCashDesc\": \"Iniciar uma nova sessão de caixa\",\n \"financial.page.settingsSubtitle\": \"Preferências, métodos de pagamento e contas\",\n \"financial.page.settingsTitle\": \"Configurações Financeiras\",\n \"financial.payment.amount\": \"Valor\",\n \"financial.payment.bankAccount\": \"Conta Bancária\",\n \"financial.payment.cancel\": \"Cancelar\",\n \"financial.payment.card\": \"Cartão\",\n \"financial.payment.cardBrand\": \"Bandeira do Cartão\",\n \"financial.payment.cardInstallments\": \"Parcelas\",\n \"financial.payment.date\": \"Data\",\n \"financial.payment.installment\": \"Parcela #{{number}}\",\n \"financial.payment.method\": \"Método de Pagamento\",\n \"financial.payment.notes\": \"Observações\",\n \"financial.payment.optionalNotes\": \"Observações opcionais...\",\n \"financial.payment.payAmount\": \"Pagar {{amount}}\",\n \"financial.payment.processing\": \"Processando...\",\n \"financial.payment.remaining\": \"{{amount}} restante\",\n \"financial.payment.select\": \"Selecionar...\",\n \"financial.payment.selectAccount\": \"Selecionar conta...\",\n \"financial.payment.selectBrand\": \"Selecionar bandeira...\",\n \"financial.payment.title\": \"Registrar Pagamento\",\n \"financial.settings.allowPartial\": \"Permitir pagamentos parciais\",\n \"financial.settings.allowPartialDesc\": \"Aceitar pagamentos menores que o valor total da parcela\",\n \"financial.settings.autoClose\": \"Fechamento automático no fim do dia\",\n \"financial.settings.autoCloseDesc\": \"Lembrar de fechar sessões abertas no fim do expediente\",\n \"financial.settings.autoInstallments\": \"Gerar parcelas automaticamente\",\n \"financial.settings.autoInstallmentsDesc\": \"Dividir automaticamente o total da fatura em parcelas iguais\",\n \"financial.settings.cashRegister\": \"Caixa Registradora\",\n \"financial.settings.cashRegisterDesc\": \"Comportamento da sessão de caixa\",\n \"financial.settings.dailySummary\": \"Resumo financeiro diário\",\n \"financial.settings.dailySummaryDesc\": \"Enviar um resumo diário por e-mail de contas a receber e a pagar\",\n \"financial.settings.invoices\": \"Faturas\",\n \"financial.settings.invoicesDesc\": \"Como faturas e pagamentos são processados\",\n \"financial.settings.notifications\": \"Notificações\",\n \"financial.settings.notificationsDesc\": \"Alertas e lembretes\",\n \"financial.settings.overdueAlerts\": \"Alertas de pagamento atrasado\",\n \"financial.settings.overdueAlertsDesc\": \"Notificar quando faturas passarem da data de vencimento\",\n \"financial.settings.requireDoc\": \"Exigir número do documento\",\n \"financial.settings.requireDocDesc\": \"Tornar obrigatório o número do documento/fatura nos pagamentos\",\n \"financial.settings.requireOpening\": \"Exigir saldo de abertura\",\n \"financial.settings.requireOpeningDesc\": \"O saldo de abertura deve ser confirmado antes de iniciar uma sessão\",\n \"financial.settingsPage.subtitle\": \"Gerenciar métodos de pagamento, contas e configurações\",\n \"financial.settingsPage.title\": \"Configurações Financeiras\",\n \"financial.payment.noMethods\": \"Nenhuma forma de pagamento configurada.\",\n \"financial.payment.configureMethods\": \"Configurar formas de pagamento\",\n \"financial.statements.account\": \"Conta\",\n \"financial.statements.from\": \"De\",\n \"financial.statements.noTransactions\": \"Sem transações neste período\",\n \"financial.statements.selectAccount\": \"Selecione uma conta para ver o extrato\",\n \"financial.statements.selectToView\": \"Selecione uma conta para ver o extrato\",\n \"financial.statements.subtitle\": \"Transações e saldos de contas bancárias\",\n \"financial.statements.title\": \"Extratos\",\n \"financial.statements.to\": \"Até\",\n \"financial.summary.allAccounts\": \"Todas as contas\",\n \"financial.summary.cashFlow\": \"Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdown\": \"Detalhamento do Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Contas a receber vs. contas a pagar neste mês\",\n \"financial.summary.cashFlowSubtitle\": \"Receitas vs despesas mensais\",\n \"financial.summary.expenses\": \"Despesas\",\n \"financial.summary.income\": \"Receita\",\n \"financial.summary.monthlyFlow\": \"Fluxo Mensal\",\n \"financial.summary.negativeBalance\": \"Saldo negativo\",\n \"financial.summary.net\": \"Líquido\",\n \"financial.summary.noOverdue\": \"Nenhuma transação atrasada\",\n \"financial.summary.noTransactions\": \"Nenhuma transação ainda\",\n \"financial.summary.overdue\": \"{{count}} atrasados\",\n \"financial.summary.overduePayable\": \"Conta a pagar atrasada\",\n \"financial.summary.overdueReceivable\": \"Conta a receber atrasada\",\n \"financial.summary.overdueTitle\": \"Atrasados\",\n \"financial.summary.paid\": \"Pago\",\n \"financial.summary.payable\": \"A Pagar\",\n \"financial.summary.positiveBalance\": \"Saldo positivo\",\n \"financial.summary.receivable\": \"A Receber\",\n \"financial.summary.received\": \"Recebido\",\n \"financial.summary.recentTransactions\": \"Transações Recentes\",\n \"financial.summary.totalBalance\": \"Saldo Total\",\n \"financial.summary.transactionsAppear\": \"As transações aparecerão aqui após serem registradas\",\n \"financial.summary.viewAll\": \"Ver todos\",\n \"financial.quickActions.newPayable\": \"Nova Conta a Pagar\",\n \"financial.quickActions.newPayableDesc\": \"Registrar uma despesa ou conta a pagar\",\n \"financial.quickActions.newReceivable\": \"Nova Conta a Receber\",\n \"financial.quickActions.newReceivableDesc\": \"Registrar receita ou valor a receber\",\n \"financial.quickActions.openCashRegister\": \"Abrir Caixa\",\n \"financial.quickActions.openCashRegisterDesc\": \"Iniciar uma nova sessão de caixa\",\n \"financial.cash.title\": \"Caixa Registradora\",\n \"financial.cash.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.cash.bills\": \"Notas\",\n \"financial.cash.coins\": \"Moedas\",\n \"financial.cash.noAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cash.confirmOpening\": \"Confirmar Abertura de Caixa\",\n \"financial.cash.register\": \"Caixa\",\n \"financial.cash.openingBalance\": \"Saldo de Abertura\",\n \"financial.cash.method\": \"Método\",\n \"financial.cash.denominationCount\": \"Contagem de cédulas\",\n \"financial.cash.notes\": \"Observações\",\n \"financial.cash.opening\": \"Abrindo...\",\n \"financial.cash.confirmAndOpen\": \"Confirmar e Abrir\",\n \"financial.cash.quickAmount\": \"Valor Rápido\",\n \"financial.cash.countBillsCoins\": \"Contar Cédulas e Moedas\",\n \"financial.cash.count\": \"Contar\",\n \"financial.cash.countedTotal\": \"Total Contado\",\n \"financial.cash.addNotes\": \"Adicionar observações\",\n \"financial.cash.openingObservations\": \"Observações de abertura...\",\n \"financial.cash.openSession\": \"Abrir Sessão\",\n \"financial.cash.closingBalance\": \"Saldo de Fechamento\",\n \"financial.cash.differenceFromOpening\": \"Diferença da abertura\",\n \"financial.cash.closingNotes\": \"Observações de Fechamento\",\n \"financial.cash.closingObservations\": \"Observações de fechamento...\",\n \"financial.cash.closing\": \"Fechando...\",\n \"financial.cash.closeSession\": \"Fechar Sessão\",\n \"financial.cash.openSessions\": \"Sessões Abertas\",\n \"financial.cash.opened\": \"Aberto\",\n \"financial.cash.by\": \"por\",\n \"financial.cash.closeThisSession\": \"Fechar esta sessão\",\n \"financial.cash.sessionHistory\": \"Histórico de Sessões\",\n \"financial.cash.noClosedSessions\": \"Nenhuma sessão fechada ainda\",\n \"financial.cash.openLabel\": \"Abertura\",\n \"financial.cash.closeLabel\": \"Fechamento\",\n \"financial.cash.diff\": \"Dif\",\n \"financial.cash.openAnother\": \"Abrir outro caixa\",\n \"financial.invoice.statusOpen\": \"Aberto\",\n \"financial.invoice.statusPartial\": \"Parcial\",\n \"financial.invoice.statusPaid\": \"Pago\",\n \"financial.invoice.statusOverdue\": \"Vencido\",\n \"financial.invoice.statusCancelled\": \"Cancelado\",\n \"financial.invoice.statusPending\": \"Pendente\",\n \"financial.invoice.statusDraft\": \"Rascunho\",\n \"financial.invoice.columnDate\": \"Data\",\n \"financial.invoice.columnDescription\": \"Descrição\",\n \"financial.invoice.columnAmount\": \"Valor\",\n \"financial.invoice.columnPaid\": \"Pago\",\n \"financial.invoice.columnStatus\": \"Status\",\n \"financial.invoice.columnInst\": \"Parc.\",\n \"financial.invoice.columnQty\": \"Qtd\",\n \"financial.invoice.columnUnitPrice\": \"Preço Unit.\",\n \"financial.invoice.columnTotal\": \"Total\",\n \"financial.invoice.columnNumber\": \"#\",\n \"financial.invoice.invoice\": \"Fatura\",\n \"financial.invoice.loading\": \"Carregando...\",\n \"financial.invoiceForm.cancelInvoice\": \"Cancelar Fatura\",\n \"financial.invoiceForm.cancelConfirm\": \"Esta ação não pode ser desfeita.\",\n \"financial.invoiceForm.cancelDesc\": \"A fatura será marcada como cancelada. Todas as parcelas pendentes também serão canceladas.\",\n \"financial.invoiceForm.keepInvoice\": \"Manter Fatura\",\n \"financial.invoiceForm.yesCancel\": \"Sim, Cancelar\",\n \"financial.invoiceForm.cancelling\": \"Cancelando...\",\n \"financial.invoiceForm.removeAdjustments\": \"Remover ajustes\",\n \"financial.invoiceForm.discount\": \"Desconto\",\n \"financial.invoiceForm.surcharge\": \"Acréscimo\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Conta\",\n \"financial.payment.due\": \"Venc.:\",\n \"financial.payment.paidAmount\": \"Pago:\",\n \"financial.payment.paidOn\": \"Pago em:\",\n \"financial.title\": \"Financeiro\",\n \"financial.summary.title\": \"Resumo Financeiro\",\n \"financial.summary.revenue\": \"Receita\",\n \"financial.invoice.title\": \"Faturas\",\n \"financial.invoice.create\": \"Nova Fatura\",\n \"financial.invoice.number\": \"Fatura #\",\n \"financial.invoice.client\": \"Cliente\",\n \"financial.invoice.amount\": \"Valor\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Vencimento\",\n \"financial.invoice.addItem\": \"Adicionar Item\",\n \"financial.invoice.tax\": \"Imposto\",\n \"financial.invoice.save\": \"Salvar Fatura\",\n \"financial.invoice.saving\": \"Salvando...\",\n \"financial.invoice.markPaid\": \"Marcar como Pago\",\n \"financial.invoice.sendReminder\": \"Enviar Lembrete\",\n \"financial.receivable.title\": \"Contas a Receber\",\n \"financial.payable.title\": \"Contas a Pagar\",\n \"financial.statements.loading\": \"Carregando...\",\n \"financial.cards.empty\": \"Nenhuma transação de cartão ainda\",\n \"financial.commissions.title\": \"Comissões\",\n \"financial.cashRegister.title\": \"Caixa\",\n \"financial.cashRegister.open\": \"Abrir Caixa\",\n \"financial.cashRegister.close\": \"Fechar Caixa\",\n \"financial.movements.title\": \"Movimentações\",\n \"financial.bankAccounts.title\": \"Contas Bancárias\",\n \"financial.settings.title\": \"Configurações Financeiras\",\n}\n","import { en } from './en'\nimport { ptBR } from './pt-BR'\n\nexport const financialLocales: Record<string, Record<string, string>> = {\n en,\n 'pt-BR': ptBR,\n}\n","import React from 'react'\nimport type { PluginManifest, PluginScope, VerticalId } from '@fayz-ai/core'\nimport type { EntityLookupMap } from '@fayz-ai/saas'\nimport { FinancialPage } from './FinancialPage'\nimport { createFinancialDashboardWidgets } from './views/dashboardWidgets'\nimport type { ResolvedFinancialConfig } from './FinancialContext'\nimport type { FinancialDataProvider } from './data/types'\nimport { createMockFinancialProvider } from './data/mock'\nimport { createSupabaseFinancialProvider } from './data/supabase'\nimport { createSafeDataProvider, registerTranslations } from '@fayz-ai/core'\nimport { createFinancialStore } from './store'\n\n/**\n * Public: a lazy supabase-or-mock financial provider. Apps use this to share one\n * provider between the plugin and a cross-plugin bridge (e.g. agenda's financial\n * bridge in beauty-saas). Thin wrapper over the shared createSafeDataProvider.\n */\nexport function createSafeFinancialProvider(): FinancialDataProvider {\n return createSafeDataProvider(\n () => createSupabaseFinancialProvider(),\n () => createMockFinancialProvider(),\n )\n}\nimport { financialRegistries } from './registries'\nimport { financialLocales } from './locales'\nimport { FinancialGeneralSettings } from './components/FinancialGeneralSettings'\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface FinancialPluginLabels {\n pageTitle: string\n pageSubtitle: string\n summary: string\n payables: string\n payablesNew: string\n payablesList: string\n payablesRecurring: string\n receivables: string\n receivablesNew: string\n receivablesList: string\n cashRegisters: string\n statements: string\n commissions: string\n commissionsOverview: string\n commissionsRules: string\n cards: string\n cardsOverview: string\n cardsReconciliation: string\n}\n\nexport interface ItemTypeOption {\n value: string\n label: string\n icon?: string\n}\n\nexport interface FinancialPluginOptions {\n modules?: {\n payables?: boolean\n receivables?: boolean\n cashRegisters?: boolean\n statements?: boolean\n commissions?: boolean\n cards?: boolean\n }\n labels?: Partial<FinancialPluginLabels>\n currency?: {\n code?: string\n locale?: string\n symbol?: string\n }\n navPosition?: number\n navSection?: 'main' | 'secondary'\n scope?: PluginScope\n verticalId?: VerticalId\n\n /** Data provider. Defaults to mock (in-memory) if not supplied. */\n dataProvider?: FinancialDataProvider\n\n /** Available item types for invoice lines. Default: product + service + other */\n itemTypes?: ItemTypeOption[]\n\n /** Enable service execution tracking on invoice items (default: false) */\n enableServiceExecution?: boolean\n\n /** Contact entity config — which person kind to use */\n contactEntity?: { archetypeKind: string; label?: string }\n\n /** Seed payment method types for mock provider */\n paymentMethodTypes?: Array<{ name: string; transactionType?: string }>\n\n /** Business units / locations. Unit selector only shows when 2+ locations are provided. */\n locations?: Array<{ id: string; name: string; isHQ?: boolean }>\n\n /**\n * Entity lookups for cross-plugin references.\n * Keys match `itemTypes` values (e.g., 'product', 'service').\n * When a lookup is provided, item forms show a search selector for that type.\n * When absent, users type descriptions manually.\n */\n entityLookups?: EntityLookupMap\n\n /** Contact/person lookup for \"Pay to\" / \"Receive from\" fields. Queries persons archetype. */\n contactLookup?: import('@fayz-ai/saas').EntityLookup\n\n /** Callback when user clicks a booking link on an invoice. Receives the order ID. */\n onBookingClick?: (orderId: string) => void\n}\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_LABELS: FinancialPluginLabels = {\n pageTitle: 'Financial',\n pageSubtitle: 'Financial overview and cash flow management',\n summary: 'Summary',\n payables: 'Accounts Payable',\n payablesNew: 'New',\n payablesList: 'List',\n payablesRecurring: 'Recurring Expenses',\n receivables: 'Accounts Receivable',\n receivablesNew: 'New',\n receivablesList: 'List',\n cashRegisters: 'Cash Registers',\n statements: 'Statements',\n commissions: 'Commissions',\n commissionsOverview: 'Overview',\n commissionsRules: 'Rules',\n cards: 'Cards',\n cardsOverview: 'Overview',\n cardsReconciliation: 'Reconciliation',\n}\n\nconst DEFAULT_CURRENCY = { code: 'BRL', locale: 'pt-BR', symbol: 'R$' }\n\nconst DEFAULT_ITEM_TYPES: ItemTypeOption[] = [\n { value: 'service', label: 'Service', icon: 'Briefcase' },\n { value: 'product', label: 'Product', icon: 'Package' },\n { value: 'other', label: 'Other', icon: 'MoreHorizontal' },\n]\n\n// ---------------------------------------------------------------------------\n// Config resolver\n// ---------------------------------------------------------------------------\n\nfunction resolveConfig(options?: FinancialPluginOptions): ResolvedFinancialConfig {\n return {\n modules: {\n payables: options?.modules?.payables !== false,\n receivables: options?.modules?.receivables !== false,\n cashRegisters: options?.modules?.cashRegisters !== false,\n statements: options?.modules?.statements !== false,\n commissions: options?.modules?.commissions !== false,\n cards: options?.modules?.cards !== false,\n },\n labels: { ...DEFAULT_LABELS, ...options?.labels },\n currency: { ...DEFAULT_CURRENCY, ...options?.currency },\n itemTypes: options?.itemTypes ?? DEFAULT_ITEM_TYPES,\n enableServiceExecution: options?.enableServiceExecution ?? false,\n contactEntity: {\n archetypeKind: options?.contactEntity?.archetypeKind ?? 'client',\n label: options?.contactEntity?.label ?? 'Contact',\n },\n locations: options?.locations ?? [],\n entityLookups: options?.entityLookups ?? {},\n contactLookup: options?.contactLookup,\n onBookingClick: options?.onBookingClick,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function createFinancialPlugin(options?: FinancialPluginOptions): PluginManifest {\n const config = resolveConfig(options)\n registerTranslations(financialLocales)\n\n const provider = options?.dataProvider ?? createSafeFinancialProvider()\n const store = createFinancialStore(provider)\n const dashboardWidgets = createFinancialDashboardWidgets({ config, provider, store })\n\n const PageComponent: React.FC<any> = () =>\n React.createElement(FinancialPage, { config, provider, store, registries: financialRegistries })\n\n return {\n id: 'financial',\n name: config.labels.pageTitle,\n icon: 'DollarSign',\n version: '1.0.0',\n scope: options?.scope ?? 'universal',\n verticalId: options?.verticalId,\n defaultEnabled: true,\n dependencies: [],\n declaredFeatures: [\n { id: 'financial', label: config.labels.pageTitle, group: config.labels.pageTitle },\n ...(config.modules.receivables ? [{ id: 'financial.receivables', label: config.labels.receivables, group: config.labels.pageTitle }] : []),\n ...(config.modules.payables ? [{ id: 'financial.payables', label: config.labels.payables, group: config.labels.pageTitle }] : []),\n ...(config.modules.commissions ? [{ id: 'financial.commissions', label: config.labels.commissions, group: config.labels.pageTitle }] : []),\n ],\n navigation: [\n {\n section: options?.navSection ?? 'main',\n position: options?.navPosition ?? 6,\n label: config.labels.pageTitle,\n route: '/financial',\n icon: 'DollarSign',\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n routes: [\n {\n path: '/financial',\n component: PageComponent,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n widgets: [],\n dashboardWidgets,\n aiTools: [\n {\n id: 'financial.get-revenue',\n name: 'getRevenue',\n description: 'Returns revenue for the business in a given period.',\n icon: 'DollarSign',\n mode: 'read' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n period: { type: 'string' as const, description: 'today, week, month, or custom date range' },\n },\n },\n suggestions: [\n { label: 'How much did we make today?' },\n { label: \"What's this month's revenue?\" },\n { label: \"Compare this week's revenue to last week\" },\n ],\n },\n {\n id: 'financial.create-invoice',\n name: 'createInvoice',\n description: 'Creates a new invoice/payable for a contact.',\n icon: 'FileText',\n mode: 'persist' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n contact: { type: 'string' as const, description: 'Contact/customer name' },\n amount: { type: 'number' as const, description: 'Invoice amount' },\n description: { type: 'string' as const, description: 'Invoice description' },\n },\n required: ['contact', 'amount'],\n },\n suggestions: [\n { label: 'Create an invoice for a new client' },\n ],\n permission: { feature: 'financial', action: 'create' as const },\n },\n {\n id: 'financial.list-payables',\n name: 'listPayables',\n description: 'Lists outstanding payables/bills.',\n icon: 'FileDown',\n mode: 'read' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n status: { type: 'string' as const, enum: ['pending', 'overdue', 'paid'] },\n contact: { type: 'string' as const, description: 'Filter by contact name' },\n },\n },\n permission: { feature: 'financial', action: 'read' as const },\n suggestions: [\n { label: 'Show me overdue bills' },\n { label: 'What bills are due this week?' },\n ],\n },\n ],\n registries: financialRegistries,\n settings: [\n {\n id: 'financial',\n label: 'Financial',\n icon: 'DollarSign',\n component: (() => {\n const FinancialSettingsTab: React.FC = () =>\n React.createElement(FinancialGeneralSettings)\n FinancialSettingsTab.displayName = 'FinancialSettingsTab'\n return FinancialSettingsTab as unknown as React.ComponentType<unknown>\n })(),\n order: 10,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n locales: financialLocales,\n }\n}\n\n// Re-export types and factories for consumers\nexport type { FinancialDataProvider } from './data/types'\nexport type { ResolvedFinancialConfig } from './FinancialContext'\n"]}
1
+ {"version":3,"sources":["../src/FinancialContext.tsx","../src/views/SummaryView.tsx","../src/views/InvoiceListView.tsx","../src/views/InvoiceFormView.tsx","../src/components/PaymentModal.tsx","../src/views/InvoiceDetailView.tsx","../src/views/navReferrer.ts","../src/views/PayablesView.tsx","../src/views/ReceivablesView.tsx","../src/views/CashRegistersView.tsx","../src/components/TransferModal.tsx","../src/views/StatementsView.tsx","../src/views/CommissionsView.tsx","../src/views/CardsView.tsx","../src/views/ReconciliationView.tsx","../src/components/FinancialGeneralSettings.tsx","../src/components/FinancialOnboarding.tsx","../src/FinancialPage.tsx","../src/views/dashboardWidgets.tsx","../src/data/mock.ts","../src/data/supabase.ts","../src/store.ts","../src/registries.ts","../src/locales/en.ts","../src/locales/pt-BR.ts","../src/locales/index.ts","../src/components/PersonStatementWidget.tsx","../src/index.ts"],"names":["t","jsx","useTranslation","useState","useEffect","jsxs","SubpageHeader","Ban","useMemo","createPortal","X","CurrencyInput","DatePicker","Button","Check","CircleDashed","CircleEllipsis","CircleCheckBig","CircleAlert","useRef","Pencil","MoreVertical","FileText","PersonLink","Fragment","ChevronDown","CreditCard","Building2","ArrowRightLeft","Landmark","DataTable","toast","DollarSign","ctx","today","round2","now","createStore","React","PluginSettingsPanel"],"mappings":";;;;;;;;;;AAyCA,IAAM,GAAA,GAAM,oBAAsF,eAAe,CAAA;AAE1G,IAAM,2BAA2B,GAAA,CAAI,eAAA;AACrC,IAAM,qBAAqB,GAAA,CAAI,SAAA;AAC/B,IAAM,uBAAuB,GAAA,CAAI,WAAA;AACjC,IAAM,oBAAoB,GAAA,CAAI,QAAA;ACrC9B,SAAS,WAAA,GAAc;AAC5B,EAAA,uBAAO,GAAA,CAAC,mBAAgB,OAAA,EAAQ,aAAA,EAAc,QAAO,WAAA,EAAY,UAAA,EAAY,KAAA,EAAO,SAAA,EAAU,WAAA,EAAY,CAAA;AAC5G;ACDA,IAAM,cAAA,GAAuG;AAAA,EAC3G,EAAE,OAAO,MAAA,EAAQ,QAAA,EAAU,gCAAgC,KAAA,EAAO,wCAAA,EAA0C,MAAM,YAAA,EAAa;AAAA,EAC/H,EAAE,OAAO,SAAA,EAAW,QAAA,EAAU,mCAAmC,KAAA,EAAO,8CAAA,EAAgD,MAAM,cAAA,EAAe;AAAA,EAC7I,EAAE,OAAO,MAAA,EAAQ,QAAA,EAAU,gCAAgC,KAAA,EAAO,8CAAA,EAAgD,MAAM,cAAA,EAAe;AAAA,EACvI,EAAE,OAAO,SAAA,EAAW,QAAA,EAAU,mCAAmC,KAAA,EAAO,sDAAA,EAAwD,MAAM,WAAA,EAAY;AAAA,EAClJ,EAAE,OAAO,WAAA,EAAa,QAAA,EAAU,qCAAqC,KAAA,EAAO,gCAAA,EAAkC,MAAM,GAAA;AACtH,CAAA;AAEA,SAAS,WAAA,CAAY,EAAE,MAAA,EAAO,EAAuB;AACnD,EAAA,MAAMA,KAAI,cAAA,EAAe;AACzB,EAAA,MAAM,MAAM,cAAA,CAAe,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,MAAM,CAAA;AACzD,EAAA,MAAM,IAAA,GAAO,KAAK,IAAA,IAAQ,YAAA;AAC1B,EAAA,4BACG,MAAA,EAAA,EAAK,SAAA,EAAW,qFAAqF,GAAA,EAAK,KAAA,IAAS,gCAAgC,CAAA,CAAA,EAClJ,QAAA,EAAA;AAAA,oBAAAC,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,IAAE,GAAA;AAAA,IAAE,GAAA,GAAMD,EAAAA,CAAE,GAAA,CAAI,QAAQ,CAAA,GAAI;AAAA,GAAA,EAC5D,CAAA;AAEJ;AAEA,SAAS,kBAAkB,QAAA,EAAuF;AAChH,EAAA,MAAMA,KAAI,cAAA,EAAe;AACzB,EAAA,OAAO,QAAQ,MAAM;AAAA,IACnB;AAAA,MACE,WAAA,EAAa,cAAA;AAAA,MAAgB,MAAA,EAAQ,GAAA;AAAA,MAAK,IAAA,EAAM,GAAA;AAAA,MAChD,IAAA,EAAM,CAAC,EAAE,QAAA,EAAS,KAAM;AACtB,QAAA,MAAM,MAAM,QAAA,EAAS;AACrB,QAAA,OAAO,GAAA,mBAAM,IAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCAAA,EAA0C,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE;AAAA,SAAA,EAAI,oBAAUC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAwB,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,MAClI;AAAA,KACF;AAAA,IACA;AAAA,MACE,WAAA,EAAa,aAAA;AAAA,MAAe,MAAA,EAAQD,GAAE,8BAA8B,CAAA;AAAA,MACpE,IAAA,EAAM,CAAC,EAAE,QAAA,EAAS,qBAAMC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA,QAAA,EAAS,EAAY;AAAA,KAChG;AAAA,IACA;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MAAe,MAAA,EAAQD,GAAE,qCAAqC,CAAA;AAAA,MAClE,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,qBACX,IAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EACpC,QAAA,EAAA;AAAA,QAAA,GAAA,CAAI,QAAA,CAAS,8BACZC,GAAAA,CAAC,cAAW,QAAA,EAAU,GAAA,CAAI,QAAA,CAAS,SAAA,EAAW,IAAA,EAAM,GAAA,CAAI,SAAS,WAAA,EAAa,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,qBAAA,EAAsB,CAAA,mBAExHA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,aAAA,EAAc,QAAA,EAAA,QAAA,EAAC,CAAA;AAAA,QAE7B,GAAA,CAAI,QAAA,CAAS,YAAA,oBAAgBA,GAAAA,CAAC,OAAE,SAAA,EAAU,0DAAA,EAA4D,QAAA,EAAA,GAAA,CAAI,QAAA,CAAS,YAAA,EAAa;AAAA,OAAA,EACnI;AAAA,KAEJ;AAAA,IACA;AAAA,MACE,WAAA,EAAa,aAAA;AAAA,MAAe,MAAA,EAAQD,GAAE,gCAAgC,CAAA;AAAA,MAAG,aAAA,EAAe,IAAA;AAAA,MACxF,IAAA,EAAM,CAAC,EAAE,GAAA,uBACPC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,YAAA,EAAe,GAAA,CAAI,SAAS,MAAA,KAAW,WAAA,GAAc,uCAAuC,EAAE,CAAA,CAAA,EAC5G,yBAAe,GAAA,CAAI,QAAA,CAAS,WAAA,EAAa,QAAQ,CAAA,EACpD;AAAA,KAEJ;AAAA,IACA;AAAA,MACE,WAAA,EAAa,YAAA;AAAA,MAAc,MAAA,EAAQD,GAAE,8BAA8B,CAAA;AAAA,MACnE,IAAA,EAAM,CAAC,EAAE,GAAA,uBACPC,GAAAA,CAAC,UAAK,SAAA,EAAW,GAAA,CAAI,SAAS,MAAA,KAAW,WAAA,GAAc,uCAAuC,uBAAA,EAC3F,QAAA,EAAA,cAAA,CAAe,IAAI,QAAA,CAAS,UAAA,EAAY,QAAQ,CAAA,EACnD;AAAA,KAEJ;AAAA,IACA;AAAA,MACE,WAAA,EAAa,QAAA;AAAA,MAAU,MAAA,EAAQD,GAAE,gCAAgC,CAAA;AAAA,MACjE,IAAA,EAAM,CAAC,EAAE,QAAA,EAAS,qBAAMC,GAAAA,CAAC,WAAA,EAAA,EAAY,MAAA,EAAQ,QAAA,EAAS,EAAa;AAAA,KACrE;AAAA,IACA;AAAA,MACE,WAAA,EAAa,mBAAA;AAAA,MAAqB,MAAA,EAAQD,GAAE,8BAA8B,CAAA;AAAA,MAC1E,IAAA,EAAM,CAAC,EAAE,QAAA,EAAS,qBAAMC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,QAAA,EAAS,EAAY;AAAA;AACxF,GACF,EAAG,CAAC,QAAA,EAAUD,EAAC,CAAC,CAAA;AAClB;AAEO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,KAAA,EAAO,QAAO,EAIxD;AACD,EAAA,MAAMA,KAAI,cAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACpD,EAAsB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,aAAa;AAC9D,EAAA,MAAM,eAAA,GAAkB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,eAAe,CAAA;AAClE,EAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,aAAa,CAAA;AAE9D,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAI,QAAA,CAA0B,EAAE,CAAA;AAEpE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,aAAA,CAAc;AAAA,MACZ,SAAA;AAAA,MACA,MAAA,EAAQ,YAAA,CAAa,MAAA,GAAS,CAAA,GAAI,YAAA,GAAe,MAAA;AAAA,MACjD,QAAQ,MAAA,IAAU;AAAA,KACnB,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,SAAA,EAAW,YAAA,EAAc,MAAM,CAAC,CAAA;AAEpC,EAAA,MAAM,WAAW,QAAA,CAAS,MAAA,CAAO,CAAC,GAAA,KAAQ,GAAA,CAAI,cAAc,SAAS,CAAA;AACrE,EAAA,MAAM,YAAY,SAAA,KAAc,OAAA,GAAUA,GAAE,mCAAmC,CAAA,GAAIA,GAAE,sCAAsC,CAAA;AAC3H,EAAA,MAAM,OAAA,GAAU,kBAAkB,QAAQ,CAAA;AAC1C,EAAA,MAAM,IAAA,GAAO,OAAA;AAAA,IACX,MAAM,eAAe,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,KAAA,KAAU,WAAW,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,OAAO,CAAA,CAAE,KAAA,EAAO,OAAOA,EAAAA,CAAE,CAAA,CAAE,QAAQ,CAAA,EAAE,CAAE,CAAA;AAAA,IACjH,CAACA,EAAC;AAAA,GACJ;AAGA,EAAA,MAAM,OAAA,GAAU,QAAQ,MAAM;AAC5B,IAAA,IAAI,WAAA,GAAc,CAAA;AAClB,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,IAAI,UAAA,GAAa,CAAA;AACjB,IAAA,KAAA,MAAW,OAAO,QAAA,EAAU;AAC1B,MAAA,IAAI,GAAA,CAAI,WAAW,WAAA,EAAa;AAChC,MAAA,WAAA,IAAe,GAAA,CAAI,WAAA;AACnB,MAAA,UAAA,IAAc,GAAA,CAAI,UAAA;AAAA,IACpB;AACA,IAAA,UAAA,GAAa,WAAA,GAAc,UAAA;AAC3B,IAAA,OAAO,EAAE,WAAA,EAAa,UAAA,EAAY,UAAA,EAAW;AAAA,EAC/C,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,gBAAgB,SAAA,KAAc,OAAA,GAAUA,GAAE,+BAA+B,CAAA,GAAIA,GAAE,mCAAmC,CAAA;AACxH,EAAA,MAAM,eAAe,SAAA,KAAc,OAAA,GAAUA,GAAE,kCAAkC,CAAA,GAAIA,GAAE,qCAAqC,CAAA;AAE5H,EAAA,uBACE,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAC,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,SAAA;AAAA,QACP,UAAUD,EAAAA,CAAE,4BAAA,EAA8B,EAAE,KAAA,EAAO,QAAA,CAAS,QAAQ;AAAA;AAAA,KACtE;AAAA,oBACAC,GAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA;AAAA,QACA,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,eAAA;AAAA,QACT,iBAAA,EAAmBD,GAAE,qCAAqC,CAAA;AAAA,QAC1D,MAAA;AAAA,QACA,cAAA,EAAgB,SAAA;AAAA,QAChB,cAAA,EAAgB,CAAA;AAAA,QAChB,IAAA;AAAA,QACA,WAAW,YAAA,CAAa,MAAA,KAAW,CAAA,GAAI,YAAA,CAAa,CAAC,CAAA,GAAI,MAAA;AAAA,QACzD,WAAA,EAAa,CAAC,CAAA,KAAM,eAAA,CAAgB,IAAI,CAAC,CAAkB,CAAA,GAAI,EAAE,CAAA;AAAA,QACjE,QAAA,EAAUA,GAAE,uBAAuB,CAAA;AAAA,QACnC,KAAA;AAAA,QACA,UAAA,EAAY,CAAC,GAAA,KAAQ,MAAA,GAAS,IAAI,EAAE,CAAA;AAAA,QACpC,SAAA,EAAW,QAAA;AAAA,QACX,YAAA,EAAcA,GAAE,8BAA8B,CAAA;AAAA,QAC9C,gBAAA,EAAkB,KAAA,GAAQA,EAAAA,CAAE,+BAA+B,CAAA,GAAI,MAAA;AAAA,QAC/D,aAAA,EAAe;AAAA;AAAA,KACjB;AAAA,IACC,QAAA,CAAS,SAAS,CAAA,IAAK,CAAC,mCACvB,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,qFAAA,EACb,QAAA,EAAA;AAAA,sBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,gCAAgC,CAAA,EAAE,CAAA;AAAA,wBAC7EC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iBAAiB,QAAA,EAAA,cAAA,CAAe,OAAA,CAAQ,WAAA,EAAa,QAAQ,CAAA,EAAE;AAAA,OAAA,EACjF,CAAA;AAAA,sBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,sBACpC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,aAAA,EAAc,CAAA;AAAA,wBACvDA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA8B,QAAA,EAAA,cAAA,CAAe,OAAA,CAAQ,UAAA,EAAY,QAAQ,CAAA,EAAE;AAAA,OAAA,EAC7F,CAAA;AAAA,sBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EAAqB,CAAA;AAAA,sBACpC,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,wBACtDA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA8B,QAAA,EAAA,cAAA,CAAe,OAAA,CAAQ,UAAA,EAAY,QAAQ,CAAA,EAAE;AAAA,OAAA,EAC7F;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;ACzJA,SAAS,gBAAA,CAAiB,EAAE,SAAA,EAAW,KAAA,EAAO,UAAS,EAIpD;AACD,EAAA,MAAMD,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,SAAS,KAAK,CAAA;AACtC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,EAAE,CAAA;AACvC,EAAA,MAAM,GAAA,GAAM,OAAuB,IAAI,CAAA;AAEvC,EAAAC,UAAU,MAAM;AACd,IAAA,SAAS,QAAQ,CAAA,EAAe;AAC9B,MAAA,IAAI,GAAA,CAAI,OAAA,IAAW,CAAC,GAAA,CAAI,OAAA,CAAQ,SAAS,CAAA,CAAE,MAAc,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA;AAAA,IAC3E;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,OAAO,CAAA;AAC9C,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,OAAO,CAAA;AAAA,EAChE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAW,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,KAAK,CAAA;AACrD,EAAA,MAAM,WAAW,SAAA,CAAU,MAAA;AAAA,IAAO,CAAC,CAAA,KACjC,CAAC,MAAA,CAAO,IAAA,EAAK,IAAK,CAAA,CAAE,IAAA,CAAK,WAAA,EAAY,CAAE,QAAA,CAAS,MAAA,CAAO,aAAa;AAAA,GACtE;AAEA,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,WAAU,UAAA,EACvB,QAAA,EAAA;AAAA,oBAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,4BAA4B,CAAA,EAAE,CAAA;AAAA,oBAC9FK,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,OAAA,CAAQ,CAAC,IAAI,CAAA;AAAA,QAC5B,SAAA,EAAU,yLAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,0BAClEA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mBAAmB,QAAA,EAAA,QAAA,EAAU,IAAA,IAAQD,EAAAA,CAAE,kCAAkC,CAAA,EAAE,CAAA;AAAA,0BAC3FC,IAAC,WAAA,EAAA,EAAY,SAAA,EAAW,sDAAsD,IAAA,GAAO,YAAA,GAAe,EAAE,CAAA,CAAA,EAAI;AAAA;AAAA;AAAA,KAC5G;AAAA,IAEC,IAAA,oBACCI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oIAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,wBACrDA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,uCAAuC,CAAA,EAAE,CAAA;AAAA,wBACpFC,GAAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,MAAM,OAAA,CAAQ,KAAK,CAAA,EAAG,SAAA,EAAU,uDAC/C,QAAA,kBAAAA,GAAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,eAAc,CAAA,EAC7B;AAAA,OAAA,EACF,CAAA;AAAA,sBACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBACb,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0HAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,mCAAA,EAAoC,CAAA;AAAA,wBACtDA,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,SAAA,EAAS,IAAA;AAAA,YACT,KAAA,EAAO,MAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,SAAA,CAAU,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YACzC,WAAA,EAAaD,GAAE,kCAAkC,CAAA;AAAA,YACjD,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF,CAAA,EACF,CAAA;AAAA,sBACAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACZ,QAAA,EAAA;AAAA,QAAA,QAAA,CAAS,GAAA,CAAI,CAAC,GAAA,qBACbA,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,SAAS,MAAM;AAAE,cAAA,QAAA,CAAS,IAAI,EAAE,CAAA;AAAG,cAAA,OAAA,CAAQ,KAAK,CAAA;AAAG,cAAA,SAAA,CAAU,EAAE,CAAA;AAAA,YAAE,CAAA;AAAA,YACjE,WAAW,CAAA,yFAAA,EACT,GAAA,CAAI,EAAA,KAAO,KAAA,GAAQ,gBAAgB,EACrC,CAAA,CAAA;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,uEAAA,EACb,0BAAAA,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,+BAAA,EAAgC,CAAA,EACvD,CAAA;AAAA,8BACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8BAAA,EAAgC,cAAI,IAAA,EAAK,CAAA;AAAA,gBACrD,GAAA,CAAI,IAAA,oBAAQA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,mCAAA,EAAqC,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,CAAA,EAAE;AAAA,eAAA,EACzG;AAAA;AAAA,WAAA;AAAA,UAZK,GAAA,CAAI;AAAA,SAcZ,CAAA;AAAA,QACA,QAAA,CAAS,MAAA,KAAW,CAAA,oBACnBC,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qDAAA,EAAuD,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,CAAA,EAAE;AAAA,OAAA,EAEhH;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAMA,IAAI,MAAA,GAAS,CAAA;AACb,SAAS,GAAA,GAAc;AAAE,EAAA,OAAO,IAAI,MAAA,EAAQ,CAAA,CAAA;AAAG;AAU/C,SAAS,OAAA,CAAQ,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAW,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,QAAA,EAAU,aAAA,EAAe,gBAAA,EAAiB,EAY1H;AACD,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,KAAA,GAAQ,KAAK,QAAA,GAAW,IAAA,CAAK,aAAa,IAAA,CAAK,QAAA,IAAY,CAAA,CAAA,IAAM,IAAA,CAAK,SAAA,IAAa,CAAA,CAAA;AACzF,EAAA,MAAM,SAAA,GAAY,SAAA,CAAU,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,KAAA,KAAU,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,IAAS,IAAA,CAAK,QAAA;AACpF,EAAA,MAAM,kBAAkB,IAAA,CAAK,QAAA,IAAY,KAAK,CAAA,IAAA,CAAM,IAAA,CAAK,aAAa,CAAA,IAAK,CAAA;AAC3E,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIC,SAAS,cAAc,CAAA;AAGrE,EAAA,SAAS,mBAAmB,CAAA,EAAwB;AAClD,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAC,EAAE,QAAA,EAAU;AACpC,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,QAAA,EAAS;AAAA,IACX;AAAA,EACF;AAEA,EAAA,uBACEE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,4FAAA;AAAA,QACV,OAAA,EAAS,QAAA;AAAA,QAET,QAAA,EAAA;AAAA,0BAAAJ,IAAC,WAAA,EAAA,EAAY,SAAA,EAAW,+DAA+D,QAAA,GAAW,UAAA,GAAa,YAAY,CAAA,CAAA,EAAI,CAAA;AAAA,0BAC/HI,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4DAAA,EAA8D,QAAA,EAAA;AAAA,YAAA,KAAA,GAAQ,CAAA;AAAA,YAAE;AAAA,WAAA,EAAC,CAAA;AAAA,0BACzFJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iHACb,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,0BACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAA,EAAmC,eAAK,WAAA,oBAAeA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8BAAA,EAAgC,QAAA,EAAAD,EAAAA,CAAE,qCAAqC,GAAE,CAAA,EAAQ,CAAA;AAAA,0BACxKK,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAA,EAA0C,QAAA,EAAA;AAAA,YAAA,IAAA,CAAK,QAAA;AAAA,YAAS,KAAA;AAAA,YAAI,cAAA,CAAe,IAAA,CAAK,SAAA,EAAW,QAAQ;AAAA,WAAA,EAAE,CAAA;AAAA,UACpH,cAAA,oBAAkBJ,GAAAA,CAAC,GAAA,EAAA,EAAI,WAAU,+BAAA,EAAgC,CAAA;AAAA,0BAClEA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0DAA0D,QAAA,EAAA,cAAA,CAAe,KAAA,EAAO,QAAQ,CAAA,EAAE,CAAA;AAAA,0BAC1GA,GAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,gBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,gBAAA,QAAA,EAAS;AAAA,cAAE,CAAA;AAAA,cAClD,SAAA,EAAU,4GAAA;AAAA,cAEV,QAAA,kBAAAA,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAC9B;AAAA;AAAA,KACF;AAAA,IAGC,QAAA,oBACCI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2CAAA,EAEZ,QAAA,EAAA;AAAA,MAAA,gBAAA,oBACCJ,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBACZ,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,EAAA,qBACdA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,SAAS,MAAM,QAAA,CAAS,EAAE,QAAA,EAAU,EAAA,CAAG,OAAO,CAAA;AAAA,UAC9C,WAAW,CAAA,mEAAA,EACT,IAAA,CAAK,aAAa,EAAA,CAAG,KAAA,GACjB,uCACA,kDACN,CAAA,CAAA;AAAA,UAEC,QAAA,EAAA,EAAA,CAAG;AAAA,SAAA;AAAA,QARC,EAAA,CAAG;AAAA,OAUX,CAAA,EACH,CAAA;AAAA,sBAIFI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,0BAAA,EACZ,wBAAc,IAAA,CAAK,QAAQ,oBAC1BA,GAAAA;AAAA,UAAC,YAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAOD,GAAE,4BAA4B,CAAA;AAAA,YACrC,KAAA,EAAO,KAAK,WAAA,IAAe,EAAA;AAAA,YAC3B,cAAc,IAAA,CAAK,WAAA;AAAA,YACnB,UAAA,EAAU,IAAA;AAAA,YACV,QAAA,EAAU,CAAC,EAAA,EAAI,GAAA,KAAQ;AACrB,cAAA,MAAM,KAAA,GAAS,KAAK,IAAA,EAAc,KAAA;AAClC,cAAA,QAAA,CAAS;AAAA,gBACP,aAAa,EAAA,IAAM,MAAA;AAAA,gBACnB,WAAA,EAAa,KAAK,KAAA,IAAS,EAAA;AAAA,gBAC3B,GAAI,KAAA,IAAS,IAAA,GAAO,EAAE,SAAA,EAAW,KAAA,KAAU;AAAC,eAC7C,CAAA;AAAA,YACH,CAAA;AAAA,YACA,QAAA,EAAU,OAAO,CAAA,KAAM;AACrB,cAAA,MAAM,UAAU,MAAM,aAAA,CAAc,KAAK,QAAQ,CAAA,CAAE,OAAO,CAAC,CAAA;AAC3D,cAAA,OAAO,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,gBACzB,IAAI,CAAA,CAAE,EAAA;AAAA,gBACN,OAAO,CAAA,CAAE,KAAA;AAAA,gBACT,UAAU,CAAA,CAAE,QAAA;AAAA,gBACZ,OAAO,CAAA,CAAE,KAAA;AAAA,gBACT,IAAA,EAAM;AAAA,eACR,CAAE,CAAA;AAAA,YACJ,CAAA;AAAA,YACA,WAAA,EAAa,CAAA,OAAA,EAAU,SAAA,CAAU,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,KAAA,KAAU,IAAA,CAAK,QAAQ,CAAA,EAAG,KAAA,EAAO,WAAA,MAAiB,MAAM,CAAA,GAAA,CAAA;AAAA,YACzG,cAAc,CAAC,GAAA,qBACbK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kBAAA,EAAoB,cAAI,KAAA,EAAM,CAAA;AAAA,cAC1C,GAAA,CAAI,4BAAYA,GAAAA,CAAC,OAAE,SAAA,EAAU,mCAAA,EAAqC,cAAI,QAAA,EAAS;AAAA,aAAA,EAClF;AAAA;AAAA,SAEJ,mBAEAI,IAAAA,CAAA,QAAA,EAAA,EACE,QAAA,EAAA;AAAA,0BAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,iDAAiD,QAAA,EAAAD,EAAAA,CAAE,mCAAmC,CAAA,EAAE,CAAA;AAAA,0BACzGC,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,MAAA;AAAA,cACL,OAAO,IAAA,CAAK,WAAA;AAAA,cACZ,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,WAAA,EAAa,CAAA,CAAE,MAAA,CAAO,KAAA,EAAO,CAAA;AAAA,cACzD,SAAA,EAAW,kBAAA;AAAA,cACX,WAAA,EAAaD,GAAE,uCAAuC,CAAA;AAAA,cACtD,SAAA,EAAS,IAAA;AAAA,cACT,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA,EAEJ,CAAA;AAAA,wBACAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,iDAAiD,QAAA,EAAAD,EAAAA,CAAE,2BAA2B,CAAA,EAAE,CAAA;AAAA,0BACjGC,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,GAAA,EAAK,CAAA;AAAA,cACL,OAAO,IAAA,CAAK,QAAA;AAAA,cACZ,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,QAAA,EAAU,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAA,EAAG,CAAA;AAAA,cACnE,SAAA,EAAW,kBAAA;AAAA,cACX,SAAA,EAAU;AAAA;AAAA;AACZ,SAAA,EACF,CAAA;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,YAAA,EAAa,SAAA,EAAW,oBACrC,QAAA,kBAAAA,GAAAA;AAAA,UAAC,aAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAOD,GAAE,iCAAiC,CAAA;AAAA,YAC1C,OAAO,IAAA,CAAK,SAAA;AAAA,YACZ,UAAU,CAAC,CAAA,KAAM,SAAS,EAAE,SAAA,EAAW,GAAG,CAAA;AAAA,YAC1C,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,QAAQ,QAAA,CAAS,MAAA;AAAA,YACjB,cAAc,QAAA,CAAS;AAAA;AAAA,SACzB,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAGC,CAAC,kCACAK,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,kBAAA,CAAmB,IAAI,CAAA;AAAA,UACtC,SAAA,EAAU,sGAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,YAAE,GAAA;AAAA,YAAED,GAAE,yCAAyC;AAAA;AAAA;AAAA,OAC3E,mBAEAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,iDAAiD,QAAA,EAAAD,EAAAA,CAAE,gCAAgC,CAAA,EAAE,CAAA;AAAA,0BACtGK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8JAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAsC,mBAAS,MAAA,EAAO,CAAA;AAAA,4BACtEA,GAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,GAAA,EAAK,CAAA;AAAA,gBACL,IAAA,EAAM,IAAA;AAAA,gBACN,KAAA,EAAO,KAAK,QAAA,IAAY,CAAA;AAAA,gBACxB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,QAAA,EAAU,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAA,EAAG,CAAA;AAAA,gBACnE,SAAA,EAAW,kBAAA;AAAA,gBACX,SAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,iDAAiD,QAAA,EAAAD,EAAAA,CAAE,iCAAiC,CAAA,EAAE,CAAA;AAAA,0BACvGK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8JAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oCAAA,EAAsC,mBAAS,MAAA,EAAO,CAAA;AAAA,4BACtEA,GAAAA;AAAA,cAAC,OAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,GAAA,EAAK,CAAA;AAAA,gBACL,IAAA,EAAM,IAAA;AAAA,gBACN,KAAA,EAAO,KAAK,SAAA,IAAa,CAAA;AAAA,gBACzB,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,EAAE,SAAA,EAAW,MAAA,CAAO,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAA,EAAG,CAAA;AAAA,gBACpE,SAAA,EAAW,kBAAA;AAAA,gBACX,SAAA,EAAU;AAAA;AAAA;AACZ,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAA,GAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAS,MAAM;AAAE,cAAA,QAAA,CAAS,EAAE,QAAA,EAAU,CAAA,EAAG,SAAA,EAAW,GAAG,CAAA;AAAG,cAAA,kBAAA,CAAmB,KAAK,CAAA;AAAA,YAAE,CAAA;AAAA,YACpF,SAAA,EAAU,yEAAA;AAAA,YACV,KAAA,EAAOD,GAAE,yCAAyC,CAAA;AAAA,YAElD,QAAA,kBAAAC,GAAAA,CAAC,CAAA,EAAA,EAAE,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA;AAC7B,OAAA,EACF,CAAA;AAAA,sBAIFA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBACb,QAAA,kBAAAI,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,QAAA;AAAA,UACT,SAAA,EAAU,mJAAA;AAAA,UAEV,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,YAAE,GAAA;AAAA,YAAED,GAAE,4BAA4B;AAAA;AAAA;AAAA,OAC/D,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAMA,SAAS,WAAA,CAAY,EAAE,SAAA,EAAW,QAAA,EAAU,UAAS,EAIlD;AACD,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,uBACEG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kDAAkD,QAAA,EAAAD,EAAAA,CAAE,sCAAsC,CAAA,EAAE,CAAA;AAAA,oBACzGK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,MAAA,SAAA,CAAU,GAAA,CAAI,CAACL,EAAAA,qBACdC,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UAEC,OAAA,EAAS,MAAM,QAAA,CAASD,EAAAA,CAAE,KAAK,CAAA;AAAA,UAC/B,SAAA,EAAU,6KAAA;AAAA,UAET,UAAAA,EAAAA,CAAE;AAAA,SAAA;AAAA,QAJEA,EAAAA,CAAE;AAAA,OAMV,CAAA;AAAA,sBACDC,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,QAAA;AAAA,UACT,SAAA,EAAU,qHAAA;AAAA,UAET,QAAA,EAAAD,GAAE,8BAA8B;AAAA;AAAA;AACnC,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAgBO,SAAS,eAAA,CAAgB,EAAE,SAAA,EAAW,MAAA,EAAQ,SAAQ,EAI1D;AACD,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,SAAS,kBAAA,EAAmB;AAClC,EAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,SAAA,EAAU,GAAI,MAAA;AAC3C,EAAA,MAAM,WAAW,oBAAA,EAAqB;AAKtC,EAAA,MAAM,cAAA,GAAiB,UAAU,IAAA,CAAK,CAAC,OAAO,MAAA,CAAO,aAAA,CAAc,EAAA,CAAG,KAAK,CAAC,CAAA;AAC5E,EAAA,MAAM,eAAA,GACJ,SAAA,CAAU,IAAA,CAAK,CAAC,EAAA,KAAO,GAAG,KAAA,KAAU,OAAO,CAAA,EAAG,KAAA,IAC9C,SAAA,CAAU,IAAA,CAAK,CAAC,EAAA,KAAO,CAAC,MAAA,CAAO,aAAA,CAAc,EAAA,CAAG,KAAK,CAAC,CAAA,EAAG,KAAA,IACzD,SAAA,CAAU,CAAC,CAAA,EAAG,KAAA,IACd,OAAA;AACF,EAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,aAAa,CAAA;AAC9D,EAAA,MAAM,YAAA,GAAe,UAAU,MAAA,GAAS,CAAA;AACxC,EAAA,MAAM,MAAA,GAAS,CAAC,CAAC,MAAA;AAEjB,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,QAAAA,CAAS,CAAC,MAAM,CAAA;AAC5C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,IAAIA,QAAAA,CAAS,CAAC,CAAC,MAAM,CAAA;AAC/C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,QAAAA,EAA6B;AAC/D,EAAA,MAAM,CAAC,QAAQ,SAAS,CAAA,GAAIA,SAAS,SAAA,CAAU,CAAC,CAAA,EAAG,EAAA,IAAM,EAAE,CAAA;AAC3D,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,QAAAA,CAAAA,iBAAS,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AACpF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,EAAE,CAAA;AACnD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,QAAAA,CAAqB,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACxE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,QAAAA,CAA4B,EAAE,CAAA;AACtE,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,OAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,aAAa,CAAA;AAG9D,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,SAAS,YAAY,CAAA,EAAe;AAClC,MAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,CAAC,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAE,MAAc,CAAA,EAAG,WAAA,CAAY,KAAK,CAAA;AAAA,IACvF;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,WAAW,CAAA;AAClD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,WAAW,CAAA;AAAA,EACpE,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,eAAe,mBAAA,GAAsB;AACnC,IAAA,IAAI,CAAC,MAAA,EAAQ;AACb,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,MAAM,CAAA;AAC1B,MAAA,OAAA,IAAU;AAAA,IACZ,CAAA,CAAA,MAAQ;AAAA,IAER,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF;AAGA,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAU,MAAA,EAAQ;AACvB,IAAA,UAAA,CAAW,IAAI,CAAA;AACd,IAAA,CAAC,YAAY;AACZ,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,cAAA,CAAe,MAAM,CAAA;AACpD,MAAA,IAAI,CAAC,OAAA,EAAS;AACd,MAAA,cAAA,CAAe,OAAA,CAAQ,eAAe,EAAE,CAAA;AACxC,MAAA,YAAA,CAAa,QAAQ,SAAS,CAAA;AAC9B,MAAA,SAAA,CAAU,QAAQ,MAAA,IAAU,SAAA,CAAU,CAAC,CAAA,EAAG,MAAM,EAAE,CAAA;AAClD,MAAA,cAAA,CAAe,QAAQ,WAAW,CAAA;AAClC,MAAA,eAAA,CAAgB,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAC1C,MAAA,eAAA,CAAgB,OAAA,CAAQ,gBAAgB,EAAE,CAAA;AAE1C,MAAA,MAAM,YAAA,GAAe,MAAM,QAAA,CAAS,eAAA,CAAgB,MAAM,CAAA;AAC1D,MAAA,QAAA,CAAS,YAAA,CAAa,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,QACjC,KAAK,GAAA,EAAI;AAAA,QACT,UAAU,EAAA,CAAG,QAAA;AAAA,QACb,aAAa,EAAA,CAAG,WAAA;AAAA,QAChB,aAAa,EAAA,CAAG,WAAA;AAAA,QAChB,UAAU,EAAA,CAAG,QAAA;AAAA,QACb,WAAW,EAAA,CAAG,SAAA;AAAA,QACd,UAAU,EAAA,CAAG,QAAA;AAAA,QACb,WAAW,EAAA,CAAG;AAAA,QACd,CAAC,CAAA;AAEH,MAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,YAAA,CAAa,EAAE,SAAA,EAAW,OAAA,CAAQ,WAAW,CAAA;AAC9E,MAAA,MAAM,gBAAA,GAAmB,UAAU,IAAA,CAChC,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,MAAA,IAAU,CAAA,CAAE,YAAA,KAAiB,MAAM,CAAA,CACjE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,EAAE,iBAAA,IAAqB,CAAA,KAAM,CAAA,CAAE,iBAAA,IAAqB,CAAA,CAAE,CAAA;AACzE,MAAA,eAAA,CAAgB,gBAAA,CAAiB,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QAC3C,KAAK,GAAA,EAAI;AAAA,QACT,QAAQ,CAAA,CAAE,MAAA;AAAA,QACV,SAAS,CAAA,CAAE;AAAA,QACX,CAAC,CAAA;AAEH,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB,CAAA,GAAG;AAAA,EACL,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,WAAA,GAAc,KAAA,CAAM,MAAA,CAAO,CAAC,KAAK,EAAA,KAAO;AAC5C,IAAA,OAAO,GAAA,GAAM,GAAG,QAAA,GAAW,EAAA,CAAG,aAAa,EAAA,CAAG,QAAA,IAAY,CAAA,CAAA,IAAM,EAAA,CAAG,SAAA,IAAa,CAAA,CAAA;AAAA,EAClF,GAAG,CAAC,CAAA;AAGJ,EAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA;AACzC,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,aAAA,CAAc,OAAA,KAAY,KAAK,YAAA,CAAa,MAAA,KAAW,CAAA,IAAK,CAAC,MAAA,EAAQ;AAE3F,MAAA,MAAM,QAAQ,KAAA,CAAM,MAAA,CAAO,CAAC,GAAA,EAAK,OAAO,GAAA,GAAM,EAAA,CAAG,QAAA,GAAW,EAAA,CAAG,aAAa,EAAA,CAAG,QAAA,IAAY,MAAM,EAAA,CAAG,SAAA,IAAa,IAAI,CAAC,CAAA;AACtH,MAAA,IAAI,QAAQ,CAAA,EAAG;AACb,QAAA,eAAA,CAAgB,CAAC,EAAE,GAAA,EAAK,GAAA,EAAI,EAAG,QAAQ,KAAA,EAAO,OAAA,EAAS,WAAA,EAAa,CAAC,CAAA;AAAA,MACvE;AAAA,IACF;AACA,IAAA,aAAA,CAAc,UAAU,KAAA,CAAM,MAAA;AAAA,EAChC,CAAA,EAAG,CAAC,KAAA,CAAM,MAAM,CAAC,CAAA;AAGjB,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,aAAa,MAAA,GAAS,CAAA,IAAK,WAAA,GAAc,CAAA,IAAK,CAAC,MAAA,EAAQ;AACzD,MAAA,MAAM,QAAQ,YAAA,CAAa,MAAA;AAC3B,MAAA,MAAM,iBAAiB,IAAA,CAAK,KAAA,CAAM,WAAA,GAAc,GAAA,GAAM,KAAK,CAAA,GAAI,GAAA;AAC/D,MAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAA,CAAO,cAAc,cAAA,GAAiB,KAAA,IAAS,GAAG,CAAA,GAAI,GAAA;AAC7E,MAAA,eAAA,CAAgB,CAAC,IAAA,KAAS,IAAA,CAAK,GAAA,CAAI,CAAC,MAAM,CAAA,MAAO;AAAA,QAC/C,GAAG,IAAA;AAAA,QACH,MAAA,EAAQ,CAAA,KAAM,CAAA,GAAI,cAAA,GAAiB,SAAA,GAAY;AAAA,QAC/C,CAAC,CAAA;AAAA,IACL;AAAA,EACF,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAEhB,EAAA,SAAS,cAAc,IAAA,EAAc;AACnC,IAAA,MAAM,OAAA,GAAoB;AAAA,MACxB,KAAK,GAAA,EAAI;AAAA,MACT,QAAA,EAAU,IAAA;AAAA,MACV,WAAA,EAAa,EAAA;AAAA,MACb,QAAA,EAAU,CAAA;AAAA,MACV,SAAA,EAAW;AAAA,KACb;AACA,IAAA,QAAA,CAAS,CAAC,GAAG,KAAA,EAAO,OAAO,CAAC,CAAA;AAC5B,IAAA,iBAAA,CAAkB,QAAQ,GAAG,CAAA;AAC7B,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB;AAKA,EAAA,SAAS,YAAA,GAAe;AACtB,IAAA,IAAI,cAAA,gBAA8B,IAAI,CAAA;AAAA,uBACnB,eAAe,CAAA;AAAA,EACpC;AAEA,EAAA,SAAS,UAAA,CAAW,IAAY,IAAA,EAAyB;AACvD,IAAA,QAAA,CAAS,KAAA,CAAM,GAAA,CAAI,CAAC,EAAA,KAAO,GAAG,GAAA,KAAQ,EAAA,GAAK,EAAE,GAAG,EAAA,EAAI,GAAG,IAAA,EAAK,GAAI,EAAE,CAAC,CAAA;AAAA,EACrE;AAEA,EAAA,SAAS,WAAW,EAAA,EAAY;AAC9B,IAAA,QAAA,CAAS,MAAM,MAAA,CAAO,CAAC,OAAO,EAAA,CAAG,GAAA,KAAQ,EAAE,CAAC,CAAA;AAAA,EAC9C;AAEA,EAAA,SAAS,qBAAqB,KAAA,EAAe;AAC3C,IAAA,IAAI,KAAA,GAAQ,CAAA,IAAK,WAAA,IAAe,CAAA,EAAG;AACnC,IAAA,MAAM,iBAAiB,IAAA,CAAK,KAAA,CAAM,WAAA,GAAc,GAAA,GAAM,KAAK,CAAA,GAAI,GAAA;AAC/D,IAAA,MAAM,YAAY,IAAA,CAAK,KAAA,CAAA,CAAO,cAAc,cAAA,GAAiB,KAAA,IAAS,GAAG,CAAA,GAAI,GAAA;AAC7E,IAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,WAAW,CAAA;AACjC,IAAA,MAAM,OAA0B,EAAC;AACjC,IAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,KAAA,EAAO,CAAA,EAAA,EAAK;AAC9B,MAAA,MAAM,GAAA,GAAM,IAAI,IAAA,CAAK,IAAI,CAAA;AACzB,MAAA,GAAA,CAAI,QAAA,CAAS,GAAA,CAAI,QAAA,EAAS,GAAI,IAAI,CAAC,CAAA;AACnC,MAAA,IAAA,CAAK,IAAA,CAAK;AAAA,QACR,KAAK,GAAA,EAAI;AAAA,QACT,MAAA,EAAQ,CAAA,KAAM,CAAA,GAAI,cAAA,GAAiB,SAAA,GAAY,cAAA;AAAA,QAC/C,SAAS,GAAA,CAAI,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,EAAE;AAAA,OACvC,CAAA;AAAA,IACH;AACA,IAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,EACtB;AAEA,EAAA,eAAe,UAAA,GAAa;AAC1B,IAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AAAE,MAAA,KAAA,CAAM,KAAA,CAAMJ,EAAAA,CAAE,uBAAuB,CAAC,CAAA;AAAG,MAAA;AAAA,IAAO;AAC1E,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,GAAmC,YAAA,CAAa,GAAA,CAAI,CAAC,MAAM,CAAA,MAAO;AAAA,QACtE,SAAA;AAAA,QACA,YAAA,EAAc,MAAA;AAAA,QACd,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,mBAAmB,CAAA,GAAI;AAAA,OACzB,CAAE,CAAA;AAEF,MAAA,IAAI,SAAA,CAAU,WAAW,CAAA,EAAG;AAC1B,QAAA,SAAA,CAAU,IAAA,CAAK;AAAA,UACb,SAAA;AAAA,UACA,YAAA,EAAc,MAAA;AAAA,UACd,MAAA,EAAQ,WAAA;AAAA,UACR,OAAA,EAAS,WAAA;AAAA,UACT,iBAAA,EAAmB;AAAA,SACpB,CAAA;AAAA,MACH;AAEA,MAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,QAAA,MAAM,QAAA,CAAS,cAAc,MAAA,EAAQ;AAAA,UACnC,WAAA;AAAA,UACA,SAAA;AAAA,UACA,aAAa,WAAA,IAAe,KAAA,CAAA;AAAA,UAC5B,QAAQ,MAAA,IAAU,KAAA,CAAA;AAAA,UAClB,cAAc,YAAA,IAAgB,KAAA,CAAA;AAAA,UAC9B,cAAc,YAAA,IAAgB,KAAA,CAAA;AAAA,UAC9B;AAAA,SACD,CAAA;AACD,QAAA,OAAA,GAAU,MAAM,CAAA;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc;AAAA,UAClC,SAAA;AAAA,UACA,WAAA;AAAA,UACA,SAAA;AAAA,UACA,aAAa,WAAA,IAAe,KAAA,CAAA;AAAA,UAC5B,QAAQ,MAAA,IAAU,KAAA,CAAA;AAAA,UAClB,cAAc,YAAA,IAAgB,KAAA,CAAA;AAAA,UAC9B,cAAc,YAAA,IAAgB,KAAA,CAAA;AAAA,UAC9B,KAAA,EAAO,MAAM,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,GAAG,IAAA,EAAK,KAAM,IAAI,CAAA;AAAA,UAC3C,YAAA,EAAc;AAAA,SACf,CAAA;AACD,QAAA,OAAA,GAAU,QAAQ,EAAE,CAAA;AAAA,MACtB;AAAA,IACF,CAAA,SAAE;AACA,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,WAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,KAAA,EAAO,MAAM,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,GAAG,IAAA,EAAK,KAAM,IAAI,CAAA;AAAA,IAC3C,YAAA,EAAc,aAAa,GAAA,CAAI,CAAC,EAAE,GAAA,EAAK,GAAG,IAAA,EAAK,KAAM,IAAI;AAAA,GAC3D;AACA,EAAA,MAAM,QAAA,GAAW,OAAsB,IAAI,CAAA;AAC3C,EAAAI,UAAU,MAAM;AACd,IAAA,IAAI,MAAA,IAAU,SAAS,OAAA,KAAY,IAAA,WAAe,OAAA,GAAU,IAAA,CAAK,UAAU,MAAM,CAAA;AAAA,EACnF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AACX,EAAA,MAAM,KAAA,GAAQ,SAAS,OAAA,KAAY,IAAA,IAAQ,KAAK,SAAA,CAAU,MAAM,MAAM,QAAA,CAAS,OAAA;AAC/E,EAAA,UAAA,CAAW;AAAA,IACT,KAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAQ,MAAM;AAAE,MAAA,KAAK,UAAA,EAAW;AAAA,IAAE,CAAA;AAAA,IAClC,SAAA,EAAW,MAAM,OAAA,IAAU;AAAA,IAC3B,SAAA,EAAWJ,GAAE,4BAA4B;AAAA,GAC1C,CAAA;AAED,EAAA,MAAM,QAAQ,SAAA,KAAc,OAAA,GAAUA,GAAE,mCAAmC,CAAA,GAAIA,GAAE,sCAAsC,CAAA;AACvH,EAAA,MAAM,WAAW,MAAA,GAASA,EAAAA,CAAE,+BAA+B,CAAA,GAAIA,GAAE,gCAAgC,CAAA;AAEjG,EAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA;AAAA,MAACK,aAAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,QAAA;AAAA,QACA,MAAA,EAAQ,OAAA;AAAA,QACR,aAAa,SAAA,KAAc,OAAA,GAAUN,GAAE,wBAAwB,CAAA,GAAIA,GAAE,2BAA2B,CAAA;AAAA,QAChG,OAAA,EACE,MAAA,mBACEC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAW,KAAK,OAAA,EAC7B,QAAA,EAAA;AAAA,0BAAAJ,GAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAQ,SAAA;AAAA,cACR,IAAA,EAAK,MAAA;AAAA,cACL,OAAA,EAAS,MAAM,WAAA,CAAY,CAAC,QAAQ,CAAA;AAAA,cACpC,YAAA,EAAW,cAAA;AAAA,cAEX,QAAA,kBAAAA,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,WACpC;AAAA,UACC,QAAA,oBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yGAAA,EAA0G,KAAA,EAAO,EAAE,SAAA,EAAW,+BAAA,EAAgC,EAC3K,QAAA,kBAAAI,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,SAAS,MAAM;AAAE,gBAAA,gBAAA,CAAiB,IAAI,CAAA;AAAG,gBAAA,WAAA,CAAY,KAAK,CAAA;AAAA,cAAE,CAAA;AAAA,cAC5D,SAAA,EAAU,6GAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAACM,GAAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAEP,GAAE,qCAAqC;AAAA;AAAA;AAAA,WAC1E,EACF;AAAA,SAAA,EAEJ,GACF,CAAA,GACE;AAAA;AAAA,KAER;AAAA,oBAGAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,WAAA,EAAc,YAAA,GAAe,iBAAA,GAAoB,iBAAiB,CAAA,CAAA,EAChF,QAAA,EAAA;AAAA,sBAAAJ,IAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,GAAe,eAAA,GAAkB,iBAC/C,QAAA,kBAAAA,GAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACC,OAAO,SAAA,KAAc,OAAA,GAAUD,GAAE,6BAA6B,CAAA,GAAIA,GAAE,mCAAmC,CAAA;AAAA,UACvG,QAAA,EAAQ,IAAA;AAAA,UACR,OAAO,SAAA,IAAa,EAAA;AAAA,UACpB,YAAA,EAAc,WAAA;AAAA,UACd,QAAA,EAAU,CAAC,EAAA,EAAI,GAAA,KAAQ;AAAE,YAAA,YAAA,CAAa,MAAM,MAAS,CAAA;AAAG,YAAA,cAAA,CAAe,GAAA,EAAK,SAAS,EAAE,CAAA;AAAA,UAAE,CAAA;AAAA,UACzF,QAAA,EAAU,OAAO,CAAA,KAAM;AACrB,YAAA,IAAI,CAAC,MAAA,CAAO,aAAA,EAAe,OAAO,EAAC;AACnC,YAAA,MAAM,OAAA,GAAU,MAAM,MAAA,CAAO,aAAA,CAAc,OAAO,CAAC,CAAA;AACnD,YAAA,OAAO,QAAQ,GAAA,CAAI,CAAC,OAAO,EAAE,EAAA,EAAI,EAAE,EAAA,EAAI,KAAA,EAAO,EAAE,KAAA,EAAO,QAAA,EAAU,EAAE,QAAA,EAAU,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,EAAM,GAAE,CAAE,CAAA;AAAA,UACzG,CAAA;AAAA,UACA,WAAA,EAAaA,GAAE,kCAAkC;AAAA;AAAA,OACnD,EACF,CAAA;AAAA,MACC,gCACCC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBACb,QAAA,kBAAAA,GAAAA;AAAA,QAAC,gBAAA;AAAA,QAAA;AAAA,UACC,SAAA;AAAA,UACA,KAAA,EAAO,MAAA;AAAA,UACP,QAAA,EAAU;AAAA;AAAA,OACZ,EACF,CAAA;AAAA,sBAEFI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,GAAe,kBAAkB,eAAA,EAC/C,QAAA,EAAA;AAAA,wBAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,4BAA4B,CAAA,EAAE,CAAA;AAAA,wBAC9FC,IAAC,UAAA,EAAA,EAAW,KAAA,EAAO,aAAa,QAAA,EAAU,cAAA,EAAgB,WAAU,MAAA,EAAO;AAAA,OAAA,EAC7E,CAAA;AAAA,sBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,GAAe,kBAAkB,eAAA,EAC/C,QAAA,EAAA;AAAA,wBAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,CAAA,EAAE,CAAA;AAAA,wBACtGC,GAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,IAAA,EAAK,MAAA;AAAA,YACL,KAAA,EAAO,YAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC/C,WAAA,EAAaD,GAAE,oCAAoC,CAAA;AAAA,YACnD,SAAA,EAAU;AAAA;AAAA;AACZ,OAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF,CAAA;AAAA,IAGC,OAAA,mBACCK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,sDAAA,EACb,0BAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,0BACtDA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE;AAAA,SAAA,EAC1E,CAAA,EACF,CAAA;AAAA,wBACAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,WAAC,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,qBACXI,IAAAA,CAAC,KAAA,EAAA,EAAY,WAAU,mCAAA,EACrB,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAAyC,CAAA;AAAA,0BACxDA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAAyC,CAAA;AAAA,0BACxDA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C,CAAA;AAAA,0BACzDA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EAA4C,CAAA;AAAA,0BAC3DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C,CAAA;AAAA,0BACzDA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C;AAAA,SAAA,EAAA,EANjD,CAOV,CACD,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,sBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,GAAE,CAAA,EACjF,CAAA;AAAA,wBACAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,WAAC,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,qBACXI,IAAAA,CAAC,KAAA,EAAA,EAAY,WAAU,gCAAA,EACrB,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EAAyC,CAAA;AAAA,4BACxDA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EAA0C;AAAA,WAAA,EAC3D,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EAAqC;AAAA,SAAA,EAAA,EAL5C,CAMV,CACD,CAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA,mBAEFI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,4BACtDA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE;AAAA,WAAA,EAC1E,CAAA;AAAA,0BACAK,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,OAAA,EAAS,YAAA;AAAA,cACT,SAAA,EAAU,6NAAA;AAAA,cAEV,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,gBAAE,GAAA;AAAA,gBAAED,GAAE,+BAA+B;AAAA;AAAA;AAAA;AACjE,SAAA,EACF,CAAA;AAAA,wBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EAEZ,QAAA,EAAA;AAAA,UAAA,UAAA,oBACCJ,GAAAA;AAAA,YAAC,WAAA;AAAA,YAAA;AAAA,cACC,SAAA;AAAA,cACA,QAAA,EAAU,aAAA;AAAA,cACV,QAAA,EAAU,MAAM,aAAA,CAAc,KAAK;AAAA;AAAA,WACrC;AAAA,UAID,KAAA,CAAM,WAAW,CAAA,IAAK,CAAC,6BACtBI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,+CAAA,EAAgD,CAAA;AAAA,4BACtEA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,+BAA+B,CAAA,EAAE,CAAA;AAAA,4BACjFC,GAAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,YAAA,EAAc,WAAU,2CAAA,EACtC,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,CAAA,EACzC;AAAA,WAAA,EACF,IAEA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,sBACfC,GAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cAEC,IAAA;AAAA,cACA,KAAA,EAAO,CAAA;AAAA,cACP,SAAA;AAAA,cACA,QAAA;AAAA,cACA,QAAA,EAAU,mBAAmB,IAAA,CAAK,GAAA;AAAA,cAClC,QAAA,EAAU,MAAM,iBAAA,CAAkB,cAAA,KAAmB,KAAK,GAAA,GAAM,IAAA,GAAO,KAAK,GAAG,CAAA;AAAA,cAC/E,UAAU,CAAC,IAAA,KAAS,UAAA,CAAW,IAAA,CAAK,KAAK,IAAI,CAAA;AAAA,cAC7C,UAAU,MAAM;AAAE,gBAAA,UAAA,CAAW,KAAK,GAAG,CAAA;AAAG,gBAAA,IAAI,cAAA,KAAmB,IAAA,CAAK,GAAA,EAAK,iBAAA,CAAkB,IAAI,CAAA;AAAA,cAAE,CAAA;AAAA,cACjG,eAAe,MAAA,CAAO,aAAA;AAAA,cACtB,gBAAA,EAAkB;AAAA,aAAA;AAAA,YAVb,IAAA,CAAK;AAAA,WAYb;AAAA,SAAA,EAEL,CAAA;AAAA,QAGC,MAAM,MAAA,GAAS,CAAA,oBACdI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0EAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,mCAAmC,EAAE,KAAA,EAAO,KAAA,CAAM,MAAA,EAAQ,QAAQ,KAAA,CAAM,MAAA,KAAW,IAAI,GAAA,GAAM,EAAA,EAAI,CAAA,EAAE,CAAA;AAAA,0BACtJK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA;AAAA,cAAAL,GAAE,6BAA6B,CAAA;AAAA,cAAE;AAAA,aAAA,EAAC,CAAA;AAAA,4BACnFC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAqB,QAAA,EAAA,cAAA,CAAe,WAAA,EAAa,QAAQ,CAAA,EAAE;AAAA,WAAA,EAC7E;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ,CAAA;AAAA,sBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EACb,QAAA,kBAAAA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uBAAA,EAAwB,QAAA,EAAA,cAAA,EAAY,CAAA,EACpD,CAAA;AAAA,wBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAEb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACZ,WAAC,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,CAAA,EAAG,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,sBACrBI,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,OAAA,EAAS,MAAM,oBAAA,CAAqB,CAAC,CAAA;AAAA,cACrC,UAAU,WAAA,IAAe,CAAA;AAAA,cACzB,WAAW,CAAA,uFAAA,EACT,YAAA,CAAa,MAAA,KAAW,CAAA,GACpB,uCACA,kDACN,CAAA,CAAA;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,CAAA;AAAA,gBAAE;AAAA;AAAA,aAAA;AAAA,YATE;AAAA,WAWR,CAAA,EACH,CAAA;AAAA,UAEC,YAAA,CAAa,MAAA,KAAW,CAAA,mBACvBJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gDAAA,EACV,QAAA,EAAA,WAAA,IAAe,CAAA,GAAID,EAAAA,CAAE,qCAAqC,IAAIA,EAAAA,CAAE,0CAA0C,CAAA,EAC7G,CAAA,mBAEAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aACZ,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,IAAA,EAAM,CAAA,qBACvBI,IAAAA,CAAC,KAAA,EAAA,EAAmB,WAAU,kCAAA,EAC5B,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+CAAA,EAAgD,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBAAE,CAAA,GAAI;AAAA,eAAA,EAAE,CAAA;AAAA,8BACxEJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAA,cAAA,CAAe,IAAA,CAAK,MAAA,EAAQ,QAAQ,CAAA,EAAE;AAAA,aAAA,EACjF,CAAA;AAAA,4BACAA,GAAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,OAAO,IAAA,CAAK,OAAA;AAAA,gBACZ,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,kBAAA,MAAM,OAAA,GAAU,CAAC,GAAG,YAAY,CAAA;AAChC,kBAAA,OAAA,CAAQ,CAAC,CAAA,GAAI,EAAE,GAAG,IAAA,EAAM,SAAS,CAAA,EAAE;AACnC,kBAAA,eAAA,CAAgB,OAAO,CAAA;AAAA,gBACzB;AAAA;AAAA;AACF,WAAA,EAAA,EAZQ,IAAA,CAAK,GAaf,CACD,CAAA,EACH;AAAA,SAAA,EAEJ;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,oBAIAI,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,CAAA,EAAE,CAAA;AAAA,sBACtGC,GAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,YAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UAC/C,WAAA,EAAaD,GAAE,uCAAuC,CAAA;AAAA,UACtD,IAAA,EAAM,CAAA;AAAA,UACN,SAAA,EAAU;AAAA;AAAA;AACZ,KAAA,EACF,CAAA;AAAA,IAGC,aAAA,IAAiB,YAAA;AAAA,sBAChBC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EAAkE,SAAS,MAAM,gBAAA,CAAiB,KAAK,CAAA,EACpH,QAAA,kBAAAI,IAAAA,CAAC,SAAI,SAAA,EAAU,iEAAA,EAAkE,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAG,KAAA,EAAO,EAAE,SAAA,EAAW,+BAAA,EAAgC,EACxK,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oFAAA,EACb,QAAA,kBAAAA,IAACM,GAAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EAA2B,CAAA,EAC5C,CAAA;AAAA,0BACAF,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAJ,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,qCAAqC,CAAA,EAAE,CAAA;AAAA,4BAChFC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,qCAAqC,CAAA,EAAE;AAAA,WAAA,EACzF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCACV,QAAA,EAAAD,EAAAA,CAAE,kCAAkC,CAAA,EACvC,CAAA;AAAA,wBACAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,MAAK,IAAA,EAAK,OAAA,EAAS,MAAM,gBAAA,CAAiB,KAAK,CAAA,EACtE,QAAA,EAAAD,EAAAA,CAAE,mCAAmC,CAAA,EACxC,CAAA;AAAA,0BACAK,IAAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,aAAA,EAAc,MAAK,IAAA,EAAK,OAAA,EAAS,mBAAA,EAAqB,QAAA,EAAU,UAAA,EAC9E,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAACM,GAAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,YAC5B,UAAA,GAAaP,EAAAA,CAAE,kCAAkC,CAAA,GAAIA,GAAE,iCAAiC;AAAA,WAAA,EAC3F;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MACA,QAAA,CAAS;AAAA,KACX;AAAA,oBAEAC,IAAC,OAAA,EAAA,EAAO,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,EAKN;AAAA,GAAA,EACJ,CAAA;AAEJ;ACz5BA,IAAM,oBAAA,GAA0D;AAAA,EAC9D,IAAA,EAAM,CAAC,eAAe,CAAA;AAAA,EACtB,WAAA,EAAa,CAAC,aAAA,EAAe,cAAc,CAAA;AAAA,EAC3C,UAAA,EAAY,CAAC,cAAA,EAAgB,eAAe,CAAA;AAAA,EAC5C,GAAA,EAAK,CAAC,cAAA,EAAgB,gBAAgB,CAAA;AAAA,EACtC,aAAA,EAAe,CAAC,cAAc,CAAA;AAAA,EAC9B,KAAA,EAAO,CAAC,cAAc,CAAA;AAAA,EACtB,OAAA,EAAS,CAAC,cAAA,EAAgB,gBAAgB;AAC5C,CAAA;AAEA,IAAM,UAAA,GAAgD;AAAA,EACpD,IAAA,EAAM,QAAA;AAAA,EACN,GAAA,EAAK,MAAA;AAAA,EACL,WAAA,EAAa,UAAA;AAAA,EACb,UAAA,EAAY,UAAA;AAAA,EACZ,aAAA,EAAe,cAAA;AAAA,EACf,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,WAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,uHAAA;AAAA,EACN,GAAA,EAAK,4HAAA;AAAA,EACL,WAAA,EAAa,wGAAA;AAAA,EACb,UAAA,EAAY,6GAAA;AAAA,EACZ,aAAA,EAAe,uHAAA;AAAA,EACf,KAAA,EAAO;AACT,CAAA;AAEA,IAAM,WAAA,GAAsC;AAAA,EAC1C,IAAA,EAAM,cAAA;AAAA,EACN,GAAA,EAAK,eAAA;AAAA,EACL,WAAA,EAAa,WAAA;AAAA,EACb,UAAA,EAAY,YAAA;AAAA,EACZ,aAAA,EAAe,cAAA;AAAA,EACf,KAAA,EAAO;AACT,CAAA;AAEO,SAAS,YAAA,CAAa,EAAE,QAAA,EAAU,OAAA,EAAS,QAAO,EAItD;AACD,EAAA,MAAMD,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,WAAA,GAAc,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,WAAW,CAAA;AAC1D,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,YAAY,CAAA;AAC5D,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,cAAc,CAAA;AAChE,EAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,kBAAkB,CAAA;AACxE,EAAA,MAAM,iBAAA,GAAoB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,iBAAiB,CAAA;AACtE,EAAA,MAAM,mBAAA,GAAsB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,mBAAmB,CAAA;AAE1E,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,MAAA,GAAS,QAAA,CAAS,UAAA;AAC7C,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIC,SAAS,SAAS,CAAA;AAC9C,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,QAAAA,CAAAA,iBAAS,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AACpF,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,SAAS,EAAE,CAAA;AACvD,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,SAAS,EAAE,CAAA;AACzD,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAS,EAAE,CAAA;AACrD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,SAAS,CAAC,CAAA;AAC1D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIA,SAAS,IAAI,CAAA;AAEjE,EAAAC,UAAU,MAAM;AACd,IAAA,iBAAA,EAAkB;AAClB,IAAA,mBAAA,EAAoB;AACpB,IAAA,qBAAA,CAAsB,MAAM,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,EAC9C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAeI,OAAAA;AAAA,IAAQ,MAC3B,kBAAA,CAAmB,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,OAAO,cAAc,CAAA;AAAA,IACxD,CAAC,oBAAoB,cAAc;AAAA,GACrC;AAEA,EAAA,MAAM,MAAA,GAAS,cAAc,eAAA,IAAmB,EAAA;AAEhD,EAAA,MAAM,eAAA,GAAkBA,OAAAA;AAAA,IAAQ,MAC9B,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,wBAAwB,cAAc,CAAA;AAAA,IACrE,CAAC,gBAAgB,cAAc;AAAA,GACjC;AAEA,EAAA,MAAM,SAAA,GAAY,MAAA,KAAW,aAAA,IAAiB,MAAA,KAAW,YAAA;AACzD,EAAA,MAAM,wBAAwB,MAAA,KAAW,aAAA;AAIzC,EAAA,MAAM,gBAAA,GAAmBA,QAAQ,MAAM;AACrC,IAAA,MAAM,OAAA,GAAW,cAAc,mBAAA,IAAuB,YAAA,CAAa,oBAAoB,MAAA,GACnF,YAAA,CAAa,mBAAA,GACb,oBAAA,CAAqB,MAAM,CAAA;AAC/B,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,QAAQ,OAAO,YAAA;AACxC,IAAA,MAAM,QAAA,GAAW,aAAa,MAAA,CAAO,CAAC,MAAM,OAAA,CAAQ,QAAA,CAAS,CAAA,CAAE,WAAW,CAAC,CAAA;AAC3E,IAAA,OAAO,QAAA,CAAS,SAAS,QAAA,GAAW,YAAA;AAAA,EACtC,CAAA,EAAG,CAAC,YAAA,EAAc,YAAA,EAAc,MAAM,CAAC,CAAA;AAGvC,EAAAJ,UAAU,MAAM;AACd,IAAA,IAAI,cAAA,IAAkB,CAAC,aAAA,IAAiB,gBAAA,CAAiB,MAAA,EAAQ;AAC/D,MAAA,gBAAA,CAAiB,gBAAA,CAAiB,CAAC,CAAA,CAAE,EAAE,CAAA;AAAA,IACzC;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,gBAAgB,CAAC,CAAA;AAErC,EAAA,SAAS,iBAAiB,MAAA,EAAgB;AACxC,IAAA,iBAAA,CAAkB,MAAM,CAAA;AACxB,IAAA,qBAAA,CAAsB,KAAK,CAAA;AAC3B,IAAA,kBAAA,CAAmB,EAAE,CAAA;AACrB,IAAA,gBAAA,CAAiB,EAAE,CAAA;AACnB,IAAA,YAAA,CAAa,EAAE,CAAA;AACf,IAAA,mBAAA,CAAoB,CAAC,CAAA;AAAA,EACvB;AAEA,EAAA,SAAS,WAAA,GAAc;AACrB,IAAA,UAAA,CAAW,KAAK,CAAA;AAChB,IAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,EACzB;AAGA,EAAA,SAAS,cAAc,CAAA,EAAwB;AAC7C,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAA,EAAU;AACrC,IAAA,IAAK,CAAA,CAAE,MAAA,CAAuB,OAAA,KAAY,UAAA,EAAY;AACtD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,SAAS,CAAA,IAAK,cAAA,IAAkB,iBAAiB,CAAC,MAAA,OAAa,SAAA,EAAU;AAAA,EAC/E;AAEA,EAAA,eAAe,SAAA,GAAY;AACzB,IAAA,IAAI,MAAA,IAAU,CAAA,IAAK,CAAC,cAAA,IAAkB,CAAC,aAAA,EAAe;AACtD,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,IAAI;AACF,MAAA,MAAM,WAAA,CAAY;AAAA,QAChB,YAAY,QAAA,CAAS,EAAA;AAAA,QACrB,MAAA;AAAA,QACA,WAAA;AAAA,QACA,iBAAiB,eAAA,IAAmB,KAAA,CAAA;AAAA,QACpC,qBAAqB,cAAA,IAAkB,KAAA,CAAA;AAAA,QACvC,eAAe,aAAA,IAAiB,KAAA,CAAA;AAAA,QAChC,SAAA,EAAW,SAAA,GAAY,SAAA,IAAa,KAAA,CAAA,GAAY,KAAA,CAAA;AAAA,QAChD,gBAAA,EAAkB,wBAAwB,gBAAA,GAAmB,KAAA,CAAA;AAAA,QAC7D,KAAA,EAAO,KAAA,CAAM,IAAA,EAAK,IAAK,KAAA;AAAA,OACxB,CAAA;AACD,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,UAAA,CAAW,QAAQ,GAAG,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AAAA,IAER,CAAA,SAAE;AACA,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,YAAA,GAAgB,UAAA,CAAW,MAAM,KAAK,QAAA,GAAY,IAAA;AAEvE,EAAA,OAAOK,YAAAA;AAAA,oBACLR,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oFAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,OAAA,GAAU,oBAAoB,eAAA,EAAgB;AAAA,QACxE,OAAA,EAAS,WAAA;AAAA,QAET,QAAA,kBAAAI,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,sHAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,UAAU,CAAA,GAAI,CAAA;AAAA,cACvB,SAAA,EAAW,UAAU,wBAAA,GAA2B;AAAA,aAClD;AAAA,YACA,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YAClC,SAAA,EAAW,aAAA;AAAA,YAGX,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gFAAA,EACb,QAAA,EAAA;AAAA,gCAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAAJ,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2BAA2B,QAAA,EAAAD,EAAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,kCACtEK,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA;AAAA,oBAAAL,EAAAA,CAAE,iCAAiC,EAAE,MAAA,EAAQ,OAAO,QAAA,CAAS,iBAAA,IAAqB,CAAC,CAAA,EAAG,CAAA;AAAA,oBAAE,QAAA;AAAA,oBAAWA,EAAAA,CAAE,+BAA+B,EAAE,MAAA,EAAQ,eAAe,SAAA,EAAW,QAAQ,GAAG;AAAA,mBAAA,EACtL;AAAA,iBAAA,EACF,CAAA;AAAA,gCACAC,GAAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,WAAA,EAAa,SAAA,EAAU,mEAAA,EACtC,QAAA,kBAAAA,GAAAA,CAACS,CAAAA,EAAA,EAAE,SAAA,EAAU,WAAU,CAAA,EACzB;AAAA,eAAA,EACF,CAAA;AAAA,8BAEAL,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EAEb,QAAA,EAAA;AAAA,gCAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,0BAA0B,CAAA,EAAE,CAAA;AAAA,kCAG5FC,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,2CAAA;AAAA,sBACV,OAAO,EAAE,gBAAA,EAAkB,kBAAkB,CAAC,kBAAA,GAAqB,QAAQ,KAAA,EAAM;AAAA,sBAEjF,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACZ,0CACCI,IAAAA;AAAA,wBAAC,QAAA;AAAA,wBAAA;AAAA,0BACC,OAAA,EAAS,MAAM,qBAAA,CAAsB,IAAI,CAAA;AAAA,0BACzC,SAAA,EAAW,CAAA,kHAAA,EAAqH,WAAA,CAAY,MAAM,KAAK,EAAE,CAAA,CAAA;AAAA,0BACzJ,aAAA,EAAY,MAAA;AAAA,0BAEX,QAAA,EAAA;AAAA,4BAAA,YAAA,oBAAgBJ,IAAC,YAAA,EAAA,EAAa,SAAA,EAAW,WAAW,WAAA,CAAY,MAAM,CAAA,IAAK,EAAE,CAAA,CAAA,EAAI,CAAA;AAAA,4CAClFA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4BAAA,EAA8B,wBAAc,IAAA,EAAK,CAAA;AAAA,4CACjEA,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,+BAAA,EAAgC;AAAA;AAAA;AAAA,uBACpD,EAEJ;AAAA;AAAA,mBACF;AAAA,kCAGAA,GAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,SAAA,EAAU,2CAAA;AAAA,sBACV,KAAA,EAAO,EAAE,gBAAA,EAAkB,kBAAA,GAAqB,QAAQ,KAAA,EAAM;AAAA,sBAE9D,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACZ,QAAA,EAAA,kBAAA,CAAmB,MAAA,KAAW,CAAA,mBAC7BI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uFAAA,EACb,QAAA,EAAA;AAAA,wCAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE,CAAA;AAAA,wCAC/EK,IAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,sBAAA,EAAuB,WAAU,sEAAA,EACtC,QAAA,EAAA;AAAA,0BAAAL,GAAE,oCAAoC,CAAA;AAAA,0BAAE;AAAA,yBAAA,EAC3C;AAAA,uBAAA,EACF,CAAA,mBAEFC,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,+BAAA,EACZ,QAAA,EAAA,kBAAA,CAAmB,GAAA,CAAI,CAAC,IAAA,KAAS;AAChC,wBAAA,MAAM,EAAA,GAAK,KAAK,eAAA,IAAmB,EAAA;AACnC,wBAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAE,CAAA,IAAK,QAAA;AAC/B,wBAAA,MAAM,QAAA,GAAW,mBAAmB,IAAA,CAAK,EAAA;AACzC,wBAAA,uBACEI,IAAAA;AAAA,0BAAC,QAAA;AAAA,0BAAA;AAAA,4BAEC,aAAA,EAAa,QAAA;AAAA,4BACb,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAA,CAAK,EAAE,CAAA;AAAA,4BACvC,WAAW,CAAA,0FAAA,EAA6F,WAAA,CAAY,EAAE,CAAA,IAAK,YAAY,IAAI,CAAA,CAAA;AAAA,4BAE3I,QAAA,EAAA;AAAA,8CAAAJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAW,CAAA,QAAA,EAAW,QAAA,GAAW,YAAY,EAAE,CAAA,IAAK,EAAA,GAAK,uBAAuB,CAAA,CAAA,EAAI,CAAA;AAAA,8CAC1FA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,sCAAA,EAAyC,WAAW,iBAAA,GAAoB,uBAAuB,CAAA,CAAA,EAAK,QAAA,EAAA,IAAA,CAAK,IAAA,EAAK;AAAA;AAAA,2BAAA;AAAA,0BAN1H,IAAA,CAAK;AAAA,yBAOZ;AAAA,sBAEJ,CAAC,GACH,CAAA,EAEF;AAAA;AAAA;AACF,iBAAA,EACF,CAAA;AAAA,gBAGC,cAAA,oBACCI,IAAAA,CAAC,KAAA,EAAA,EAAyB,WAAU,WAAA,EAElC,QAAA,EAAA;AAAA,kCAAAA,IAAAA,CAAC,SAAI,SAAA,EAAU,sCAAA,EAAuC,OAAO,EAAE,cAAA,EAAgB,OAAM,EACnF,QAAA,EAAA;AAAA,oCAAAJ,GAAAA;AAAA,sBAACU,aAAAA;AAAA,sBAAA;AAAA,wBACC,KAAA,EAAOX,GAAE,0BAA0B,CAAA;AAAA,wBACnC,KAAA,EAAO,MAAA;AAAA,wBACP,QAAA,EAAU,SAAA;AAAA,wBACV,QAAQ,QAAA,CAAS,MAAA;AAAA,wBACjB,QAAQ,QAAA,CAAS,MAAA;AAAA,wBACjB,cAAc,QAAA,CAAS;AAAA;AAAA,qBACzB;AAAA,oCACAK,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sCAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,wBAAwB,CAAA,EAAE,CAAA;AAAA,sCAC1FC,IAACW,UAAAA,EAAA,EAAW,OAAO,WAAA,EAAa,QAAA,EAAU,cAAA,EAAgB,SAAA,EAAU,MAAA,EAAO;AAAA,qBAAA,EAC7E;AAAA,mBAAA,EACF,CAAA;AAAA,kBAGC,eAAA,CAAgB,MAAA,GAAS,CAAA,oBACxBP,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAAgB,KAAA,EAAO,EAAE,cAAA,EAAgB,MAAA,EAAO,EAC7D,QAAA,EAAA;AAAA,oCAAAJ,GAAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAU,2CAAA,EACd,QAAA,EAAA,SAAA,GAAYD,GAAE,wBAAwB,CAAA,GAAIA,EAAAA,CAAE,2BAA2B,CAAA,EAC1E,CAAA;AAAA,oCACAK,IAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAO,iBAAiB,QAAA,EAAU,CAAC,CAAA,KAAM,kBAAA,CAAmB,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,WAAU,kHAAA,EAC7F,QAAA,EAAA;AAAA,sCAAAJ,IAAC,QAAA,EAAA,EAAO,KAAA,EAAM,IAAI,QAAA,EAAAD,EAAAA,CAAE,0BAA0B,CAAA,EAAE,CAAA;AAAA,sBAC/C,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,qBAAMC,GAAAA,CAAC,QAAA,EAAA,EAAkB,KAAA,EAAO,CAAA,CAAE,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,IAAA,EAAA,EAAtB,CAAA,CAAE,EAAyB,CAAS;AAAA,qBAAA,EAC/E;AAAA,mBAAA,EACF,CAAA;AAAA,kBAID,SAAA,oBACCI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,CAAA,yBAAA,EAA4B,qBAAA,GAAwB,aAAA,GAAgB,aAAa,CAAA,CAAA,EAAI,KAAA,EAAO,EAAE,cAAA,EAAgB,SAAQ,EACpI,QAAA,EAAA;AAAA,oCAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sCAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE,CAAA;AAAA,sCAC/FK,IAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAO,WAAW,QAAA,EAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,WAAU,kHAAA,EACjF,QAAA,EAAA;AAAA,wCAAAJ,IAAC,QAAA,EAAA,EAAO,KAAA,EAAM,IAAI,QAAA,EAAAD,EAAAA,CAAE,+BAA+B,CAAA,EAAE,CAAA;AAAA,wBACpD,CAAC,MAAA,EAAQ,YAAA,EAAc,oBAAoB,KAAA,EAAO,WAAA,EAAa,aAAa,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,qBAClFC,GAAAA,CAAC,QAAA,EAAA,EAAe,OAAO,CAAA,EAAI,QAAA,EAAA,CAAA,EAAA,EAAd,CAAgB,CAC9B;AAAA,uBAAA,EACH;AAAA,qBAAA,EACF,CAAA;AAAA,oBACC,qBAAA,oBACCI,IAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sCAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,CAAA,EAAE,CAAA;AAAA,sCACtGC,GAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAO,gBAAA,EAAkB,UAAU,CAAC,CAAA,KAAM,mBAAA,CAAoB,MAAA,CAAO,EAAE,MAAA,CAAO,KAAK,CAAC,CAAA,EAAG,WAAU,kHAAA,EACtG,QAAA,EAAA,KAAA,CAAM,IAAA,CAAK,EAAE,QAAQ,EAAA,EAAG,EAAG,CAAC,CAAA,EAAG,MAAM,CAAA,GAAI,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,qBAChDI,IAAAA,CAAC,QAAA,EAAA,EAAe,OAAO,CAAA,EAAI,QAAA,EAAA;AAAA,wBAAA,CAAA;AAAA,wBAAE,IAAA;AAAA,wBAAG,IAAI,CAAA,GAAI,cAAA,CAAe,MAAA,GAAS,CAAA,EAAG,QAAQ,CAAA,GAAI;AAAA,uBAAA,EAAA,EAAlE,CAAqE,CACnF,CAAA,EACH;AAAA,qBAAA,EACF;AAAA,mBAAA,EAEJ,CAAA;AAAA,kCAIFA,KAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,KAAA,EAAO,EAAE,cAAA,EAAgB,OAAA,EAAQ,EAC9D,QAAA,EAAA;AAAA,oCAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,+BAA+B,CAAA,EAAE,CAAA;AAAA,oBAChG,iBAAiB,MAAA,KAAW,CAAA,mBAC3BK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uFAAA,EACb,QAAA,EAAA;AAAA,sCAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,8BAA8B,CAAA,EAAE,CAAA;AAAA,sCAChFK,IAAAA,CAAC,GAAA,EAAA,EAAE,IAAA,EAAK,oCAAA,EAAqC,WAAU,oEAAA,EACpD,QAAA,EAAA;AAAA,wBAAAL,GAAE,qCAAqC,CAAA;AAAA,wBAAE;AAAA,uBAAA,EAC5C;AAAA,qBAAA,EACF,CAAA,mBAEAK,IAAAA,CAAC,QAAA,EAAA,EAAO,OAAO,aAAA,EAAe,QAAA,EAAU,CAAC,CAAA,KAAM,iBAAiB,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,WAAU,kHAAA,EACzF,QAAA,EAAA;AAAA,sCAAAJ,IAAC,QAAA,EAAA,EAAO,KAAA,EAAM,IAAI,QAAA,EAAAD,EAAAA,CAAE,iCAAiC,CAAA,EAAE,CAAA;AAAA,sBACtD,gBAAA,CAAiB,GAAA,CAAI,CAAC,CAAA,qBAAMC,GAAAA,CAAC,QAAA,EAAA,EAAkB,KAAA,EAAO,CAAA,CAAE,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,IAAA,EAAA,EAAtB,CAAA,CAAE,EAAyB,CAAS;AAAA,qBAAA,EAChF;AAAA,mBAAA,EAEJ,CAAA;AAAA,kCAGAI,KAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAgB,KAAA,EAAO,EAAE,cAAA,EAAgB,OAAA,EAAQ,EAC9D,QAAA,EAAA;AAAA,oCAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,oCAC3FC,IAAC,OAAA,EAAA,EAAM,IAAA,EAAK,QAAO,KAAA,EAAO,KAAA,EAAO,UAAU,CAAC,CAAA,KAAM,SAAS,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,WAAA,EAAaD,GAAE,iCAAiC,CAAA,EAAG,WAAU,kKAAA,EAAmK;AAAA,mBAAA,EAC9S;AAAA,iBAAA,EAAA,EA7EQ,cA8EV;AAAA,eAAA,EAEJ,CAAA;AAAA,8BAGAC,IAAC,OAAA,EAAA,EAAO,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAAA,CAAA,EAQN,CAAA;AAAA,8BAGFI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAACY,MAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,WAAA,EAC1C,QAAA,EAAAb,EAAAA,CAAE,0BAA0B,CAAA,EAC/B,CAAA;AAAA,gCACAK,IAAAA;AAAA,kBAACQ,MAAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAQ,SAAA;AAAA,oBACR,IAAA,EAAK,IAAA;AAAA,oBACL,OAAA,EAAS,SAAA;AAAA,oBACT,UAAU,MAAA,IAAU,CAAA,IAAK,CAAC,cAAA,IAAkB,CAAC,aAAA,IAAiB,MAAA;AAAA,oBAE9D,QAAA,EAAA;AAAA,sCAAAZ,GAAAA,CAACa,KAAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,sBAC9B,MAAA,GAASd,EAAAA,CAAE,8BAA8B,CAAA,GAAIA,EAAAA,CAAE,6BAAA,EAA+B,EAAE,MAAA,EAAQ,cAAA,CAAe,MAAA,EAAQ,QAAQ,CAAA,EAAG;AAAA;AAAA;AAAA;AAC7H,eAAA,EACF;AAAA;AAAA;AAAA;AACF;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;ACpWA,IAAM,aAAA,GAA2F;AAAA,EAC/F,MAAM,EAAE,EAAA,EAAI,0CAA0C,IAAA,EAAMe,YAAAA,EAAc,UAAU,8BAAA,EAA+B;AAAA,EACnH,SAAS,EAAE,EAAA,EAAI,gDAAgD,IAAA,EAAMA,YAAAA,EAAc,UAAU,iCAAA,EAAkC;AAAA,EAC/H,SAAS,EAAE,EAAA,EAAI,gDAAgD,IAAA,EAAMC,cAAAA,EAAgB,UAAU,iCAAA,EAAkC;AAAA,EACjI,MAAM,EAAE,EAAA,EAAI,gDAAgD,IAAA,EAAMC,cAAAA,EAAgB,UAAU,8BAAA,EAA+B;AAAA,EAC3H,SAAS,EAAE,EAAA,EAAI,wDAAwD,IAAA,EAAMC,WAAAA,EAAa,UAAU,iCAAA,EAAkC;AAAA,EACtI,OAAO,EAAE,EAAA,EAAI,kCAAkC,IAAA,EAAMH,YAAAA,EAAc,UAAU,+BAAA,EAAgC;AAAA,EAC7G,WAAW,EAAE,EAAA,EAAI,kCAAkC,IAAA,EAAMR,GAAAA,EAAK,UAAU,mCAAA;AAC1E,CAAA;AAEO,SAAS,kBAAkB,EAAE,SAAA,EAAW,WAAW,MAAA,EAAQ,MAAA,EAAQ,WAAU,EAOjF;AACD,EAAA,MAAMP,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,SAAS,kBAAA,EAAmB;AAClC,EAAA,MAAM,EAAE,UAAS,GAAI,MAAA;AAErB,EAAA,MAAM,WAAA,GAAc,cAAc,SAAA,KAAc,OAAA,GAAUF,GAAE,wBAAwB,CAAA,GAAIA,GAAE,2BAA2B,CAAA,CAAA;AACrH,EAAA,MAAM,WAAW,oBAAA,EAAqB;AACtC,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,cAAc,CAAA;AAChE,EAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,kBAAkB,CAAA;AACxE,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,YAAY,CAAA;AAC5D,EAAA,MAAM,mBAAA,GAAsB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,mBAAmB,CAAA;AAC1E,EAAA,MAAM,iBAAA,GAAoB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,iBAAiB,CAAA;AACtE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIG,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE1D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAyB,IAAI,CAAA;AAC3D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,QAAAA,CAAwB,EAAE,CAAA;AACpD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,QAAAA,CAA8B,EAAE,CAAA;AAClE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,QAAAA,CAA8B,EAAE,CAAA;AAChE,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAIA,SAAmC,IAAI,CAAA;AACnF,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAwB,IAAI,CAAA;AACtE,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIA,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,OAAA,GAAUgB,OAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,aAAa,CAAA;AAE9D,EAAA,eAAe,QAAA,GAAW;AACxB,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,MAAM,CAAC,GAAA,EAAK,QAAA,EAAU,SAAS,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,MACnD,QAAA,CAAS,eAAe,SAAS,CAAA;AAAA,MACjC,QAAA,CAAS,gBAAgB,SAAS,CAAA;AAAA,MAClC,QAAA,CAAS,YAAA,CAAa,EAAE,SAAA,EAAW;AAAA,KACpC,CAAA;AACD,IAAA,UAAA,CAAW,GAAG,CAAA;AACd,IAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,IAAA,YAAA;AAAA,MACE,SAAA,CAAU,KACP,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,aAAa,CAAA,CAAE,YAAA,KAAiB,MAAM,CAAA,CACpE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,EAAE,iBAAA,IAAqB,CAAA,KAAM,CAAA,CAAE,iBAAA,IAAqB,CAAA,CAAE;AAAA,KAC3E;AAEA,IAAA,WAAA;AAAA,MACE,SAAA,CAAU,KACP,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,SAAA,IAAa,CAAA,CAAE,YAAA,KAAiB,SAAS,EACvE,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,WAAA,IAAe,IAAI,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,EAAE,CAAC;AAAA,KAC5E;AACA,IAAA,UAAA,CAAW,KAAK,CAAA;AAAA,EAClB;AAEA,EAAAf,UAAU,MAAM;AAAE,IAAA,QAAA,EAAS;AAAA,EAAE,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAG3C,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,QAAA,EAAU;AACf,IAAA,SAAS,YAAY,CAAA,EAAe;AAClC,MAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,CAAC,OAAA,CAAQ,OAAA,CAAQ,SAAS,CAAA,CAAE,MAAc,CAAA,EAAG,WAAA,CAAY,KAAK,CAAA;AAAA,IACvF;AACA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,WAAW,CAAA;AAClD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,WAAW,CAAA;AAAA,EACpE,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,eAAe,kBAAA,GAAqB;AAClC,IAAA,IAAI,iBAAiB,cAAA,EAAgB;AACrC,IAAA,iBAAA,CAAkB,IAAI,CAAA;AACtB,IAAA,MAAM,QAAQ,GAAA,CAAI,CAAC,qBAAoB,EAAG,iBAAA,EAAmB,CAAC,CAAA;AAC9D,IAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,IAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,EACzB;AAEA,EAAA,SAAS,gBAAgB,KAAA,EAAe;AACtC,IAAA,MAAM,UAAU,aAAA,KAAkB,KAAA;AAClC,IAAA,gBAAA,CAAiB,OAAA,GAAU,QAAQ,IAAI,CAAA;AACvC,IAAA,IAAI,SAAS,kBAAA,EAAmB;AAAA,EAClC;AAEA,EAAA,eAAe,YAAA,GAAe;AAC5B,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,cAAc,SAAS,CAAA;AAC7B,MAAA,MAAM,QAAA,EAAS;AACf,MAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,MAAA,WAAA,CAAY,KAAK,CAAA;AAAA,IACnB,CAAA,CAAA,MAAQ;AAAA,IAER,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,IAACK,aAAAA,EAAA,EAAc,KAAA,EAAM,EAAA,EAAG,QAAgB,WAAA,EAA0B,CAAA;AAAA,sBAGlED,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EAA6B,CAAA;AAAA,wBAC5CI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EAAiD,CAAA;AAAA,8BAChEI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,gCAC5DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C;AAAA,eAAA,EAC9D;AAAA,aAAA,EACF,CAAA;AAAA,4BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EAAkD;AAAA,WAAA,EACnE,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0DAAA,EACZ,QAAA,EAAA,CAAC,GAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,IAAI,CAAC,CAAA,qBACjBI,IAAAA,CAAC,KAAA,EAAA,EAAY,WAAU,yBAAA,EACrB,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EAAgD,CAAA;AAAA,4BAC/DI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,8BAC5DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C;AAAA,aAAA,EAC9D;AAAA,WAAA,EAAA,EALQ,CAMV,CACD,CAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,CAAA,EAC9D,CAAA;AAAA,wBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,4BAC5DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C;AAAA,WAAA,EAC9D,CAAA;AAAA,UACC,CAAC,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,qBACXI,IAAAA,CAAC,KAAA,EAAA,EAAY,SAAA,EAAU,iEAAA,EACrB,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EAA4C,CAAA;AAAA,8BAC3DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,8BAC5DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C;AAAA,aAAA,EAC9D,CAAA;AAAA,4BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C;AAAA,WAAA,EAAA,EANpD,CAOV,CACD;AAAA,SAAA,EACH,CAAA;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,CAAA,EAC9D;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,wBAC5DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDACZ,QAAA,EAAA,CAAC,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,qBACRI,IAAAA,CAAC,KAAA,EAAA,EAAY,WAAU,mCAAA,EACrB,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EAA4C,CAAA;AAAA,0BAC3DI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,4BAC5DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C;AAAA,WAAA,EAC9D,CAAA;AAAA,0BACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+CAAA,EAAgD;AAAA,SAAA,EAAA,EANvD,CAOV,CACD,CAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAACK,eAAA,EAAc,KAAA,EAAON,GAAE,4BAA4B,CAAA,EAAG,QAAgB,WAAA,EAA0B,CAAA;AAAA,sBACjGC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,gCAAgC,CAAA,EAAE;AAAA,KAAA,EACpF,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,YAAA,GAAe,aAAA,CAAc,OAAA,CAAQ,MAAM,KAAK,aAAA,CAAc,OAAA;AACpE,EAAA,MAAM,aAAa,YAAA,CAAa,IAAA;AAChC,EAAA,MAAM,SAAA,GAAY,UAAU,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,UAAA,EAAY,CAAC,CAAA;AACpE,EAAA,MAAM,cAAA,GAAiB,QAAQ,WAAA,GAAc,SAAA;AAC7C,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,CAAO,CAAC,GAAA,EAAK,EAAA,KAAO,GAAA,GAAM,EAAA,CAAG,QAAA,GAAW,EAAA,CAAG,SAAA,EAAW,CAAC,CAAA;AAC9E,EAAA,MAAM,aAAA,GAAgB,MAAM,MAAA,CAAO,CAAC,KAAK,EAAA,KAAO,GAAA,GAAM,EAAA,CAAG,QAAA,EAAU,CAAC,CAAA;AACpE,EAAA,MAAM,cAAA,GAAiB,MAAM,MAAA,CAAO,CAAC,KAAK,EAAA,KAAO,GAAA,GAAM,EAAA,CAAG,SAAA,EAAW,CAAC,CAAA;AAEtE,EAAA,MAAM,WAAA,GAA6C;AAAA,IACjD;AAAA,MACE,EAAA,EAAI,OAAA;AAAA,MAAS,MAAA,EAAQA,GAAE,gCAAgC,CAAA;AAAA,MACvD,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,qBAAMC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA,GAAA,CAAI,KAAA,GAAQ,CAAA,EAAE;AAAA,KACpF;AAAA,IACA;AAAA,MACE,WAAA,EAAa,aAAA;AAAA,MAAe,MAAA,EAAQD,GAAE,qCAAqC,CAAA;AAAA,MAC3E,IAAA,EAAM,CAAC,EAAE,GAAA,uBACPK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iHAAA,EAAmH,QAAA,EAAA,GAAA,CAAI,SAAS,QAAA,EAAS,CAAA;AAAA,wBACzJA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,UAAA,EAAY,QAAA,EAAA,GAAA,CAAI,SAAS,WAAA,EAAY;AAAA,OAAA,EACvD;AAAA,KAEJ;AAAA,IACA;AAAA,MACE,WAAA,EAAa,UAAA;AAAA,MAAY,MAAA,EAAQ,sBAAMA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kBAAA,EAAoB,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE,CAAA;AAAA,MAC5G,IAAA,EAAM,CAAC,EAAE,QAAA,EAAS,qBAAMC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,QAAA,EAAS,EAAY;AAAA,KACxG;AAAA,IACA;AAAA,MACE,WAAA,EAAa,WAAA;AAAA,MAAa,MAAA,EAAQ,sBAAMA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kBAAA,EAAoB,QAAA,EAAAD,EAAAA,CAAE,mCAAmC,CAAA,EAAE,CAAA;AAAA,MACnH,IAAA,EAAM,CAAC,EAAE,QAAA,uBAAeC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,cAAA,CAAe,QAAA,EAAS,EAAa,QAAQ,CAAA,EAAE;AAAA,KAClI;AAAA,IACA;AAAA,MACE,WAAA,EAAa,aAAA;AAAA,MAAe,MAAA,EAAQ,sBAAMA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kBAAA,EAAoB,QAAA,EAAAD,EAAAA,CAAE,+BAA+B,CAAA,EAAE,CAAA;AAAA,MACjH,IAAA,EAAM,CAAC,EAAE,QAAA,uBAAeC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2CAAA,EAA6C,QAAA,EAAA,cAAA,CAAe,QAAA,EAAS,EAAa,QAAQ,CAAA,EAAE;AAAA;AACtI,GACF;AAEA,EAAA,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA;AAAA,MAACK,aAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,QAAQ,YAAA,GAAe,CAAA,CAAA,EAAI,QAAQ,YAAY,CAAA,CAAA,GAAK,OAAA,CAAQ,WAAA,IAAe,OAAA,CAAQ,WAAA;AAAA,QAC1F,MAAA;AAAA,QACA,WAAA;AAAA,QACA,OAAA,kBACED,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EACZ,QAAA,EAAA;AAAA,UAAA,OAAA,CAAQ,MAAA,KAAW,WAAA,IAAe,OAAA,CAAQ,MAAA,KAAW,0BACpDA,IAAAA,CAACQ,MAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,SAAS,MAAA,EAC3C,QAAA,EAAA;AAAA,4BAAAZ,GAAAA,CAACmB,MAAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,YAAE,GAAA;AAAA,YAAEpB,GAAE,wBAAwB;AAAA,WAAA,EAChE,CAAA;AAAA,UAED,OAAA,CAAQ,MAAA,KAAW,WAAA,IAAe,OAAA,CAAQ,MAAA,KAAW,MAAA,oBACpDK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EAAW,GAAA,EAAK,OAAA,EAC7B,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAACY,QAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,MAAA,EAAO,SAAS,MAAM,WAAA,CAAY,CAAC,QAAQ,CAAA,EAAG,cAAW,cAAA,EACtF,QAAA,kBAAAZ,IAACoB,YAAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU,CAAA,EACpC,CAAA;AAAA,YACC,QAAA,oBACCpB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yGAAA,EAA0G,KAAA,EAAO,EAAE,SAAA,EAAW,+BAAA,EAAgC,EAC3K,QAAA,kBAAAI,IAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,SAAS,MAAM;AAAE,kBAAA,gBAAA,CAAiB,IAAI,CAAA;AAAG,kBAAA,WAAA,CAAY,KAAK,CAAA;AAAA,gBAAE,CAAA;AAAA,gBAC5D,SAAA,EAAU,6GAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAJ,GAAAA,CAACM,GAAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,kBAAE,GAAA;AAAA,kBAAEP,GAAE,iCAAiC;AAAA;AAAA;AAAA,aACtE,EACF;AAAA,WAAA,EAEJ;AAAA,SAAA,EAEJ;AAAA;AAAA,KAEJ;AAAA,oBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EAEb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EAAiB,CAAA;AAAA,sBAGhCI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8EAAA,EACb,QAAA,kBAAAA,IAACqB,QAAAA,EAAA,EAAS,SAAA,EAAU,sBAAA,EAAuB,CAAA,EAC7C,CAAA;AAAA,4BACAjB,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oEAAA,EACV,QAAA,EAAA,SAAA,KAAc,OAAA,GAAUD,EAAAA,CAAE,mCAAmC,CAAA,GAAIA,EAAAA,CAAE,sCAAsC,CAAA,EAC5G,CAAA;AAAA,8BACAC,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,4BAA4B,OAAA,CAAQ,MAAA,KAAW,WAAA,GAAc,oCAAA,GAAuC,EAAE,CAAA,CAAA,EAAK,QAAA,EAAA,cAAA,CAAe,OAAA,CAAQ,WAAA,EAAa,QAAQ,CAAA,EAAE;AAAA,aAAA,EACzK;AAAA,WAAA,EACF,CAAA;AAAA,0BACAI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,CAAA,6FAAA,EAAgG,YAAA,CAAa,EAAE,CAAA,CAAA,EAC9H,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,YAAE,GAAA;AAAA,YAAED,EAAAA,CAAE,aAAa,QAAQ;AAAA,WAAA,EAC7D;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,4BAC7DI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAqC,QAAA,EAAAD,EAAAA,CAAE,2BAA2B,CAAA,EAAE,CAAA;AAAA,cAChF,OAAA,CAAQ,8BACPC,GAAAA,CAACsB,YAAA,EAAW,QAAA,EAAU,QAAQ,SAAA,EAAW,IAAA,EAAM,QAAQ,WAAA,EAAa,IAAA,EAAK,MAAK,CAAA,mBAE9EtB,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gCAA+B,QAAA,EAAA,QAAA,EAAC;AAAA,aAAA,EAEjD;AAAA,WAAA,EACF,CAAA;AAAA,0BACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,4BACjEI,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAqC,QAAA,EAAAD,EAAAA,CAAE,wBAAwB,CAAA,EAAE,CAAA;AAAA,8BAC9EC,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAuB,kBAAQ,WAAA,EAAY;AAAA,aAAA,EAC1D;AAAA,WAAA,EACF,CAAA;AAAA,0BACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,4BAC7DI,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAqC,QAAA,EAAAD,EAAAA,CAAE,gCAAgC,CAAA,EAAE,CAAA;AAAA,8BACtFK,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAuB,QAAA,EAAA;AAAA,gBAAA,OAAA,CAAQ,iBAAA;AAAA,gBAAkB;AAAA,eAAA,EAAC;AAAA,aAAA,EACjE;AAAA,WAAA,EACF,CAAA;AAAA,0BACAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,4BACnEI,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAqC,QAAA,EAAAD,EAAAA,CAAE,8BAA8B,CAAA,EAAE,CAAA;AAAA,8BACpFC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAuB,QAAA,EAAA,cAAA,CAAe,SAAA,EAAW,QAAQ,CAAA,EAAE;AAAA,aAAA,EAC1E;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,QAGC,QAAQ,eAAA,oBACPI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4CAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,iCAAA,EAAkC,CAAA;AAAA,0BAC1DI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCAAqC,QAAA,EAAAD,EAAAA,CAAE,2BAA2B,CAAA,EAAE,CAAA;AAAA,4BACjFK,IAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,MAAM,MAAA,CAAO,cAAA,GAAiB,QAAQ,EAAE,CAAA;AAAA,gBACjD,SAAA,EAAU,+EAAA;AAAA,gBAET,QAAA,EAAA;AAAA,kBAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,eAAe,CAAA,CAAE,kBAAA,CAAmB,MAAA,EAAW,EAAE,OAAA,EAAS,OAAA,EAAS,GAAA,EAAK,SAAA,EAAW,KAAA,EAAO,SAAS,CAAA;AAAA,kBACpH,GAAA;AAAA,kBACA,IAAI,IAAA,CAAK,OAAA,CAAQ,eAAe,CAAA,CAAE,kBAAA,CAAmB,MAAA,EAAW,EAAE,IAAA,EAAM,SAAA,EAAW,MAAA,EAAQ,SAAA,EAAW,CAAA;AAAA,kCACvGJ,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,aAAA,EAAc;AAAA;AAAA;AAAA;AACxC,WAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EAEJ,CAAA;AAAA,MAGC,MAAM,MAAA,GAAS,CAAA,oBACdI,IAAAA,CAAAmB,UAAA,EACE,QAAA,EAAA;AAAA,wBAAAvB,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kBAAA,EACb,QAAA,kBAAAA,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,0EAAA,EAA4E,QAAA,EAAAD,EAAAA,CAAE,yBAAyB,GAAE,CAAA,EACzH,CAAA;AAAA,wBACAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,MAAA,EACb,0BAAAA,GAAAA,CAAC,SAAA,EAAA,EAAU,OAAA,EAAS,WAAA,EAAa,MAAM,KAAA,EAAO,OAAA,EAAQ,MAAA,EAAO,OAAA,EAAO,MAAC,CAAA,EACvE,CAAA;AAAA,wBAGAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCACb,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACX,QAAA,EAAA;AAAA,UAAA,CAAA,aAAA,GAAgB,KAAK,cAAA,GAAiB,CAAA,qBACtCA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iCAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,4BAA4B,CAAA,EAAE,CAAA;AAAA,4BACzEC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gCAAgC,QAAA,EAAA,cAAA,CAAe,QAAA,EAAU,QAAQ,CAAA,EAAE;AAAA,WAAA,EACrF,CAAA;AAAA,UAED,gBAAgB,CAAA,oBACfI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8CAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAAD,EAAAA,CAAE,4BAA4B,CAAA,EAAE,CAAA;AAAA,4BACvCK,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAA+B,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,cAAE,cAAA,CAAe,eAAe,QAAQ;AAAA,aAAA,EAAE;AAAA,WAAA,EAC3F,CAAA;AAAA,UAED,iBAAiB,CAAA,oBAChBA,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,8CAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE,CAAA;AAAA,4BACxCK,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAAA,EAA+B,QAAA,EAAA;AAAA,cAAA,GAAA;AAAA,cAAE,cAAA,CAAe,gBAAgB,QAAQ;AAAA,aAAA,EAAE;AAAA,WAAA,EAC5F,CAAA;AAAA,0BAEFA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gDAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAAD,EAAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,4BACpCC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,gCAAgC,OAAA,CAAQ,MAAA,KAAW,WAAA,GAAc,oCAAA,GAAuC,EAAE,CAAA,CAAA,EAAK,QAAA,EAAA,cAAA,CAAe,OAAA,CAAQ,WAAA,EAAa,QAAQ,CAAA,EAAE;AAAA,WAAA,EAChL;AAAA,SAAA,EACF,CAAA,EACF;AAAA,OAAA,EACF,CAAA;AAAA,MAID,QAAQ,YAAA,oBACPI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oBAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+EAA+E,QAAA,EAAAD,EAAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,wBACzHC,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAiC,kBAAQ,YAAA,EAAa;AAAA,OAAA,EACrE;AAAA,KAAA,EAEJ,CAAA;AAAA,oBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,+CAA+C,QAAA,EAAAD,EAAAA,CAAE,mCAAmC,CAAA,EAAE,CAAA;AAAA,sBACpGC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACZ,QAAA,EAAA,SAAA,CAAU,MAAA,KAAW,CAAA,mBACpBA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EAAuD,UAAAD,EAAAA,CAAE,kCAAkC,CAAA,EAAE,CAAA,mBAE5GC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACZ,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,GAAA,KAAQ;AACtB,QAAA,MAAM,SAAA,GAAY,GAAA,CAAI,MAAA,GAAS,GAAA,CAAI,UAAA;AACnC,QAAA,MAAM,MAAA,GAAS,IAAI,MAAA,KAAW,MAAA;AAC9B,QAAA,MAAM,SAAA,GAAY,IAAI,MAAA,KAAW,SAAA;AACjC,QAAA,MAAM,iBAAiB,MAAA,IAAU,SAAA;AACjC,QAAA,MAAM,UAAA,GAAa,kBAAkB,GAAA,CAAI,EAAA;AACzC,QAAA,MAAM,SAAA,GAAY,aAAA,CAAc,GAAA,CAAI,MAAM,KAAK,aAAA,CAAc,OAAA;AAC7D,QAAA,MAAM,UAAU,SAAA,CAAU,IAAA;AAG1B,QAAA,MAAM,YAAA,GAAe,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAA,CAAO,EAAE,iBAAA,IAAqB,IAAA,OAAW,GAAA,CAAI,iBAAA,IAAqB,IAAA,CAAK,CAAA;AAE7G,QAAA,uBACEI,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAA,IAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAW,CAAA,kCAAA,EAAqC,cAAA,GAAiB,oDAAA,GAAuD,EAAE,CAAA,CAAA;AAAA,cAC1H,SAAS,cAAA,GAAiB,MAAM,eAAA,CAAgB,GAAA,CAAI,EAAE,CAAA,GAAI,MAAA;AAAA,cAE1D,QAAA,EAAA;AAAA,gCAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wDAAA,EAAyD,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,kBAAE,GAAA,CAAI;AAAA,iBAAA,EAAkB,CAAA;AAAA,gCACjGA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,kCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,oCAAAJ,GAAAA,CAAC,UAAK,SAAA,EAAU,kCAAA,EAAoC,yBAAe,GAAA,CAAI,MAAA,EAAQ,QAAQ,CAAA,EAAE,CAAA;AAAA,oCACzFI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,CAAA,8FAAA,EAAiG,SAAA,CAAU,EAAE,CAAA,CAAA,EAC5H,QAAA,EAAA;AAAA,sCAAAJ,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,sBAAE,GAAA;AAAA,sBAAED,EAAAA,CAAE,UAAU,QAAQ;AAAA,qBAAA,EACvD;AAAA,mBAAA,EACF,CAAA;AAAA,kCACAK,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EACV,QAAA,EAAA;AAAA,oBAAAL,GAAE,uBAAuB,CAAA;AAAA,oBAAE,GAAA;AAAA,oBAAE,GAAA,CAAI,OAAA;AAAA,oBACjC,GAAA,CAAI,UAAA,GAAa,CAAA,IAAK,CAAC,UAAU,CAAA,MAAA,EAAMA,EAAAA,CAAE,6BAA6B,CAAC,CAAA,CAAA,EAAI,cAAA,CAAe,GAAA,CAAI,UAAA,EAAY,QAAQ,CAAC,CAAA,CAAA;AAAA,oBACnH,GAAA,CAAI,eAAe,CAAA,MAAA,EAAMA,EAAAA,CAAE,0BAA0B,CAAC,CAAA,CAAA,EAAI,IAAI,WAAW,CAAA;AAAA,mBAAA,EAC5E;AAAA,iBAAA,EACF,CAAA;AAAA,gBACC,CAAC,MAAA,IAAU,CAAC,aAAa,OAAA,CAAQ,MAAA,KAAW,+BAC3CK,IAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,sBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,sBAAA,iBAAA,CAAkB,GAAG,CAAA;AAAA,oBAAE,CAAA;AAAA,oBAC9D,SAAA,EAAU,oOAAA;AAAA,oBAEV,QAAA,EAAA;AAAA,sCAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,sBAC/BD,GAAE,uBAAuB,CAAA;AAAA,sBAAE,GAAA;AAAA,sBAAE,YAAY,GAAA,CAAI,MAAA,GAAS,cAAA,CAAe,SAAA,EAAW,QAAQ,CAAA,GAAI;AAAA;AAAA;AAAA,iBAC/F;AAAA,gBAED,SAAA,IAAa,OAAA,CAAQ,MAAA,KAAW,WAAA,oBAC/BK,IAAAA;AAAA,kBAAC,QAAA;AAAA,kBAAA;AAAA,oBACC,OAAA,EAAS,CAAC,CAAA,KAAM;AAAE,sBAAA,CAAA,CAAE,eAAA,EAAgB;AAAG,sBAAA,iBAAA,CAAkB,GAAG,CAAA;AAAA,oBAAE,CAAA;AAAA,oBAC9D,SAAA,EAAU,6KAAA;AAAA,oBAEV,QAAA,EAAA;AAAA,sCAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,sBAC/BD,GAAE,uBAAuB,CAAA;AAAA,sBAAE,GAAA;AAAA,sBAAE,cAAA,CAAe,WAAW,QAAQ;AAAA;AAAA;AAAA,iBAClE;AAAA,gBAED,cAAA,oBACCC,GAAAA,CAACwB,WAAAA,EAAA,EAAY,WAAW,CAAA,6EAAA,EAAgF,UAAA,GAAa,YAAA,GAAe,EAAE,CAAA,CAAA,EAAI;AAAA;AAAA;AAAA,WAE9I;AAAA,0BAGAxB,GAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,2CAAA;AAAA,cACV,KAAA,EAAO,EAAE,gBAAA,EAAkB,UAAA,GAAa,QAAQ,KAAA,EAAM;AAAA,cAEtD,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBACb,QAAA,kBAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBACZ,QAAA,EAAA,cAAA,mBACCI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,gCAC5DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C,CAAA;AAAA,gCAC5DA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EAA6C;AAAA,eAAA,EAC9D,CAAA,GACE,aAAa,MAAA,KAAW,CAAA,mBAC1BA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE,CAAA,mBAErFC,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACZ,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,KAAM;AACvB,gBAAA,MAAM,OAAA,GAAU,eAAe,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,EAAE,eAAe,CAAA;AACrE,gBAAA,MAAM,KAAA,GAAQ,kBAAA,CAAmB,IAAA,CAAK,CAAC,EAAA,KAAO,GAAG,EAAA,MAAQ,OAAA,EAAS,mBAAA,IAAuB,CAAA,CAAE,mBAAA,CAAoB,CAAA;AAC/G,gBAAA,MAAM,QAAA,GAAW,aAAa,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,EAAE,aAAa,CAAA;AAClE,gBAAA,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAe,SAAA,EAAU,iFAAA,EACxB,QAAA,EAAA;AAAA,kCAAAJ,GAAAA,CAAC,UAAK,SAAA,EAAU,0BAAA,EAA4B,yBAAe,CAAA,CAAE,UAAA,EAAY,QAAQ,CAAA,EAAE,CAAA;AAAA,kBAClF,KAAA,oBACCI,IAAAA,CAAAmB,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oCAAAvB,GAAAA,CAAC,UAAK,QAAA,EAAA,MAAA,EAAQ,CAAA;AAAA,oCACdA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EAA+B,gBAAM,IAAA,EAAK,CAAA;AAAA,oBACzD,OAAA,oBAAWI,IAAAA,CAAC,MAAA,EAAA,EAAK,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,sBAAE,OAAA,CAAQ,IAAA;AAAA,sBAAK;AAAA,qBAAA,EAAC;AAAA,mBAAA,EACpC,CAAA;AAAA,kBAED,CAAA,CAAE,SAAA,oBACDA,IAAAA,CAAAmB,UAAA,EACE,QAAA,EAAA;AAAA,oCAAAvB,GAAAA,CAAC,UAAK,QAAA,EAAA,MAAA,EAAQ,CAAA;AAAA,oCACdA,GAAAA,CAACyB,UAAAA,EAAA,EAAW,WAAU,kBAAA,EAAmB,CAAA;AAAA,oCACzCzB,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,6BAAA,EAA+B,YAAE,SAAA,EAAU,CAAA;AAAA,oBAC1D,CAAA,CAAE,gBAAA,oBAAoBI,IAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,sBAAA,CAAA,CAAE,gBAAA;AAAA,sBAAiB;AAAA,qBAAA,EAAC;AAAA,mBAAA,EACpD,CAAA;AAAA,kBAED,QAAA,oBACCA,IAAAA,CAAAmB,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oCAAAvB,GAAAA,CAAC,UAAK,QAAA,EAAA,MAAA,EAAQ,CAAA;AAAA,oCACdA,GAAAA,CAAC0B,SAAAA,EAAA,EAAU,WAAU,kBAAA,EAAmB,CAAA;AAAA,oCACxC1B,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,QAAA,CAAS,IAAA,EAAK;AAAA,mBAAA,EACvB,CAAA;AAAA,kBAAA,CAEA,EAAE,SAAA,IAAa,CAAA,IAAK,qBACpBI,IAAAA,CAAAmB,UAAA,EACE,QAAA,EAAA;AAAA,oCAAAvB,GAAAA,CAAC,UAAK,QAAA,EAAA,MAAA,EAAQ,CAAA;AAAA,oCACdI,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAgB,QAAA,EAAA;AAAA,sBAAAL,GAAE,gCAAgC,CAAA;AAAA,sBAAE,GAAA;AAAA,sBAAE,cAAA,CAAe,CAAA,CAAE,SAAA,IAAa,CAAA,EAAG,QAAQ;AAAA,qBAAA,EAAE;AAAA,mBAAA,EACnH,CAAA;AAAA,kBAED,CAAA,CAAE,WAAA,oBACDK,IAAAA,CAAAmB,UAAA,EACE,QAAA,EAAA;AAAA,oCAAAvB,GAAAA,CAAC,UAAK,QAAA,EAAA,MAAA,EAAQ,CAAA;AAAA,oCACdA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,CAAA,CAAE,WAAA,EAAY;AAAA,mBAAA,EACvB,CAAA;AAAA,kBAED,CAAA,CAAE,KAAA,oBACDI,IAAAA,CAAAmB,UAAA,EACE,QAAA,EAAA;AAAA,oCAAAvB,GAAAA,CAAC,UAAK,QAAA,EAAA,MAAA,EAAQ,CAAA;AAAA,oCACdA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,YAAE,KAAA,EAAM;AAAA,mBAAA,EAC3D;AAAA,iBAAA,EAAA,EAxCM,EAAE,EA0CZ,CAAA;AAAA,cAEJ,CAAC,CAAA,EACH,CAAA,EAEJ,CAAA,EACF;AAAA;AAAA;AACF,SAAA,EAAA,EAjHQ,IAAI,EAkHd,CAAA;AAAA,MAEJ,CAAC,GACH,CAAA,EAEJ,CAAA;AAAA,MAGC,UAAU,MAAA,GAAS,CAAA,oBAClBI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,6EAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iCAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAA,EAAyB,QAAA,EAAA;AAAA,YAAAL,GAAE,6BAA6B,CAAA;AAAA,YAAE,GAAA;AAAA,4BAACC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA8B,QAAA,EAAA,cAAA,CAAe,SAAA,EAAW,QAAQ,CAAA,EAAE;AAAA,WAAA,EAAO,CAAA;AAAA,UACnK,iBAAiB,CAAA,oBAChBI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,uBAAA,EAAyB,QAAA,EAAA;AAAA,YAAAL,GAAE,6BAA6B,CAAA;AAAA,YAAE,GAAA;AAAA,4BAACC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAiC,QAAA,EAAA,cAAA,CAAe,cAAA,EAAgB,QAAQ,CAAA,EAAE;AAAA,WAAA,EAAO;AAAA,SAAA,EAEhL,CAAA;AAAA,QACC,kBAAkB,CAAA,oBACjBI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iEAAA,EACd,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACgB,cAAAA,EAAA,EAAe,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,UAAE,GAAA;AAAA,UAAEjB,GAAE,6BAA6B;AAAA,SAAA,EACzE;AAAA,OAAA,EAEJ;AAAA,KAAA,EAEJ,CAAA;AAAA,IAGC,kCACCC,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAU,cAAA;AAAA,QACV,OAAA,EAAS,MAAM,iBAAA,CAAkB,IAAI,CAAA;AAAA,QACrC,QAAQ,MAAM;AAAE,UAAA,iBAAA,CAAkB,IAAI,CAAA;AAAG,UAAA,QAAA,EAAS;AAAA,QAAE;AAAA;AAAA,KACtD;AAAA,IAID,aAAA,IAAiBQ,YAAAA;AAAA,sBAChBR,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EAAkE,SAAS,MAAM,gBAAA,CAAiB,KAAK,CAAA,EACpH,QAAA,kBAAAI,IAAAA,CAAC,SAAI,SAAA,EAAU,iEAAA,EAAkE,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB,EAAG,KAAA,EAAO,EAAE,SAAA,EAAW,+BAAA,EAAgC,EACxK,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oFAAA,EACb,QAAA,kBAAAA,IAACM,GAAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EAA2B,CAAA,EAC5C,CAAA;AAAA,0BACAF,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAJ,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,iCAAiC,CAAA,EAAE,CAAA;AAAA,4BAC5EC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,iCAAiC,CAAA,EAAE;AAAA,WAAA,EACrF;AAAA,SAAA,EACF,CAAA;AAAA,wBACAC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCACV,QAAA,EAAAD,EAAAA,CAAE,8BAA8B,CAAA,EACnC,CAAA;AAAA,wBACAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACY,MAAAA,EAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,MAAM,iBAAiB,KAAK,CAAA,EACtE,QAAA,EAAAb,EAAAA,CAAE,+BAA+B,CAAA,EACpC,CAAA;AAAA,0BACAK,IAAAA,CAACQ,MAAAA,EAAA,EAAO,OAAA,EAAQ,aAAA,EAAc,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,UAAA,EACvE,QAAA,EAAA;AAAA,4BAAAZ,GAAAA,CAACM,GAAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,YAC5B,UAAA,GAAaP,EAAAA,CAAE,8BAA8B,CAAA,GAAIA,GAAE,6BAA6B;AAAA,WAAA,EACnF;AAAA,SAAA,EACF;AAAA,OAAA,EACF,CAAA,EACF,CAAA;AAAA,MACA,QAAA,CAAS;AAAA,KACX;AAAA,oBAEAC,IAAC,OAAA,EAAA,EAAO,QAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAAA,CAAA,EAKN;AAAA,GAAA,EACJ,CAAA;AAEJ;;;AC9lBA,IAAM,mBAAA,GAA8C;AAAA,EAClD,OAAA,EAAS,uBAAA;AAAA,EACT,UAAA,EAAY,0BAAA;AAAA,EACZ,gBAAA,EAAkB,6BAAA;AAAA,EAClB,cAAA,EAAgB,8BAAA;AAAA,EAChB,WAAA,EAAa,2BAAA;AAAA,EACb,KAAA,EAAO,qBAAA;AAAA,EACP,kBAAA,EAAoB,2BAAA;AAAA,EACpB,eAAA,EAAiB;AACnB,CAAA;AAGO,SAAS,aAAA,CAAc,MAAiCD,EAAAA,EAAyB;AACtF,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,MAAM,GAAA,GAAM,oBAAoB,IAAI,CAAA;AACpC,EAAA,OAAO,GAAA,GAAMA,EAAAA,CAAE,GAAG,CAAA,GAAI,IAAA;AACxB;ACfO,SAAS,aAAa,EAAE,MAAA,EAAQ,UAAA,EAAY,YAAA,EAAc,MAAK,EAOnE;AACD,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AAEzB,EAAA,IAAI,MAAA,CAAO,SAAS,KAAA,EAAO;AACzB,IAAA,uBAAOD,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,SAAQ,OAAA,EAAS,CAAC,EAAA,KAAO,UAAA,CAAW,EAAA,GAAK,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAA,GAAK,eAAe,CAAA,EAAG,CAAA;AAAA,EACzH;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,MAAA,IAAU,MAAA,CAAO,MAAA,EAAQ;AAC3C,IAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,SAAQ,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,MAAM,UAAA,CAAW,CAAA,gBAAA,EAAmB,MAAA,CAAO,MAAM,EAAE,CAAA,EAAG,CAAA;AAAA,EAClI;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,MAAA,CAAO,MAAA,EAAQ;AAE7C,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,YAAA,EAAcD,EAAC,CAAA;AAC/C,IAAA,uBACEC,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,WAAW,MAAA,CAAO,MAAA;AAAA,QAClB,SAAA,EAAU,OAAA;AAAA,QACV,WAAW,SAAA,IAAa,MAAA;AAAA,QACxB,MAAA,EAAQ,aAAa,IAAA,GAAO,MAAM,KAAK,eAAe,CAAA,GAAI,MAAM,UAAA,CAAW,eAAe,CAAA;AAAA,QAC1F,QAAQ,MAAM,UAAA,CAAW,CAAA,cAAA,EAAiB,MAAA,CAAO,MAAM,CAAA,CAAE;AAAA;AAAA,KAC3D;AAAA,EAEJ;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,OAAA;AAAA,MACV,KAAA,EAAO,MAAM,UAAA,CAAW,cAAc,CAAA;AAAA,MACtC,QAAQ,CAAC,EAAA,KAAO,UAAA,CAAW,CAAA,gBAAA,EAAmB,EAAE,CAAA,CAAE;AAAA;AAAA,GACpD;AAEJ;ACvCO,SAAS,gBAAgB,EAAE,MAAA,EAAQ,UAAA,EAAY,YAAA,EAAc,MAAK,EAOtE;AACD,EAAA,MAAMD,KAAIE,cAAAA,EAAe;AAEzB,EAAA,IAAI,MAAA,CAAO,SAAS,KAAA,EAAO;AACzB,IAAA,uBAAOD,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,UAAS,OAAA,EAAS,CAAC,EAAA,KAAO,UAAA,CAAW,EAAA,GAAK,CAAA,mBAAA,EAAsB,EAAE,CAAA,CAAA,GAAK,kBAAkB,CAAA,EAAG,CAAA;AAAA,EAChI;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,MAAA,IAAU,MAAA,CAAO,MAAA,EAAQ;AAC3C,IAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,UAAS,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,OAAA,EAAS,MAAM,UAAA,CAAW,CAAA,mBAAA,EAAsB,MAAA,CAAO,MAAM,EAAE,CAAA,EAAG,CAAA;AAAA,EACtI;AAEA,EAAA,IAAI,MAAA,CAAO,IAAA,KAAS,QAAA,IAAY,MAAA,CAAO,MAAA,EAAQ;AAE7C,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,YAAA,EAAcD,EAAC,CAAA;AAC/C,IAAA,uBACEC,GAAAA;AAAA,MAAC,iBAAA;AAAA,MAAA;AAAA,QACC,WAAW,MAAA,CAAO,MAAA;AAAA,QAClB,SAAA,EAAU,QAAA;AAAA,QACV,WAAW,SAAA,IAAa,MAAA;AAAA,QACxB,MAAA,EAAQ,aAAa,IAAA,GAAO,MAAM,KAAK,kBAAkB,CAAA,GAAI,MAAM,UAAA,CAAW,kBAAkB,CAAA;AAAA,QAChG,QAAQ,MAAM,UAAA,CAAW,CAAA,iBAAA,EAAoB,MAAA,CAAO,MAAM,CAAA,CAAE;AAAA;AAAA,KAC9D;AAAA,EAEJ;AAEA,EAAA,uBACEA,GAAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAU,QAAA;AAAA,MACV,KAAA,EAAO,MAAM,UAAA,CAAW,iBAAiB,CAAA;AAAA,MACzC,QAAQ,CAAC,EAAA,KAAO,UAAA,CAAW,CAAA,mBAAA,EAAsB,EAAE,CAAA,CAAE;AAAA;AAAA,GACvD;AAEJ;AC7BA,IAAM,iBAAA,GAAoC;AAAA,EACxC,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,GAAA,EAAK,MAAM,MAAA,EAAO;AAAA,EAC5C,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,GAAA,EAAK,MAAM,MAAA,EAAO;AAAA,EAC5C,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,EAAA,EAAI,MAAM,MAAA,EAAO;AAAA,EAC1C,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,EAAA,EAAI,MAAM,MAAA,EAAO;AAAA,EAC1C,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,EAAA,EAAI,MAAM,MAAA,EAAO;AAAA,EAC1C,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,MAAM,MAAA,EAAO;AAAA,EACxC,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,MAAM,MAAA,EAAO;AAAA,EACxC,EAAE,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAO,CAAA,EAAG,MAAM,MAAA,EAAO;AAAA,EACxC,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,GAAA,EAAK,MAAM,MAAA,EAAO;AAAA,EAC7C,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,IAAA,EAAM,MAAM,MAAA,EAAO;AAAA,EAC9C,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,GAAA,EAAK,MAAM,MAAA,EAAO;AAAA,EAC7C,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,IAAA,EAAM,MAAM,MAAA;AACzC,CAAA;AAMA,SAAS,mBAAA,CAAoB;AAAA,EAC3B,aAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAMD,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,QAAQ,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AAC3D,EAAA,MAAM,QAAQ,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AAE3D,EAAA,SAAS,QAAA,CAAS,OAAe,KAAA,EAAe;AAC9C,IAAA,QAAA,CAAS,EAAE,GAAG,MAAA,EAAQ,CAAC,KAAK,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,CAAA,EAAG,CAAA;AAAA,EACrD;AAEA,EAAA,SAAS,UAAU,CAAA,EAAiB;AAClC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,IAAK,CAAA;AAC/B,IAAA,MAAM,QAAA,GAAW,MAAM,CAAA,CAAE,KAAA;AACzB,IAAA,uBACEG,IAAAA,CAAC,KAAA,EAAA,EAAkB,SAAA,EAAU,8BAAA,EAC3B,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gDAAA,EAAkD,YAAE,KAAA,EAAM,CAAA;AAAA,sBAC1EA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,MAAA,EAAC,CAAA;AAAA,sBACjDA,GAAAA;AAAA,QAAC,OAAA;AAAA,QAAA;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,GAAA,EAAK,CAAA;AAAA,UACL,OAAO,GAAA,IAAO,EAAA;AAAA,UACd,QAAA,EAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,KAAA,EAAO,QAAA,CAAS,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,IAAK,CAAC,CAAA;AAAA,UAChE,WAAA,EAAY,GAAA;AAAA,UACZ,SAAA,EAAU;AAAA;AAAA,OACZ;AAAA,sBACAA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAgC,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,sBACjDA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,oDACb,QAAA,EAAA,cAAA,CAAe,QAAA,EAAU,QAAQ,CAAA,EACpC;AAAA,KAAA,EAAA,EAdQ,EAAE,KAeZ,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCAAA,EACZ,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,MAAA,GAAS,CAAA,oBACdA,IAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kEAAkE,QAAA,EAAAD,EAAAA,CAAE,sBAAsB,CAAA,EAAE,CAAA;AAAA,MACxG,KAAA,CAAM,IAAI,SAAS;AAAA,KAAA,EACtB,CAAA;AAAA,IAED,KAAA,CAAM,MAAA,GAAS,CAAA,oBACdK,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kEAAkE,QAAA,EAAAD,EAAAA,CAAE,sBAAsB,CAAA,EAAE,CAAA;AAAA,MACxG,KAAA,CAAM,IAAI,SAAS;AAAA,KAAA,EACtB;AAAA,GAAA,EAEJ,CAAA;AAEJ;AAQA,SAAS,gBAAA,CAAiB;AAAA,EACxB,YAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,CAAC,mBAAmB,oBAAoB,CAAA,GAAIG,SAAiB,YAAA,CAAa,CAAC,CAAA,EAAG,EAAA,IAAM,EAAE,CAAA;AAC5F,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAmB,OAAO,CAAA;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,CAAC,CAAA;AAClD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,QAAAA,CAAiC,EAAE,CAAA;AAC/D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAMH,KAAIE,cAAAA,EAAe;AAEzB,EAAA,MAAM,YAAA,GAAeM,QAAQ,MAAM;AACjC,IAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAA,CAAO,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,IAAK,CAAA,IAAK,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,EACvF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,gBAAA,GAAmB,IAAA,KAAS,OAAA,GAAU,YAAA,GAAe,YAAA;AAE3D,EAAA,SAAS,SAAA,GAAY;AACnB,IAAA,eAAA,CAAgB,CAAC,CAAA;AACjB,IAAA,SAAA,CAAU,EAAE,CAAA;AACZ,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,aAAA,CAAc,KAAK,CAAA;AAAA,EACrB;AAEA,EAAA,eAAe,aAAA,GAAgB;AAC7B,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,CAAO,iBAAA,EAAmB,gBAAA,EAAkB,KAAA,IAAS,KAAA,CAAS,CAAA;AACpE,MAAA,SAAA,EAAU;AAAA,IACZ,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,IAAA,uBACEP,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qCACV,QAAA,EAAAD,EAAAA,CAAE,2BAA2B,CAAA,EAChC,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,+BAA+B,CAAA,EAAE,CAAA;AAAA,wBACzEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gCAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,0BACtEC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,aAAA,EAAe,QAAA,EAAA,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,iBAAiB,GAAG,IAAA,EAAK,CAAA;AAAA,0BAC1FA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,+BAA+B,CAAA,EAAE,CAAA;AAAA,0BAC5EC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uBAAuB,QAAA,EAAA,cAAA,CAAe,gBAAA,EAAkB,QAAQ,CAAA,EAAE,CAAA;AAAA,UACjF,IAAA,KAAS,OAAA,oBACRI,IAAAA,CAAAmB,UAAA,EACE,QAAA,EAAA;AAAA,4BAAAvB,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,uBAAuB,CAAA,EAAE,CAAA;AAAA,4BACpEC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAe,QAAA,EAAAD,EAAAA,CAAE,kCAAkC,CAAA,EAAE;AAAA,WAAA,EACvE,CAAA;AAAA,UAED,KAAA,oBACCK,IAAAA,CAAAmB,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAvB,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,sBAAsB,CAAA,EAAE,CAAA;AAAA,4BACnEC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAe,QAAA,EAAA,KAAA,EAAM;AAAA,WAAA,EACvC;AAAA,SAAA,EAEJ;AAAA,OAAA,EACF,CAAA;AAAA,sBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK,CAAA;AAAA,YAClC,SAAA,EAAU,sKAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAACS,CAAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,cAAE,GAAA;AAAA,cAAEV,GAAE,aAAa;AAAA;AAAA;AAAA,SAC5C;AAAA,wBACAK,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,aAAA;AAAA,YACT,QAAA,EAAU,UAAA;AAAA,YACV,SAAA,EAAU,iPAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAACa,KAAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,cAAE,GAAA;AAAA,cAAE,UAAA,GAAad,EAAAA,CAAE,wBAAwB,CAAA,GAAIA,GAAE,+BAA+B;AAAA;AAAA;AAAA;AAC7G,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EAEZ,QAAA,EAAA;AAAA,IAAA,YAAA,CAAa,MAAA,GAAS,CAAA,oBACrBA,IAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,2DAA2D,QAAA,EAAAD,EAAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,sBACzGC,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,iBAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,oBAAA,CAAqB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACpD,SAAA,EAAU,sHAAA;AAAA,UAET,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,qBACjBA,GAAAA,CAAC,QAAA,EAAA,EAAkB,KAAA,EAAO,CAAA,CAAE,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,IAAA,EAAA,EAAtB,CAAA,CAAE,EAAyB,CACzC;AAAA;AAAA;AACH,KAAA,EACF,CAAA;AAAA,oBAIFI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAO,CAAA;AAAA,UAC9B,SAAA,EAAW,CAAA,2DAAA,EACT,IAAA,KAAS,OAAA,GAAU,uCAAuC,gBAC5D,CAAA,CAAA;AAAA,UAEC,QAAA,EAAAD,GAAE,4BAA4B;AAAA;AAAA,OACjC;AAAA,sBACAK,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAO,CAAA;AAAA,UAC9B,SAAA,EAAW,CAAA,0FAAA,EACT,IAAA,KAAS,OAAA,GAAU,uCAAuC,gBAC5D,CAAA,CAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,YAAE,GAAA;AAAA,YAAED,GAAE,gCAAgC;AAAA;AAAA;AAAA;AACxE,KAAA,EACF,CAAA;AAAA,IAGC,IAAA,KAAS,2BACRC,GAAAA;AAAA,MAACU,aAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,YAAA;AAAA,QACP,QAAA,EAAU,eAAA;AAAA,QACV,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,cAAc,QAAA,CAAS,IAAA;AAAA,QACvB,KAAA,EAAOX,GAAE,+BAA+B;AAAA;AAAA,KAC1C;AAAA,IAID,SAAS,OAAA,oBACRK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAe,iBAAA;AAAA,UACf,MAAA;AAAA,UACA,QAAA,EAAU,SAAA;AAAA,UACV;AAAA;AAAA,OACF;AAAA,sBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uDAAuD,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE,CAAA;AAAA,wBACxGC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAqB,QAAA,EAAA,cAAA,CAAe,YAAA,EAAc,QAAQ,CAAA,EAAE;AAAA,OAAA,EAC9E;AAAA,KAAA,EACF,CAAA;AAAA,oBAIFA,GAAAA,CAAC,KAAA,EAAA,EACE,QAAA,EAAA,CAAC,4BACAI,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAM,YAAA,CAAa,IAAI,CAAA;AAAA,QAChC,SAAA,EAAU,sGAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,UAAE,GAAA;AAAA,UAAED,GAAE,yBAAyB;AAAA;AAAA;AAAA,KACjE,mBAEAK,IAAAA,CAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,2DAA2D,QAAA,EAAAD,EAAAA,CAAE,sBAAsB,CAAA,EAAE,CAAA;AAAA,sBACtGC,GAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,KAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACxC,IAAA,EAAM,CAAA;AAAA,UACN,WAAA,EAAaD,GAAE,oCAAoC,CAAA;AAAA,UACnD,SAAA,EAAU;AAAA;AAAA;AACZ,KAAA,EACF,CAAA,EAEJ,CAAA;AAAA,oBAGAK,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAM,aAAA,CAAc,IAAI,CAAA;AAAA,QACjC,UAAU,gBAAA,IAAoB,CAAA;AAAA,QAC9B,SAAA,EAAU,iPAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,UAAE,GAAA;AAAA,UAAED,GAAE,4BAA4B;AAAA;AAAA;AAAA;AAC9D,GAAA,EACF,CAAA;AAEJ;AAMA,SAAS,gBAAA,CAAiB;AAAA,EACxB,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAIG;AACD,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIG,SAAmB,OAAO,CAAA;AAClD,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,CAAC,CAAA;AAClD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,QAAAA,CAAiC,EAAE,CAAA;AAC/D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAS,KAAK,CAAA;AAClD,EAAA,MAAMH,KAAIE,cAAAA,EAAe;AAEzB,EAAA,MAAM,YAAA,GAAeM,QAAQ,MAAM;AACjC,IAAA,OAAO,iBAAA,CAAkB,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAA,CAAO,MAAA,CAAO,CAAA,CAAE,KAAK,CAAA,IAAK,CAAA,IAAK,CAAA,CAAE,OAAO,CAAC,CAAA;AAAA,EACvF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAEX,EAAA,MAAM,gBAAA,GAAmB,IAAA,KAAS,OAAA,GAAU,YAAA,GAAe,YAAA;AAC3D,EAAA,MAAM,UAAA,GAAa,mBAAmB,OAAA,CAAQ,cAAA;AAE9C,EAAA,eAAe,WAAA,GAAc;AAC3B,IAAA,aAAA,CAAc,IAAI,CAAA;AAClB,IAAA,IAAI;AACF,MAAA,MAAM,OAAA,CAAQ,OAAA,CAAQ,EAAA,EAAI,gBAAA,EAAkB,SAAS,KAAA,CAAS,CAAA;AAAA,IAChE,CAAA,SAAE;AACA,MAAA,aAAA,CAAc,KAAK,CAAA;AAAA,IACrB;AAAA,EACF;AAEA,EAAA,uBACEH,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAO,CAAA;AAAA,UAC9B,SAAA,EAAW,CAAA,2DAAA,EACT,IAAA,KAAS,OAAA,GAAU,uCAAuC,gBAC5D,CAAA,CAAA;AAAA,UAEC,QAAA,EAAAD,GAAE,4BAA4B;AAAA;AAAA,OACjC;AAAA,sBACAK,IAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAO,CAAA;AAAA,UAC9B,SAAA,EAAW,CAAA,0FAAA,EACT,IAAA,KAAS,OAAA,GAAU,uCAAuC,gBAC5D,CAAA,CAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,UAAA,EAAA,EAAW,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,YAAE,GAAA;AAAA,YAAED,GAAE,sBAAsB;AAAA;AAAA;AAAA;AAC9D,KAAA,EACF,CAAA;AAAA,IAEC,IAAA,KAAS,0BACRC,GAAAA;AAAA,MAACU,aAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO,YAAA;AAAA,QACP,QAAA,EAAU,eAAA;AAAA,QACV,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,QAAQ,QAAA,CAAS,MAAA;AAAA,QACjB,cAAc,QAAA,CAAS,IAAA;AAAA,QACvB,KAAA,EAAOX,GAAE,+BAA+B;AAAA;AAAA,KAC1C,mBAEAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAe,iBAAA;AAAA,UACf,MAAA;AAAA,UACA,QAAA,EAAU,SAAA;AAAA,UACV;AAAA;AAAA,OACF;AAAA,sBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uDAAuD,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE,CAAA;AAAA,wBACxGC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qBAAqB,QAAA,EAAA,cAAA,CAAe,YAAA,EAAc,QAAQ,CAAA,EAAE;AAAA,OAAA,EAC9E;AAAA,KAAA,EACF,CAAA;AAAA,IAID,mBAAmB,CAAA,oBAClBI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oEAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,sCAAsC,CAAA,EAAE,CAAA;AAAA,sBAC3FK,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,+BAAA,EACf,UAAA,GAAa,CAAA,GAAI,cAAA,GAAiB,UAAA,GAAa,CAAA,GAAI,kBAAA,GAAqB,uBAC1E,CAAA,CAAA,EACG,QAAA,EAAA;AAAA,QAAA,UAAA,IAAc,IAAI,GAAA,GAAM,EAAA;AAAA,QAAI,cAAA,CAAe,YAAY,QAAQ;AAAA,OAAA,EAClE;AAAA,KAAA,EACF,CAAA;AAAA,oBAIFA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,2DAA2D,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE,CAAA;AAAA,sBAC7GC,GAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,KAAA;AAAA,UACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,UACxC,IAAA,EAAM,CAAA;AAAA,UACN,WAAA,EAAaD,GAAE,oCAAoC,CAAA;AAAA,UACnD,SAAA,EAAU;AAAA;AAAA;AACZ,KAAA,EACF,CAAA;AAAA,oBAEAK,IAAAA;AAAA,MAACQ,MAAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAQ,aAAA;AAAA,QACR,IAAA,EAAK,IAAA;AAAA,QACL,OAAA,EAAS,WAAA;AAAA,QACT,QAAA,EAAU,cAAc,gBAAA,IAAoB,CAAA;AAAA,QAE5C,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,UAC/B,UAAA,GAAaD,EAAAA,CAAE,wBAAwB,CAAA,GAAIA,GAAE,6BAA6B;AAAA;AAAA;AAAA;AAC7E,GAAA,EACF,CAAA;AAEJ;AAMO,SAAS,iBAAA,GAAoB;AAClC,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAO,GAAI,kBAAA,EAAmB;AAChD,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,YAAY,CAAA;AAC5D,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,YAAY,CAAA;AAC5D,EAAA,MAAM,iBAAA,GAAoB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,iBAAiB,CAAA;AACtE,EAAA,MAAM,iBAAA,GAAoB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,iBAAiB,CAAA;AACtE,EAAA,MAAM,eAAA,GAAkB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,eAAe,CAAA;AAClE,EAAA,MAAM,gBAAA,GAAmB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,gBAAgB,CAAA;AAEpE,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIC,SAAwB,IAAI,CAAA;AAE1E,EAAAC,UAAU,MAAM;AACd,IAAA,iBAAA,EAAkB;AAClB,IAAA,iBAAA,EAAkB;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAe,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,gBAAgB,eAAe,CAAA;AACjF,EAAA,MAAM,eAAe,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,MAAM,CAAA;AACnE,EAAA,MAAM,iBAAiB,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,QAAQ,CAAA;AAEvE,EAAA,eAAe,UAAA,CAAW,SAAA,EAAmB,OAAA,EAAiB,KAAA,EAAgB;AAC5E,IAAA,MAAM,gBAAgB,EAAE,aAAA,EAAe,WAAW,cAAA,EAAgB,OAAA,EAAS,OAAO,CAAA;AAAA,EACpF;AAEA,EAAA,eAAe,WAAA,CAAY,SAAA,EAAmB,OAAA,EAAiB,KAAA,EAAgB;AAC7E,IAAA,MAAM,iBAAiB,EAAE,SAAA,EAAW,cAAA,EAAgB,OAAA,EAAS,OAAO,CAAA;AACpE,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB;AAEA,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAACK,aAAAA,EAAA,EAAc,KAAA,EAAO,MAAA,CAAO,aAAA,IAAiBN,EAAAA,CAAE,sBAAsB,CAAA,EAAG,QAAA,EAAUA,EAAAA,CAAE,yBAAyB,CAAA,EAAG,CAAA;AAAA,oBAGjHK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,sDAAA,EACb,0BAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,mBAAA,EAAoB,CAAA;AAAA,wBACxCA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,6BAA6B,CAAA,EAAE,CAAA;AAAA,QACvE,YAAA,CAAa,SAAS,CAAA,oBACrBC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yEAAA,EACb,QAAA,EAAA,YAAA,CAAa,MAAA,EAChB;AAAA,OAAA,EAEJ,CAAA,EACF,CAAA;AAAA,MAEC,YAAA,CAAa,MAAA,KAAW,CAAA,mBACvBA,GAAAA,CAAC,oBAAiB,YAAA,EAA4B,QAAA,EAAoB,MAAA,EAAQ,UAAA,EAAY,CAAA,mBAEtFA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACZ,QAAA,EAAA,YAAA,CAAa,GAAA,CAAI,CAAC,4BACjBI,IAAAA,CAAC,KAAA,EAAA,EAAqB,SAAA,EAAU,eAAA,EAC9B,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,OAAE,SAAA,EAAU,qBAAA,EAAuB,kBAAQ,eAAA,IAAmBD,EAAAA,CAAE,sBAAsB,CAAA,EAAE,CAAA;AAAA,4BACzFK,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA;AAAA,cAAAL,GAAE,uBAAuB,CAAA;AAAA,cAAE,GAAA;AAAA,cAAE,IAAI,IAAA,CAAK,OAAA,CAAQ,QAAQ,EAAE,cAAA,EAAe;AAAA,cACvE,OAAA,CAAQ,eAAe,CAAA,CAAA,EAAIA,EAAAA,CAAE,mBAAmB,CAAC,CAAA,CAAA,EAAI,OAAA,CAAQ,YAAY,CAAA,CAAA,GAAK;AAAA,aAAA,EACjF;AAAA,WAAA,EACF,CAAA;AAAA,0BACAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,4BAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+CAA+C,QAAA,EAAAD,EAAAA,CAAE,+BAA+B,CAAA,EAAE,CAAA;AAAA,4BAC/FC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAkC,QAAA,EAAA,cAAA,CAAe,OAAA,CAAQ,cAAA,EAAgB,QAAQ,CAAA,EAAE;AAAA,WAAA,EAClG;AAAA,SAAA,EACF,CAAA;AAAA,QAGC,eAAA,KAAoB,OAAA,CAAQ,EAAA,mBAC3BA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,OAAA,EAAkB,QAAA,EAAoB,OAAA,EAAS,WAAA,EAAa,CAAA,mBAE9EI,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,MAAM,kBAAA,CAAmB,OAAA,CAAQ,EAAE,CAAA;AAAA,YAC5C,SAAA,EAAU,gHAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAACwB,WAAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,cAAE,GAAA;AAAA,cAAEzB,GAAE,iCAAiC;AAAA;AAAA;AAAA;AAC1E,OAAA,EAAA,EAxBM,OAAA,CAAQ,EA0BlB,CACD,CAAA,EACH;AAAA,KAAA,EAEJ,CAAA;AAAA,IAGC,YAAA,CAAa,MAAA,GAAS,CAAA,IAAK,YAAA,CAAa,SAAS,YAAA,CAAa,MAAA,oBAC7DC,GAAAA,CAAC,sBAAA,EAAA,EAAuB,YAAA,EAA4B,YAAA,EAA4B,QAAA,EAAoB,QAAQ,UAAA,EAAY,CAAA;AAAA,oBAI1HI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,wBACjDA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,+BAA+B,CAAA,EAAE;AAAA,OAAA,EAC5E,CAAA;AAAA,MACC,cAAA,CAAe,MAAA,KAAW,CAAA,mBACzBC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EAAuD,QAAA,EAAAD,EAAAA,CAAE,iCAAiC,CAAA,EAAE,oBAE3GC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACZ,QAAA,EAAA,cAAA,CAAe,GAAA,CAAI,CAAC,4BACnBA,GAAAA,CAAC,KAAA,EAAA,EAAqB,SAAA,EAAU,WAAA,EAC9B,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,OAAE,SAAA,EAAU,qBAAA,EAAuB,kBAAQ,eAAA,IAAmBD,EAAAA,CAAE,sBAAsB,CAAA,EAAE,CAAA;AAAA,0BACzFK,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EACV,QAAA,EAAA;AAAA,YAAA,IAAI,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,CAAE,kBAAA,EAAmB;AAAA,YAAE,UAAA;AAAA,YAAI,OAAA,CAAQ,WAAW,IAAI,IAAA,CAAK,QAAQ,QAAQ,CAAA,CAAE,oBAAmB,GAAI;AAAA,WAAA,EAC5H,CAAA;AAAA,UACC,QAAQ,YAAA,oBACPA,IAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,mCAAA,EAAqC,QAAA,EAAA;AAAA,YAAAL,GAAE,mBAAmB,CAAA;AAAA,YAAE,GAAA;AAAA,YAAE,OAAA,CAAQ;AAAA,WAAA,EAAa;AAAA,SAAA,EAEpG,CAAA;AAAA,wBACAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,KAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,cAAAL,GAAE,0BAA0B,CAAA;AAAA,cAAE,IAAA;AAAA,cAAG,cAAA,CAAe,OAAA,CAAQ,cAAA,EAAgB,QAAQ;AAAA,aAAA,EAAE,CAAA;AAAA,4BACzFK,KAAC,MAAA,EAAA,EAAM,QAAA,EAAA;AAAA,cAAAL,GAAE,2BAA2B,CAAA;AAAA,cAAE,IAAA;AAAA,cAAG,cAAA,CAAe,OAAA,CAAQ,cAAA,IAAkB,CAAA,EAAG,QAAQ;AAAA,aAAA,EAAE;AAAA,WAAA,EACjG,CAAA;AAAA,UACC,QAAQ,UAAA,KAAe,MAAA,IAAa,OAAA,CAAQ,UAAA,KAAe,qBAC1DK,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAW,6CAA6C,OAAA,CAAQ,UAAA,GAAa,CAAA,GAAI,cAAA,GAAiB,kBAAkB,CAAA,CAAA,EACpH,QAAA,EAAA;AAAA,YAAAL,GAAE,qBAAqB,CAAA;AAAA,YAAE,IAAA;AAAA,YAAG,OAAA,CAAQ,UAAA,IAAc,CAAA,GAAI,GAAA,GAAM,EAAA;AAAA,YAAI,cAAA,CAAe,OAAA,CAAQ,UAAA,EAAY,QAAQ;AAAA,WAAA,EAC9G,CAAA;AAAA,UAED,OAAA,CAAQ,KAAA,oBACPC,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iEAAA,EAAkE,KAAA,EAAO,OAAA,CAAQ,KAAA,EAC3F,QAAA,EAAA,OAAA,CAAQ,KAAA,EACX;AAAA,SAAA,EAEJ;AAAA,OAAA,EACF,CAAA,EAAA,EA3BQ,OAAA,CAAQ,EA4BlB,CACD,CAAA,EACH;AAAA,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;AAMA,SAAS,sBAAA,CAAuB;AAAA,EAC9B,YAAA;AAAA,EACA,YAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAKG;AACD,EAAA,MAAMD,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,iBAAA,GAAoB,YAAA,CAAa,MAAA,CAAO,CAAC,MAAM,CAAC,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,KAAkB,CAAA,CAAE,EAAE,CAAC,CAAA;AAExG,EAAA,IAAI,iBAAA,CAAkB,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAE3C,EAAA,uBACEE,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,MAAM,WAAA,CAAY,CAAC,QAAQ,CAAA;AAAA,QACpC,SAAA,EAAU,4GAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAA,EACd,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EAAuB,CAAA;AAAA,YACtCD,GAAE,4BAA4B;AAAA,WAAA,EACjC,CAAA;AAAA,UACC,QAAA,mBAAWC,GAAAA,CAAC,SAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU,CAAA,mBAAKA,GAAAA,CAACwB,WAAAA,EAAA,EAAY,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AAAA,KACnF;AAAA,IACC,4BAAYxB,GAAAA,CAAC,oBAAiB,YAAA,EAAc,iBAAA,EAAmB,UAAoB,MAAA,EAAgB;AAAA,GAAA,EACtG,CAAA;AAEJ;AC7kBO,SAAS,aAAA,CAAc,EAAE,OAAA,EAAS,MAAA,EAAQ,eAAc,EAI5D;AACD,EAAA,MAAMD,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,YAAY,CAAA;AAC5D,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,cAAc,CAAA;AAChE,EAAA,MAAM,iBAAA,GAAoB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,iBAAiB,CAAA;AAEtE,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,QAAAA,CAAS,iBAAiB,EAAE,CAAA;AACtE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIA,SAAS,EAAE,CAAA;AACjD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,CAAC,CAAA;AACtC,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,QAAAA,CAAAA,iBAAS,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AACtE,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,KAAK,CAAA;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,KAAK,CAAA;AAE5C,EAAAC,UAAU,MAAM;AACd,IAAA,iBAAA,EAAkB;AAClB,IAAA,qBAAA,CAAsB,MAAM,UAAA,CAAW,IAAI,CAAC,CAAA;AAAA,EAC9C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,SAAS,WAAA,GAAc;AACrB,IAAA,UAAA,CAAW,KAAK,CAAA;AAChB,IAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,EACzB;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,CAAC,aAAA,IAAiB,aAAA,KAAkB,WAAA;AACzD,EAAA,MAAM,SAAA,GAAY,CAAC,CAAC,aAAA,IAAiB,CAAC,CAAC,WAAA,IAAe,CAAC,WAAA,IAAe,MAAA,GAAS,CAAA,IAAK,CAAC,MAAA;AAGrF,EAAA,SAAS,cAAc,CAAA,EAAwB;AAC7C,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAA,EAAU;AACrC,IAAA,IAAK,CAAA,CAAE,MAAA,CAAuB,OAAA,KAAY,UAAA,EAAY;AACtD,IAAA,CAAA,CAAE,cAAA,EAAe;AACjB,IAAA,IAAI,SAAA,OAAgB,YAAA,EAAa;AAAA,EACnC;AAEA,EAAA,eAAe,YAAA,GAAe;AAC5B,IAAA,IAAI,CAAC,SAAA,EAAW;AAChB,IAAA,SAAA,CAAU,IAAI,CAAA;AACd,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,CAAe,EAAE,aAAA,EAAe,WAAA,EAAa,QAAQ,IAAA,EAAM,KAAA,EAAO,KAAA,IAAS,KAAA,CAAA,EAAW,CAAA;AAC5F,MAAA,UAAA,CAAW,KAAK,CAAA;AAChB,MAAA,UAAA,CAAW,QAAQ,GAAG,CAAA;AAAA,IACxB,CAAA,CAAA,MAAQ;AAAA,IAER,CAAA,SAAE;AACA,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,IACjB;AAAA,EACF;AAEA,EAAA,MAAM,WAAA,GAAc,iHAAA;AAEpB,EAAA,OAAOK,YAAAA;AAAA,oBACLR,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,oFAAA;AAAA,QACV,KAAA,EAAO,EAAE,eAAA,EAAiB,OAAA,GAAU,oBAAoB,eAAA,EAAgB;AAAA,QACxE,OAAA,EAAS,WAAA;AAAA,QAET,QAAA,kBAAAI,IAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,sHAAA;AAAA,YACV,KAAA,EAAO,EAAE,OAAA,EAAS,OAAA,GAAU,IAAI,CAAA,EAAG,SAAA,EAAW,OAAA,GAAU,wBAAA,GAA2B,6BAAA,EAA8B;AAAA,YACjH,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YAClC,SAAA,EAAW,aAAA;AAAA,YAGX,QAAA,EAAA;AAAA,8BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EACb,QAAA,EAAA;AAAA,gCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,kCAAAJ,GAAAA,CAAC2B,cAAAA,EAAA,EAAe,SAAA,EAAU,sBAAA,EAAuB,CAAA;AAAA,kCACjD3B,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,2BAA2B,QAAA,EAAAD,EAAAA,CAAE,0BAA0B,CAAA,EAAE;AAAA,iBAAA,EACzE,CAAA;AAAA,gCACAC,GAAAA,CAAC,QAAA,EAAA,EAAO,OAAA,EAAS,WAAA,EAAa,SAAA,EAAU,mEAAA,EACtC,QAAA,kBAAAA,GAAAA,CAACS,CAAAA,EAAA,EAAE,SAAA,EAAU,WAAU,CAAA,EACzB;AAAA,eAAA,EACF,CAAA;AAAA,8BAEAL,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,EAAA;AAAA,gCAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,kCAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,oCAC3FK,IAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAO,eAAe,QAAA,EAAU,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,WAAW,WAAA,EAC1F,QAAA,EAAA;AAAA,sCAAAJ,IAAC,QAAA,EAAA,EAAO,KAAA,EAAM,IAAI,QAAA,EAAAD,EAAAA,CAAE,kCAAkC,CAAA,EAAE,CAAA;AAAA,sBACvD,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,qBAAMC,GAAAA,CAAC,QAAA,EAAA,EAAkB,KAAA,EAAO,CAAA,CAAE,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,IAAA,EAAA,EAAtB,CAAA,CAAE,EAAyB,CAAS;AAAA,qBAAA,EAC5E;AAAA,mBAAA,EACF,CAAA;AAAA,kCACAI,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,uBAAuB,CAAA,EAAE,CAAA;AAAA,oCACzFK,IAAAA,CAAC,QAAA,EAAA,EAAO,KAAA,EAAO,aAAa,QAAA,EAAU,CAAC,CAAA,KAAM,cAAA,CAAe,CAAA,CAAE,MAAA,CAAO,KAAK,CAAA,EAAG,WAAW,WAAA,EACtF,QAAA,EAAA;AAAA,sCAAAJ,IAAC,QAAA,EAAA,EAAO,KAAA,EAAM,IAAI,QAAA,EAAAD,EAAAA,CAAE,kCAAkC,CAAA,EAAE,CAAA;AAAA,sBACvD,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,qBAAMC,GAAAA,CAAC,QAAA,EAAA,EAAkB,KAAA,EAAO,CAAA,CAAE,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,IAAA,EAAA,EAAtB,CAAA,CAAE,EAAyB,CAAS;AAAA,qBAAA,EAC5E;AAAA,mBAAA,EACF;AAAA,iBAAA,EACF,CAAA;AAAA,gBAEC,WAAA,oBACCA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAU,0BAAA,EAA4B,QAAA,EAAAD,EAAAA,CAAE,gCAAgC,CAAA,EAAE,CAAA;AAAA,gCAG/EK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,kCAAAJ,GAAAA;AAAA,oBAACU,aAAAA;AAAA,oBAAA;AAAA,sBACC,KAAA,EAAOX,GAAE,2BAA2B,CAAA;AAAA,sBACpC,KAAA,EAAO,MAAA;AAAA,sBACP,QAAA,EAAU,SAAA;AAAA,sBACV,QAAQ,QAAA,CAAS,MAAA;AAAA,sBACjB,QAAQ,QAAA,CAAS,MAAA;AAAA,sBACjB,cAAc,QAAA,CAAS;AAAA;AAAA,mBACzB;AAAA,kCACAK,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,oCAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,oCAC3FC,IAACW,UAAAA,EAAA,EAAW,OAAO,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,SAAA,EAAU,MAAA,EAAO;AAAA,mBAAA,EAC/D;AAAA,iBAAA,EACF,CAAA;AAAA,gCAEAP,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,kCAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,6CAA6C,QAAA,EAAAD,EAAAA,CAAE,0BAA0B,CAAA,EAAE,CAAA;AAAA,kCAC5FC,GAAAA;AAAA,oBAAC,OAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,MAAA;AAAA,sBACL,KAAA,EAAO,KAAA;AAAA,sBACP,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,sBACxC,WAAA,EAAaD,GAAE,kCAAkC,CAAA;AAAA,sBACjD,SAAA,EAAU;AAAA;AAAA;AACZ,iBAAA,EACF;AAAA,eAAA,EACF,CAAA;AAAA,8BAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,gCAAAJ,GAAAA,CAACY,MAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,WAAA,EAC1C,QAAA,EAAAb,EAAAA,CAAE,2BAA2B,CAAA,EAChC,CAAA;AAAA,gCACAK,IAAAA,CAACQ,MAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,YAAA,EAAc,QAAA,EAAU,CAAC,SAAA,EACpE,QAAA,EAAA;AAAA,kCAAAZ,GAAAA,CAAC2B,cAAAA,EAAA,EAAe,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,kBACvC,MAAA,GAAS5B,EAAAA,CAAE,+BAA+B,CAAA,GAAIA,GAAE,2BAA2B;AAAA,iBAAA,EAC9E;AAAA,eAAA,EACF;AAAA;AAAA;AAAA;AACF;AAAA,KACF;AAAA,IACA,QAAA,CAAS;AAAA,GACX;AACF;AC3IA,IAAM,GAAA,GAAM,KAAA;AAKZ,SAAS,eAAA,CAAgB,EAAE,IAAA,EAAM,KAAA,EAAM,EAAuD;AAC5F,EAAA,uBACEC,GAAAA,CAAC,eAAA,EAAA,EAAgB,eAAe,GAAA,EAC9B,QAAA,kBAAAI,KAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAO,IAAA,EACrB,QAAA,kBAAAA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EACb,QAAA,EAAA,IAAA,KAAS,YAAA,mBACNA,IAAC,UAAA,EAAA,EAAW,SAAA,EAAU,yBAAA,EAA0B,CAAA,mBAChDA,GAAAA,CAAC4B,UAAA,EAAS,SAAA,EAAU,kCAAA,EAAmC,CAAA,EAC7D,CAAA,EACF,CAAA;AAAA,oBACA5B,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,WAAW,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EAC7C,CAAA,EACF,CAAA;AAEJ;AAIA,SAAS,iBAAA,CAAkB,EAAE,QAAA,EAAU,OAAA,EAAS,QAAO,EAA+D;AACpH,EAAA,MAAM,KAAA,mBACJI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,kFAAA,EACd,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC2B,cAAAA,EAAA,EAAe,SAAA,EAAU,sBAAA,EAAuB,CAAA;AAAA,oBACjD3B,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAY,QAAA,EAAA,QAAA,EAAS;AAAA,GAAA,EACvC,CAAA;AAEF,EAAA,uBACEA,GAAAA,CAAC,eAAA,EAAA,EAAgB,eAAe,GAAA,EAC9B,QAAA,kBAAAI,KAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,kBAAe,OAAA,EAAO,IAAA,EACpB,mCACGA,GAAAA,CAAC,YAAO,OAAA,EAAS,MAAA,EAAQ,WAAU,sCAAA,EAAwC,QAAA,EAAA,KAAA,EAAM,oBACjFA,GAAAA,CAAC,UAAK,SAAA,EAAU,gBAAA,EAAkB,iBAAM,CAAA,EAC9C,CAAA;AAAA,oBACAA,GAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,WAAW,QAAA,EAAA,OAAA,EAAQ;AAAA,GAAA,EAC/C,CAAA,EACF,CAAA;AAEJ;AAEO,SAAS,cAAA,CAAe,EAAE,UAAA,EAAW,EAA4C;AACtF,EAAA,MAAMD,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,YAAY,CAAA;AAC5D,EAAA,MAAM,SAAA,GAAY,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,SAAS,CAAA;AACtD,EAAA,MAAM,gBAAA,GAAmB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,gBAAgB,CAAA;AACpE,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,cAAc,CAAA;AAChE,EAAA,MAAM,kBAAA,GAAqB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,kBAAkB,CAAA;AACxE,EAAA,MAAM,iBAAA,GAAoB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,iBAAiB,CAAA;AACtE,EAAA,MAAM,mBAAA,GAAsB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,mBAAmB,CAAA;AAC1E,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,cAAc,CAAA;AAEhE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,SAAS,EAAE,CAAA;AAC7C,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIA,SAAS,MAAM;AAC7C,IAAA,MAAM,CAAA,uBAAQ,IAAA,EAAK;AAAG,IAAA,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAA,EAAS,GAAI,CAAC,CAAA;AACjD,IAAA,OAAO,CAAA,CAAE,WAAA,EAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,EACpC,CAAC,CAAA;AACD,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,SAAS,MAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY,CAAE,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AAChF,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEtD,EAAAC,UAAU,MAAM;AAAE,IAAA,iBAAA,EAAkB;AAAG,IAAA,mBAAA,EAAoB;AAAA,EAAE,CAAA,EAAG,EAAE,CAAA;AAGlE,EAAA,MAAM,UAAA,GAAaI,QAAQ,MAAM;AAC/B,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAC9D,IAAA,MAAM,QAAA,GAAW,IAAI,GAAA,CAAI,kBAAA,CAAmB,GAAA,CAAI,CAAC,EAAA,KAAO,CAAC,EAAA,CAAG,EAAA,EAAI,EAAA,CAAG,IAAI,CAAC,CAAC,CAAA;AACzE,IAAA,OAAO,CAAC,GAAA,KAA4C;AAClD,MAAA,IAAI,GAAA,CAAI,eAAA,IAAmB,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,eAAe,CAAA,EAAG,OAAO,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,eAAe,CAAA;AAC7F,MAAA,IAAI,GAAA,CAAI,mBAAA,IAAuB,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,mBAAmB,CAAA,EAAG,OAAO,QAAA,CAAS,GAAA,CAAI,GAAA,CAAI,mBAAmB,CAAA;AACjH,MAAA,IAAI,GAAA,CAAI,SAAA,EAAW,OAAO,GAAA,CAAI,SAAA;AAC9B,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,cAAA,EAAgB,kBAAkB,CAAC,CAAA;AAGvC,EAAA,SAAS,YAAY,CAAA,EAAmB;AACtC,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,CAAA,CAAE,SAAS,SAAA,EAAW;AAC1C,IAAA,MAAM,IAAA,GAAO,CAAA,CAAE,QAAA,CAAS,SAAA,KAAc,WAAW,aAAA,GAAgB,UAAA;AACjE,IAAA,UAAA,CAAW,GAAG,IAAI,CAAA,QAAA,EAAW,CAAA,CAAE,QAAA,CAAS,SAAS,CAAA,CAAE,CAAA;AAAA,EACrD;AAEA,EAAAJ,UAAU,MAAM;AACd,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,cAAA,CAAe;AAAA,QACb,aAAA,EAAe,SAAA,KAAc,GAAA,GAAM,MAAA,GAAY,SAAA;AAAA,QAC/C,SAAA,EAAW,EAAE,IAAA,EAAM,QAAA,EAAU,IAAI,MAAA;AAAO,OACzC,CAAA;AAAA,IACH;AAAA,EACF,CAAA,EAAG,CAAC,SAAA,EAAW,QAAA,EAAU,MAAM,CAAC,CAAA;AAIhC,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,SAAA,EAAW,YAAA,CAAa,GAAG,CAAA;AAAA,EAClC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAc,cAAA,CAAe,GAAG,QAAQ,CAAA;AAErD,EAAA,MAAM,OAAA,GAA4CI,QAAQ,MAAM;AAAA,IAC9D;AAAA,MACE,EAAA,EAAI,MAAA;AAAA,MAAQ,MAAA,EAAQR,GAAE,iCAAiC,CAAA;AAAA,MACvD,MAAM,CAAC,EAAE,GAAA,EAAI,qBACXC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,cAAI,QAAA,CAAS,QAAA,CAAS,eAAe,GAAA,CAAI,QAAA,CAAS,SAAS,OAAA,EAAQ;AAAA,KAExH;AAAA,IACA;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MAAe,MAAA,EAAQD,GAAE,wCAAwC,CAAA;AAAA,MACrE,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,KAAM;AACjB,QAAA,MAAM,IAAI,GAAA,CAAI,QAAA;AACd,QAAA,MAAM,UAAA,GAAa,EAAE,SAAA,KAAc,UAAA;AACnC,QAAA,MAAM,IAAA,GAAO,EAAE,QAAA,CAAS,KAAA;AACxB,QAAA,MAAM,KAAA,GAAQ,EAAE,OAAA,EAAS,WAAA,KACnB,aAAaA,EAAAA,CAAE,+BAA+B,IAAK,IAAA,IAAQ,aAAA,CAAA;AAEjE,QAAA,MAAM,QAAA,GAAW,IAAA,IAAQ,IAAA,KAAS,KAAA,GAAQ,IAAA,GAAO,MAAA;AACjD,QAAA,MAAM,GAAA,GAAM,EAAE,OAAA,EAAS,YAAA;AACvB,QAAA,MAAM,IAAA,GAAO,EAAE,QAAA,CAAS,iBAAA;AACxB,QAAA,MAAM,UAAU,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,QAAA,CAAS,SAAA;AAC7C,QAAA,uBACEK,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2BAAA,EAEb,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAACsB,UAAAA,EAAA,EAAW,QAAA,EAAU,CAAA,CAAE,SAAS,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAK,IAAA,EAAK,CAAA;AAAA,YAElE,GAAA,KAAQ,0BACPtB,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS,MAAM,WAAA,CAAY,CAAC,CAAA;AAAA,gBAC5B,SAAA,EAAU,gFAAA;AAAA,gBACV,KAAA,EAAOD,GAAE,kCAAkC,CAAA;AAAA,gBAE1C,QAAA,EAAA;AAAA;AAAA,gCAGHC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+CAA+C,QAAA,EAAA,GAAA,EAAI,CAAA,CAAA;AAAA,YAEpE,UAAA,oBACCA,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gGAAA,EACb,QAAA,EAAAD,EAAAA,CAAE,+BAA+B,CAAA,EACpC,CAAA;AAAA,YAKD,CAAA,CAAE,QAAA,CAAS,YAAA,mBACVC,GAAAA,CAAC,mBAAgB,IAAA,EAAK,YAAA,EAAa,KAAA,EAAOD,EAAAA,CAAE,iCAAiC,CAAA,EAAG,IAC9E,CAAA,CAAE,QAAA,CAAS,cAAA,mBACbC,GAAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAK,UAAA,EAAW,KAAA,EAAOD,EAAAA,CAAE,+BAA+B,CAAA,EAAG,CAAA,GAC1E,IAAA;AAAA,YAEH,CAAA,CAAE,mBAAmB,MAAM;AAC1B,cAAA,MAAM,KAAK,CAAA,CAAE,cAAA;AACb,cAAA,MAAM,QAAA,GAAW,EAAA,CAAG,YAAA,IAAgB,EAAA,CAAG,WAAA,IAAe,EAAA,CAAG,WAAA,IAAe,EAAA,CAAG,UAAA,CAAW,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAChG,cAAA,MAAM,IAAA,GAAO,CAAA,CAAE,QAAA,CAAS,SAAA,KAAc,WAAW,aAAA,GAAgB,UAAA;AACjE,cAAA,MAAM,MAAA,GAAS,UAAA,IAAc,EAAA,CAAG,SAAA,GAAY,MAAM,UAAA,CAAW,CAAA,EAAG,IAAI,CAAA,QAAA,EAAW,EAAA,CAAG,SAAS,CAAA,CAAE,CAAA,GAAI,MAAA;AACjG,cAAA,uBACEC,GAAAA;AAAA,gBAAC,iBAAA;AAAA,gBAAA;AAAA,kBACC,QAAA;AAAA,kBACA,SAASD,EAAAA,CAAE,qCAAA,EAAuC,EAAE,GAAA,EAAK,UAAU,CAAA;AAAA,kBACnE;AAAA;AAAA,eACF;AAAA,YAEJ,CAAA;AAAG,WAAA,EACL,CAAA;AAAA,UACC,4BAAYC,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kCAAkC,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,0BACrEI,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EACX,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,UAAK,SAAA,EAAU,YAAA,EACb,wBAAc,CAAA,CAAE,kBAAA,GACZ,EAAE,SAAA,KAAc,aAAA,GAAgB,UAAK,CAAA,CAAE,kBAAkB,KAAK,CAAA,OAAA,EAAK,CAAA,CAAE,kBAAkB,CAAA,CAAA,GACxF,CAAA,CAAE,SAAS,YAAA,EACjB,CAAA;AAAA,YACC,IAAA,GAAO,SAAMD,EAAAA,CAAE,uCAAA,EAAyC,EAAE,CAAA,EAAG,IAAA,EAAM,CAAC,CAAA,CAAA,GAAK;AAAA,WAAA,EAC5E;AAAA,SAAA,EACF,CAAA;AAAA,MAEJ;AAAA,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,QAAA;AAAA,MAAU,MAAA,EAAQA,GAAE,mCAAmC,CAAA;AAAA,MAC3D,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,KAAM;AACjB,QAAA,MAAM,GAAA,GAAM,IAAI,QAAA,CAAS,QAAA;AACzB,QAAA,MAAM,IAAA,GAAO,WAAW,GAAG,CAAA;AAC3B,QAAA,uBACEK,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,SAAA,EAAW,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,UAC5B,GAAA,CAAI,oBAAoB,GAAA,CAAI,gBAAA,GAAmB,qBAC9CI,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EAAqC,QAAA,EAAA;AAAA,YAAA,GAAA,CAAI,gBAAA;AAAA,YAAiB;AAAA,WAAA,EAAC;AAAA,SAAA,EAE5E,CAAA;AAAA,MAEJ;AAAA,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,OAAA;AAAA,MAAS,MAAA,EAAQL,GAAE,kCAAkC,CAAA;AAAA,MACzD,IAAA,EAAM,CAAC,EAAE,GAAA,uBACPC,GAAAA,CAAC,UAAK,SAAA,EAAU,2CAAA,EACb,cAAI,QAAA,CAAS,QAAA,CAAS,cAAc,OAAA,GAAU,GAAA,CAAI,IAAI,QAAA,CAAS,GAAG,IAAI,EAAA,EACzE;AAAA,KAEJ;AAAA,IACA;AAAA,MACE,EAAA,EAAI,QAAA;AAAA,MAAU,MAAA,EAAQD,GAAE,mCAAmC,CAAA;AAAA,MAC3D,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,KAAM;AACjB,QAAA,MAAM,IAAI,GAAA,CAAI,QAAA;AACd,QAAA,IAAI,CAAA,CAAE,SAAS,SAAA,KAAc,QAAA,yBAAiBC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAA,EAAmB,CAAA;AACjF,QAAA,uBACEI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,YAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8BAA8B,QAAA,EAAA,GAAA,CAAI,CAAA,CAAE,GAAG,CAAA,EAAE,CAAA;AAAA,UACxD,EAAE,GAAA,GAAM,CAAA,oBACPI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,yCAAA,EAA2C,QAAA,EAAA;AAAA,YAAA,GAAA,CAAI,EAAE,KAAK,CAAA;AAAA,YAAE,UAAA;AAAA,YAAI,GAAA,CAAI,EAAE,GAAG;AAAA,WAAA,EAAE;AAAA,SAAA,EAE3F,CAAA;AAAA,MAEJ;AAAA,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,KAAA;AAAA,MAAO,MAAA,EAAQL,GAAE,gCAAgC,CAAA;AAAA,MACrD,MAAM,CAAC,EAAE,KAAI,qBACXC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yCACb,QAAA,EAAA,GAAA,CAAI,QAAA,CAAS,MAAM,CAAA,GAAI,GAAA,CAAI,IAAI,QAAA,CAAS,GAAG,IAAI,EAAA,EAClD;AAAA,KAEJ;AAAA,IACA;AAAA,MACE,EAAA,EAAI,SAAA;AAAA,MAAW,MAAA,EAAQD,GAAE,oCAAoC,CAAA;AAAA,MAC7D,IAAA,EAAM,CAAC,EAAE,GAAA,uBACPC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,sCAAA,EAAwC,QAAA,EAAA,GAAA,CAAI,GAAA,CAAI,QAAA,CAAS,cAAc,CAAA,EAAE;AAAA;AAE7F,KACC,CAAC,QAAA,EAAUD,EAAAA,EAAG,UAAA,EAAY,UAAU,CAAC,CAAA;AAExC,EAAA,MAAM,OAAA,GAAU,SAAA,EAAW,OAAA,IAAW,EAAC;AAEvC,EAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA;AAAA,MAACK,aAAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAON,GAAE,4BAA4B,CAAA;AAAA,QACrC,QAAA,EAAUA,GAAE,+BAA+B,CAAA;AAAA,QAC3C,yBACEK,IAAAA,CAACQ,MAAAA,EAAA,EAAO,SAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,MAAM,eAAA,CAAgB,IAAI,GAAG,QAAA,EAAU,YAAA,CAAa,SAAS,CAAA,EACxG,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAAC2B,cAAAA,EAAA,EAAe,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,UACvC5B,GAAE,kCAAkC;AAAA,SAAA,EACvC;AAAA;AAAA,KAEJ;AAAA,oBAGAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8CAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,2DAA2D,QAAA,EAAAD,EAAAA,CAAE,8BAA8B,CAAA,EAAE,CAAA;AAAA,wBAC9GK,IAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,SAAA;AAAA,YACP,UAAU,CAAC,CAAA,KAAM,YAAA,CAAa,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,YAC5C,SAAA,EAAU,mHAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAJ,IAAC,QAAA,EAAA,EAAO,KAAA,EAAO,KAAM,QAAA,EAAAD,EAAAA,CAAE,+BAA+B,CAAA,EAAE,CAAA;AAAA,cACvD,YAAA,CAAa,GAAA,CAAI,CAAC,CAAA,qBACjBC,GAAAA,CAAC,QAAA,EAAA,EAAkB,KAAA,EAAO,CAAA,CAAE,EAAA,EAAK,QAAA,EAAA,CAAA,CAAE,IAAA,EAAA,EAAtB,CAAA,CAAE,EAAyB,CACzC;AAAA;AAAA;AAAA;AACH,OAAA,EACF,CAAA;AAAA,sBACAI,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,2DAA2D,QAAA,EAAAD,EAAAA,CAAE,2BAA2B,CAAA,EAAE,CAAA;AAAA,wBAC3GC,IAACW,UAAAA,EAAA,EAAW,OAAO,QAAA,EAAU,QAAA,EAAU,WAAA,EAAa,SAAA,EAAU,QAAA,EAAS;AAAA,OAAA,EACzE,CAAA;AAAA,sBACAP,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAJ,IAAC,OAAA,EAAA,EAAM,SAAA,EAAU,2DAA2D,QAAA,EAAAD,EAAAA,CAAE,yBAAyB,CAAA,EAAE,CAAA;AAAA,wBACzGC,IAACW,UAAAA,EAAA,EAAW,OAAO,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,SAAA,EAAU,QAAA,EAAS;AAAA,OAAA,EACrE;AAAA,KAAA,EACF,CAAA;AAAA,IAGC,aAAa,SAAA,oBACZP,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uCAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAOD,EAAAA,CAAE,8BAA8B,GAAG,KAAA,EAAO,GAAA,CAAI,SAAA,CAAU,cAAc,CAAA,EAAG,CAAA;AAAA,sBAC7FC,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAOD,EAAAA,CAAE,mCAAmC,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,SAAA,CAAU,YAAY,CAAA,EAAG,UAAQ,IAAA,EAAC,CAAA;AAAA,sBACzGC,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAOD,EAAAA,CAAE,kCAAkC,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,SAAA,CAAU,WAAW,CAAA,EAAG,UAAQ,IAAA,EAAC,CAAA;AAAA,sBACvGC,GAAAA,CAAC,WAAA,EAAA,EAAY,KAAA,EAAOD,EAAAA,CAAE,8BAA8B,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,SAAA,CAAU,cAAc,CAAA,EAAG,QAAM,IAAA,EAAC;AAAA,KAAA,EACtG,CAAA;AAAA,IAID,CAAC,SAAA,mBACAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4GAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,OAAA,EAAA,EAAQ,SAAA,EAAU,oCAAA,EAAqC,CAAA;AAAA,sBACxDA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,mCAAmC,CAAA,EAAE;AAAA,KAAA,EACvF,IACE,gBAAA,mBACFC,IAAC6B,SAAAA,EAAA,EAAU,SAAkB,IAAA,EAAM,IAAI,OAAA,EAAO,IAAA,EAAC,cAAc,CAAA,EAAG,OAAA,EAAO,MAAC,CAAA,GACtE,OAAA,CAAQ,WAAW,CAAA,mBACrB7B,IAAC6B,SAAAA,EAAA,EAAU,SAAkB,IAAA,EAAM,IAAI,YAAA,EAAc9B,EAAAA,CAAE,qCAAqC,CAAA,EAAG,OAAA,EAAO,MAAC,CAAA,mBAEvGC,IAAC6B,SAAAA,EAAA,EAAU,SAAkB,IAAA,EAAM,OAAA,EAAS,SAAO,IAAA,EAAC,CAAA;AAAA,IAGrD,gCACC7B,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAe,SAAA,IAAa,SAAA,KAAc,GAAA,GAAM,SAAA,GAAY,MAAA;AAAA,QAC5D,OAAA,EAAS,MAAM,eAAA,CAAgB,KAAK,CAAA;AAAA,QACpC,MAAA,EAAQ,MAAM,eAAA,CAAgB,KAAK;AAAA;AAAA;AACrC,GAAA,EAEJ,CAAA;AAEJ;AAEA,SAAS,YAAY,EAAE,KAAA,EAAO,OAAO,MAAA,EAAQ,QAAA,EAAU,UAAS,EAM7D;AACD,EAAA,MAAM,aAAa,QAAA,GAAW,cAAA,GAAiB,QAAA,GAAW,kBAAA,GAAqB,SAAS,iBAAA,GAAoB,iBAAA;AAC5G,EAAA,uBACEI,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,+BAA+B,MAAA,GAAS,aAAA,GAAgB,SAAS,CAAA,CAAA,EAC/E,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kEAAA,EAAoE,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACvFA,GAAAA,CAAC,GAAA,EAAA,EAAE,WAAW,CAAA,6BAAA,EAAgC,UAAU,IAAK,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EACrE,CAAA;AAEJ;ACzUO,SAAS,eAAA,GAAkB;AAChC,EAAA,MAAMD,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,MAAA,EAAO,GAAI,kBAAA,EAAmB;AAEtC,EAAA,uBACEG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAACK,eAAA,EAAc,KAAA,EAAO,OAAO,WAAA,EAAa,QAAA,EAAUN,EAAAA,CAAE,gCAAgC,CAAA,EAAG,CAAA;AAAA,oBACzFC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wFACb,QAAA,kBAAAA,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAAD,EAAAA,CAAE,kCAAkC,GAAE,CAAA,EACtF;AAAA,GAAA,EACF,CAAA;AAEJ;ACXO,SAAS,SAAA,GAAY;AAC1B,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAU,MAAA,EAAO,GAAI,kBAAA,EAAmB;AAChD,EAAA,MAAM,gBAAA,GAAmB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,gBAAgB,CAAA;AACpE,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,YAAY,CAAA;AAC5D,EAAA,MAAM,qBAAA,GAAwB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,qBAAqB,CAAA;AAE9E,EAAAE,UAAU,MAAM;AAAE,IAAA,qBAAA,EAAsB;AAAA,EAAE,CAAA,EAAG,EAAE,CAAA;AAG/C,EAAA,MAAM,UAAmD,EAAC;AAC1D,EAAA,KAAA,MAAW,MAAM,gBAAA,EAAkB;AACjC,IAAA,MAAM,KAAA,GAAQ,GAAG,SAAA,IAAa,OAAA;AAC9B,IAAA,IAAI,CAAC,OAAA,CAAQ,KAAK,GAAG,OAAA,CAAQ,KAAK,IAAI,EAAC;AACvC,IAAA,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAAA,EACxB;AAEA,EAAA,uBACEC,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAACK,aAAAA,EAAA,EAAc,KAAA,EAAON,EAAAA,CAAE,uBAAuB,CAAA,EAAG,QAAA,EAAUA,EAAAA,CAAE,0BAA0B,CAAA,EAAG,CAAA;AAAA,IAC1F,YAAA,mBACCC,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,iDAAA,EAAkD,QAAA,EAAA,YAAA,EAAU,CAAA,GACzE,gBAAA,CAAiB,WAAW,CAAA,mBAC9BI,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,4GAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+FAAA,EACb,QAAA,kBAAAA,IAACyB,UAAAA,EAAA,EAAW,SAAA,EAAU,yBAAA,EAA0B,CAAA,EAClD,CAAA;AAAA,sBACAzB,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,gCAAgC,CAAA,EAAE,CAAA;AAAA,sBAClFC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,wCAAwC,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,CAAA,EAAE;AAAA,KAAA,EAC/F,CAAA,GAEA,MAAA,CAAO,OAAA,CAAQ,OAAO,EAAE,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,GAAG,CAAA,qBACtCK,IAAAA,CAAC,KAAA,EAAA,EAAgB,WAAU,qCAAA,EACzB,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAACyB,UAAAA,EAAA,EAAW,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,wBAChDzB,GAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAyB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBAC7CI,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,UAAA,GAAA;AAAA,UAAE,GAAA,CAAI,MAAA;AAAA,UAAO;AAAA,SAAA,EAAc;AAAA,OAAA,EAC7E,CAAA;AAAA,sBACAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,UAAA,EACZ,QAAA,EAAA,GAAA,CAAI,GAAA,CAAI,CAAC,EAAA,qBACRI,IAAAA,CAAC,KAAA,EAAA,EAAgB,WAAU,6CAAA,EACzB,QAAA,EAAA;AAAA,wBAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,qBAAA,EAAsB,QAAA,EAAA;AAAA,YAAA,cAAA;AAAA,YACpB,EAAA,CAAG,kBAAA;AAAA,YAAmB,GAAA;AAAA,YAAE,EAAA,CAAG;AAAA,WAAA,EAC1C,CAAA;AAAA,0BACAA,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAgC,QAAA,EAAA;AAAA,YAAA,OAAA;AAAA,YAAM,EAAA,CAAG;AAAA,WAAA,EAAa;AAAA,SAAA,EACrE,CAAA;AAAA,wBACAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,UAAK,SAAA,EAAU,qBAAA,EAAuB,yBAAe,EAAA,CAAG,iBAAA,EAAmB,QAAQ,CAAA,EAAE,CAAA;AAAA,UACrF,GAAG,MAAA,KAAW,UAAA,mBACbI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,+HAAA,EACd,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAACa,KAAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,YAAE;AAAA,WAAA,EACnC,oBAEAb,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2HAA0H,QAAA,EAAA,SAAA,EAE1I;AAAA,SAAA,EAEJ;AAAA,OAAA,EAAA,EAlBQ,EAAA,CAAG,EAmBb,CACD,CAAA,EACH;AAAA,KAAA,EAAA,EA7BQ,KA8BV,CACD;AAAA,GAAA,EAEL,CAAA;AAEJ;ACxDO,SAAS,kBAAA,GAAqB;AACnC,EAAA,MAAMD,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,WAAW,oBAAA,EAAqB;AACtC,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAc,cAAA,CAAe,GAAG,QAAQ,CAAA;AAErD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,QAAAA,CAA8B,EAAE,CAAA;AAC1D,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,IAAI,CAAA;AAC3C,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,SAAwB,IAAI,CAAA;AAChE,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIA,QAAAA,CAAoC,EAAE,CAAA;AAC1E,EAAA,MAAM,CAAC,iBAAA,EAAmB,oBAAoB,CAAA,GAAIA,SAAS,KAAK,CAAA;AAChE,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIA,SAAS,KAAK,CAAA;AAEtC,EAAA,MAAM,SAAA,GAAY,OAAO,QAAA,CAAS,eAAA,KAAoB,UAAA;AAEtD,EAAA,MAAM,IAAA,GAAO,YAAY,YAAY;AACnC,IAAA,IAAI,CAAC,SAAS,eAAA,EAAiB;AAC/B,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,MAAM,QAAA,CAAS,eAAA,EAAgB;AAC5C,MAAA,QAAA,CAAS,IAAI,CAAA;AAEb,MAAA,aAAA,CAAc,CAAC,IAAA,KAAU,IAAA,IAAQ,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,IAAI,CAAA,GAAI,IAAA,GAAO,IAAK,CAAA;AAAA,IACjF,CAAA,SAAE;AACA,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAAC,UAAU,MAAM;AAAE,IAAA,KAAK,IAAA,EAAK;AAAA,EAAE,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAGvC,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,IAAc,CAAC,QAAA,CAAS,qBAAA,EAAuB;AAAE,MAAA,aAAA,CAAc,EAAE,CAAA;AAAG,MAAA;AAAA,IAAO;AAChF,IAAA,IAAI,SAAA,GAAY,KAAA;AAChB,IAAA,oBAAA,CAAqB,IAAI,CAAA;AACzB,IAAA,QAAA,CAAS,qBAAA,CAAsB,UAAU,CAAA,CACtC,IAAA,CAAK,CAAC,CAAA,KAAM;AAAE,MAAA,IAAI,CAAC,SAAA,EAAW,aAAA,CAAc,CAAC,CAAA;AAAA,IAAE,CAAC,CAAA,CAChD,OAAA,CAAQ,MAAM;AAAE,MAAA,IAAI,CAAC,SAAA,EAAW,oBAAA,CAAqB,KAAK,CAAA;AAAA,IAAE,CAAC,CAAA;AAChE,IAAA,OAAO,MAAM;AAAE,MAAA,SAAA,GAAY,IAAA;AAAA,IAAK,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,UAAA,EAAY,QAAQ,CAAC,CAAA;AAEzB,EAAA,eAAe,KAAA,CAAM,gBAAwB,iBAAA,EAA4B;AACvE,IAAA,IAAI,CAAC,SAAS,iBAAA,EAAmB;AACjC,IAAA,OAAA,CAAQ,IAAI,CAAA;AACZ,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,CAAS,iBAAA,CAAkB,EAAE,cAAA,EAAgB,mBAAmB,CAAA;AACtE,MAAA2B,KAAAA,CAAM,OAAA,CAAQ/B,EAAAA,CAAE,gCAAgC,CAAC,CAAA;AACjD,MAAA,MAAM,IAAA,EAAK;AAAA,IACb,CAAA,CAAA,MAAQ;AACN,MAAA+B,KAAAA,CAAM,KAAA,CAAM/B,EAAAA,CAAE,cAAc,CAAC,CAAA;AAAA,IAC/B,CAAA,SAAE;AACA,MAAA,OAAA,CAAQ,KAAK,CAAA;AAAA,IACf;AAAA,EACF;AAEA,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC4B,QAAAA,EAAA,EAAS,SAAA,EAAU,+CAAA,EAAgD,CAAA;AAAA,sBACpE5B,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,gCAAgC,CAAA,EAAE;AAAA,KAAA,EACpF,CAAA;AAAA,EAEJ;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,UAAU,CAAA,IAAK,IAAA;AAE3D,EAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wCAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAJ,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,wCAAwC,QAAA,EAAAD,EAAAA,CAAE,gCAAgC,CAAA,EAAE,CAAA;AAAA,wBAC1FC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,mCAAmC,CAAA,EAAE;AAAA,OAAA,EACvF,CAAA;AAAA,sBACAK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EACb,QAAA,EAAA,KAAA,CAAM,SAAS,CAAA,GACZD,EAAAA,CAAE,kCAAA,EAAoC,EAAE,OAAO,KAAA,CAAM,MAAA,EAAQ,CAAA,GAC7DA,EAAAA,CAAE,kCAAkC,CAAA,EAC1C,CAAA;AAAA,wBACAK,IAAAA,CAACQ,MAAAA,EAAA,EAAO,SAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,MAAM,KAAK,IAAA,EAAK,EAAG,QAAA,EAAU,WAAW,IAAA,EACnF,QAAA,EAAA;AAAA,0BAAAZ,IAAC,SAAA,EAAA,EAAU,SAAA,EAAW,eAAe,OAAA,GAAU,cAAA,GAAiB,EAAE,CAAA,CAAA,EAAI,CAAA;AAAA,UACrED,GAAE,kCAAkC;AAAA,SAAA,EACvC;AAAA,OAAA,EACF;AAAA,KAAA,EACF,CAAA;AAAA,IAEC,KAAA,CAAM,WAAW,CAAA,IAAK,CAAC,0BACtBK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAACa,KAAAA,EAAA,EAAM,SAAA,EAAU,sCAAA,EAAuC,CAAA;AAAA,sBACxDb,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uBAAuB,QAAA,EAAAD,EAAAA,CAAE,gCAAgC,CAAA,EAAE,CAAA;AAAA,sBACxEC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sCAAsC,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,CAAA,EAAE;AAAA,KAAA,EAC7F,CAAA,mBAEAK,IAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2BAAA,EAEb,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC4B,QAAAA,EAAA,EAAS,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,0BACpD5B,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,CAAA,EAAE;AAAA,SAAA,EACjF,CAAA;AAAA,wBACAC,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uCACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,KAAS;AACnB,UAAA,MAAM,QAAA,GAAW,KAAK,SAAA,KAAc,QAAA;AACpC,UAAA,uBACEI,IAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cAEC,OAAA,EAAS,MAAM,aAAA,CAAc,IAAA,CAAK,EAAE,CAAA;AAAA,cACpC,WAAW,CAAA,uFAAA,EACT,UAAA,KAAe,IAAA,CAAK,EAAA,GAAK,gBAAgB,EAC3C,CAAA,CAAA;AAAA,cAEC,QAAA,EAAA;AAAA,gBAAA,QAAA,mBACGJ,GAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,+BAAA,EAAgC,oBAC3DA,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,mCAAA,EAAoC,CAAA;AAAA,gCACjEI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,kCAAAJ,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oBAAoB,QAAA,EAAA,IAAA,CAAK,KAAA,IAAS,KAAK,UAAA,EAAW,CAAA;AAAA,kCAC/DI,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EACV,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAK,eAAe,IAAA,CAAK,OAAA;AAAA,oBACzB,KAAK,cAAA,oBAAkBA,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,8BAAA,EAA+B,QAAA,EAAA;AAAA,sBAAA,OAAA;AAAA,sBAAG,IAAA,CAAK;AAAA,qBAAA,EAAe;AAAA,mBAAA,EAChG;AAAA,iBAAA,EACF,CAAA;AAAA,gCACAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,+BAAA,EAAkC,QAAA,GAAW,cAAA,GAAiB,kBAAkB,CAAA,CAAA,EAC9F,QAAA,EAAA,GAAA,CAAI,IAAA,CAAK,MAAM,CAAA,EAClB;AAAA;AAAA,aAAA;AAAA,YAlBK,IAAA,CAAK;AAAA,WAmBZ;AAAA,QAEJ,CAAC,CAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,sBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qDAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4CAAA,EACb,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,+BAAA,EAAgC,CAAA;AAAA,0BACpDA,IAAC,IAAA,EAAA,EAAG,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,qCAAqC,CAAA,EAAE;AAAA,SAAA,EAClF,CAAA;AAAA,QAEC,CAAC,QAAA,mBACAC,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sDAAA,EACV,QAAA,EAAAD,EAAAA,CAAE,qCAAqC,CAAA,EAC1C,CAAA,mBAEAC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACZ,QAAA,EAAA,iBAAA,mBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iDAAA,EAAkD,QAAA,EAAA,QAAA,EAAC,CAAA,mBAElEI,IAAAA,CAAAmB,QAAAA,EAAA,EACG,QAAA,EAAA;AAAA,UAAA,UAAA,CAAW,IAAI,CAAC,CAAA,qBACfnB,IAAAA,CAAC,KAAA,EAAA,EAAwB,WAAU,iDAAA,EACjC,QAAA,EAAA;AAAA,4BAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,EAAA;AAAA,8BAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kBAAA,EACV,YAAE,OAAA,EAAS,WAAA,IAAe,CAAA,CAAE,QAAA,CAAS,SAAS,CAAA,CAAE,OAAA,EAAS,YAAA,IAAgBD,EAAAA,CAAE,gCAAgC,CAAA,EAC9G,CAAA;AAAA,8BACAK,IAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,mCAAA,EACV,QAAA,EAAA;AAAA,gBAAA,CAAA,CAAE,QAAA,CAAS,OAAA;AAAA,gCACZJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,2FAAA,EACb,UAAAD,EAAAA,CAAE,qCAAA,EAAuC,EAAE,KAAA,EAAO,KAAK,KAAA,CAAM,CAAA,CAAE,QAAQ,GAAG,CAAA,EAAG,CAAA,EAChF;AAAA,eAAA,EACF;AAAA,aAAA,EACF,CAAA;AAAA,4BACAC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kCAAkC,QAAA,EAAA,GAAA,CAAI,CAAA,CAAE,QAAA,CAAS,MAAM,CAAA,EAAE,CAAA;AAAA,4BACzEI,IAAAA,CAACQ,MAAAA,EAAA,EAAO,IAAA,EAAK,MAAK,QAAA,EAAU,IAAA,EAAM,OAAA,EAAS,MAAM,MAAM,QAAA,CAAS,EAAA,EAAI,CAAA,CAAE,QAAA,CAAS,EAAE,CAAA,EAC/E,QAAA,EAAA;AAAA,8BAAAZ,GAAAA,CAAC,KAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,cAC9BD,GAAE,gCAAgC;AAAA,aAAA,EACrC;AAAA,WAAA,EAAA,EAhBQ,CAAA,CAAE,QAAA,CAAS,EAiBrB,CACD,CAAA;AAAA,UACA,UAAA,CAAW,MAAA,KAAW,CAAA,oBACrBC,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,gDAAA,EACV,QAAA,EAAAD,EAAAA,CAAE,uCAAuC,CAAA,EAC5C,CAAA;AAAA,0BAIFK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,KAACQ,MAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,MAAK,IAAA,EAAK,SAAA,EAAU,QAAA,EAAS,QAAA,EAAU,MAAM,OAAA,EAAS,MAAM,KAAA,CAAM,QAAA,CAAS,EAAE,CAAA,EACrG,QAAA,EAAA;AAAA,8BAAAZ,GAAAA,CAACa,KAAAA,EAAA,EAAM,SAAA,EAAU,aAAA,EAAc,CAAA;AAAA,cAC9Bd,GAAE,iCAAiC;AAAA,aAAA,EACtC,CAAA;AAAA,4BACAC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,sDACV,QAAA,EAAAD,EAAAA,CAAE,qCAAqC,CAAA,EAC1C;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,EAEJ;AAAA,OAAA,EAEJ;AAAA,KAAA,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;AC9MO,SAAS,wBAAA,GAA2B;AACzC,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,uBACEG,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,iBAAc,KAAA,EAAOL,EAAAA,CAAE,6BAA6B,CAAA,EAAG,WAAA,EAAaA,EAAAA,CAAE,iCAAiC,CAAA,EACtG,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAOD,EAAAA,CAAE,qCAAqC,CAAA,EAAG,WAAA,EAAaA,EAAAA,CAAE,yCAAyC,CAAA,EAAG,OAAA,EAAS,IAAA,EAAM,UAAU,MAAM;AAAA,MAAC,CAAA,EAAG,CAAA;AAAA,sBAC1JC,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAOD,GAAE,+BAA+B,CAAA,EAAG,WAAA,EAAaA,EAAAA,CAAE,mCAAmC,CAAA,EAAG,OAAA,EAAS,KAAA,EAAO,UAAU,MAAM;AAAA,MAAC,CAAA,EAAG,CAAA;AAAA,sBAC/IC,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAOD,GAAE,iCAAiC,CAAA,EAAG,WAAA,EAAaA,EAAAA,CAAE,qCAAqC,CAAA,EAAG,OAAA,EAAS,IAAA,EAAM,UAAU,MAAM;AAAA,MAAC,CAAA,EAAG;AAAA,KAAA,EACpJ,CAAA;AAAA,oBAEAK,IAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAOL,EAAAA,CAAE,iCAAiC,CAAA,EAAG,WAAA,EAAaA,EAAAA,CAAE,qCAAqC,CAAA,EAC9G,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAOD,EAAAA,CAAE,mCAAmC,CAAA,EAAG,WAAA,EAAaA,EAAAA,CAAE,uCAAuC,CAAA,EAAG,OAAA,EAAS,IAAA,EAAM,UAAU,MAAM;AAAA,MAAC,CAAA,EAAG,CAAA;AAAA,sBACtJC,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAOD,GAAE,8BAA8B,CAAA,EAAG,WAAA,EAAaA,EAAAA,CAAE,kCAAkC,CAAA,EAAG,OAAA,EAAS,KAAA,EAAO,UAAU,MAAM;AAAA,MAAC,CAAA,EAAG;AAAA,KAAA,EAC/I,CAAA;AAAA,oBAEAK,IAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAOL,EAAAA,CAAE,kCAAkC,CAAA,EAAG,WAAA,EAAaA,EAAAA,CAAE,sCAAsC,CAAA,EAChH,QAAA,EAAA;AAAA,sBAAAC,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAOD,EAAAA,CAAE,kCAAkC,CAAA,EAAG,WAAA,EAAaA,EAAAA,CAAE,sCAAsC,CAAA,EAAG,OAAA,EAAS,IAAA,EAAM,UAAU,MAAM;AAAA,MAAC,CAAA,EAAG,CAAA;AAAA,sBACpJC,GAAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAOD,GAAE,iCAAiC,CAAA,EAAG,WAAA,EAAaA,EAAAA,CAAE,qCAAqC,CAAA,EAAG,OAAA,EAAS,KAAA,EAAO,UAAU,MAAM;AAAA,MAAC,CAAA,EAAG;AAAA,KAAA,EACrJ;AAAA,GAAA,EACF,CAAA;AAEJ;ACpBA,IAAM,KAAA,GAAQ;AAAA,EACZ,EAAE,IAAI,SAAA,EAAW,IAAA,EAAMgC,YAAY,QAAA,EAAU,8BAAA,EAAgC,SAAS,kCAAA,EAAmC;AAAA,EACzH,EAAE,IAAI,UAAA,EAAY,IAAA,EAAMH,UAAU,QAAA,EAAU,qCAAA,EAAuC,SAAS,2CAAA,EAA4C;AAAA,EACxI,EAAE,IAAI,UAAA,EAAY,IAAA,EAAMH,YAAY,QAAA,EAAU,qCAAA,EAAuC,SAAS,2CAAA,EAA4C;AAAA,EAC1I,EAAE,IAAI,OAAA,EAAS,IAAA,EAAM,UAAU,QAAA,EAAU,kCAAA,EAAoC,SAAS,wCAAA;AACxF,CAAA;AAEO,SAAS,mBAAA,CAAoB,EAAE,UAAA,EAAW,EAA+B;AAC9E,EAAA,MAAM1B,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,CAAC,IAAA,EAAM,OAAO,CAAA,GAAIC,SAAS,CAAC,CAAA;AAClC,EAAA,MAAM,OAAA,GAAU,MAAM,IAAI,CAAA;AAC1B,EAAA,MAAM,MAAA,GAAS,IAAA,KAAS,KAAA,CAAM,MAAA,GAAS,CAAA;AACvC,EAAA,MAAM,OAAO,OAAA,CAAQ,IAAA;AAErB,EAAA,uBACEF,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0CACb,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAEb,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,SAAI,SAAA,EAAU,8BAAA,EACZ,gBAAM,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,qBACbA,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QAEC,SAAA,EAAW,CAAA,0CAAA,EACT,CAAA,IAAK,IAAA,GAAO,eAAe,UAC7B,CAAA;AAAA,OAAA;AAAA,MAHK,CAAA,CAAE;AAAA,KAKV,CAAA,EACH,CAAA;AAAA,oBAGAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iEAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,0BAAAA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EACb,0BAAAA,GAAAA,CAAC,IAAA,EAAA,EAAK,SAAA,EAAU,sBAAA,EAAuB,GACzC,CAAA,EACF,CAAA;AAAA,sBAEAI,KAAC,KAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAAC,QAAG,SAAA,EAAU,mBAAA,EAAqB,UAAAD,EAAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,EAAE,CAAA;AAAA,wBACvDC,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,uDAAuD,QAAA,EAAAD,EAAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,EAAE;AAAA,OAAA,EACzF,CAAA;AAAA,MAGC,IAAA,GAAO,CAAA,IAAK,IAAA,GAAO,KAAA,CAAM,SAAS,CAAA,oBACjCC,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gEAAA,EACZ,QAAA,EAAAD,EAAAA,CAAE,oCAAoC,CAAA,EACzC,CAAA;AAAA,sBAIFK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACZ,QAAA,EAAA;AAAA,QAAA,IAAA,GAAO,qBACNJ,GAAAA,CAACY,QAAA,EAAO,OAAA,EAAQ,WAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,MAAM,QAAQ,IAAA,GAAO,CAAC,GAChE,QAAA,EAAAb,EAAAA,CAAE,2BAA2B,CAAA,EAChC,CAAA;AAAA,QAED,MAAA,mBACCK,IAAAA,CAACQ,MAAAA,EAAA,EAAO,SAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,UAAA,EAC3C,QAAA,EAAA;AAAA,0BAAAZ,GAAAA,CAACa,KAAAA,EAAA,EAAM,SAAA,EAAU,SAAA,EAAU,CAAA;AAAA,UAAE,GAAA;AAAA,UAAEd,GAAE,iCAAiC;AAAA,SAAA,EACpE,CAAA,mBAEAK,IAAAA,CAACQ,MAAAA,EAAA,EAAO,OAAA,EAAQ,SAAA,EAAU,IAAA,EAAK,IAAA,EAAK,OAAA,EAAS,MAAM,OAAA,CAAQ,IAAA,GAAO,CAAC,CAAA,EAChE,QAAA,EAAA;AAAA,UAAA,IAAA,KAAS,CAAA,GAAIb,EAAAA,CAAE,iCAAiC,CAAA,GAAIA,GAAE,2BAA2B,CAAA;AAAA,0BAClFC,GAAAA,CAAC,YAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU;AAAA,SAAA,EACpC;AAAA,OAAA,EAEJ,CAAA;AAAA,MAGC,CAAC,MAAA,IAAU,IAAA,KAAS,CAAA,oBACnBA,GAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAS,UAAA;AAAA,UACT,SAAA,EAAU,uEAAA;AAAA,UAET,QAAA,EAAAD,GAAE,2BAA2B;AAAA;AAAA;AAChC,KAAA,EAEJ;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACxDA,SAAS,YAAY,UAAA,EAAgC;AAEnD,EAAA,MAAM,EAAE,IAAA,EAAM,EAAA,EAAG,GAAI,YAAY,UAAU,CAAA;AAC3C,EAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,iDAAiD,CAAA;AACtE,EAAA,IAAI,CAAA,EAAG,OAAO,EAAE,IAAA,EAAM,CAAA,CAAE,CAAC,CAAA,EAAG,IAAA,EAAM,CAAA,CAAE,CAAC,CAAA,EAAyB,MAAA,EAAQ,EAAA,EAAG;AACzE,EAAA,OAAO,EAAE,MAAM,UAAA,EAAW;AAC5B;AAMA,SAAS,QAAA,CACP,MAAA,EACA,UAAA,EACA,QAAA,EACAA,EAAAA,EACiB;AACjB,EAAA,MAAM,KAAA,GAAyB;AAAA,IAC7B;AAAA,MACE,EAAA,EAAI,SAAA;AAAA,MACJ,KAAA,EAAOA,GAAE,uBAAuB,CAAA;AAAA,MAChC,IAAA,EAAM,WAAA;AAAA,MACN,QAAQ,UAAA,KAAe,SAAA;AAAA,MACvB,OAAA,EAAS,MAAM,QAAA,CAAS,SAAS;AAAA;AACnC,GACF;AAEA,EAAA,IAAI,MAAA,CAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,UAAA;AAAA,MACJ,KAAA,EAAOA,GAAE,wBAAwB,CAAA;AAAA,MACjC,IAAA,EAAM,eAAA;AAAA,MACN,MAAA,EAAQ,UAAA,CAAW,UAAA,CAAW,UAAU,CAAA;AAAA,MACxC,QAAA,EAAU;AAAA,QACR,EAAE,EAAA,EAAI,cAAA,EAAgB,KAAA,EAAOA,GAAE,mBAAmB,CAAA,EAAG,MAAA,EAAQ,UAAA,KAAe,cAAA,EAAgB,OAAA,EAAS,MAAM,QAAA,CAAS,cAAc,CAAA,EAAE;AAAA,QACpI,EAAE,EAAA,EAAI,eAAA,EAAiB,KAAA,EAAOA,GAAE,oBAAoB,CAAA,EAAG,MAAA,EAAQ,UAAA,KAAe,eAAA,EAAiB,OAAA,EAAS,MAAM,QAAA,CAAS,eAAe,CAAA,EAAE;AAAA,QACxI,EAAE,EAAA,EAAI,oBAAA,EAAsB,KAAA,EAAOA,GAAE,iCAAiC,CAAA,EAAG,MAAA,EAAQ,UAAA,KAAe,oBAAA,EAAsB,OAAA,EAAS,MAAM,QAAA,CAAS,oBAAoB,CAAA;AAAE;AACtK,KACD,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAA,CAAO,QAAQ,WAAA,EAAa;AAC9B,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,aAAA;AAAA,MACJ,KAAA,EAAOA,GAAE,2BAA2B,CAAA;AAAA,MACpC,IAAA,EAAM,iBAAA;AAAA,MACN,MAAA,EAAQ,UAAA,CAAW,UAAA,CAAW,aAAa,CAAA;AAAA,MAC3C,QAAA,EAAU;AAAA,QACR,EAAE,EAAA,EAAI,iBAAA,EAAmB,KAAA,EAAOA,GAAE,mBAAmB,CAAA,EAAG,MAAA,EAAQ,UAAA,KAAe,iBAAA,EAAmB,OAAA,EAAS,MAAM,QAAA,CAAS,iBAAiB,CAAA,EAAE;AAAA,QAC7I,EAAE,EAAA,EAAI,kBAAA,EAAoB,KAAA,EAAOA,GAAE,oBAAoB,CAAA,EAAG,MAAA,EAAQ,UAAA,KAAe,kBAAA,EAAoB,OAAA,EAAS,MAAM,QAAA,CAAS,kBAAkB,CAAA;AAAE;AACnJ,KACD,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAA,CAAO,QAAQ,aAAA,EAAe;AAChC,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,gBAAA;AAAA,MACJ,KAAA,EAAOA,GAAE,6BAA6B,CAAA;AAAA,MACtC,IAAA,EAAM,UAAA;AAAA,MACN,QAAQ,UAAA,KAAe,gBAAA;AAAA,MACvB,OAAA,EAAS,MAAM,QAAA,CAAS,gBAAgB;AAAA,KACzC,CAAA;AAAA,EACH;AAGA,EAAA,KAAA,CAAM,IAAA,CAAK;AAAA,IACT,EAAA,EAAI,YAAA;AAAA,IACJ,KAAA,EAAOA,GAAE,0BAA0B,CAAA;AAAA,IACnC,IAAA,EAAM,SAAA;AAAA,IACN,QAAQ,UAAA,KAAe,YAAA;AAAA,IACvB,OAAA,EAAS,MAAM,QAAA,CAAS,YAAY;AAAA,GACrC,CAAA;AAED,EAAA,IAAI,MAAA,CAAO,QAAQ,cAAA,EAAgB;AACjC,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,gBAAA;AAAA,MACJ,KAAA,EAAOA,GAAE,8BAA8B,CAAA;AAAA,MACvC,IAAA,EAAM,gBAAA;AAAA,MACN,QAAQ,UAAA,KAAe,gBAAA;AAAA,MACvB,OAAA,EAAS,MAAM,QAAA,CAAS,gBAAgB;AAAA,KACzC,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAA,CAAO,QAAQ,WAAA,EAAa;AAC9B,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,aAAA;AAAA,MACJ,KAAA,EAAOA,GAAE,2BAA2B,CAAA;AAAA,MACpC,IAAA,EAAM,OAAA;AAAA,MACN,QAAA,EAAU;AAAA,QACR,EAAE,EAAA,EAAI,sBAAA,EAAwB,KAAA,EAAOA,GAAE,wBAAwB,CAAA,EAAG,MAAA,EAAQ,UAAA,KAAe,aAAA,EAAe,OAAA,EAAS,MAAM,QAAA,CAAS,aAAa,CAAA,EAAE;AAAA,QAC/I,EAAE,EAAA,EAAI,mBAAA,EAAqB,KAAA,EAAOA,GAAE,qBAAqB,CAAA,EAAG,MAAA,EAAQ,UAAA,KAAe,aAAA,EAAe,OAAA,EAAS,MAAM,QAAA,CAAS,aAAa,CAAA;AAAE;AAC3I,KACD,CAAA;AAAA,EACH;AAEA,EAAA,IAAI,MAAA,CAAO,QAAQ,KAAA,EAAO;AACxB,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA,EAAI,OAAA;AAAA,MACJ,KAAA,EAAOA,GAAE,qBAAqB,CAAA;AAAA,MAC9B,IAAA,EAAM,YAAA;AAAA,MACN,QAAA,EAAU;AAAA,QACR,EAAE,EAAA,EAAI,gBAAA,EAAkB,KAAA,EAAOA,GAAE,wBAAwB,CAAA,EAAG,MAAA,EAAQ,UAAA,KAAe,OAAA,EAAS,OAAA,EAAS,MAAM,QAAA,CAAS,OAAO,CAAA,EAAE;AAAA,QAC7H,EAAE,EAAA,EAAI,sBAAA,EAAwB,KAAA,EAAOA,GAAE,8BAA8B,CAAA,EAAG,MAAA,EAAQ,UAAA,KAAe,OAAA,EAAS,OAAA,EAAS,MAAM,QAAA,CAAS,OAAO,CAAA;AAAE;AAC3I,KACD,CAAA;AAAA,EACH;AAEA,EAAA,OAAO,KAAA;AACT;AAMO,SAAS,cAAc,EAAE,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,YAAW,EAKjE;AACD,EAAA,MAAM,EAAE,MAAM,SAAA,EAAW,QAAA,EAAU,cAAc,IAAA,EAAK,GAAI,oBAAoB,YAAA,EAAc;AAAA,IAC1F,OAAA,EAAS,CAAA;AAAA,IACT,eAAA,EAAiB,CAAA;AAAA,IAAG,cAAA,EAAgB,CAAA;AAAA,IAAG,kBAAA,EAAoB,CAAA;AAAA,IAAG,iBAAA,EAAmB,CAAA;AAAA,IACjF,gBAAA,EAAkB,CAAA;AAAA,IAAG,UAAA,EAAY,CAAA;AAAA,IAAG,cAAA,EAAgB,CAAA;AAAA,IAAG,WAAA,EAAa,CAAA;AAAA,IAAG,KAAA,EAAO,CAAA;AAAA,IAC9E,QAAA,EAAU;AAAA,GACX,CAAA;AAED,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIG,SAAS,MAAM;AACjE,IAAA,IAAI;AAAE,MAAA,OAAO,YAAA,CAAa,OAAA,CAAQ,+BAA+B,CAAA,KAAM,MAAA;AAAA,IAAO,CAAA,CAAA,MAAQ;AAAE,MAAA,OAAO,KAAA;AAAA,IAAM;AAAA,EACvG,CAAC,CAAA;AAED,EAAA,MAAMH,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,MAAA,GAAS,YAAY,IAAI,CAAA;AAC/B,EAAA,MAAM,aAAa,IAAA,KAAS,UAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,QAAA,CAAS,MAAA,EAAQ,IAAA,EAAM,UAAUF,EAAC,CAAA;AAE9C,EAAA,MAAM,YAAA,GAAeQ,QAA6B,MAAM;AACtD,IAAA,MAAM,UAA+B,EAAC;AACtC,IAAA,IAAI,MAAA,CAAO,QAAQ,QAAA,EAAU;AAC3B,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,EAAA,EAAI,aAAA;AAAA,QACJ,KAAA,EAAOR,GAAE,mCAAmC,CAAA;AAAA,QAC5C,IAAA,EAAM,eAAA;AAAA,QACN,WAAA,EAAaA,GAAE,uCAAuC,CAAA;AAAA,QACtD,MAAA,EAAQ,MAAM,QAAA,CAAS,cAAc;AAAA,OACtC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,MAAA,CAAO,QAAQ,WAAA,EAAa;AAC9B,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,EAAA,EAAI,gBAAA;AAAA,QACJ,KAAA,EAAOA,GAAE,sCAAsC,CAAA;AAAA,QAC/C,IAAA,EAAM,iBAAA;AAAA,QACN,WAAA,EAAaA,GAAE,0CAA0C,CAAA;AAAA,QACzD,MAAA,EAAQ,MAAM,QAAA,CAAS,iBAAiB;AAAA,OACzC,CAAA;AAAA,IACH;AACA,IAAA,IAAI,MAAA,CAAO,QAAQ,aAAA,EAAe;AAChC,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,EAAA,EAAI,WAAA;AAAA,QACJ,KAAA,EAAOA,GAAE,yCAAyC,CAAA;AAAA,QAClD,IAAA,EAAM,UAAA;AAAA,QACN,WAAA,EAAaA,GAAE,6CAA6C,CAAA;AAAA,QAC5D,MAAA,EAAQ,MAAM,QAAA,CAAS,gBAAgB;AAAA,OACxC,CAAA;AAAA,IACH;AACA,IAAA,OAAO,OAAA;AAAA,EACT,CAAA,EAAG,CAAC,MAAA,CAAO,OAAO,CAAC,CAAA;AAEnB,EAAA,SAAS,wBAAA,GAA2B;AAClC,IAAA,qBAAA,CAAsB,IAAI,CAAA;AAC1B,IAAA,IAAI;AAAE,MAAA,YAAA,CAAa,OAAA,CAAQ,iCAAiC,MAAM,CAAA;AAAA,IAAE,CAAA,CAAA,MAAQ;AAAA,IAAC;AAAA,EAC/E;AAGA,EAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,IAAA,uBACEC,GAAAA,CAAC,wBAAA,EAAA,EAAyB,MAAA,EAAgB,QAAA,EAAoB,KAAA,EAC5D,QAAA,kBAAAA,GAAAA,CAAC,mBAAA,EAAA,EAAoB,UAAA,EAAY,wBAAA,EAA0B,CAAA,EAC7D,CAAA;AAAA,EAEJ;AAGA,EAAA,IAAI,UAAA,IAAc,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,CAAA,EAAG;AACrD,IAAA,uBACEA,IAAC,wBAAA,EAAA,EAAyB,MAAA,EAAgB,UAAoB,KAAA,EAC5D,QAAA,kBAAAA,IAAC,cAAA,EAAA,EAAe,aAAA,EAAc,YAAW,SAAA,EACvC,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,IACrB,QAAA,kBAAAA,GAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAOD,GAAE,8BAA8B,CAAA;AAAA,QACvC,QAAA,EAAUA,GAAE,iCAAiC,CAAA;AAAA,QAC7C,eAAA,kBAAiBC,GAAAA,CAAC,wBAAA,EAAA,EAAyB,CAAA;AAAA,QAC3C,UAAA;AAAA,QACA,YAAA,EAAa,WAAA;AAAA,QACb,SAAA,EAAU;AAAA;AAAA,KACZ,EACF,GACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,SAAS,UAAA,GAAa;AACpB,IAAA,QAAQ,OAAO,IAAA;AAAM,MACnB,KAAK,UAAA;AACH,QAAA,uBAAOA,GAAAA,CAAC,YAAA,EAAA,EAAa,QAAgB,UAAA,EAAY,QAAA,EAAU,cAA4B,IAAA,EAAY,CAAA;AAAA,MACrG,KAAK,aAAA;AACH,QAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,QAAgB,UAAA,EAAY,QAAA,EAAU,cAA4B,IAAA,EAAY,CAAA;AAAA,MACxG,KAAK,gBAAA;AACH,QAAA,uBAAOA,IAAC,iBAAA,EAAA,EAAkB,CAAA;AAAA,MAC5B,KAAK,YAAA;AACH,QAAA,uBAAOA,GAAAA,CAAC,cAAA,EAAA,EAAe,UAAA,EAAY,QAAA,EAAU,CAAA;AAAA,MAC/C,KAAK,gBAAA;AACH,QAAA,uBAAOA,IAAC,kBAAA,EAAA,EAAmB,CAAA;AAAA,MAC7B,KAAK,aAAA;AACH,QAAA,uBAAOA,IAAC,eAAA,EAAA,EAAgB,CAAA;AAAA,MAC1B,KAAK,OAAA;AACH,QAAA,uBAAOA,IAAC,SAAA,EAAA,EAAU,CAAA;AAAA,MACpB;AACE,QAAA,uBAAOA,IAAC,WAAA,EAAA,EAAY,CAAA;AAAA;AACxB,EACF;AAEA,EAAA,uBACEA,GAAAA,CAAC,wBAAA,EAAA,EAAyB,MAAA,EAAgB,QAAA,EAAoB,OAC5D,QAAA,kBAAAA,GAAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,OAAO,MAAA,CAAO,SAAA;AAAA,MACrB,QAAA,EAAU,OAAO,MAAA,CAAO,YAAA;AAAA,MACxB,GAAA;AAAA,MACA,UAAA,EAAY,MAAA,CAAO,IAAA,KAAS,SAAA,IAAa,IAAA,KAAS,SAAA;AAAA,MAClD,OAAA,EAAS,IAAA;AAAA,MACT,SAAA;AAAA,MACA,8BACEA,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,YAAA;AAAA,UACA,YAAA,EAAc,UAAA,IAAc,UAAA,CAAW,MAAA,GAAS,IAAI,qBAAA,GAAwB,MAAA;AAAA,UAC5E,aAAA,EAAeD,GAAE,8BAA8B;AAAA;AAAA,OACjD;AAAA,MAGD,QAAA,EAAA,UAAA;AAAW;AAAA,GACd,EACF,CAAA;AAEJ;ACpQA,SAAS,gBAAA,GAAmB;AAC1B,EAAA,MAAM,YAAA,GAAe,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,YAAY,CAAA;AAC5D,EAAAI,UAAU,MAAM;AAAE,IAAA,KAAK,YAAA,EAAa;AAAA,EAAE,CAAA,EAAG,EAAE,CAAA;AAC7C;AAMA,SAAS,eAAA,GAAkB;AACzB,EAAA,MAAMJ,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAClD,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,cAAc,CAAA;AACzD,EAAA,gBAAA,EAAiB;AACjB,EAAA,uBAAOD,IAAC,OAAA,EAAA,EAAQ,KAAA,EAAOD,GAAE,gCAAgC,CAAA,EAAG,MAAK,QAAA,EAAS,KAAA,EAAO,eAAe,OAAA,EAAS,YAAA,IAAgB,GAAG,QAAQ,CAAA,EAAG,KAAK,OAAA,GAAU,MAAA,GAAYA,EAAAA,CAAE,+BAA+B,CAAA,EAAG,CAAA;AACxM;AAEA,SAAS,aAAA,GAAgB;AACvB,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAClD,EAAA,gBAAA,EAAiB;AACjB,EAAA,uBAAOD,GAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAOD,EAAAA,CAAE,8BAA8B,CAAA,EAAG,IAAA,EAAK,YAAA,EAAa,KAAA,EAAO,cAAA,CAAe,OAAA,EAAS,eAAA,IAAmB,CAAA,EAAG,QAAQ,CAAA,EAAG,GAAA,EAAKA,EAAAA,CAAE,2BAAA,EAA6B,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA,EAAS,sBAAA,IAA0B,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA;AAC5O;AAEA,SAAS,UAAA,GAAa;AACpB,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAClD,EAAA,gBAAA,EAAiB;AACjB,EAAA,uBAAOD,GAAAA,CAAC,OAAA,EAAA,EAAQ,KAAA,EAAOD,EAAAA,CAAE,2BAA2B,CAAA,EAAG,IAAA,EAAK,cAAA,EAAe,KAAA,EAAO,cAAA,CAAe,OAAA,EAAS,YAAA,IAAgB,CAAA,EAAG,QAAQ,CAAA,EAAG,GAAA,EAAKA,EAAAA,CAAE,2BAAA,EAA6B,EAAE,KAAA,EAAO,MAAA,CAAO,OAAA,EAAS,mBAAA,IAAuB,CAAC,CAAA,EAAG,CAAA,EAAG,CAAA;AACrO;AAEA,SAAS,cAAA,GAAiB;AACxB,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAClD,EAAA,gBAAA,EAAiB;AACjB,EAAA,MAAM,MAAA,GAAS,SAAS,aAAA,IAAiB,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,SAAS,cAAA,IAAkB,CAAA;AAC3C,EAAA,uBAAOD,IAAC,OAAA,EAAA,EAAQ,KAAA,EAAOD,GAAE,+BAA+B,CAAA,EAAG,IAAA,EAAK,WAAA,EAAY,KAAA,EAAO,cAAA,CAAe,SAAS,OAAA,EAAS,QAAQ,CAAA,EAAG,GAAA,EAAK,MAAA,IAAU,OAAA,GAAUA,GAAE,mCAAmC,CAAA,GAAIA,EAAAA,CAAE,mCAAmC,CAAA,EAAG,CAAA;AAC3O;AAMA,SAAS,aAAA,GAAgB;AACvB,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAClD,EAAA,gBAAA,EAAiB;AACjB,EAAA,MAAM,IAAA,GAAO,CAAC,EAAE,IAAA,EAAMF,GAAE,4BAA4B,CAAA,EAAG,MAAA,EAAQ,OAAA,EAAS,iBAAiB,CAAA,EAAG,QAAA,EAAU,OAAA,EAAS,cAAA,IAAkB,GAAG,CAAA;AACpI,EAAA,uBACEC,GAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,KAAA;AAAA,MAAM,KAAA,EAAOD,GAAE,4BAA4B,CAAA;AAAA,MAAG,IAAA,EAAK,WAAA;AAAA,MAAY,WAAA,EAAY,MAAA;AAAA,MAAO,IAAA;AAAA,MACvF,MAAA,EAAQ;AAAA,QACN,EAAE,SAAS,QAAA,EAAU,KAAA,EAAOA,GAAE,0BAA0B,CAAA,EAAG,OAAO,qBAAA,EAAsB;AAAA,QACxF,EAAE,SAAS,UAAA,EAAY,KAAA,EAAOA,GAAE,4BAA4B,CAAA,EAAG,OAAO,yBAAA;AAA0B;AAClG;AAAA,GACF;AAEJ;AAEA,SAAS,iBAAA,GAAoB;AAC3B,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAClD,EAAA,gBAAA,EAAiB;AACjB,EAAA,MAAM,MAAA,GAAS,SAAS,aAAA,IAAiB,CAAA;AACzC,EAAA,MAAM,OAAA,GAAU,SAAS,cAAA,IAAkB,CAAA;AAC3C,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,MAAA,GAAS,SAAS,CAAC,CAAA;AAC1C,EAAA,uBACEG,KAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,cAAW,QAAA,kBAAAA,GAAAA,CAAC,aAAW,QAAA,EAAAD,EAAAA,CAAE,qCAAqC,CAAA,EAAE,CAAA,EAAY,CAAA;AAAA,oBAC7EK,IAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,WAAA,EACrB,QAAA,EAAA;AAAA,sBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EAAkD,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iCAAA,EAAkC,CAAA;AAAA,YAAGD,GAAE,4BAA4B;AAAA,WAAA,EAAE,CAAA;AAAA,0BACvJC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAe,QAAA,EAAA,cAAA,CAAe,MAAA,EAAQ,QAAQ,CAAA,EAAE;AAAA,SAAA,EAClE,CAAA;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2CAAA,EAA4C,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kCAAiC,KAAA,EAAO,EAAE,OAAO,CAAA,EAAI,MAAA,GAAS,QAAS,GAAG,CAAA,CAAA,CAAA,IAAO,CAAA,EAAE;AAAA,OAAA,EAC/J,CAAA;AAAA,sBACAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,aAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,IAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,iDAAA,EAAkD,QAAA,EAAA;AAAA,4BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qCAAA,EAAsC,CAAA;AAAA,YAAGD,GAAE,wBAAwB;AAAA,WAAA,EAAE,CAAA;AAAA,0BACvJC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAe,QAAA,EAAA,cAAA,CAAe,OAAA,EAAS,QAAQ,CAAA,EAAE;AAAA,SAAA,EACnE,CAAA;AAAA,wBACAA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,2CAAA,EAA4C,QAAA,kBAAAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sCAAqC,KAAA,EAAO,EAAE,OAAO,CAAA,EAAI,OAAA,GAAU,QAAS,GAAG,CAAA,CAAA,CAAA,IAAO,CAAA,EAAE;AAAA,OAAA,EACpK,CAAA;AAAA,sBACAA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBACb,QAAA,kBAAAI,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2CAAA,EACb,QAAA,EAAA;AAAA,wBAAAJ,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAAD,EAAAA,CAAE,uBAAuB,CAAA,EAAE,CAAA;AAAA,wBACpEC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,iBAAiB,MAAA,GAAS,OAAA,IAAW,CAAA,GAAI,cAAA,GAAiB,kBAAkB,CAAA,CAAA,EAAK,QAAA,EAAA,cAAA,CAAe,MAAA,GAAS,OAAA,EAAS,QAAQ,CAAA,EAAE;AAAA,OAAA,EAC/I,CAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,aAAA,GAAgB;AACvB,EAAA,MAAMD,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,OAAA,GAAU,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AAClD,EAAA,gBAAA,EAAiB;AACjB,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,EAAE,KAAA,EAAOF,EAAAA,CAAE,qCAAqC,CAAA,EAAG,OAAO,OAAA,EAAS,uBAAA,IAA2B,CAAA,EAAG,KAAA,EAAO,SAAS,sBAAA,IAA0B,CAAA,EAAG,IAAA,EAAM,YAAA,EAAc,OAAO,cAAA,EAAe;AAAA,IACxL,EAAE,KAAA,EAAOA,EAAAA,CAAE,kCAAkC,CAAA,EAAG,OAAO,OAAA,EAAS,oBAAA,IAAwB,CAAA,EAAG,KAAA,EAAO,SAAS,mBAAA,IAAuB,CAAA,EAAG,IAAA,EAAM,cAAA,EAAgB,OAAO,kBAAA;AAAmB,GACvL;AACA,EAAA,uBACEK,KAAC,IAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAJ,IAAC,UAAA,EAAA,EAAW,QAAA,kBAAAI,IAAAA,CAAC,SAAA,EAAA,EAAU,WAAU,yBAAA,EAA0B,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAU,sBAAA,EAAuB,CAAA;AAAA,MAAGD,GAAE,gCAAgC;AAAA,KAAA,EAAE,CAAA,EAAY,CAAA;AAAA,oBAC9JK,IAAAA,CAAC,WAAA,EAAA,EAAY,SAAA,EAAU,WAAA,EACpB,QAAA,EAAA;AAAA,MAAA,KAAA,CAAM,IAAI,CAAC,IAAA,qBACVA,IAAAA,CAAC,KAAA,EAAA,EAAqB,WAAU,mCAAA,EAC9B,QAAA,EAAA;AAAA,wBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EAA0B,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,KAAK,IAAA,EAAL,EAAU,WAAW,CAAA,YAAA,EAAe,IAAA,CAAK,KAAK,CAAA,CAAA,EAAI,CAAA;AAAA,0BAAEA,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,eAAK,KAAA,EAAM;AAAA,SAAA,EAAO,CAAA;AAAA,wBACjKA,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yBAAyB,QAAA,EAAA,cAAA,CAAe,IAAA,CAAK,KAAA,EAAO,QAAQ,CAAA,EAAE;AAAA,OAAA,EAAA,EAFtE,IAAA,CAAK,KAGf,CACD,CAAA;AAAA,MACA,MAAM,KAAA,CAAM,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,CAAC,CAAA,mBAAIA,GAAAA,CAAC,OAAE,SAAA,EAAU,6CAAA,EAA+C,UAAAD,EAAAA,CAAE,6BAA6B,GAAE,CAAA,GAAO;AAAA,KAAA,EAC3I;AAAA,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,kBAAA,GAAqB;AAC5B,EAAA,MAAMA,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,EAAE,QAAA,EAAS,GAAI,kBAAA,EAAmB;AACxC,EAAA,MAAM,QAAA,GAAW,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AACpD,EAAA,MAAM,aAAA,GAAgB,iBAAA,CAAkB,CAAC,CAAA,KAAM,EAAE,aAAa,CAAA;AAC9D,EAAAE,UAAU,MAAM;AAAE,IAAA,KAAK,aAAA,CAAc,EAAE,QAAA,EAAU,CAAA,EAAG,CAAA;AAAA,EAAE,CAAA,EAAG,EAAE,CAAA;AAC3D,EAAA,MAAM,OAAA,GAAyC;AAAA,IAC7C,EAAE,aAAa,aAAA,EAAe,MAAA,EAAQJ,GAAE,sCAAsC,CAAA,EAAG,MAAM,CAAC,EAAE,KAAI,qBAAMC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,eAAe,QAAA,EAAA,GAAA,CAAI,QAAA,CAAS,WAAA,IAAe,SAAA,EAAU,CAAA,EAAQ;AAAA,IACjL,EAAE,EAAA,EAAI,MAAA,EAAQ,MAAA,EAAQ,IAAI,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,qBAAMI,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,0CAAA,EAA4C,QAAA,EAAA;AAAA,MAAA,GAAA,CAAI,QAAA,CAAS,SAAA;AAAA,MAAU,QAAA;AAAA,MAAI,IAAI,QAAA,CAAS;AAAA,KAAA,EAAY,CAAA,EAAQ;AAAA,IACrK,EAAE,aAAa,aAAA,EAAe,MAAA,EAAQ,IAAI,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,qBACrDA,IAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,CAAA,cAAA,EAAiB,GAAA,CAAI,SAAS,SAAA,KAAc,QAAA,GAAW,cAAA,GAAiB,kBAAkB,CAAA,CAAA,EACxG,QAAA,EAAA;AAAA,MAAA,GAAA,CAAI,QAAA,CAAS,SAAA,KAAc,QAAA,GAAW,GAAA,GAAM,GAAA;AAAA,MAAK,cAAA,CAAe,GAAA,CAAI,QAAA,CAAS,WAAA,EAAa,QAAQ;AAAA,KAAA,EACrG,CAAA;AACA,GACJ;AACA,EAAA,uBAAOJ,GAAAA,CAAC,WAAA,EAAA,EAAY,OAAOD,EAAAA,CAAE,sCAAsC,GAAG,IAAA,EAAK,kBAAA,EAAmB,SAAkB,IAAA,EAAM,QAAA,CAAS,MAAM,CAAA,EAAG,CAAC,GAAG,YAAA,EAAcA,EAAAA,CAAE,kCAAkC,CAAA,EAAG,CAAA;AACnM;AAMO,SAAS,gCAAgCiC,IAAAA,EAIvB;AACvB,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,KAA6D;AAC5E,IAAA,MAAM,UAAU,sBACdhC,GAAAA,CAAC,wBAAA,EAAA,EAAyB,QAAQgC,IAAAA,CAAI,MAAA,EAAQ,QAAA,EAAUA,IAAAA,CAAI,UAAU,KAAA,EAAOA,IAAAA,CAAI,OAC/E,QAAA,kBAAAhC,GAAAA,CAAC,SAAM,CAAA,EACT,CAAA;AAEF,IAAA,OAAA,CAAQ,WAAA,GAAc,CAAA,gBAAA,EAAmB,KAAA,CAAM,WAAA,IAAe,MAAM,IAAI,CAAA,CAAA,CAAA;AACxE,IAAA,OAAO,OAAA;AAAA,EACT,CAAA;AAEA,EAAA,OAAO;AAAA;AAAA;AAAA,IAGL,eAAA,CAAgB,EAAE,EAAA,EAAI,6BAAA,EAA+B,OAAO,gCAAA,EAAkC,MAAA,EAAQ,WAAA,EAAa,YAAA,EAAc,CAAA,EAAG,SAAA,EAAW,OAAA,CAAQ,eAAe,GAAG,CAAA;AAAA,IACzK,gBAAgB,EAAE,EAAA,EAAI,0BAAA,EAA4B,KAAA,EAAO,gCAAgC,MAAA,EAAQ,WAAA,EAAa,YAAA,EAAc,CAAA,EAAG,gBAAgB,KAAA,EAAO,SAAA,EAAW,OAAA,CAAQ,aAAa,GAAG,CAAA;AAAA,IACzL,gBAAgB,EAAE,EAAA,EAAI,uBAAA,EAAyB,KAAA,EAAO,6BAA6B,MAAA,EAAQ,WAAA,EAAa,YAAA,EAAc,CAAA,EAAG,gBAAgB,KAAA,EAAO,SAAA,EAAW,OAAA,CAAQ,UAAU,GAAG,CAAA;AAAA,IAChL,gBAAgB,EAAE,EAAA,EAAI,4BAAA,EAA8B,KAAA,EAAO,iCAAiC,MAAA,EAAQ,WAAA,EAAa,YAAA,EAAc,CAAA,EAAG,gBAAgB,KAAA,EAAO,SAAA,EAAW,OAAA,CAAQ,cAAc,GAAG,CAAA;AAAA,IAC7L,iBAAA,CAAkB,EAAE,EAAA,EAAI,2BAAA,EAA6B,OAAO,4BAAA,EAA8B,MAAA,EAAQ,aAAa,IAAA,EAAM,CAAA,EAAG,cAAc,EAAA,EAAI,QAAA,EAAU,CAAC,aAAa,CAAA,EAAG,WAAW,OAAA,CAAQ,aAAa,GAAG,CAAA;AAAA,IACxM,kBAAA,CAAmB,EAAE,EAAA,EAAI,2BAAA,EAA6B,OAAO,qCAAA,EAAuC,MAAA,EAAQ,aAAa,IAAA,EAAM,CAAA,EAAG,cAAc,EAAA,EAAI,QAAA,EAAU,CAAC,aAAa,CAAA,EAAG,WAAW,OAAA,CAAQ,iBAAiB,GAAG,CAAA;AAAA,IACtN,kBAAA,CAAmB,EAAE,EAAA,EAAI,yBAAA,EAA2B,OAAO,gCAAA,EAAkC,MAAA,EAAQ,aAAa,IAAA,EAAM,CAAA,EAAG,cAAc,EAAA,EAAI,QAAA,EAAU,CAAC,aAAa,CAAA,EAAG,WAAW,OAAA,CAAQ,aAAa,GAAG,CAAA;AAAA,IAC3M,iBAAA,CAAkB,EAAE,EAAA,EAAI,wBAAA,EAA0B,OAAO,sCAAA,EAAwC,MAAA,EAAQ,aAAa,IAAA,EAAM,CAAA,EAAG,cAAc,EAAA,EAAI,QAAA,EAAU,CAAC,aAAa,CAAA,EAAG,WAAW,OAAA,CAAQ,kBAAkB,GAAG;AAAA,GACtN;AACF;;;AC9KA,IAAI,MAAA,GAAS,CAAA;AACb,SAAS,GAAA,GAAc;AACrB,EAAA,OAAO,OAAO,MAAA,EAAQ,CAAA;AACxB;AAEA,SAAS,GAAA,GAAc;AACrB,EAAA,OAAA,iBAAO,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAChC;AAEA,SAAS,KAAA,GAAgB;AACvB,EAAA,OAAA,qBAAW,IAAA,EAAK,EAAE,aAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAC7C;AAEA,SAAS,OAAO,CAAA,EAAmB;AACjC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA,GAAI,GAAA;AAC/B;AAEA,SAAS,gBAAA,CAAiB,SAA6B,KAAA,EAA4B;AACjF,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,OAAA,EAAS,OAAO,IAAA;AAC/B,EAAA,OAAO,OAAA,IAAW,KAAA,CAAM,IAAA,IAAQ,OAAA,IAAW,KAAA,CAAM,EAAA;AACnD;AAEA,SAAS,aAAA,CAAgC,QAAW,MAAA,EAA2B;AAC7E,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AACpB,EAAA,IAAI,MAAM,OAAA,CAAQ,MAAM,GAAG,OAAO,MAAA,CAAO,SAAS,MAAM,CAAA;AACxD,EAAA,OAAO,MAAA,KAAW,MAAA;AACpB;AAEA,SAAS,QAAA,CAAY,KAAA,EAAY,IAAA,EAAe,QAAA,EAAuC;AACrF,EAAA,MAAM,IAAI,IAAA,IAAQ,CAAA;AAClB,EAAA,MAAM,KAAK,QAAA,IAAY,EAAA;AACvB,EAAA,MAAM,KAAA,GAAA,CAAS,IAAI,CAAA,IAAK,EAAA;AACxB,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,CAAM,KAAA,CAAM,KAAA,EAAO,QAAQ,EAAE,CAAA,EAAG,KAAA,EAAO,KAAA,CAAM,MAAA,EAAO;AACrE;AAkBA,SAAS,YAAY,sBAAA,EAAuF;AAC1G,EAAA,MAAM,QAAA,GAAW,aAAA;AAEjB,EAAA,MAAM,kBAAiE;AAAA,IACrE,EAAE,IAAA,EAAM,MAAA,EAAQ,eAAA,EAAiB,MAAA,EAAO;AAAA,IACxC,EAAE,IAAA,EAAM,aAAA,EAAe,eAAA,EAAiB,aAAA,EAAc;AAAA,IACtD,EAAE,IAAA,EAAM,YAAA,EAAc,eAAA,EAAiB,YAAA,EAAa;AAAA,IACpD,EAAE,IAAA,EAAM,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAM;AAAA,IACtC,EAAE,IAAA,EAAM,eAAA,EAAiB,eAAA,EAAiB,UAAA;AAAW,GACvD,EAAG,GAAA,CAAI,CAACD,EAAAA,MAAO;AAAA,IACb,IAAI,GAAA,EAAI;AAAA,IACR,MAAMA,EAAAA,CAAE,IAAA;AAAA,IACR,iBAAiBA,EAAAA,CAAE,eAAA;AAAA,IACnB,QAAA,EAAU,IAAA;AAAA,IACV,QAAA;AAAA,IACA,WAAW,GAAA;AAAI,GACjB,CAAE,CAAA;AAEF,EAAA,MAAM,WAAA,GAA2B;AAAA,IAC/B,IAAI,GAAA,EAAI;AAAA,IACR,IAAA,EAAM,oBAAA;AAAA,IACN,WAAA,EAAa,eAAA;AAAA,IACb,cAAA,EAAgB,CAAA;AAAA,IAChB,cAAA,EAAgB,CAAA;AAAA,IAChB,QAAA,EAAU,IAAA;AAAA,IACV,QAAA;AAAA,IACA,WAAW,GAAA,EAAI;AAAA,IACf,WAAW,GAAA;AAAI,GACjB;AAEA,EAAA,MAAM,WAAA,GAA2B;AAAA,IAC/B,IAAI,GAAA,EAAI;AAAA,IACR,IAAA,EAAM,mBAAA;AAAA,IACN,WAAA,EAAa,cAAA;AAAA,IACb,QAAA,EAAU,WAAA;AAAA,IACV,cAAA,EAAgB,CAAA;AAAA,IAChB,cAAA,EAAgB,CAAA;AAAA,IAChB,QAAA,EAAU,IAAA;AAAA,IACV,QAAA;AAAA,IACA,WAAW,GAAA,EAAI;AAAA,IACf,WAAW,GAAA;AAAI,GACjB;AAEA,EAAA,OAAO;AAAA,IACL,UAAU,EAAC;AAAA,IACX,cAAc,EAAC;AAAA,IACf,WAAW,EAAC;AAAA,IACZ,YAAA,EAAc,CAAC,WAAA,EAAa,WAAW,CAAA;AAAA,IACvC,cAAc,EAAC;AAAA,IACf,gBAAgB,EAAC;AAAA,IACjB,kBAAA,EAAoB,cAAA;AAAA,IACpB,iBAAiB,EAAC;AAAA,IAClB,kBAAkB;AAAC,GACrB;AACF;AAUO,SAAS,4BAA4B,OAAA,EAA+D;AACzG,EAAA,MAAM,KAAA,GAAQ,WAAA,CAAuC,CAAA;AACrD,EAAA,MAAM,QAAA,GAAW,aAAA;AAEjB,EAAA,SAAS,oBAAoB,OAAA,EAAwB;AACnD,IAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,WAAA,EAAa;AAC7C,MAAA,OAAA,CAAQ,MAAA,GAAS,MAAA;AAAA,IACnB,CAAA,MAAA,IAAW,OAAA,CAAQ,UAAA,GAAa,CAAA,EAAG;AACjC,MAAA,OAAA,CAAQ,MAAA,GAAS,SAAA;AAAA,IACnB,CAAA,MAAO;AAEL,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,OAAA,CAAQ,EAAA,IAAM,CAAA,CAAE,YAAA,KAAiB,MAAM,CAAA;AACvG,MAAA,MAAM,UAAA,GAAa,SAAA,CAAU,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,SAAA,IAAc,CAAA,CAAE,MAAA,KAAW,SAAA,IAAa,CAAA,CAAE,OAAA,GAAU,OAAQ,CAAA;AAClH,MAAA,OAAA,CAAQ,MAAA,GAAS,aAAa,SAAA,GAAY,MAAA;AAAA,IAC5C;AACA,IAAA,OAAA,CAAQ,YAAY,GAAA,EAAI;AAAA,EAC1B;AAEA,EAAA,MAAM,QAAA,GAAkC;AAAA;AAAA,IAEtC,MAAM,YAAY,KAAA,EAAwD;AACxE,MAAA,IAAI,OAAA,GAAU,CAAC,GAAG,KAAA,CAAM,QAAQ,CAAA;AAChC,MAAA,IAAI,KAAA,CAAM,SAAA,EAAW,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,KAAA,CAAM,SAAS,CAAA;AACpF,MAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,aAAA,CAAc,CAAA,CAAE,MAAA,EAAQ,KAAA,CAAM,MAAyC,CAAC,CAAA;AAC1H,MAAA,IAAI,KAAA,CAAM,SAAA,EAAW,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,KAAA,CAAM,SAAS,CAAA;AACpF,MAAA,IAAI,KAAA,CAAM,SAAA,EAAW,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,CAAE,WAAA,EAAa,KAAA,CAAM,SAAS,CAAC,CAAA;AACrG,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,MAAM,CAAA,GAAI,KAAA,CAAM,MAAA,CAAO,WAAA,EAAY;AACnC,QAAA,OAAA,GAAU,OAAA,CAAQ,MAAA;AAAA,UAAO,CAAC,MACxB,CAAA,CAAE,WAAA,EAAa,aAAY,CAAE,QAAA,CAAS,CAAC,CAAA,IACvC,CAAA,CAAE,cAAc,WAAA,EAAY,CAAE,SAAS,CAAC,CAAA,IACxC,EAAE,YAAA,EAAc,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC;AAAA,SAC1C;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,SAAA,CAAU,aAAA,CAAc,CAAA,CAAE,SAAS,CAAC,CAAA;AAC7D,MAAA,OAAO,QAAA,CAAS,OAAA,EAAS,KAAA,CAAM,IAAA,EAAM,MAAM,QAAQ,CAAA;AAAA,IACrD,CAAA;AAAA,IAEA,MAAM,eAAe,EAAA,EAAqC;AACxD,MAAA,OAAO,KAAA,CAAM,SAAS,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,EAAE,CAAA,IAAK,IAAA;AAAA,IACpD,CAAA;AAAA,IAEA,MAAM,gBAAgB,SAAA,EAA2C;AAC/D,MAAA,OAAO,MAAM,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,SAAS,CAAA;AAAA,IACnE,CAAA;AAAA,IAEA,MAAM,cAAc,KAAA,EAA6C;AAC/D,MAAA,MAAM,YAAY,GAAA,EAAI;AACtB,MAAA,MAAM,cAAc,KAAA,CAAM,KAAA,CAAM,MAAA,CAAO,CAAC,KAAK,IAAA,KAAS;AACpD,QAAA,MAAM,SAAA,GAAY,KAAK,QAAA,GAAW,IAAA,CAAK,aAAa,IAAA,CAAK,QAAA,IAAY,CAAA,CAAA,IAAM,IAAA,CAAK,SAAA,IAAa,CAAA,CAAA;AAC7F,QAAA,OAAO,GAAA,GAAM,SAAA;AAAA,MACf,GAAG,CAAC,CAAA;AAEJ,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA;AAEpF,MAAA,MAAM,OAAA,GAAmB;AAAA,QACvB,EAAA,EAAI,SAAA;AAAA,QACJ,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,WAAA;AAAA,QACA,UAAA,EAAY,CAAA;AAAA,QACZ,MAAA,EAAQ,MAAA;AAAA,QACR,iBAAA,EAAmB,KAAA,CAAM,YAAA,CAAa,MAAA,IAAU,CAAA;AAAA,QAChD,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,cAAc,YAAA,IAAgB,MAAA;AAAA,QAC9B,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,QAAA;AAAA,QACA,WAAW,GAAA,EAAI;AAAA,QACf,WAAW,GAAA;AAAI,OACjB;AACA,MAAA,KAAA,CAAM,QAAA,CAAS,KAAK,OAAO,CAAA;AAG3B,MAAA,KAAA,MAAW,SAAA,IAAa,MAAM,KAAA,EAAO;AACnC,QAAA,MAAM,SAAA,GAAY,UAAU,QAAA,GAAW,SAAA,CAAU,aAAa,SAAA,CAAU,QAAA,IAAY,CAAA,CAAA,IAAM,SAAA,CAAU,SAAA,IAAa,CAAA,CAAA;AACjH,QAAA,MAAM,IAAA,GAAoB;AAAA,UACxB,IAAI,GAAA,EAAI;AAAA,UACR,SAAA;AAAA,UACA,UAAU,SAAA,CAAU,QAAA;AAAA,UACpB,aAAa,SAAA,CAAU,WAAA;AAAA,UACvB,aAAa,SAAA,CAAU,WAAA;AAAA,UACvB,UAAU,SAAA,CAAU,QAAA;AAAA,UACpB,WAAW,SAAA,CAAU,SAAA;AAAA,UACrB,WAAA,EAAa,SAAA;AAAA,UACb,QAAA,EAAU,UAAU,QAAA,IAAY,CAAA;AAAA,UAChC,SAAA,EAAW,UAAU,SAAA,IAAa,CAAA;AAAA,UAClC,WAAW,SAAA,CAAU,SAAA;AAAA,UACrB,cAAc,SAAA,CAAU,YAAA;AAAA,UACxB,UAAU,SAAA,CAAU,QAAA;AAAA,UACpB,WAAW,GAAA;AAAI,SACjB;AACA,QAAA,KAAA,CAAM,YAAA,CAAa,KAAK,IAAI,CAAA;AAAA,MAC9B;AAGA,MAAA,KAAA,MAAW,QAAA,IAAY,MAAM,YAAA,EAAc;AACzC,QAAA,MAAM,QAAA,GAA8B;AAAA,UAClC,IAAI,GAAA,EAAI;AAAA,UACR,SAAA;AAAA,UACA,WAAW,KAAA,CAAM,SAAA;AAAA,UACjB,cAAc,QAAA,CAAS,YAAA;AAAA,UACvB,QAAQ,QAAA,CAAS,MAAA;AAAA,UACjB,UAAA,EAAY,CAAA;AAAA,UACZ,MAAA,EAAQ,SAAA;AAAA,UACR,SAAS,QAAA,CAAS,OAAA;AAAA,UAClB,mBAAmB,QAAA,CAAS,iBAAA;AAAA,UAC5B,iBAAiB,QAAA,CAAS,eAAA;AAAA,UAC1B,eAAe,QAAA,CAAS,aAAA;AAAA,UACxB,OAAO,QAAA,CAAS,KAAA;AAAA,UAChB,UAAU,QAAA,CAAS,QAAA;AAAA,UACnB,QAAA;AAAA,UACA,WAAW,GAAA,EAAI;AAAA,UACf,WAAW,GAAA;AAAI,SACjB;AACA,QAAA,KAAA,CAAM,SAAA,CAAU,KAAK,QAAQ,CAAA;AAAA,MAC/B;AAEA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,EAAA,EAAY,IAAA,EAA0C;AACxE,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AACtD,MAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,EAAE,CAAA,UAAA,CAAY,CAAA;AACvD,MAAA,MAAA,CAAO,OAAO,OAAA,EAAS,IAAA,EAAM,EAAE,SAAA,EAAW,GAAA,IAAO,CAAA;AACjD,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IAEA,MAAM,cAAc,EAAA,EAA2B;AAC7C,MAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AACtD,MAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,EAAE,CAAA,UAAA,CAAY,CAAA;AACvD,MAAA,OAAA,CAAQ,MAAA,GAAS,WAAA;AACjB,MAAA,OAAA,CAAQ,YAAY,GAAA,EAAI;AAExB,MAAA,KAAA,CAAM,SAAA,CACH,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,EAAA,IAAM,CAAA,CAAE,MAAA,KAAW,SAAS,CAAA,CAC1D,OAAA,CAAQ,CAAC,CAAA,KAAM;AAAE,QAAA,CAAA,CAAE,MAAA,GAAS,WAAA;AAAa,QAAA,CAAA,CAAE,YAAY,GAAA,EAAI;AAAA,MAAE,CAAC,CAAA;AAAA,IACnE,CAAA;AAAA;AAAA,IAGA,MAAM,aAAa,KAAA,EAAmE;AACpF,MAAA,IAAI,OAAA,GAAU,CAAC,GAAG,KAAA,CAAM,SAAS,CAAA;AACjC,MAAA,IAAI,KAAA,CAAM,SAAA,EAAW,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,KAAA,CAAM,SAAS,CAAA;AACpF,MAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,aAAA,CAAc,CAAA,CAAE,MAAA,EAAQ,KAAA,CAAM,MAA2C,CAAC,CAAA;AAC5H,MAAA,IAAI,KAAA,CAAM,aAAA,EAAe,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,KAAkB,KAAA,CAAM,aAAa,CAAA;AAChG,MAAA,IAAI,KAAA,CAAM,aAAA,EAAe,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,KAAkB,KAAA,CAAM,aAAa,CAAA;AAChG,MAAA,IAAI,KAAA,CAAM,SAAA,EAAW,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,CAAE,OAAA,EAAS,KAAA,CAAM,SAAS,CAAC,CAAA;AACjG,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,OAAA,CAAQ,aAAA,CAAc,CAAA,CAAE,OAAO,CAAC,CAAA;AACzD,MAAA,OAAO,QAAA,CAAS,OAAA,EAAS,KAAA,CAAM,IAAA,EAAM,MAAM,QAAQ,CAAA;AAAA,IACrD,CAAA;AAAA,IAEA,MAAM,YAAY,KAAA,EAAqD;AACrE,MAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,UAAU,CAAA;AAClE,MAAA,IAAI,CAAC,MAAM,MAAM,IAAI,MAAM,CAAA,SAAA,EAAY,KAAA,CAAM,UAAU,CAAA,UAAA,CAAY,CAAA;AAGnE,MAAA,MAAM,MAAA,GAAS,KAAA,CAAM,eAAA,GAAkB,KAAA,CAAM,cAAA,CAAe,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,EAAA,KAAO,KAAA,CAAM,eAAe,CAAA,GAAI,MAAA;AAC5G,MAAA,MAAM,SAAS,IAAA,CAAK,SAAA,KAAc,QAAA,GAAY,MAAA,EAAQ,iBAAiB,CAAA,GAAK,CAAA;AAC5E,MAAA,MAAM,OAAA,GAAU,MAAA,CAAO,KAAA,CAAM,MAAA,IAAU,SAAS,GAAA,CAAI,CAAA;AAGpD,MAAA,MAAM,OAAA,GAA6B;AAAA,QACjC,IAAI,GAAA,EAAI;AAAA,QACR,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,YAAA,EAAc,SAAA;AAAA,QACd,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,YAAY,KAAA,CAAM,MAAA;AAAA,QAClB,SAAA,EAAW,OAAA;AAAA,QACX,MAAA,EAAQ,MAAA;AAAA,QACR,SAAS,IAAA,CAAK,OAAA;AAAA,QACd,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,mBAAmB,IAAA,CAAK,iBAAA;AAAA,QACxB,iBAAiB,KAAA,CAAM,eAAA;AAAA,QACvB,qBAAqB,KAAA,CAAM,mBAAA;AAAA,QAC3B,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,kBAAkB,KAAA,CAAM,gBAAA;AAAA,QACxB,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,QAAA;AAAA,QACA,WAAW,GAAA,EAAI;AAAA,QACf,WAAW,GAAA;AAAI,OACjB;AACA,MAAA,KAAA,CAAM,SAAA,CAAU,KAAK,OAAO,CAAA;AAI5B,MAAA,IAAA,CAAK,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,UAAA,GAAa,MAAM,MAAM,CAAA;AACvD,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,SAAS,MAAA,GAAS,SAAA;AACxD,MAAA,IAAA,CAAK,WAAA,GAAc,MAAA;AACnB,MAAA,IAAA,CAAK,aAAA,GAAgB,MAAA;AACrB,MAAA,IAAA,CAAK,YAAY,GAAA,EAAI;AAGrB,MAAA,IAAI,MAAM,aAAA,EAAe;AACvB,QAAA,MAAM,OAAA,GAAU,MAAM,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,aAAa,CAAA;AAC3E,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,IAAI,IAAA,CAAK,cAAc,QAAA,EAAU;AAC/B,YAAA,OAAA,CAAQ,iBAAiB,MAAA,CAAO,OAAA,CAAQ,cAAA,IAAkB,KAAA,CAAM,SAAS,OAAA,CAAQ,CAAA;AAAA,UACnF,CAAA,MAAO;AACL,YAAA,OAAA,CAAQ,cAAA,GAAiB,MAAA,CAAO,OAAA,CAAQ,cAAA,GAAiB,MAAM,MAAM,CAAA;AAAA,UACvE;AACA,UAAA,OAAA,CAAQ,YAAY,GAAA,EAAI;AAAA,QAC1B;AAAA,MACF;AAGA,MAAA,IAAI,KAAK,SAAA,EAAW;AAClB,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,IAAA,CAAK,SAAS,CAAA;AAClE,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,OAAA,CAAQ,EAAA,IAAM,CAAA,CAAE,YAAA,KAAiB,MAAM,CAAA;AACnG,UAAA,OAAA,CAAQ,UAAA,GAAa,MAAM,MAAA,CAAO,CAAC,KAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,UAAA,EAAY,CAAC,CAAA;AACnE,UAAA,mBAAA,CAAoB,OAAO,CAAA;AAAA,QAC7B;AAAA,MACF;AAEA,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IAEA,MAAM,eAAe,EAAA,EAA2B;AAC9C,MAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AACxD,MAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,KAAA,CAAM,CAAA,SAAA,EAAY,EAAE,CAAA,UAAA,CAAY,CAAA;AACzD,MAAA,QAAA,CAAS,MAAA,GAAS,WAAA;AAClB,MAAA,QAAA,CAAS,YAAY,GAAA,EAAI;AAAA,IAC3B,CAAA;AAAA;AAAA,IAGA,MAAM,eAAe,KAAA,EAAqD;AACxE,MAAA,IAAI,CAAC,MAAM,aAAA,IAAiB,CAAC,MAAM,WAAA,IAAe,KAAA,CAAM,aAAA,KAAkB,KAAA,CAAM,WAAA,EAAa;AAC3F,QAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,MAC/D;AACA,MAAA,IAAI,EAAE,KAAA,CAAM,MAAA,GAAS,IAAI,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAC3E,MAAA,MAAM,aAAa,GAAA,EAAI;AACvB,MAAA,MAAM,kBAAkB,GAAA,EAAI;AAC5B,MAAA,MAAM,mBAAmB,GAAA,EAAI;AAC7B,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,YAAA,EAAc,UAAA;AAAA,QACd,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,YAAY,KAAA,CAAM,MAAA;AAAA,QAClB,SAAA,EAAW,CAAA;AAAA,QACX,MAAA,EAAQ,MAAA;AAAA,QACR,SAAS,KAAA,CAAM,IAAA;AAAA,QACf,aAAa,KAAA,CAAM,IAAA;AAAA,QACnB,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,QAAA;AAAA,QACA,WAAW,GAAA,EAAI;AAAA,QACf,WAAW,GAAA;AAAI,OACjB;AACA,MAAA,KAAA,CAAM,UAAU,IAAA,CAAK;AAAA,QACnB,GAAG,IAAA;AAAA,QAAM,EAAA,EAAI,eAAA;AAAA,QAAiB,SAAA,EAAW,OAAA;AAAA,QAAS,eAAe,KAAA,CAAM,aAAA;AAAA,QACvE,UAAU,EAAE,UAAA,EAAY,cAAc,KAAA,EAAO,gBAAA,EAAkB,MAAM,WAAA;AAAY,OAC7D,CAAA;AACtB,MAAA,KAAA,CAAM,UAAU,IAAA,CAAK;AAAA,QACnB,GAAG,IAAA;AAAA,QAAM,EAAA,EAAI,gBAAA;AAAA,QAAkB,SAAA,EAAW,QAAA;AAAA,QAAU,eAAe,KAAA,CAAM,WAAA;AAAA,QACzE,UAAU,EAAE,UAAA,EAAY,cAAc,IAAA,EAAM,gBAAA,EAAkB,MAAM,aAAA;AAAc,OAC9D,CAAA;AAEtB,MAAA,MAAM,IAAA,GAAO,MAAM,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,aAAa,CAAA;AACxE,MAAA,MAAM,EAAA,GAAK,MAAM,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,WAAW,CAAA;AACpE,MAAA,IAAI,IAAA,EAAM;AAAE,QAAA,IAAA,CAAK,cAAA,GAAiB,MAAA,CAAO,IAAA,CAAK,cAAA,GAAiB,MAAM,MAAM,CAAA;AAAG,QAAA,IAAA,CAAK,YAAY,GAAA,EAAI;AAAA,MAAE;AACrG,MAAA,IAAI,EAAA,EAAI;AAAE,QAAA,EAAA,CAAG,cAAA,GAAiB,MAAA,CAAO,EAAA,CAAG,cAAA,GAAiB,MAAM,MAAM,CAAA;AAAG,QAAA,EAAA,CAAG,YAAY,GAAA,EAAI;AAAA,MAAE;AAC7F,MAAA,OAAO,EAAE,UAAA,EAAY,eAAA,EAAiB,gBAAA,EAAiB;AAAA,IACzD,CAAA;AAAA;AAAA,IAGA,MAAM,eAAA,GAA0C;AAC9C,MAAA,OAAO,MAAM,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAAA,IACpD,CAAA;AAAA,IAEA,MAAM,kBAAkB,IAAA,EAAoD;AAC1E,MAAA,MAAM,OAAA,GAAuB;AAAA,QAC3B,IAAI,GAAA,EAAI;AAAA,QACR,MAAM,IAAA,CAAK,IAAA;AAAA,QACX,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,eAAe,IAAA,CAAK,aAAA;AAAA,QACpB,cAAc,IAAA,CAAK,YAAA;AAAA,QACnB,cAAA,EAAgB,KAAK,cAAA,IAAkB,CAAA;AAAA,QACvC,cAAA,EAAgB,KAAK,cAAA,IAAkB,CAAA;AAAA,QACvC,aAAa,IAAA,CAAK,WAAA;AAAA,QAClB,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,YAAY,IAAA,CAAK,UAAA;AAAA,QACjB,QAAA,EAAU,IAAA;AAAA,QACV,QAAQ,IAAA,CAAK,MAAA;AAAA,QACb,QAAA;AAAA,QACA,WAAW,GAAA,EAAI;AAAA,QACf,WAAW,GAAA;AAAI,OACjB;AACA,MAAA,KAAA,CAAM,YAAA,CAAa,KAAK,OAAO,CAAA;AAC/B,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IAEA,MAAM,iBAAA,CAAkB,EAAA,EAAY,IAAA,EAAkD;AACpF,MAAA,MAAM,OAAA,GAAU,MAAM,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA;AAC1D,MAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,KAAA,CAAM,CAAA,aAAA,EAAgB,EAAE,CAAA,UAAA,CAAY,CAAA;AAC5D,MAAA,MAAA,CAAO,OAAO,OAAA,EAAS,IAAA,EAAM,EAAE,SAAA,EAAW,GAAA,IAAO,CAAA;AACjD,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA;AAAA,IAGA,MAAM,gBAAgB,aAAA,EAAgD;AACpE,MAAA,IAAI,OAAA,GAAU,CAAC,GAAG,KAAA,CAAM,YAAY,CAAA;AACpC,MAAA,IAAI,aAAA,YAAyB,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,kBAAkB,aAAa,CAAA;AACpF,MAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,QAAA,CAAS,aAAA,CAAc,CAAA,CAAE,QAAQ,CAAC,CAAA;AAAA,IACpE,CAAA;AAAA,IAEA,MAAM,eAAe,aAAA,EAAoD;AACvE,MAAA,OAAO,KAAA,CAAM,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,KAAkB,aAAA,IAAiB,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA,IAAK,IAAA;AAAA,IACrG,CAAA;AAAA,IAEA,MAAM,gBAAgB,KAAA,EAAmD;AACvE,MAAA,MAAM,OAAA,GAAU,MAAM,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,aAAa,CAAA;AAC3E,MAAA,MAAM,OAAA,GAAuB;AAAA,QAC3B,IAAI,GAAA,EAAI;AAAA,QACR,eAAe,KAAA,CAAM,aAAA;AAAA,QACrB,iBAAiB,OAAA,EAAS,IAAA;AAAA,QAC1B,MAAA,EAAQ,MAAA;AAAA,QACR,UAAU,GAAA,EAAI;AAAA,QACd,gBAAgB,KAAA,CAAM,cAAA;AAAA,QACtB,cAAc,KAAA,CAAM,YAAA;AAAA,QACpB,gBAAgB,KAAA,CAAM,cAAA;AAAA,QACtB,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,QAAA;AAAA,QACA,WAAW,GAAA;AAAI,OACjB;AACA,MAAA,KAAA,CAAM,YAAA,CAAa,KAAK,OAAO,CAAA;AAC/B,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IAEA,MAAM,iBAAiB,KAAA,EAAoD;AACzE,MAAA,MAAM,OAAA,GAAU,MAAM,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,SAAS,CAAA;AACvE,MAAA,IAAI,CAAC,SAAS,MAAM,IAAI,MAAM,CAAA,aAAA,EAAgB,KAAA,CAAM,SAAS,CAAA,UAAA,CAAY,CAAA;AAGzE,MAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,KAAkB,OAAA,CAAQ,EAAA,IAAM,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA;AAC5G,MAAA,MAAM,SAAS,gBAAA,CAAiB,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAA,KAAc,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,YAAY,CAAC,CAAA;AAC5G,MAAA,MAAM,UAAU,gBAAA,CAAiB,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAA,KAAc,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,YAAY,CAAC,CAAA;AAC5G,MAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,cAAA,GAAiB,MAAA,GAAS,OAAA;AAE1D,MAAA,OAAA,CAAQ,MAAA,GAAS,QAAA;AACjB,MAAA,OAAA,CAAQ,WAAW,GAAA,EAAI;AACvB,MAAA,OAAA,CAAQ,iBAAiB,KAAA,CAAM,cAAA;AAC/B,MAAA,OAAA,CAAQ,eAAe,KAAA,CAAM,YAAA;AAC7B,MAAA,OAAA,CAAQ,iBAAiB,KAAA,CAAM,cAAA;AAC/B,MAAA,OAAA,CAAQ,eAAA,GAAkB,eAAA;AAC1B,MAAA,OAAA,CAAQ,UAAA,GAAa,MAAM,cAAA,GAAiB,eAAA;AAC5C,MAAA,OAAA,CAAQ,QAAQ,KAAA,CAAM,KAAA;AAEtB,MAAA,OAAO,OAAA;AAAA,IACT,CAAA;AAAA,IAEA,MAAM,sBAAsB,SAAA,EAAgD;AAC1E,MAAA,MAAM,OAAA,GAAU,MAAM,YAAA,CAAa,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,SAAS,CAAA;AACjE,MAAA,IAAI,CAAC,OAAA,EAAS,MAAM,IAAI,KAAA,CAAM,CAAA,aAAA,EAAgB,SAAS,CAAA,UAAA,CAAY,CAAA;AACnE,MAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,KAAkB,SAAA,IAAa,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA;AAC3G,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,eAAe,gBAAA,CAAiB,MAAA;AAAA,QAChC,aAAa,gBAAA,CAAiB,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAA,KAAc,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,YAAY,CAAC,CAAA;AAAA,QAC1G,cAAc,gBAAA,CAAiB,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAA,KAAc,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,YAAY,CAAC;AAAA,OAC5G;AAAA,IACF,CAAA;AAAA;AAAA,IAGA,MAAM,iBAAA,GAA8C;AAClD,MAAA,OAAO,MAAM,cAAA,CAAe,MAAA,CAAO,CAAC,EAAA,KAAO,GAAG,QAAQ,CAAA;AAAA,IACxD,CAAA;AAAA,IAEA,MAAM,qBAAA,GAAsD;AAC1D,MAAA,OAAO,MAAM,kBAAA,CAAmB,MAAA,CAAO,CAACA,EAAAA,KAAMA,GAAE,QAAQ,CAAA;AAAA,IAC1D,CAAA;AAAA;AAAA,IAGA,MAAM,kBAAA,GAAqD;AACzD,MAAA,OAAO,MAAM,eAAA,CAAgB,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,QAAQ,CAAA;AAAA,IACvD,CAAA;AAAA;AAAA,IAGA,MAAM,oBAAoB,SAAA,EAAmD;AAC3E,MAAA,IAAI,OAAA,GAAU,CAAC,GAAG,KAAA,CAAM,gBAAgB,CAAA;AACxC,MAAA,IAAI,SAAA,EAAW,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAACA,OAAM,gBAAA,CAAiBA,EAAAA,CAAE,YAAA,EAAc,SAAS,CAAC,CAAA;AAC1F,MAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,YAAA,CAAa,aAAA,CAAc,CAAA,CAAE,YAAY,CAAC,CAAA;AAAA,IAC5E,CAAA;AAAA;AAAA,IAGA,MAAM,aAAa,KAAA,EAAiD;AAClE,MAAA,MAAM,WAAW,KAAA,EAAM;AAGvB,MAAA,MAAM,UAAA,GAAa,CAAC,CAAA,KAAyB,CAAA,CAAE,WAAW,WAAA,IAAe,CAAC,CAAC,CAAA,CAAE,WAAA;AAC7E,MAAA,MAAM,YAAA,GAAe,CAAC,KAAA,CAAM,aAAA;AAC5B,MAAA,MAAM,gBAAgB,YAAA,GAClB,KAAA,CAAM,aAAa,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAQ,CAAA,GAC3C,KAAA,CAAM,aAAa,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,MAAM,aAAa,CAAA;AACjE,MAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,aAAA,CAAc,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACzD,MAAA,MAAM,eAAA,GAAkB,IAAI,GAAA,CAAI,KAAA,CAAM,aAAa,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AAC7E,MAAA,MAAM,UAAA,GAAa,cAAc,MAAA,CAAO,CAAC,GAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,cAAA,EAAgB,CAAC,CAAA;AAEzE,MAAA,IAAI,CAAC,YAAA,IAAgB,UAAA,CAAW,IAAA,KAAS,CAAA,EAAG;AAC1C,QAAA,OAAO,EAAE,OAAA,EAAS,IAAI,cAAA,EAAgB,CAAA,EAAG,gBAAgB,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,WAAA,EAAa,GAAG,SAAA,EAAW,CAAA,EAAG,KAAK,CAAA,EAAG,SAAA,EAAW,MAAM,aAAA,EAAc;AAAA,MACpJ;AAEA,MAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAyB,CAAA,CAAE,SAAA,KAAc,QAAA,GACpD,CAAA,CAAE,UAAA,IAAc,CAAA,CAAE,SAAA,IAAa,CAAA,CAAA,GAC/B,CAAC,CAAA,CAAE,UAAA;AAGP,MAAA,MAAM,UAAU,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,CAAC,MACtC,UAAA,CAAW,CAAC,CAAA,KAAM,YAAA,IAAiB,EAAE,aAAA,IAAiB,UAAA,CAAW,GAAA,CAAI,CAAA,CAAE,aAAa,CAAA,CAAG,CAAA;AAEzF,MAAA,MAAM,cAAA,GAAiB,OAAO,UAAA,GAAa,OAAA,CACxC,OAAO,CAAC,CAAA,KAAA,CAAO,CAAA,CAAE,WAAA,IAAe,EAAA,IAAM,KAAA,CAAM,UAAU,IAAI,CAAA,CAC1D,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,KAAA,CAAM,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAEpC,MAAA,MAAM,SAAA,GAAY,OAAA,CACf,MAAA,CAAO,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,CAAE,WAAA,EAAa,KAAA,CAAM,SAAS,CAAC,CAAA,CAC9D,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,WAAA,IAAe,EAAA,EAAI,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,EAAE,CAAA,IAAK,CAAA,CAAE,SAAA,CAAU,aAAA,CAAc,CAAA,CAAE,SAAS,CAAC,CAAA;AAEpH,MAAA,IAAI,OAAA,GAAU,cAAA;AACd,MAAA,IAAI,YAAA,GAAe,CAAA,EAAG,WAAA,GAAc,CAAA,EAAG,SAAA,GAAY,CAAA;AACnD,MAAA,MAAM,OAAA,GAA4B,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAAa;AAC5D,QAAA,MAAM,QAAQ,QAAA,CAAS,UAAA;AACvB,QAAA,MAAM,QAAA,GAAW,SAAS,SAAA,KAAc,QAAA;AACxC,QAAA,MAAM,GAAA,GAAM,QAAA,GAAY,QAAA,CAAS,SAAA,IAAa,CAAA,GAAK,CAAA;AACnD,QAAA,MAAM,GAAA,GAAM,QAAA,GAAW,MAAA,CAAO,KAAA,GAAQ,GAAG,CAAA,GAAI,KAAA;AAC7C,QAAA,MAAM,UAAA,GAAa,SAAS,YAAA,KAAiB,UAAA;AAC7C,QAAA,MAAM,IAAA,GAAQ,QAAA,CAAS,QAAA,IAAY,EAAC;AACpC,QAAA,MAAM,YAAyC,UAAA,GAC1C,IAAA,CAAK,YAAA,KAAiB,IAAA,GAAO,gBAAgB,cAAA,GAC9C,UAAA;AACJ,QAAA,MAAM,gBAAA,GAAmB,UAAA,GAAa,IAAA,CAAK,gBAAA,GAAmB,MAAA;AAC9D,QAAA,OAAA,GAAU,MAAA,CAAO,QAAA,GAAW,OAAA,GAAU,GAAA,GAAM,UAAU,GAAG,CAAA;AACzD,QAAA,IAAI,EAAE,gBAAgB,UAAA,CAAA,EAAa;AACjC,UAAA,IAAI,QAAA,EAAU,YAAA,GAAe,MAAA,CAAO,YAAA,GAAe,GAAG,CAAA;AAAA,eACjD,WAAA,GAAc,MAAA,CAAO,WAAA,GAAc,GAAG,CAAA;AAC3C,UAAA,SAAA,GAAY,MAAA,CAAO,YAAY,GAAG,CAAA;AAAA,QACpC;AACA,QAAA,OAAO;AAAA,UACL,QAAA;AAAA,UACA,OAAA,EAAS,QAAA,CAAS,SAAA,GAAY,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,QAAA,CAAS,SAAS,CAAA,GAAI,MAAA;AAAA,UACxF,cAAA,EAAgB,OAAA;AAAA,UAChB,KAAA;AAAA,UAAO,GAAA;AAAA,UAAK,GAAA;AAAA,UAAK,SAAA;AAAA,UACjB,gBAAA;AAAA,UACA,kBAAA,EAAoB,gBAAA,GAAmB,eAAA,CAAgB,GAAA,CAAI,gBAAgB,CAAA,GAAI;AAAA,SACjF;AAAA,MACF,CAAC,CAAA;AAGD,MAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,QAAA,MAAM,GAAA,GAAM,EAAE,QAAA,CAAS,iBAAA;AACvB,QAAA,MAAM,EAAA,GAAK,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,GAAG,CAAA,GAAI,MAAA;AAC7D,QAAA,IAAI,CAAC,EAAA,EAAI;AACT,QAAA,MAAM,GAAA,GAAM,EAAA,CAAG,SAAA,GAAY,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,EAAA,CAAG,SAAS,CAAA,GAAI,MAAA;AAC/E,QAAA,CAAA,CAAE,cAAA,GAAiB;AAAA,UACjB,YAAY,EAAA,CAAG,EAAA;AAAA,UACf,WAAA,EAAa,GAAG,KAAA,IAAS,MAAA;AAAA,UACzB,WAAW,EAAA,CAAG,SAAA;AAAA,UACd,cAAc,GAAA,EAAK,YAAA;AAAA,UACnB,aAAa,GAAA,EAAK;AAAA,SACpB;AAAA,MACF;AAEA,MAAA,MAAM,qBAAA,GAAwB,OAAO,UAAA,GAAa,OAAA,CAC/C,OAAO,CAAC,CAAA,KAAA,CAAO,EAAE,WAAA,IAAe,EAAA,KAAO,QAAQ,CAAA,CAC/C,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,IAAI,KAAA,CAAM,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAEpC,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,cAAA;AAAA,QACA,cAAA,EAAgB,OAAA;AAAA,QAChB,YAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAA;AAAA,QACA,GAAA,EAAK,MAAA,CAAO,YAAA,GAAe,WAAW,CAAA;AAAA,QACtC,WAAW,KAAA,CAAM,aAAA;AAAA,QACjB;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAGA,MAAM,WAAW,SAAA,EAAkD;AACjE,MAAA,MAAM,eAAe,KAAA,CAAM,YAAA,CACxB,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,QAAQ,CAAA,CACxB,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAM,CAAA,CAAE,gBAAgB,CAAC,CAAA;AAE/C,MAAA,MAAM,iBAAA,GAAoB,MAAM,SAAA,CAAU,MAAA;AAAA,QAAO,CAAC,CAAA,KAChD,CAAA,CAAE,SAAA,KAAc,YAAY,CAAA,CAAE,YAAA,KAAiB,MAAA,IAAU,CAAC,SAAA,EAAW,SAAS,CAAA,CAAE,QAAA,CAAS,EAAE,MAAM;AAAA,OACnG;AACA,MAAA,MAAM,cAAA,GAAiB,MAAM,SAAA,CAAU,MAAA;AAAA,QAAO,CAAC,CAAA,KAC7C,CAAA,CAAE,SAAA,KAAc,WAAW,CAAA,CAAE,YAAA,KAAiB,MAAA,IAAU,CAAC,SAAA,EAAW,SAAS,CAAA,CAAE,QAAA,CAAS,EAAE,MAAM;AAAA,OAClG;AAEA,MAAA,MAAM,WAAW,KAAA,EAAM;AACvB,MAAA,MAAM,UAAA,GAAa,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAAI,KAAA;AAC1C,MAAA,MAAM,QAAA,GAAW,QAAA;AAEjB,MAAA,MAAM,cAAA,GAAiB,MAAM,SAAA,CAAU,MAAA;AAAA,QAAO,CAAC,CAAA,KAC7C,CAAA,CAAE,YAAA,KAAiB,aAAa,gBAAA,CAAiB,CAAA,CAAE,WAAA,EAAa,SAAA,IAAa,EAAE,IAAA,EAAM,UAAA,EAAY,EAAA,EAAI,UAAU;AAAA,OACjH;AAEA,MAAA,MAAM,oBAAoB,iBAAA,CAAkB,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,QAAQ,CAAA;AAC9E,MAAA,MAAM,iBAAiB,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,QAAQ,CAAA;AAExE,MAAA,OAAO;AAAA,QACL,YAAA;AAAA,QACA,eAAA,EAAiB,iBAAA,CAAkB,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,UAAA,CAAA,EAAa,CAAC,CAAA;AAAA,QACpF,YAAA,EAAc,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,UAAA,CAAA,EAAa,CAAC,CAAA;AAAA,QAC9E,eAAe,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAA,KAAc,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,YAAY,CAAC,CAAA;AAAA,QAC1G,gBAAgB,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,SAAA,KAAc,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,GAAI,CAAA,CAAE,YAAY,CAAC,CAAA;AAAA,QAC1G,wBAAwB,iBAAA,CAAkB,MAAA;AAAA,QAC1C,uBAAA,EAAyB,iBAAA,CAAkB,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,UAAA,CAAA,EAAa,CAAC,CAAA;AAAA,QAC5F,qBAAqB,cAAA,CAAe,MAAA;AAAA,QACpC,oBAAA,EAAsB,cAAA,CAAe,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,UAAA,CAAA,EAAa,CAAC;AAAA,OACxF;AAAA,IACF,CAAA;AAAA;AAAA,IAGA,MAAM,uBAAuB,KAAA,EAAO;AAClC,MAAA,IAAI,QAAA,GAAW,GAAG,UAAA,GAAa,CAAA;AAC/B,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,QAAA,MAAM,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,cAAA,KAAmB,IAAA,CAAK,cAAA,IAAkB,CAAA,CAAE,UAAA,KAAe,KAAK,UAAU,CAAA;AACpH,QAAA,IAAI,GAAA,EAAK;AAAE,UAAA,UAAA,EAAA;AAAc,UAAA;AAAA,QAAS;AAClC,QAAA,KAAA,CAAM,UAAU,IAAA,CAAK;AAAA,UACnB,IAAI,GAAA,EAAI;AAAA,UACR,WAAW,IAAA,CAAK,SAAA;AAAA,UAChB,YAAA,EAAc,SAAA;AAAA,UACd,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,YAAY,IAAA,CAAK,MAAA;AAAA,UACjB,MAAA,EAAQ,MAAA;AAAA,UACR,SAAS,IAAA,CAAK,IAAA;AAAA,UACd,aAAa,IAAA,CAAK,IAAA;AAAA,UAClB,aAAA,EAAe,IAAA,CAAK,aAAA,IAAiB,KAAA,CAAM,aAAA;AAAA,UAC3C,OAAO,IAAA,CAAK,WAAA;AAAA,UACZ,YAAY,IAAA,CAAK,UAAA;AAAA,UACjB,gBAAgB,IAAA,CAAK,cAAA;AAAA,UACrB,QAAA;AAAA,UACA,WAAW,GAAA,EAAI;AAAA,UACf,WAAW,GAAA;AAAI,SACK,CAAA;AACtB,QAAA,QAAA,EAAA;AAAA,MACF;AACA,MAAA,OAAO,EAAE,UAAU,UAAA,EAAW;AAAA,IAChC,CAAA;AAAA,IAEA,MAAM,gBAAgB,KAAA,EAAO;AAC3B,MAAA,IAAI,OAAA,GAAU,KAAA,CAAM,SAAA,CAAU,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,cAAA,IAAkB,CAAC,CAAA,CAAE,YAAY,CAAA;AAC/E,MAAA,IAAI,KAAA,EAAO,aAAA,EAAe,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAA,KAAkB,KAAA,CAAM,aAAa,CAAA;AACjG,MAAA,IAAI,KAAA,EAAO,SAAA,EAAW,OAAA,GAAU,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,gBAAA,CAAiB,CAAA,CAAE,WAAA,EAAa,KAAA,CAAM,SAAS,CAAC,CAAA;AACtG,MAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,WAAA,IAAe,EAAA,EAAI,aAAA,CAAc,CAAA,CAAE,WAAA,IAAe,EAAE,CAAC,CAAA;AAAA,IACxF,CAAA;AAAA,IAEA,MAAM,sBAAsB,cAAA,EAAgB;AAC1C,MAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,cAAc,CAAA;AAChE,MAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,MAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,MAAM,MAAA,CAAO,MAAA,GAAS,IAAI,CAAC,CAAA;AAChD,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,IAAe,IAAA,CAAK,OAAA;AAC1C,MAAA,OAAO,KAAA,CAAM,SAAA,CACV,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,cAAA,IAAkB,CAAC,CAAA,CAAE,YAAA,IAAgB,CAAA,CAAE,SAAA,KAAc,IAAA,CAAK,SAAA,IAAa,CAAA,CAAE,EAAA,KAAO,cAAA,IAAkB,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,MAAA,GAAS,MAAM,CAAA,IAAK,GAAG,CAAA,CACrJ,GAAA,CAAI,CAAC,CAAA,KAAM;AACV,QAAA,MAAM,QAAA,GAAW,MAAA,GAAS,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,MAAA,GAAS,MAAM,CAAA,GAAI,MAAM,CAAA,GAAI,CAAA;AACtF,QAAA,MAAM,OAAA,GAAU,CAAA,CAAE,OAAA,IAAW,CAAA,CAAE,WAAA;AAC/B,QAAA,MAAM,OAAO,QAAA,IAAY,OAAA,GAAU,KAAK,GAAA,CAAA,CAAK,IAAI,KAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAI,IAAA,CAAK,OAAO,EAAE,OAAA,EAAQ,IAAK,KAAQ,CAAA,GAAI,EAAA;AACvH,QAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,GAAI,OAAO,EAAE,CAAA;AAC3C,QAAA,OAAO;AAAA,UACL,QAAA,EAAU,CAAA;AAAA,UACV,OAAA,EAAS,CAAA,CAAE,SAAA,GAAY,KAAA,CAAM,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,CAAA,CAAE,SAAS,CAAA,GAAI,MAAA;AAAA,UAC1E,KAAA,EAAO,MAAA,CAAO,GAAA,GAAM,QAAA,GAAW,MAAM,SAAS;AAAA,SAChD;AAAA,MACF,CAAC,CAAA,CACA,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA,CAChC,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,IAChB,CAAA;AAAA,IAEA,MAAM,kBAAkB,KAAA,EAAO;AAC7B,MAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,cAAc,CAAA;AACtE,MAAA,IAAI,IAAA,EAAM;AAAE,QAAA,IAAA,CAAK,eAAe,GAAA,EAAI;AAAG,QAAA,IAAA,CAAK,oBAAoB,KAAA,CAAM,iBAAA;AAAmB,QAAA,IAAA,CAAK,YAAY,GAAA,EAAI;AAAA,MAAE;AAChH,MAAA,IAAI,MAAM,iBAAA,EAAmB;AAC3B,QAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,KAAA,CAAM,iBAAiB,CAAA;AAC7E,QAAA,IAAI,QAAA,EAAU;AAAE,UAAA,QAAA,CAAS,eAAe,GAAA,EAAI;AAAG,UAAA,QAAA,CAAS,YAAY,GAAA,EAAI;AAAA,QAAE;AAAA,MAC5E;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,oBAAoB,cAAA,EAAgB;AACxC,MAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,cAAc,CAAA;AAChE,MAAA,IAAI,CAAC,IAAA,EAAM;AACX,MAAA,MAAM,YAAY,IAAA,CAAK,iBAAA;AACvB,MAAA,IAAA,CAAK,YAAA,GAAe,MAAA;AAAW,MAAA,IAAA,CAAK,iBAAA,GAAoB,MAAA;AAAW,MAAA,IAAA,CAAK,YAAY,GAAA,EAAI;AACxF,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,MAAM,QAAA,GAAW,MAAM,SAAA,CAAU,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,SAAS,CAAA;AAC/D,QAAA,IAAI,QAAA,EAAU;AAAE,UAAA,QAAA,CAAS,YAAA,GAAe,MAAA;AAAW,UAAA,QAAA,CAAS,YAAY,GAAA,EAAI;AAAA,QAAE;AAAA,MAChF;AAAA,IACF;AAAA,GACF;AAEA,EAAA,OAAO,QAAA;AACT;;;AC9sBA,SAAS,WAAA,GAAkC;AAEzC,EAAA,OAAiC,iBAAA,EAAkB;AACrD;AAEA,SAAS,aAAa,GAAA,EAAuD;AAC3E,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAa,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,WAAA,EAAa,CAAC,CAAA,GAAI,KAAA;AAAA,EAChE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,aAAa,GAAA,EAAuD;AAC3E,EAAA,MAAM,SAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACzB,IAAA,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,QAAA,EAAU,CAAC,CAAA,KAAM,CAAA,CAAA,EAAI,CAAA,CAAE,WAAA,EAAa,CAAA,CAAE,CAAC,CAAA,GAAI,KAAA;AAAA,EAChE;AACA,EAAA,OAAO,MAAA;AACT;AAEA,SAAS,UAAA,GAAa;AACpB,EAAA,MAAM,WAAW,yBAAA,EAA0B;AAC3C,EAAA,IAAI,CAAC,QAAA,EAAU,MAAM,IAAI,MAAM,0BAA0B,CAAA;AACzD,EAAA,OAAO,EAAE,IAAA,EAAM,QAAA,CAAS,OAAO,WAAW,CAAA,EAAG,KAAK,QAAA,EAAS;AAC7D;AAGA,SAAS,wBAAwB,KAAA,EAAwB;AACvD,EAAA,QAAQ,KAAA;AAAO,IACb,KAAK,MAAA;AAAQ,MAAA,OAAO,MAAA;AAAA,IACpB,KAAK,SAAA;AAAW,MAAA,OAAO,SAAA;AAAA,IACvB,KAAK,SAAA;AAAW,MAAA,OAAO,SAAA;AAAA,IACvB,KAAK,WAAA;AAAa,MAAA,OAAO,WAAA;AAAA,IACzB,KAAK,UAAA;AAAY,MAAA,OAAO,MAAA;AAAA,IACxB,KAAK,QAAA;AAAU,MAAA,OAAO,MAAA;AAAA,IACtB;AAAS,MAAA,OAAO,MAAA;AAAA;AAEpB;AAEA,IAAI,aAAA,GAAgB,KAAA;AAGpB,eAAe,YAAA,GAAe;AAC5B,EAAA,IAAI,aAAA,EAAe;AACnB,EAAA,aAAA,GAAgB,IAAA;AAChB,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,IAAA,MAAMkC,MAAAA,GAAAA,qBAAY,IAAA,EAAK,EAAE,aAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAGlD,IAAA,MAAM,EAAE,IAAA,EAAM,WAAA,EAAY,GAAI,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAC/D,MAAA,CAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,CAAA,CAC5B,EAAA,CAAG,QAAA,EAAU,CAAC,SAAA,EAAW,SAAS,CAAC,CAAA,CACnC,EAAA,CAAG,UAAA,EAAYA,MAAK,CAAA,CACpB,MAAA,CAAO,YAAY,CAAA;AAGtB,IAAA,IAAI,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACzC,MAAA,MAAM,UAAA,GAAa,CAAC,GAAG,IAAI,IAAI,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAW,EAAE,UAAU,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA;AACzF,MAAA,KAAA,MAAW,SAAS,UAAA,EAAY;AAC9B,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,KAAY,MAAM,GAAA,CAAI,KAAK,qBAAqB,CAAA,CAC3D,MAAA,CAAO,QAAQ,EACf,EAAA,CAAG,YAAA,EAAc,KAAK,CAAA,CACtB,EAAA,CAAG,iBAAiB,MAAM,CAAA;AAC7B,QAAA,MAAM,IAAA,GAAO,WAAW,EAAC;AACzB,QAAA,MAAM,aAAa,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAW,CAAA,CAAE,WAAW,SAAS,CAAA;AAC/D,QAAA,MAAM,UAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAA,KAAW,CAAA,CAAE,WAAW,MAAM,CAAA;AAC1D,QAAA,MAAM,aAAA,GAAgB,OAAA,GAAU,MAAA,GAAS,UAAA,GAAa,SAAA,GAAY,MAAA;AAClE,QAAA,MAAM,YAAA,GAAe,OAAA,GAAU,MAAA,GAAS,UAAA,GAAa,SAAA,GAAY,UAAA;AAEjE,QAAA,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,CAAO,EAAE,KAAA,EAAO,YAAA,EAAc,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,KAAK,CAAA;AAAA,MAC1E;AAAA,IACF;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAMA,eAAe,oBAAA,CACb,KACA,GAAA,EACyE;AACzE,EAAA,MAAM,GAAA,uBAAU,GAAA,EAA+D;AAC/E,EAAA,IAAI,CAAC,GAAA,CAAI,MAAA,EAAQ,OAAO,GAAA;AACxB,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CACpB,IAAA,CAAK,oBAAoB,CAAA,CACzB,MAAA,CAAO,mCAAmC,CAAA,CAC1C,EAAA,CAAG,cAAc,GAAG,CAAA;AACvB,EAAA,KAAA,MAAW,CAAA,IAAM,IAAA,IAAQ,EAAC,EAAa;AACrC,IAAA,GAAA,CAAI,IAAI,CAAA,CAAE,UAAA,EAAY,EAAE,IAAA,EAAM,MAAA,CAAO,EAAE,IAAI,CAAA,IAAK,GAAG,OAAA,EAAS,MAAA,CAAO,EAAE,OAAO,CAAA,IAAK,GAAG,MAAA,EAAQ,CAAA,CAAE,QAAQ,CAAA;AAAA,EACxG;AACA,EAAA,OAAO,GAAA;AACT;AAEA,SAASC,QAAO,CAAA,EAAmB;AACjC,EAAA,OAAO,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,GAAG,CAAA,GAAI,GAAA;AAC/B;AAGA,eAAe,eAAA,CAAgB,KAAU,eAAA,EAA2C;AAClF,EAAA,IAAI,CAAC,iBAAiB,OAAO,CAAA;AAC7B,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,IAAI,IAAA,CAAK,iBAAiB,CAAA,CAAE,MAAA,CAAO,gBAAgB,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,eAAe,EAAE,MAAA,EAAO;AAC7G,EAAA,OAAO,MAAA,CAAO,IAAA,EAAM,cAAc,CAAA,IAAK,CAAA;AACzC;AAGA,SAAS,KAAA,GAAgB;AACvB,EAAA,IAAI;AACF,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,IAAgB,OAAe,UAAA,EAAY,OAAQ,OAAe,UAAA,EAAW;AAAA,EACrG,CAAA,CAAA,MAAQ;AAAA,EAAa;AACrB,EAAA,OAAO,QAAQ,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,CAAS,EAAE,CAAA,GAAI,GAAA,GAAM,IAAA,CAAK,MAAA,GAAS,QAAA,CAAS,EAAE,CAAA,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AACvF;AAEO,SAAS,+BAAA,GAAyD;AACvE,EAAA,MAAM,QAAA,GAAkC;AAAA;AAAA,IAEtC,MAAM,YAAY,KAAA,EAAwD;AACxE,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,IAAI,EAAA,GAAK,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,OAAO,GAAA,EAAK,EAAE,KAAA,EAAO,OAAA,EAAS,CAAA;AAG3D,MAAA,EAAA,GAAK,EAAA,CAAG,EAAA,CAAG,OAAA,EAAS,CAAC,QAAA,EAAU,YAAY,MAAA,EAAQ,SAAA,EAAW,SAAA,EAAW,WAAW,CAAC,CAAA;AACrF,MAAA,EAAA,GAAK,EAAA,CAAG,EAAA,CAAG,OAAA,EAAS,CAAC,CAAA;AAGrB,MAAA,IAAI,MAAM,SAAA,EAAW;AACnB,QAAA,EAAA,GAAK,EAAA,CAAG,EAAA,CAAG,WAAA,EAAa,KAAA,CAAM,SAAS,CAAA;AAAA,MACzC;AAEA,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,IAAI,KAAA,CAAM,MAAA,GAAS,CAAC,KAAA,CAAM,MAAM,CAAA;AAC3E,QAAA,EAAA,GAAK,EAAA,CAAG,EAAA,CAAG,QAAA,EAAU,QAAQ,CAAA;AAAA,MAC/B;AACA,MAAA,IAAI,MAAM,SAAA,EAAW,EAAA,GAAK,GAAG,EAAA,CAAG,UAAA,EAAY,MAAM,SAAS,CAAA;AAC3D,MAAA,IAAI,KAAA,CAAM,QAAQ,EAAA,GAAK,EAAA,CAAG,MAAM,OAAA,EAAS,CAAA,CAAA,EAAI,KAAA,CAAM,MAAM,CAAA,CAAA,CAAG,CAAA;AAC5D,MAAA,IAAI,KAAA,CAAM,SAAA,EAAW,EAAA,GAAK,EAAA,CAAG,IAAI,YAAA,EAAc,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA,CAAE,GAAA,CAAI,YAAA,EAAc,KAAA,CAAM,UAAU,EAAE,CAAA;AACzG,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,IAAQ,CAAA;AAC3B,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,EAAA;AACnC,MAAA,EAAA,GAAK,EAAA,CAAG,KAAA,CAAA,CAAO,IAAA,GAAO,CAAA,IAAK,UAAU,IAAA,GAAO,QAAA,GAAW,CAAC,CAAA,CAAE,KAAA,CAAM,YAAA,EAAc,EAAE,SAAA,EAAW,OAAO,CAAA;AAClG,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,EAAA;AAE9B,MAAA,MAAM,GAAA,GAAM,MAAM,oBAAA,CAAqB,GAAA,EAAA,CAAM,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW,CAAA,CAAE,EAAE,CAAC,CAAA;AAC9E,MAAA,MAAM,YAAuB,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW;AACvD,QAAA,MAAM,IAAA,GAAO,CAAA,CAAE,QAAA,IAAY,EAAC;AAE5B,QAAA,MAAM,MAAM,CAAA,CAAE,SAAA,KAAc,CAAA,CAAE,IAAA,KAAS,oBAAoB,OAAA,GAAU,QAAA,CAAA;AACrE,QAAA,MAAM,CAAA,GAAI,GAAA,CAAI,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA;AACtB,QAAA,OAAO;AAAA,UACL,IAAI,CAAA,CAAE,EAAA;AAAA,UACN,SAAA,EAAW,GAAA;AAAA,UACX,aAAa,CAAA,CAAE,UAAA,EAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,IAAK,EAAA;AAAA,UAC3C,cAAc,CAAA,CAAE,gBAAA;AAAA,UAChB,WAAA,EAAa,EAAE,KAAA,IAAS,CAAA;AAAA,UACxB,UAAA,EAAY,CAAA,EAAG,IAAA,IAAQ,IAAA,CAAK,UAAA,IAAc,CAAA;AAAA,UAC1C,MAAA,EAAQ,CAAA,EAAG,MAAA,IAAU,uBAAA,CAAwB,EAAE,KAAK,CAAA;AAAA,UACpD,iBAAA,EAAmB,KAAK,gBAAA,IAAoB,CAAA;AAAA,UAC5C,WAAW,CAAA,CAAE,QAAA;AAAA,UACb,aAAa,IAAA,CAAK,WAAA;AAAA,UAClB,cAAc,CAAA,CAAE,KAAA;AAAA,UAChB,cAAc,IAAA,CAAK,YAAA;AAAA,UACnB,UAAU,CAAA,CAAE,SAAA;AAAA,UACZ,WAAW,CAAA,CAAE,UAAA;AAAA,UACb,WAAW,CAAA,CAAE;AAAA,SACf;AAAA,MACF,CAAC,CAAA;AACD,MAAA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,KAAA,EAAO,SAAS,CAAA,EAAE;AAAA,IAC7C,CAAA;AAAA,IAEA,MAAM,eAAe,EAAA,EAAqC;AACxD,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,KAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,EAAE,EAAE,MAAA,EAAO;AAC3E,MAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,MAAA,MAAM,CAAA,GAAI,aAAa,IAAI,CAAA;AAC3B,MAAA,MAAM,IAAA,GAAO,IAAA,CAAK,QAAA,IAAY,EAAC;AAE/B,MAAA,MAAM,OAAA,GAAA,CAAW,MAAM,oBAAA,CAAqB,GAAA,EAAK,CAAC,EAAE,CAAC,CAAA,EAAG,GAAA,CAAI,EAAE,CAAA;AAC9D,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,KAAS,MAAM,GAAA,CAAI,KAAK,qBAAqB,CAAA,CACxD,MAAA,CAAO,aAAa,EACpB,EAAA,CAAG,YAAA,EAAc,EAAE,CAAA,CACnB,EAAA,CAAG,iBAAiB,MAAM,CAAA;AAC7B,MAAA,OAAO;AAAA,QACL,IAAI,CAAA,CAAE,EAAA;AAAA,QACN,WAAW,CAAA,CAAE,SAAA,KAAc,CAAA,CAAE,IAAA,KAAS,oBAAoB,OAAA,GAAU,QAAA,CAAA;AAAA,QACpE,aAAa,CAAA,CAAE,SAAA,EAAW,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,IAAK,EAAA;AAAA,QAC1C,cAAc,CAAA,CAAE,eAAA;AAAA,QAChB,WAAA,EAAa,EAAE,KAAA,IAAS,CAAA;AAAA,QAAG,UAAA,EAAY,SAAS,IAAA,IAAQ,CAAA;AAAA,QACxD,MAAA,EAAQ,OAAA,EAAS,MAAA,IAAU,uBAAA,CAAwB,EAAE,KAAK,CAAA;AAAA,QAC1D,iBAAA,EAAA,CAAoB,IAAA,IAAQ,EAAC,EAAG,MAAA,IAAU,CAAA;AAAA,QAAG,WAAW,CAAA,CAAE,OAAA;AAAA,QAC1D,aAAa,IAAA,CAAK,WAAA;AAAA,QAAa,cAAc,IAAA,CAAK,YAAA;AAAA,QAClD,eAAA,EAAiB,EAAE,QAAA,IAAY,MAAA;AAAA,QAC/B,cAAc,CAAA,CAAE,KAAA;AAAA,QAChB,UAAU,CAAA,CAAE,QAAA;AAAA,QAAU,WAAW,CAAA,CAAE,SAAA;AAAA,QAAW,WAAW,CAAA,CAAE;AAAA,OAC7D;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,gBAAgB,SAAA,EAA2C;AAC/D,MAAA,MAAM,EAAE,IAAU,CAAA,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,IAAA,CAAK,KAAK,aAAa,CAAA,CAAE,MAAA,CAAO,GAAG,EAAE,EAAA,CAAG,UAAA,EAAY,SAAS,CAAA,CAAE,MAAM,YAAY,CAAA;AACxG,MAAA,OAAA,CAAQ,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW;AAClC,QAAA,MAAM,CAAA,GAAI,aAAa,CAAC,CAAA;AACxB,QAAA,OAAO;AAAA,UACL,IAAI,CAAA,CAAE,EAAA;AAAA,UAAI,SAAA;AAAA,UAAW,QAAA,EAAU,CAAA,CAAE,QAAA,EAAU,QAAA,IAAY,OAAA;AAAA,UACvD,WAAA,EAAa,EAAE,IAAA,IAAQ,EAAA;AAAA,UAAI,QAAA,EAAU,EAAE,QAAA,IAAY,CAAA;AAAA,UACnD,SAAA,EAAW,EAAE,SAAA,IAAa,CAAA;AAAA,UAAG,WAAA,EAAa,EAAE,KAAA,IAAS,CAAA;AAAA,UACrD,QAAA,EAAU,EAAE,QAAA,IAAY,CAAA;AAAA,UAAG,SAAA,EAAW,CAAA;AAAA,UACtC,WAAA,EAAa,CAAA,CAAE,SAAA,IAAa,CAAA,CAAE,SAAA;AAAA,UAC9B,WAAW,CAAA,CAAE;AAAA,SACf;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,cAAc,KAAA,EAA6C;AAC/D,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,MAAA,MAAM,IAAA,GAAO,KAAA,CAAM,SAAA,KAAc,OAAA,GAAU,iBAAA,GAAoB,oBAAA;AAC/D,MAAA,MAAM,cAAc,KAAA,CAAM,KAAA,CAAM,OAAO,CAAC,GAAA,EAAK,SAAS,GAAA,GAAM,IAAA,CAAK,QAAA,GAAW,IAAA,CAAK,aAAa,IAAA,CAAK,QAAA,IAAY,MAAM,IAAA,CAAK,SAAA,IAAa,IAAI,CAAC,CAAA;AAC5I,MAAA,MAAM,YAAA,GAAe,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAW,CAAA,CAAE,WAAW,CAAA,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,IAAI,CAAA;AAGzF,MAAA,IAAI,kBAAkB,KAAA,CAAM,YAAA;AAC5B,MAAA,IAAI,CAAC,mBAAmB,QAAA,EAAU;AAChC,QAAA,MAAM,MAAA,GAAS,KAAA,CAAM,SAAA,KAAc,QAAA,GAAW,KAAA,GAAQ,KAAA;AACtD,QAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,MAAM,IAAA,CAAK,GAAA,CAAI,eAAA,EAAiB,EAAE,WAAA,EAAa,QAAA,EAAU,MAAA,EAAQ,MAAM,CAAA;AAC7F,QAAA,IAAI,GAAA,EAAK,eAAA,GAAkB,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,MAAA,CAAO,GAAG,CAAA,CAAE,QAAA,CAAS,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AAAA,MACtE;AAEA,MAAA,MAAM,EAAE,MAAM,KAAA,EAAM,GAAI,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,CAAO;AAAA,QACvD,SAAA,EAAW,QAAA;AAAA,QAAU,IAAA;AAAA,QAAM,MAAA,EAAQ,MAAA;AAAA,QACnC,KAAA,EAAO,UAAA;AAAA,QACP,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,gBAAA,EAAkB,eAAA;AAAA,QAClB,KAAA,EAAO,WAAA;AAAA,QAAa,UAAU,KAAA,CAAM,SAAA;AAAA,QACpC,OAAO,KAAA,CAAM,YAAA;AAAA,QACb,QAAA,EAAU,KAAA;AAAA,QACV,QAAA,EAAU,EAAE,YAAA,EAAc,WAAA,EAAa,KAAA,CAAM,aAAa,gBAAA,EAAkB,KAAA,CAAM,YAAA,CAAa,MAAA,IAAU,CAAA;AAAE,OAC5G,CAAA,CAAE,MAAA,EAAO,CAAE,MAAA,EAAO;AAEnB,MAAA,IAAI,KAAA,IAAS,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AACnC,QAAA,MAAM,IAAA,CAAK,IAAA,CAAK,aAAa,CAAA,CAAE,MAAA;AAAA,UAC7B,KAAA,CAAM,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,CAAA,MAAO;AAAA,YAC5B,UAAU,KAAA,CAAM,EAAA;AAAA,YAAI,MAAM,IAAA,CAAK,WAAA;AAAA,YAC/B,UAAU,IAAA,CAAK,QAAA;AAAA,YAAU,YAAY,IAAA,CAAK,SAAA;AAAA,YAC1C,QAAA,EAAU,KAAK,QAAA,IAAY,CAAA;AAAA,YAC3B,KAAA,EAAO,KAAK,QAAA,GAAW,IAAA,CAAK,aAAa,IAAA,CAAK,QAAA,IAAY,CAAA,CAAA,IAAM,IAAA,CAAK,SAAA,IAAa,CAAA,CAAA;AAAA,YAClF,UAAA,EAAY,CAAA;AAAA,YACZ,UAAU,EAAE,QAAA,EAAU,KAAK,QAAA,EAAU,WAAA,EAAa,KAAK,WAAA;AAAY,WACrE,CAAE;AAAA,SACJ;AAAA,MACF;AAGA,MAAA,IAAI,KAAA,IAAS,KAAA,CAAM,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AAC1C,QAAA,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA;AAAA,UACpC,KAAA,CAAM,YAAA,CAAa,GAAA,CAAI,CAAC,MAAM,CAAA,MAAO;AAAA,YACnC,SAAA,EAAW,QAAA;AAAA,YAAU,YAAY,KAAA,CAAM,EAAA;AAAA,YACvC,WAAW,KAAA,CAAM,SAAA;AAAA,YAAW,eAAe,IAAA,CAAK,YAAA;AAAA,YAChD,QAAQ,IAAA,CAAK,MAAA;AAAA,YAAQ,WAAA,EAAa,CAAA;AAAA,YAAG,MAAA,EAAQ,SAAA;AAAA,YAC7C,UAAU,IAAA,CAAK,OAAA;AAAA,YAAS,kBAAA,EAAoB,IAAA,CAAK,iBAAA,IAAqB,CAAA,GAAI;AAAA,WAC5E,CAAE;AAAA,SACJ;AAAA,MACF;AAEA,MAAA,OAAO;AAAA,QACL,IAAI,KAAA,CAAO,EAAA;AAAA,QAAI,WAAW,KAAA,CAAM,SAAA;AAAA,QAAW,WAAA,EAAA,qBAAiB,IAAA,EAAK,EAAE,aAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,QAC5F,YAAA,EAAc,eAAA;AAAA,QACd,WAAA;AAAA,QAAa,UAAA,EAAY,CAAA;AAAA,QAAG,MAAA,EAAQ,MAAA;AAAA,QAAQ,iBAAA,EAAmB,KAAA,CAAM,YAAA,CAAa,MAAA,IAAU,CAAA;AAAA,QAC5F,aAAa,KAAA,CAAM,WAAA;AAAA,QAAa,YAAA;AAAA,QAChC,QAAA;AAAA,QAAqB,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAAG,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA;AAAY,OAC9F;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,EAAA,EAAY,OAAA,EAA6C;AAC3E,MAAA,MAAM,EAAE,IAAU,CAAA,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,MAAW,EAAC;AAClB,MAAA,IAAI,OAAA,CAAQ,YAAA,EAAc,GAAA,CAAI,KAAA,GAAQ,OAAA,CAAQ,YAAA;AAC9C,MAAA,IAAI,OAAA,CAAQ,WAAA,EAAa,GAAA,CAAI,KAAA,GAAQ,OAAA,CAAQ,WAAA;AAC7C,MAAA,IAAI,OAAA,CAAQ,MAAA,EAAQ,GAAA,CAAI,MAAA,GAAS,OAAA,CAAQ,MAAA;AACzC,MAAA,IAAI,OAAO,IAAA,CAAK,GAAG,CAAA,CAAE,MAAA,GAAS,GAAG,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,EAAE,MAAA,CAAO,GAAG,CAAA,CAAE,EAAA,CAAG,MAAM,EAAE,CAAA;AAClF,MAAA,OAAQ,MAAM,QAAA,CAAS,cAAA,CAAe,EAAE,CAAA;AAAA,IAC1C,CAAA;AAAA,IAEA,MAAM,cAAc,EAAA,EAA2B;AAC7C,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,WAAA,EAAa,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,EAAE,CAAA;AACrE,MAAA,MAAM,IAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,WAAA,EAAa,CAAA,CAAE,GAAG,YAAA,EAAc,EAAE,CAAA,CAAE,EAAA,CAAG,UAAU,SAAS,CAAA;AAAA,IACnH,CAAA;AAAA;AAAA,IAGA,MAAM,aAAa,KAAA,EAAmE;AACpF,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,IAAI,EAAA,GAAK,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,OAAO,GAAA,EAAK,EAAE,KAAA,EAAO,OAAA,EAAS,CAAA;AACvE,MAAA,IAAI,MAAM,SAAA,EAAW,EAAA,GAAK,GAAG,EAAA,CAAG,WAAA,EAAa,MAAM,SAAS,CAAA;AAC5D,MAAA,IAAI,MAAM,MAAA,EAAQ;AAChB,QAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,MAAM,IAAI,KAAA,CAAM,MAAA,GAAS,CAAC,KAAA,CAAM,MAAM,CAAA;AAC3E,QAAA,EAAA,GAAK,EAAA,CAAG,EAAA,CAAG,QAAA,EAAU,QAAQ,CAAA;AAAA,MAC/B;AACA,MAAA,IAAI,MAAM,aAAA,EAAe,EAAA,GAAK,GAAG,EAAA,CAAG,iBAAA,EAAmB,MAAM,aAAa,CAAA;AAC1E,MAAA,IAAI,MAAM,aAAA,EAAe,EAAA,GAAK,GAAG,EAAA,CAAG,iBAAA,EAAmB,MAAM,aAAa,CAAA;AAC1E,MAAA,IAAI,KAAA,CAAM,SAAA,EAAW,EAAA,GAAK,EAAA,CAAG,IAAI,UAAA,EAAY,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA,CAAE,GAAA,CAAI,UAAA,EAAY,KAAA,CAAM,UAAU,EAAE,CAAA;AACrG,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,IAAQ,CAAA;AAC3B,MAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,EAAA;AACnC,MAAA,EAAA,GAAK,EAAA,CAAG,KAAA,CAAA,CAAO,IAAA,GAAO,CAAA,IAAK,QAAA,EAAU,OAAO,QAAA,GAAW,CAAC,CAAA,CAAE,KAAA,CAAM,UAAU,CAAA;AAC1E,MAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,EAAA;AAC9B,MAAA,OAAO,EAAE,IAAA,EAAA,CAAO,IAAA,IAAQ,IAAI,GAAA,CAAI,CAAC,CAAA,KAAW,YAAA,CAAa,CAAC,CAAiC,CAAA,EAAG,KAAA,EAAO,SAAS,CAAA,EAAE;AAAA,IAClH,CAAA;AAAA,IAEA,MAAM,YAAY,KAAA,EAAqD;AACrE,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,MAAM,IAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA,CAAE,EAAA,CAAG,MAAM,KAAA,CAAM,UAAU,EAAE,MAAA,EAAO;AAC1G,MAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,MAAM,oBAAoB,CAAA;AAC9C,MAAA,MAAM,QAAA,GAAW,GAAA,CAAI,SAAA,IAAa,WAAA,EAAY;AAG9C,MAAA,MAAM,MAAA,GAAS,IAAI,SAAA,KAAc,QAAA,GAAW,MAAM,eAAA,CAAgB,GAAA,EAAK,KAAA,CAAM,eAAe,CAAA,GAAI,CAAA;AAChG,MAAA,MAAM,OAAA,GAAUA,OAAAA,CAAO,KAAA,CAAM,MAAA,IAAU,SAAS,GAAA,CAAI,CAAA;AAIpD,MAAA,MAAM,UAAA,GAAkB;AAAA,QACtB,SAAA,EAAW,QAAA;AAAA,QACX,YAAY,GAAA,CAAI,UAAA;AAAA,QAChB,WAAW,GAAA,CAAI,SAAA;AAAA,QACf,aAAA,EAAe,SAAA;AAAA,QACf,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,aAAa,KAAA,CAAM,MAAA;AAAA,QACnB,UAAA,EAAY,OAAA;AAAA,QACZ,MAAA,EAAQ,MAAA;AAAA,QACR,UAAU,GAAA,CAAI,QAAA;AAAA,QACd,cAAc,KAAA,CAAM,WAAA;AAAA,QACpB,oBAAoB,GAAA,CAAI,kBAAA;AAAA,QACxB,iBAAA,EAAmB,MAAM,eAAA,IAAmB,IAAA;AAAA,QAC5C,sBAAA,EAAwB,MAAM,mBAAA,IAAuB,IAAA;AAAA,QACrD,eAAA,EAAiB,MAAM,aAAA,IAAiB,IAAA;AAAA,QACxC,eAAA,EAAiB,MAAM,aAAA,IAAiB,IAAA;AAAA,QACxC,UAAA,EAAY,MAAM,SAAA,IAAa,IAAA;AAAA,QAC/B,iBAAA,EAAmB,MAAM,gBAAA,IAAoB,IAAA;AAAA,QAC7C,KAAA,EAAO,MAAM,KAAA,IAAS;AAAA,OACxB;AACA,MAAA,IAAI,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,UAAU,CAAA,CAAE,MAAA,GAAS,MAAA,EAAO;AAE/F,MAAA,IAAI,SAAS,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACpD,QAAA,MAAM,EAAE,UAAA,EAAY,GAAG,IAAA,EAAK,GAAI,UAAA;AAC/B,QAAA,CAAC,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,IAAI,CAAA,CAAE,MAAA,GAAS,MAAA,EAAO;AAAA,MACzF;AACA,MAAA,IAAI,OAAO,MAAM,KAAA;AAKjB,MAAA,MAAM,UAAUA,OAAAA,CAAAA,CAAQ,GAAA,CAAI,WAAA,IAAe,CAAA,IAAK,MAAM,MAAM,CAAA;AAC5D,MAAA,MAAM,UAAA,GAAa,OAAA,IAAW,GAAA,CAAI,MAAA,GAAS,MAAA,GAAS,SAAA;AAGpD,MAAA,MAAM,IAAI,IAAA,CAAK,qBAAqB,EACjC,MAAA,CAAO,EAAE,aAAa,OAAA,EAAS,MAAA,EAAQ,YAAY,YAAA,EAAc,IAAA,EAAM,iBAAiB,IAAA,EAAM,EAC9F,EAAA,CAAG,IAAA,EAAM,IAAI,EAAE,CAAA;AAGlB,MAAA,IAAI,IAAI,UAAA,EAAY;AAClB,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,KAAY,MAAM,GAAA,CAAI,KAAK,qBAAqB,CAAA,CAC3D,OAAO,6BAA6B,CAAA,CACpC,GAAG,YAAA,EAAc,GAAA,CAAI,UAAU,CAAA,CAC/B,EAAA,CAAG,iBAAiB,MAAM,CAAA;AAC7B,QAAA,MAAM,IAAA,GAAO,WAAW,EAAC;AACzB,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,MAAM,CAAC,CAAA,KAAW,CAAA,CAAE,MAAA,KAAW,MAAM,CAAA;AAC7E,QAAA,MAAM,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAW,EAAE,MAAA,KAAW,MAAA,IAAU,CAAA,CAAE,MAAA,KAAW,SAAS,CAAA;AAEnF,QAAA,MAAM,SAAA,GAAY,IAAA,CAAK,MAAA,CAAO,CAAC,GAAA,EAAa,MAAW,GAAA,IAAO,CAAA,CAAE,WAAA,IAAe,CAAA,CAAA,EAAI,CAAC,CAAA;AAEpF,QAAA,MAAM,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,KAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,CAAO,UAAU,CAAA,CAAE,EAAA,CAAG,MAAM,GAAA,CAAI,UAAU,EAAE,MAAA,EAAO;AACrG,QAAA,MAAM,IAAA,GAAQ,KAAA,EAAO,QAAA,IAAoB,EAAC;AAC1C,QAAA,MAAM,YAAA,GAAe,OAAA,GAAU,MAAA,GAAS,OAAA,GAAU,SAAA,GAAY,UAAA;AAE9D,QAAA,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,CAAO;AAAA,UAC/B,MAAA,EAAQ,YAAA;AAAA,UACR,QAAA,EAAU,EAAE,GAAG,IAAA,EAAM,YAAY,SAAA;AAAU,SAC5C,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,IAAI,UAAU,CAAA;AAAA,MAC5B;AAEA,MAAA,OAAO,aAAa,IAAK,CAAA;AAAA,IAC3B,CAAA;AAAA,IAEA,MAAM,eAAe,EAAA,EAA2B;AAC9C,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,EAAE,MAAA,EAAQ,WAAA,EAAa,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,EAAE,CAAA;AAAA,IACnF,CAAA;AAAA;AAAA,IAGA,MAAM,eAAe,KAAA,EAAqD;AACxE,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,UAAA,EAAW;AAC3B,MAAA,IAAI,CAAC,MAAM,aAAA,IAAiB,CAAC,MAAM,WAAA,IAAe,KAAA,CAAM,aAAA,KAAkB,KAAA,CAAM,WAAA,EAAa;AAC3F,QAAA,MAAM,IAAI,MAAM,6CAA6C,CAAA;AAAA,MAC/D;AACA,MAAA,IAAI,EAAE,KAAA,CAAM,MAAA,GAAS,IAAI,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAC3E,MAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,MAAA,MAAM,aAAa,KAAA,EAAM;AACzB,MAAA,MAAM,IAAA,GAAO;AAAA,QACX,SAAA,EAAW,QAAA;AAAA,QACX,aAAA,EAAe,UAAA;AAAA,QACf,QAAQ,KAAA,CAAM,MAAA;AAAA,QACd,aAAa,KAAA,CAAM,MAAA;AAAA,QACnB,UAAA,EAAY,CAAA;AAAA,QACZ,MAAA,EAAQ,MAAA;AAAA,QACR,UAAU,KAAA,CAAM,IAAA;AAAA,QAChB,cAAc,KAAA,CAAM,IAAA;AAAA,QACpB,KAAA,EAAO,MAAM,KAAA,IAAS;AAAA,OACxB;AACA,MAAA,MAAM,YAAA,GAAe;AAAA,QACnB;AAAA,UACE,GAAG,IAAA;AAAA,UACH,SAAA,EAAW,OAAA;AAAA,UACX,iBAAiB,KAAA,CAAM,aAAA;AAAA,UACvB,UAAU,EAAE,UAAA,EAAY,cAAc,KAAA,EAAO,gBAAA,EAAkB,MAAM,WAAA;AAAY,SACnF;AAAA,QACA;AAAA,UACE,GAAG,IAAA;AAAA,UACH,SAAA,EAAW,QAAA;AAAA,UACX,iBAAiB,KAAA,CAAM,WAAA;AAAA,UACvB,UAAU,EAAE,UAAA,EAAY,cAAc,IAAA,EAAM,gBAAA,EAAkB,MAAM,aAAA;AAAc;AACpF,OACF;AACA,MAAA,IAAI,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,YAAY,CAAA,CAAE,OAAO,eAAe,CAAA;AAEvG,MAAA,IAAI,SAAS,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,OAAA,IAAW,EAAE,CAAA,EAAG;AACpD,QAAA,MAAM,QAAA,GAAW,aAAa,GAAA,CAAI,CAAC,EAAE,UAAA,EAAY,GAAG,IAAA,EAAK,KAAM,IAAI,CAAA;AAClE,QAAA,CAAC,EAAE,IAAA,EAAM,KAAA,EAAM,GAAI,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,QAAQ,CAAA,CAAE,OAAO,eAAe,CAAA;AAAA,MACnG;AACA,MAAA,IAAI,OAAO,MAAM,KAAA;AACjB,MAAA,MAAM,IAAA,GAAQ,QAAQ,EAAC;AACvB,MAAA,MAAM,eAAA,GAAkB,KAAK,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,OAAO,CAAA,EAAG,EAAA,IAAM,EAAA;AACzE,MAAA,MAAM,gBAAA,GAAmB,KAAK,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,SAAA,KAAc,QAAQ,CAAA,EAAG,EAAA,IAAM,EAAA;AAC3E,MAAA,OAAO,EAAE,UAAA,EAAY,eAAA,EAAiB,gBAAA,EAAiB;AAAA,IACzD,CAAA;AAAA;AAAA,IAGA,MAAM,eAAA,GAA0C;AAC9C,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,KAAK,eAAe,CAAA,CAAE,MAAA,CAAO,GAAG,EAAE,EAAA,CAAG,WAAA,EAAa,IAAI,CAAA,CAAE,MAAM,MAAM,CAAA;AAC/F,MAAA,OAAA,CAAQ,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW,YAAA,CAAa,CAAC,CAA2B,CAAA;AAAA,IAC/E,CAAA;AAAA,IAEA,MAAM,kBAAkB,KAAA,EAAqD;AAC3E,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,MAAA,MAAM,EAAE,MAAK,GAAI,MAAM,IAAI,IAAA,CAAK,eAAe,EAAE,MAAA,CAAO;AAAA,QACtD,GAAG,aAAa,KAAY,CAAA;AAAA,QAAG,SAAA,EAAW,QAAA;AAAA,QAAU,eAAA,EAAiB,MAAM,cAAA,IAAkB;AAAA,OAC9F,CAAA,CAAE,MAAA,EAAO,CAAE,MAAA,EAAO;AACnB,MAAA,OAAO,aAAa,IAAK,CAAA;AAAA,IAC3B,CAAA;AAAA,IAEA,MAAM,iBAAA,CAAkB,EAAA,EAAY,OAAA,EAAqD;AACvF,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,GAAA,GAAM,aAAa,OAAc,CAAA;AACvC,MAAA,OAAO,GAAA,CAAI,EAAA;AAAI,MAAA,OAAO,GAAA,CAAI,SAAA;AAC1B,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,KAAK,eAAe,CAAA,CAAE,MAAA,CAAO,GAAG,EAAE,EAAA,CAAG,IAAA,EAAM,EAAE,CAAA,CAAE,MAAA,GAAS,MAAA,EAAO;AAC1F,MAAA,OAAO,aAAa,IAAK,CAAA;AAAA,IAC3B,CAAA;AAAA;AAAA,IAGA,MAAM,gBAAgB,aAAA,EAAgD;AACpE,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,IAAI,KAAK,GAAA,CAAI,IAAA,CAAK,wBAAwB,CAAA,CAAE,OAAO,GAAG,CAAA;AACtD,MAAA,IAAI,aAAA,EAAe,EAAA,GAAK,EAAA,CAAG,EAAA,CAAG,mBAAmB,aAAa,CAAA;AAC9D,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,EAAA,CAAG,MAAM,WAAA,EAAa,EAAE,SAAA,EAAW,KAAA,EAAO,CAAA;AACjE,MAAA,OAAA,CAAQ,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW,YAAA,CAAa,CAAC,CAA2B,CAAA;AAAA,IAC/E,CAAA;AAAA,IAEA,MAAM,eAAe,aAAA,EAAoD;AACvE,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAA,CAAK,wBAAwB,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA,CAAE,EAAA,CAAG,mBAAmB,aAAa,CAAA,CAAE,GAAG,QAAA,EAAU,MAAM,EAAE,MAAA,EAAO;AACvI,MAAA,OAAO,IAAA,GAAO,YAAA,CAAa,IAAI,CAAA,GAA8B,IAAA;AAAA,IAC/D,CAAA;AAAA,IAEA,MAAM,gBAAgB,KAAA,EAAmD;AACvE,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,MAAA,MAAM,EAAE,MAAK,GAAI,MAAM,IAAI,IAAA,CAAK,wBAAwB,EAAE,MAAA,CAAO;AAAA,QAC/D,SAAA,EAAW,QAAA;AAAA,QAAU,iBAAiB,KAAA,CAAM,aAAA;AAAA,QAC5C,MAAA,EAAQ,MAAA;AAAA,QAAQ,iBAAiB,KAAA,CAAM,cAAA;AAAA,QACvC,mBAAmB,KAAA,CAAM,cAAA;AAAA,QAAgB,gBAAgB,KAAA,CAAM,YAAA;AAAA,QAC/D,SAAS,KAAA,CAAM;AAAA,OAChB,CAAA,CAAE,MAAA,EAAO,CAAE,MAAA,EAAO;AACnB,MAAA,OAAO,aAAa,IAAK,CAAA;AAAA,IAC3B,CAAA;AAAA,IAEA,MAAM,iBAAiB,KAAA,EAAoD;AACzE,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,MAAK,GAAI,MAAM,IAAI,IAAA,CAAK,wBAAwB,EAAE,MAAA,CAAO;AAAA,QAC/D,MAAA,EAAQ,QAAA;AAAA,QAAU,iBAAiB,KAAA,CAAM,cAAA;AAAA,QACzC,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,QAClC,mBAAmB,KAAA,CAAM,cAAA;AAAA,QAAgB,gBAAgB,KAAA,CAAM,YAAA;AAAA,QAC/D,OAAO,KAAA,CAAM;AAAA,OACd,EAAE,EAAA,CAAG,IAAA,EAAM,MAAM,SAAS,CAAA,CAAE,MAAA,EAAO,CAAE,MAAA,EAAO;AAC7C,MAAA,OAAO,aAAa,IAAK,CAAA;AAAA,IAC3B,CAAA;AAAA,IAEA,MAAM,sBAAsB,SAAA,EAAgD;AAC1E,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,OAAA,GAAA,CAAW,MAAM,GAAA,CAAI,IAAA,CAAK,wBAAwB,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,SAAS,CAAA,CAAE,QAAO,EAAG,IAAA;AACpG,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,KAAS,MAAM,GAAA,CAAI,KAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,wBAAwB,EAAE,EAAA,CAAG,iBAAA,EAAmB,SAAS,CAAA,CAAE,EAAA,CAAG,UAAU,MAAM,CAAA;AAClJ,MAAA,MAAM,SAAA,GAAY,QAAQ,EAAC;AAC3B,MAAA,OAAO;AAAA,QACL,OAAA,EAAS,aAAa,OAAQ,CAAA;AAAA,QAC9B,eAAe,SAAA,CAAU,MAAA;AAAA,QACzB,aAAa,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAW,EAAE,SAAA,KAAc,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAW,CAAA,KAAW,CAAA,GAAI,CAAA,CAAE,aAAa,CAAC,CAAA;AAAA,QACtH,cAAc,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAW,EAAE,SAAA,KAAc,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAW,CAAA,KAAW,CAAA,GAAI,CAAA,CAAE,aAAa,CAAC;AAAA,OACxH;AAAA,IACF,CAAA;AAAA;AAAA,IAGA,MAAM,iBAAA,GAA8C;AAClD,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,KAAK,iBAAiB,CAAA,CAAE,MAAA,CAAO,GAAG,EAAE,EAAA,CAAG,WAAA,EAAa,IAAI,CAAA,CAAE,MAAM,MAAM,CAAA;AACjG,MAAA,OAAA,CAAQ,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW,YAAA,CAAa,CAAC,CAA6B,CAAA;AAAA,IACjF,CAAA;AAAA,IAEA,MAAM,qBAAA,GAAsD;AAC1D,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,KAAK,sBAAsB,CAAA,CAAE,MAAA,CAAO,GAAG,EAAE,EAAA,CAAG,WAAA,EAAa,IAAI,CAAA,CAAE,MAAM,MAAM,CAAA;AACtG,MAAA,OAAA,CAAQ,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW,YAAA,CAAa,CAAC,CAAiC,CAAA;AAAA,IACrF,CAAA;AAAA;AAAA,IAGA,MAAM,kBAAA,GAAqD;AACzD,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,KAAK,mBAAmB,CAAA,CAAE,MAAA,CAAO,GAAG,EAAE,EAAA,CAAG,WAAA,EAAa,IAAI,CAAA,CAAE,MAAM,MAAM,CAAA;AACnG,MAAA,OAAA,CAAQ,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW,YAAA,CAAa,CAAC,CAAmC,CAAA;AAAA,IACvF,CAAA;AAAA;AAAA,IAGA,MAAM,oBAAoB,SAAA,EAAmD;AAC3E,MAAsB,UAAA;AACtB,MAAA,OAAO,EAAC;AAAA,IACV,CAAA;AAAA;AAAA,IAGA,MAAM,aAAa,KAAA,EAAiD;AAClE,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAMD,MAAAA,GAAAA,qBAAY,IAAA,EAAK,EAAE,aAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AASlD,MAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,MAAM,IAAI,IAAA,CAAK,eAAe,CAAA,CAAE,MAAA,CAAO,sCAAsC,CAAA;AACxG,MAAA,MAAM,WAAA,GAAe,YAAY,EAAC;AAClC,MAAA,MAAM,YAAA,GAAe,CAAC,KAAA,CAAM,aAAA;AAC5B,MAAA,MAAM,gBAAgB,YAAA,GAClB,WAAA,CAAY,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,SAAS,CAAA,GACrC,WAAA,CAAY,OAAO,CAAC,CAAA,KAAM,CAAA,CAAE,EAAA,KAAO,MAAM,aAAa,CAAA;AAC1D,MAAA,MAAM,aAAa,aAAA,CAAc,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,EAAE,CAAA;AAChD,MAAA,MAAM,eAAA,GAAkB,IAAI,GAAA,CAAoB,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,CAAE,EAAA,EAAI,CAAA,CAAE,IAAI,CAAC,CAAC,CAAA;AACtF,MAAA,MAAM,UAAA,GAAa,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,IAAK,MAAA,CAAO,CAAA,CAAE,eAAe,CAAA,IAAK,CAAA,CAAA,EAAI,CAAC,CAAA;AAEzF,MAAA,IAAI,CAAC,YAAA,IAAgB,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG;AAC5C,QAAA,OAAO,EAAE,OAAA,EAAS,IAAI,cAAA,EAAgB,CAAA,EAAG,gBAAgB,CAAA,EAAG,YAAA,EAAc,CAAA,EAAG,WAAA,EAAa,GAAG,SAAA,EAAW,CAAA,EAAG,KAAK,CAAA,EAAG,SAAA,EAAW,MAAM,aAAA,EAAc;AAAA,MACpJ;AAEA,MAAA,MAAM,WAAA,GAAc,CAAC,EAAA,KAAY,YAAA,GAAe,KAAK,EAAA,CAAG,EAAA,CAAG,mBAAmB,UAAU,CAAA;AAExF,MAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAW,CAAA,CAAE,cAAc,QAAA,GAAA,CACrC,MAAA,CAAO,EAAE,WAAW,CAAA,IAAK,MAAM,MAAA,CAAO,CAAA,CAAE,UAAU,CAAA,IAAK,CAAA,CAAA,GACxD,EAAE,MAAA,CAAO,CAAA,CAAE,WAAW,CAAA,IAAK,CAAA,CAAA;AAI/B,MAAA,MAAM,EAAE,MAAM,SAAA,EAAU,GAAI,MAAM,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CACzE,MAAA,CAAO,GAAG,CAAA,CACV,GAAA,CAAI,UAAU,WAAW,CAAA,CACzB,GAAG,cAAA,EAAgB,KAAA,CAAM,SAAA,CAAU,IAAI,CAAC,CAAA;AAC3C,MAAA,MAAM,QAAA,GAAA,CAAY,SAAA,IAAa,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,EAAW,CAAA,KAAW,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,EAAG,CAAC,CAAA;AAChF,MAAA,MAAM,cAAA,GAAiBC,OAAAA,CAAO,UAAA,GAAa,QAAQ,CAAA;AAGnD,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,MAAM,WAAA,CAAY,GAAA,CAAI,IAAA,CAAK,qBAAqB,EACpE,MAAA,CAAO,GAAG,CAAA,CACV,GAAA,CAAI,UAAU,WAAW,CAAA,CACzB,GAAA,CAAI,cAAA,EAAgB,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA,CAAE,IAAI,cAAA,EAAgB,KAAA,CAAM,SAAA,CAAU,EAAE,EAChF,KAAA,CAAM,cAAc,CAAA,CAAE,KAAA,CAAM,YAAY,CAAC,CAAA;AAG5C,MAAA,MAAM,aAAa,CAAC,GAAG,IAAI,GAAA,CAAA,CAAK,QAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,MAAW,CAAA,CAAE,UAAU,EAAE,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA;AAC1F,MAAA,MAAM,WAAA,uBAAkB,GAAA,EAAqB;AAC7C,MAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,QAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAO,GAAI,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,CAAO,0CAA0C,CAAA,CAAE,EAAA,CAAG,MAAM,UAAU,CAAA;AACzH,QAAA,KAAA,MAAW,CAAA,IAAM,MAAA,IAAU,EAAC,EAAa;AACvC,UAAA,WAAA,CAAY,IAAI,CAAA,CAAE,EAAA,EAAI,EAAE,EAAA,EAAI,EAAE,EAAA,EAAI,SAAA,EAAW,CAAA,CAAE,QAAA,EAAU,aAAc,CAAA,CAAE,QAAA,EAAkB,aAAa,YAAA,EAAc,CAAA,CAAE,kBAA6B,CAAA;AAAA,QACvJ;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,GAAU,cAAA;AACd,MAAA,IAAI,YAAA,GAAe,CAAA,EAAG,WAAA,GAAc,CAAA,EAAG,SAAA,GAAY,CAAA;AACnD,MAAA,MAAM,WAA6B,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW;AAC7D,QAAA,MAAM,QAAA,GAAW,aAAa,CAAC,CAAA;AAC/B,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,CAAE,WAAW,CAAA,IAAK,CAAA;AACvC,QAAA,MAAM,QAAA,GAAW,EAAE,SAAA,KAAc,QAAA;AACjC,QAAA,MAAM,MAAM,QAAA,GAAY,MAAA,CAAO,CAAA,CAAE,UAAU,KAAK,CAAA,GAAK,CAAA;AACrD,QAAA,MAAM,GAAA,GAAM,QAAA,GAAWA,OAAAA,CAAO,KAAA,GAAQ,GAAG,CAAA,GAAI,KAAA;AAC7C,QAAA,MAAM,IAAA,GAAQ,CAAA,CAAE,QAAA,IAAY,EAAC;AAC7B,QAAA,MAAM,UAAA,GAAa,EAAE,aAAA,KAAkB,UAAA;AACvC,QAAA,MAAM,YAAyC,UAAA,GAC1C,IAAA,CAAK,YAAA,KAAiB,IAAA,GAAO,gBAAgB,cAAA,GAC9C,UAAA;AACJ,QAAA,MAAM,gBAAA,GAAmB,UAAA,GAAa,IAAA,CAAK,gBAAA,GAAmB,MAAA;AAC9D,QAAA,IAAI,QAAA,EAAU,OAAA,GAAUA,OAAAA,CAAO,OAAA,GAAU,GAAG,CAAA;AAAA,aACvC,OAAA,GAAUA,OAAAA,CAAO,OAAA,GAAU,GAAG,CAAA;AAEnC,QAAA,IAAI,EAAE,gBAAgB,UAAA,CAAA,EAAa;AACjC,UAAA,IAAI,QAAA,EAAU,YAAA,GAAeA,OAAAA,CAAO,YAAA,GAAe,GAAG,CAAA;AAAA,eACjD,WAAA,GAAcA,OAAAA,CAAO,WAAA,GAAc,GAAG,CAAA;AAC3C,UAAA,SAAA,GAAYA,OAAAA,CAAO,YAAY,GAAG,CAAA;AAAA,QACpC;AACA,QAAA,OAAO;AAAA,UACL,QAAA;AAAA,UACA,SAAS,CAAA,CAAE,UAAA,GAAa,YAAY,GAAA,CAAI,CAAA,CAAE,UAAU,CAAA,GAAI,MAAA;AAAA,UACxD,cAAA,EAAgB,OAAA;AAAA,UAChB,KAAA;AAAA,UAAO,GAAA;AAAA,UAAK,GAAA;AAAA,UAAK,SAAA;AAAA,UACjB,gBAAA;AAAA,UACA,kBAAA,EAAoB,gBAAA,GAAmB,eAAA,CAAgB,GAAA,CAAI,gBAAgB,CAAA,GAAI;AAAA,SACjF;AAAA,MACF,CAAC,CAAA;AAID,MAAA,MAAM,aAAa,CAAC,GAAG,IAAI,GAAA,CAAI,QAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,iBAAiB,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA;AAChG,MAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,QAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAQ,GAAI,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,uBAAuB,CAAA,CAAE,EAAA,CAAG,MAAM,UAAU,CAAA;AACnH,QAAA,MAAM,WAAA,GAAc,IAAI,GAAA,CAAA,CAAkB,OAAA,IAAW,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AACnF,QAAA,MAAM,oBAAoB,CAAC,GAAG,IAAI,GAAA,CAAA,CAAK,WAAW,EAAC,EAAG,GAAA,CAAI,CAAC,MAAW,CAAA,CAAE,UAAU,EAAE,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA;AACpG,QAAA,MAAM,OAAA,uBAAc,GAAA,EAAiB;AACrC,QAAA,IAAI,kBAAkB,MAAA,EAAQ;AAC5B,UAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAO,GAAI,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,CAAO,gCAAgC,CAAA,CAAE,EAAA,CAAG,MAAM,iBAAiB,CAAA;AACtH,UAAA,KAAA,MAAW,CAAA,IAAM,UAAU,EAAC,UAAqB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,QAC9D;AACA,QAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,UAAA,MAAM,GAAA,GAAM,EAAE,QAAA,CAAS,iBAAA;AACvB,UAAA,MAAM,EAAA,GAAK,GAAA,GAAM,WAAA,CAAY,GAAA,CAAI,GAAG,CAAA,GAAI,MAAA;AACxC,UAAA,IAAI,CAAC,EAAA,EAAI;AACT,UAAA,MAAM,MAAM,EAAA,CAAG,UAAA,GAAa,QAAQ,GAAA,CAAI,EAAA,CAAG,UAAU,CAAA,GAAI,MAAA;AACzD,UAAA,CAAA,CAAE,cAAA,GAAiB;AAAA,YACjB,YAAY,EAAA,CAAG,EAAA;AAAA,YACf,WAAA,EAAa,GAAG,KAAA,IAAS,MAAA;AAAA,YACzB,SAAA,EAAW,GAAG,UAAA,IAAc,MAAA;AAAA,YAC5B,YAAA,EAAc,KAAK,gBAAA,IAAoB,MAAA;AAAA,YACvC,WAAA,EAAc,GAAA,EAAK,QAAA,EAAkB,WAAA,IAAe;AAAA,WACtD;AAAA,QACF;AAAA,MACF;AAGA,MAAA,MAAM,EAAE,MAAM,SAAA,EAAU,GAAI,MAAM,WAAA,CAAY,GAAA,CAAI,KAAK,qBAAqB,CAAA,CACzE,OAAO,GAAG,CAAA,CACV,IAAI,QAAA,EAAU,WAAW,EACzB,GAAA,CAAI,cAAA,EAAgBD,MAAK,CAAC,CAAA;AAC7B,MAAA,MAAM,qBAAA,GAAwBC,OAAAA,CAAO,UAAA,GAAA,CAAc,SAAA,IAAa,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,EAAW,MAAW,CAAA,GAAI,KAAA,CAAM,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AAElH,MAAA,OAAO;AAAA,QACL,OAAA;AAAA,QACA,cAAA;AAAA,QACA,cAAA,EAAgB,OAAA;AAAA,QAChB,YAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAA;AAAA,QACA,GAAA,EAAKA,OAAAA,CAAO,YAAA,GAAe,WAAW,CAAA;AAAA,QACtC,WAAW,KAAA,CAAM,aAAA;AAAA,QACjB;AAAA,OACF;AAAA,IACF,CAAA;AAAA;AAAA,IAGA,MAAM,WAAW,SAAA,EAAkD;AAEjE,MAAA,YAAA,EAAa;AACb,MAAA,MAAM,EAAQ,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAS,GAAI,MAAM,GAAA,CAAI,IAAA,CAAK,eAAe,CAAA,CAAE,MAAA,CAAO,iBAAiB,CAAA,CAAE,EAAA,CAAG,aAAa,IAAI,CAAA;AACzG,MAAA,MAAM,YAAA,GAAA,CAAgB,QAAA,IAAY,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,EAAW,CAAA,KAAW,CAAA,IAAK,CAAA,CAAE,eAAA,IAAmB,CAAA,CAAA,EAAI,CAAC,CAAA;AAEnG,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,MAAM,IAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,+EAA+E,CAAA;AACnJ,MAAA,MAAM,OAAA,GAAU,QAAQ,EAAC;AACzB,MAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAW,CAAC,SAAA,EAAW,SAAA,EAAW,SAAS,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,MAAM,CAAC,CAAA;AAC9F,MAAA,MAAMD,MAAAA,GAAAA,qBAAY,IAAA,EAAK,EAAE,aAAY,CAAE,KAAA,CAAM,GAAG,EAAE,CAAA;AAElD,MAAA,MAAM,eAAe,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAW,CAAA,CAAE,cAAc,QAAQ,CAAA;AACvE,MAAA,MAAM,cAAc,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAW,CAAA,CAAE,cAAc,OAAO,CAAA;AACrE,MAAA,MAAM,aAAA,GAAgB,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,KAAW,EAAE,MAAA,KAAW,SAAA,IAAa,CAAA,CAAE,QAAA,GAAWA,MAAK,CAAA;AAClG,MAAA,MAAM,YAAA,GAAe,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,KAAW,EAAE,MAAA,KAAW,SAAA,IAAa,CAAA,CAAE,QAAA,GAAWA,MAAK,CAAA;AAEhG,MAAA,MAAM,UAAA,GAAaA,MAAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,GAAI,KAAA;AAEvC,MAAA,MAAM,SAAA,GAAY,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAW,EAAE,aAAA,KAAkB,SAAA,IAAa,CAAA,CAAE,YAAA,IAAgB,UAAU,CAAA;AAE1G,MAAA,OAAO;AAAA,QACL,YAAA;AAAA,QACA,eAAA,EAAiB,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,EAAW,CAAA,KAAW,CAAA,GAAI,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,WAAA,EAAa,CAAC,CAAA;AAAA,QAC3F,YAAA,EAAc,WAAA,CAAY,MAAA,CAAO,CAAC,CAAA,EAAW,CAAA,KAAW,CAAA,GAAI,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,WAAA,EAAa,CAAC,CAAA;AAAA,QACvF,eAAe,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAW,EAAE,SAAA,KAAc,QAAQ,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAW,CAAA,KAAW,CAAA,GAAI,CAAA,CAAE,aAAa,CAAC,CAAA;AAAA,QACxH,gBAAgB,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAW,EAAE,SAAA,KAAc,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,CAAA,EAAW,CAAA,KAAW,CAAA,GAAI,CAAA,CAAE,aAAa,CAAC,CAAA;AAAA,QACxH,wBAAwB,aAAA,CAAc,MAAA;AAAA,QACtC,uBAAA,EAAyB,aAAA,CAAc,MAAA,CAAO,CAAC,CAAA,EAAW,CAAA,KAAW,CAAA,GAAI,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,WAAA,EAAa,CAAC,CAAA;AAAA,QACpG,qBAAqB,YAAA,CAAa,MAAA;AAAA,QAClC,oBAAA,EAAsB,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,EAAW,CAAA,KAAW,CAAA,GAAI,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE,WAAA,EAAa,CAAC;AAAA,OAClG;AAAA,IACF,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,MAAM,uBAAuB,KAAA,EAAO;AAClC,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,UAAA,EAAW;AAC3B,MAAA,MAAM,WAAW,WAAA,EAAY;AAC7B,MAAA,IAAI,QAAA,GAAW,GAAG,UAAA,GAAa,CAAA;AAC/B,MAAA,KAAA,MAAW,IAAA,IAAQ,MAAM,KAAA,EAAO;AAC9B,QAAA,MAAM,EAAE,OAAM,GAAI,MAAM,IAAI,IAAA,CAAK,qBAAqB,EAAE,MAAA,CAAO;AAAA,UAC7D,SAAA,EAAW,QAAA;AAAA,UACX,WAAW,IAAA,CAAK,SAAA;AAAA,UAChB,aAAA,EAAe,SAAA;AAAA,UACf,QAAQ,IAAA,CAAK,MAAA;AAAA,UACb,aAAa,IAAA,CAAK,MAAA;AAAA,UAClB,MAAA,EAAQ,MAAA;AAAA,UACR,UAAU,IAAA,CAAK,IAAA;AAAA,UACf,cAAc,IAAA,CAAK,IAAA;AAAA,UACnB,eAAA,EAAiB,IAAA,CAAK,aAAA,IAAiB,KAAA,CAAM,aAAA,IAAiB,IAAA;AAAA,UAC9D,OAAO,IAAA,CAAK,WAAA;AAAA,UACZ,aAAa,IAAA,CAAK,UAAA;AAAA,UAClB,iBAAiB,IAAA,CAAK;AAAA,SACvB,CAAA;AACD,QAAA,IAAI,KAAA,EAAO;AAET,UAAA,IAAK,KAAA,CAAc,SAAS,OAAA,EAAS,UAAA,EAAA;AAAA,eAChC,MAAM,KAAA;AAAA,QACb,CAAA,MAAO,QAAA,EAAA;AAAA,MACT;AACA,MAAA,OAAO,EAAE,UAAU,UAAA,EAAW;AAAA,IAChC,CAAA;AAAA,IAEA,MAAM,gBAAgB,KAAA,EAAO;AAC3B,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,UAAA,EAAW;AAC3B,MAAA,IAAI,EAAA,GAAK,GAAA,CAAI,IAAA,CAAK,qBAAqB,EAAE,MAAA,CAAO,GAAG,CAAA,CAChD,GAAA,CAAI,mBAAmB,IAAA,EAAM,IAAI,CAAA,CACjC,EAAA,CAAG,iBAAiB,IAAI,CAAA;AAC3B,MAAA,IAAI,OAAO,aAAA,EAAe,EAAA,GAAK,GAAG,EAAA,CAAG,iBAAA,EAAmB,MAAM,aAAa,CAAA;AAC3E,MAAA,IAAI,KAAA,EAAO,SAAA,EAAW,EAAA,GAAK,EAAA,CAAG,IAAI,cAAA,EAAgB,KAAA,CAAM,SAAA,CAAU,IAAI,CAAA,CAAE,GAAA,CAAI,cAAA,EAAgB,KAAA,CAAM,UAAU,EAAE,CAAA;AAC9G,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,EAAA,CAAG,MAAM,cAAA,EAAgB,EAAE,SAAA,EAAW,KAAA,EAAO,CAAA;AACpE,MAAA,OAAA,CAAQ,IAAA,IAAQ,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW,YAAA,CAAa,CAAC,CAAiC,CAAA;AAAA,IACrF,CAAA;AAAA,IAEA,MAAM,sBAAsB,cAAA,EAAgB;AAC1C,MAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAI,GAAI,UAAA,EAAW;AACjC,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,MAAM,IAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,cAAc,EAAE,MAAA,EAAO;AACzG,MAAA,IAAI,CAAC,IAAA,EAAM,OAAO,EAAC;AACnB,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,IAAK,CAAA;AACtC,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,QAAA;AAE3C,MAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,MAAMC,OAAAA,CAAO,MAAA,GAAS,IAAI,CAAC,CAAA;AAChD,MAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA,CAC9D,EAAA,CAAG,mBAAmB,IAAI,CAAA,CAC1B,GAAG,eAAA,EAAiB,IAAI,EACxB,EAAA,CAAG,WAAA,EAAa,KAAK,SAAS,CAAA,CAC9B,IAAI,QAAA,EAAUA,OAAAA,CAAO,SAAS,GAAG,CAAC,EAClC,GAAA,CAAI,QAAA,EAAUA,QAAO,MAAA,GAAS,GAAG,CAAC,CAAA,CAClC,GAAA,CAAI,MAAM,cAAc,CAAA,CACxB,MAAM,EAAE,CAAA;AACX,MAAA,MAAM,cAAe,IAAA,IAAQ,EAAC,EAAa,GAAA,CAAI,CAAC,CAAA,KAAM;AACpD,QAAA,MAAM,OAAA,GAAU,KAAK,GAAA,CAAA,CAAK,MAAA,CAAO,EAAE,MAAM,CAAA,IAAK,KAAK,MAAM,CAAA;AACzD,QAAA,MAAM,QAAA,GAAW,SAAS,CAAA,GAAI,IAAA,CAAK,IAAI,CAAA,EAAG,CAAA,GAAI,OAAA,GAAU,MAAM,CAAA,GAAI,CAAA;AAClE,QAAA,MAAM,OAAA,GAAU,CAAA,CAAE,QAAA,IAAY,CAAA,CAAE,YAAA;AAChC,QAAA,MAAM,OAAO,QAAA,IAAY,OAAA,GACrB,KAAK,GAAA,CAAA,CAAK,IAAI,KAAK,QAAQ,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAI,IAAA,CAAK,OAAO,EAAE,OAAA,EAAQ,IAAK,KAAQ,CAAA,GAChF,EAAA;AACJ,QAAA,MAAM,YAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,GAAI,OAAO,EAAE,CAAA;AAC3C,QAAA,OAAO;AAAA,UACL,QAAA,EAAU,aAAa,CAAC,CAAA;AAAA,UACxB,KAAA,EAAOA,OAAAA,CAAO,GAAA,GAAM,QAAA,GAAW,MAAM,SAAS;AAAA,SAChD;AAAA,MACF,CAAC,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AAEnC,MAAA,MAAM,aAAa,CAAC,GAAG,IAAI,GAAA,CAAI,WAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,SAAS,CAAA,CAAE,MAAA,CAAO,OAAO,CAAC,CAAC,CAAA;AAC3F,MAAA,IAAI,WAAW,MAAA,EAAQ;AACrB,QAAA,MAAM,EAAE,IAAA,EAAM,MAAA,EAAO,GAAI,MAAM,IAAA,CAAK,IAAA,CAAK,QAAQ,CAAA,CAAE,MAAA,CAAO,gCAAgC,CAAA,CAAE,EAAA,CAAG,MAAM,UAAU,CAAA;AAC/G,QAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAA,CAAkB,MAAA,IAAU,EAAC,EAAG,GAAA,CAAI,CAAC,CAAA,KAAW,CAAC,CAAA,CAAE,EAAA,EAAI,CAAC,CAAC,CAAC,CAAA;AAC3E,QAAA,KAAA,MAAW,KAAK,UAAA,EAAY;AAC1B,UAAA,MAAM,CAAA,GAAI,EAAE,QAAA,CAAS,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,CAAE,QAAA,CAAS,SAAS,CAAA,GAAI,MAAA;AAClE,UAAA,IAAI,CAAA,EAAG,CAAA,CAAE,OAAA,GAAU,EAAE,EAAA,EAAI,CAAA,CAAE,EAAA,EAAI,WAAA,EAAc,CAAA,CAAE,QAAA,EAAkB,WAAA,EAAa,YAAA,EAAc,EAAE,gBAAA,EAAiB;AAAA,QACjH;AAAA,MACF;AACA,MAAA,OAAO,UAAA;AAAA,IACT,CAAA;AAAA,IAEA,MAAM,kBAAkB,KAAA,EAAO;AAC7B,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,UAAA,EAAW;AAC3B,MAAA,MAAMC,IAAAA,GAAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,MAAA,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO;AAAA,QAC3C,aAAA,EAAeA,IAAAA;AAAA,QACf,mBAAA,EAAqB,MAAM,iBAAA,IAAqB;AAAA,OACjD,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,MAAM,cAAc,CAAA;AAChC,MAAA,IAAI,MAAM,iBAAA,EAAmB;AAE3B,QAAA,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,EAAE,aAAA,EAAeA,IAAAA,EAAK,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,MAAM,iBAAiB,CAAA;AAAA,MACvG;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,oBAAoB,cAAA,EAAgB;AACxC,MAAA,MAAM,EAAE,GAAA,EAAI,GAAI,UAAA,EAAW;AAC3B,MAAA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAK,GAAI,MAAM,IAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,qBAAqB,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,cAAc,EAAE,MAAA,EAAO;AAC3H,MAAA,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,OAAO,EAAE,aAAA,EAAe,IAAA,EAAM,mBAAA,EAAqB,IAAA,EAAM,CAAA,CAAE,EAAA,CAAG,MAAM,cAAc,CAAA;AACxH,MAAA,IAAI,MAAM,mBAAA,EAAqB;AAC7B,QAAA,MAAM,GAAA,CAAI,IAAA,CAAK,qBAAqB,CAAA,CAAE,MAAA,CAAO,EAAE,aAAA,EAAe,IAAA,EAAM,CAAA,CAAE,EAAA,CAAG,IAAA,EAAM,KAAK,mBAAmB,CAAA;AAAA,MACzG;AAAA,IACF;AAAA,GACF;AAEA,EAAA,OAAO,QAAA;AACT;ACjwBO,SAAS,qBAAqB,QAAA,EAA6D;AAChG,EAAA,OAAOC,aAAAA,CAA8B,CAAC,GAAA,EAAK,GAAA,MAAS;AAAA,IAClD,UAAU,EAAC;AAAA,IACX,aAAA,EAAe,CAAA;AAAA,IACf,eAAA,EAAiB,KAAA;AAAA,IACjB,cAAc,EAAC;AAAA,IAEf,WAAW,EAAC;AAAA,IACZ,cAAA,EAAgB,CAAA;AAAA,IAChB,gBAAA,EAAkB,KAAA;AAAA,IAElB,cAAc,EAAC;AAAA,IACf,mBAAA,EAAqB,KAAA;AAAA,IAErB,cAAc,EAAC;AAAA,IACf,mBAAA,EAAqB,KAAA;AAAA,IAErB,gBAAgB,EAAC;AAAA,IACjB,oBAAoB,EAAC;AAAA,IAErB,OAAA,EAAS,IAAA;AAAA,IACT,cAAA,EAAgB,KAAA;AAAA,IAEhB,SAAA,EAAW,IAAA;AAAA,IACX,gBAAA,EAAkB,KAAA;AAAA,IAClB,cAAA,EAAgB,IAAA;AAAA,IAEhB,kBAAkB,EAAC;AAAA,IACnB,YAAA,EAAc,KAAA;AAAA,IAEd,MAAM,aAAa,SAAA,EAAW;AAC5B,MAAA,OAAO,KAAA,CAAM,eAAe,YAAY;AACtC,QAAA,GAAA,CAAI,EAAE,cAAA,EAAgB,IAAA,EAAM,CAAA;AAC5B,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,UAAA,CAAW,SAAS,CAAA;AACnD,QAAA,GAAA,CAAI,EAAE,OAAA,EAAS,cAAA,EAAgB,KAAA,EAAO,CAAA;AAAA,MACxC,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,cAAc,KAAA,EAAO;AACzB,MAAA,OAAO,MAAM,eAAA,GAAkB,IAAA,CAAK,SAAA,CAAU,KAAK,GAAG,YAAY;AAChE,QAAA,GAAA,CAAI,EAAE,eAAA,EAAiB,IAAA,EAAM,YAAA,EAAc,OAAO,CAAA;AAClD,QAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,WAAA,CAAY,KAAK,CAAA;AAC/C,QAAA,GAAA,CAAI,EAAE,UAAU,MAAA,CAAO,IAAA,EAAM,eAAe,MAAA,CAAO,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,CAAA;AAAA,MACpF,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,iBAAA,GAAoB;AACxB,MAAA,OAAO,KAAA,CAAM,oBAAoB,YAAY;AAC3C,QAAA,GAAA,CAAI,EAAE,mBAAA,EAAqB,IAAA,EAAM,CAAA;AACjC,QAAA,MAAM,YAAA,GAAe,MAAM,QAAA,CAAS,eAAA,EAAgB;AACpD,QAAA,GAAA,CAAI,EAAE,YAAA,EAAc,mBAAA,EAAqB,KAAA,EAAO,CAAA;AAAA,MAClD,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,kBAAkB,aAAA,EAAe;AACrC,MAAA,OAAO,KAAA,CAAM,mBAAA,IAAuB,aAAA,IAAiB,EAAA,CAAA,EAAK,YAAY;AACpE,QAAA,GAAA,CAAI,EAAE,mBAAA,EAAqB,IAAA,EAAM,CAAA;AACjC,QAAA,MAAM,YAAA,GAAe,MAAM,QAAA,CAAS,eAAA,CAAgB,aAAa,CAAA;AACjE,QAAA,GAAA,CAAI,EAAE,YAAA,EAAc,mBAAA,EAAqB,KAAA,EAAO,CAAA;AAAA,MAClD,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,mBAAA,GAAsB;AAC1B,MAAA,OAAO,KAAA,CAAM,sBAAsB,YAAY;AAC7C,QAAA,MAAM,CAAC,cAAA,EAAgB,kBAAkB,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,UAC7D,SAAS,iBAAA,EAAkB;AAAA,UAC3B,SAAS,qBAAA;AAAsB,SAChC,CAAA;AACD,QAAA,GAAA,CAAI,EAAE,cAAA,EAAgB,kBAAA,EAAoB,CAAA;AAAA,MAC5C,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,eAAe,KAAA,EAAO;AAC1B,MAAA,OAAO,MAAM,gBAAA,GAAmB,IAAA,CAAK,SAAA,CAAU,KAAK,GAAG,YAAY;AACjE,QAAA,GAAA,CAAI,EAAE,gBAAA,EAAkB,IAAA,EAAM,cAAA,EAAgB,OAAO,CAAA;AACrD,QAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,YAAA,CAAa,KAAK,CAAA;AACnD,QAAA,GAAA,CAAI,EAAE,SAAA,EAAW,gBAAA,EAAkB,KAAA,EAAO,CAAA;AAAA,MAC5C,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,sBAAsB,SAAA,EAAW;AACrC,MAAA,OAAO,KAAA,CAAM,aAAa,YAAY;AACpC,QAAA,GAAA,CAAI,EAAE,YAAA,EAAc,IAAA,EAAM,CAAA;AAC1B,QAAA,MAAM,gBAAA,GAAmB,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAS,CAAA;AACrE,QAAA,GAAA,CAAI,EAAE,gBAAA,EAAkB,YAAA,EAAc,KAAA,EAAO,CAAA;AAAA,MAC/C,CAAC,CAAA;AAAA,IACH,CAAA;AAAA,IAEA,MAAM,cAAc,KAAA,EAAO;AACzB,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,aAAA,CAAc,KAAK,CAAA;AAClD,QAAA,MAAM,KAAA,GAAQ,KAAI,CAAE,YAAA;AACpB,QAAA,MAAM,MAAA,GAAS,MAAM,QAAA,CAAS,WAAA,CAAY,KAAK,CAAA;AAC/C,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,UAAA,EAAW;AAC1C,QAAA,GAAA,CAAI,EAAE,UAAU,MAAA,CAAO,IAAA,EAAM,eAAe,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA;AACnE,QAAAN,KAAAA,CAAM,QAAQ,iBAAiB,CAAA;AAC/B,QAAA,OAAO,OAAA;AAAA,MACT,SAAS,GAAA,EAAU;AACjB,QAAAA,MAAM,KAAA,CAAM,0BAAA,EAA4B,EAAE,WAAA,EAAa,GAAA,EAAK,SAAS,CAAA;AACrE,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,YAAY,KAAA,EAAO;AACvB,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,CAAS,YAAY,KAAK,CAAA;AAChC,QAAA,MAAM,KAAA,GAAQ,KAAI,CAAE,YAAA;AACpB,QAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAA,CAAS,YAAY,KAAK,CAAA,EAAG,QAAA,CAAS,UAAA,EAAY,CAAC,CAAA;AAChG,QAAA,GAAA,CAAI,EAAE,UAAU,MAAA,CAAO,IAAA,EAAM,eAAe,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA;AACnE,QAAAA,KAAAA,CAAM,QAAQ,kBAAkB,CAAA;AAAA,MAClC,SAAS,GAAA,EAAU;AACjB,QAAAA,MAAM,KAAA,CAAM,0BAAA,EAA4B,EAAE,WAAA,EAAa,GAAA,EAAK,SAAS,CAAA;AACrE,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,eAAe,KAAA,EAAO;AAC1B,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,CAAS,eAAe,KAAK,CAAA;AACnC,QAAA,MAAM,KAAA,GAAQ,KAAI,CAAE,cAAA;AACpB,QAAA,MAAM,CAAC,YAAA,EAAc,OAAA,EAAS,SAAS,CAAA,GAAI,MAAM,QAAQ,GAAA,CAAI;AAAA,UAC3D,SAAS,eAAA,EAAgB;AAAA,UACzB,SAAS,UAAA,EAAW;AAAA,UACpB,KAAA,GAAQ,SAAS,YAAA,CAAa,KAAK,IAAI,OAAA,CAAQ,OAAA,CAAQ,GAAA,EAAI,CAAE,SAAS;AAAA,SACvE,CAAA;AACD,QAAA,GAAA,CAAI,EAAE,YAAA,EAAc,OAAA,EAAS,SAAA,EAAW,CAAA;AACxC,QAAAA,KAAAA,CAAM,QAAQ,mBAAmB,CAAA;AAAA,MACnC,SAAS,GAAA,EAAU;AACjB,QAAAA,MAAM,KAAA,CAAM,2BAAA,EAA6B,EAAE,WAAA,EAAa,GAAA,EAAK,SAAS,CAAA;AACtE,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,cAAc,SAAA,EAAW;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,QAAA,CAAS,cAAc,SAAS,CAAA;AACtC,QAAA,MAAM,KAAA,GAAQ,KAAI,CAAE,YAAA;AACpB,QAAA,MAAM,CAAC,MAAA,EAAQ,OAAO,CAAA,GAAI,MAAM,OAAA,CAAQ,GAAA,CAAI,CAAC,QAAA,CAAS,YAAY,KAAK,CAAA,EAAG,QAAA,CAAS,UAAA,EAAY,CAAC,CAAA;AAChG,QAAA,GAAA,CAAI,EAAE,UAAU,MAAA,CAAO,IAAA,EAAM,eAAe,MAAA,CAAO,KAAA,EAAO,SAAS,CAAA;AACnE,QAAAA,KAAAA,CAAM,QAAQ,mBAAmB,CAAA;AAAA,MACnC,SAAS,GAAA,EAAU;AACjB,QAAAA,MAAM,KAAA,CAAM,0BAAA,EAA4B,EAAE,WAAA,EAAa,GAAA,EAAK,SAAS,CAAA;AACrE,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,gBAAgB,KAAA,EAAO;AAC3B,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,eAAA,CAAgB,KAAK,CAAA;AACpD,QAAA,MAAM,YAAA,GAAe,MAAM,QAAA,CAAS,eAAA,EAAgB;AACpD,QAAA,GAAA,CAAI,EAAE,cAAc,CAAA;AACpB,QAAAA,KAAAA,CAAM,QAAQ,qBAAqB,CAAA;AACnC,QAAA,OAAO,OAAA;AAAA,MACT,SAAS,GAAA,EAAU;AACjB,QAAAA,MAAM,KAAA,CAAM,wBAAA,EAA0B,EAAE,WAAA,EAAa,GAAA,EAAK,SAAS,CAAA;AACnE,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,iBAAiB,KAAA,EAAO;AAC5B,MAAA,IAAI;AACF,QAAA,MAAM,OAAA,GAAU,MAAM,QAAA,CAAS,gBAAA,CAAiB,KAAK,CAAA;AACrD,QAAA,MAAM,YAAA,GAAe,MAAM,QAAA,CAAS,eAAA,EAAgB;AACpD,QAAA,GAAA,CAAI,EAAE,cAAc,CAAA;AACpB,QAAAA,KAAAA,CAAM,QAAQ,qBAAqB,CAAA;AACnC,QAAA,OAAO,OAAA;AAAA,MACT,SAAS,GAAA,EAAU;AACjB,QAAAA,MAAM,KAAA,CAAM,yBAAA,EAA2B,EAAE,WAAA,EAAa,GAAA,EAAK,SAAS,CAAA;AACpE,QAAA,MAAM,GAAA;AAAA,MACR;AAAA,IACF;AAAA,GACF,CAAE,CAAA;AACJ;;;ACzOA,IAAM,uBAAA,GAAqC;AAAA,EACzC,IAAA,EAAM,cAAA;AAAA,EACN,UAAA,EAAY,eAAA;AAAA,EACZ,IAAA,EAAM,YAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,MAAA;AAAA,EACb,MAAA,EAAQ;AAAA,IACN,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAC9E,EAAE,KAAK,iBAAA,EAAmB,KAAA,EAAO,oBAAoB,IAAA,EAAM,QAAA,EAAU,SAAS,CAAC,MAAA,EAAQ,eAAe,YAAA,EAAc,KAAA,EAAO,iBAAiB,OAAA,EAAS,SAAS,GAAG,WAAA,EAAa,IAAA,EAAM,UAAU,IAAA,EAAK;AAAA,IACnM,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,MAAM,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,IAAA;AAAK,GAC7F;AAAA,EACA,IAAA,EAAM,EAAE,KAAA,EAAO,sBAAA,EAAwB,cAAc,IAAA;AACvD,CAAA;AAMA,IAAM,mBAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,gBAAA;AAAA,EACN,UAAA,EAAY,iBAAA;AAAA,EACZ,IAAA,EAAM,YAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,MAAA;AAAA,EACb,MAAA,EAAQ;AAAA,IACN,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA;AAAA;AAAA,IAG9E,EAAE,GAAA,EAAK,qBAAA,EAAuB,KAAA,EAAO,MAAA,EAAQ,MAAM,UAAA,EAAY,QAAA,EAAU,EAAE,KAAA,EAAO,wBAAwB,UAAA,EAAY,MAAA,IAAU,WAAA,EAAa,IAAA,EAAM,UAAU,IAAA,EAAK;AAAA,IAClK,EAAE,KAAK,eAAA,EAAiB,KAAA,EAAO,cAAc,IAAA,EAAM,QAAA,EAAU,aAAa,IAAA,EAAK;AAAA,IAC/E,EAAE,KAAK,eAAA,EAAiB,KAAA,EAAO,cAAc,IAAA,EAAM,QAAA,EAAU,aAAa,IAAA,EAAK;AAAA,IAC/E,EAAE,KAAK,iBAAA,EAAmB,KAAA,EAAO,oBAAoB,IAAA,EAAM,QAAA,EAAU,cAAc,CAAA,EAAE;AAAA,IACrF,EAAE,GAAA,EAAK,iBAAA,EAAmB,KAAA,EAAO,kBAAA,EAAoB,MAAM,QAAA,EAAU,YAAA,EAAc,CAAA,EAAG,WAAA,EAAa,IAAA,EAAK;AAAA,IACxG,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,MAAM,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,IAAA;AAAK,GAC7F;AAAA,EACA,IAAA,EAAM,EAAE,KAAA,EAAO,iBAAA,EAAmB,cAAc,IAAA;AAClD,CAAA;AAMA,IAAM,qBAAA,GAAmC;AAAA,EACvC,IAAA,EAAM,gBAAA;AAAA,EACN,UAAA,EAAY,mBAAA;AAAA,EACZ,IAAA,EAAM,UAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,MAAA;AAAA,EACb,MAAA,EAAQ;AAAA,IACN,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAC9E,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAC9E,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,MAAA,EAAQ,MAAM,QAAA,EAAU,OAAA,EAAS,CAAC,OAAA,EAAS,MAAM,CAAA,EAAG,WAAA,EAAa,MAAM,QAAA,EAAU,IAAA,EAAM,cAAc,MAAA,EAAO;AAAA,IACtI,EAAE,KAAK,UAAA,EAAY,KAAA,EAAO,UAAU,IAAA,EAAM,MAAA,EAAQ,aAAa,KAAA,EAAM;AAAA,IACrE,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,MAAM,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,IAAA;AAAK,GAC7F;AAAA,EACA,IAAA,EAAM,EAAE,KAAA,EAAO,mBAAA,EAAqB,cAAc,IAAA;AACpD,CAAA;AAMA,IAAM,gBAAA,GAA8B;AAAA,EAClC,IAAA,EAAM,aAAA;AAAA,EACN,UAAA,EAAY,cAAA;AAAA,EACZ,IAAA,EAAM,QAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,MAAA;AAAA,EACb,MAAA,EAAQ;AAAA,IACN,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAC9E,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAC9E,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,MAAM,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,IAAA;AAAK,GAC7F;AAAA,EACA,IAAA,EAAM,EAAE,KAAA,EAAO,cAAA,EAAgB,cAAc,IAAA;AAC/C,CAAA;AAMA,IAAM,iBAAA,GAA+B;AAAA,EACnC,IAAA,EAAM,cAAA;AAAA,EACN,UAAA,EAAY,eAAA;AAAA,EACZ,IAAA,EAAM,UAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,MAAA;AAAA,EACb,MAAA,EAAQ;AAAA,IACN,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAC9E,EAAE,GAAA,EAAK,aAAA,EAAe,OAAO,MAAA,EAAQ,IAAA,EAAM,UAAU,OAAA,EAAS;AAAA,MAC5D,EAAE,KAAA,EAAO,cAAA,EAAgB,KAAA,EAAO,cAAA,EAAe;AAAA,MAC/C,EAAE,KAAA,EAAO,eAAA,EAAiB,KAAA,EAAO,eAAA,EAAgB;AAAA,MACjD,EAAE,KAAA,EAAO,aAAA,EAAe,KAAA,EAAO,aAAA,EAAc;AAAA,MAC7C,EAAE,KAAA,EAAO,gBAAA,EAAkB,KAAA,EAAO,gBAAA;AAAiB,KACrD,EAAG,WAAA,EAAa,IAAA,EAAM,QAAA,EAAU,IAAA,EAAK;AAAA,IACrC,EAAE,KAAK,UAAA,EAAY,KAAA,EAAO,QAAQ,IAAA,EAAM,MAAA,EAAQ,aAAa,IAAA,EAAK;AAAA,IAClE,EAAE,GAAA,EAAK,eAAA,EAAiB,KAAA,EAAO,gBAAA,EAAkB,MAAM,MAAA,EAAO;AAAA,IAC9D,EAAE,GAAA,EAAK,cAAA,EAAgB,KAAA,EAAO,QAAA,EAAU,MAAM,MAAA,EAAO;AAAA,IACrD,EAAE,KAAK,gBAAA,EAAkB,KAAA,EAAO,mBAAmB,IAAA,EAAM,UAAA,EAAY,cAAc,CAAA,EAAE;AAAA,IACrF,EAAE,GAAA,EAAK,aAAA,EAAe,KAAA,EAAO,cAAA,EAAgB,MAAM,UAAA,EAAW;AAAA,IAC9D,EAAE,GAAA,EAAK,YAAA,EAAc,KAAA,EAAO,aAAA,EAAe,MAAM,QAAA,EAAS;AAAA,IAC1D,EAAE,GAAA,EAAK,QAAA,EAAU,KAAA,EAAO,SAAA,EAAW,MAAM,QAAA,EAAS;AAAA,IAClD,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,MAAM,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,IAAA;AAAK,GAC7F;AAAA,EACA,IAAA,EAAM,EAAE,KAAA,EAAO,eAAA,EAAiB,cAAc,IAAA;AAChD,CAAA;AAMA,IAAM,eAAA,GAA6B;AAAA,EACjC,IAAA,EAAM,YAAA;AAAA,EACN,UAAA,EAAY,aAAA;AAAA,EACZ,IAAA,EAAM,YAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,MAAA;AAAA,EACb,MAAA,EAAQ;AAAA,IACN,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAC9E,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,MAAM,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,IAAA;AAAK,GAC7F;AAAA,EACA,IAAA,EAAM,EAAE,KAAA,EAAO,aAAA,EAAe,cAAc,IAAA;AAC9C,CAAA;AAMA,IAAM,oBAAA,GAAkC;AAAA,EACtC,IAAA,EAAM,iBAAA;AAAA,EACN,UAAA,EAAY,kBAAA;AAAA,EACZ,IAAA,EAAM,YAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,UAAA;AAAA,EACb,cAAA,EAAgB,MAAA;AAAA,EAChB,MAAA,EAAQ;AAAA,IACN,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAC9E,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,UAAA,EAAY,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,CAAA,EAAE;AAAA,IACzG,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,MAAA,EAAQ,MAAM,QAAA,EAAU,OAAA,EAAS,CAAC,YAAA,EAAc,OAAO,CAAA,EAAG,QAAA,EAAU,MAAM,WAAA,EAAa,IAAA,EAAM,cAAc,YAAA,EAAa;AAAA,IACnJ,EAAE,GAAA,EAAK,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAClF,EAAE,GAAA,EAAK,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,MAAM,UAAA,EAAW;AAAA,IAC7D,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,MAAM,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,IAAA;AAAK,GAC7F;AAAA,EACA,IAAA,EAAM,EAAE,KAAA,EAAO,kBAAA,EAAoB,cAAc,IAAA;AACnD,CAAA;AAMA,IAAM,gBAAA,GAA8B;AAAA,EAClC,IAAA,EAAM,aAAA;AAAA,EACN,UAAA,EAAY,cAAA;AAAA,EACZ,IAAA,EAAM,KAAA;AAAA,EACN,YAAA,EAAc,aAAA;AAAA,EACd,WAAA,EAAa,WAAA;AAAA,EACb,cAAA,EAAgB,MAAA;AAAA,EAChB,MAAA,EAAQ;AAAA,IACN,EAAE,GAAA,EAAK,aAAA,EAAe,KAAA,EAAO,aAAA,EAAe,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAC5F,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,QAAA,EAAU,OAAA,EAAS,CAAC,MAAA,EAAQ,MAAM,CAAA,EAAG,QAAA,EAAU,MAAM,WAAA,EAAa,IAAA,EAAM,cAAc,MAAA,EAAO;AAAA,IACjI,EAAE,KAAK,WAAA,EAAa,KAAA,EAAO,cAAc,IAAA,EAAM,MAAA,EAAQ,aAAa,IAAA,EAAK;AAAA,IACzE,EAAE,KAAK,YAAA,EAAc,KAAA,EAAO,eAAe,IAAA,EAAM,MAAA,EAAQ,aAAa,IAAA,EAAK;AAAA,IAC3E,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,MAAM,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,IAAA;AAAK,GAC7F;AAAA,EACA,IAAA,EAAM,EAAE,KAAA,EAAO,cAAA,EAAgB,cAAc,IAAA;AAC/C,CAAA;AAMA,IAAM,oBAAA,GAAkC;AAAA,EACtC,IAAA,EAAM,iBAAA;AAAA,EACN,UAAA,EAAY,kBAAA;AAAA,EACZ,IAAA,EAAM,SAAA;AAAA,EACN,YAAA,EAAc,MAAA;AAAA,EACd,WAAA,EAAa,WAAA;AAAA,EACb,cAAA,EAAgB,MAAA;AAAA,EAChB,MAAA,EAAQ;AAAA,IACN,EAAE,GAAA,EAAK,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,MAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAC9E,EAAE,GAAA,EAAK,eAAA,EAAiB,KAAA,EAAO,QAAQ,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,CAAC,YAAY,UAAU,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,IAC5H,EAAE,GAAA,EAAK,WAAA,EAAa,KAAA,EAAO,cAAc,IAAA,EAAM,QAAA,EAAU,OAAA,EAAS,CAAC,cAAc,OAAO,CAAA,EAAG,QAAA,EAAU,IAAA,EAAM,aAAa,IAAA,EAAK;AAAA,IAC7H,EAAE,GAAA,EAAK,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,MAAM,QAAA,EAAU,QAAA,EAAU,IAAA,EAAM,WAAA,EAAa,IAAA,EAAK;AAAA,IAClF,EAAE,KAAK,sBAAA,EAAwB,KAAA,EAAO,0BAA0B,IAAA,EAAM,SAAA,EAAW,cAAc,KAAA,EAAM;AAAA,IACrG,EAAE,GAAA,EAAK,UAAA,EAAY,KAAA,EAAO,QAAA,EAAU,MAAM,SAAA,EAAW,WAAA,EAAa,IAAA,EAAM,YAAA,EAAc,IAAA;AAAK,GAC7F;AAAA,EACA,IAAA,EAAM,EAAE,KAAA,EAAO,kBAAA,EAAoB,cAAc,IAAA;AACnD,CAAA;AAMO,IAAM,mBAAA,GAA2C;AAAA;AAAA,EAEtD;AAAA,IACE,EAAA,EAAI,iBAAA;AAAA,IACJ,MAAA,EAAQ,mBAAA;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,4DAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA;AAAA,IACE,EAAA,EAAI,mBAAA;AAAA,IACJ,MAAA,EAAQ,qBAAA;AAAA,IACR,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,8DAAA;AAAA,IACb,OAAA,EAAS,MAAA;AAAA,IACT,QAAA,EAAU;AAAA,MACR,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,GAAA,EAAK,MAAM,SAAA,EAAW,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK;AAAA,MAC7E,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK;AAAA,MAC1G,EAAE,EAAA,EAAI,YAAA,EAAc,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,IAAA,EAAK;AAAA,MAC5G,EAAE,EAAA,EAAI,YAAA,EAAc,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,UAAA,EAAY,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,IAAA,EAAK;AAAA,MAC5G,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,GAAA,EAAK,MAAM,eAAA,EAAiB,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK;AAAA,MACnF,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,kBAAA,EAAoB,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK;AAAA,MAC5G,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,GAAA,EAAK,MAAM,mBAAA,EAAqB,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK;AAAA,MACvF,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,sBAAA,EAAwB,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK;AAAA,MACjH,EAAE,EAAA,EAAI,YAAA,EAAc,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,eAAA,EAAiB,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,IAAA,EAAK;AAAA,MACjH,EAAE,EAAA,EAAI,YAAA,EAAc,IAAA,EAAM,QAAA,EAAU,IAAA,EAAM,aAAA,EAAe,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,IAAA,EAAK;AAAA,MAC/G,EAAE,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,GAAA,EAAK,MAAM,UAAA,EAAY,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK;AAAA,MAC9E,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK;AAAA,MAChG,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,WAAA,EAAa,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,IAAA,EAAK;AAAA,MACrG,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,KAAA,EAAO,IAAA,EAAM,SAAA,EAAW,QAAA,EAAU,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,QAAA,EAAU,IAAA;AAAK;AACrG,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,cAAA;AAAA,IACJ,MAAA,EAAQ,gBAAA;AAAA,IACR,IAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAa,4DAAA;AAAA,IACb,OAAA,EAAS,OAAA;AAAA,IACT,QAAA,EAAU;AAAA,MACR,EAAE,IAAI,QAAA,EAAU,IAAA,EAAM,OAAO,IAAA,EAAM,SAAA,EAAW,UAAU,IAAA;AAAK;AAC/D,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,eAAA;AAAA,IACJ,MAAA,EAAQ,iBAAA;AAAA,IACR,IAAA,EAAM,UAAA;AAAA,IACN,WAAA,EAAa,kEAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA;AAAA,IACE,EAAA,EAAI,kBAAA;AAAA,IACJ,MAAA,EAAQ,oBAAA;AAAA,IACR,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,0DAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA;AAAA,IACE,EAAA,EAAI,cAAA;AAAA,IACJ,MAAA,EAAQ,gBAAA;AAAA,IACR,IAAA,EAAM,KAAA;AAAA,IACN,WAAA,EAAa,wCAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA,EACA;AAAA,IACE,EAAA,EAAI,kBAAA;AAAA,IACJ,MAAA,EAAQ,oBAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,WAAA,EAAa,0CAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AAAA;AAAA,EAEA;AAAA,IACE,EAAA,EAAI,sBAAA;AAAA,IACJ,MAAA,EAAQ,uBAAA;AAAA,IACR,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,8CAAA;AAAA,IACb,OAAA,EAAS,OAAA;AAAA,IACT,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU;AAAA,MACR,EAAE,IAAI,UAAA,EAAY,IAAA,EAAM,QAAQ,eAAA,EAAiB,MAAA,EAAQ,UAAU,IAAA,EAAK;AAAA,MACxE,EAAE,IAAI,SAAA,EAAW,IAAA,EAAM,OAAO,eAAA,EAAiB,KAAA,EAAO,UAAU,IAAA,EAAK;AAAA,MACrE,EAAE,IAAI,YAAA,EAAc,IAAA,EAAM,eAAe,eAAA,EAAiB,aAAA,EAAe,UAAU,IAAA,EAAK;AAAA,MACxF,EAAE,IAAI,WAAA,EAAa,IAAA,EAAM,cAAc,eAAA,EAAiB,YAAA,EAAc,UAAU,IAAA,EAAK;AAAA,MACrF,EAAE,IAAI,cAAA,EAAgB,IAAA,EAAM,iBAAiB,eAAA,EAAiB,eAAA,EAAiB,UAAU,IAAA,EAAK;AAAA,MAC9F,EAAE,IAAI,WAAA,EAAa,IAAA,EAAM,SAAS,eAAA,EAAiB,OAAA,EAAS,UAAU,IAAA;AAAK;AAC7E,GACF;AAAA,EACA;AAAA,IACE,EAAA,EAAI,aAAA;AAAA,IACJ,MAAA,EAAQ,eAAA;AAAA,IACR,IAAA,EAAM,YAAA;AAAA,IACN,WAAA,EAAa,8BAAA;AAAA,IACb,OAAA,EAAS,OAAA;AAAA,IACT,QAAA,EAAU,IAAA;AAAA,IACV,QAAA,EAAU;AAAA,MACR,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,UAAU,IAAA,EAAK;AAAA,MAC9C,EAAE,EAAA,EAAI,eAAA,EAAiB,IAAA,EAAM,YAAA,EAAc,UAAU,IAAA,EAAK;AAAA,MAC1D,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,kBAAA,EAAoB,UAAU,IAAA,EAAK;AAAA,MAC1D,EAAE,EAAA,EAAI,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO,UAAU,IAAA,EAAK;AAAA,MAC5C,EAAE,EAAA,EAAI,cAAA,EAAgB,IAAA,EAAM,WAAA,EAAa,UAAU,IAAA,EAAK;AAAA,MACxD,EAAE,EAAA,EAAI,WAAA,EAAa,IAAA,EAAM,aAAA,EAAe,UAAU,IAAA,EAAK;AAAA,MACvD,EAAE,EAAA,EAAI,aAAA,EAAe,IAAA,EAAM,UAAA,EAAY,UAAU,IAAA,EAAK;AAAA,MACtD,EAAE,EAAA,EAAI,QAAA,EAAU,IAAA,EAAM,KAAA,EAAO,UAAU,IAAA,EAAK;AAAA,MAC5C,EAAE,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,MAAA,EAAQ,UAAU,IAAA,EAAK;AAAA,MAC9C,EAAE,EAAA,EAAI,UAAA,EAAY,IAAA,EAAM,OAAA,EAAS,UAAU,IAAA;AAAK;AAClD;AAEJ,CAAA;;;ACjTO,IAAM,EAAA,GAA6B;AAAA,EACxC,6BAAA,EAA+B,mCAAA;AAAA,EAC/B,gCAAA,EAAkC,sBAAA;AAAA,EAClC,yBAAA,EAA2B,SAAA;AAAA,EAC3B,0BAAA,EAA4B,UAAA;AAAA,EAC5B,0BAAA,EAA4B,oCAAA;AAAA,EAC5B,uBAAA,EAAyB,OAAA;AAAA,EACzB,8BAAA,EAAgC,0BAAA;AAAA,EAChC,oCAAA,EAAsC,kFAAA;AAAA,EACtC,kCAAA,EAAoC,WAAA;AAAA,EACpC,8BAAA,EAAgC,MAAA;AAAA,EAChC,+BAAA,EAAiC,OAAA;AAAA,EACjC,sCAAA,EAAwC,eAAA;AAAA,EACxC,0CAAA,EAA4C,oBAAA;AAAA,EAC5C,iCAAA,EAAmC,YAAA;AAAA,EACnC,wCAAA,EAA0C,iBAAA;AAAA,EAC1C,sCAAA,EAAwC,eAAA;AAAA,EACxC,+BAAA,EAAiC,OAAA;AAAA,EACjC,qCAAA,EAAuC,gBAAA;AAAA,EACvC,wCAAA,EAA0C,sBAAA;AAAA,EAC1C,+BAAA,EAAiC,OAAA;AAAA,EACjC,oCAAA,EAAsC,qBAAA;AAAA,EACtC,sCAAA,EAAwC,eAAA;AAAA,EACxC,2CAAA,EAA6C,oBAAA;AAAA,EAC7C,+CAAA,EAAiD,yBAAA;AAAA,EACjD,gCAAA,EAAkC,QAAA;AAAA,EAClC,wCAAA,EAA0C,yFAAA;AAAA,EAC1C,0CAAA,EAA4C,wBAAA;AAAA,EAC5C,qCAAA,EAAuC,uBAAA;AAAA,EACvC,qCAAA,EAAuC,cAAA;AAAA,EACvC,sCAAA,EAAwC,eAAA;AAAA,EACxC,gCAAA,EAAkC,QAAA;AAAA,EAClC,iCAAA,EAAmC,YAAA;AAAA,EACnC,wCAAA,EAA0C,iBAAA;AAAA,EAC1C,qCAAA,EAAuC,cAAA;AAAA,EACvC,kCAAA,EAAoC,UAAA;AAAA,EACpC,wCAAA,EAA0C,iBAAA;AAAA,EAC1C,kCAAA,EAAoC,qCAAA;AAAA,EACpC,kCAAA,EAAoC,aAAA;AAAA,EACpC,gCAAA,EAAkC,kBAAA;AAAA,EAClC,mCAAA,EAAqC,kBAAA;AAAA,EACrC,sCAAA,EAAwC,qBAAA;AAAA,EACxC,iCAAA,EAAmC,+BAAA;AAAA,EACnC,8BAAA,EAAgC,6IAAA;AAAA,EAChC,iCAAA,EAAmC,gBAAA;AAAA,EACnC,8BAAA,EAAgC,eAAA;AAAA,EAChC,2BAAA,EAA6B,SAAA;AAAA,EAC7B,+BAAA,EAAiC,2BAAA;AAAA,EACjC,wBAAA,EAA0B,MAAA;AAAA,EAC1B,2BAAA,EAA6B,SAAA;AAAA,EAC7B,4BAAA,EAA8B,UAAA;AAAA,EAC9B,uBAAA,EAAyB,MAAA;AAAA,EACzB,wBAAA,EAA0B,cAAA;AAAA,EAC1B,6BAAA,EAA+B,YAAA;AAAA,EAC/B,gCAAA,EAAkC,cAAA;AAAA,EAClC,4BAAA,EAA8B,oBAAA;AAAA,EAC9B,yBAAA,EAA2B,OAAA;AAAA,EAC3B,+BAAA,EAAiC,cAAA;AAAA,EACjC,uBAAA,EAAyB,KAAA;AAAA,EACzB,6BAAA,EAA+B,gCAAA;AAAA,EAC/B,kCAAA,EAAoC,iBAAA;AAAA,EACpC,8BAAA,EAAgC,iBAAA;AAAA,EAChC,gCAAA,EAAkC,OAAA;AAAA,EAClC,mCAAA,EAAqC,UAAA;AAAA,EACrC,qCAAA,EAAuC,YAAA;AAAA,EACvC,+BAAA,EAAiC,MAAA;AAAA,EACjC,kCAAA,EAAoC,SAAA;AAAA,EACpC,4BAAA,EAA8B,mBAAA;AAAA,EAC9B,gCAAA,EAAkC,mCAAA;AAAA,EAClC,yBAAA,EAA2B,OAAA;AAAA,EAC3B,6BAAA,EAA+B,OAAA;AAAA,EAC/B,0BAAA,EAA4B,UAAA;AAAA,EAC5B,uBAAA,EAAyB,KAAA;AAAA,EACzB,mCAAA,EAAqC,kBAAA;AAAA,EACrC,6BAAA,EAA+B,YAAA;AAAA,EAC/B,qCAAA,EAAuC,qCAAA;AAAA,EACvC,2BAAA,EAA6B,gCAAA;AAAA,EAC7B,4BAAA,EAA8B,UAAA;AAAA,EAC9B,6BAAA,EAA+B,WAAA;AAAA,EAC/B,yBAAA,EAA2B,OAAA;AAAA,EAC3B,6BAAA,EAA+B,aAAA;AAAA,EAC/B,oCAAA,EAAsC,qBAAA;AAAA,EACtC,+BAAA,EAAiC,UAAA;AAAA,EACjC,qCAAA,EAAuC,iBAAA;AAAA,EACvC,uCAAA,EAAyC,qBAAA;AAAA,EACzC,8BAAA,EAAgC,QAAA;AAAA,EAChC,6BAAA,EAA+B,OAAA;AAAA,EAC/B,gCAAA,EAAkC,sBAAA;AAAA,EAClC,4BAAA,EAA8B,MAAA;AAAA,EAC9B,mCAAA,EAAqC,aAAA;AAAA,EACrC,yCAAA,EAA2C,sBAAA;AAAA,EAC3C,4BAAA,EAA8B,MAAA;AAAA,EAC9B,+BAAA,EAAiC,iBAAA;AAAA,EACjC,oCAAA,EAAsC,0BAAA;AAAA,EACtC,oCAAA,EAAsC,cAAA;AAAA,EACtC,oCAAA,EAAsC,cAAA;AAAA,EACtC,4BAAA,EAA8B,MAAA;AAAA,EAC9B,uCAAA,EAAyC,kBAAA;AAAA,EACzC,6BAAA,EAA+B,OAAA;AAAA,EAC/B,qCAAA,EAAuC,gBAAA;AAAA,EACvC,+BAAA,EAAiC,oBAAA;AAAA,EACjC,oCAAA,EAAsC,gBAAA;AAAA,EACtC,oCAAA,EAAsC,cAAA;AAAA,EACtC,6BAAA,EAA+B,QAAA;AAAA,EAC/B,2BAAA,EAA6B,KAAA;AAAA,EAC7B,mCAAA,EAAqC,cAAA;AAAA,EACrC,4BAAA,EAA8B,MAAA;AAAA,EAC9B,8BAAA,EAAgC,WAAA;AAAA,EAChC,kCAAA,EAAoC,mBAAA;AAAA,EACpC,kCAAA,EAAoC,gBAAA;AAAA,EACpC,0CAAA,EAA4C,gCAAA;AAAA,EAC5C,sCAAA,EAAwC,mBAAA;AAAA,EACxC,kCAAA,EAAoC,aAAA;AAAA,EACpC,uCAAA,EAAyC,aAAA;AAAA,EACzC,4BAAA,EAA8B,MAAA;AAAA,EAC9B,iCAAA,EAAmC,YAAA;AAAA,EACnC,qBAAA,EAAuB,OAAA;AAAA,EACvB,6BAAA,EAA+B,gBAAA;AAAA,EAC/B,2BAAA,EAA6B,aAAA;AAAA,EAC7B,oBAAA,EAAsB,MAAA;AAAA,EACtB,mBAAA,EAAqB,KAAA;AAAA,EACrB,wBAAA,EAA0B,UAAA;AAAA,EAC1B,wBAAA,EAA0B,kBAAA;AAAA,EAC1B,2BAAA,EAA6B,qBAAA;AAAA,EAC7B,8BAAA,EAAgC,gBAAA;AAAA,EAChC,iCAAA,EAAmC,oBAAA;AAAA,EACnC,qBAAA,EAAuB,OAAA;AAAA,EACvB,0BAAA,EAA4B,YAAA;AAAA,EAC5B,uBAAA,EAAyB,SAAA;AAAA,EACzB,gCAAA,EAAkC,gBAAA;AAAA,EAClC,mCAAA,EAAqC,6CAAA;AAAA,EACrC,kCAAA,EAAoC,wBAAA;AAAA,EACpC,kCAAA,EAAoC,eAAA;AAAA,EACpC,gCAAA,EAAkC,sBAAA;AAAA,EAClC,oCAAA,EAAsC,2DAAA;AAAA,EACtC,oCAAA,EAAsC,YAAA;AAAA,EACtC,qCAAA,EAAuC,mBAAA;AAAA,EACvC,qCAAA,EAAuC,6CAAA;AAAA,EACvC,uCAAA,EAAyC,oCAAA;AAAA,EACzC,gCAAA,EAAkC,OAAA;AAAA,EAClC,iCAAA,EAAmC,eAAA;AAAA,EACnC,qCAAA,EAAuC,2DAAA;AAAA,EACvC,qCAAA,EAAuC,kBAAA;AAAA,EACvC,kCAAA,EAAoC,SAAA;AAAA,EACpC,2BAAA,EAA6B,MAAA;AAAA,EAC7B,oCAAA,EAAsC,2FAAA;AAAA,EACtC,iCAAA,EAAmC,aAAA;AAAA,EACnC,2BAAA,EAA6B,MAAA;AAAA,EAC7B,iCAAA,EAAmC,uBAAA;AAAA,EACnC,2BAAA,EAA6B,YAAA;AAAA,EAC7B,8BAAA,EAAgC,sBAAA;AAAA,EAChC,kCAAA,EAAoC,+FAAA;AAAA,EACpC,qCAAA,EAAuC,eAAA;AAAA,EACvC,2CAAA,EAA6C,wGAAA;AAAA,EAC7C,qCAAA,EAAuC,iBAAA;AAAA,EACvC,2CAAA,EAA6C,yGAAA;AAAA,EAC7C,kCAAA,EAAoC,mBAAA;AAAA,EACpC,wCAAA,EAA0C,oGAAA;AAAA,EAC1C,2BAAA,EAA6B,aAAA;AAAA,EAC7B,+BAAA,EAAiC,kCAAA;AAAA,EACjC,8BAAA,EAAgC,gBAAA;AAAA,EAChC,kCAAA,EAAoC,oCAAA;AAAA,EACpC,yBAAA,EAA2B,oBAAA;AAAA,EAC3B,6BAAA,EAA+B,0BAAA;AAAA,EAC/B,iCAAA,EAAmC,4CAAA;AAAA,EACnC,8BAAA,EAAgC,oBAAA;AAAA,EAChC,0BAAA,EAA4B,QAAA;AAAA,EAC5B,+BAAA,EAAiC,cAAA;AAAA,EACjC,0BAAA,EAA4B,QAAA;AAAA,EAC5B,wBAAA,EAA0B,MAAA;AAAA,EAC1B,6BAAA,EAA+B,YAAA;AAAA,EAC/B,oCAAA,EAAsC,cAAA;AAAA,EACtC,wBAAA,EAA0B,MAAA;AAAA,EAC1B,+BAAA,EAAiC,yBAAA;AAAA,EACjC,0BAAA,EAA4B,gBAAA;AAAA,EAC5B,yBAAA,EAA2B,OAAA;AAAA,EAC3B,iCAAA,EAAmC,mBAAA;AAAA,EACnC,6BAAA,EAA+B,gBAAA;AAAA,EAC/B,8BAAA,EAAgC,eAAA;AAAA,EAChC,6BAAA,EAA+B,sBAAA;AAAA,EAC/B,0BAAA,EAA4B,WAAA;AAAA,EAC5B,iCAAA,EAAmC,mBAAA;AAAA,EACnC,+BAAA,EAAiC,iBAAA;AAAA,EACjC,yBAAA,EAA2B,gBAAA;AAAA,EAC3B,iCAAA,EAAmC,wBAAA;AAAA,EACnC,qCAAA,EAAuC,uDAAA;AAAA,EACvC,8BAAA,EAAgC,0BAAA;AAAA,EAChC,kCAAA,EAAoC,4DAAA;AAAA,EACpC,qCAAA,EAAuC,4BAAA;AAAA,EACvC,yCAAA,EAA2C,2DAAA;AAAA,EAC3C,iCAAA,EAAmC,eAAA;AAAA,EACnC,qCAAA,EAAuC,uBAAA;AAAA,EACvC,iCAAA,EAAmC,yBAAA;AAAA,EACnC,qCAAA,EAAuC,wDAAA;AAAA,EACvC,6BAAA,EAA+B,UAAA;AAAA,EAC/B,iCAAA,EAAmC,uCAAA;AAAA,EACnC,kCAAA,EAAoC,eAAA;AAAA,EACpC,sCAAA,EAAwC,sBAAA;AAAA,EACxC,kCAAA,EAAoC,wBAAA;AAAA,EACpC,sCAAA,EAAwC,0CAAA;AAAA,EACxC,+BAAA,EAAiC,yBAAA;AAAA,EACjC,mCAAA,EAAqC,oDAAA;AAAA,EACrC,mCAAA,EAAqC,yBAAA;AAAA,EACrC,uCAAA,EAAyC,6DAAA;AAAA,EACzC,iCAAA,EAAmC,sDAAA;AAAA,EACnC,8BAAA,EAAgC,oBAAA;AAAA,EAChC,6BAAA,EAA+B,gCAAA;AAAA,EAC/B,oCAAA,EAAsC,wBAAA;AAAA,EACtC,8BAAA,EAAgC,gDAAA;AAAA,EAChC,qCAAA,EAAuC,iBAAA;AAAA,EACvC,8BAAA,EAAgC,SAAA;AAAA,EAChC,2BAAA,EAA6B,MAAA;AAAA,EAC7B,qCAAA,EAAuC,gCAAA;AAAA,EACvC,oCAAA,EAAsC,qCAAA;AAAA,EACtC,mCAAA,EAAqC,qCAAA;AAAA,EACrC,+BAAA,EAAiC,wCAAA;AAAA,EACjC,4BAAA,EAA8B,YAAA;AAAA,EAC9B,yBAAA,EAA2B,IAAA;AAAA,EAC3B,+BAAA,EAAiC,cAAA;AAAA,EACjC,4BAAA,EAA8B,WAAA;AAAA,EAC9B,qCAAA,EAAuC,qBAAA;AAAA,EACvC,6CAAA,EAA+C,qCAAA;AAAA,EAC/C,oCAAA,EAAsC,4BAAA;AAAA,EACtC,4BAAA,EAA8B,UAAA;AAAA,EAC9B,0BAAA,EAA4B,QAAA;AAAA,EAC5B,+BAAA,EAAiC,cAAA;AAAA,EACjC,mCAAA,EAAqC,kBAAA;AAAA,EACrC,uBAAA,EAAyB,KAAA;AAAA,EACzB,6BAAA,EAA+B,yBAAA;AAAA,EAC/B,kCAAA,EAAoC,qBAAA;AAAA,EACpC,2BAAA,EAA6B,mBAAA;AAAA,EAC7B,kCAAA,EAAoC,iBAAA;AAAA,EACpC,qCAAA,EAAuC,oBAAA;AAAA,EACvC,gCAAA,EAAkC,SAAA;AAAA,EAClC,wBAAA,EAA0B,MAAA;AAAA,EAC1B,2BAAA,EAA6B,SAAA;AAAA,EAC7B,mCAAA,EAAqC,kBAAA;AAAA,EACrC,8BAAA,EAAgC,YAAA;AAAA,EAChC,4BAAA,EAA8B,UAAA;AAAA,EAC9B,sCAAA,EAAwC,qBAAA;AAAA,EACxC,gCAAA,EAAkC,eAAA;AAAA,EAClC,sCAAA,EAAwC,6CAAA;AAAA,EACxC,2BAAA,EAA6B,UAAA;AAAA,EAC7B,mCAAA,EAAqC,aAAA;AAAA,EACrC,uCAAA,EAAyC,kCAAA;AAAA,EACzC,sCAAA,EAAwC,gBAAA;AAAA,EACxC,0CAAA,EAA4C,oCAAA;AAAA,EAC5C,yCAAA,EAA2C,oBAAA;AAAA,EAC3C,6CAAA,EAA+C,0BAAA;AAAA,EAC/C,sBAAA,EAAwB,gBAAA;AAAA,EACxB,yBAAA,EAA2B,qCAAA;AAAA,EAC3B,sBAAA,EAAwB,OAAA;AAAA,EACxB,sBAAA,EAAwB,OAAA;AAAA,EACxB,2BAAA,EAA6B,yFAAA;AAAA,EAC7B,+BAAA,EAAiC,sBAAA;AAAA,EACjC,yBAAA,EAA2B,UAAA;AAAA,EAC3B,+BAAA,EAAiC,iBAAA;AAAA,EACjC,uBAAA,EAAyB,QAAA;AAAA,EACzB,kCAAA,EAAoC,oBAAA;AAAA,EACpC,sBAAA,EAAwB,OAAA;AAAA,EACxB,wBAAA,EAA0B,YAAA;AAAA,EAC1B,+BAAA,EAAiC,gBAAA;AAAA,EACjC,4BAAA,EAA8B,cAAA;AAAA,EAC9B,gCAAA,EAAkC,qBAAA;AAAA,EAClC,sBAAA,EAAwB,OAAA;AAAA,EACxB,6BAAA,EAA+B,eAAA;AAAA,EAC/B,yBAAA,EAA2B,WAAA;AAAA,EAC3B,oCAAA,EAAsC,yBAAA;AAAA,EACtC,4BAAA,EAA8B,cAAA;AAAA,EAC9B,+BAAA,EAAiC,iBAAA;AAAA,EACjC,sCAAA,EAAwC,yBAAA;AAAA,EACxC,6BAAA,EAA+B,eAAA;AAAA,EAC/B,oCAAA,EAAsC,yBAAA;AAAA,EACtC,wBAAA,EAA0B,YAAA;AAAA,EAC1B,6BAAA,EAA+B,eAAA;AAAA,EAC/B,6BAAA,EAA+B,eAAA;AAAA,EAC/B,uBAAA,EAAyB,QAAA;AAAA,EACzB,mBAAA,EAAqB,IAAA;AAAA,EACrB,iCAAA,EAAmC,oBAAA;AAAA,EACnC,+BAAA,EAAiC,iBAAA;AAAA,EACjC,iCAAA,EAAmC,wBAAA;AAAA,EACnC,0BAAA,EAA4B,MAAA;AAAA,EAC5B,2BAAA,EAA6B,OAAA;AAAA,EAC7B,qBAAA,EAAuB,MAAA;AAAA,EACvB,4BAAA,EAA8B,uBAAA;AAAA,EAC9B,8BAAA,EAAgC,MAAA;AAAA,EAChC,iCAAA,EAAmC,SAAA;AAAA,EACnC,8BAAA,EAAgC,MAAA;AAAA,EAChC,iCAAA,EAAmC,SAAA;AAAA,EACnC,mCAAA,EAAqC,WAAA;AAAA,EACrC,iCAAA,EAAmC,SAAA;AAAA,EACnC,+BAAA,EAAiC,OAAA;AAAA,EACjC,8BAAA,EAAgC,MAAA;AAAA,EAChC,qCAAA,EAAuC,aAAA;AAAA,EACvC,gCAAA,EAAkC,QAAA;AAAA,EAClC,8BAAA,EAAgC,MAAA;AAAA,EAChC,gCAAA,EAAkC,QAAA;AAAA,EAClC,8BAAA,EAAgC,OAAA;AAAA,EAChC,6BAAA,EAA+B,KAAA;AAAA,EAC/B,mCAAA,EAAqC,YAAA;AAAA,EACrC,+BAAA,EAAiC,OAAA;AAAA,EACjC,gCAAA,EAAkC,GAAA;AAAA,EAClC,2BAAA,EAA6B,SAAA;AAAA,EAC7B,2BAAA,EAA6B,YAAA;AAAA,EAC7B,qCAAA,EAAuC,gBAAA;AAAA,EACvC,qCAAA,EAAuC,+BAAA;AAAA,EACvC,kCAAA,EAAoC,2FAAA;AAAA,EACpC,mCAAA,EAAqC,cAAA;AAAA,EACrC,iCAAA,EAAmC,aAAA;AAAA,EACnC,kCAAA,EAAoC,eAAA;AAAA,EACpC,yCAAA,EAA2C,oBAAA;AAAA,EAC3C,gCAAA,EAAkC,UAAA;AAAA,EAClC,iCAAA,EAAmC,WAAA;AAAA,EACnC,6BAAA,EAA+B,QAAA;AAAA,EAC/B,iCAAA,EAAmC,0BAAA;AAAA,EACnC,2BAAA,EAA6B,SAAA;AAAA,EAC7B,uBAAA,EAAyB,MAAA;AAAA,EACzB,8BAAA,EAAgC,OAAA;AAAA,EAChC,0BAAA,EAA4B,UAAA;AAAA,EAC5B,iBAAA,EAAmB,WAAA;AAAA,EACnB,yBAAA,EAA2B,mBAAA;AAAA,EAC3B,2BAAA,EAA6B,SAAA;AAAA,EAC7B,yBAAA,EAA2B,UAAA;AAAA,EAC3B,0BAAA,EAA4B,aAAA;AAAA,EAC5B,0BAAA,EAA4B,WAAA;AAAA,EAC5B,0BAAA,EAA4B,QAAA;AAAA,EAC5B,0BAAA,EAA4B,QAAA;AAAA,EAC5B,0BAAA,EAA4B,QAAA;AAAA,EAC5B,2BAAA,EAA6B,UAAA;AAAA,EAC7B,2BAAA,EAA6B,UAAA;AAAA,EAC7B,uBAAA,EAAyB,KAAA;AAAA,EACzB,wBAAA,EAA0B,cAAA;AAAA,EAC1B,0BAAA,EAA4B,WAAA;AAAA,EAC5B,4BAAA,EAA8B,cAAA;AAAA,EAC9B,gCAAA,EAAkC,eAAA;AAAA,EAClC,4BAAA,EAA8B,qBAAA;AAAA,EAC9B,yBAAA,EAA2B,kBAAA;AAAA,EAC3B,8BAAA,EAAgC,YAAA;AAAA,EAChC,uBAAA,EAAyB,0BAAA;AAAA,EACzB,6BAAA,EAA+B,aAAA;AAAA,EAC/B,8BAAA,EAAgC,eAAA;AAAA,EAChC,6BAAA,EAA+B,eAAA;AAAA,EAC/B,8BAAA,EAAgC,gBAAA;AAAA,EAChC,2BAAA,EAA6B,WAAA;AAAA,EAC7B,8BAAA,EAAgC,eAAA;AAAA,EAChC,0BAAA,EAA4B,oBAAA;AAAA;AAAA,EAE5B,0BAAA,EAA4B,iBAAA;AAAA,EAC5B,sCAAA,EAAwC,4DAAA;AAAA,EACxC,wBAAA,EAA0B,UAAA;AAAA,EAC1B,oCAAA,EAAsC,kEAAA;AAAA,EACtC,4BAAA,EAA8B,mBAAA;AAAA,EAC9B,wCAAA,EAA0C,8DAAA;AAAA,EAC1C,uBAAA,EAAyB,cAAA;AAAA,EACzB,mCAAA,EAAqC,4DAAA;AAAA,EACrC,2BAAA,EAA6B,kBAAA;AAAA,EAC7B,uCAAA,EAAyC,0DAAA;AAAA,EACzC,uBAAA,EAAyB,cAAA;AAAA,EACzB,mCAAA,EAAqC,wCAAA;AAAA,EACrC,2BAAA,EAA6B,kBAAA;AAAA,EAC7B,uCAAA,EAAyC,0CAAA;AAAA,EACzC,+BAAA,EAAiC,eAAA;AAAA,EACjC,2CAAA,EAA6C,8CAAA;AAAA,EAC7C,sBAAA,EAAwB,aAAA;AAAA,EACxB,kCAAA,EAAoC,8BAAA;AAAA;AAAA,EAEpC,iCAAA,EAAmC,MAAA;AAAA,EACnC,wCAAA,EAA0C,aAAA;AAAA,EAC1C,kCAAA,EAAoC,OAAA;AAAA,EACpC,mCAAA,EAAqC,QAAA;AAAA,EACrC,gCAAA,EAAkC,KAAA;AAAA,EAClC,oCAAA,EAAsC,SAAA;AAAA,EACtC,mCAAA,EAAqC,QAAA;AAAA,EACrC,gCAAA,EAAkC,UAAA;AAAA,EAClC,uCAAA,EAAyC,aAAA;AAAA,EACzC,kCAAA,EAAoC,cAAA;AAAA,EACpC,wBAAA,EAA0B,4CAAA;AAAA,EAC1B,8BAAA,EAAgC,iBAAA;AAAA,EAChC,8BAAA,EAAgC,iBAAA;AAAA,EAChC,qCAAA,EAAuC,iBAAA;AAAA,EACvC,mCAAA,EAAqC,SAAA;AAAA,EACrC,kCAAA,EAAoC,QAAA;AAAA,EACpC,gCAAA,EAAkC,MAAA;AAAA,EAClC,0BAAA,EAA4B,KAAA;AAAA,EAC5B,+BAAA,EAAiC,UAAA;AAAA,EACjC,iCAAA,EAAmC,oCAAA;AAAA,EACnC,+BAAA,EAAiC,4CAAA;AAAA,EACjC,qCAAA,EAAuC,yBAAA;AAAA,EACvC,kCAAA,EAAoC,cAAA;AAAA;AAAA,EAEpC,0BAAA,EAA4B,2BAAA;AAAA,EAC5B,yBAAA,EAA2B,cAAA;AAAA,EAC3B,uBAAA,EAAyB,YAAA;AAAA,EACzB,2BAAA,EAA6B,QAAA;AAAA,EAC7B,yBAAA,EAA2B,MAAA;AAAA,EAC3B,0BAAA,EAA4B,OAAA;AAAA,EAC5B,kCAAA,EAAoC,mBAAA;AAAA,EACpC,kCAAA,EAAoC,mBAAA;AAAA,EACpC,2BAAA,EAA6B,UAAA;AAAA,EAC7B,+BAAA,EAAiC,iBAAA;AAAA,EACjC,2BAAA,EAA6B,QAAA;AAAA,EAC7B,4BAAA,EAA8B,mBAAA;AAAA,EAC9B,2BAAA,EAA6B,2BAAA;AAAA,EAC7B,gCAAA,EAAkC,oCAAA;AAAA,EAClC,kCAAA,EAAoC;AACtC,CAAA;;;ACrZO,IAAM,IAAA,GAA+B;AAAA,EAC1C,6BAAA,EAA+B,+BAAA;AAAA,EAC/B,gCAAA,EAAkC,uCAAA;AAAA,EAClC,yBAAA,EAA2B,UAAA;AAAA,EAC3B,0BAAA,EAA4B,UAAA;AAAA,EAC5B,0BAAA,EAA4B,yDAAA;AAAA,EAC5B,uBAAA,EAAyB,YAAA;AAAA,EACzB,8BAAA,EAAgC,8BAAA;AAAA,EAChC,oCAAA,EAAsC,2HAAA;AAAA,EACtC,kCAAA,EAAoC,6BAAA;AAAA,EACpC,8BAAA,EAAgC,QAAA;AAAA,EAChC,+BAAA,EAAiC,OAAA;AAAA,EACjC,sCAAA,EAAwC,kBAAA;AAAA,EACxC,0CAAA,EAA4C,uBAAA;AAAA,EAC5C,iCAAA,EAAmC,aAAA;AAAA,EACnC,wCAAA,EAA0C,qBAAA;AAAA,EAC1C,sCAAA,EAAwC,iCAAA;AAAA,EACxC,+BAAA,EAAiC,QAAA;AAAA,EACjC,qCAAA,EAAuC,mBAAA;AAAA,EACvC,wCAAA,EAA0C,6BAAA;AAAA,EAC1C,+BAAA,EAAiC,UAAA;AAAA,EACjC,oCAAA,EAAsC,uBAAA;AAAA,EACtC,sCAAA,EAAwC,eAAA;AAAA,EACxC,2CAAA,EAA6C,gCAAA;AAAA,EAC7C,+CAAA,EAAiD,6CAAA;AAAA,EACjD,gCAAA,EAAkC,WAAA;AAAA,EAClC,wCAAA,EAA0C,sGAAA;AAAA,EAC1C,0CAAA,EAA4C,mCAAA;AAAA,EAC5C,qCAAA,EAAuC,mBAAA;AAAA,EACvC,qCAAA,EAAuC,iBAAA;AAAA,EACvC,sCAAA,EAAwC,oBAAA;AAAA,EACxC,gCAAA,EAAkC,QAAA;AAAA,EAClC,iCAAA,EAAmC,YAAA;AAAA,EACnC,wCAAA,EAA0C,mBAAA;AAAA,EAC1C,qCAAA,EAAuC,iBAAA;AAAA,EACvC,kCAAA,EAAoC,OAAA;AAAA,EACpC,wCAAA,EAA0C,4BAAA;AAAA,EAC1C,kCAAA,EAAoC,4CAAA;AAAA,EACpC,kCAAA,EAAoC,UAAA;AAAA,EACpC,gCAAA,EAAkC,wBAAA;AAAA,EAClC,mCAAA,EAAqC,gBAAA;AAAA,EACrC,sCAAA,EAAwC,kBAAA;AAAA,EACxC,iCAAA,EAAmC,2CAAA;AAAA,EACnC,8BAAA,EAAgC,oJAAA;AAAA,EAChC,iCAAA,EAAmC,iBAAA;AAAA,EACnC,8BAAA,EAAgC,eAAA;AAAA,EAChC,2BAAA,EAA6B,SAAA;AAAA,EAC7B,+BAAA,EAAiC,0BAAA;AAAA,EACjC,wBAAA,EAA0B,MAAA;AAAA,EAC1B,2BAAA,EAA6B,aAAA;AAAA,EAC7B,4BAAA,EAA8B,UAAA;AAAA,EAC9B,uBAAA,EAAyB,aAAA;AAAA,EACzB,wBAAA,EAA0B,eAAA;AAAA,EAC1B,6BAAA,EAA+B,iBAAA;AAAA,EAC/B,gCAAA,EAAkC,UAAA;AAAA,EAClC,4BAAA,EAA8B,mBAAA;AAAA,EAC9B,yBAAA,EAA2B,OAAA;AAAA,EAC3B,+BAAA,EAAiC,eAAA;AAAA,EACjC,uBAAA,EAAyB,MAAA;AAAA,EACzB,6BAAA,EAA+B,qCAAA;AAAA,EAC/B,kCAAA,EAAoC,cAAA;AAAA,EACpC,8BAAA,EAAgC,sBAAA;AAAA,EAChC,gCAAA,EAAkC,OAAA;AAAA,EAClC,mCAAA,EAAqC,UAAA;AAAA,EACrC,qCAAA,EAAuC,WAAA;AAAA,EACvC,+BAAA,EAAiC,MAAA;AAAA,EACjC,kCAAA,EAAoC,SAAA;AAAA,EACpC,4BAAA,EAA8B,0BAAA;AAAA,EAC9B,gCAAA,EAAkC,2CAAA;AAAA,EAClC,yBAAA,EAA2B,mBAAA;AAAA,EAC3B,6BAAA,EAA+B,OAAA;AAAA,EAC/B,0BAAA,EAA4B,UAAA;AAAA,EAC5B,uBAAA,EAAyB,OAAA;AAAA,EACzB,mCAAA,EAAqC,yBAAA;AAAA,EACrC,6BAAA,EAA+B,WAAA;AAAA,EAC/B,qCAAA,EAAuC,0CAAA;AAAA,EACvC,2BAAA,EAA6B,iCAAA;AAAA,EAC7B,4BAAA,EAA8B,UAAA;AAAA,EAC9B,6BAAA,EAA+B,cAAA;AAAA,EAC/B,yBAAA,EAA2B,OAAA;AAAA,EAC3B,6BAAA,EAA+B,eAAA;AAAA,EAC/B,oCAAA,EAAsC,4BAAA;AAAA,EACtC,+BAAA,EAAiC,gBAAA;AAAA,EACjC,qCAAA,EAAuC,yBAAA;AAAA,EACvC,uCAAA,EAAyC,iCAAA;AAAA,EACzC,8BAAA,EAAgC,UAAA;AAAA,EAChC,6BAAA,EAA+B,QAAA;AAAA,EAC/B,gCAAA,EAAkC,qBAAA;AAAA,EAClC,4BAAA,EAA8B,MAAA;AAAA,EAC9B,mCAAA,EAAqC,iBAAA;AAAA,EACrC,yCAAA,EAA2C,yBAAA;AAAA,EAC3C,4BAAA,EAA8B,QAAA;AAAA,EAC9B,+BAAA,EAAiC,iBAAA;AAAA,EACjC,oCAAA,EAAsC,6BAAA;AAAA,EACtC,oCAAA,EAAsC,MAAA;AAAA,EACtC,oCAAA,EAAsC,UAAA;AAAA,EACtC,4BAAA,EAA8B,MAAA;AAAA,EAC9B,uCAAA,EAAyC,yBAAA;AAAA,EACzC,6BAAA,EAA+B,OAAA;AAAA,EAC/B,qCAAA,EAAuC,qBAAA;AAAA,EACvC,+BAAA,EAAiC,8BAAA;AAAA,EACjC,oCAAA,EAAsC,4BAAA;AAAA,EACtC,oCAAA,EAAsC,mBAAA;AAAA,EACtC,6BAAA,EAA+B,YAAA;AAAA,EAC/B,2BAAA,EAA6B,KAAA;AAAA,EAC7B,mCAAA,EAAqC,YAAA;AAAA,EACrC,4BAAA,EAA8B,QAAA;AAAA,EAC9B,8BAAA,EAAgC,aAAA;AAAA,EAChC,kCAAA,EAAoC,uBAAA;AAAA,EACpC,kCAAA,EAAoC,mBAAA;AAAA,EACpC,0CAAA,EAA4C,0CAAA;AAAA,EAC5C,sCAAA,EAAwC,2BAAA;AAAA,EACxC,kCAAA,EAAoC,oBAAA;AAAA,EACpC,uCAAA,EAAyC,oBAAA;AAAA,EACzC,4BAAA,EAA8B,SAAA;AAAA,EAC9B,iCAAA,EAAmC,sBAAA;AAAA,EACnC,qBAAA,EAAuB,YAAA;AAAA,EACvB,6BAAA,EAA+B,QAAA;AAAA,EAC/B,2BAAA,EAA6B,cAAA;AAAA,EAC7B,oBAAA,EAAsB,OAAA;AAAA,EACtB,mBAAA,EAAqB,MAAA;AAAA,EACrB,wBAAA,EAA0B,gBAAA;AAAA,EAC1B,wBAAA,EAA0B,gBAAA;AAAA,EAC1B,2BAAA,EAA6B,kBAAA;AAAA,EAC7B,8BAAA,EAAgC,mBAAA;AAAA,EAChC,iCAAA,EAAmC,sBAAA;AAAA,EACnC,qBAAA,EAAuB,QAAA;AAAA,EACvB,0BAAA,EAA4B,UAAA;AAAA,EAC5B,uBAAA,EAAyB,QAAA;AAAA,EACzB,gCAAA,EAAkC,mBAAA;AAAA,EAClC,mCAAA,EAAqC,gEAAA;AAAA,EACrC,kCAAA,EAAoC,0BAAA;AAAA,EACpC,kCAAA,EAAoC,iBAAA;AAAA,EACpC,gCAAA,EAAkC,qBAAA;AAAA,EAClC,oCAAA,EAAsC,mFAAA;AAAA,EACtC,oCAAA,EAAsC,iBAAA;AAAA,EACtC,qCAAA,EAAuC,+BAAA;AAAA,EACvC,qCAAA,EAAuC,uDAAA;AAAA,EACvC,uCAAA,EAAyC,qDAAA;AAAA,EACzC,gCAAA,EAAkC,WAAA;AAAA,EAClC,iCAAA,EAAmC,mBAAA;AAAA,EACnC,qCAAA,EAAuC,mEAAA;AAAA,EACvC,qCAAA,EAAuC,0BAAA;AAAA,EACvC,kCAAA,EAAoC,WAAA;AAAA,EACpC,2BAAA,EAA6B,QAAA;AAAA,EAC7B,oCAAA,EAAsC,+GAAA;AAAA,EACtC,iCAAA,EAAmC,YAAA;AAAA,EACnC,2BAAA,EAA6B,YAAA;AAAA,EAC7B,iCAAA,EAAmC,gCAAA;AAAA,EACnC,2BAAA,EAA6B,0BAAA;AAAA,EAC7B,8BAAA,EAAgC,yBAAA;AAAA,EAChC,kCAAA,EAAoC,2GAAA;AAAA,EACpC,qCAAA,EAAuC,qBAAA;AAAA,EACvC,2CAAA,EAA6C,gJAAA;AAAA,EAC7C,qCAAA,EAAuC,yBAAA;AAAA,EACvC,2CAAA,EAA6C,iJAAA;AAAA,EAC7C,kCAAA,EAAoC,iBAAA;AAAA,EACpC,wCAAA,EAA0C,8HAAA;AAAA,EAC1C,2BAAA,EAA6B,oBAAA;AAAA,EAC7B,+BAAA,EAAiC,wCAAA;AAAA,EACjC,8BAAA,EAAgC,sBAAA;AAAA,EAChC,kCAAA,EAAoC,sCAAA;AAAA,EACpC,yBAAA,EAA2B,aAAA;AAAA,EAC3B,6BAAA,EAA+B,qCAAA;AAAA,EAC/B,iCAAA,EAAmC,mDAAA;AAAA,EACnC,8BAAA,EAAgC,iCAAA;AAAA,EAChC,0BAAA,EAA4B,OAAA;AAAA,EAC5B,+BAAA,EAAiC,mBAAA;AAAA,EACjC,0BAAA,EAA4B,UAAA;AAAA,EAC5B,wBAAA,EAA0B,WAAA;AAAA,EAC1B,6BAAA,EAA+B,uBAAA;AAAA,EAC/B,oCAAA,EAAsC,UAAA;AAAA,EACtC,wBAAA,EAA0B,MAAA;AAAA,EAC1B,+BAAA,EAAiC,qBAAA;AAAA,EACjC,0BAAA,EAA4B,wBAAA;AAAA,EAC5B,yBAAA,EAA2B,mBAAA;AAAA,EAC3B,iCAAA,EAAmC,gCAAA;AAAA,EACnC,6BAAA,EAA+B,kBAAA;AAAA,EAC/B,8BAAA,EAAgC,gBAAA;AAAA,EAChC,6BAAA,EAA+B,qBAAA;AAAA,EAC/B,0BAAA,EAA4B,eAAA;AAAA,EAC5B,iCAAA,EAAmC,qBAAA;AAAA,EACnC,+BAAA,EAAiC,wBAAA;AAAA,EACjC,yBAAA,EAA2B,qBAAA;AAAA,EAC3B,iCAAA,EAAmC,8BAAA;AAAA,EACnC,qCAAA,EAAuC,yDAAA;AAAA,EACvC,8BAAA,EAAgC,wCAAA;AAAA,EAChC,kCAAA,EAAoC,2DAAA;AAAA,EACpC,qCAAA,EAAuC,gCAAA;AAAA,EACvC,yCAAA,EAA2C,8DAAA;AAAA,EAC3C,iCAAA,EAAmC,oBAAA;AAAA,EACnC,qCAAA,EAAuC,qCAAA;AAAA,EACvC,iCAAA,EAAmC,6BAAA;AAAA,EACnC,qCAAA,EAAuC,qEAAA;AAAA,EACvC,6BAAA,EAA+B,SAAA;AAAA,EAC/B,iCAAA,EAAmC,8CAAA;AAAA,EACnC,kCAAA,EAAoC,oBAAA;AAAA,EACpC,sCAAA,EAAwC,qBAAA;AAAA,EACxC,kCAAA,EAAoC,+BAAA;AAAA,EACpC,sCAAA,EAAwC,yDAAA;AAAA,EACxC,+BAAA,EAAiC,+BAAA;AAAA,EACjC,mCAAA,EAAqC,sEAAA;AAAA,EACrC,mCAAA,EAAqC,0BAAA;AAAA,EACrC,uCAAA,EAAyC,wEAAA;AAAA,EACzC,iCAAA,EAAmC,iEAAA;AAAA,EACnC,8BAAA,EAAgC,iCAAA;AAAA,EAChC,6BAAA,EAA+B,yCAAA;AAAA,EAC/B,oCAAA,EAAsC,gCAAA;AAAA,EACtC,8BAAA,EAAgC,gEAAA;AAAA,EAChC,qCAAA,EAAuC,mBAAA;AAAA,EACvC,8BAAA,EAAgC,OAAA;AAAA,EAChC,2BAAA,EAA6B,IAAA;AAAA,EAC7B,qCAAA,EAAuC,uCAAA;AAAA,EACvC,oCAAA,EAAsC,wCAAA;AAAA,EACtC,mCAAA,EAAqC,wCAAA;AAAA,EACrC,+BAAA,EAAiC,kDAAA;AAAA,EACjC,4BAAA,EAA8B,UAAA;AAAA,EAC9B,yBAAA,EAA2B,QAAA;AAAA,EAC3B,+BAAA,EAAiC,iBAAA;AAAA,EACjC,4BAAA,EAA8B,gBAAA;AAAA,EAC9B,qCAAA,EAAuC,gCAAA;AAAA,EACvC,6CAAA,EAA+C,kDAAA;AAAA,EAC/C,oCAAA,EAAsC,8BAAA;AAAA,EACtC,4BAAA,EAA8B,UAAA;AAAA,EAC9B,0BAAA,EAA4B,SAAA;AAAA,EAC5B,+BAAA,EAAiC,cAAA;AAAA,EACjC,mCAAA,EAAqC,gBAAA;AAAA,EACrC,uBAAA,EAAyB,YAAA;AAAA,EACzB,6BAAA,EAA+B,kCAAA;AAAA,EAC/B,kCAAA,EAAoC,+BAAA;AAAA,EACpC,2BAAA,EAA6B,qBAAA;AAAA,EAC7B,kCAAA,EAAoC,wBAAA;AAAA,EACpC,qCAAA,EAAuC,0BAAA;AAAA,EACvC,gCAAA,EAAkC,WAAA;AAAA,EAClC,wBAAA,EAA0B,MAAA;AAAA,EAC1B,2BAAA,EAA6B,SAAA;AAAA,EAC7B,mCAAA,EAAqC,gBAAA;AAAA,EACrC,8BAAA,EAAgC,WAAA;AAAA,EAChC,4BAAA,EAA8B,UAAA;AAAA,EAC9B,sCAAA,EAAwC,2BAAA;AAAA,EACxC,gCAAA,EAAkC,aAAA;AAAA,EAClC,sCAAA,EAAwC,kEAAA;AAAA,EACxC,2BAAA,EAA6B,WAAA;AAAA,EAC7B,mCAAA,EAAqC,oBAAA;AAAA,EACrC,uCAAA,EAAyC,wCAAA;AAAA,EACzC,sCAAA,EAAwC,sBAAA;AAAA,EACxC,0CAAA,EAA4C,sCAAA;AAAA,EAC5C,yCAAA,EAA2C,aAAA;AAAA,EAC3C,6CAAA,EAA+C,qCAAA;AAAA,EAC/C,sBAAA,EAAwB,oBAAA;AAAA,EACxB,yBAAA,EAA2B,4CAAA;AAAA,EAC3B,sBAAA,EAAwB,OAAA;AAAA,EACxB,sBAAA,EAAwB,QAAA;AAAA,EACxB,2BAAA,EAA6B,sGAAA;AAAA,EAC7B,+BAAA,EAAiC,6BAAA;AAAA,EACjC,yBAAA,EAA2B,OAAA;AAAA,EAC3B,+BAAA,EAAiC,mBAAA;AAAA,EACjC,uBAAA,EAAyB,WAAA;AAAA,EACzB,kCAAA,EAAoC,wBAAA;AAAA,EACpC,sBAAA,EAAwB,mBAAA;AAAA,EACxB,wBAAA,EAA0B,YAAA;AAAA,EAC1B,+BAAA,EAAiC,mBAAA;AAAA,EACjC,4BAAA,EAA8B,iBAAA;AAAA,EAC9B,gCAAA,EAAkC,4BAAA;AAAA,EAClC,sBAAA,EAAwB,QAAA;AAAA,EACxB,6BAAA,EAA+B,eAAA;AAAA,EAC/B,yBAAA,EAA2B,6BAAA;AAAA,EAC3B,oCAAA,EAAsC,kCAAA;AAAA,EACtC,4BAAA,EAA8B,iBAAA;AAAA,EAC9B,+BAAA,EAAiC,qBAAA;AAAA,EACjC,sCAAA,EAAwC,0BAAA;AAAA,EACxC,6BAAA,EAA+B,iCAAA;AAAA,EAC/B,oCAAA,EAAsC,oCAAA;AAAA,EACtC,wBAAA,EAA0B,aAAA;AAAA,EAC1B,6BAAA,EAA+B,kBAAA;AAAA,EAC/B,6BAAA,EAA+B,oBAAA;AAAA,EAC/B,uBAAA,EAAyB,QAAA;AAAA,EACzB,mBAAA,EAAqB,KAAA;AAAA,EACrB,iCAAA,EAAmC,uBAAA;AAAA,EACnC,+BAAA,EAAiC,4BAAA;AAAA,EACjC,iCAAA,EAAmC,iCAAA;AAAA,EACnC,0BAAA,EAA4B,UAAA;AAAA,EAC5B,2BAAA,EAA6B,YAAA;AAAA,EAC7B,qBAAA,EAAuB,KAAA;AAAA,EACvB,4BAAA,EAA8B,mBAAA;AAAA,EAC9B,8BAAA,EAAgC,QAAA;AAAA,EAChC,iCAAA,EAAmC,SAAA;AAAA,EACnC,8BAAA,EAAgC,MAAA;AAAA,EAChC,iCAAA,EAAmC,SAAA;AAAA,EACnC,mCAAA,EAAqC,WAAA;AAAA,EACrC,iCAAA,EAAmC,UAAA;AAAA,EACnC,+BAAA,EAAiC,UAAA;AAAA,EACjC,8BAAA,EAAgC,MAAA;AAAA,EAChC,qCAAA,EAAuC,iBAAA;AAAA,EACvC,gCAAA,EAAkC,OAAA;AAAA,EAClC,8BAAA,EAAgC,MAAA;AAAA,EAChC,gCAAA,EAAkC,QAAA;AAAA,EAClC,8BAAA,EAAgC,OAAA;AAAA,EAChC,6BAAA,EAA+B,KAAA;AAAA,EAC/B,mCAAA,EAAqC,gBAAA;AAAA,EACrC,+BAAA,EAAiC,OAAA;AAAA,EACjC,gCAAA,EAAkC,GAAA;AAAA,EAClC,2BAAA,EAA6B,QAAA;AAAA,EAC7B,2BAAA,EAA6B,eAAA;AAAA,EAC7B,qCAAA,EAAuC,iBAAA;AAAA,EACvC,qCAAA,EAAuC,2CAAA;AAAA,EACvC,kCAAA,EAAoC,qGAAA;AAAA,EACpC,mCAAA,EAAqC,eAAA;AAAA,EACrC,iCAAA,EAAmC,eAAA;AAAA,EACnC,kCAAA,EAAoC,eAAA;AAAA,EACpC,yCAAA,EAA2C,iBAAA;AAAA,EAC3C,gCAAA,EAAkC,UAAA;AAAA,EAClC,iCAAA,EAAmC,cAAA;AAAA,EACnC,6BAAA,EAA+B,QAAA;AAAA,EAC/B,iCAAA,EAAmC,0BAAA;AAAA,EACnC,2BAAA,EAA6B,OAAA;AAAA,EAC7B,uBAAA,EAAyB,QAAA;AAAA,EACzB,8BAAA,EAAgC,OAAA;AAAA,EAChC,0BAAA,EAA4B,UAAA;AAAA,EAC5B,iBAAA,EAAmB,YAAA;AAAA,EACnB,yBAAA,EAA2B,mBAAA;AAAA,EAC3B,2BAAA,EAA6B,SAAA;AAAA,EAC7B,yBAAA,EAA2B,SAAA;AAAA,EAC3B,0BAAA,EAA4B,aAAA;AAAA,EAC5B,0BAAA,EAA4B,UAAA;AAAA,EAC5B,0BAAA,EAA4B,SAAA;AAAA,EAC5B,0BAAA,EAA4B,OAAA;AAAA,EAC5B,0BAAA,EAA4B,QAAA;AAAA,EAC5B,2BAAA,EAA6B,YAAA;AAAA,EAC7B,2BAAA,EAA6B,gBAAA;AAAA,EAC7B,uBAAA,EAAyB,SAAA;AAAA,EACzB,wBAAA,EAA0B,eAAA;AAAA,EAC1B,0BAAA,EAA4B,aAAA;AAAA,EAC5B,4BAAA,EAA8B,kBAAA;AAAA,EAC9B,gCAAA,EAAkC,iBAAA;AAAA,EAClC,4BAAA,EAA8B,kBAAA;AAAA,EAC9B,yBAAA,EAA2B,gBAAA;AAAA,EAC3B,8BAAA,EAAgC,eAAA;AAAA,EAChC,uBAAA,EAAyB,4CAAA;AAAA,EACzB,6BAAA,EAA+B,cAAA;AAAA,EAC/B,8BAAA,EAAgC,OAAA;AAAA,EAChC,6BAAA,EAA+B,aAAA;AAAA,EAC/B,8BAAA,EAAgC,cAAA;AAAA,EAChC,2BAAA,EAA6B,qBAAA;AAAA,EAC7B,8BAAA,EAAgC,qBAAA;AAAA,EAChC,0BAAA,EAA4B,iCAAA;AAAA;AAAA,EAE5B,0BAAA,EAA4B,qBAAA;AAAA,EAC5B,sCAAA,EAAwC,qEAAA;AAAA,EACxC,wBAAA,EAA0B,QAAA;AAAA,EAC1B,oCAAA,EAAsC,4EAAA;AAAA,EACtC,4BAAA,EAA8B,iBAAA;AAAA,EAC9B,wCAAA,EAA0C,kEAAA;AAAA,EAC1C,uBAAA,EAAyB,kBAAA;AAAA,EACzB,mCAAA,EAAqC,6EAAA;AAAA,EACrC,2BAAA,EAA6B,uBAAA;AAAA,EAC7B,uCAAA,EAAyC,mDAAA;AAAA,EACzC,uBAAA,EAAyB,qBAAA;AAAA,EACzB,mCAAA,EAAqC,sCAAA;AAAA,EACrC,2BAAA,EAA6B,6BAAA;AAAA,EAC7B,uCAAA,EAAyC,gDAAA;AAAA,EACzC,+BAAA,EAAiC,oBAAA;AAAA,EACjC,2CAAA,EAA6C,gEAAA;AAAA,EAC7C,sBAAA,EAAwB,wBAAA;AAAA,EACxB,kCAAA,EAAoC,kDAAA;AAAA;AAAA,EAEpC,iCAAA,EAAmC,MAAA;AAAA,EACnC,wCAAA,EAA0C,iBAAA;AAAA,EAC1C,kCAAA,EAAoC,WAAA;AAAA,EACpC,mCAAA,EAAqC,YAAA;AAAA,EACrC,gCAAA,EAAkC,MAAA;AAAA,EAClC,oCAAA,EAAsC,OAAA;AAAA,EACtC,mCAAA,EAAqC,OAAA;AAAA,EACrC,gCAAA,EAAkC,WAAA;AAAA,EAClC,uCAAA,EAAyC,aAAA;AAAA,EACzC,kCAAA,EAAoC,YAAA;AAAA,EACpC,wBAAA,EAA0B,sDAAA;AAAA,EAC1B,8BAAA,EAAgC,eAAA;AAAA,EAChC,8BAAA,EAAgC,aAAA;AAAA,EAChC,qCAAA,EAAuC,aAAA;AAAA,EACvC,mCAAA,EAAqC,aAAA;AAAA,EACrC,kCAAA,EAAoC,YAAA;AAAA,EACpC,gCAAA,EAAkC,OAAA;AAAA,EAClC,0BAAA,EAA4B,YAAA;AAAA,EAC5B,+BAAA,EAAiC,kBAAA;AAAA,EACjC,iCAAA,EAAmC,sCAAA;AAAA,EACnC,+BAAA,EAAiC,2CAAA;AAAA,EACjC,qCAAA,EAAuC,wBAAA;AAAA,EACvC,kCAAA,EAAoC,uBAAA;AAAA;AAAA,EAEpC,0BAAA,EAA4B,+BAAA;AAAA,EAC5B,yBAAA,EAA2B,iBAAA;AAAA,EAC3B,uBAAA,EAAyB,kBAAA;AAAA,EACzB,2BAAA,EAA6B,OAAA;AAAA,EAC7B,yBAAA,EAA2B,MAAA;AAAA,EAC3B,0BAAA,EAA4B,mBAAA;AAAA,EAC5B,kCAAA,EAAoC,gCAAA;AAAA,EACpC,kCAAA,EAAoC,sBAAA;AAAA,EACpC,2BAAA,EAA6B,YAAA;AAAA,EAC7B,+BAAA,EAAiC,iBAAA;AAAA,EACjC,2BAAA,EAA6B,UAAA;AAAA,EAC7B,4BAAA,EAA8B,6BAAA;AAAA,EAC9B,2BAAA,EAA6B,qCAAA;AAAA,EAC7B,gCAAA,EAAkC,uCAAA;AAAA,EAClC,kCAAA,EAAoC;AACtC,CAAA;;;ACnZO,IAAM,gBAAA,GAA2D;AAAA,EACtE,EAAA;AAAA,EACA,OAAA,EAAS;AACX,CAAA;ACGA,IAAM,YAAA,GAAuC;AAAA,EAC3C,IAAA,EAAM,4BAAA;AAAA,EACN,OAAA,EAAS,4BAAA;AAAA,EACT,OAAA,EAAS,oCAAA;AAAA,EACT,IAAA,EAAM,gCAAA;AAAA,EACN,SAAA,EAAW;AACb,CAAA;AAQO,SAAS,qBAAA,CAAsB,EAAE,MAAA,EAAQ,QAAA,EAAU,QAAO,EAI9D;AACD,EAAA,MAAM/B,KAAIE,cAAAA,EAAe;AACzB,EAAA,MAAM,WAAW,MAAA,CAAO,QAAA;AACxB,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,QAAAA,CAAoB,EAAE,CAAA;AACtD,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIA,SAAS,IAAI,CAAA;AAE3C,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,KAAA,GAAQ,IAAA;AACZ,IAAA,IAAI,CAAC,QAAQ,EAAA,EAAI;AAAE,MAAA,UAAA,CAAW,KAAK,CAAA;AAAG,MAAA;AAAA,IAAO;AAC7C,IAAA,UAAA,CAAW,IAAI,CAAA;AACf,IAAA,QAAA,CAAS,WAAA,CAAY,EAAE,SAAA,EAAW,MAAA,CAAO,EAAA,EAAI,QAAA,EAAU,GAAA,EAAK,CAAA,CACzD,IAAA,CAAK,CAAC,CAAA,KAAM;AAAE,MAAA,IAAI,KAAA,EAAO;AAAE,QAAA,WAAA,CAAY,EAAE,IAAI,CAAA;AAAG,QAAA,UAAA,CAAW,KAAK,CAAA;AAAA,MAAE;AAAA,IAAE,CAAC,CAAA,CACrE,KAAA,CAAM,MAAM;AAAE,MAAA,IAAI,KAAA,aAAkB,KAAK,CAAA;AAAA,IAAE,CAAC,CAAA;AAC/C,IAAA,OAAO,MAAM;AAAE,MAAA,KAAA,GAAQ,KAAA;AAAA,IAAM,CAAA;AAAA,EAC/B,CAAA,EAAG,CAAC,MAAA,EAAQ,EAAA,EAAI,QAAQ,CAAC,CAAA;AAEzB,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,KAAc,cAAA,CAAe,GAAG,QAAQ,CAAA;AAErD,EAAA,MAAM,MAAA,GAASI,QAAQ,MAAM;AAC3B,IAAA,MAAM,SAAS,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,WAAW,CAAA;AAC9D,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,EAAG,MAAM,CAAA,IAAK,CAAA,CAAE,WAAA,IAAe,CAAA,CAAA,EAAI,CAAC,CAAA;AAClE,IAAA,MAAM,IAAA,GAAO,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,EAAG,MAAM,CAAA,IAAK,CAAA,CAAE,UAAA,IAAc,CAAA,CAAA,EAAI,CAAC,CAAA;AAC/D,IAAA,OAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,OAAA,EAAS,SAAS,IAAA,EAAK;AAAA,EAChD,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAEb,EAAA,MAAM,WAAA,GAAc,CAAC,GAAA,KAAiB;AACpC,IAAA,MAAM,IAAA,GAAO,GAAA,CAAI,SAAA,KAAc,QAAA,GAAW,aAAA,GAAgB,UAAA;AAC1D,IAAA,MAAA,CAAO,SAAS,IAAA,GAAO,CAAA,WAAA,EAAc,IAAI,CAAA,QAAA,EAAW,IAAI,EAAE,CAAA,CAAA;AAAA,EAC5D,CAAA;AAEA,EAAA,MAAM,OAAA,GAAqCA,QAAQ,MAAM;AAAA,IACvD;AAAA,MACE,EAAA,EAAI,MAAA;AAAA,MAAQ,MAAA,EAAQR,GAAE,8BAA8B,CAAA;AAAA,MACpD,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,qBAAMC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,+BAAA,EAAiC,QAAA,EAAA,GAAA,CAAI,QAAA,CAAS,WAAA,EAAY;AAAA,KAC/F;AAAA,IACA;AAAA,MACE,EAAA,EAAI,aAAA;AAAA,MAAe,MAAA,EAAQD,GAAE,qCAAqC,CAAA;AAAA,MAClE,IAAA,EAAM,CAAC,EAAE,GAAA,EAAI,KAAM;AACjB,QAAA,MAAM,MAAM,GAAA,CAAI,QAAA;AAChB,QAAA,uBACEK,KAAC,QAAA,EAAA,EAAO,OAAA,EAAS,MAAM,WAAA,CAAY,GAAG,CAAA,EAAG,SAAA,EAAU,WAAA,EACjD,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kDAAA,EACb,QAAA,EAAA,GAAA,CAAI,gBAAgB,GAAA,CAAI,WAAA,IAAeD,EAAAA,CAAE,2BAA2B,CAAA,EACvE,CAAA;AAAA,UACC,GAAA,CAAI,gCAAgBC,GAAAA,CAAC,UAAK,SAAA,EAAU,oDAAA,EAAsD,cAAI,YAAA,EAAa;AAAA,SAAA,EAC9G,CAAA;AAAA,MAEJ;AAAA,KACF;AAAA,IACA;AAAA,MACE,EAAA,EAAI,QAAA;AAAA,MAAU,MAAA,EAAQD,GAAE,gCAAgC,CAAA;AAAA,MACxD,IAAA,EAAM,CAAC,EAAE,GAAA,uBACPC,GAAAA,CAAC,UAAK,SAAA,EAAW,CAAA,yBAAA,EAA4B,IAAI,QAAA,CAAS,SAAA,KAAc,WAAW,cAAA,GAAiB,kBAAkB,IACnH,QAAA,EAAA,GAAA,CAAI,GAAA,CAAI,QAAA,CAAS,WAAW,CAAA,EAC/B;AAAA,KAEJ;AAAA,IACA;AAAA,MACE,EAAA,EAAI,MAAA;AAAA,MAAQ,MAAA,EAAQD,GAAE,8BAA8B,CAAA;AAAA,MACpD,IAAA,EAAM,CAAC,EAAE,GAAA,uBAAUC,GAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gDAAA,EAAkD,QAAA,EAAA,GAAA,CAAI,GAAA,CAAI,QAAA,CAAS,UAAU,CAAA,EAAE;AAAA,KACpH;AAAA,IACA;AAAA,MACE,EAAA,EAAI,SAAA;AAAA,MAAW,MAAA,EAAQD,GAAE,oCAAoC,CAAA;AAAA,MAC7D,MAAM,CAAC,EAAE,KAAI,qBAAMC,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wCAAwC,QAAA,EAAA,GAAA,CAAA,CAAK,GAAA,CAAI,SAAS,WAAA,IAAe,CAAA,KAAM,IAAI,QAAA,CAAS,UAAA,IAAc,EAAE,CAAA,EAAE;AAAA,KACnJ;AAAA,IACA;AAAA,MACE,EAAA,EAAI,QAAA;AAAA,MAAU,MAAA,EAAQD,GAAE,gCAAgC,CAAA;AAAA,MACxD,IAAA,EAAM,CAAC,EAAE,GAAA,uBACPC,GAAAA,CAAC,UAAK,SAAA,EAAW,CAAA,yEAAA,EAA4E,aAAa,GAAA,CAAI,QAAA,CAAS,MAAM,CAAA,IAAK,YAAA,CAAa,IAAI,CAAA,CAAA,EAChJ,QAAA,EAAA,GAAA,CAAI,SAAS,MAAA,EAChB;AAAA;AAEJ,GACF,EAAG,CAAC,QAAA,EAAUD,EAAC,CAAC,CAAA;AAEhB,EAAA,uBACEK,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,WAAA,EAEb,QAAA,EAAA;AAAA,oBAAAA,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAOD,EAAAA,CAAE,gCAAgC,GAAG,KAAA,EAAO,GAAA,CAAI,MAAA,CAAO,MAAM,CAAA,EAAG,CAAA;AAAA,sBAC7EC,GAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAOD,EAAAA,CAAE,+BAA+B,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,MAAA,CAAO,IAAI,CAAA,EAAG,UAAQ,IAAA,EAAC,CAAA;AAAA,sBACnFC,GAAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAOD,EAAAA,CAAE,oCAAoC,CAAA,EAAG,KAAA,EAAO,GAAA,CAAI,MAAA,CAAO,OAAO,CAAA,EAAG,QAAM,IAAA,EAAC;AAAA,KAAA,EAC3F,CAAA;AAAA,IAEC,OAAA,mBACCC,GAAAA,CAAC6B,SAAAA,EAAA,EAAU,OAAA,EAAkB,IAAA,EAAM,EAAC,EAAG,OAAA,EAAO,IAAA,EAAC,cAAc,CAAA,EAAG,OAAA,EAAO,IAAA,EAAC,CAAA,GACtE,QAAA,CAAS,MAAA,KAAW,oBACtBzB,IAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4GAAA,EACb,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAAC,MAAA,EAAA,EAAO,SAAA,EAAU,oCAAA,EAAqC,CAAA;AAAA,sBACvDA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iCAAiC,QAAA,EAAAD,EAAAA,CAAE,wBAAwB,CAAA,EAAE;AAAA,KAAA,EAC5E,CAAA,mBAEAC,GAAAA,CAAC6B,SAAAA,EAAA,EAAU,OAAA,EAAkB,IAAA,EAAM,QAAA,EAAU,OAAA,EAAO,IAAA,EAAC;AAAA,GAAA,EAEzD,CAAA;AAEJ;AAEA,SAAS,KAAK,EAAE,KAAA,EAAO,KAAA,EAAO,MAAA,EAAQ,UAAS,EAA2E;AACxH,EAAA,uBACEzB,KAAC,KAAA,EAAA,EAAI,SAAA,EAAW,+BAA+B,MAAA,GAAS,aAAA,GAAgB,SAAS,CAAA,CAAA,EAC/E,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kEAAA,EAAoE,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBACvFA,IAAC,GAAA,EAAA,EAAE,SAAA,EAAW,gCAAgC,QAAA,GAAW,cAAA,GAAiB,iBAAiB,CAAA,CAAA,EAAK,QAAA,EAAA,KAAA,EAAM;AAAA,GAAA,EACxG,CAAA;AAEJ;ACnHO,SAAS,2BAAA,GAAqD;AACnE,EAAA,OAAO,sBAAA;AAAA,IACL,MAAM,+BAAA,EAAgC;AAAA,IACtC,MAAM,2BAAA;AAA4B,GACpC;AACF;AAiGA,IAAM,cAAA,GAAwC;AAAA,EAC5C,SAAA,EAAW,WAAA;AAAA,EACX,YAAA,EAAc,6CAAA;AAAA,EACd,OAAA,EAAS,SAAA;AAAA,EACT,QAAA,EAAU,kBAAA;AAAA,EACV,WAAA,EAAa,KAAA;AAAA,EACb,YAAA,EAAc,MAAA;AAAA,EACd,iBAAA,EAAmB,oBAAA;AAAA,EACnB,WAAA,EAAa,qBAAA;AAAA,EACb,cAAA,EAAgB,KAAA;AAAA,EAChB,eAAA,EAAiB,MAAA;AAAA,EACjB,aAAA,EAAe,gBAAA;AAAA,EACf,UAAA,EAAY,YAAA;AAAA,EACZ,WAAA,EAAa,aAAA;AAAA,EACb,mBAAA,EAAqB,UAAA;AAAA,EACrB,gBAAA,EAAkB,OAAA;AAAA,EAClB,KAAA,EAAO,OAAA;AAAA,EACP,aAAA,EAAe,UAAA;AAAA,EACf,mBAAA,EAAqB;AACvB,CAAA;AAEA,IAAM,mBAAmB,EAAE,IAAA,EAAM,OAAO,MAAA,EAAQ,OAAA,EAAS,QAAQ,IAAA,EAAK;AAEtE,IAAM,kBAAA,GAAuC;AAAA,EAC3C,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,MAAM,WAAA,EAAY;AAAA,EACxD,EAAE,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,MAAM,SAAA,EAAU;AAAA,EACtD,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,OAAA,EAAS,MAAM,gBAAA;AAC1C,CAAA;AAMA,SAAS,cAAc,OAAA,EAA2D;AAChF,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP,QAAA,EAAU,OAAA,EAAS,OAAA,EAAS,QAAA,KAAa,KAAA;AAAA,MACzC,WAAA,EAAa,OAAA,EAAS,OAAA,EAAS,WAAA,KAAgB,KAAA;AAAA,MAC/C,aAAA,EAAe,OAAA,EAAS,OAAA,EAAS,aAAA,KAAkB,KAAA;AAAA,MACnD,UAAA,EAAY,OAAA,EAAS,OAAA,EAAS,UAAA,KAAe,KAAA;AAAA,MAC7C,WAAA,EAAa,OAAA,EAAS,OAAA,EAAS,WAAA,KAAgB,KAAA;AAAA,MAC/C,KAAA,EAAO,OAAA,EAAS,OAAA,EAAS,KAAA,KAAU,KAAA;AAAA;AAAA,MAEnC,cAAA,EAAgB,OAAA,EAAS,OAAA,EAAS,cAAA,KAAmB;AAAA,KACvD;AAAA,IACA,QAAQ,EAAE,GAAG,cAAA,EAAgB,GAAG,SAAS,MAAA,EAAO;AAAA,IAChD,UAAU,EAAE,GAAG,gBAAA,EAAkB,GAAG,SAAS,QAAA,EAAS;AAAA,IACtD,SAAA,EAAW,SAAS,SAAA,IAAa,kBAAA;AAAA,IACjC,sBAAA,EAAwB,SAAS,sBAAA,IAA0B,KAAA;AAAA,IAC3D,aAAA,EAAe;AAAA,MACb,aAAA,EAAe,OAAA,EAAS,aAAA,EAAe,aAAA,IAAiB,QAAA;AAAA,MACxD,KAAA,EAAO,OAAA,EAAS,aAAA,EAAe,KAAA,IAAS;AAAA,KAC1C;AAAA,IACA,SAAA,EAAW,OAAA,EAAS,SAAA,IAAa,EAAC;AAAA,IAClC,aAAA,EAAe,OAAA,EAAS,aAAA,IAAiB,EAAC;AAAA,IAC1C,eAAe,OAAA,EAAS,aAAA;AAAA,IACxB,gBAAgB,OAAA,EAAS;AAAA,GAC3B;AACF;AAMO,SAAS,sBAAsB,OAAA,EAAkD;AACtF,EAAA,MAAM,MAAA,GAAS,cAAc,OAAO,CAAA;AACpC,EAAA,oBAAA,CAAqB,gBAAgB,CAAA;AAErC,EAAA,MAAM,QAAA,GAAW,OAAA,EAAS,YAAA,IAAgB,2BAAA,EAA4B;AACtE,EAAA,MAAM,KAAA,GAAQ,qBAAqB,QAAQ,CAAA;AAC3C,EAAA,MAAM,mBAAmB,+BAAA,CAAgC,EAAE,MAAA,EAAQ,QAAA,EAAU,OAAO,CAAA;AAGpF,EAAA,MAAM,oBAAA,GAAsC,CAAC,KAAA,KAC3CqC,OAAAA,CAAM,aAAA,CAAc,qBAAA,EAAuB,EAAE,MAAA,EAAQ,KAAA,CAAM,IAAA,EAAM,QAAA,EAAU,MAAA,EAAQ,CAAA;AACrF,EAAA,oBAAA,CAAqB,WAAA,GAAc,0BAAA;AAEnC,EAAA,MAAM,aAAA,GAA+B,MACnCA,OAAAA,CAAM,aAAA,CAAc,aAAA,EAAe,EAAE,MAAA,EAAQ,QAAA,EAAU,KAAA,EAAO,UAAA,EAAY,mBAAA,EAAqB,CAAA;AAEjG,EAAA,OAAO;AAAA,IACL,EAAA,EAAI,WAAA;AAAA,IACJ,IAAA,EAAM,OAAO,MAAA,CAAO,SAAA;AAAA,IACpB,IAAA,EAAM,YAAA;AAAA,IACN,OAAA,EAAS,OAAA;AAAA,IACT,KAAA,EAAO,SAAS,KAAA,IAAS,WAAA;AAAA,IACzB,YAAY,OAAA,EAAS,UAAA;AAAA,IACrB,cAAA,EAAgB,IAAA;AAAA,IAChB,cAAc,EAAC;AAAA,IACf,gBAAA,EAAkB;AAAA,MAChB,EAAE,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,MAAA,CAAO,OAAO,SAAA,EAAW,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,SAAA,EAAU;AAAA,MAClF,GAAI,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAC,EAAE,IAAI,uBAAA,EAAyB,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,aAAa,KAAA,EAAO,MAAA,CAAO,OAAO,SAAA,EAAW,IAAI,EAAC;AAAA,MACxI,GAAI,MAAA,CAAO,OAAA,CAAQ,WAAW,CAAC,EAAE,IAAI,oBAAA,EAAsB,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,UAAU,KAAA,EAAO,MAAA,CAAO,OAAO,SAAA,EAAW,IAAI,EAAC;AAAA,MAC/H,GAAI,MAAA,CAAO,OAAA,CAAQ,cAAc,CAAC,EAAE,IAAI,uBAAA,EAAyB,KAAA,EAAO,MAAA,CAAO,MAAA,CAAO,aAAa,KAAA,EAAO,MAAA,CAAO,OAAO,SAAA,EAAW,IAAI;AAAC,KAC1I;AAAA,IACA,UAAA,EAAY;AAAA,MACV;AAAA,QACE,OAAA,EAAS,SAAS,UAAA,IAAc,MAAA;AAAA,QAChC,QAAA,EAAU,SAAS,WAAA,IAAe,CAAA;AAAA,QAClC,KAAA,EAAO,OAAO,MAAA,CAAO,SAAA;AAAA,QACrB,KAAA,EAAO,YAAA;AAAA,QACP,IAAA,EAAM,YAAA;AAAA,QACN,UAAA,EAAY,EAAE,OAAA,EAAS,WAAA,EAAa,QAAQ,MAAA;AAAgB;AAC9D,KACF;AAAA,IACA,MAAA,EAAQ;AAAA,MACN;AAAA,QACE,IAAA,EAAM,YAAA;AAAA,QACN,SAAA,EAAW,aAAA;AAAA,QACX,UAAA,EAAY,EAAE,OAAA,EAAS,WAAA,EAAa,QAAQ,MAAA;AAAgB;AAC9D,KACF;AAAA,IACA,OAAA,EAAS;AAAA,MACP;AAAA,QACE,EAAA,EAAI,4BAAA;AAAA,QACJ,IAAA,EAAM,yBAAA;AAAA,QACN,SAAA,EAAW,oBAAA;AAAA,QACX,KAAA,EAAO,CAAA;AAAA,QACP,UAAA,EAAY,EAAE,OAAA,EAAS,WAAA,EAAa,QAAQ,MAAA;AAAgB;AAC9D,KACF;AAAA,IACA,gBAAA;AAAA,IACA,OAAA,EAAS;AAAA,MACP;AAAA,QACE,EAAA,EAAI,uBAAA;AAAA,QACJ,IAAA,EAAM,YAAA;AAAA,QACN,WAAA,EAAa,qDAAA;AAAA,QACb,IAAA,EAAM,YAAA;AAAA,QACN,IAAA,EAAM,MAAA;AAAA,QACN,QAAA,EAAU,SAAA;AAAA,QACV,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAmB,aAAa,0CAAA;AAA2C;AAC7F,SACF;AAAA,QACA,WAAA,EAAa;AAAA,UACX,EAAE,OAAO,6BAAA,EAA8B;AAAA,UACvC,EAAE,OAAO,8BAAA,EAA+B;AAAA,UACxC,EAAE,OAAO,0CAAA;AAA2C;AACtD,OACF;AAAA,MACA;AAAA,QACE,EAAA,EAAI,0BAAA;AAAA,QACJ,IAAA,EAAM,eAAA;AAAA,QACN,WAAA,EAAa,8CAAA;AAAA,QACb,IAAA,EAAM,UAAA;AAAA,QACN,IAAA,EAAM,SAAA;AAAA,QACN,QAAA,EAAU,SAAA;AAAA,QACV,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAmB,aAAa,uBAAA,EAAwB;AAAA,YACzE,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAmB,aAAa,gBAAA,EAAiB;AAAA,YACjE,WAAA,EAAa,EAAE,IAAA,EAAM,QAAA,EAAmB,aAAa,qBAAA;AAAsB,WAC7E;AAAA,UACA,QAAA,EAAU,CAAC,SAAA,EAAW,QAAQ;AAAA,SAChC;AAAA,QACA,WAAA,EAAa;AAAA,UACX,EAAE,OAAO,oCAAA;AAAqC,SAChD;AAAA,QACA,UAAA,EAAY,EAAE,OAAA,EAAS,WAAA,EAAa,QAAQ,QAAA;AAAkB,OAChE;AAAA,MACA;AAAA,QACE,EAAA,EAAI,yBAAA;AAAA,QACJ,IAAA,EAAM,cAAA;AAAA,QACN,WAAA,EAAa,mCAAA;AAAA,QACb,IAAA,EAAM,UAAA;AAAA,QACN,IAAA,EAAM,MAAA;AAAA,QACN,QAAA,EAAU,SAAA;AAAA,QACV,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,MAAA,EAAQ,EAAE,IAAA,EAAM,QAAA,EAAmB,MAAM,CAAC,SAAA,EAAW,SAAA,EAAW,MAAM,CAAA,EAAE;AAAA,YACxE,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAmB,aAAa,wBAAA;AAAyB;AAC5E,SACF;AAAA,QACA,UAAA,EAAY,EAAE,OAAA,EAAS,WAAA,EAAa,QAAQ,MAAA,EAAgB;AAAA,QAC5D,WAAA,EAAa;AAAA,UACX,EAAE,OAAO,uBAAA,EAAwB;AAAA,UACjC,EAAE,OAAO,+BAAA;AAAgC;AAC3C;AACF,KACF;AAAA,IACA,UAAA,EAAY,mBAAA;AAAA,IACZ,QAAA,EAAU;AAAA,MACR;AAAA,QACE,EAAA,EAAI,WAAA;AAAA,QACJ,KAAA,EAAO,WAAA;AAAA,QACP,IAAA,EAAM,YAAA;AAAA,QACN,YAAY,MAAM;AAChB,UAAA,MAAM,oBAAA,GAAiC,MACrCA,OAAAA,CAAM,aAAA,CAAcC,mBAAAA,EAAqB;AAAA,YACvC,KAAA,EAAO,oBAAA;AAAA,YACP,QAAA,EAAU,+CAAA;AAAA,YACV,eAAA,EAAiBD,OAAAA,CAAM,aAAA,CAAc,wBAAwB,CAAA;AAAA,YAC7D,UAAA,EAAY,mBAAA;AAAA,YACZ,YAAA,EAAc,WAAA;AAAA,YACd,SAAA,EAAW;AAAA,WACZ,CAAA;AACH,UAAA,oBAAA,CAAqB,WAAA,GAAc,sBAAA;AACnC,UAAA,OAAO,oBAAA;AAAA,QACT,CAAA,GAAG;AAAA,QACH,KAAA,EAAO,EAAA;AAAA,QACP,UAAA,EAAY,EAAE,OAAA,EAAS,WAAA,EAAa,QAAQ,MAAA;AAAgB;AAC9D,KACF;AAAA,IACA,OAAA,EAAS;AAAA,GACX;AACF","file":"index.js","sourcesContent":["import { createPluginContext, formatCurrency, type CurrencyConfig, type EntityLookupMap, type EntityLookup } from '@fayz-ai/saas'\nimport type { FinancialPluginLabels, ItemTypeOption } from './index'\nimport type { FinancialDataProvider } from './data/types'\nimport type { FinancialUIState } from './store'\n\n// ---------------------------------------------------------------------------\n// Resolved config — fully merged, no optionals\n// ---------------------------------------------------------------------------\n\nexport interface FinancialModules {\n payables: boolean\n receivables: boolean\n cashRegisters: boolean\n statements: boolean\n commissions: boolean\n cards: boolean\n /** Bank reconciliation (conciliação). Opt-in — enable when a bank connector imports statements. */\n reconciliation: boolean\n}\n\nexport type FinancialCurrency = CurrencyConfig\n\nexport interface LocationOption {\n id: string\n name: string\n isHQ?: boolean\n}\n\nexport interface ResolvedFinancialConfig {\n modules: FinancialModules\n labels: FinancialPluginLabels\n currency: FinancialCurrency\n itemTypes: ItemTypeOption[]\n enableServiceExecution: boolean\n contactEntity: { archetypeKind: string; label: string }\n locations: LocationOption[]\n entityLookups: EntityLookupMap\n contactLookup?: EntityLookup\n onBookingClick?: (orderId: string) => void\n}\n\nconst ctx = createPluginContext<ResolvedFinancialConfig, FinancialDataProvider, FinancialUIState>('FinancialPage')\n\nexport const FinancialContextProvider = ctx.ContextProvider\nexport const useFinancialConfig = ctx.useConfig\nexport const useFinancialProvider = ctx.useProvider\nexport const useFinancialStore = ctx.useStore\n\nexport { formatCurrency }\n","import React from 'react'\nimport { DashboardCanvas } from '@fayz-ai/ui'\n\n/**\n * Financial summary. KPIs, cash-flow chart, breakdown, overdue alerts and the\n * recent-transactions table are registered dashboard widgets (see\n * ./dashboardWidgets), rendered through the shared DashboardCanvas; the\n * total-balance KPI also surfaces on the global app home.\n */\nexport function SummaryView() {\n return <DashboardCanvas surface=\"plugin-home\" domain=\"financial\" showHeader={false} className=\"space-y-6\" />\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { FileText, CircleDashed, CircleEllipsis, CircleCheckBig, CircleAlert, Ban } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { ListView } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { PersonLink } from '@fayz-ai/saas'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { TransactionDirection, InvoiceStatus, Invoice } from '../types'\n\nconst STATUS_OPTIONS: { value: InvoiceStatus; labelKey: string; color: string; icon: React.ElementType }[] = [\n { value: 'open', labelKey: 'financial.invoice.statusOpen', color: 'bg-info-soft text-info-soft-foreground', icon: CircleDashed },\n { value: 'partial', labelKey: 'financial.invoice.statusPartial', color: 'bg-warning-soft text-warning-soft-foreground', icon: CircleEllipsis },\n { value: 'paid', labelKey: 'financial.invoice.statusPaid', color: 'bg-success-soft text-success-soft-foreground', icon: CircleCheckBig },\n { value: 'overdue', labelKey: 'financial.invoice.statusOverdue', color: 'bg-destructive-soft text-destructive-soft-foreground', icon: CircleAlert },\n { value: 'cancelled', labelKey: 'financial.invoice.statusCancelled', color: 'bg-muted text-muted-foreground', icon: Ban },\n]\n\nfunction StatusBadge({ status }: { status: string }) {\n const t = useTranslation()\n const opt = STATUS_OPTIONS.find((o) => o.value === status)\n const Icon = opt?.icon ?? CircleDashed\n return (\n <span className={`inline-flex items-center gap-0.5 rounded-full px-2 py-0.5 text-[10px] font-medium ${opt?.color ?? 'bg-muted text-muted-foreground'}`}>\n <Icon className=\"h-2.5 w-2.5\" /> {opt ? t(opt.labelKey) : status}\n </span>\n )\n}\n\nfunction useInvoiceColumns(currency: { code: string; locale: string; symbol: string }): ColumnDef<Invoice, any>[] {\n const t = useTranslation()\n return useMemo(() => [\n {\n accessorKey: 'fiscalNumber', header: '#', size: 110,\n cell: ({ getValue }) => {\n const num = getValue() as string | undefined\n return num ? <span className=\"text-xs font-mono text-muted-foreground\">#{num}</span> : <span className=\"text-muted-foreground\">—</span>\n },\n },\n {\n accessorKey: 'invoiceDate', header: t('financial.invoice.columnDate'),\n cell: ({ getValue }) => <span className=\"text-muted-foreground text-xs\">{getValue() as string}</span>,\n },\n {\n id: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => (\n <div onClick={(e) => e.stopPropagation()}>\n {row.original.contactName ? (\n <PersonLink personId={row.original.contactId} name={row.original.contactName} size=\"sm\" className=\"text-sm font-medium\" />\n ) : (\n <p className=\"font-medium\">—</p>\n )}\n {row.original.itemsSummary && <p className=\"text-[10px] text-muted-foreground truncate max-w-[250px]\">{row.original.itemsSummary}</p>}\n </div>\n ),\n },\n {\n accessorKey: 'totalAmount', header: t('financial.invoice.columnAmount'), enableSorting: true,\n cell: ({ row }) => (\n <span className={`font-medium ${row.original.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>\n {formatCurrency(row.original.totalAmount, currency)}\n </span>\n ),\n },\n {\n accessorKey: 'paidAmount', header: t('financial.invoice.columnPaid'),\n cell: ({ row }) => (\n <span className={row.original.status === 'cancelled' ? 'line-through text-muted-foreground' : 'text-muted-foreground'}>\n {formatCurrency(row.original.paidAmount, currency)}\n </span>\n ),\n },\n {\n accessorKey: 'status', header: t('financial.invoice.columnStatus'),\n cell: ({ getValue }) => <StatusBadge status={getValue() as string} />,\n },\n {\n accessorKey: 'totalInstallments', header: t('financial.invoice.columnInst'),\n cell: ({ getValue }) => <span className=\"text-muted-foreground\">{getValue() as number}</span>,\n },\n ], [currency, t])\n}\n\nexport function InvoiceListView({ direction, onNew, onEdit }: {\n direction: TransactionDirection\n onNew?: () => void\n onEdit?: (id: string) => void\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const invoices = useFinancialStore((s) => s.invoices)\n const invoicesTotal = useFinancialStore((s) => s.invoicesTotal)\n const invoicesLoading = useFinancialStore((s) => s.invoicesLoading)\n const fetchInvoices = useFinancialStore((s) => s.fetchInvoices)\n\n const [search, setSearch] = useState('')\n const [statusFilter, setStatusFilter] = useState<InvoiceStatus[]>([])\n\n useEffect(() => {\n fetchInvoices({\n direction,\n status: statusFilter.length > 0 ? statusFilter : undefined,\n search: search || undefined,\n })\n }, [direction, statusFilter, search])\n\n const filtered = invoices.filter((inv) => inv.direction === direction)\n const listTitle = direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')\n const columns = useInvoiceColumns(currency)\n const tags = useMemo(\n () => STATUS_OPTIONS.filter((o) => o.value !== 'cancelled').map((o) => ({ value: o.value, label: t(o.labelKey) })),\n [t],\n )\n\n // Summary totals from currently visible data\n const summary = useMemo(() => {\n let totalAmount = 0\n let paidAmount = 0\n let openAmount = 0\n for (const inv of filtered) {\n if (inv.status === 'cancelled') continue\n totalAmount += inv.totalAmount\n paidAmount += inv.paidAmount\n }\n openAmount = totalAmount - paidAmount\n return { totalAmount, paidAmount, openAmount }\n }, [filtered])\n\n const receivedLabel = direction === 'debit' ? t('financial.invoice.summaryPaid') : t('financial.invoice.summaryReceived')\n const pendingLabel = direction === 'debit' ? t('financial.invoice.summaryPayable') : t('financial.invoice.summaryReceivable')\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader\n title={listTitle}\n subtitle={t('financial.invoice.invoices', { count: filtered.length })}\n />\n <ListView<Invoice>\n columns={columns}\n data={filtered}\n loading={invoicesLoading}\n searchPlaceholder={t('financial.invoice.searchPlaceholder')}\n search={search}\n onSearchChange={setSearch}\n searchDebounce={0}\n tags={tags}\n activeTag={statusFilter.length === 1 ? statusFilter[0] : undefined}\n onTagChange={(v) => setStatusFilter(v ? [v as InvoiceStatus] : [])}\n newLabel={t('financial.invoice.new')}\n onNew={onNew}\n onRowClick={(row) => onEdit?.(row.id)}\n emptyIcon={FileText}\n emptyMessage={t('financial.invoice.noInvoices')}\n emptyActionLabel={onNew ? t('financial.invoice.createFirst') : undefined}\n onEmptyAction={onNew}\n />\n {filtered.length > 0 && !invoicesLoading && (\n <div className=\"flex items-center justify-end gap-6 rounded-lg border bg-muted/30 px-5 py-3 text-sm\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.summaryTotal')}</span>\n <span className=\"font-semibold\">{formatCurrency(summary.totalAmount, currency)}</span>\n </div>\n <div className=\"h-4 w-px bg-border\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{receivedLabel}</span>\n <span className=\"font-semibold text-success\">{formatCurrency(summary.paidAmount, currency)}</span>\n </div>\n <div className=\"h-4 w-px bg-border\" />\n <div className=\"flex items-center gap-2\">\n <span className=\"text-muted-foreground\">{pendingLabel}</span>\n <span className=\"font-semibold text-warning\">{formatCurrency(summary.openAmount, currency)}</span>\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React, { useState, useRef, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Plus, Trash2, Search, LayoutList, X, ChevronDown, Percent, Tag, Building2, Check, MoreVertical, Ban } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, useFinancialProvider, formatCurrency } from '../FinancialContext'\nimport { SearchSelect } from '@fayz-ai/ui'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport type { EntityLookupMap } from '@fayz-ai/saas'\nimport { SubpageHeader, useSaveBar, toast } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { TransactionDirection, CreateInvoiceItemInput, CreateMovementInput } from '../types'\n\n// ---------------------------------------------------------------------------\n// Location / unit selector\n// ---------------------------------------------------------------------------\n\nexport interface LocationOption {\n id: string\n name: string\n isHQ?: boolean\n}\n\nfunction LocationSelector({ locations, value, onChange }: {\n locations: LocationOption[]\n value: string\n onChange: (id: string) => void\n}) {\n const t = useTranslation()\n const [open, setOpen] = useState(false)\n const [search, setSearch] = useState('')\n const ref = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n function handler(e: MouseEvent) {\n if (ref.current && !ref.current.contains(e.target as Node)) setOpen(false)\n }\n document.addEventListener('mousedown', handler)\n return () => document.removeEventListener('mousedown', handler)\n }, [])\n\n const selected = locations.find((l) => l.id === value)\n const filtered = locations.filter((l) =>\n !search.trim() || l.name.toLowerCase().includes(search.toLowerCase())\n )\n\n return (\n <div ref={ref} className=\"relative\">\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.unit')}</label>\n <button\n type=\"button\"\n onClick={() => setOpen(!open)}\n className=\"w-full mt-1 flex items-center gap-2 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm text-left hover:bg-muted/30 transition-colors\"\n >\n <Building2 className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <span className=\"flex-1 truncate\">{selected?.name ?? t('financial.invoiceForm.selectUnit')}</span>\n <ChevronDown className={`h-3 w-3 text-muted-foreground transition-transform ${open ? 'rotate-180' : ''}`} />\n </button>\n\n {open && (\n <div className=\"fayz-glass-surface absolute top-full left-0 right-0 z-50 mt-1 rounded-lg border bg-popover shadow-lg overflow-hidden min-w-[260px]\">\n <div className=\"flex items-center gap-2 px-3 py-2 border-b\">\n <Building2 className=\"h-4 w-4 text-muted-foreground\" />\n <span className=\"text-sm font-semibold\">{t('financial.invoiceForm.selectUnitTitle')}</span>\n <button onClick={() => setOpen(false)} className=\"ml-auto text-muted-foreground hover:text-foreground\">\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n <div className=\"p-2 border-b\">\n <div className=\"flex items-center gap-2 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2.5 py-1.5\">\n <Search className=\"h-3.5 w-3.5 text-muted-foreground\" />\n <input\n type=\"text\"\n autoFocus\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n placeholder={t('financial.invoiceForm.searchUnit')}\n className=\"flex-1 bg-transparent text-sm outline-none\"\n />\n </div>\n </div>\n <div className=\"max-h-56 overflow-auto py-1\">\n {filtered.map((loc) => (\n <button\n key={loc.id}\n onClick={() => { onChange(loc.id); setOpen(false); setSearch('') }}\n className={`w-full flex items-center gap-3 px-3 py-2.5 text-left hover:bg-muted/50 transition-colors ${\n loc.id === value ? 'bg-muted/30' : ''\n }`}\n >\n <div className=\"flex h-8 w-8 items-center justify-center rounded-lg bg-muted shrink-0\">\n <Building2 className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n <div className=\"min-w-0\">\n <p className=\"text-sm font-medium truncate\">{loc.name}</p>\n {loc.isHQ && <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoiceForm.headquarters')}</p>}\n </div>\n </button>\n ))}\n {filtered.length === 0 && (\n <p className=\"px-3 py-4 text-center text-xs text-muted-foreground\">{t('financial.invoiceForm.noUnitsFound')}</p>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// ID helper\n// ---------------------------------------------------------------------------\n\nlet formId = 1\nfunction fid(): string { return `f${formId++}` }\n\n// ---------------------------------------------------------------------------\n// Item row — compact by default, expandable for details\n// ---------------------------------------------------------------------------\n\ninterface FormItem extends CreateInvoiceItemInput {\n _id: string\n}\n\nfunction ItemRow({ item, index, itemTypes, currency, expanded, onToggle, onUpdate, onRemove, entityLookups, showTypeSelector }: {\n item: FormItem\n index: number\n itemTypes: Array<{ value: string; label: string; icon?: string }>\n currency: { code: string; locale: string; symbol: string }\n expanded: boolean\n onToggle: () => void\n onUpdate: (data: Partial<FormItem>) => void\n onRemove: () => void\n entityLookups: EntityLookupMap\n /** Whether to show the per-row Service/Product/Other type pills. Hidden when no item type is lookup-backed. */\n showTypeSelector: boolean\n}) {\n const t = useTranslation()\n const total = item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0)\n const kindLabel = itemTypes.find((tp) => tp.value === item.itemKind)?.label ?? item.itemKind\n const hasAdjustments = (item.discount ?? 0) > 0 || (item.surcharge ?? 0) > 0\n const [showAdjustments, setShowAdjustments] = useState(hasAdjustments)\n\n // Enter in any of the row's edit fields commits the row (same as \"Done\").\n function handleFieldKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault()\n onToggle()\n }\n }\n\n return (\n <div className=\"border-b last:border-0\">\n {/* Compact row — always visible */}\n <div\n className=\"flex items-center gap-2 px-4 py-3 cursor-pointer hover:bg-muted/30 transition-colors group\"\n onClick={onToggle}\n >\n <ChevronDown className={`h-3 w-3 text-muted-foreground shrink-0 transition-transform ${expanded ? 'rotate-0' : '-rotate-90'}`} />\n <span className=\"text-[10px] font-medium text-muted-foreground w-5 shrink-0\">{index + 1}.</span>\n <span className=\"inline-flex items-center rounded px-1.5 py-0.5 text-[9px] font-medium bg-muted text-muted-foreground shrink-0\">\n {kindLabel}\n </span>\n <span className=\"text-sm truncate flex-1 min-w-0\">{item.description || <span className=\"text-muted-foreground italic\">{t('financial.invoiceForm.noDescription')}</span>}</span>\n <span className=\"text-xs text-muted-foreground shrink-0\">{item.quantity} x {formatCurrency(item.unitPrice, currency)}</span>\n {hasAdjustments && <Tag className=\"h-3 w-3 text-warning shrink-0\" />}\n <span className=\"text-sm font-semibold shrink-0 min-w-[80px] text-right\">{formatCurrency(total, currency)}</span>\n <button\n onClick={(e) => { e.stopPropagation(); onRemove() }}\n className=\"p-1 text-muted-foreground opacity-0 group-hover:opacity-100 hover:text-destructive transition-all shrink-0\"\n >\n <Trash2 className=\"h-3 w-3\" />\n </button>\n </div>\n\n {/* Expanded detail — edit fields */}\n {expanded && (\n <div className=\"px-4 pb-4 pt-1 ml-8 space-y-3 bg-muted/10\">\n {/* Type selector — hidden when no item type is lookup-backed (manual-only entry) */}\n {showTypeSelector && (\n <div className=\"flex gap-1.5\">\n {itemTypes.map((tp) => (\n <button\n key={tp.value}\n onClick={() => onUpdate({ itemKind: tp.value })}\n className={`rounded-full px-2.5 py-1 text-[10px] font-medium transition-colors ${\n item.itemKind === tp.value\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n >\n {tp.label}\n </button>\n ))}\n </div>\n )}\n\n {/* Main fields */}\n <div className=\"grid gap-3 grid-cols-12\">\n <div className=\"col-span-6 sm:col-span-7\">\n {entityLookups[item.itemKind] ? (\n <SearchSelect\n label={t('financial.invoiceForm.item')}\n value={item.referenceId ?? ''}\n displayValue={item.description}\n loadOnOpen\n onChange={(id, opt) => {\n const price = (opt?.data as any)?.price\n onUpdate({\n referenceId: id || undefined,\n description: opt?.label ?? '',\n ...(price != null ? { unitPrice: price } : {}),\n })\n }}\n onSearch={async (q) => {\n const results = await entityLookups[item.itemKind].search(q)\n return results.map((r) => ({\n id: r.id,\n label: r.label,\n subtitle: r.subtitle,\n group: r.group,\n data: r,\n }))\n }}\n placeholder={`Search ${itemTypes.find((tp) => tp.value === item.itemKind)?.label?.toLowerCase() ?? 'item'}...`}\n renderOption={(opt) => (\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm truncate\">{opt.label}</p>\n {opt.subtitle && <p className=\"text-[10px] text-muted-foreground\">{opt.subtitle}</p>}\n </div>\n )}\n />\n ) : (\n <>\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.description')}</label>\n <input\n type=\"text\"\n value={item.description}\n onChange={(e) => onUpdate({ description: e.target.value })}\n onKeyDown={handleFieldKeyDown}\n placeholder={t('financial.invoiceForm.itemDescription')}\n autoFocus\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2.5 py-1.5 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </>\n )}\n </div>\n <div className=\"col-span-2 sm:col-span-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.qty')}</label>\n <input\n type=\"number\"\n min={1}\n value={item.quantity}\n onChange={(e) => onUpdate({ quantity: Number(e.target.value) || 1 })}\n onKeyDown={handleFieldKeyDown}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-sm text-center focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n <div className=\"col-span-4\" onKeyDown={handleFieldKeyDown}>\n <CurrencyInput\n label={t('financial.invoiceForm.unitPrice')}\n value={item.unitPrice}\n onChange={(v) => onUpdate({ unitPrice: v })}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n </div>\n </div>\n\n {/* Optional adjustments toggle */}\n {!showAdjustments ? (\n <button\n onClick={() => setShowAdjustments(true)}\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n <Plus className=\"h-3 w-3\" /> {t('financial.invoiceForm.discountSurcharge')}\n </button>\n ) : (\n <div className=\"flex items-center gap-3\">\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.discount')}</label>\n <div className=\"flex items-center mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] focus-within:ring-2 focus-within:ring-primary/20\">\n <span className=\"pl-2 text-xs text-muted-foreground\">{currency.symbol}</span>\n <input\n type=\"number\"\n min={0}\n step={0.01}\n value={item.discount ?? 0}\n onChange={(e) => onUpdate({ discount: Number(e.target.value) || 0 })}\n onKeyDown={handleFieldKeyDown}\n className=\"flex-1 bg-transparent px-2 py-1 text-xs outline-none\"\n />\n </div>\n </div>\n <div className=\"flex-1\">\n <label className=\"text-[10px] font-medium text-muted-foreground\">{t('financial.invoiceForm.surcharge')}</label>\n <div className=\"flex items-center mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] focus-within:ring-2 focus-within:ring-primary/20\">\n <span className=\"pl-2 text-xs text-muted-foreground\">{currency.symbol}</span>\n <input\n type=\"number\"\n min={0}\n step={0.01}\n value={item.surcharge ?? 0}\n onChange={(e) => onUpdate({ surcharge: Number(e.target.value) || 0 })}\n onKeyDown={handleFieldKeyDown}\n className=\"flex-1 bg-transparent px-2 py-1 text-xs outline-none\"\n />\n </div>\n </div>\n <button\n onClick={() => { onUpdate({ discount: 0, surcharge: 0 }); setShowAdjustments(false) }}\n className=\"mt-3 p-1 text-muted-foreground hover:text-destructive transition-colors\"\n title={t('financial.invoiceForm.removeAdjustments')}\n >\n <X className=\"h-3.5 w-3.5\" />\n </button>\n </div>\n )}\n\n {/* Done — collapse row */}\n <div className=\"flex justify-end pt-1\">\n <button\n onClick={onToggle}\n className=\"inline-flex items-center gap-1 rounded-md px-2.5 py-1 text-[11px] text-muted-foreground hover:text-foreground hover:bg-muted/50 transition-colors\"\n >\n <Check className=\"h-3 w-3\" /> {t('financial.invoiceForm.done')}\n </button>\n </div>\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Type selector step — shown when adding a new item\n// ---------------------------------------------------------------------------\n\nfunction AddItemStep({ itemTypes, onSelect, onCancel }: {\n itemTypes: Array<{ value: string; label: string; icon?: string }>\n onSelect: (kind: string) => void\n onCancel: () => void\n}) {\n const t = useTranslation()\n return (\n <div className=\"border-b px-4 py-3 bg-primary/5 animate-in fade-in-0 slide-in-from-top-1\">\n <p className=\"text-xs font-medium text-muted-foreground mb-2\">{t('financial.invoiceForm.selectItemType')}</p>\n <div className=\"flex gap-2 flex-wrap\">\n {itemTypes.map((t) => (\n <button\n key={t.value}\n onClick={() => onSelect(t.value)}\n className=\"inline-flex items-center gap-1.5 rounded-lg border-2 border-transparent bg-card px-4 py-2 text-sm font-medium shadow-sm hover:border-primary hover:shadow-md transition-all\"\n >\n {t.label}\n </button>\n ))}\n <button\n onClick={onCancel}\n className=\"inline-flex items-center rounded-lg px-3 py-2 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('financial.invoiceForm.cancel')}\n </button>\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Installment form\n// ---------------------------------------------------------------------------\n\ninterface FormInstallment {\n _id: string\n amount: number\n dueDate: string\n}\n\n// ---------------------------------------------------------------------------\n// Invoice form view\n// ---------------------------------------------------------------------------\n\nexport function InvoiceFormView({ direction, editId, onSaved }: {\n direction: TransactionDirection\n editId?: string\n onSaved?: (id?: string) => void\n}) {\n const t = useTranslation()\n const config = useFinancialConfig()\n const { currency, itemTypes, locations } = config\n const provider = useFinancialProvider()\n\n // Whether any item type is backed by an entity lookup (product/service catalog).\n // When none are, item entry is manual-only: skip the type-select step and add\n // an \"Other\" line directly so the user can type the description right away.\n const hasItemLookups = itemTypes.some((tp) => config.entityLookups[tp.value])\n const defaultItemKind =\n itemTypes.find((tp) => tp.value === 'other')?.value ??\n itemTypes.find((tp) => !config.entityLookups[tp.value])?.value ??\n itemTypes[0]?.value ??\n 'other'\n const createInvoice = useFinancialStore((s) => s.createInvoice)\n const hasLocations = locations.length > 0\n const isEdit = !!editId\n\n const [loaded, setLoaded] = useState(!editId)\n const [loading, setLoading] = useState(!!editId)\n const [contactName, setContactName] = useState('')\n const [contactId, setContactId] = useState<string | undefined>()\n const [unitId, setUnitId] = useState(locations[0]?.id ?? '')\n const [invoiceDate, setInvoiceDate] = useState(new Date().toISOString().slice(0, 10))\n const [fiscalNumber, setFiscalNumber] = useState('')\n const [observations, setObservations] = useState('')\n const [items, setItems] = useState<FormItem[]>([])\n const [expandedItemId, setExpandedItemId] = useState<string | null>(null)\n const [addingItem, setAddingItem] = useState(false)\n const [installments, setInstallments] = useState<FormInstallment[]>([])\n const [saving, setSaving] = useState(false)\n const [menuOpen, setMenuOpen] = useState(false)\n const [confirmCancel, setConfirmCancel] = useState(false)\n const [cancelling, setCancelling] = useState(false)\n const menuRef = useRef<HTMLDivElement>(null)\n const cancelInvoice = useFinancialStore((s) => s.cancelInvoice)\n\n // Close menu on click outside\n useEffect(() => {\n if (!menuOpen) return\n function handleClick(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) setMenuOpen(false)\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [menuOpen])\n\n async function handleCancelInvoice() {\n if (!editId) return\n setCancelling(true)\n try {\n await cancelInvoice(editId)\n onSaved?.()\n } catch {\n // toast handled by store\n } finally {\n setCancelling(false)\n }\n }\n\n // Load existing invoice for edit mode\n useEffect(() => {\n if (!editId || loaded) return\n setLoading(true)\n ;(async () => {\n const invoice = await provider.getInvoiceById(editId)\n if (!invoice) return\n setContactName(invoice.contactName ?? '')\n setContactId(invoice.contactId)\n setUnitId(invoice.unitId ?? locations[0]?.id ?? '')\n setInvoiceDate(invoice.invoiceDate)\n setFiscalNumber(invoice.fiscalNumber ?? '')\n setObservations(invoice.observations ?? '')\n\n const invoiceItems = await provider.getInvoiceItems(editId)\n setItems(invoiceItems.map((it) => ({\n _id: fid(),\n itemKind: it.itemKind,\n referenceId: it.referenceId,\n description: it.description,\n quantity: it.quantity,\n unitPrice: it.unitPrice,\n discount: it.discount,\n surcharge: it.surcharge,\n })))\n\n const movements = await provider.getMovements({ direction: invoice.direction })\n const invoiceMovements = movements.data\n .filter((m) => m.invoiceId === editId && m.movementKind === 'bill')\n .sort((a, b) => (a.installmentNumber ?? 0) - (b.installmentNumber ?? 0))\n setInstallments(invoiceMovements.map((m) => ({\n _id: fid(),\n amount: m.amount,\n dueDate: m.dueDate,\n })))\n\n setLoaded(true)\n setLoading(false)\n })()\n }, [editId])\n\n const totalAmount = items.reduce((sum, it) => {\n return sum + it.quantity * it.unitPrice - (it.discount ?? 0) + (it.surcharge ?? 0)\n }, 0)\n\n // Auto-generate 1x installment when first item is added\n const prevItemCount = useRef(items.length)\n useEffect(() => {\n if (items.length > 0 && prevItemCount.current === 0 && installments.length === 0 && !isEdit) {\n // First item added — generate 1x installment\n const total = items.reduce((sum, it) => sum + it.quantity * it.unitPrice - (it.discount ?? 0) + (it.surcharge ?? 0), 0)\n if (total > 0) {\n setInstallments([{ _id: fid(), amount: total, dueDate: invoiceDate }])\n }\n }\n prevItemCount.current = items.length\n }, [items.length])\n\n // Recalculate installment amounts when total changes\n useEffect(() => {\n if (installments.length > 0 && totalAmount > 0 && !isEdit) {\n const count = installments.length\n const perInstallment = Math.floor(totalAmount * 100 / count) / 100\n const remainder = Math.round((totalAmount - perInstallment * count) * 100) / 100\n setInstallments((prev) => prev.map((inst, i) => ({\n ...inst,\n amount: i === 0 ? perInstallment + remainder : perInstallment,\n })))\n }\n }, [totalAmount])\n\n function addItemOfKind(kind: string) {\n const newItem: FormItem = {\n _id: fid(),\n itemKind: kind,\n description: '',\n quantity: 1,\n unitPrice: 0,\n }\n setItems([...items, newItem])\n setExpandedItemId(newItem._id)\n setAddingItem(false)\n }\n\n // Entry point for the \"Add Item\" / \"Add your first item\" buttons. With\n // lookup-backed types we ask which type first; otherwise we add an \"Other\"\n // line straight away so the user types directly.\n function startAddItem() {\n if (hasItemLookups) setAddingItem(true)\n else addItemOfKind(defaultItemKind)\n }\n\n function updateItem(id: string, data: Partial<FormItem>) {\n setItems(items.map((it) => it._id === id ? { ...it, ...data } : it))\n }\n\n function removeItem(id: string) {\n setItems(items.filter((it) => it._id !== id))\n }\n\n function generateInstallments(count: number) {\n if (count < 1 || totalAmount <= 0) return\n const perInstallment = Math.floor(totalAmount * 100 / count) / 100\n const remainder = Math.round((totalAmount - perInstallment * count) * 100) / 100\n const base = new Date(invoiceDate)\n const inst: FormInstallment[] = []\n for (let i = 0; i < count; i++) {\n const due = new Date(base)\n due.setMonth(due.getMonth() + i + 1)\n inst.push({\n _id: fid(),\n amount: i === 0 ? perInstallment + remainder : perInstallment,\n dueDate: due.toISOString().slice(0, 10),\n })\n }\n setInstallments(inst)\n }\n\n async function handleSave() {\n if (items.length === 0) { toast.error(t('common.formIncomplete')); return }\n setSaving(true)\n try {\n const movInputs: CreateMovementInput[] = installments.map((inst, i) => ({\n direction,\n movementKind: 'bill' as const,\n amount: inst.amount,\n dueDate: inst.dueDate,\n installmentNumber: i + 1,\n }))\n\n if (movInputs.length === 0) {\n movInputs.push({\n direction,\n movementKind: 'bill',\n amount: totalAmount,\n dueDate: invoiceDate,\n installmentNumber: 1,\n })\n }\n\n if (isEdit && editId) {\n await provider.updateInvoice(editId, {\n invoiceDate,\n contactId,\n contactName: contactName || undefined,\n unitId: unitId || undefined,\n fiscalNumber: fiscalNumber || undefined,\n observations: observations || undefined,\n totalAmount,\n })\n onSaved?.(editId)\n } else {\n const invoice = await createInvoice({\n direction,\n invoiceDate,\n contactId,\n contactName: contactName || undefined,\n unitId: unitId || undefined,\n fiscalNumber: fiscalNumber || undefined,\n observations: observations || undefined,\n items: items.map(({ _id, ...rest }) => rest),\n installments: movInputs,\n })\n onSaved?.(invoice.id)\n }\n } finally {\n setSaving(false)\n }\n }\n\n const fields = {\n contactName,\n contactId,\n unitId,\n invoiceDate,\n fiscalNumber,\n observations,\n items: items.map(({ _id, ...rest }) => rest),\n installments: installments.map(({ _id, ...rest }) => rest),\n }\n const snapshot = useRef<string | null>(null)\n useEffect(() => {\n if (loaded && snapshot.current === null) snapshot.current = JSON.stringify(fields)\n }, [loaded])\n const dirty = snapshot.current !== null && JSON.stringify(fields) !== snapshot.current\n useSaveBar({\n dirty,\n saving,\n onSave: () => { void handleSave() },\n onDiscard: () => onSaved?.(),\n saveLabel: t('financial.invoiceForm.save'),\n })\n\n const title = direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')\n const subtitle = isEdit ? t('financial.invoiceForm.editing') : t('financial.invoiceForm.creating')\n\n return (\n <div className=\"space-y-6\">\n <SubpageHeader\n title={title}\n subtitle={subtitle}\n onBack={onSaved}\n parentLabel={direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables')}\n actions={\n isEdit ? (\n <div className=\"flex items-center gap-2\">\n <div className=\"relative\" ref={menuRef}>\n <Button\n variant=\"outline\"\n size=\"icon\"\n onClick={() => setMenuOpen(!menuOpen)}\n aria-label=\"More actions\"\n >\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {menuOpen && (\n <div className=\"fayz-glass-surface absolute right-0 top-full mt-1 w-44 rounded-lg border bg-popover shadow-md z-20 py-1\" style={{ animation: 'field-slide-in 150ms ease-out' }}>\n <button\n onClick={() => { setConfirmCancel(true); setMenuOpen(false) }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-xs text-destructive hover:bg-destructive/10 transition-colors\"\n >\n <Ban className=\"h-3.5 w-3.5\" /> {t('financial.invoiceForm.cancelInvoice')}\n </button>\n </div>\n )}\n </div>\n </div>\n ) : null\n }\n />\n\n {/* Top fields: Pay to + Unit + Date + Fiscal Number */}\n <div className=\"rounded-lg border bg-card shadow-sm p-5\">\n <div className={`grid gap-4 ${hasLocations ? 'sm:grid-cols-12' : 'sm:grid-cols-10'}`}>\n <div className={hasLocations ? 'sm:col-span-4' : 'sm:col-span-4'}>\n <SearchSelect\n label={direction === 'debit' ? t('financial.invoiceForm.payTo') : t('financial.invoiceForm.receiveFrom')}\n required\n value={contactId ?? ''}\n displayValue={contactName}\n onChange={(id, opt) => { setContactId(id || undefined); setContactName(opt?.label ?? '') }}\n onSearch={async (q) => {\n if (!config.contactLookup) return []\n const results = await config.contactLookup.search(q)\n return results.map((r) => ({ id: r.id, label: r.label, subtitle: r.subtitle, group: r.group, data: r }))\n }}\n placeholder={t('financial.invoiceForm.searchType')}\n />\n </div>\n {hasLocations && (\n <div className=\"sm:col-span-3\">\n <LocationSelector\n locations={locations}\n value={unitId}\n onChange={setUnitId}\n />\n </div>\n )}\n <div className={hasLocations ? 'sm:col-span-2' : 'sm:col-span-3'}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.date')}</label>\n <DatePicker value={invoiceDate} onChange={setInvoiceDate} className=\"mt-1\" />\n </div>\n <div className={hasLocations ? 'sm:col-span-3' : 'sm:col-span-3'}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.fiscalNumber')}</label>\n <input\n type=\"text\"\n value={fiscalNumber}\n onChange={(e) => setFiscalNumber(e.target.value)}\n placeholder={t('financial.invoiceForm.fiscalNumber')}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n </div>\n </div>\n\n {/* Items + Installments side by side */}\n {loading ? (\n <div className=\"grid gap-4 lg:grid-cols-3\">\n <div className=\"lg:col-span-2 rounded-lg border bg-card shadow-sm overflow-hidden\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <LayoutList className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.items')}</h3>\n </div>\n </div>\n <div className=\"p-4 space-y-3\">\n {[1, 2].map((i) => (\n <div key={i} className=\"flex items-center gap-3 px-2 py-3\">\n <div className=\"h-4 w-4 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-8 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 flex-1 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-20 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"px-5 py-3 border-b\">\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.installments')}</h3>\n </div>\n <div className=\"p-4 space-y-3\">\n {[1, 2].map((i) => (\n <div key={i} className=\"rounded border p-2.5 space-y-2\">\n <div className=\"flex justify-between\">\n <div className=\"h-3 w-6 rounded bg-muted animate-pulse\" />\n <div className=\"h-4 w-16 rounded bg-muted animate-pulse\" />\n </div>\n <div className=\"h-7 rounded bg-muted animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n ) : (\n <div className=\"grid gap-4 lg:grid-cols-3\">\n {/* Items (left 2/3) */}\n <div className=\"lg:col-span-2 rounded-lg border bg-card shadow-sm overflow-hidden flex flex-col\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <LayoutList className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.items')}</h3>\n </div>\n <button\n onClick={startAddItem}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors\"\n >\n <Plus className=\"h-3 w-3\" /> {t('financial.invoiceForm.addItem')}\n </button>\n </div>\n\n {/* Content area — grows to push footer down */}\n <div className=\"flex-1\">\n {/* Type selector step */}\n {addingItem && (\n <AddItemStep\n itemTypes={itemTypes}\n onSelect={addItemOfKind}\n onCancel={() => setAddingItem(false)}\n />\n )}\n\n {/* Item rows */}\n {items.length === 0 && !addingItem ? (\n <div className=\"py-10 text-center\">\n <LayoutList className=\"h-8 w-8 text-muted-foreground/30 mx-auto mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.invoiceForm.noItems')}</p>\n <button onClick={startAddItem} className=\"text-xs text-primary hover:underline mt-1\">\n {t('financial.invoiceForm.addFirstItem')}\n </button>\n </div>\n ) : (\n items.map((item, i) => (\n <ItemRow\n key={item._id}\n item={item}\n index={i}\n itemTypes={itemTypes}\n currency={currency}\n expanded={expandedItemId === item._id}\n onToggle={() => setExpandedItemId(expandedItemId === item._id ? null : item._id)}\n onUpdate={(data) => updateItem(item._id, data)}\n onRemove={() => { removeItem(item._id); if (expandedItemId === item._id) setExpandedItemId(null) }}\n entityLookups={config.entityLookups}\n showTypeSelector={hasItemLookups}\n />\n ))\n )}\n </div>\n\n {/* Footer total — sticks to bottom */}\n {items.length > 0 && (\n <div className=\"px-4 py-3 border-t bg-muted/20 flex justify-between items-center mt-auto\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.itemCount', { count: items.length, plural: items.length !== 1 ? 's' : '' })}</span>\n <div className=\"text-right\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.total')} </span>\n <span className=\"text-lg font-bold\">{formatCurrency(totalAmount, currency)}</span>\n </div>\n </div>\n )}\n </div>\n\n {/* Installments (right 1/3) */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center justify-between px-5 py-3 border-b\">\n <h3 className=\"text-sm font-semibold\">Installments</h3>\n </div>\n <div className=\"p-4 space-y-3\">\n {/* Quick split buttons */}\n <div className=\"flex gap-1.5 flex-wrap\">\n {[1, 2, 3, 6, 12].map((n) => (\n <button\n key={n}\n onClick={() => generateInstallments(n)}\n disabled={totalAmount <= 0}\n className={`rounded-full px-2.5 py-1 text-[10px] font-medium transition-colors disabled:opacity-30 ${\n installments.length === n\n ? 'bg-primary text-primary-foreground'\n : 'bg-muted text-muted-foreground hover:bg-muted/80'\n }`}\n >\n {n}x\n </button>\n ))}\n </div>\n\n {installments.length === 0 ? (\n <p className=\"text-xs text-muted-foreground py-4 text-center\">\n {totalAmount <= 0 ? t('financial.invoiceForm.addItemsFirst') : t('financial.invoiceForm.selectInstallments')}\n </p>\n ) : (\n <div className=\"space-y-2\">\n {installments.map((inst, i) => (\n <div key={inst._id} className=\"rounded border p-2.5 space-y-1.5\">\n <div className=\"flex items-center justify-between\">\n <span className=\"text-[10px] font-medium text-muted-foreground\">#{i + 1}</span>\n <span className=\"text-sm font-semibold\">{formatCurrency(inst.amount, currency)}</span>\n </div>\n <DatePicker\n value={inst.dueDate}\n onChange={(v) => {\n const updated = [...installments]\n updated[i] = { ...inst, dueDate: v }\n setInstallments(updated)\n }}\n />\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n </div>\n )}\n\n {/* Observations */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.invoiceForm.observations')}</label>\n <textarea\n value={observations}\n onChange={(e) => setObservations(e.target.value)}\n placeholder={t('financial.invoiceForm.additionalNotes')}\n rows={2}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring resize-none\"\n />\n </div>\n\n {/* Cancel confirmation */}\n {confirmCancel && createPortal(\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\" onClick={() => setConfirmCancel(false)}>\n <div className=\"w-full max-w-sm rounded-modal border bg-card shadow-lg mx-4 p-5\" onClick={(e) => e.stopPropagation()} style={{ animation: 'field-slide-in 200ms ease-out' }}>\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-destructive/10 shrink-0\">\n <Ban className=\"h-5 w-5 text-destructive\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('financial.invoiceForm.cancelInvoice')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('financial.invoiceForm.cancelConfirm')}</p>\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground mb-4\">\n {t('financial.invoiceForm.cancelDesc')}\n </p>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setConfirmCancel(false)}>\n {t('financial.invoiceForm.keepInvoice')}\n </Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={handleCancelInvoice} disabled={cancelling}>\n <Ban className=\"h-3.5 w-3.5\" />\n {cancelling ? t('financial.invoiceForm.cancelling') : t('financial.invoiceForm.yesCancel')}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )}\n\n <style>{`\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n","import React, { useState, useEffect, useMemo } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, Check, Banknote, QrCode, CreditCard, Building2, ArrowRightLeft, FileCheck, Pencil } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { DatePicker } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\nimport type { FinancialMovement, PaymentMethodType, BankAccountType } from '../types'\n\n// Which bank-account types make sense for each payment type — mirrors beautyplace's\n// payment_method_types.allowed_account_types. Used to filter + default the destination\n// account so every payment lands in a real account (and shows up in that account's extract).\nconst ACCOUNT_TYPES_FOR_TX: Record<string, BankAccountType[]> = {\n cash: ['cash_register'],\n credit_card: ['credit_card', 'bank_account'],\n debit_card: ['bank_account', 'cash_register'],\n pix: ['bank_account', 'digital_wallet'],\n bank_transfer: ['bank_account'],\n check: ['bank_account'],\n voucher: ['bank_account', 'digital_wallet'],\n}\n\nconst TYPE_ICONS: Record<string, React.ElementType> = {\n cash: Banknote,\n pix: QrCode,\n credit_card: CreditCard,\n debit_card: CreditCard,\n bank_transfer: ArrowRightLeft,\n check: FileCheck,\n}\n\nconst TYPE_COLORS: Record<string, string> = {\n cash: 'border-success/30 bg-success/5 hover:bg-success/10 data-[active=true]:border-success data-[active=true]:bg-success/15',\n pix: 'border-teal-500/30 bg-teal-500/5 hover:bg-teal-500/10 data-[active=true]:border-teal-500 data-[active=true]:bg-teal-500/15',\n credit_card: 'border-info/30 bg-info/5 hover:bg-info/10 data-[active=true]:border-info data-[active=true]:bg-info/15',\n debit_card: 'border-magic/30 bg-magic/5 hover:bg-magic/10 data-[active=true]:border-magic data-[active=true]:bg-magic/15',\n bank_transfer: 'border-warning/30 bg-warning/5 hover:bg-warning/10 data-[active=true]:border-warning data-[active=true]:bg-warning/15',\n check: 'border-border bg-muted/40 hover:bg-muted/60 data-[active=true]:border-foreground data-[active=true]:bg-muted',\n}\n\nconst ICON_COLORS: Record<string, string> = {\n cash: 'text-success',\n pix: 'text-teal-500',\n credit_card: 'text-info',\n debit_card: 'text-magic',\n bank_transfer: 'text-warning',\n check: 'text-muted-foreground',\n}\n\nexport function PaymentModal({ movement, onClose, onPaid }: {\n movement: FinancialMovement\n onClose: () => void\n onPaid: () => void\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const payMovement = useFinancialStore((s) => s.payMovement)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n\n const remaining = movement.amount - movement.paidAmount\n const [amount, setAmount] = useState(remaining)\n const [paymentDate, setPaymentDate] = useState(new Date().toISOString().slice(0, 10))\n const [selectedTypeId, setSelectedTypeId] = useState('')\n const [paymentMethodId, setPaymentMethodId] = useState('')\n const [bankAccountId, setBankAccountId] = useState('')\n const [cardBrand, setCardBrand] = useState('')\n const [cardInstallments, setCardInstallments] = useState(1)\n const [notes, setNotes] = useState('')\n const [saving, setSaving] = useState(false)\n const [visible, setVisible] = useState(false)\n const [expandMethodPicker, setExpandMethodPicker] = useState(true)\n\n useEffect(() => {\n fetchBankAccounts()\n fetchPaymentMethods()\n requestAnimationFrame(() => setVisible(true))\n }, [])\n\n const selectedType = useMemo(() =>\n paymentMethodTypes.find((tp) => tp.id === selectedTypeId),\n [paymentMethodTypes, selectedTypeId]\n )\n\n const txType = selectedType?.transactionType ?? ''\n\n const filteredMethods = useMemo(() =>\n paymentMethods.filter((m) => m.paymentMethodTypeId === selectedTypeId),\n [paymentMethods, selectedTypeId]\n )\n\n const needsCard = txType === 'credit_card' || txType === 'debit_card'\n const needsCardInstallments = txType === 'credit_card'\n\n // Accounts eligible for the selected payment type. Prefer the type's configured\n // allowedAccountTypes, else the tx-type mapping, else all active accounts.\n const eligibleAccounts = useMemo(() => {\n const allowed = (selectedType?.allowedAccountTypes && selectedType.allowedAccountTypes.length)\n ? selectedType.allowedAccountTypes\n : ACCOUNT_TYPES_FOR_TX[txType]\n if (!allowed || !allowed.length) return bankAccounts\n const filtered = bankAccounts.filter((a) => allowed.includes(a.accountType))\n return filtered.length ? filtered : bankAccounts\n }, [bankAccounts, selectedType, txType])\n\n // Auto-pick a sensible destination account so the payment is always linked to one.\n useEffect(() => {\n if (selectedTypeId && !bankAccountId && eligibleAccounts.length) {\n setBankAccountId(eligibleAccounts[0].id)\n }\n }, [selectedTypeId, eligibleAccounts])\n\n function handleSelectType(typeId: string) {\n setSelectedTypeId(typeId)\n setExpandMethodPicker(false)\n setPaymentMethodId('')\n setBankAccountId('')\n setCardBrand('')\n setCardInstallments(1)\n }\n\n function handleClose() {\n setVisible(false)\n setTimeout(onClose, 200)\n }\n\n // Enter anywhere in the modal submits (unless typing in a textarea / Shift+Enter).\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key !== 'Enter' || e.shiftKey) return\n if ((e.target as HTMLElement).tagName === 'TEXTAREA') return\n e.preventDefault()\n if (amount > 0 && selectedTypeId && bankAccountId && !saving) void handlePay()\n }\n\n async function handlePay() {\n if (amount <= 0 || !selectedTypeId || !bankAccountId) return\n setSaving(true)\n try {\n await payMovement({\n movementId: movement.id,\n amount,\n paymentDate,\n paymentMethodId: paymentMethodId || undefined,\n paymentMethodTypeId: selectedTypeId || undefined,\n bankAccountId: bankAccountId || undefined,\n cardBrand: needsCard ? cardBrand || undefined : undefined,\n cardInstallments: needsCardInstallments ? cardInstallments : undefined,\n notes: notes.trim() || undefined,\n })\n setVisible(false)\n setTimeout(onPaid, 200)\n } catch {\n // toast handled by store\n } finally {\n setSaving(false)\n }\n }\n\n const SelectedIcon = selectedType ? (TYPE_ICONS[txType] ?? Banknote) : null\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center transition-colors duration-200\"\n style={{ backgroundColor: visible ? 'rgba(0,0,0,0.5)' : 'rgba(0,0,0,0)' }}\n onClick={handleClose}\n >\n <div\n className=\"w-full max-w-md rounded-modal border bg-card shadow-lg mx-4 transition-all duration-200 max-h-[90vh] overflow-y-auto\"\n style={{\n opacity: visible ? 1 : 0,\n transform: visible ? 'scale(1) translateY(0)' : 'scale(0.95) translateY(8px)',\n }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b sticky top-0 bg-card z-10\">\n <div>\n <h3 className=\"text-base font-semibold\">{t('financial.payment.title')}</h3>\n <p className=\"text-xs text-muted-foreground\">\n {t('financial.payment.installment', { number: String(movement.installmentNumber ?? 1) })} &middot; {t('financial.payment.remaining', { amount: formatCurrency(remaining, currency) })}\n </p>\n </div>\n <button onClick={handleClose} className=\"p-1 text-muted-foreground hover:text-foreground transition-colors\">\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"px-5 py-4 space-y-4\">\n {/* Payment method type selector */}\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.method')}</label>\n\n {/* Collapsed: show selected as inline chip */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: selectedTypeId && !expandMethodPicker ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {selectedType && (\n <button\n onClick={() => setExpandMethodPicker(true)}\n className={`flex items-center gap-2 mt-1.5 w-full rounded-lg border px-3 py-2.5 text-left transition-colors hover:bg-muted/30 ${TYPE_COLORS[txType] ?? ''}`}\n data-active=\"true\"\n >\n {SelectedIcon && <SelectedIcon className={`h-4 w-4 ${ICON_COLORS[txType] ?? ''}`} />}\n <span className=\"text-sm font-medium flex-1\">{selectedType?.name}</span>\n <Pencil className=\"h-3 w-3 text-muted-foreground\" />\n </button>\n )}\n </div>\n </div>\n\n {/* Expanded: full grid */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: expandMethodPicker ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n {paymentMethodTypes.length === 0 ? (\n <div className=\"rounded-lg border border-dashed border-input bg-muted/30 px-3 py-3 text-center mt-1.5\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.payment.noMethods')}</p>\n <a href=\"#/financial/settings\" className=\"mt-1.5 inline-block text-xs font-medium text-primary hover:underline\">\n {t('financial.payment.configureMethods')} →\n </a>\n </div>\n ) : (\n <div className=\"grid grid-cols-3 gap-2 mt-1.5\">\n {paymentMethodTypes.map((type) => {\n const tt = type.transactionType ?? ''\n const Icon = TYPE_ICONS[tt] ?? Banknote\n const isActive = selectedTypeId === type.id\n return (\n <button\n key={type.id}\n data-active={isActive}\n onClick={() => handleSelectType(type.id)}\n className={`flex flex-col items-center gap-1.5 rounded-lg border px-2 py-3 text-center transition-all ${TYPE_COLORS[tt] ?? TYPE_COLORS.cash}`}\n >\n <Icon className={`h-5 w-5 ${isActive ? ICON_COLORS[tt] ?? '' : 'text-muted-foreground'}`} />\n <span className={`text-[11px] font-medium leading-tight ${isActive ? 'text-foreground' : 'text-muted-foreground'}`}>{type.name}</span>\n </button>\n )\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Form fields — only after method selected */}\n {selectedTypeId && (\n <div key={selectedTypeId} className=\"space-y-4\">\n {/* Amount + Date side by side */}\n <div className=\"grid grid-cols-2 gap-3 stagger-field\" style={{ animationDelay: '0ms' }}>\n <CurrencyInput\n label={t('financial.payment.amount')}\n value={amount}\n onChange={setAmount}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.date')}</label>\n <DatePicker value={paymentDate} onChange={setPaymentDate} className=\"mt-1\" />\n </div>\n </div>\n\n {/* Specific payment method */}\n {filteredMethods.length > 0 && (\n <div className=\"stagger-field\" style={{ animationDelay: '50ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">\n {needsCard ? t('financial.payment.card') : t('financial.payment.account')}\n </label>\n <select value={paymentMethodId} onChange={(e) => setPaymentMethodId(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.select')}</option>\n {filteredMethods.map((m) => <option key={m.id} value={m.id}>{m.name}</option>)}\n </select>\n </div>\n )}\n\n {/* Card fields side by side */}\n {needsCard && (\n <div className={`grid gap-3 stagger-field ${needsCardInstallments ? 'grid-cols-2' : 'grid-cols-1'}`} style={{ animationDelay: '100ms' }}>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.cardBrand')}</label>\n <select value={cardBrand} onChange={(e) => setCardBrand(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.selectBrand')}</option>\n {['Visa', 'Mastercard', 'American Express', 'Elo', 'Hipercard', 'Diners Club'].map((b) => (\n <option key={b} value={b}>{b}</option>\n ))}\n </select>\n </div>\n {needsCardInstallments && (\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.cardInstallments')}</label>\n <select value={cardInstallments} onChange={(e) => setCardInstallments(Number(e.target.value))} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n {Array.from({ length: 12 }, (_, i) => i + 1).map((n) => (\n <option key={n} value={n}>{n}x {n > 1 ? formatCurrency(amount / n, currency) : ''}</option>\n ))}\n </select>\n </div>\n )}\n </div>\n )}\n\n {/* Destination account — always shown so every payment links to an account */}\n <div className=\"stagger-field\" style={{ animationDelay: '100ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.bankAccount')}</label>\n {eligibleAccounts.length === 0 ? (\n <div className=\"mt-1 rounded-lg border border-dashed border-input bg-muted/30 px-3 py-2.5 text-center\">\n <p className=\"text-xs text-muted-foreground\">{t('financial.payment.noAccounts')}</p>\n <a href=\"#/settings/financial/bank-accounts\" className=\"mt-1 inline-block text-xs font-medium text-primary hover:underline\">\n {t('financial.payment.configureAccounts')} →\n </a>\n </div>\n ) : (\n <select value={bankAccountId} onChange={(e) => setBankAccountId(e.target.value)} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\">\n <option value=\"\">{t('financial.payment.selectAccount')}</option>\n {eligibleAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n )}\n </div>\n\n {/* Notes */}\n <div className=\"stagger-field\" style={{ animationDelay: '150ms' }}>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.payment.notes')}</label>\n <input type=\"text\" value={notes} onChange={(e) => setNotes(e.target.value)} placeholder={t('financial.payment.optionalNotes')} className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\" />\n </div>\n </div>\n )}\n </div>\n\n {/* Keyframe for staggered field entrance */}\n <style>{`\n .stagger-field {\n animation: field-slide-in 250ms ease-out both;\n }\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 px-5 py-4 border-t sticky bottom-0 bg-card\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleClose}>\n {t('financial.payment.cancel')}\n </Button>\n <Button\n variant=\"default\"\n size=\"sm\"\n onClick={handlePay}\n disabled={amount <= 0 || !selectedTypeId || !bankAccountId || saving}\n >\n <Check className=\"h-3.5 w-3.5\" />\n {saving ? t('financial.payment.processing') : t('financial.payment.payAmount', { amount: formatCurrency(amount, currency) })}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )\n}\n","import React, { useEffect, useState, useRef } from 'react'\nimport { createPortal } from 'react-dom'\nimport { Pencil, DollarSign, FileText, Calendar, Hash, User, X, MoreVertical, Ban, ChevronDown, CreditCard, Banknote, Building2, CircleDashed, CircleEllipsis, CircleCheckBig, CircleAlert, CalendarDays, ExternalLink } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { PersonLink } from '@fayz-ai/saas'\nimport { useFinancialConfig, useFinancialStore, useFinancialProvider, formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport { SubpageHeader, DataTable } from '@fayz-ai/ui'\nimport { PaymentModal } from '../components/PaymentModal'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Button } from '@fayz-ai/ui'\nimport type { Invoice, InvoiceItem, FinancialMovement, TransactionDirection } from '../types'\n\nconst STATUS_COLORS: Record<string, { bg: string; icon: React.ElementType; labelKey: string }> = {\n open: { bg: 'bg-info-soft text-info-soft-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusOpen' },\n pending: { bg: 'bg-warning-soft text-warning-soft-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusPending' },\n partial: { bg: 'bg-warning-soft text-warning-soft-foreground', icon: CircleEllipsis, labelKey: 'financial.invoice.statusPartial' },\n paid: { bg: 'bg-success-soft text-success-soft-foreground', icon: CircleCheckBig, labelKey: 'financial.invoice.statusPaid' },\n overdue: { bg: 'bg-destructive-soft text-destructive-soft-foreground', icon: CircleAlert, labelKey: 'financial.invoice.statusOverdue' },\n draft: { bg: 'bg-muted text-muted-foreground', icon: CircleDashed, labelKey: 'financial.invoice.statusDraft' },\n cancelled: { bg: 'bg-muted text-muted-foreground', icon: Ban, labelKey: 'financial.invoice.statusCancelled' },\n}\n\nexport function InvoiceDetailView({ invoiceId, direction, onBack, onEdit, backLabel }: {\n invoiceId: string\n direction: TransactionDirection\n onBack: () => void\n onEdit: () => void\n /** Label for the back link — defaults to the invoice's parent list (payables/receivables). */\n backLabel?: string\n}) {\n const t = useTranslation()\n const config = useFinancialConfig()\n const { currency } = config\n // Back link target: where the user actually came from, else the parent list.\n const parentLabel = backLabel ?? (direction === 'debit' ? t('financial.nav.payables') : t('financial.nav.receivables'))\n const provider = useFinancialProvider()\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const [detailsLoaded, setDetailsLoaded] = useState(false)\n const [detailsLoading, setDetailsLoading] = useState(false)\n\n const [invoice, setInvoice] = useState<Invoice | null>(null)\n const [items, setItems] = useState<InvoiceItem[]>([])\n const [movements, setMovements] = useState<FinancialMovement[]>([])\n const [payments, setPayments] = useState<FinancialMovement[]>([])\n const [loading, setLoading] = useState(true)\n const [payingMovement, setPayingMovement] = useState<FinancialMovement | null>(null)\n const [expandedMovId, setExpandedMovId] = useState<string | null>(null)\n const [menuOpen, setMenuOpen] = useState(false)\n const [confirmCancel, setConfirmCancel] = useState(false)\n const [cancelling, setCancelling] = useState(false)\n const menuRef = useRef<HTMLDivElement>(null)\n const cancelInvoice = useFinancialStore((s) => s.cancelInvoice)\n\n async function loadData() {\n setLoading(true)\n const [inv, invItems, movResult] = await Promise.all([\n provider.getInvoiceById(invoiceId),\n provider.getInvoiceItems(invoiceId),\n provider.getMovements({ direction }),\n ])\n setInvoice(inv)\n setItems(invItems)\n setMovements(\n movResult.data\n .filter((m) => m.invoiceId === invoiceId && m.movementKind === 'bill')\n .sort((a, b) => (a.installmentNumber ?? 0) - (b.installmentNumber ?? 0))\n )\n // Individual cash events (one row per payment) — listed under each installment.\n setPayments(\n movResult.data\n .filter((m) => m.invoiceId === invoiceId && m.movementKind === 'payment')\n .sort((a, b) => (a.paymentDate ?? '').localeCompare(b.paymentDate ?? ''))\n )\n setLoading(false)\n }\n\n useEffect(() => { loadData() }, [invoiceId])\n\n // Close menu on click outside\n useEffect(() => {\n if (!menuOpen) return\n function handleClick(e: MouseEvent) {\n if (menuRef.current && !menuRef.current.contains(e.target as Node)) setMenuOpen(false)\n }\n document.addEventListener('mousedown', handleClick)\n return () => document.removeEventListener('mousedown', handleClick)\n }, [menuOpen])\n\n async function loadPaymentDetails() {\n if (detailsLoaded || detailsLoading) return\n setDetailsLoading(true)\n await Promise.all([fetchPaymentMethods(), fetchBankAccounts()])\n setDetailsLoaded(true)\n setDetailsLoading(false)\n }\n\n function handleExpandMov(movId: string) {\n const opening = expandedMovId !== movId\n setExpandedMovId(opening ? movId : null)\n if (opening) loadPaymentDetails()\n }\n\n async function handleCancel() {\n setCancelling(true)\n try {\n await cancelInvoice(invoiceId)\n await loadData()\n setConfirmCancel(false)\n setMenuOpen(false)\n } catch {\n // toast handled by store\n } finally {\n setCancelling(false)\n }\n }\n\n if (loading) {\n return (\n <div className=\"space-y-5\">\n <SubpageHeader title=\"\" onBack={onBack} parentLabel={parentLabel} />\n\n {/* Invoice card skeleton */}\n <div className=\"rounded-xl border bg-card shadow-sm overflow-hidden\">\n <div className=\"h-1 bg-muted animate-pulse\" />\n <div className=\"p-5 pb-4\">\n <div className=\"flex items-start justify-between\">\n <div className=\"flex items-start gap-3\">\n <div className=\"h-10 w-10 rounded-lg bg-muted/40 animate-pulse\" />\n <div className=\"space-y-2\">\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-6 w-32 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n <div className=\"h-6 w-20 rounded-full bg-muted/40 animate-pulse\" />\n </div>\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3 mt-4 pt-4 border-t\">\n {[1, 2, 3, 4].map((i) => (\n <div key={i} className=\"flex items-center gap-2\">\n <div className=\"h-3.5 w-3.5 rounded bg-muted/30 animate-pulse\" />\n <div className=\"space-y-1\">\n <div className=\"h-2 w-10 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-16 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n ))}\n </div>\n </div>\n\n {/* Items table skeleton */}\n <div className=\"px-5 pt-3 pb-1.5\">\n <div className=\"h-3 w-12 rounded bg-muted/30 animate-pulse\" />\n </div>\n <div className=\"px-5\">\n <div className=\"border-b py-2 flex justify-between\">\n <div className=\"h-2 w-24 rounded bg-muted/20 animate-pulse\" />\n <div className=\"h-2 w-16 rounded bg-muted/20 animate-pulse\" />\n </div>\n {[1, 2].map((i) => (\n <div key={i} className=\"flex items-center justify-between py-2.5 border-b last:border-0\">\n <div className=\"flex items-center gap-2\">\n <div className=\"h-3 w-4 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-5 w-14 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-28 rounded bg-muted/40 animate-pulse\" />\n </div>\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n </div>\n ))}\n </div>\n <div className=\"px-5 py-3 border-t bg-muted/10 flex justify-end\">\n <div className=\"h-4 w-32 rounded bg-muted/40 animate-pulse\" />\n </div>\n </div>\n\n {/* Installments skeleton */}\n <div className=\"space-y-2\">\n <div className=\"h-4 w-28 rounded bg-muted/30 animate-pulse\" />\n <div className=\"rounded-lg border bg-card shadow-sm divide-y\">\n {[1].map((i) => (\n <div key={i} className=\"flex items-center gap-3 px-4 py-3\">\n <div className=\"h-3 w-5 rounded bg-muted/30 animate-pulse\" />\n <div className=\"flex-1 space-y-1.5\">\n <div className=\"h-4 w-24 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-2 w-32 rounded bg-muted/30 animate-pulse\" />\n </div>\n <div className=\"h-7 w-16 rounded-lg bg-muted/30 animate-pulse\" />\n </div>\n ))}\n </div>\n </div>\n </div>\n )\n }\n\n if (!invoice) {\n return (\n <div className=\"space-y-6\">\n <SubpageHeader title={t('financial.invoice.notFound')} onBack={onBack} parentLabel={parentLabel} />\n <p className=\"text-sm text-muted-foreground\">{t('financial.invoice.notFoundDesc')}</p>\n </div>\n )\n }\n\n const statusConfig = STATUS_COLORS[invoice.status] ?? STATUS_COLORS.pending\n const StatusIcon = statusConfig.icon\n const totalPaid = movements.reduce((sum, m) => sum + m.paidAmount, 0)\n const totalRemaining = invoice.totalAmount - totalPaid\n const subtotal = items.reduce((sum, it) => sum + it.quantity * it.unitPrice, 0)\n const totalDiscount = items.reduce((sum, it) => sum + it.discount, 0)\n const totalSurcharge = items.reduce((sum, it) => sum + it.surcharge, 0)\n\n const itemColumns: ColumnDef<InvoiceItem, any>[] = [\n {\n id: 'index', header: t('financial.invoice.columnNumber'),\n cell: ({ row }) => <span className=\"text-xs text-muted-foreground\">{row.index + 1}</span>,\n },\n {\n accessorKey: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => (\n <div className=\"flex items-center gap-1.5\">\n <span className=\"inline-flex items-center rounded px-1.5 py-0.5 text-[9px] font-medium bg-muted text-muted-foreground capitalize\">{row.original.itemKind}</span>\n <span className=\"truncate\">{row.original.description}</span>\n </div>\n ),\n },\n {\n accessorKey: 'quantity', header: () => <span className=\"block text-right\">{t('financial.invoice.columnQty')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right text-xs tabular-nums\">{getValue() as number}</span>,\n },\n {\n accessorKey: 'unitPrice', header: () => <span className=\"block text-right\">{t('financial.invoice.columnUnitPrice')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right text-xs tabular-nums\">{formatCurrency(getValue() as number, currency)}</span>,\n },\n {\n accessorKey: 'totalAmount', header: () => <span className=\"block text-right\">{t('financial.invoice.columnTotal')}</span>,\n cell: ({ getValue }) => <span className=\"block text-right font-medium tabular-nums\">{formatCurrency(getValue() as number, currency)}</span>,\n },\n ]\n\n return (\n <div className=\"space-y-5\">\n <SubpageHeader\n title={invoice.fiscalNumber ? `#${invoice.fiscalNumber}` : invoice.contactName ?? invoice.invoiceDate}\n onBack={onBack}\n parentLabel={parentLabel}\n actions={\n <div className=\"flex items-center gap-1.5\">\n {invoice.status !== 'cancelled' && invoice.status !== 'paid' && (\n <Button variant=\"outline\" size=\"sm\" onClick={onEdit}>\n <Pencil className=\"h-3.5 w-3.5\" /> {t('financial.invoice.edit')}\n </Button>\n )}\n {invoice.status !== 'cancelled' && invoice.status !== 'paid' && (\n <div className=\"relative\" ref={menuRef}>\n <Button variant=\"outline\" size=\"icon\" onClick={() => setMenuOpen(!menuOpen)} aria-label=\"More actions\">\n <MoreVertical className=\"h-4 w-4\" />\n </Button>\n {menuOpen && (\n <div className=\"fayz-glass-surface absolute right-0 top-full mt-1 w-44 rounded-lg border bg-popover shadow-md z-20 py-1\" style={{ animation: 'field-slide-in 150ms ease-out' }}>\n <button\n onClick={() => { setConfirmCancel(true); setMenuOpen(false) }}\n className=\"flex w-full items-center gap-2 px-3 py-2 text-xs text-destructive hover:bg-destructive/10 transition-colors\"\n >\n <Ban className=\"h-3.5 w-3.5\" /> {t('financial.invoice.cancelInvoice')}\n </button>\n </div>\n )}\n </div>\n )}\n </div>\n }\n />\n\n {/* Invoice document */}\n <div className=\"rounded-xl border bg-card shadow-sm overflow-hidden\">\n {/* Top accent stripe */}\n <div className=\"h-1 bg-primary\" />\n\n {/* Invoice header */}\n <div className=\"p-5 pb-4\">\n <div className=\"flex items-start justify-between gap-4\">\n <div className=\"flex items-start gap-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-primary/10 shrink-0\">\n <FileText className=\"h-5 w-5 text-primary\" />\n </div>\n <div>\n <p className=\"text-xs font-medium text-muted-foreground uppercase tracking-wider\">\n {direction === 'debit' ? t('financial.invoice.accountsPayable') : t('financial.invoice.accountsReceivable')}\n </p>\n <p className={`text-xl font-bold mt-0.5 ${invoice.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>{formatCurrency(invoice.totalAmount, currency)}</p>\n </div>\n </div>\n <span className={`inline-flex items-center gap-1 rounded-full px-2.5 py-1 text-[11px] font-semibold capitalize ${statusConfig.bg}`}>\n <StatusIcon className=\"h-3 w-3\" /> {t(statusConfig.labelKey)}\n </span>\n </div>\n\n {/* Meta grid */}\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-3 mt-4 pt-4 border-t\">\n <div className=\"flex items-center gap-2\">\n <User className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div className=\"min-w-0\">\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.contact')}</p>\n {invoice.contactName ? (\n <PersonLink personId={invoice.contactId} name={invoice.contactName} size=\"sm\" />\n ) : (\n <p className=\"text-xs font-medium truncate\">—</p>\n )}\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Calendar className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.date')}</p>\n <p className=\"text-xs font-medium\">{invoice.invoiceDate}</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <Hash className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.installments')}</p>\n <p className=\"text-xs font-medium\">{invoice.totalInstallments}x</p>\n </div>\n </div>\n <div className=\"flex items-center gap-2\">\n <DollarSign className=\"h-3.5 w-3.5 text-muted-foreground shrink-0\" />\n <div>\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.columnPaid')}</p>\n <p className=\"text-xs font-medium\">{formatCurrency(totalPaid, currency)}</p>\n </div>\n </div>\n </div>\n\n {/* Booking link — shows when this order has a scheduled time */}\n {invoice.bookingStartsAt && (\n <div className=\"flex items-center gap-2 mt-3 pt-3 border-t\">\n <CalendarDays className=\"h-3.5 w-3.5 text-magic shrink-0\" />\n <div className=\"flex items-center gap-2 min-w-0\">\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.invoice.booking')}</p>\n <button\n type=\"button\"\n onClick={() => config.onBookingClick?.(invoice.id)}\n className=\"inline-flex items-center gap-1 text-xs font-medium text-magic hover:underline\"\n >\n {new Date(invoice.bookingStartsAt).toLocaleDateString(undefined, { weekday: 'short', day: '2-digit', month: 'short' })}\n {' '}\n {new Date(invoice.bookingStartsAt).toLocaleTimeString(undefined, { hour: '2-digit', minute: '2-digit' })}\n <ExternalLink className=\"h-2.5 w-2.5\" />\n </button>\n </div>\n </div>\n )}\n </div>\n\n {/* Items table */}\n {items.length > 0 && (\n <>\n <div className=\"px-5 pt-3 pb-1.5\">\n <h3 className=\"text-[11px] font-semibold text-muted-foreground uppercase tracking-wider\">{t('financial.invoice.items')}</h3>\n </div>\n <div className=\"px-5\">\n <DataTable columns={itemColumns} data={items} variant=\"flat\" compact />\n </div>\n\n {/* Totals */}\n <div className=\"px-5 py-3 mt-1 border-t bg-muted/10\">\n <div className=\"flex flex-col items-end gap-0.5\">\n {(totalDiscount > 0 || totalSurcharge > 0) && (\n <div className=\"flex items-center gap-6 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.subtotal')}</span>\n <span className=\"tabular-nums w-24 text-right\">{formatCurrency(subtotal, currency)}</span>\n </div>\n )}\n {totalDiscount > 0 && (\n <div className=\"flex items-center gap-6 text-xs text-success\">\n <span>{t('financial.invoice.discount')}</span>\n <span className=\"tabular-nums w-24 text-right\">-{formatCurrency(totalDiscount, currency)}</span>\n </div>\n )}\n {totalSurcharge > 0 && (\n <div className=\"flex items-center gap-6 text-xs text-warning\">\n <span>{t('financial.invoice.surcharge')}</span>\n <span className=\"tabular-nums w-24 text-right\">+{formatCurrency(totalSurcharge, currency)}</span>\n </div>\n )}\n <div className=\"flex items-center gap-6 text-sm font-bold pt-1\">\n <span>{t('financial.invoice.total')}</span>\n <span className={`tabular-nums w-24 text-right ${invoice.status === 'cancelled' ? 'line-through text-muted-foreground' : ''}`}>{formatCurrency(invoice.totalAmount, currency)}</span>\n </div>\n </div>\n </div>\n </>\n )}\n\n {/* Observations inside invoice */}\n {invoice.observations && (\n <div className=\"px-5 py-3 border-t\">\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase tracking-wider mb-1\">{t('financial.invoice.notes')}</p>\n <p className=\"text-xs text-muted-foreground\">{invoice.observations}</p>\n </div>\n )}\n </div>\n\n {/* Installments — outside the invoice card */}\n <div className=\"space-y-2\">\n <h3 className=\"text-sm font-semibold text-muted-foreground\">{t('financial.invoice.paymentSchedule')}</h3>\n <div className=\"rounded-lg border bg-card shadow-sm\">\n {movements.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">{t('financial.invoice.noInstallments')}</div>\n ) : (\n <div className=\"divide-y\">\n {movements.map((mov) => {\n const remaining = mov.amount - mov.paidAmount\n const isPaid = mov.status === 'paid'\n const isPartial = mov.status === 'partial'\n const hasPaidDetails = isPaid || isPartial\n const isExpanded = expandedMovId === mov.id\n const movStatus = STATUS_COLORS[mov.status] ?? STATUS_COLORS.pending\n const MovIcon = movStatus.icon\n\n // Cash events recorded against this installment (one per payment).\n const instPayments = payments.filter((p) => (p.installmentNumber ?? null) === (mov.installmentNumber ?? null))\n\n return (\n <div key={mov.id}>\n <div\n className={`flex items-center gap-3 px-4 py-3 ${hasPaidDetails ? 'cursor-pointer hover:bg-muted/20 transition-colors' : ''}`}\n onClick={hasPaidDetails ? () => handleExpandMov(mov.id) : undefined}\n >\n <span className=\"text-xs font-medium text-muted-foreground w-6 shrink-0\">#{mov.installmentNumber}</span>\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-center gap-2\">\n <span className=\"text-sm font-medium tabular-nums\">{formatCurrency(mov.amount, currency)}</span>\n <span className={`inline-flex items-center gap-0.5 rounded-full px-1.5 py-0.5 text-[9px] font-medium capitalize ${movStatus.bg}`}>\n <MovIcon className=\"h-2 w-2\" /> {t(movStatus.labelKey)}\n </span>\n </div>\n <p className=\"text-[10px] text-muted-foreground\">\n {t('financial.invoice.due')} {mov.dueDate}\n {mov.paidAmount > 0 && !isPaid && ` · ${t('financial.invoice.paidLabel')} ${formatCurrency(mov.paidAmount, currency)}`}\n {mov.paymentDate && ` · ${t('financial.invoice.paidOn')} ${mov.paymentDate}`}\n </p>\n </div>\n {!isPaid && !isPartial && invoice.status !== 'cancelled' && (\n <button\n onClick={(e) => { e.stopPropagation(); setPayingMovement(mov) }}\n className=\"inline-flex items-center gap-1 rounded-lg bg-primary border border-primary px-3 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors shrink-0\"\n >\n <DollarSign className=\"h-3 w-3\" />\n {t('financial.invoice.pay')} {remaining < mov.amount ? formatCurrency(remaining, currency) : ''}\n </button>\n )}\n {isPartial && invoice.status !== 'cancelled' && (\n <button\n onClick={(e) => { e.stopPropagation(); setPayingMovement(mov) }}\n className=\"inline-flex items-center gap-1 rounded-lg border px-3 py-1.5 text-xs font-medium hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors shrink-0\"\n >\n <DollarSign className=\"h-3 w-3\" />\n {t('financial.invoice.pay')} {formatCurrency(remaining, currency)}\n </button>\n )}\n {hasPaidDetails && (\n <ChevronDown className={`h-3.5 w-3.5 text-muted-foreground shrink-0 transition-transform duration-200 ${isExpanded ? 'rotate-180' : ''}`} />\n )}\n </div>\n\n {/* Expanded payment details */}\n <div\n className=\"grid transition-all duration-200 ease-out\"\n style={{ gridTemplateRows: isExpanded ? '1fr' : '0fr' }}\n >\n <div className=\"overflow-hidden\">\n <div className=\"px-4 pb-2.5 pl-14\">\n {detailsLoading ? (\n <div className=\"flex items-center gap-3\">\n <div className=\"h-3 w-20 rounded bg-muted/40 animate-pulse\" />\n <div className=\"h-3 w-16 rounded bg-muted/30 animate-pulse\" />\n <div className=\"h-3 w-24 rounded bg-muted/40 animate-pulse\" />\n </div>\n ) : instPayments.length === 0 ? (\n <div className=\"text-[11px] text-muted-foreground\">{t('financial.invoice.noDetails')}</div>\n ) : (\n <div className=\"space-y-1\">\n {instPayments.map((p) => {\n const pMethod = paymentMethods.find((m) => m.id === p.paymentMethodId)\n const pType = paymentMethodTypes.find((tp) => tp.id === (pMethod?.paymentMethodTypeId ?? p.paymentMethodTypeId))\n const pAccount = bankAccounts.find((a) => a.id === p.bankAccountId)\n return (\n <div key={p.id} className=\"flex flex-wrap items-center gap-x-1 gap-y-0.5 text-[11px] text-muted-foreground\">\n <span className=\"font-medium text-success\">{formatCurrency(p.paidAmount, currency)}</span>\n {pType && (\n <>\n <span>&middot;</span>\n <span className=\"font-medium text-foreground\">{pType.name}</span>\n {pMethod && <span>({pMethod.name})</span>}\n </>\n )}\n {p.cardBrand && (\n <>\n <span>&middot;</span>\n <CreditCard className=\"h-3 w-3 shrink-0\" />\n <span className=\"font-medium text-foreground\">{p.cardBrand}</span>\n {p.cardInstallments && <span>{p.cardInstallments}x</span>}\n </>\n )}\n {pAccount && (\n <>\n <span>&middot;</span>\n <Building2 className=\"h-3 w-3 shrink-0\" />\n <span>{pAccount.name}</span>\n </>\n )}\n {(p.feeAmount ?? 0) > 0 && (\n <>\n <span>&middot;</span>\n <span className=\"text-warning\">{t('financial.statements.columnFee')} {formatCurrency(p.feeAmount ?? 0, currency)}</span>\n </>\n )}\n {p.paymentDate && (\n <>\n <span>&middot;</span>\n <span>{p.paymentDate}</span>\n </>\n )}\n {p.notes && (\n <>\n <span>&middot;</span>\n <span className=\"italic truncate max-w-[200px]\">{p.notes}</span>\n </>\n )}\n </div>\n )\n })}\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n )\n })}\n </div>\n )}\n </div>\n\n {/* Payment summary bar */}\n {movements.length > 0 && (\n <div className=\"flex items-center justify-between rounded-lg border bg-muted/20 px-4 py-2.5\">\n <div className=\"flex items-center gap-4 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.invoice.paidLabel')} <span className=\"font-semibold text-success\">{formatCurrency(totalPaid, currency)}</span></span>\n {totalRemaining > 0 && (\n <span className=\"text-muted-foreground\">{t('financial.invoice.remaining')} <span className=\"font-semibold text-foreground\">{formatCurrency(totalRemaining, currency)}</span></span>\n )}\n </div>\n {totalRemaining <= 0 && (\n <span className=\"inline-flex items-center gap-1 text-xs font-medium text-success\">\n <CircleCheckBig className=\"h-3 w-3\" /> {t('financial.invoice.fullyPaid')}\n </span>\n )}\n </div>\n )}\n </div>\n\n {/* Payment Modal */}\n {payingMovement && (\n <PaymentModal\n movement={payingMovement}\n onClose={() => setPayingMovement(null)}\n onPaid={() => { setPayingMovement(null); loadData() }}\n />\n )}\n\n {/* Cancel confirmation */}\n {confirmCancel && createPortal(\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black/50\" onClick={() => setConfirmCancel(false)}>\n <div className=\"w-full max-w-sm rounded-modal border bg-card shadow-lg mx-4 p-5\" onClick={(e) => e.stopPropagation()} style={{ animation: 'field-slide-in 200ms ease-out' }}>\n <div className=\"flex items-center gap-3 mb-3\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-destructive/10 shrink-0\">\n <Ban className=\"h-5 w-5 text-destructive\" />\n </div>\n <div>\n <h3 className=\"text-sm font-semibold\">{t('financial.invoice.cancelInvoice')}</h3>\n <p className=\"text-xs text-muted-foreground\">{t('financial.invoice.cancelConfirm')}</p>\n </div>\n </div>\n <p className=\"text-xs text-muted-foreground mb-4\">\n {t('financial.invoice.cancelDesc')}\n </p>\n <div className=\"flex justify-end gap-2\">\n <Button variant=\"outline\" size=\"sm\" onClick={() => setConfirmCancel(false)}>\n {t('financial.invoice.keepInvoice')}\n </Button>\n <Button variant=\"destructive\" size=\"sm\" onClick={handleCancel} disabled={cancelling}>\n <Ban className=\"h-3.5 w-3.5\" />\n {cancelling ? t('financial.invoice.cancelling') : t('financial.invoice.yesCancel')}\n </Button>\n </div>\n </div>\n </div>,\n document.body\n )}\n\n <style>{`\n @keyframes field-slide-in {\n from { opacity: 0; transform: translateY(8px); }\n to { opacity: 1; transform: translateY(0); }\n }\n `}</style>\n </div>\n )\n}\n","type TFunc = (key: string, params?: Record<string, string | number>) => string\n\n// Maps a previous in-module view to the i18n key for its human label, used to\n// render a context-aware back link (\"Back to {where you came from}\") on detail\n// pages. Views not listed here (e.g. the edit/detail of the record we're\n// returning from, or unknown views) are not meaningful referrers — callers fall\n// back to the default parent label.\nconst REFERRER_LABEL_KEYS: Record<string, string> = {\n summary: 'financial.nav.summary',\n statements: 'financial.nav.statements',\n 'cash-registers': 'financial.nav.cashRegisters',\n reconciliation: 'financial.nav.reconciliation',\n commissions: 'financial.nav.commissions',\n cards: 'financial.nav.cards',\n 'receivables-list': 'financial.nav.receivables',\n 'payables-list': 'financial.nav.payables',\n}\n\n/** Human label for the page the user came from, or null when it isn't a meaningful referrer. */\nexport function referrerLabel(view: string | null | undefined, t: TFunc): string | null {\n if (!view) return null\n const key = REFERRER_LABEL_KEYS[view]\n return key ? t(key) : null\n}\n","import React from 'react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport { referrerLabel } from './navReferrer'\nimport type { ViewIntent } from '../FinancialPage'\n\nexport function PayablesView({ intent, onNavigate, previousView, back }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\n /** The in-module view the user came from — drives the context-aware back link. */\n previousView?: string | null\n /** Return to the actual previous page (falls back to the given view). */\n back?: (fallbackView?: string) => void\n}) {\n const t = useTranslation()\n\n if (intent.mode === 'new') {\n return <InvoiceFormView direction=\"debit\" onSaved={(id) => onNavigate(id ? `payables-detail:${id}` : 'payables-list')} />\n }\n\n if (intent.mode === 'edit' && intent.editId) {\n return <InvoiceFormView direction=\"debit\" editId={intent.editId} onSaved={() => onNavigate(`payables-detail:${intent.editId}`)} />\n }\n\n if (intent.mode === 'detail' && intent.editId) {\n // Back to where the user actually came from (e.g. statements), else the list.\n const prevLabel = referrerLabel(previousView, t)\n return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"debit\"\n backLabel={prevLabel ?? undefined}\n onBack={prevLabel && back ? () => back('payables-list') : () => onNavigate('payables-list')}\n onEdit={() => onNavigate(`payables-edit:${intent.editId}`)}\n />\n )\n }\n\n return (\n <InvoiceListView\n direction=\"debit\"\n onNew={() => onNavigate('payables-new')}\n onEdit={(id) => onNavigate(`payables-detail:${id}`)}\n />\n )\n}\n","import React from 'react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { InvoiceListView } from './InvoiceListView'\nimport { InvoiceFormView } from './InvoiceFormView'\nimport { InvoiceDetailView } from './InvoiceDetailView'\nimport { referrerLabel } from './navReferrer'\nimport type { ViewIntent } from '../FinancialPage'\n\nexport function ReceivablesView({ intent, onNavigate, previousView, back }: {\n intent: ViewIntent\n onNavigate: (view: string) => void\n /** The in-module view the user came from — drives the context-aware back link. */\n previousView?: string | null\n /** Return to the actual previous page (falls back to the given view). */\n back?: (fallbackView?: string) => void\n}) {\n const t = useTranslation()\n\n if (intent.mode === 'new') {\n return <InvoiceFormView direction=\"credit\" onSaved={(id) => onNavigate(id ? `receivables-detail:${id}` : 'receivables-list')} />\n }\n\n if (intent.mode === 'edit' && intent.editId) {\n return <InvoiceFormView direction=\"credit\" editId={intent.editId} onSaved={() => onNavigate(`receivables-detail:${intent.editId}`)} />\n }\n\n if (intent.mode === 'detail' && intent.editId) {\n // Back to where the user actually came from (e.g. statements), else the list.\n const prevLabel = referrerLabel(previousView, t)\n return (\n <InvoiceDetailView\n invoiceId={intent.editId}\n direction=\"credit\"\n backLabel={prevLabel ?? undefined}\n onBack={prevLabel && back ? () => back('receivables-list') : () => onNavigate('receivables-list')}\n onEdit={() => onNavigate(`receivables-edit:${intent.editId}`)}\n />\n )\n }\n\n return (\n <InvoiceListView\n direction=\"credit\"\n onNew={() => onNavigate('receivables-new')}\n onEdit={(id) => onNavigate(`receivables-detail:${id}`)}\n />\n )\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { Landmark, Play, Square, Clock, ChevronDown, ChevronUp, Calculator, X, Check, StickyNote } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { CurrencyInput } from '@fayz-ai/ui'\nimport { Button } from '@fayz-ai/ui'\n\n// ---------------------------------------------------------------------------\n// Denomination definitions (BRL default — overridden by currency config)\n// ---------------------------------------------------------------------------\n\ninterface Denomination {\n label: string\n value: number\n type: 'bill' | 'coin'\n}\n\nconst BRL_DENOMINATIONS: Denomination[] = [\n { label: 'R$ 200', value: 200, type: 'bill' },\n { label: 'R$ 100', value: 100, type: 'bill' },\n { label: 'R$ 50', value: 50, type: 'bill' },\n { label: 'R$ 20', value: 20, type: 'bill' },\n { label: 'R$ 10', value: 10, type: 'bill' },\n { label: 'R$ 5', value: 5, type: 'bill' },\n { label: 'R$ 2', value: 2, type: 'bill' },\n { label: 'R$ 1', value: 1, type: 'coin' },\n { label: 'R$ 0,50', value: 0.5, type: 'coin' },\n { label: 'R$ 0,25', value: 0.25, type: 'coin' },\n { label: 'R$ 0,10', value: 0.1, type: 'coin' },\n { label: 'R$ 0,05', value: 0.05, type: 'coin' },\n]\n\n// ---------------------------------------------------------------------------\n// Denomination counter sub-component\n// ---------------------------------------------------------------------------\n\nfunction DenominationCounter({\n denominations,\n counts,\n onChange,\n currency,\n}: {\n denominations: Denomination[]\n counts: Record<number, number>\n onChange: (counts: Record<number, number>) => void\n currency: { code: string; locale: string; symbol: string }\n}) {\n const t = useTranslation()\n const bills = denominations.filter((d) => d.type === 'bill')\n const coins = denominations.filter((d) => d.type === 'coin')\n\n function setCount(value: number, count: number) {\n onChange({ ...counts, [value]: Math.max(0, count) })\n }\n\n function renderRow(d: Denomination) {\n const qty = counts[d.value] ?? 0\n const subtotal = qty * d.value\n return (\n <div key={d.value} className=\"flex items-center gap-2 py-1\">\n <span className=\"w-20 text-xs font-medium text-muted-foreground\">{d.label}</span>\n <span className=\"text-muted-foreground text-xs\">×</span>\n <input\n type=\"number\"\n min={0}\n value={qty || ''}\n onChange={(e) => setCount(d.value, parseInt(e.target.value) || 0)}\n placeholder=\"0\"\n className=\"w-16 rounded border bg-background px-2 py-1 text-xs text-center tabular-nums\"\n />\n <span className=\"text-xs text-muted-foreground\">=</span>\n <span className=\"w-24 text-xs text-right tabular-nums font-medium\">\n {formatCurrency(subtotal, currency)}\n </span>\n </div>\n )\n }\n\n return (\n <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n {bills.length > 0 && (\n <div>\n <p className=\"text-[10px] font-semibold text-muted-foreground uppercase mb-1\">{t('financial.cash.bills')}</p>\n {bills.map(renderRow)}\n </div>\n )}\n {coins.length > 0 && (\n <div>\n <p className=\"text-[10px] font-semibold text-muted-foreground uppercase mb-1\">{t('financial.cash.coins')}</p>\n {coins.map(renderRow)}\n </div>\n )}\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Opening panel (step-based)\n// ---------------------------------------------------------------------------\n\ntype OpenMode = 'quick' | 'count'\n\nfunction CashOpeningPanel({\n cashAccounts,\n currency,\n onOpen,\n}: {\n cashAccounts: { id: string; name: string }[]\n currency: { code: string; locale: string; symbol: string }\n onOpen: (accountId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const [selectedAccountId, setSelectedAccountId] = useState<string>(cashAccounts[0]?.id ?? '')\n const [mode, setMode] = useState<OpenMode>('quick')\n const [quickBalance, setQuickBalance] = useState(0)\n const [counts, setCounts] = useState<Record<number, number>>({})\n const [notes, setNotes] = useState('')\n const [showNotes, setShowNotes] = useState(false)\n const [confirming, setConfirming] = useState(false)\n const [submitting, setSubmitting] = useState(false)\n const t = useTranslation()\n\n const countedTotal = useMemo(() => {\n return BRL_DENOMINATIONS.reduce((sum, d) => sum + (counts[d.value] ?? 0) * d.value, 0)\n }, [counts])\n\n const effectiveBalance = mode === 'count' ? countedTotal : quickBalance\n\n function resetForm() {\n setQuickBalance(0)\n setCounts({})\n setNotes('')\n setShowNotes(false)\n setConfirming(false)\n }\n\n async function handleConfirm() {\n setSubmitting(true)\n try {\n await onOpen(selectedAccountId, effectiveBalance, notes || undefined)\n resetForm()\n } finally {\n setSubmitting(false)\n }\n }\n\n if (cashAccounts.length === 0) {\n return (\n <p className=\"text-sm text-muted-foreground p-4\">\n {t('financial.cash.noAccounts')}\n </p>\n )\n }\n\n // Confirmation step\n if (confirming) {\n return (\n <div className=\"p-4 space-y-4\">\n <div className=\"rounded-lg border border-primary/20 bg-primary/5 p-4 space-y-3\">\n <p className=\"text-sm font-semibold\">{t('financial.cash.confirmOpening')}</p>\n <div className=\"grid grid-cols-2 gap-2 text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.cash.register')}</span>\n <span className=\"font-medium\">{cashAccounts.find((a) => a.id === selectedAccountId)?.name}</span>\n <span className=\"text-muted-foreground\">{t('financial.cash.openingBalance')}</span>\n <span className=\"font-bold text-base\">{formatCurrency(effectiveBalance, currency)}</span>\n {mode === 'count' && (\n <>\n <span className=\"text-muted-foreground\">{t('financial.cash.method')}</span>\n <span className=\"font-medium\">{t('financial.cash.denominationCount')}</span>\n </>\n )}\n {notes && (\n <>\n <span className=\"text-muted-foreground\">{t('financial.cash.notes')}</span>\n <span className=\"font-medium\">{notes}</span>\n </>\n )}\n </div>\n </div>\n <div className=\"flex gap-2\">\n <button\n onClick={() => setConfirming(false)}\n className=\"inline-flex items-center gap-1.5 rounded-lg border px-3 py-1.5 text-xs font-medium hover:bg-muted bg-card shadow-button active:shadow-button-inset transition-colors\"\n >\n <X className=\"h-3 w-3\" /> {t('common.back')}\n </button>\n <button\n onClick={handleConfirm}\n disabled={submitting}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-4 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors disabled:opacity-50\"\n >\n <Check className=\"h-3 w-3\" /> {submitting ? t('financial.cash.opening') : t('financial.cash.confirmAndOpen')}\n </button>\n </div>\n </div>\n )\n }\n\n return (\n <div className=\"p-4 space-y-4\">\n {/* Account selector */}\n {cashAccounts.length > 1 && (\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.register')}</label>\n <select\n value={selectedAccountId}\n onChange={(e) => setSelectedAccountId(e.target.value)}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs\"\n >\n {cashAccounts.map((a) => (\n <option key={a.id} value={a.id}>{a.name}</option>\n ))}\n </select>\n </div>\n )}\n\n {/* Mode toggle */}\n <div className=\"flex gap-1 rounded-lg border p-0.5 w-fit\">\n <button\n onClick={() => setMode('quick')}\n className={`px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'quick' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n {t('financial.cash.quickAmount')}\n </button>\n <button\n onClick={() => setMode('count')}\n className={`inline-flex items-center gap-1 px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'count' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n <Calculator className=\"h-3 w-3\" /> {t('financial.cash.countBillsCoins')}\n </button>\n </div>\n\n {/* Quick mode */}\n {mode === 'quick' && (\n <CurrencyInput\n value={quickBalance}\n onChange={setQuickBalance}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n label={t('financial.cash.openingBalance')}\n />\n )}\n\n {/* Count mode */}\n {mode === 'count' && (\n <div className=\"space-y-3\">\n <DenominationCounter\n denominations={BRL_DENOMINATIONS}\n counts={counts}\n onChange={setCounts}\n currency={currency}\n />\n <div className=\"flex items-center justify-between pt-2 border-t\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase\">{t('financial.cash.countedTotal')}</span>\n <span className=\"text-lg font-bold\">{formatCurrency(countedTotal, currency)}</span>\n </div>\n </div>\n )}\n\n {/* Notes toggle */}\n <div>\n {!showNotes ? (\n <button\n onClick={() => setShowNotes(true)}\n className=\"inline-flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n <StickyNote className=\"h-3 w-3\" /> {t('financial.cash.addNotes')}\n </button>\n ) : (\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.notes')}</label>\n <textarea\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n rows={2}\n placeholder={t('financial.cash.openingObservations')}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs resize-none\"\n />\n </div>\n )}\n </div>\n\n {/* Open button */}\n <button\n onClick={() => setConfirming(true)}\n disabled={effectiveBalance <= 0}\n className=\"inline-flex items-center gap-1.5 rounded-lg bg-primary border border-primary px-4 py-1.5 text-xs font-medium text-primary-foreground hover:bg-primary/90 shadow-button-primary active:shadow-button-inset transition-colors disabled:opacity-50\"\n >\n <Play className=\"h-3 w-3\" /> {t('financial.cash.openSession')}\n </button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Closing panel (inline within open session card)\n// ---------------------------------------------------------------------------\n\nfunction CashClosingPanel({\n session,\n currency,\n onClose,\n}: {\n session: { id: string; openingBalance: number; bankAccountName?: string }\n currency: { code: string; locale: string; symbol: string }\n onClose: (sessionId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const [mode, setMode] = useState<OpenMode>('quick')\n const [quickBalance, setQuickBalance] = useState(0)\n const [counts, setCounts] = useState<Record<number, number>>({})\n const [notes, setNotes] = useState('')\n const [submitting, setSubmitting] = useState(false)\n const t = useTranslation()\n\n const countedTotal = useMemo(() => {\n return BRL_DENOMINATIONS.reduce((sum, d) => sum + (counts[d.value] ?? 0) * d.value, 0)\n }, [counts])\n\n const effectiveBalance = mode === 'count' ? countedTotal : quickBalance\n const difference = effectiveBalance - session.openingBalance\n\n async function handleClose() {\n setSubmitting(true)\n try {\n await onClose(session.id, effectiveBalance, notes || undefined)\n } finally {\n setSubmitting(false)\n }\n }\n\n return (\n <div className=\"space-y-3 pt-3 border-t\">\n {/* Mode toggle */}\n <div className=\"flex gap-1 rounded-lg border p-0.5 w-fit\">\n <button\n onClick={() => setMode('quick')}\n className={`px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'quick' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n {t('financial.cash.quickAmount')}\n </button>\n <button\n onClick={() => setMode('count')}\n className={`inline-flex items-center gap-1 px-3 py-1 text-xs rounded-md font-medium transition-colors ${\n mode === 'count' ? 'bg-primary text-primary-foreground' : 'hover:bg-muted'\n }`}\n >\n <Calculator className=\"h-3 w-3\" /> {t('financial.cash.count')}\n </button>\n </div>\n\n {mode === 'quick' ? (\n <CurrencyInput\n value={quickBalance}\n onChange={setQuickBalance}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n label={t('financial.cash.closingBalance')}\n />\n ) : (\n <div className=\"space-y-3\">\n <DenominationCounter\n denominations={BRL_DENOMINATIONS}\n counts={counts}\n onChange={setCounts}\n currency={currency}\n />\n <div className=\"flex items-center justify-between pt-2 border-t\">\n <span className=\"text-xs font-medium text-muted-foreground uppercase\">{t('financial.cash.countedTotal')}</span>\n <span className=\"text-lg font-bold\">{formatCurrency(countedTotal, currency)}</span>\n </div>\n </div>\n )}\n\n {/* Difference indicator */}\n {effectiveBalance > 0 && (\n <div className=\"flex items-center justify-between rounded-lg bg-muted/50 px-3 py-2\">\n <span className=\"text-xs text-muted-foreground\">{t('financial.cash.differenceFromOpening')}</span>\n <span className={`text-sm font-bold tabular-nums ${\n difference > 0 ? 'text-success' : difference < 0 ? 'text-destructive' : 'text-muted-foreground'\n }`}>\n {difference >= 0 ? '+' : ''}{formatCurrency(difference, currency)}\n </span>\n </div>\n )}\n\n {/* Notes */}\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.cash.closingNotes')}</label>\n <textarea\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n rows={2}\n placeholder={t('financial.cash.closingObservations')}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-2 py-1.5 text-xs resize-none\"\n />\n </div>\n\n <Button\n variant=\"destructive\"\n size=\"sm\"\n onClick={handleClose}\n disabled={submitting || effectiveBalance <= 0}\n >\n <Square className=\"h-3.5 w-3.5\" />\n {submitting ? t('financial.cash.closing') : t('financial.cash.closeSession')}\n </Button>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Main view\n// ---------------------------------------------------------------------------\n\nexport function CashRegistersView() {\n const t = useTranslation()\n const { currency, labels } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const cashSessions = useFinancialStore((s) => s.cashSessions)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchCashSessions = useFinancialStore((s) => s.fetchCashSessions)\n const openCashSession = useFinancialStore((s) => s.openCashSession)\n const closeCashSession = useFinancialStore((s) => s.closeCashSession)\n\n const [expandedClosing, setExpandedClosing] = useState<string | null>(null)\n\n useEffect(() => {\n fetchBankAccounts()\n fetchCashSessions()\n }, [])\n\n const cashAccounts = bankAccounts.filter((a) => a.accountType === 'cash_register')\n const openSessions = cashSessions.filter((s) => s.status === 'open')\n const closedSessions = cashSessions.filter((s) => s.status === 'closed')\n\n async function handleOpen(accountId: string, balance: number, notes?: string) {\n await openCashSession({ bankAccountId: accountId, openingBalance: balance, notes })\n }\n\n async function handleClose(sessionId: string, balance: number, notes?: string) {\n await closeCashSession({ sessionId, closingBalance: balance, notes })\n setExpandedClosing(null)\n }\n\n return (\n <div className=\"space-y-6\">\n <SubpageHeader title={labels.cashRegisters ?? t('financial.cash.title')} subtitle={t('financial.cash.subtitle')} />\n\n {/* Open sessions */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center justify-between px-4 py-3 border-b\">\n <div className=\"flex items-center gap-2\">\n <Landmark className=\"h-4 w-4 text-info\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.cash.openSessions')}</h3>\n {openSessions.length > 0 && (\n <span className=\"rounded-full bg-info/10 text-info px-2 py-0.5 text-[10px] font-semibold\">\n {openSessions.length}\n </span>\n )}\n </div>\n </div>\n\n {openSessions.length === 0 ? (\n <CashOpeningPanel cashAccounts={cashAccounts} currency={currency} onOpen={handleOpen} />\n ) : (\n <div className=\"divide-y\">\n {openSessions.map((session) => (\n <div key={session.id} className=\"p-4 space-y-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{session.bankAccountName ?? t('financial.cash.title')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {t('financial.cash.opened')} {new Date(session.openedAt).toLocaleString()}\n {session.openedByName ? ` ${t('financial.cash.by')} ${session.openedByName}` : ''}\n </p>\n </div>\n <div className=\"text-right\">\n <p className=\"text-[10px] text-muted-foreground uppercase\">{t('financial.cash.openingBalance')}</p>\n <p className=\"text-lg font-bold tabular-nums\">{formatCurrency(session.openingBalance, currency)}</p>\n </div>\n </div>\n\n {/* Expand/collapse closing controls */}\n {expandedClosing === session.id ? (\n <CashClosingPanel session={session} currency={currency} onClose={handleClose} />\n ) : (\n <button\n onClick={() => setExpandedClosing(session.id)}\n className=\"inline-flex items-center gap-1.5 text-xs text-destructive hover:text-destructive font-medium transition-colors\"\n >\n <ChevronDown className=\"h-3 w-3\" /> {t('financial.cash.closeThisSession')}\n </button>\n )}\n </div>\n ))}\n </div>\n )}\n </div>\n\n {/* Quick open — when sessions already exist but user may want another */}\n {openSessions.length > 0 && cashAccounts.length > openSessions.length && (\n <OpenAnotherCollapsible cashAccounts={cashAccounts} openSessions={openSessions} currency={currency} onOpen={handleOpen} />\n )}\n\n {/* Session history */}\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <Clock className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.cash.sessionHistory')}</h3>\n </div>\n {closedSessions.length === 0 ? (\n <div className=\"px-4 py-8 text-center text-sm text-muted-foreground\">{t('financial.cash.noClosedSessions')}</div>\n ) : (\n <div className=\"divide-y\">\n {closedSessions.map((session) => (\n <div key={session.id} className=\"px-4 py-3\">\n <div className=\"flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">{session.bankAccountName ?? t('financial.cash.title')}</p>\n <p className=\"text-xs text-muted-foreground\">\n {new Date(session.openedAt).toLocaleDateString()} — {session.closedAt ? new Date(session.closedAt).toLocaleDateString() : ''}\n </p>\n {session.openedByName && (\n <p className=\"text-[10px] text-muted-foreground\">{t('financial.cash.by')} {session.openedByName}</p>\n )}\n </div>\n <div className=\"text-right\">\n <div className=\"flex items-center gap-3 text-xs text-muted-foreground\">\n <span>{t('financial.cash.openLabel')}: {formatCurrency(session.openingBalance, currency)}</span>\n <span>{t('financial.cash.closeLabel')}: {formatCurrency(session.closingBalance ?? 0, currency)}</span>\n </div>\n {session.difference !== undefined && session.difference !== 0 && (\n <p className={`text-xs font-semibold tabular-nums mt-0.5 ${session.difference > 0 ? 'text-success' : 'text-destructive'}`}>\n {t('financial.cash.diff')}: {session.difference >= 0 ? '+' : ''}{formatCurrency(session.difference, currency)}\n </p>\n )}\n {session.notes && (\n <p className=\"text-[10px] text-muted-foreground mt-0.5 max-w-[200px] truncate\" title={session.notes}>\n {session.notes}\n </p>\n )}\n </div>\n </div>\n </div>\n ))}\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// ---------------------------------------------------------------------------\n// Collapsible \"Open another register\"\n// ---------------------------------------------------------------------------\n\nfunction OpenAnotherCollapsible({\n cashAccounts,\n openSessions,\n currency,\n onOpen,\n}: {\n cashAccounts: { id: string; name: string }[]\n openSessions: { bankAccountId: string }[]\n currency: { code: string; locale: string; symbol: string }\n onOpen: (accountId: string, balance: number, notes?: string) => Promise<void>\n}) {\n const t = useTranslation()\n const [expanded, setExpanded] = useState(false)\n const availableAccounts = cashAccounts.filter((a) => !openSessions.some((s) => s.bankAccountId === a.id))\n\n if (availableAccounts.length === 0) return null\n\n return (\n <div className=\"rounded-lg border bg-card shadow-sm\">\n <button\n onClick={() => setExpanded(!expanded)}\n className=\"w-full flex items-center justify-between px-4 py-3 text-xs font-medium hover:bg-muted/50 transition-colors\"\n >\n <span className=\"flex items-center gap-2\">\n <Play className=\"h-3 w-3 text-primary\" />\n {t('financial.cash.openAnother')}\n </span>\n {expanded ? <ChevronUp className=\"h-3 w-3\" /> : <ChevronDown className=\"h-3 w-3\" />}\n </button>\n {expanded && <CashOpeningPanel cashAccounts={availableAccounts} currency={currency} onOpen={onOpen} />}\n </div>\n )\n}\n","import React, { useState, useEffect } from 'react'\nimport { createPortal } from 'react-dom'\nimport { X, ArrowRightLeft } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { CurrencyInput, DatePicker, Button } from '@fayz-ai/ui'\n\nexport function TransferModal({ onClose, onDone, defaultFromId }: {\n onClose: () => void\n onDone: () => void\n defaultFromId?: string\n}) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const createTransfer = useFinancialStore((s) => s.createTransfer)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n\n const [fromAccountId, setFromAccountId] = useState(defaultFromId ?? '')\n const [toAccountId, setToAccountId] = useState('')\n const [amount, setAmount] = useState(0)\n const [date, setDate] = useState(new Date().toISOString().slice(0, 10))\n const [notes, setNotes] = useState('')\n const [saving, setSaving] = useState(false)\n const [visible, setVisible] = useState(false)\n\n useEffect(() => {\n fetchBankAccounts()\n requestAnimationFrame(() => setVisible(true))\n }, [])\n\n function handleClose() {\n setVisible(false)\n setTimeout(onClose, 200)\n }\n\n const sameAccount = !!fromAccountId && fromAccountId === toAccountId\n const canSubmit = !!fromAccountId && !!toAccountId && !sameAccount && amount > 0 && !saving\n\n // Enter anywhere in the modal submits (unless typing in a textarea / Shift+Enter).\n function handleKeyDown(e: React.KeyboardEvent) {\n if (e.key !== 'Enter' || e.shiftKey) return\n if ((e.target as HTMLElement).tagName === 'TEXTAREA') return\n e.preventDefault()\n if (canSubmit) void handleSubmit()\n }\n\n async function handleSubmit() {\n if (!canSubmit) return\n setSaving(true)\n try {\n await createTransfer({ fromAccountId, toAccountId, amount, date, notes: notes || undefined })\n setVisible(false)\n setTimeout(onDone, 200)\n } catch {\n // toast handled by store\n } finally {\n setSaving(false)\n }\n }\n\n const selectClass = 'w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm'\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-center justify-center transition-colors duration-200\"\n style={{ backgroundColor: visible ? 'rgba(0,0,0,0.5)' : 'rgba(0,0,0,0)' }}\n onClick={handleClose}\n >\n <div\n className=\"w-full max-w-md rounded-modal border bg-card shadow-lg mx-4 transition-all duration-200 max-h-[90vh] overflow-y-auto\"\n style={{ opacity: visible ? 1 : 0, transform: visible ? 'scale(1) translateY(0)' : 'scale(0.95) translateY(8px)' }}\n onClick={(e) => e.stopPropagation()}\n onKeyDown={handleKeyDown}\n >\n {/* Header */}\n <div className=\"flex items-center justify-between px-5 py-4 border-b\">\n <div className=\"flex items-center gap-2\">\n <ArrowRightLeft className=\"h-4 w-4 text-warning\" />\n <h3 className=\"text-base font-semibold\">{t('financial.transfer.title')}</h3>\n </div>\n <button onClick={handleClose} className=\"p-1 text-muted-foreground hover:text-foreground transition-colors\">\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n\n <div className=\"px-5 py-4 space-y-4\">\n <div className=\"grid grid-cols-2 gap-3\">\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.from')}</label>\n <select value={fromAccountId} onChange={(e) => setFromAccountId(e.target.value)} className={selectClass}>\n <option value=\"\">{t('financial.transfer.selectAccount')}</option>\n {bankAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n </div>\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.to')}</label>\n <select value={toAccountId} onChange={(e) => setToAccountId(e.target.value)} className={selectClass}>\n <option value=\"\">{t('financial.transfer.selectAccount')}</option>\n {bankAccounts.map((a) => <option key={a.id} value={a.id}>{a.name}</option>)}\n </select>\n </div>\n </div>\n\n {sameAccount && (\n <p className=\"text-xs text-destructive\">{t('financial.transfer.sameAccount')}</p>\n )}\n\n <div className=\"grid grid-cols-2 gap-3\">\n <CurrencyInput\n label={t('financial.transfer.amount')}\n value={amount}\n onChange={setAmount}\n symbol={currency.symbol}\n locale={currency.locale}\n currencyCode={currency.code}\n />\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.date')}</label>\n <DatePicker value={date} onChange={setDate} className=\"mt-1\" />\n </div>\n </div>\n\n <div>\n <label className=\"text-xs font-medium text-muted-foreground\">{t('financial.transfer.notes')}</label>\n <input\n type=\"text\"\n value={notes}\n onChange={(e) => setNotes(e.target.value)}\n placeholder={t('financial.transfer.optionalNotes')}\n className=\"w-full mt-1 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-ring\"\n />\n </div>\n </div>\n\n {/* Actions */}\n <div className=\"flex justify-end gap-2 px-5 py-4 border-t\">\n <Button variant=\"outline\" size=\"sm\" onClick={handleClose}>\n {t('financial.transfer.cancel')}\n </Button>\n <Button variant=\"default\" size=\"sm\" onClick={handleSubmit} disabled={!canSubmit}>\n <ArrowRightLeft className=\"h-3.5 w-3.5\" />\n {saving ? t('financial.transfer.processing') : t('financial.transfer.submit')}\n </Button>\n </div>\n </div>\n </div>,\n document.body,\n )\n}\n","import React, { useEffect, useState, useMemo } from 'react'\nimport { Receipt, ArrowRightLeft, CheckCheck, Landmark } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable, SubpageHeader, DatePicker, Button, Tooltip, TooltipTrigger, TooltipContent, TooltipProvider } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport { PersonLink } from '@fayz-ai/saas'\nimport type { StatementEntry } from '../types'\nimport { TransferModal } from '../components/TransferModal'\n\nconst ALL = 'all'\n\n// Soft reconciliation marker for an extract row — a muted glyph with a hover\n// tooltip explaining what it means. Rendered only when the movement carries the\n// relevant state (reconciledAt / externalSource).\nfunction ReconcileMarker({ kind, label }: { kind: 'reconciled' | 'imported'; label: string }) {\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n <span className=\"inline-flex shrink-0 cursor-default\">\n {kind === 'reconciled'\n ? <CheckCheck className=\"h-3 w-3 text-success/70\" />\n : <Landmark className=\"h-3 w-3 text-muted-foreground/40\" />}\n </span>\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">{label}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n\n// Reference to the internal transaction a reconciled bank line was matched to —\n// a small \"⇄ {ref}\" chip, clickable when the counterpart has an invoice to open.\nfunction ReconciledWithRef({ refLabel, tooltip, onOpen }: { refLabel: string; tooltip: string; onOpen?: () => void }) {\n const inner = (\n <span className=\"inline-flex items-center gap-0.5 text-[10px] text-muted-foreground max-w-[160px]\">\n <ArrowRightLeft className=\"h-2.5 w-2.5 shrink-0\" />\n <span className=\"truncate\">{refLabel}</span>\n </span>\n )\n return (\n <TooltipProvider delayDuration={150}>\n <Tooltip>\n <TooltipTrigger asChild>\n {onOpen\n ? <button onClick={onOpen} className=\"hover:text-primary transition-colors\">{inner}</button>\n : <span className=\"cursor-default\">{inner}</span>}\n </TooltipTrigger>\n <TooltipContent className=\"text-xs\">{tooltip}</TooltipContent>\n </Tooltip>\n </TooltipProvider>\n )\n}\n\nexport function StatementsView({ onNavigate }: { onNavigate?: (view: string) => void }) {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const bankAccounts = useFinancialStore((s) => s.bankAccounts)\n const statement = useFinancialStore((s) => s.statement)\n const statementLoading = useFinancialStore((s) => s.statementLoading)\n const paymentMethods = useFinancialStore((s) => s.paymentMethods)\n const paymentMethodTypes = useFinancialStore((s) => s.paymentMethodTypes)\n const fetchBankAccounts = useFinancialStore((s) => s.fetchBankAccounts)\n const fetchPaymentMethods = useFinancialStore((s) => s.fetchPaymentMethods)\n const fetchStatement = useFinancialStore((s) => s.fetchStatement)\n\n const [accountId, setAccountId] = useState('')\n const [dateFrom, setDateFrom] = useState(() => {\n const d = new Date(); d.setMonth(d.getMonth() - 3)\n return d.toISOString().slice(0, 10)\n })\n const [dateTo, setDateTo] = useState(() => new Date().toISOString().slice(0, 10))\n const [showTransfer, setShowTransfer] = useState(false)\n\n useEffect(() => { fetchBankAccounts(); fetchPaymentMethods() }, [])\n\n // Resolve a human payment-method label for a movement (method → type → card brand).\n const methodName = useMemo(() => {\n const byId = new Map(paymentMethods.map((m) => [m.id, m.name]))\n const typeById = new Map(paymentMethodTypes.map((tp) => [tp.id, tp.name]))\n return (mov: StatementEntry['movement']): string => {\n if (mov.paymentMethodId && byId.has(mov.paymentMethodId)) return byId.get(mov.paymentMethodId)!\n if (mov.paymentMethodTypeId && typeById.has(mov.paymentMethodTypeId)) return typeById.get(mov.paymentMethodTypeId)!\n if (mov.cardBrand) return mov.cardBrand\n return '—'\n }\n }, [paymentMethods, paymentMethodTypes])\n\n // Open the linked invoice (receivable/payable detail) for a statement row.\n function openInvoice(e: StatementEntry) {\n if (!onNavigate || !e.movement.invoiceId) return\n const base = e.movement.direction === 'credit' ? 'receivables' : 'payables'\n onNavigate(`${base}-detail:${e.movement.invoiceId}`)\n }\n\n useEffect(() => {\n if (accountId) {\n fetchStatement({\n bankAccountId: accountId === ALL ? undefined : accountId,\n dateRange: { from: dateFrom, to: dateTo },\n })\n }\n }, [accountId, dateFrom, dateTo])\n\n // Default to the consolidated \"All accounts\" view so paid invoices show up even\n // when payments weren't tied to a specific bank account.\n useEffect(() => {\n if (!accountId) setAccountId(ALL)\n }, [])\n\n const fmt = (n: number) => formatCurrency(n, currency)\n\n const columns: ColumnDef<StatementEntry, any>[] = useMemo(() => [\n {\n id: 'date', header: t('financial.statements.columnDate'),\n cell: ({ row }) => (\n <span className=\"text-muted-foreground text-xs\">{row.original.movement.paymentDate ?? row.original.movement.dueDate}</span>\n ),\n },\n {\n id: 'description', header: t('financial.statements.columnDescription'),\n cell: ({ row }) => {\n const e = row.original\n const isTransfer = e.entryKind !== 'movement'\n const memo = e.movement.notes\n const title = e.invoice?.contactName\n || (isTransfer ? t('financial.statements.transfer') : (memo || 'Transaction'))\n // Show the memo on its own line unless it's already serving as the title.\n const memoLine = memo && memo !== title ? memo : undefined\n const doc = e.invoice?.fiscalNumber\n const inst = e.movement.installmentNumber\n const canOpen = !!onNavigate && !!e.movement.invoiceId\n return (\n <div>\n <div className=\"flex items-center gap-1.5\">\n {/* Person name → hovercard with contact details (plain text when no contact) */}\n <PersonLink personId={e.invoice?.contactId} name={title} size=\"sm\" />\n {/* Document reference → opens the linked invoice */}\n {doc && (canOpen ? (\n <button\n onClick={() => openInvoice(e)}\n className=\"text-[10px] text-muted-foreground font-mono hover:text-primary hover:underline\"\n title={t('financial.statements.viewInvoice')}\n >\n {doc}\n </button>\n ) : (\n <span className=\"text-[10px] text-muted-foreground font-mono\">{doc}</span>\n ))}\n {isTransfer && (\n <span className=\"text-[9px] uppercase tracking-wide px-1 py-px rounded bg-warning/15 text-warning font-semibold\">\n {t('financial.statements.transfer')}\n </span>\n )}\n {/* Soft reconciliation marker — optional, driven by what the plugin exposes:\n reconciledAt = matched/accepted (conciliado); externalSource = imported from a\n bank sync but not yet reconciled. Hover shows what it means. */}\n {e.movement.reconciledAt ? (\n <ReconcileMarker kind=\"reconciled\" label={t('financial.statements.reconciled')} />\n ) : e.movement.externalSource ? (\n <ReconcileMarker kind=\"imported\" label={t('financial.statements.imported')} />\n ) : null}\n {/* The transaction this bank line was conciliated with — link/id. */}\n {e.reconciledWith && (() => {\n const rw = e.reconciledWith\n const refLabel = rw.fiscalNumber || rw.contactName || rw.description || rw.movementId.slice(0, 8)\n const base = e.movement.direction === 'credit' ? 'receivables' : 'payables'\n const onOpen = onNavigate && rw.invoiceId ? () => onNavigate(`${base}-detail:${rw.invoiceId}`) : undefined\n return (\n <ReconciledWithRef\n refLabel={refLabel}\n tooltip={t('financial.statements.reconciledWith', { ref: refLabel })}\n onOpen={onOpen}\n />\n )\n })()}\n </div>\n {memoLine && <p className=\"text-[11px] text-foreground/80\">{memoLine}</p>}\n <p className=\"text-[10px] text-muted-foreground\">\n <span className=\"capitalize\">\n {isTransfer && e.counterAccountName\n ? (e.entryKind === 'transfer-in' ? `← ${e.counterAccountName}` : `→ ${e.counterAccountName}`)\n : e.movement.movementKind}\n </span>\n {inst ? ` · ${t('financial.statements.installmentShort', { n: inst })}` : ''}\n </p>\n </div>\n )\n },\n },\n {\n id: 'method', header: t('financial.statements.columnMethod'),\n cell: ({ row }) => {\n const mov = row.original.movement\n const name = methodName(mov)\n return (\n <div>\n <p className=\"text-xs\">{name}</p>\n {mov.cardInstallments && mov.cardInstallments > 1 && (\n <p className=\"text-[10px] text-muted-foreground\">{mov.cardInstallments}x</p>\n )}\n </div>\n )\n },\n },\n {\n id: 'debit', header: t('financial.statements.columnDebit'),\n cell: ({ row }) => (\n <span className=\"text-right block text-destructive text-xs\">\n {row.original.movement.direction === 'debit' ? fmt(row.original.net) : ''}\n </span>\n ),\n },\n {\n id: 'credit', header: t('financial.statements.columnCredit'),\n cell: ({ row }) => {\n const e = row.original\n if (e.movement.direction !== 'credit') return <span className=\"block text-right\" />\n return (\n <div className=\"text-right\">\n <span className=\"block text-success text-xs\">{fmt(e.net)}</span>\n {e.fee > 0 && (\n <span className=\"block text-[10px] text-muted-foreground\">{fmt(e.gross)} − {fmt(e.fee)}</span>\n )}\n </div>\n )\n },\n },\n {\n id: 'fee', header: t('financial.statements.columnFee'),\n cell: ({ row }) => (\n <span className=\"text-right block text-warning text-xs\">\n {row.original.fee > 0 ? fmt(row.original.fee) : ''}\n </span>\n ),\n },\n {\n id: 'balance', header: t('financial.statements.columnBalance'),\n cell: ({ row }) => (\n <span className=\"text-right block font-medium text-xs\">{fmt(row.original.runningBalance)}</span>\n ),\n },\n ], [currency, t, methodName, onNavigate])\n\n const entries = statement?.entries ?? []\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader\n title={t('financial.statements.title')}\n subtitle={t('financial.statements.subtitle')}\n actions={\n <Button variant=\"outline\" size=\"sm\" onClick={() => setShowTransfer(true)} disabled={bankAccounts.length < 2}>\n <ArrowRightLeft className=\"h-3.5 w-3.5\" />\n {t('financial.statements.newTransfer')}\n </Button>\n }\n />\n\n {/* Filters */}\n <div className=\"flex flex-col sm:flex-row gap-3 sm:items-end\">\n <div className=\"flex-1 max-w-xs\">\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.account')}</label>\n <select\n value={accountId}\n onChange={(e) => setAccountId(e.target.value)}\n className=\"w-full mt-0.5 rounded-input border border-input bg-card shadow-[inset_0_1px_0_rgb(0_0_0_/0.06)] px-3 py-2 text-sm\"\n >\n <option value={ALL}>{t('financial.summary.allAccounts')}</option>\n {bankAccounts.map((a) => (\n <option key={a.id} value={a.id}>{a.name}</option>\n ))}\n </select>\n </div>\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.from')}</label>\n <DatePicker value={dateFrom} onChange={setDateFrom} className=\"mt-0.5\" />\n </div>\n <div>\n <label className=\"text-[10px] font-medium text-muted-foreground uppercase\">{t('financial.statements.to')}</label>\n <DatePicker value={dateTo} onChange={setDateTo} className=\"mt-0.5\" />\n </div>\n </div>\n\n {/* Summary header — standard bank-extract layout: opening → credits → debits → closing */}\n {accountId && statement && (\n <div className=\"grid grid-cols-2 sm:grid-cols-4 gap-2\">\n <SummaryStat label={t('financial.statements.opening')} value={fmt(statement.openingBalance)} />\n <SummaryStat label={t('financial.statements.totalCredits')} value={fmt(statement.totalCredits)} positive />\n <SummaryStat label={t('financial.statements.totalDebits')} value={fmt(statement.totalDebits)} negative />\n <SummaryStat label={t('financial.statements.closing')} value={fmt(statement.closingBalance)} accent />\n </div>\n )}\n\n {/* Statement table */}\n {!accountId ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center rounded-lg border-2 border-dashed border-muted\">\n <Receipt className=\"h-8 w-8 text-muted-foreground mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.statements.selectToView')}</p>\n </div>\n ) : statementLoading ? (\n <DataTable columns={columns} data={[]} loading skeletonRows={8} compact />\n ) : entries.length === 0 ? (\n <DataTable columns={columns} data={[]} emptyMessage={t('financial.statements.noTransactions')} compact />\n ) : (\n <DataTable columns={columns} data={entries} compact />\n )}\n\n {showTransfer && (\n <TransferModal\n defaultFromId={accountId && accountId !== ALL ? accountId : undefined}\n onClose={() => setShowTransfer(false)}\n onDone={() => setShowTransfer(false)}\n />\n )}\n </div>\n )\n}\n\nfunction SummaryStat({ label, value, accent, positive, negative }: {\n label: string\n value: string\n accent?: boolean\n positive?: boolean\n negative?: boolean\n}) {\n const valueClass = positive ? 'text-success' : negative ? 'text-destructive' : accent ? 'text-foreground' : 'text-foreground'\n return (\n <div className={`rounded-lg border px-3 py-2 ${accent ? 'bg-muted/40' : 'bg-card'}`}>\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase truncate\">{label}</p>\n <p className={`text-sm font-semibold mt-0.5 ${valueClass}`}>{value}</p>\n </div>\n )\n}\n","import React from 'react'\nimport { useFinancialConfig } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nexport function CommissionsView() {\n const t = useTranslation()\n const { labels } = useFinancialConfig()\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={labels.commissions} subtitle={t('financial.commissions.subtitle')} />\n <div className=\"flex items-center justify-center rounded-lg border-2 border-dashed border-muted p-12\">\n <p className=\"text-sm text-muted-foreground\">{t('financial.commissions.comingSoon')}</p>\n </div>\n </div>\n )\n}\n","import React, { useEffect } from 'react'\nimport { CreditCard, Check } from 'lucide-react'\nimport { useFinancialConfig, useFinancialStore, formatCurrency } from '../FinancialContext'\nimport { SubpageHeader } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\n\nexport function CardsView() {\n const t = useTranslation()\n const { currency, labels } = useFinancialConfig()\n const cardTransactions = useFinancialStore((s) => s.cardTransactions)\n const cardsLoading = useFinancialStore((s) => s.cardsLoading)\n const fetchCardTransactions = useFinancialStore((s) => s.fetchCardTransactions)\n\n useEffect(() => { fetchCardTransactions() }, [])\n\n // Group by card brand\n const byBrand: Record<string, typeof cardTransactions> = {}\n for (const tx of cardTransactions) {\n const brand = tx.cardBrand || 'Other'\n if (!byBrand[brand]) byBrand[brand] = []\n byBrand[brand].push(tx)\n }\n\n return (\n <div className=\"space-y-4\">\n <SubpageHeader title={t('financial.cards.title')} subtitle={t('financial.cards.subtitle')} />\n {cardsLoading ? (\n <div className=\"text-center py-12 text-sm text-muted-foreground\">Loading...</div>\n ) : cardTransactions.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-12 text-center rounded-lg border-2 border-dashed border-muted\">\n <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-indigo-50 dark:bg-indigo-500/20 mb-2\">\n <CreditCard className=\"h-5 w-5 text-indigo-500\" />\n </div>\n <p className=\"text-sm text-muted-foreground\">{t('financial.cards.noTransactions')}</p>\n <p className=\"text-xs text-muted-foreground mt-0.5\">{t('financial.cards.transactionsAppear')}</p>\n </div>\n ) : (\n Object.entries(byBrand).map(([brand, txs]) => (\n <div key={brand} className=\"rounded-lg border bg-card shadow-sm\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <CreditCard className=\"h-4 w-4 text-indigo-500\" />\n <h3 className=\"text-sm font-semibold\">{brand}</h3>\n <span className=\"text-xs text-muted-foreground\">({txs.length} transactions)</span>\n </div>\n <div className=\"divide-y\">\n {txs.map((tx) => (\n <div key={tx.id} className=\"px-4 py-3 flex items-center justify-between\">\n <div>\n <p className=\"text-sm font-medium\">\n Installment {tx.currentInstallment}/{tx.installmentCount}\n </p>\n <p className=\"text-xs text-muted-foreground\">Due: {tx.expectedDate}</p>\n </div>\n <div className=\"flex items-center gap-3\">\n <span className=\"text-sm font-medium\">{formatCurrency(tx.installmentAmount, currency)}</span>\n {tx.status === 'received' ? (\n <span className=\"inline-flex items-center gap-1 rounded-full bg-success/15 px-2 py-0.5 text-[10px] font-medium text-success dark:bg-success/20\">\n <Check className=\"h-2.5 w-2.5\" /> Received\n </span>\n ) : (\n <span className=\"inline-flex items-center rounded-full bg-warning/15 px-2 py-0.5 text-[10px] font-medium text-warning dark:bg-warning/20\">\n Pending\n </span>\n )}\n </div>\n </div>\n ))}\n </div>\n </div>\n ))\n )}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { Landmark, RefreshCw, Check, Link2, Sparkles, ArrowDownCircle, ArrowUpCircle } from 'lucide-react'\nimport { Button, toast } from '@fayz-ai/ui'\nimport { useFinancialConfig, useFinancialProvider, formatCurrency } from '../FinancialContext'\nimport { useTranslation } from '@fayz-ai/core'\nimport type { FinancialMovement, ReconciliationCandidate } from '../types'\n\n// ---------------------------------------------------------------------------\n// Reconciliation (conciliação) — match imported bank lines to internal movements\n//\n// Imported bank-statement lines live in financial_movements tagged with an\n// externalSource. This screen lets the operator link each pending line to the\n// internal movement it settles (suggested by amount + date proximity), or\n// accept it standalone. Reusable across apps — fed by any bank connector that\n// imports through the financial provider's reconciliation methods.\n// ---------------------------------------------------------------------------\n\nexport function ReconciliationView() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const provider = useFinancialProvider()\n const fmt = (n: number) => formatCurrency(n, currency)\n\n const [lines, setLines] = useState<FinancialMovement[]>([])\n const [loading, setLoading] = useState(true)\n const [selectedId, setSelectedId] = useState<string | null>(null)\n const [candidates, setCandidates] = useState<ReconciliationCandidate[]>([])\n const [candidatesLoading, setCandidatesLoading] = useState(false)\n const [busy, setBusy] = useState(false)\n\n const supported = typeof provider.getUnreconciled === 'function'\n\n const load = useCallback(async () => {\n if (!provider.getUnreconciled) return\n setLoading(true)\n try {\n const data = await provider.getUnreconciled()\n setLines(data)\n // Keep the selection valid; otherwise drop the right panel.\n setSelectedId((prev) => (prev && data.some((l) => l.id === prev) ? prev : null))\n } finally {\n setLoading(false)\n }\n }, [provider])\n\n useEffect(() => { void load() }, [load])\n\n // Load suggestions whenever the selected line changes.\n useEffect(() => {\n if (!selectedId || !provider.suggestReconciliation) { setCandidates([]); return }\n let cancelled = false\n setCandidatesLoading(true)\n provider.suggestReconciliation(selectedId)\n .then((c) => { if (!cancelled) setCandidates(c) })\n .finally(() => { if (!cancelled) setCandidatesLoading(false) })\n return () => { cancelled = true }\n }, [selectedId, provider])\n\n async function match(bankMovementId: string, matchedMovementId?: string) {\n if (!provider.reconcileMovement) return\n setBusy(true)\n try {\n await provider.reconcileMovement({ bankMovementId, matchedMovementId })\n toast.success(t('financial.reconciliation.match'))\n await load()\n } catch {\n toast.error(t('common.error'))\n } finally {\n setBusy(false)\n }\n }\n\n if (!supported) {\n return (\n <div className=\"py-16 text-center\">\n <Landmark className=\"h-8 w-8 text-muted-foreground/30 mx-auto mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.reconciliation.empty')}</p>\n </div>\n )\n }\n\n const selected = lines.find((l) => l.id === selectedId) ?? null\n\n return (\n <div className=\"space-y-4\">\n {/* Header */}\n <div className=\"flex items-start justify-between gap-3\">\n <div>\n <h2 className=\"text-lg font-semibold tracking-tight\">{t('financial.reconciliation.title')}</h2>\n <p className=\"text-sm text-muted-foreground\">{t('financial.reconciliation.subtitle')}</p>\n </div>\n <div className=\"flex items-center gap-2\">\n <span className=\"text-xs text-muted-foreground\">\n {lines.length > 0\n ? t('financial.reconciliation.pending', { count: lines.length })\n : t('financial.reconciliation.allDone')}\n </span>\n <Button variant=\"outline\" size=\"sm\" onClick={() => void load()} disabled={loading || busy}>\n <RefreshCw className={`h-3.5 w-3.5 ${loading ? 'animate-spin' : ''}`} />\n {t('financial.reconciliation.refresh')}\n </Button>\n </div>\n </div>\n\n {lines.length === 0 && !loading ? (\n <div className=\"rounded-lg border bg-card shadow-sm py-16 text-center\">\n <Check className=\"h-8 w-8 text-success/40 mx-auto mb-2\" />\n <p className=\"text-sm font-medium\">{t('financial.reconciliation.empty')}</p>\n <p className=\"text-xs text-muted-foreground mt-1\">{t('financial.reconciliation.emptyHint')}</p>\n </div>\n ) : (\n <div className=\"grid gap-4 lg:grid-cols-2\">\n {/* Left — pending bank lines */}\n <div className=\"rounded-lg border bg-card shadow-sm overflow-hidden\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <Landmark className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.reconciliation.bankLines')}</h3>\n </div>\n <div className=\"divide-y max-h-[60vh] overflow-auto\">\n {lines.map((line) => {\n const isCredit = line.direction === 'credit'\n return (\n <button\n key={line.id}\n onClick={() => setSelectedId(line.id)}\n className={`w-full flex items-center gap-3 px-4 py-3 text-left hover:bg-muted/40 transition-colors ${\n selectedId === line.id ? 'bg-muted/50' : ''\n }`}\n >\n {isCredit\n ? <ArrowDownCircle className=\"h-4 w-4 text-success shrink-0\" />\n : <ArrowUpCircle className=\"h-4 w-4 text-destructive shrink-0\" />}\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm truncate\">{line.notes || line.externalId}</p>\n <p className=\"text-[10px] text-muted-foreground\">\n {line.paymentDate ?? line.dueDate}\n {line.externalSource && <span className=\"ml-1 uppercase tracking-wide\">· {line.externalSource}</span>}\n </p>\n </div>\n <span className={`text-sm font-semibold shrink-0 ${isCredit ? 'text-success' : 'text-destructive'}`}>\n {fmt(line.amount)}\n </span>\n </button>\n )\n })}\n </div>\n </div>\n\n {/* Right — suggested matches for the selected line */}\n <div className=\"rounded-lg border bg-card shadow-sm overflow-hidden\">\n <div className=\"flex items-center gap-2 px-4 py-3 border-b\">\n <Sparkles className=\"h-4 w-4 text-muted-foreground\" />\n <h3 className=\"text-sm font-semibold\">{t('financial.reconciliation.candidates')}</h3>\n </div>\n\n {!selected ? (\n <p className=\"px-4 py-16 text-center text-sm text-muted-foreground\">\n {t('financial.reconciliation.selectLine')}\n </p>\n ) : (\n <div className=\"p-3 space-y-2\">\n {candidatesLoading ? (\n <div className=\"py-10 text-center text-xs text-muted-foreground\">…</div>\n ) : (\n <>\n {candidates.map((c) => (\n <div key={c.movement.id} className=\"flex items-center gap-3 rounded-md border p-2.5\">\n <div className=\"min-w-0 flex-1\">\n <p className=\"text-sm truncate\">\n {c.invoice?.contactName || c.movement.notes || c.invoice?.fiscalNumber || t('financial.reconciliation.match')}\n </p>\n <p className=\"text-[10px] text-muted-foreground\">\n {c.movement.dueDate}\n <span className=\"ml-1.5 inline-flex items-center rounded px-1 py-px bg-primary/10 text-primary font-medium\">\n {t('financial.reconciliation.matchScore', { score: Math.round(c.score * 100) })}\n </span>\n </p>\n </div>\n <span className=\"text-sm font-semibold shrink-0\">{fmt(c.movement.amount)}</span>\n <Button size=\"sm\" disabled={busy} onClick={() => match(selected.id, c.movement.id)}>\n <Link2 className=\"h-3.5 w-3.5\" />\n {t('financial.reconciliation.match')}\n </Button>\n </div>\n ))}\n {candidates.length === 0 && (\n <p className=\"py-6 text-center text-xs text-muted-foreground\">\n {t('financial.reconciliation.noCandidates')}\n </p>\n )}\n\n {/* Accept the line standalone (no internal counterpart) */}\n <div className=\"pt-2 mt-1 border-t\">\n <Button variant=\"outline\" size=\"sm\" className=\"w-full\" disabled={busy} onClick={() => match(selected.id)}>\n <Check className=\"h-3.5 w-3.5\" />\n {t('financial.reconciliation.accept')}\n </Button>\n <p className=\"text-[10px] text-muted-foreground text-center mt-1\">\n {t('financial.reconciliation.acceptHint')}\n </p>\n </div>\n </>\n )}\n </div>\n )}\n </div>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { SettingsGroup, ToggleRow } from '@fayz-ai/saas'\nimport { useTranslation } from '@fayz-ai/core'\n\nexport function FinancialGeneralSettings() {\n const t = useTranslation()\n return (\n <div className=\"space-y-4\">\n <SettingsGroup title={t('financial.settings.invoices')} description={t('financial.settings.invoicesDesc')}>\n <ToggleRow label={t('financial.settings.autoInstallments')} description={t('financial.settings.autoInstallmentsDesc')} checked={true} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.requireDoc')} description={t('financial.settings.requireDocDesc')} checked={false} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.allowPartial')} description={t('financial.settings.allowPartialDesc')} checked={true} onChange={() => {}} />\n </SettingsGroup>\n\n <SettingsGroup title={t('financial.settings.cashRegister')} description={t('financial.settings.cashRegisterDesc')}>\n <ToggleRow label={t('financial.settings.requireOpening')} description={t('financial.settings.requireOpeningDesc')} checked={true} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.autoClose')} description={t('financial.settings.autoCloseDesc')} checked={false} onChange={() => {}} />\n </SettingsGroup>\n\n <SettingsGroup title={t('financial.settings.notifications')} description={t('financial.settings.notificationsDesc')}>\n <ToggleRow label={t('financial.settings.overdueAlerts')} description={t('financial.settings.overdueAlertsDesc')} checked={true} onChange={() => {}} />\n <ToggleRow label={t('financial.settings.dailySummary')} description={t('financial.settings.dailySummaryDesc')} checked={false} onChange={() => {}} />\n </SettingsGroup>\n </div>\n )\n}\n","import React, { useState } from 'react'\nimport { DollarSign, Landmark, CreditCard, BookOpen, ChevronRight, Check } from 'lucide-react'\nimport { useTranslation } from '@fayz-ai/core'\nimport { Button } from '@fayz-ai/ui'\n\nconst STEPS = [\n { id: 'welcome', icon: DollarSign, titleKey: 'financial.onboarding.welcome', descKey: 'financial.onboarding.description' },\n { id: 'accounts', icon: Landmark, titleKey: 'financial.onboarding.accounts.title', descKey: 'financial.onboarding.accounts.description' },\n { id: 'payments', icon: CreditCard, titleKey: 'financial.onboarding.payments.title', descKey: 'financial.onboarding.payments.description' },\n { id: 'chart', icon: BookOpen, titleKey: 'financial.onboarding.chart.title', descKey: 'financial.onboarding.chart.description' },\n]\n\nexport function FinancialOnboarding({ onComplete }: { onComplete: () => void }) {\n const t = useTranslation()\n const [step, setStep] = useState(0)\n const current = STEPS[step]\n const isLast = step === STEPS.length - 1\n const Icon = current.icon\n\n return (\n <div className=\"flex items-center justify-center py-12\">\n <div className=\"w-full max-w-lg\">\n {/* Progress */}\n <div className=\"flex items-center gap-1 mb-8\">\n {STEPS.map((s, i) => (\n <div\n key={s.id}\n className={`h-1 flex-1 rounded-full transition-colors ${\n i <= step ? 'bg-primary' : 'bg-muted'\n }`}\n />\n ))}\n </div>\n\n {/* Card */}\n <div className=\"rounded-card border bg-card p-8 text-center space-y-6 shadow-sm\">\n <div className=\"flex justify-center\">\n <div className=\"flex h-16 w-16 items-center justify-center rounded-2xl bg-primary/10\">\n <Icon className=\"h-8 w-8 text-primary\" />\n </div>\n </div>\n\n <div>\n <h2 className=\"text-xl font-bold\">{t(current.titleKey)}</h2>\n <p className=\"text-sm text-muted-foreground mt-2 max-w-sm mx-auto\">{t(current.descKey)}</p>\n </div>\n\n {/* Step-specific hint */}\n {step > 0 && step < STEPS.length - 1 && (\n <div className=\"rounded-lg bg-muted/30 px-4 py-3 text-xs text-muted-foreground\">\n {t('financial.onboarding.configureHint')}\n </div>\n )}\n\n {/* Actions */}\n <div className=\"flex items-center justify-center gap-3 pt-2\">\n {step > 0 && (\n <Button variant=\"outline\" size=\"lg\" onClick={() => setStep(step - 1)}>\n {t('financial.onboarding.back')}\n </Button>\n )}\n {isLast ? (\n <Button variant=\"default\" size=\"lg\" onClick={onComplete}>\n <Check className=\"h-4 w-4\" /> {t('financial.onboarding.startUsing')}\n </Button>\n ) : (\n <Button variant=\"default\" size=\"lg\" onClick={() => setStep(step + 1)}>\n {step === 0 ? t('financial.onboarding.getStarted') : t('financial.onboarding.next')}\n <ChevronRight className=\"h-4 w-4\" />\n </Button>\n )}\n </div>\n\n {/* Skip */}\n {!isLast && step === 0 && (\n <button\n onClick={onComplete}\n className=\"text-xs text-muted-foreground hover:text-foreground transition-colors\"\n >\n {t('financial.onboarding.skip')}\n </button>\n )}\n </div>\n </div>\n </div>\n )\n}\n","import React, { useState, useCallback, useMemo } from 'react'\nimport type { StoreApi } from 'zustand/vanilla'\nimport { useTranslation } from '@fayz-ai/core'\nimport { ModulePage, PageTransition, type ModuleNavItem } from '@fayz-ai/ui'\nimport { FinancialContextProvider, type ResolvedFinancialConfig } from './FinancialContext'\nimport type { FinancialDataProvider } from './data/types'\nimport type { FinancialUIState } from './store'\nimport type { PluginRegistryDef, PluginQuickAction } from '@fayz-ai/core'\nimport { useModuleNavigation, ModuleActionBar, parseViewId, PluginSettingsPanel } from '@fayz-ai/saas'\nimport { SummaryView } from './views/SummaryView'\nimport { PayablesView } from './views/PayablesView'\nimport { ReceivablesView } from './views/ReceivablesView'\nimport { CashRegistersView } from './views/CashRegistersView'\nimport { StatementsView } from './views/StatementsView'\nimport { CommissionsView } from './views/CommissionsView'\nimport { CardsView } from './views/CardsView'\nimport { ReconciliationView } from './views/ReconciliationView'\nimport { FinancialGeneralSettings } from './components/FinancialGeneralSettings'\nimport { FinancialOnboarding } from './components/FinancialOnboarding'\n\n// ---------------------------------------------------------------------------\n// View intent — what subpage + mode to show\n// ---------------------------------------------------------------------------\n\nexport interface ViewIntent {\n view: string\n mode?: 'list' | 'new' | 'edit' | 'detail'\n editId?: string\n}\n\nfunction parseIntent(activeView: string): ViewIntent {\n // `base` collapses 'payables-detail' / 'payables-edit' etc; `id` is the canonical :id param.\n const { base, id } = parseViewId(activeView)\n const m = base.match(/^(payables|receivables)-(new|list|detail|edit)$/)\n if (m) return { view: m[1], mode: m[2] as ViewIntent['mode'], editId: id }\n return { view: activeView }\n}\n\n// ---------------------------------------------------------------------------\n// Nav builder\n// ---------------------------------------------------------------------------\n\nfunction buildNav(\n config: ResolvedFinancialConfig,\n activeView: string,\n navigate: (view: string, hash?: string) => void,\n t: (key: string, params?: Record<string, string | number>) => string,\n): ModuleNavItem[] {\n const items: ModuleNavItem[] = [\n {\n id: 'summary',\n label: t('financial.nav.summary'),\n icon: 'BarChart3',\n active: activeView === 'summary',\n onClick: () => navigate('summary'),\n },\n ]\n\n if (config.modules.payables) {\n items.push({\n id: 'payables',\n label: t('financial.nav.payables'),\n icon: 'ArrowUpCircle',\n active: activeView.startsWith('payables'),\n children: [\n { id: 'payables-new', label: t('financial.nav.new'), active: activeView === 'payables-new', onClick: () => navigate('payables-new') },\n { id: 'payables-list', label: t('financial.nav.list'), active: activeView === 'payables-list', onClick: () => navigate('payables-list') },\n { id: 'payables-recurring', label: t('financial.nav.recurringExpenses'), active: activeView === 'payables-recurring', onClick: () => navigate('payables-recurring') },\n ],\n })\n }\n\n if (config.modules.receivables) {\n items.push({\n id: 'receivables',\n label: t('financial.nav.receivables'),\n icon: 'ArrowDownCircle',\n active: activeView.startsWith('receivables'),\n children: [\n { id: 'receivables-new', label: t('financial.nav.new'), active: activeView === 'receivables-new', onClick: () => navigate('receivables-new') },\n { id: 'receivables-list', label: t('financial.nav.list'), active: activeView === 'receivables-list', onClick: () => navigate('receivables-list') },\n ],\n })\n }\n\n if (config.modules.cashRegisters) {\n items.push({\n id: 'cash-registers',\n label: t('financial.nav.cashRegisters'),\n icon: 'Landmark',\n active: activeView === 'cash-registers',\n onClick: () => navigate('cash-registers'),\n })\n }\n\n // Statements (extract) is core to the financial module — always shown, not gated per app.\n items.push({\n id: 'statements',\n label: t('financial.nav.statements'),\n icon: 'Receipt',\n active: activeView === 'statements',\n onClick: () => navigate('statements'),\n })\n\n if (config.modules.reconciliation) {\n items.push({\n id: 'reconciliation',\n label: t('financial.nav.reconciliation'),\n icon: 'ArrowLeftRight',\n active: activeView === 'reconciliation',\n onClick: () => navigate('reconciliation'),\n })\n }\n\n if (config.modules.commissions) {\n items.push({\n id: 'commissions',\n label: t('financial.nav.commissions'),\n icon: 'Users',\n children: [\n { id: 'commissions-overview', label: t('financial.nav.overview'), active: activeView === 'commissions', onClick: () => navigate('commissions') },\n { id: 'commissions-rules', label: t('financial.nav.rules'), active: activeView === 'commissions', onClick: () => navigate('commissions') },\n ],\n })\n }\n\n if (config.modules.cards) {\n items.push({\n id: 'cards',\n label: t('financial.nav.cards'),\n icon: 'CreditCard',\n children: [\n { id: 'cards-overview', label: t('financial.nav.overview'), active: activeView === 'cards', onClick: () => navigate('cards') },\n { id: 'cards-reconciliation', label: t('financial.nav.reconciliation'), active: activeView === 'cards', onClick: () => navigate('cards') },\n ],\n })\n }\n\n return items\n}\n\n// ---------------------------------------------------------------------------\n// Main page component\n// ---------------------------------------------------------------------------\n\nexport function FinancialPage({ config, provider, store, registries }: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n registries?: PluginRegistryDef[]\n}) {\n const { view, direction, navigate, previousView, back } = useModuleNavigation('/financial', {\n summary: 0,\n 'payables-list': 0, 'payables-new': 1, 'receivables-list': 0, 'receivables-new': 1,\n 'cash-registers': 0, statements: 0, reconciliation: 0, commissions: 0, cards: 0,\n settings: 1,\n })\n\n const [onboardingComplete, setOnboardingComplete] = useState(() => {\n try { return localStorage.getItem('saas-core:financial-onboarded') === 'true' } catch { return false }\n })\n\n const t = useTranslation()\n const intent = parseIntent(view)\n const isSettings = view === 'settings'\n const nav = buildNav(config, view, navigate, t)\n\n const quickActions = useMemo<PluginQuickAction[]>(() => {\n const actions: PluginQuickAction[] = []\n if (config.modules.payables) {\n actions.push({\n id: 'new-payable',\n label: t('financial.quickActions.newPayable'),\n icon: 'ArrowUpCircle',\n description: t('financial.quickActions.newPayableDesc'),\n action: () => navigate('payables-new'),\n })\n }\n if (config.modules.receivables) {\n actions.push({\n id: 'new-receivable',\n label: t('financial.quickActions.newReceivable'),\n icon: 'ArrowDownCircle',\n description: t('financial.quickActions.newReceivableDesc'),\n action: () => navigate('receivables-new'),\n })\n }\n if (config.modules.cashRegisters) {\n actions.push({\n id: 'open-cash',\n label: t('financial.quickActions.openCashRegister'),\n icon: 'Landmark',\n description: t('financial.quickActions.openCashRegisterDesc'),\n action: () => navigate('cash-registers'),\n })\n }\n return actions\n }, [config.modules])\n\n function handleOnboardingComplete() {\n setOnboardingComplete(true)\n try { localStorage.setItem('saas-core:financial-onboarded', 'true') } catch {}\n }\n\n // Show onboarding on first visit\n if (!onboardingComplete) {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <FinancialOnboarding onComplete={handleOnboardingComplete} />\n </FinancialContextProvider>\n )\n }\n\n // Settings view\n if (isSettings && registries && registries.length > 0) {\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <PageTransition transitionKey=\"settings\" direction={direction}>\n <div style={{ padding: '24px' }}>\n <PluginSettingsPanel\n title={t('financial.settingsPage.title')}\n subtitle={t('financial.settingsPage.subtitle')}\n generalSettings={<FinancialGeneralSettings />}\n registries={registries}\n hostPluginId=\"financial\"\n routeBase=\"/settings/financial\"\n />\n </div>\n </PageTransition>\n </FinancialContextProvider>\n )\n }\n\n function renderView() {\n switch (intent.view) {\n case 'payables':\n return <PayablesView intent={intent} onNavigate={navigate} previousView={previousView} back={back} />\n case 'receivables':\n return <ReceivablesView intent={intent} onNavigate={navigate} previousView={previousView} back={back} />\n case 'cash-registers':\n return <CashRegistersView />\n case 'statements':\n return <StatementsView onNavigate={navigate} />\n case 'reconciliation':\n return <ReconciliationView />\n case 'commissions':\n return <CommissionsView />\n case 'cards':\n return <CardsView />\n default:\n return <SummaryView />\n }\n }\n\n return (\n <FinancialContextProvider config={config} provider={provider} store={store}>\n <ModulePage\n title={config.labels.pageTitle}\n subtitle={config.labels.pageSubtitle}\n nav={nav}\n showHeader={intent.view === 'summary' || view === 'summary'}\n viewKey={view}\n direction={direction}\n headerAction={\n <ModuleActionBar\n quickActions={quickActions}\n settingsPath={registries && registries.length > 0 ? '/settings/financial' : undefined}\n settingsLabel={t('financial.settingsPage.title')}\n />\n }\n >\n {renderView()}\n </ModulePage>\n </FinancialContextProvider>\n )\n}\n","import React, { useEffect } from 'react'\nimport { ArrowUpRight, ArrowDownRight, AlertTriangle } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport type { StoreApi } from 'zustand'\nimport type { DashboardWidgetDef } from '@fayz-ai/core'\nimport { useTranslation } from '@fayz-ai/core'\nimport {\n KpiCard, ChartWidget, TableWidget, Card, CardHeader, CardTitle, CardContent,\n defineKpiWidget, defineChartWidget, defineCustomWidget, defineTableWidget,\n} from '@fayz-ai/ui'\nimport { FinancialContextProvider, useFinancialConfig, useFinancialStore, formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport type { FinancialDataProvider } from '../data/types'\nimport type { FinancialUIState } from '../store'\nimport type { Invoice } from '../types'\n\nfunction useEnsureSummary() {\n const fetchSummary = useFinancialStore((s) => s.fetchSummary)\n useEffect(() => { void fetchSummary() }, [])\n}\n\n// ---------------------------------------------------------------------------\n// KPIs\n// ---------------------------------------------------------------------------\n\nfunction TotalBalanceKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n const loading = useFinancialStore((s) => s.summaryLoading)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.totalBalance')} icon=\"Wallet\" value={formatCurrency(summary?.totalBalance ?? 0, currency)} sub={loading ? undefined : t('financial.summary.allAccounts')} />\n}\n\nfunction ReceivableKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.receivable')} icon=\"TrendingUp\" value={formatCurrency(summary?.totalReceivable ?? 0, currency)} sub={t('financial.summary.overdue', { count: String(summary?.overdueReceivableCount ?? 0) })} />\n}\n\nfunction PayableKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n return <KpiCard label={t('financial.summary.payable')} icon=\"TrendingDown\" value={formatCurrency(summary?.totalPayable ?? 0, currency)} sub={t('financial.summary.overdue', { count: String(summary?.overduePayableCount ?? 0) })} />\n}\n\nfunction MonthlyFlowKpi() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n return <KpiCard label={t('financial.summary.monthlyFlow')} icon=\"BarChart3\" value={formatCurrency(inflow - outflow, currency)} sub={inflow >= outflow ? t('financial.summary.positiveBalance') : t('financial.summary.negativeBalance')} />\n}\n\n// ---------------------------------------------------------------------------\n// Cash flow (recharts) + breakdown + overdue alerts\n// ---------------------------------------------------------------------------\n\nfunction CashFlowChart() {\n const t = useTranslation()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const data = [{ name: t('financial.summary.cashFlow'), income: summary?.monthlyInflow ?? 0, expenses: summary?.monthlyOutflow ?? 0 }]\n return (\n <ChartWidget\n type=\"bar\" title={t('financial.summary.cashFlow')} icon=\"BarChart3\" categoryKey=\"name\" data={data}\n series={[\n { dataKey: 'income', label: t('financial.summary.income'), color: 'hsl(var(--success))' },\n { dataKey: 'expenses', label: t('financial.summary.expenses'), color: 'hsl(var(--destructive))' },\n ]}\n />\n )\n}\n\nfunction CashFlowBreakdown() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const inflow = summary?.monthlyInflow ?? 0\n const outflow = summary?.monthlyOutflow ?? 0\n const total = Math.max(inflow + outflow, 1)\n return (\n <Card>\n <CardHeader><CardTitle>{t('financial.summary.cashFlowBreakdown')}</CardTitle></CardHeader>\n <CardContent className=\"space-y-4\">\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"flex items-center gap-1.5 text-muted-foreground\"><span className=\"h-2 w-2 rounded-full bg-success\" />{t('financial.summary.received')}</span>\n <span className=\"font-medium\">{formatCurrency(inflow, currency)}</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-muted\"><div className=\"h-full rounded-full bg-success\" style={{ width: `${(inflow / total) * 100}%` }} /></div>\n </div>\n <div className=\"space-y-1.5\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"flex items-center gap-1.5 text-muted-foreground\"><span className=\"h-2 w-2 rounded-full bg-destructive\" />{t('financial.summary.paid')}</span>\n <span className=\"font-medium\">{formatCurrency(outflow, currency)}</span>\n </div>\n <div className=\"h-2 overflow-hidden rounded-full bg-muted\"><div className=\"h-full rounded-full bg-destructive\" style={{ width: `${(outflow / total) * 100}%` }} /></div>\n </div>\n <div className=\"border-t pt-2\">\n <div className=\"flex items-center justify-between text-xs\">\n <span className=\"text-muted-foreground\">{t('financial.summary.net')}</span>\n <span className={`font-semibold ${inflow - outflow >= 0 ? 'text-success' : 'text-destructive'}`}>{formatCurrency(inflow - outflow, currency)}</span>\n </div>\n </div>\n </CardContent>\n </Card>\n )\n}\n\nfunction OverdueAlerts() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const summary = useFinancialStore((s) => s.summary)\n useEnsureSummary()\n const items = [\n { label: t('financial.summary.overdueReceivable'), value: summary?.overdueReceivableAmount ?? 0, count: summary?.overdueReceivableCount ?? 0, Icon: ArrowUpRight, color: 'text-warning' },\n { label: t('financial.summary.overduePayable'), value: summary?.overduePayableAmount ?? 0, count: summary?.overduePayableCount ?? 0, Icon: ArrowDownRight, color: 'text-destructive' },\n ]\n return (\n <Card>\n <CardHeader><CardTitle className=\"flex items-center gap-2\"><AlertTriangle className=\"h-4 w-4 text-warning\" />{t('financial.summary.overdueTitle')}</CardTitle></CardHeader>\n <CardContent className=\"space-y-3\">\n {items.map((item) => (\n <div key={item.label} className=\"flex items-center justify-between\">\n <div className=\"flex items-center gap-2\"><item.Icon className={`h-3.5 w-3.5 ${item.color}`} /><span className=\"text-sm text-muted-foreground\">{item.label}</span></div>\n <span className=\"text-sm font-semibold\">{formatCurrency(item.value, currency)}</span>\n </div>\n ))}\n {items.every((i) => i.count === 0) ? <p className=\"border-t pt-3 text-xs text-muted-foreground\">{t('financial.summary.noOverdue')}</p> : null}\n </CardContent>\n </Card>\n )\n}\n\nfunction RecentTransactions() {\n const t = useTranslation()\n const { currency } = useFinancialConfig()\n const invoices = useFinancialStore((s) => s.invoices)\n const fetchInvoices = useFinancialStore((s) => s.fetchInvoices)\n useEffect(() => { void fetchInvoices({ pageSize: 5 }) }, [])\n const columns: ColumnDef<Invoice, unknown>[] = [\n { accessorKey: 'contactName', header: t('financial.summary.recentTransactions'), cell: ({ row }) => <span className=\"font-medium\">{row.original.contactName || 'Unknown'}</span> },\n { id: 'date', header: '', cell: ({ row }) => <span className=\"text-xs capitalize text-muted-foreground\">{row.original.direction} · {row.original.invoiceDate}</span> },\n { accessorKey: 'totalAmount', header: '', cell: ({ row }) => (\n <span className={`font-semibold ${row.original.direction === 'credit' ? 'text-success' : 'text-destructive'}`}>\n {row.original.direction === 'credit' ? '+' : '-'}{formatCurrency(row.original.totalAmount, currency)}\n </span>\n ) },\n ]\n return <TableWidget title={t('financial.summary.recentTransactions')} icon=\"CircleDollarSign\" columns={columns} data={invoices.slice(0, 5)} emptyMessage={t('financial.summary.noTransactions')} />\n}\n\n// ---------------------------------------------------------------------------\n// Registry builder\n// ---------------------------------------------------------------------------\n\nexport function createFinancialDashboardWidgets(ctx: {\n config: ResolvedFinancialConfig\n provider: FinancialDataProvider\n store: StoreApi<FinancialUIState>\n}): DashboardWidgetDef[] {\n const withCtx = (Inner: React.ComponentType): React.ComponentType<unknown> => {\n const Wrapped = () => (\n <FinancialContextProvider config={ctx.config} provider={ctx.provider} store={ctx.store}>\n <Inner />\n </FinancialContextProvider>\n )\n Wrapped.displayName = `FinancialWidget(${Inner.displayName ?? Inner.name})`\n return Wrapped\n }\n\n return [\n // Total balance is finance's headline KPI on the global home; the rest are\n // home-hidden by default (shown on the financial plugin-home, addable via Customize).\n defineKpiWidget({ id: 'financial.kpi.total-balance', title: 'financial.summary.totalBalance', domain: 'financial', defaultOrder: 0, component: withCtx(TotalBalanceKpi) }),\n defineKpiWidget({ id: 'financial.kpi.receivable', title: 'financial.summary.receivable', domain: 'financial', defaultOrder: 1, defaultVisible: false, component: withCtx(ReceivableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.payable', title: 'financial.summary.payable', domain: 'financial', defaultOrder: 2, defaultVisible: false, component: withCtx(PayableKpi) }),\n defineKpiWidget({ id: 'financial.kpi.monthly-flow', title: 'financial.summary.monthlyFlow', domain: 'financial', defaultOrder: 3, defaultVisible: false, component: withCtx(MonthlyFlowKpi) }),\n defineChartWidget({ id: 'financial.chart.cash-flow', title: 'financial.summary.cashFlow', domain: 'financial', span: 2, defaultOrder: 10, surfaces: ['plugin-home'], component: withCtx(CashFlowChart) }),\n defineCustomWidget({ id: 'financial.panel.breakdown', title: 'financial.summary.cashFlowBreakdown', domain: 'financial', span: 1, defaultOrder: 11, surfaces: ['plugin-home'], component: withCtx(CashFlowBreakdown) }),\n defineCustomWidget({ id: 'financial.panel.overdue', title: 'financial.summary.overdueTitle', domain: 'financial', span: 1, defaultOrder: 12, surfaces: ['plugin-home'], component: withCtx(OverdueAlerts) }),\n defineTableWidget({ id: 'financial.table.recent', title: 'financial.summary.recentTransactions', domain: 'financial', span: 4, defaultOrder: 20, surfaces: ['plugin-home'], component: withCtx(RecentTransactions) }),\n ]\n}\n","import type { FinancialDataProvider } from './types'\nimport type {\n Invoice, InvoiceItem, FinancialMovement, BankAccount,\n CashSession, PaymentMethod, PaymentMethodType, ChartOfAccountsNode,\n CardTransaction,\n CreateInvoiceInput, PayMovementInput, CreateTransferInput, TransferResult,\n OpenCashSessionInput, CloseCashSessionInput, CreateBankAccountInput,\n InvoiceQuery, MovementQuery, StatementQuery,\n PaginatedResult, FinancialSummary, StatementEntry, StatementResult, CashSessionSummary,\n DateRange, InvoiceStatus, MovementStatus,\n} from '../types'\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nlet nextId = 1\nfunction uid(): string {\n return String(nextId++)\n}\n\nfunction now(): string {\n return new Date().toISOString()\n}\n\nfunction today(): string {\n return new Date().toISOString().slice(0, 10)\n}\n\nfunction round2(n: number): number {\n return Math.round(n * 100) / 100\n}\n\nfunction matchesDateRange(dateStr: string | undefined, range?: DateRange): boolean {\n if (!range || !dateStr) return true\n return dateStr >= range.from && dateStr <= range.to\n}\n\nfunction matchesStatus<T extends string>(status: T, filter?: T | T[]): boolean {\n if (!filter) return true\n if (Array.isArray(filter)) return filter.includes(status)\n return status === filter\n}\n\nfunction paginate<T>(items: T[], page?: number, pageSize?: number): PaginatedResult<T> {\n const p = page ?? 1\n const ps = pageSize ?? 50\n const start = (p - 1) * ps\n return { data: items.slice(start, start + ps), total: items.length }\n}\n\n// ---------------------------------------------------------------------------\n// In-memory store\n// ---------------------------------------------------------------------------\n\ninterface MockStore {\n invoices: Invoice[]\n invoiceItems: InvoiceItem[]\n movements: FinancialMovement[]\n bankAccounts: BankAccount[]\n cashSessions: CashSession[]\n paymentMethods: PaymentMethod[]\n paymentMethodTypes: PaymentMethodType[]\n chartOfAccounts: ChartOfAccountsNode[]\n cardTransactions: CardTransaction[]\n}\n\nfunction createStore(seedPaymentMethodTypes?: Array<{ name: string; transactionType?: string }>): MockStore {\n const tenantId = 'mock-tenant'\n\n const defaultPMTypes: PaymentMethodType[] = (seedPaymentMethodTypes ?? [\n { name: 'Cash', transactionType: 'cash' },\n { name: 'Credit Card', transactionType: 'credit_card' },\n { name: 'Debit Card', transactionType: 'debit_card' },\n { name: 'PIX', transactionType: 'pix' },\n { name: 'Bank Transfer', transactionType: 'transfer' },\n ]).map((t) => ({\n id: uid(),\n name: t.name,\n transactionType: t.transactionType,\n isActive: true,\n tenantId,\n createdAt: now(),\n }))\n\n const cashAccount: BankAccount = {\n id: uid(),\n name: 'Main Cash Register',\n accountType: 'cash_register',\n currentBalance: 0,\n initialBalance: 0,\n isActive: true,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n\n const bankAccount: BankAccount = {\n id: uid(),\n name: 'Business Checking',\n accountType: 'bank_account',\n bankName: 'Main Bank',\n currentBalance: 0,\n initialBalance: 0,\n isActive: true,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n\n return {\n invoices: [],\n invoiceItems: [],\n movements: [],\n bankAccounts: [cashAccount, bankAccount],\n cashSessions: [],\n paymentMethods: [],\n paymentMethodTypes: defaultPMTypes,\n chartOfAccounts: [],\n cardTransactions: [],\n }\n}\n\n// ---------------------------------------------------------------------------\n// Mock provider factory\n// ---------------------------------------------------------------------------\n\nexport interface MockFinancialProviderOptions {\n paymentMethodTypes?: Array<{ name: string; transactionType?: string }>\n}\n\nexport function createMockFinancialProvider(options?: MockFinancialProviderOptions): FinancialDataProvider {\n const store = createStore(options?.paymentMethodTypes)\n const tenantId = 'mock-tenant'\n\n function recalcInvoiceStatus(invoice: Invoice): void {\n if (invoice.paidAmount >= invoice.totalAmount) {\n invoice.status = 'paid'\n } else if (invoice.paidAmount > 0) {\n invoice.status = 'partial'\n } else {\n // Check if any movement is overdue\n const movements = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n const hasOverdue = movements.some((m) => m.status === 'overdue' || (m.status === 'pending' && m.dueDate < today()))\n invoice.status = hasOverdue ? 'overdue' : 'open'\n }\n invoice.updatedAt = now()\n }\n\n const provider: FinancialDataProvider = {\n // --- Invoices ---\n async getInvoices(query: InvoiceQuery): Promise<PaginatedResult<Invoice>> {\n let results = [...store.invoices]\n if (query.direction) results = results.filter((i) => i.direction === query.direction)\n if (query.status) results = results.filter((i) => matchesStatus(i.status, query.status as InvoiceStatus | InvoiceStatus[]))\n if (query.contactId) results = results.filter((i) => i.contactId === query.contactId)\n if (query.dateRange) results = results.filter((i) => matchesDateRange(i.invoiceDate, query.dateRange))\n if (query.search) {\n const s = query.search.toLowerCase()\n results = results.filter((i) =>\n i.contactName?.toLowerCase().includes(s) ||\n i.observations?.toLowerCase().includes(s) ||\n i.fiscalNumber?.toLowerCase().includes(s)\n )\n }\n results.sort((a, b) => b.createdAt.localeCompare(a.createdAt))\n return paginate(results, query.page, query.pageSize)\n },\n\n async getInvoiceById(id: string): Promise<Invoice | null> {\n return store.invoices.find((i) => i.id === id) ?? null\n },\n\n async getInvoiceItems(invoiceId: string): Promise<InvoiceItem[]> {\n return store.invoiceItems.filter((i) => i.invoiceId === invoiceId)\n },\n\n async createInvoice(input: CreateInvoiceInput): Promise<Invoice> {\n const invoiceId = uid()\n const totalAmount = input.items.reduce((sum, item) => {\n const itemTotal = item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0)\n return sum + itemTotal\n }, 0)\n\n const itemsSummary = input.items.map((i) => i.description).filter(Boolean).join(', ')\n\n const invoice: Invoice = {\n id: invoiceId,\n direction: input.direction,\n invoiceDate: input.invoiceDate,\n fiscalNumber: input.fiscalNumber,\n totalAmount,\n paidAmount: 0,\n status: 'open',\n totalInstallments: input.installments.length || 1,\n contactId: input.contactId,\n contactName: input.contactName,\n cashSessionId: input.cashSessionId,\n unitId: input.unitId,\n observations: input.observations,\n itemsSummary: itemsSummary || undefined,\n metadata: input.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.invoices.push(invoice)\n\n // Create items\n for (const itemInput of input.items) {\n const itemTotal = itemInput.quantity * itemInput.unitPrice - (itemInput.discount ?? 0) + (itemInput.surcharge ?? 0)\n const item: InvoiceItem = {\n id: uid(),\n invoiceId,\n itemKind: itemInput.itemKind,\n referenceId: itemInput.referenceId,\n description: itemInput.description,\n quantity: itemInput.quantity,\n unitPrice: itemInput.unitPrice,\n totalAmount: itemTotal,\n discount: itemInput.discount ?? 0,\n surcharge: itemInput.surcharge ?? 0,\n accountId: itemInput.accountId,\n costCenterId: itemInput.costCenterId,\n metadata: itemInput.metadata,\n createdAt: now(),\n }\n store.invoiceItems.push(item)\n }\n\n // Create installment movements\n for (const movInput of input.installments) {\n const movement: FinancialMovement = {\n id: uid(),\n invoiceId,\n direction: input.direction,\n movementKind: movInput.movementKind,\n amount: movInput.amount,\n paidAmount: 0,\n status: 'pending',\n dueDate: movInput.dueDate,\n installmentNumber: movInput.installmentNumber,\n paymentMethodId: movInput.paymentMethodId,\n bankAccountId: movInput.bankAccountId,\n notes: movInput.notes,\n metadata: movInput.metadata,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push(movement)\n }\n\n return invoice\n },\n\n async updateInvoice(id: string, data: Partial<Invoice>): Promise<Invoice> {\n const invoice = store.invoices.find((i) => i.id === id)\n if (!invoice) throw new Error(`Invoice ${id} not found`)\n Object.assign(invoice, data, { updatedAt: now() })\n return invoice\n },\n\n async cancelInvoice(id: string): Promise<void> {\n const invoice = store.invoices.find((i) => i.id === id)\n if (!invoice) throw new Error(`Invoice ${id} not found`)\n invoice.status = 'cancelled'\n invoice.updatedAt = now()\n // Cancel all pending movements\n store.movements\n .filter((m) => m.invoiceId === id && m.status === 'pending')\n .forEach((m) => { m.status = 'cancelled'; m.updatedAt = now() })\n },\n\n // --- Movements ---\n async getMovements(query: MovementQuery): Promise<PaginatedResult<FinancialMovement>> {\n let results = [...store.movements]\n if (query.direction) results = results.filter((m) => m.direction === query.direction)\n if (query.status) results = results.filter((m) => matchesStatus(m.status, query.status as MovementStatus | MovementStatus[]))\n if (query.bankAccountId) results = results.filter((m) => m.bankAccountId === query.bankAccountId)\n if (query.cashSessionId) results = results.filter((m) => m.cashSessionId === query.cashSessionId)\n if (query.dateRange) results = results.filter((m) => matchesDateRange(m.dueDate, query.dateRange))\n results.sort((a, b) => a.dueDate.localeCompare(b.dueDate))\n return paginate(results, query.page, query.pageSize)\n },\n\n async payMovement(input: PayMovementInput): Promise<FinancialMovement> {\n const bill = store.movements.find((m) => m.id === input.movementId)\n if (!bill) throw new Error(`Movement ${input.movementId} not found`)\n\n // Net card settlement: derive the processing/MDR fee from the payment method (credits only).\n const method = input.paymentMethodId ? store.paymentMethods.find((pm) => pm.id === input.paymentMethodId) : undefined\n const feePct = bill.direction === 'credit' ? (method?.discountValue ?? 0) : 0\n const thisFee = round2(input.amount * (feePct / 100))\n\n // 1. Record the cash event as its OWN payment movement (one row per payment).\n const payment: FinancialMovement = {\n id: uid(),\n invoiceId: bill.invoiceId,\n direction: bill.direction,\n movementKind: 'payment',\n amount: input.amount,\n paidAmount: input.amount,\n feeAmount: thisFee,\n status: 'paid',\n dueDate: bill.dueDate,\n paymentDate: input.paymentDate,\n installmentNumber: bill.installmentNumber,\n paymentMethodId: input.paymentMethodId,\n paymentMethodTypeId: input.paymentMethodTypeId,\n bankAccountId: input.bankAccountId,\n cashSessionId: input.cashSessionId,\n cardBrand: input.cardBrand,\n cardInstallments: input.cardInstallments,\n notes: input.notes,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push(payment)\n\n // 2. Update the bill (obligation) cache: cumulative paid + status. Clear its cash\n // fields so it stops being a cash event (the payment row is now the cash event).\n bill.paidAmount = round2(bill.paidAmount + input.amount)\n bill.status = bill.paidAmount >= bill.amount ? 'paid' : 'partial'\n bill.paymentDate = undefined\n bill.bankAccountId = undefined\n bill.updatedAt = now()\n\n // Update bank account balance by the NET cash impact (credit nets the fee).\n if (input.bankAccountId) {\n const account = store.bankAccounts.find((a) => a.id === input.bankAccountId)\n if (account) {\n if (bill.direction === 'credit') {\n account.currentBalance = round2(account.currentBalance + (input.amount - thisFee))\n } else {\n account.currentBalance = round2(account.currentBalance - input.amount)\n }\n account.updatedAt = now()\n }\n }\n\n // 3. Recalculate invoice status from its bills\n if (bill.invoiceId) {\n const invoice = store.invoices.find((i) => i.id === bill.invoiceId)\n if (invoice) {\n const bills = store.movements.filter((m) => m.invoiceId === invoice.id && m.movementKind === 'bill')\n invoice.paidAmount = bills.reduce((sum, m) => sum + m.paidAmount, 0)\n recalcInvoiceStatus(invoice)\n }\n }\n\n return payment\n },\n\n async cancelMovement(id: string): Promise<void> {\n const movement = store.movements.find((m) => m.id === id)\n if (!movement) throw new Error(`Movement ${id} not found`)\n movement.status = 'cancelled'\n movement.updatedAt = now()\n },\n\n // --- Transfers (between accounts) ---\n async createTransfer(input: CreateTransferInput): Promise<TransferResult> {\n if (!input.fromAccountId || !input.toAccountId || input.fromAccountId === input.toAccountId) {\n throw new Error('Source and destination accounts must differ')\n }\n if (!(input.amount > 0)) throw new Error('Amount must be greater than zero')\n const transferId = uid()\n const debitMovementId = uid()\n const creditMovementId = uid()\n const base = {\n movementKind: 'transfer' as const,\n amount: input.amount,\n paidAmount: input.amount,\n feeAmount: 0,\n status: 'paid' as const,\n dueDate: input.date,\n paymentDate: input.date,\n notes: input.notes,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.movements.push({\n ...base, id: debitMovementId, direction: 'debit', bankAccountId: input.fromAccountId,\n metadata: { transferId, transferRole: 'out', counterAccountId: input.toAccountId },\n } as FinancialMovement)\n store.movements.push({\n ...base, id: creditMovementId, direction: 'credit', bankAccountId: input.toAccountId,\n metadata: { transferId, transferRole: 'in', counterAccountId: input.fromAccountId },\n } as FinancialMovement)\n // Reflect in stored balances.\n const from = store.bankAccounts.find((a) => a.id === input.fromAccountId)\n const to = store.bankAccounts.find((a) => a.id === input.toAccountId)\n if (from) { from.currentBalance = round2(from.currentBalance - input.amount); from.updatedAt = now() }\n if (to) { to.currentBalance = round2(to.currentBalance + input.amount); to.updatedAt = now() }\n return { transferId, debitMovementId, creditMovementId }\n },\n\n // --- Bank Accounts ---\n async getBankAccounts(): Promise<BankAccount[]> {\n return store.bankAccounts.filter((a) => a.isActive)\n },\n\n async createBankAccount(data: CreateBankAccountInput): Promise<BankAccount> {\n const account: BankAccount = {\n id: uid(),\n name: data.name,\n accountType: data.accountType,\n bankName: data.bankName,\n accountNumber: data.accountNumber,\n agencyNumber: data.agencyNumber,\n currentBalance: data.initialBalance ?? 0,\n initialBalance: data.initialBalance ?? 0,\n creditLimit: data.creditLimit,\n dueDay: data.dueDay,\n closingDay: data.closingDay,\n isActive: true,\n unitId: data.unitId,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n }\n store.bankAccounts.push(account)\n return account\n },\n\n async updateBankAccount(id: string, data: Partial<BankAccount>): Promise<BankAccount> {\n const account = store.bankAccounts.find((a) => a.id === id)\n if (!account) throw new Error(`Bank account ${id} not found`)\n Object.assign(account, data, { updatedAt: now() })\n return account\n },\n\n // --- Cash Sessions ---\n async getCashSessions(bankAccountId?: string): Promise<CashSession[]> {\n let results = [...store.cashSessions]\n if (bankAccountId) results = results.filter((s) => s.bankAccountId === bankAccountId)\n return results.sort((a, b) => b.openedAt.localeCompare(a.openedAt))\n },\n\n async getOpenSession(bankAccountId: string): Promise<CashSession | null> {\n return store.cashSessions.find((s) => s.bankAccountId === bankAccountId && s.status === 'open') ?? null\n },\n\n async openCashSession(input: OpenCashSessionInput): Promise<CashSession> {\n const account = store.bankAccounts.find((a) => a.id === input.bankAccountId)\n const session: CashSession = {\n id: uid(),\n bankAccountId: input.bankAccountId,\n bankAccountName: account?.name,\n status: 'open',\n openedAt: now(),\n openedByUserId: input.openedByUserId,\n openedByName: input.openedByName,\n openingBalance: input.openingBalance,\n unitId: input.unitId,\n tenantId,\n createdAt: now(),\n }\n store.cashSessions.push(session)\n return session\n },\n\n async closeCashSession(input: CloseCashSessionInput): Promise<CashSession> {\n const session = store.cashSessions.find((s) => s.id === input.sessionId)\n if (!session) throw new Error(`Cash session ${input.sessionId} not found`)\n\n // Calculate expected balance\n const sessionMovements = store.movements.filter((m) => m.cashSessionId === session.id && m.status === 'paid')\n const inflow = sessionMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0)\n const outflow = sessionMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0)\n const expectedBalance = session.openingBalance + inflow - outflow\n\n session.status = 'closed'\n session.closedAt = now()\n session.closedByUserId = input.closedByUserId\n session.closedByName = input.closedByName\n session.closingBalance = input.closingBalance\n session.expectedBalance = expectedBalance\n session.difference = input.closingBalance - expectedBalance\n session.notes = input.notes\n\n return session\n },\n\n async getCashSessionSummary(sessionId: string): Promise<CashSessionSummary> {\n const session = store.cashSessions.find((s) => s.id === sessionId)\n if (!session) throw new Error(`Cash session ${sessionId} not found`)\n const sessionMovements = store.movements.filter((m) => m.cashSessionId === sessionId && m.status === 'paid')\n return {\n session,\n movementCount: sessionMovements.length,\n totalInflow: sessionMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0),\n totalOutflow: sessionMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0),\n }\n },\n\n // --- Payment Methods ---\n async getPaymentMethods(): Promise<PaymentMethod[]> {\n return store.paymentMethods.filter((pm) => pm.isActive)\n },\n\n async getPaymentMethodTypes(): Promise<PaymentMethodType[]> {\n return store.paymentMethodTypes.filter((t) => t.isActive)\n },\n\n // --- Chart of Accounts ---\n async getChartOfAccounts(): Promise<ChartOfAccountsNode[]> {\n return store.chartOfAccounts.filter((n) => n.isActive)\n },\n\n // --- Card Transactions ---\n async getCardTransactions(dateRange?: DateRange): Promise<CardTransaction[]> {\n let results = [...store.cardTransactions]\n if (dateRange) results = results.filter((t) => matchesDateRange(t.expectedDate, dateRange))\n return results.sort((a, b) => a.expectedDate.localeCompare(b.expectedDate))\n },\n\n // --- Statements (ERP extract: opening balance + realized cash + per-row net/fee) ---\n async getStatement(query: StatementQuery): Promise<StatementResult> {\n const todayStr = today()\n // A cash event = any non-cancelled movement with a payment_date (payment, transfer,\n // or a legacy in-place-paid bill). Bills lose their payment_date once split.\n const isRealized = (m: FinancialMovement) => m.status !== 'cancelled' && !!m.paymentDate\n const consolidated = !query.bankAccountId\n const scopeAccounts = consolidated\n ? store.bankAccounts.filter((a) => a.isActive)\n : store.bankAccounts.filter((a) => a.id === query.bankAccountId)\n const accountIds = new Set(scopeAccounts.map((a) => a.id))\n const accountNameById = new Map(store.bankAccounts.map((a) => [a.id, a.name]))\n const initialSum = scopeAccounts.reduce((s, a) => s + a.initialBalance, 0)\n // Only bail when a specific account was asked for and not found.\n if (!consolidated && accountIds.size === 0) {\n return { entries: [], openingBalance: 0, closingBalance: 0, totalCredits: 0, totalDebits: 0, totalFees: 0, net: 0, accountId: query.bankAccountId }\n }\n\n const netOf = (m: FinancialMovement) => m.direction === 'credit'\n ? m.paidAmount - (m.feeAmount ?? 0)\n : -m.paidAmount\n\n // Consolidated => all realized movements (incl. those with no bank account).\n const inScope = store.movements.filter((m) =>\n isRealized(m) && (consolidated || (m.bankAccountId && accountIds.has(m.bankAccountId))))\n\n const openingBalance = round2(initialSum + inScope\n .filter((m) => (m.paymentDate ?? '') < query.dateRange.from)\n .reduce((s, m) => s + netOf(m), 0))\n\n const rangeMovs = inScope\n .filter((m) => matchesDateRange(m.paymentDate, query.dateRange))\n .sort((a, b) => (a.paymentDate ?? '').localeCompare(b.paymentDate ?? '') || a.createdAt.localeCompare(b.createdAt))\n\n let balance = openingBalance\n let totalCredits = 0, totalDebits = 0, totalFees = 0\n const entries: StatementEntry[] = rangeMovs.map((movement) => {\n const gross = movement.paidAmount\n const isCredit = movement.direction === 'credit'\n const fee = isCredit ? (movement.feeAmount ?? 0) : 0\n const net = isCredit ? round2(gross - fee) : gross\n const isTransfer = movement.movementKind === 'transfer'\n const meta = (movement.metadata ?? {}) as any\n const entryKind: StatementEntry['entryKind'] = isTransfer\n ? (meta.transferRole === 'in' ? 'transfer-in' : 'transfer-out')\n : 'movement'\n const counterAccountId = isTransfer ? meta.counterAccountId : undefined\n balance = round2(isCredit ? balance + net : balance - net)\n if (!(consolidated && isTransfer)) {\n if (isCredit) totalCredits = round2(totalCredits + net)\n else totalDebits = round2(totalDebits + net)\n totalFees = round2(totalFees + fee)\n }\n return {\n movement,\n invoice: movement.invoiceId ? store.invoices.find((i) => i.id === movement.invoiceId) : undefined,\n runningBalance: balance,\n gross, fee, net, entryKind,\n counterAccountId,\n counterAccountName: counterAccountId ? accountNameById.get(counterAccountId) : undefined,\n } as StatementEntry\n })\n\n // Link reconciled bank lines to the internal movement they were matched to.\n for (const e of entries) {\n const mid = e.movement.matchedMovementId\n const mm = mid ? store.movements.find((m) => m.id === mid) : undefined\n if (!mm) continue\n const inv = mm.invoiceId ? store.invoices.find((i) => i.id === mm.invoiceId) : undefined\n e.reconciledWith = {\n movementId: mm.id,\n description: mm.notes ?? undefined,\n invoiceId: mm.invoiceId,\n fiscalNumber: inv?.fiscalNumber,\n contactName: inv?.contactName,\n }\n }\n\n const accountCurrentBalance = round2(initialSum + inScope\n .filter((m) => (m.paymentDate ?? '') <= todayStr)\n .reduce((s, m) => s + netOf(m), 0))\n\n return {\n entries,\n openingBalance,\n closingBalance: balance,\n totalCredits,\n totalDebits,\n totalFees,\n net: round2(totalCredits - totalDebits),\n accountId: query.bankAccountId,\n accountCurrentBalance,\n }\n },\n\n // --- Summary ---\n async getSummary(dateRange?: DateRange): Promise<FinancialSummary> {\n const totalBalance = store.bankAccounts\n .filter((a) => a.isActive)\n .reduce((sum, a) => sum + a.currentBalance, 0)\n\n const pendingReceivable = store.movements.filter((m) =>\n m.direction === 'credit' && m.movementKind === 'bill' && ['pending', 'partial'].includes(m.status)\n )\n const pendingPayable = store.movements.filter((m) =>\n m.direction === 'debit' && m.movementKind === 'bill' && ['pending', 'partial'].includes(m.status)\n )\n\n const todayStr = today()\n const monthStart = todayStr.slice(0, 7) + '-01'\n const monthEnd = todayStr\n\n const monthMovements = store.movements.filter((m) =>\n m.movementKind === 'payment' && matchesDateRange(m.paymentDate, dateRange ?? { from: monthStart, to: monthEnd })\n )\n\n const overdueReceivable = pendingReceivable.filter((m) => m.dueDate < todayStr)\n const overduePayable = pendingPayable.filter((m) => m.dueDate < todayStr)\n\n return {\n totalBalance,\n totalReceivable: pendingReceivable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n totalPayable: pendingPayable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n monthlyInflow: monthMovements.filter((m) => m.direction === 'credit').reduce((s, m) => s + m.paidAmount, 0),\n monthlyOutflow: monthMovements.filter((m) => m.direction === 'debit').reduce((s, m) => s + m.paidAmount, 0),\n overdueReceivableCount: overdueReceivable.length,\n overdueReceivableAmount: overdueReceivable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n overduePayableCount: overduePayable.length,\n overduePayableAmount: overduePayable.reduce((s, m) => s + (m.amount - m.paidAmount), 0),\n }\n },\n\n // --- Reconciliation (conciliação) ---\n async importBankTransactions(input) {\n let imported = 0, duplicates = 0\n for (const line of input.lines) {\n const dup = store.movements.some((m) => m.externalSource === line.externalSource && m.externalId === line.externalId)\n if (dup) { duplicates++; continue }\n store.movements.push({\n id: uid(),\n direction: line.direction,\n movementKind: 'payment',\n amount: line.amount,\n paidAmount: line.amount,\n status: 'paid',\n dueDate: line.date,\n paymentDate: line.date,\n bankAccountId: line.bankAccountId ?? input.bankAccountId,\n notes: line.description,\n externalId: line.externalId,\n externalSource: line.externalSource,\n tenantId,\n createdAt: now(),\n updatedAt: now(),\n } as FinancialMovement)\n imported++\n }\n return { imported, duplicates }\n },\n\n async getUnreconciled(query) {\n let results = store.movements.filter((m) => m.externalSource && !m.reconciledAt)\n if (query?.bankAccountId) results = results.filter((m) => m.bankAccountId === query.bankAccountId)\n if (query?.dateRange) results = results.filter((m) => matchesDateRange(m.paymentDate, query.dateRange))\n return results.sort((a, b) => (b.paymentDate ?? '').localeCompare(a.paymentDate ?? ''))\n },\n\n async suggestReconciliation(bankMovementId) {\n const line = store.movements.find((m) => m.id === bankMovementId)\n if (!line) return []\n const amount = line.amount\n const tol = Math.max(0.01, round2(amount * 0.02))\n const lineDate = line.paymentDate ?? line.dueDate\n return store.movements\n .filter((m) => !m.externalSource && !m.reconciledAt && m.direction === line.direction && m.id !== bankMovementId && Math.abs(m.amount - amount) <= tol)\n .map((m) => {\n const amtScore = amount > 0 ? Math.max(0, 1 - Math.abs(m.amount - amount) / amount) : 0\n const refDate = m.dueDate ?? m.paymentDate\n const days = lineDate && refDate ? Math.abs((new Date(lineDate).getTime() - new Date(refDate).getTime()) / 86400000) : 30\n const dateScore = Math.max(0, 1 - days / 30)\n return {\n movement: m,\n invoice: m.invoiceId ? store.invoices.find((i) => i.id === m.invoiceId) : undefined,\n score: round2(0.7 * amtScore + 0.3 * dateScore),\n }\n })\n .sort((a, b) => b.score - a.score)\n .slice(0, 25)\n },\n\n async reconcileMovement(input) {\n const line = store.movements.find((m) => m.id === input.bankMovementId)\n if (line) { line.reconciledAt = now(); line.matchedMovementId = input.matchedMovementId; line.updatedAt = now() }\n if (input.matchedMovementId) {\n const internal = store.movements.find((m) => m.id === input.matchedMovementId)\n if (internal) { internal.reconciledAt = now(); internal.updatedAt = now() }\n }\n },\n\n async unreconcileMovement(bankMovementId) {\n const line = store.movements.find((m) => m.id === bankMovementId)\n if (!line) return\n const matchedId = line.matchedMovementId\n line.reconciledAt = undefined; line.matchedMovementId = undefined; line.updatedAt = now()\n if (matchedId) {\n const internal = store.movements.find((m) => m.id === matchedId)\n if (internal) { internal.reconciledAt = undefined; internal.updatedAt = now() }\n }\n },\n }\n\n return provider\n}\n","import type { FinancialDataProvider } from './types'\nimport type {\n Invoice, InvoiceItem, FinancialMovement, BankAccount,\n CashSession, PaymentMethod, PaymentMethodType, ChartOfAccountsNode,\n CardTransaction,\n CreateInvoiceInput, PayMovementInput, CreateTransferInput, TransferResult,\n OpenCashSessionInput, CloseCashSessionInput, CreateBankAccountInput,\n InvoiceQuery, MovementQuery, StatementQuery,\n PaginatedResult, FinancialSummary, StatementEntry, StatementResult, CashSessionSummary,\n DateRange, ReconciliationCandidate,\n} from '../types'\nimport { getSupabaseClientOptional, getActiveTenantId } from '@fayz-ai/core'\nimport { getFinancialTenantId } from '../lib/tenant'\n\nfunction getTenantId(): string | undefined {\n // Local override wins; else use the app's active tenant so writes pass RLS.\n return getFinancialTenantId() ?? getActiveTenantId()\n}\n\nfunction snakeToCamel(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n result[key.replace(/_([a-z])/g, (_, c) => c.toUpperCase())] = value\n }\n return result\n}\n\nfunction camelToSnake(obj: Record<string, unknown>): Record<string, unknown> {\n const result: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(obj)) {\n if (key.startsWith('_')) continue\n result[key.replace(/[A-Z]/g, (c) => `_${c.toLowerCase()}`)] = value\n }\n return result\n}\n\nfunction getClients() {\n const supabase = getSupabaseClientOptional() as any\n if (!supabase) throw new Error('Supabase not initialized')\n return { core: supabase.schema('saas_core'), pub: supabase }\n}\n\n/** Map order stage to InvoiceStatus for the financial UI */\nfunction mapStageToInvoiceStatus(stage?: string): string {\n switch (stage) {\n case 'paid': return 'paid'\n case 'partial': return 'partial'\n case 'overdue': return 'overdue'\n case 'cancelled': return 'cancelled'\n case 'invoiced': return 'open'\n case 'booked': return 'open'\n default: return 'open'\n }\n}\n\nlet _overdueSwept = false\n\n/** Batch-mark overdue: pending/partial movements past due → 'overdue', then update parent invoices */\nasync function sweepOverdue() {\n if (_overdueSwept) return\n _overdueSwept = true\n try {\n const { core, pub } = getClients()\n const today = new Date().toISOString().slice(0, 10)\n\n // Mark overdue movements\n const { data: overdueMovs } = await pub.from('financial_movements')\n .update({ status: 'overdue' })\n .in('status', ['pending', 'partial'])\n .lt('due_date', today)\n .select('invoice_id')\n\n // Collect unique invoice IDs and update their status\n if (overdueMovs && overdueMovs.length > 0) {\n const invoiceIds = [...new Set(overdueMovs.map((m: any) => m.invoice_id).filter(Boolean))]\n for (const invId of invoiceIds) {\n const { data: allMovs } = await pub.from('financial_movements')\n .select('status')\n .eq('invoice_id', invId)\n .eq('movement_kind', 'bill')\n const movs = allMovs ?? []\n const hasOverdue = movs.some((m: any) => m.status === 'overdue')\n const allPaid = movs.every((m: any) => m.status === 'paid')\n const invoiceStatus = allPaid ? 'paid' : hasOverdue ? 'overdue' : 'open'\n const invoiceStage = allPaid ? 'paid' : hasOverdue ? 'overdue' : 'invoiced'\n // Only update financial stage — don't overwrite agenda status\n await core.from('orders').update({ stage: invoiceStage }).eq('id', invId)\n }\n }\n } catch {\n // Non-critical — don't block the UI\n }\n}\n\n// S2 (data-model refactor): paid amount, balance and status are DERIVED from the\n// append-only ledger via v_invoice_balances — the single source of truth — not\n// from stored order.stage / metadata.paidAmount (which drift). See\n// docs/data-model-refactor.md.\nasync function fetchInvoiceBalances(\n pub: any,\n ids: string[],\n): Promise<Map<string, { paid: number; balance: number; status: string }>> {\n const map = new Map<string, { paid: number; balance: number; status: string }>()\n if (!ids.length) return map\n const { data } = await pub\n .from('v_invoice_balances')\n .select('invoice_id, paid, balance, status')\n .in('invoice_id', ids)\n for (const r of (data ?? []) as any[]) {\n map.set(r.invoice_id, { paid: Number(r.paid) || 0, balance: Number(r.balance) || 0, status: r.status })\n }\n return map\n}\n\nfunction round2(n: number): number {\n return Math.round(n * 100) / 100\n}\n\n/** Card/MDR fee percent for a configured payment method (0 when none / not a fee method). */\nasync function getMethodFeePct(pub: any, paymentMethodId?: string): Promise<number> {\n if (!paymentMethodId) return 0\n const { data } = await pub.from('payment_methods').select('discount_value').eq('id', paymentMethodId).single()\n return Number(data?.discount_value) || 0\n}\n\n/** Generate a correlation id; falls back when crypto.randomUUID is unavailable. */\nfunction genId(): string {\n try {\n if (typeof crypto !== 'undefined' && (crypto as any).randomUUID) return (crypto as any).randomUUID()\n } catch { /* noop */ }\n return 'tr-' + Date.now().toString(36) + '-' + Math.random().toString(36).slice(2, 10)\n}\n\nexport function createSupabaseFinancialProvider(): FinancialDataProvider {\n const provider: FinancialDataProvider = {\n // --- Invoices (orders at stage=invoiced/paid/partial/overdue/cancelled with direction) ---\n async getInvoices(query: InvoiceQuery): Promise<PaginatedResult<Invoice>> {\n const { core, pub } = getClients()\n let qb = core.from('orders').select('*', { count: 'exact' })\n\n // Show orders with financial relevance: booked (with amount) + invoiced stages\n qb = qb.in('stage', ['booked', 'invoiced', 'paid', 'partial', 'overdue', 'cancelled'])\n qb = qb.gt('total', 0)\n\n // Filter by direction (credit=receivable, debit=payable)\n if (query.direction) {\n qb = qb.eq('direction', query.direction)\n }\n\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status]\n qb = qb.in('status', statuses)\n }\n if (query.contactId) qb = qb.eq('party_id', query.contactId)\n if (query.search) qb = qb.ilike('notes', `%${query.search}%`)\n if (query.dateRange) qb = qb.gte('created_at', query.dateRange.from).lte('created_at', query.dateRange.to)\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n qb = qb.range((page - 1) * pageSize, page * pageSize - 1).order('created_at', { ascending: false })\n const { data, count } = await qb\n\n const bal = await fetchInvoiceBalances(pub, (data ?? []).map((r: any) => r.id))\n const invoices: Invoice[] = (data ?? []).map((r: any) => {\n const meta = r.metadata ?? {}\n // Resolve direction from stage model or legacy kind\n const dir = r.direction ?? (r.kind === 'invoice_payable' ? 'debit' : 'credit')\n const b = bal.get(r.id)\n return {\n id: r.id,\n direction: dir,\n invoiceDate: r.created_at?.slice(0, 10) ?? '',\n fiscalNumber: r.reference_number,\n totalAmount: r.total ?? 0,\n paidAmount: b?.paid ?? meta.paidAmount ?? 0,\n status: b?.status ?? mapStageToInvoiceStatus(r.stage),\n totalInstallments: meta.installmentCount ?? 1,\n contactId: r.party_id,\n contactName: meta.contactName,\n observations: r.notes,\n itemsSummary: meta.itemsSummary,\n tenantId: r.tenant_id,\n createdAt: r.created_at,\n updatedAt: r.updated_at,\n } as Invoice\n })\n return { data: invoices, total: count ?? 0 }\n },\n\n async getInvoiceById(id: string): Promise<Invoice | null> {\n const { core, pub } = getClients()\n const { data } = await core.from('orders').select('*').eq('id', id).single()\n if (!data) return null\n const o = snakeToCamel(data) as any\n const meta = data.metadata ?? {}\n // Paid amount + status are DERIVED from the ledger view (single source of truth).\n const balance = (await fetchInvoiceBalances(pub, [id])).get(id)\n const { data: movs } = await pub.from('financial_movements')\n .select('paid_amount')\n .eq('invoice_id', id)\n .eq('movement_kind', 'bill')\n return {\n id: o.id,\n direction: o.direction ?? (o.kind === 'invoice_payable' ? 'debit' : 'credit'),\n invoiceDate: o.createdAt?.slice(0, 10) ?? '',\n fiscalNumber: o.referenceNumber,\n totalAmount: o.total ?? 0, paidAmount: balance?.paid ?? 0,\n status: balance?.status ?? mapStageToInvoiceStatus(o.stage),\n totalInstallments: (movs ?? []).length || 1, contactId: o.partyId,\n contactName: meta.contactName, itemsSummary: meta.itemsSummary,\n bookingStartsAt: o.startsAt ?? undefined,\n observations: o.notes,\n tenantId: o.tenantId, createdAt: o.createdAt, updatedAt: o.updatedAt,\n } as Invoice\n },\n\n async getInvoiceItems(invoiceId: string): Promise<InvoiceItem[]> {\n const { core, pub } = getClients()\n const { data } = await core.from('order_items').select('*').eq('order_id', invoiceId).order('sort_order')\n return (data ?? []).map((r: any) => {\n const i = snakeToCamel(r) as any\n return {\n id: i.id, invoiceId, itemKind: i.metadata?.itemKind ?? 'other',\n description: i.name ?? '', quantity: i.quantity ?? 1,\n unitPrice: i.unitPrice ?? 0, totalAmount: i.total ?? 0,\n discount: i.discount ?? 0, surcharge: 0,\n referenceId: i.productId ?? i.serviceId,\n createdAt: i.createdAt,\n } as InvoiceItem\n })\n },\n\n async createInvoice(input: CreateInvoiceInput): Promise<Invoice> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const kind = input.direction === 'debit' ? 'invoice_payable' : 'invoice_receivable'\n const totalAmount = input.items.reduce((sum, item) => sum + item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0), 0)\n const itemsSummary = input.items.map((i: any) => i.description).filter(Boolean).join(', ')\n\n // Auto-generate reference number if not provided\n let referenceNumber = input.fiscalNumber\n if (!referenceNumber && tenantId) {\n const prefix = input.direction === 'credit' ? 'REC' : 'PAG'\n const { data: seq } = await core.rpc('next_sequence', { p_tenant_id: tenantId, p_kind: kind })\n if (seq) referenceNumber = `${prefix}-${String(seq).padStart(5, '0')}`\n }\n\n const { data: order } = await core.from('orders').insert({\n tenant_id: tenantId, kind, status: 'open',\n stage: 'invoiced',\n direction: input.direction,\n reference_number: referenceNumber,\n total: totalAmount, party_id: input.contactId,\n notes: input.observations,\n currency: 'BRL',\n metadata: { itemsSummary, contactName: input.contactName, installmentCount: input.installments.length || 1 },\n }).select().single()\n\n if (order && input.items.length > 0) {\n await core.from('order_items').insert(\n input.items.map((item, i) => ({\n order_id: order.id, name: item.description,\n quantity: item.quantity, unit_price: item.unitPrice,\n discount: item.discount ?? 0,\n total: item.quantity * item.unitPrice - (item.discount ?? 0) + (item.surcharge ?? 0),\n sort_order: i,\n metadata: { itemKind: item.itemKind, referenceId: item.referenceId },\n }))\n )\n }\n\n // Create installment movements\n if (order && input.installments.length > 0) {\n await pub.from('financial_movements').insert(\n input.installments.map((inst, i) => ({\n tenant_id: tenantId, invoice_id: order.id,\n direction: input.direction, movement_kind: inst.movementKind,\n amount: inst.amount, paid_amount: 0, status: 'pending',\n due_date: inst.dueDate, installment_number: inst.installmentNumber ?? i + 1,\n }))\n )\n }\n\n return {\n id: order!.id, direction: input.direction, invoiceDate: new Date().toISOString().slice(0, 10),\n fiscalNumber: referenceNumber,\n totalAmount, paidAmount: 0, status: 'open', totalInstallments: input.installments.length || 1,\n contactName: input.contactName, itemsSummary,\n tenantId: tenantId!, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString(),\n } as Invoice\n },\n\n async updateInvoice(id: string, partial: Partial<Invoice>): Promise<Invoice> {\n const { core, pub } = getClients()\n const row: any = {}\n if (partial.observations) row.notes = partial.observations\n if (partial.totalAmount) row.total = partial.totalAmount\n if (partial.status) row.status = partial.status\n if (Object.keys(row).length > 0) await core.from('orders').update(row).eq('id', id)\n return (await provider.getInvoiceById(id))!\n },\n\n async cancelInvoice(id: string): Promise<void> {\n const { core, pub } = getClients()\n await core.from('orders').update({ status: 'cancelled' }).eq('id', id)\n await pub.from('financial_movements').update({ status: 'cancelled' }).eq('invoice_id', id).eq('status', 'pending')\n },\n\n // --- Movements (public.financial_movements) ---\n async getMovements(query: MovementQuery): Promise<PaginatedResult<FinancialMovement>> {\n const { core, pub } = getClients()\n let qb = pub.from('financial_movements').select('*', { count: 'exact' })\n if (query.direction) qb = qb.eq('direction', query.direction)\n if (query.status) {\n const statuses = Array.isArray(query.status) ? query.status : [query.status]\n qb = qb.in('status', statuses)\n }\n if (query.bankAccountId) qb = qb.eq('bank_account_id', query.bankAccountId)\n if (query.cashSessionId) qb = qb.eq('cash_session_id', query.cashSessionId)\n if (query.dateRange) qb = qb.gte('due_date', query.dateRange.from).lte('due_date', query.dateRange.to)\n const page = query.page ?? 1\n const pageSize = query.pageSize ?? 50\n qb = qb.range((page - 1) * pageSize, page * pageSize - 1).order('due_date')\n const { data, count } = await qb\n return { data: (data ?? []).map((r: any) => snakeToCamel(r) as unknown as FinancialMovement), total: count ?? 0 }\n },\n\n async payMovement(input: PayMovementInput): Promise<FinancialMovement> {\n const { core, pub } = getClients()\n const { data: mov } = await pub.from('financial_movements').select('*').eq('id', input.movementId).single()\n if (!mov) throw new Error('Movement not found')\n const tenantId = mov.tenant_id ?? getTenantId()\n\n // Net card settlement: derive the processing/MDR fee (inflows only in v1).\n const feePct = mov.direction === 'credit' ? await getMethodFeePct(pub, input.paymentMethodId) : 0\n const thisFee = round2(input.amount * (feePct / 100))\n\n // 1. Record the cash event as its OWN payment movement — NOT by mutating the\n // bill. Two payments on one installment → two distinct rows in the extract.\n const paymentRow: any = {\n tenant_id: tenantId,\n invoice_id: mov.invoice_id,\n direction: mov.direction,\n movement_kind: 'payment',\n amount: input.amount,\n paid_amount: input.amount,\n fee_amount: thisFee,\n status: 'paid',\n due_date: mov.due_date,\n payment_date: input.paymentDate,\n installment_number: mov.installment_number,\n payment_method_id: input.paymentMethodId ?? null,\n payment_method_type_id: input.paymentMethodTypeId ?? null,\n bank_account_id: input.bankAccountId ?? null,\n cash_session_id: input.cashSessionId ?? null,\n card_brand: input.cardBrand ?? null,\n card_installments: input.cardInstallments ?? null,\n notes: input.notes ?? null,\n }\n let { data, error } = await pub.from('financial_movements').insert(paymentRow).select().single()\n // Graceful fallback if the fee_amount migration hasn't been applied yet.\n if (error && /fee_amount/i.test(error.message ?? '')) {\n const { fee_amount, ...rest } = paymentRow\n ;({ data, error } = await pub.from('financial_movements').insert(rest).select().single())\n }\n if (error) throw error\n\n // 2. Update the bill (obligation) cache: cumulative paid + status. It stays a\n // pure obligation (no bank/method/date) — the cash lives on the payment row.\n // v_invoice_balances reads bill.paid_amount, so this keeps balances correct.\n const newPaid = round2((mov.paid_amount ?? 0) + input.amount)\n const billStatus = newPaid >= mov.amount ? 'paid' : 'partial'\n // Clear the bill's cash fields so it stops being a cash event (the payment row is now\n // the cash event) — prevents double-counting legacy in-place-paid bills.\n await pub.from('financial_movements')\n .update({ paid_amount: newPaid, status: billStatus, payment_date: null, bank_account_id: null })\n .eq('id', mov.id)\n\n // 3. Update invoice (order) status based on its bills\n if (mov.invoice_id) {\n const { data: allMovs } = await pub.from('financial_movements')\n .select('status, amount, paid_amount')\n .eq('invoice_id', mov.invoice_id)\n .eq('movement_kind', 'bill')\n const movs = allMovs ?? []\n const allPaid = movs.length > 0 && movs.every((m: any) => m.status === 'paid')\n const anyPaid = movs.some((m: any) => m.status === 'paid' || m.status === 'partial')\n const invoiceStatus = allPaid ? 'paid' : anyPaid ? 'partial' : 'open'\n const totalPaid = movs.reduce((sum: number, m: any) => sum + (m.paid_amount ?? 0), 0)\n // Store paid amount in metadata (orders table has no dedicated paid column)\n const { data: order } = await core.from('orders').select('metadata').eq('id', mov.invoice_id).single()\n const meta = (order?.metadata as any) ?? {}\n const invoiceStage = allPaid ? 'paid' : anyPaid ? 'partial' : 'invoiced'\n // Only update financial order status. Agenda status lives on saas_core.bookings.\n await core.from('orders').update({\n status: invoiceStage,\n metadata: { ...meta, paidAmount: totalPaid },\n }).eq('id', mov.invoice_id)\n }\n\n return snakeToCamel(data!) as unknown as FinancialMovement\n },\n\n async cancelMovement(id: string): Promise<void> {\n const { core, pub } = getClients()\n await pub.from('financial_movements').update({ status: 'cancelled' }).eq('id', id)\n },\n\n // --- Transfers (between accounts) ---\n async createTransfer(input: CreateTransferInput): Promise<TransferResult> {\n const { pub } = getClients()\n if (!input.fromAccountId || !input.toAccountId || input.fromAccountId === input.toAccountId) {\n throw new Error('Source and destination accounts must differ')\n }\n if (!(input.amount > 0)) throw new Error('Amount must be greater than zero')\n const tenantId = getTenantId()\n const transferId = genId()\n const base = {\n tenant_id: tenantId,\n movement_kind: 'transfer' as const,\n amount: input.amount,\n paid_amount: input.amount,\n fee_amount: 0,\n status: 'paid' as const,\n due_date: input.date,\n payment_date: input.date,\n notes: input.notes ?? null,\n }\n const rowsToInsert = [\n {\n ...base,\n direction: 'debit',\n bank_account_id: input.fromAccountId,\n metadata: { transferId, transferRole: 'out', counterAccountId: input.toAccountId },\n },\n {\n ...base,\n direction: 'credit',\n bank_account_id: input.toAccountId,\n metadata: { transferId, transferRole: 'in', counterAccountId: input.fromAccountId },\n },\n ]\n let { data, error } = await pub.from('financial_movements').insert(rowsToInsert).select('id, direction')\n // Graceful fallback if the fee_amount migration hasn't been applied yet.\n if (error && /fee_amount/i.test(error.message ?? '')) {\n const stripped = rowsToInsert.map(({ fee_amount, ...rest }) => rest)\n ;({ data, error } = await pub.from('financial_movements').insert(stripped).select('id, direction'))\n }\n if (error) throw error\n const rows = (data ?? []) as Array<{ id: string; direction: string }>\n const debitMovementId = rows.find((r) => r.direction === 'debit')?.id ?? ''\n const creditMovementId = rows.find((r) => r.direction === 'credit')?.id ?? ''\n return { transferId, debitMovementId, creditMovementId }\n },\n\n // --- Bank Accounts ---\n async getBankAccounts(): Promise<BankAccount[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from('bank_accounts').select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as BankAccount)\n },\n\n async createBankAccount(input: CreateBankAccountInput): Promise<BankAccount> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const { data } = await pub.from('bank_accounts').insert({\n ...camelToSnake(input as any), tenant_id: tenantId, current_balance: input.initialBalance ?? 0,\n }).select().single()\n return snakeToCamel(data!) as unknown as BankAccount\n },\n\n async updateBankAccount(id: string, partial: Partial<BankAccount>): Promise<BankAccount> {\n const { core, pub } = getClients()\n const row = camelToSnake(partial as any)\n delete row.id; delete row.tenant_id\n const { data } = await pub.from('bank_accounts').update(row).eq('id', id).select().single()\n return snakeToCamel(data!) as unknown as BankAccount\n },\n\n // --- Cash Sessions ---\n async getCashSessions(bankAccountId?: string): Promise<CashSession[]> {\n const { core, pub } = getClients()\n let qb = pub.from('cash_register_sessions').select('*')\n if (bankAccountId) qb = qb.eq('bank_account_id', bankAccountId)\n const { data } = await qb.order('opened_at', { ascending: false })\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as CashSession)\n },\n\n async getOpenSession(bankAccountId: string): Promise<CashSession | null> {\n const { core, pub } = getClients()\n const { data } = await pub.from('cash_register_sessions').select('*').eq('bank_account_id', bankAccountId).eq('status', 'open').single()\n return data ? snakeToCamel(data) as unknown as CashSession : null\n },\n\n async openCashSession(input: OpenCashSessionInput): Promise<CashSession> {\n const { core, pub } = getClients()\n const tenantId = getTenantId()\n const { data } = await pub.from('cash_register_sessions').insert({\n tenant_id: tenantId, bank_account_id: input.bankAccountId,\n status: 'open', opening_balance: input.openingBalance,\n opened_by_user_id: input.openedByUserId, opened_by_name: input.openedByName,\n unit_id: input.unitId,\n }).select().single()\n return snakeToCamel(data!) as unknown as CashSession\n },\n\n async closeCashSession(input: CloseCashSessionInput): Promise<CashSession> {\n const { core, pub } = getClients()\n const { data } = await pub.from('cash_register_sessions').update({\n status: 'closed', closing_balance: input.closingBalance,\n closed_at: new Date().toISOString(),\n closed_by_user_id: input.closedByUserId, closed_by_name: input.closedByName,\n notes: input.notes,\n }).eq('id', input.sessionId).select().single()\n return snakeToCamel(data!) as unknown as CashSession\n },\n\n async getCashSessionSummary(sessionId: string): Promise<CashSessionSummary> {\n const { core, pub } = getClients()\n const session = (await pub.from('cash_register_sessions').select('*').eq('id', sessionId).single()).data\n const { data: movs } = await pub.from('financial_movements').select('direction, paid_amount').eq('cash_session_id', sessionId).eq('status', 'paid')\n const movements = movs ?? []\n return {\n session: snakeToCamel(session!) as unknown as CashSession,\n movementCount: movements.length,\n totalInflow: movements.filter((m: any) => m.direction === 'credit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n totalOutflow: movements.filter((m: any) => m.direction === 'debit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n }\n },\n\n // --- Payment Methods ---\n async getPaymentMethods(): Promise<PaymentMethod[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from('payment_methods').select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as PaymentMethod)\n },\n\n async getPaymentMethodTypes(): Promise<PaymentMethodType[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from('payment_method_types').select('*').eq('is_active', true).order('name')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as PaymentMethodType)\n },\n\n // --- Chart of Accounts ---\n async getChartOfAccounts(): Promise<ChartOfAccountsNode[]> {\n const { core, pub } = getClients()\n const { data } = await pub.from('chart_of_accounts').select('*').eq('is_active', true).order('code')\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as ChartOfAccountsNode)\n },\n\n // --- Card Transactions ---\n async getCardTransactions(dateRange?: DateRange): Promise<CardTransaction[]> {\n const { core, pub } = getClients()\n return [] // TODO: implement when card_transactions table exists\n },\n\n // --- Statements (ERP extract: opening balance + realized cash + per-row net/fee) ---\n async getStatement(query: StatementQuery): Promise<StatementResult> {\n const { core, pub } = getClients()\n const today = new Date().toISOString().slice(0, 10)\n // The extract = actual cash events. A cash event is any non-cancelled movement with\n // a payment_date: payment movements, transfers, and legacy in-place-paid bills (which\n // still carry a payment_date until the split migration backfills them). Once a payment\n // movement exists for a bill, payMovement clears the bill's payment_date, so a single\n // cash amount is represented by exactly one row — no double counting, no migration needed.\n\n // 1. Resolve in-scope accounts. No bankAccountId => consolidated: ALL realized cash\n // (including movements with no bank_account_id, e.g. cash/card payments not tied to an account).\n const { data: acctRows } = await pub.from('bank_accounts').select('id, name, initial_balance, is_active')\n const allAccounts = (acctRows ?? []) as any[]\n const consolidated = !query.bankAccountId\n const scopeAccounts = consolidated\n ? allAccounts.filter((a) => a.is_active)\n : allAccounts.filter((a) => a.id === query.bankAccountId)\n const accountIds = scopeAccounts.map((a) => a.id)\n const accountNameById = new Map<string, string>(allAccounts.map((a) => [a.id, a.name]))\n const initialSum = scopeAccounts.reduce((s, a) => s + (Number(a.initial_balance) || 0), 0)\n // Only bail when a specific account was asked for and not found.\n if (!consolidated && accountIds.length === 0) {\n return { entries: [], openingBalance: 0, closingBalance: 0, totalCredits: 0, totalDebits: 0, totalFees: 0, net: 0, accountId: query.bankAccountId }\n }\n // Consolidated => no account filter (catches NULL-account movements too).\n const scopeFilter = (qb: any) => consolidated ? qb : qb.in('bank_account_id', accountIds)\n\n const netOf = (r: any) => r.direction === 'credit'\n ? (Number(r.paid_amount) || 0) - (Number(r.fee_amount) || 0)\n : -(Number(r.paid_amount) || 0)\n\n // 2. Opening balance = Σ initial_balance + prior net (payment_date < from).\n // Select '*' so this still works before the fee_amount migration lands (fee → 0).\n const { data: priorRows } = await scopeFilter(pub.from('financial_movements')\n .select('*')\n .neq('status', 'cancelled')\n .lt('payment_date', query.dateRange.from))\n const priorNet = (priorRows ?? []).reduce((s: number, r: any) => s + netOf(r), 0)\n const openingBalance = round2(initialSum + priorNet)\n\n // 3. In-range realized rows.\n const { data: movs } = await scopeFilter(pub.from('financial_movements')\n .select('*')\n .neq('status', 'cancelled')\n .gte('payment_date', query.dateRange.from).lte('payment_date', query.dateRange.to)\n .order('payment_date').order('created_at'))\n\n // 4. Join invoices for descriptions.\n const invoiceIds = [...new Set((movs ?? []).map((r: any) => r.invoice_id).filter(Boolean))]\n const invoiceById = new Map<string, Invoice>()\n if (invoiceIds.length) {\n const { data: orders } = await core.from('orders').select('id, party_id, reference_number, metadata').in('id', invoiceIds)\n for (const o of (orders ?? []) as any[]) {\n invoiceById.set(o.id, { id: o.id, contactId: o.party_id, contactName: (o.metadata as any)?.contactName, fiscalNumber: o.reference_number } as Invoice)\n }\n }\n\n // 5. Build entries with running NET balance.\n let balance = openingBalance\n let totalCredits = 0, totalDebits = 0, totalFees = 0\n const entries: StatementEntry[] = (movs ?? []).map((r: any) => {\n const movement = snakeToCamel(r) as unknown as FinancialMovement\n const gross = Number(r.paid_amount) || 0\n const isCredit = r.direction === 'credit'\n const fee = isCredit ? (Number(r.fee_amount) || 0) : 0\n const net = isCredit ? round2(gross - fee) : gross\n const meta = (r.metadata ?? {}) as any\n const isTransfer = r.movement_kind === 'transfer'\n const entryKind: StatementEntry['entryKind'] = isTransfer\n ? (meta.transferRole === 'in' ? 'transfer-in' : 'transfer-out')\n : 'movement'\n const counterAccountId = isTransfer ? meta.counterAccountId : undefined\n if (isCredit) balance = round2(balance + net)\n else balance = round2(balance - net)\n // Exclude internal transfers from consolidated totals (they net to zero across accounts).\n if (!(consolidated && isTransfer)) {\n if (isCredit) totalCredits = round2(totalCredits + net)\n else totalDebits = round2(totalDebits + net)\n totalFees = round2(totalFees + fee)\n }\n return {\n movement,\n invoice: r.invoice_id ? invoiceById.get(r.invoice_id) : undefined,\n runningBalance: balance,\n gross, fee, net, entryKind,\n counterAccountId,\n counterAccountName: counterAccountId ? accountNameById.get(counterAccountId) : undefined,\n }\n })\n\n // 5b. Resolve the reconciliation counterpart for matched bank lines, so the\n // extract row can link to the internal transaction it was conciliated with.\n const matchedIds = [...new Set(entries.map((e) => e.movement.matchedMovementId).filter(Boolean))] as string[]\n if (matchedIds.length) {\n const { data: matched } = await pub.from('financial_movements').select('id, invoice_id, notes').in('id', matchedIds)\n const matchedById = new Map<string, any>((matched ?? []).map((m: any) => [m.id, m]))\n const matchedInvoiceIds = [...new Set((matched ?? []).map((m: any) => m.invoice_id).filter(Boolean))] as string[]\n const invById = new Map<string, any>()\n if (matchedInvoiceIds.length) {\n const { data: orders } = await core.from('orders').select('id, reference_number, metadata').in('id', matchedInvoiceIds)\n for (const o of (orders ?? []) as any[]) invById.set(o.id, o)\n }\n for (const e of entries) {\n const mid = e.movement.matchedMovementId\n const mm = mid ? matchedById.get(mid) : undefined\n if (!mm) continue\n const inv = mm.invoice_id ? invById.get(mm.invoice_id) : undefined\n e.reconciledWith = {\n movementId: mm.id,\n description: mm.notes ?? undefined,\n invoiceId: mm.invoice_id ?? undefined,\n fiscalNumber: inv?.reference_number ?? undefined,\n contactName: (inv?.metadata as any)?.contactName ?? undefined,\n }\n }\n }\n\n // 6. Account current balance (ledger as-of-today).\n const { data: todayRows } = await scopeFilter(pub.from('financial_movements')\n .select('*')\n .neq('status', 'cancelled')\n .lte('payment_date', today))\n const accountCurrentBalance = round2(initialSum + (todayRows ?? []).reduce((s: number, r: any) => s + netOf(r), 0))\n\n return {\n entries,\n openingBalance,\n closingBalance: balance,\n totalCredits,\n totalDebits,\n totalFees,\n net: round2(totalCredits - totalDebits),\n accountId: query.bankAccountId,\n accountCurrentBalance,\n }\n },\n\n // --- Summary ---\n async getSummary(dateRange?: DateRange): Promise<FinancialSummary> {\n // Sweep overdue on first load (background, non-blocking)\n sweepOverdue()\n const { core, pub } = getClients()\n const { data: accounts } = await pub.from('bank_accounts').select('current_balance').eq('is_active', true)\n const totalBalance = (accounts ?? []).reduce((s: number, a: any) => s + (a.current_balance ?? 0), 0)\n\n const { data: movs } = await pub.from('financial_movements').select('direction, movement_kind, amount, paid_amount, status, due_date, payment_date')\n const allMovs = movs ?? []\n const unpaid = allMovs.filter((m: any) => ['pending', 'partial', 'overdue'].includes(m.status))\n const today = new Date().toISOString().slice(0, 10)\n\n const unpaidCredit = unpaid.filter((m: any) => m.direction === 'credit')\n const unpaidDebit = unpaid.filter((m: any) => m.direction === 'debit')\n const overdueCredit = unpaidCredit.filter((m: any) => m.status === 'overdue' || m.due_date < today)\n const overdueDebit = unpaidDebit.filter((m: any) => m.status === 'overdue' || m.due_date < today)\n\n const monthStart = today.slice(0, 7) + '-01'\n // Monthly cash flow = payment cash events (one row per payment), never bills.\n const monthPaid = allMovs.filter((m: any) => m.movement_kind === 'payment' && m.payment_date >= monthStart)\n\n return {\n totalBalance,\n totalReceivable: unpaidCredit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n totalPayable: unpaidDebit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n monthlyInflow: monthPaid.filter((m: any) => m.direction === 'credit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n monthlyOutflow: monthPaid.filter((m: any) => m.direction === 'debit').reduce((s: number, m: any) => s + m.paid_amount, 0),\n overdueReceivableCount: overdueCredit.length,\n overdueReceivableAmount: overdueCredit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n overduePayableCount: overdueDebit.length,\n overduePayableAmount: overdueDebit.reduce((s: number, m: any) => s + m.amount - m.paid_amount, 0),\n }\n },\n\n // --- Reconciliation (conciliação) ---\n // Imported bank-statement lines live in financial_movements tagged with\n // (external_source, external_id), status='paid'. Reconciling links a line\n // to the internal movement it settles (or accepts it standalone).\n async importBankTransactions(input) {\n const { pub } = getClients()\n const tenantId = getTenantId()\n let imported = 0, duplicates = 0\n for (const line of input.lines) {\n const { error } = await pub.from('financial_movements').insert({\n tenant_id: tenantId,\n direction: line.direction,\n movement_kind: 'payment',\n amount: line.amount,\n paid_amount: line.amount,\n status: 'paid',\n due_date: line.date,\n payment_date: line.date,\n bank_account_id: line.bankAccountId ?? input.bankAccountId ?? null,\n notes: line.description,\n external_id: line.externalId,\n external_source: line.externalSource,\n })\n if (error) {\n // 23505 = unique violation on uq_financial_movements_external → already imported.\n if ((error as any).code === '23505') duplicates++\n else throw error\n } else imported++\n }\n return { imported, duplicates }\n },\n\n async getUnreconciled(query) {\n const { pub } = getClients()\n let qb = pub.from('financial_movements').select('*')\n .not('external_source', 'is', null)\n .is('reconciled_at', null)\n if (query?.bankAccountId) qb = qb.eq('bank_account_id', query.bankAccountId)\n if (query?.dateRange) qb = qb.gte('payment_date', query.dateRange.from).lte('payment_date', query.dateRange.to)\n const { data } = await qb.order('payment_date', { ascending: false })\n return (data ?? []).map((r: any) => snakeToCamel(r) as unknown as FinancialMovement)\n },\n\n async suggestReconciliation(bankMovementId) {\n const { core, pub } = getClients()\n const { data: line } = await pub.from('financial_movements').select('*').eq('id', bankMovementId).single()\n if (!line) return []\n const amount = Number(line.amount) || 0\n const lineDate = line.payment_date ?? line.due_date\n // Candidates: app-native (non-imported), same direction, not reconciled, amount within ±2%.\n const tol = Math.max(0.01, round2(amount * 0.02))\n const { data } = await pub.from('financial_movements').select('*')\n .is('external_source', null)\n .is('reconciled_at', null)\n .eq('direction', line.direction)\n .gte('amount', round2(amount - tol))\n .lte('amount', round2(amount + tol))\n .neq('id', bankMovementId)\n .limit(25)\n const candidates = ((data ?? []) as any[]).map((r) => {\n const amtDiff = Math.abs((Number(r.amount) || 0) - amount)\n const amtScore = amount > 0 ? Math.max(0, 1 - amtDiff / amount) : 0\n const refDate = r.due_date ?? r.payment_date\n const days = lineDate && refDate\n ? Math.abs((new Date(lineDate).getTime() - new Date(refDate).getTime()) / 86400000)\n : 30\n const dateScore = Math.max(0, 1 - days / 30)\n return {\n movement: snakeToCamel(r) as unknown as FinancialMovement,\n score: round2(0.7 * amtScore + 0.3 * dateScore),\n } as ReconciliationCandidate\n }).sort((a, b) => b.score - a.score)\n // Attach invoice contact names for display.\n const invoiceIds = [...new Set(candidates.map((c) => c.movement.invoiceId).filter(Boolean))] as string[]\n if (invoiceIds.length) {\n const { data: orders } = await core.from('orders').select('id, reference_number, metadata').in('id', invoiceIds)\n const byId = new Map<string, any>((orders ?? []).map((o: any) => [o.id, o]))\n for (const c of candidates) {\n const o = c.movement.invoiceId ? byId.get(c.movement.invoiceId) : undefined\n if (o) c.invoice = { id: o.id, contactName: (o.metadata as any)?.contactName, fiscalNumber: o.reference_number } as Invoice\n }\n }\n return candidates\n },\n\n async reconcileMovement(input) {\n const { pub } = getClients()\n const now = new Date().toISOString()\n await pub.from('financial_movements').update({\n reconciled_at: now,\n matched_movement_id: input.matchedMovementId ?? null,\n }).eq('id', input.bankMovementId)\n if (input.matchedMovementId) {\n // The internal movement is now settled+reconciled by the bank line.\n await pub.from('financial_movements').update({ reconciled_at: now }).eq('id', input.matchedMovementId)\n }\n },\n\n async unreconcileMovement(bankMovementId) {\n const { pub } = getClients()\n const { data: line } = await pub.from('financial_movements').select('matched_movement_id').eq('id', bankMovementId).single()\n await pub.from('financial_movements').update({ reconciled_at: null, matched_movement_id: null }).eq('id', bankMovementId)\n if (line?.matched_movement_id) {\n await pub.from('financial_movements').update({ reconciled_at: null }).eq('id', line.matched_movement_id)\n }\n },\n }\n\n return provider\n}\n","import { createStore, type StoreApi } from 'zustand/vanilla'\nimport { dedup } from '@fayz-ai/saas'\nimport { toast } from '@fayz-ai/ui'\nimport type { FinancialDataProvider } from './data/types'\nimport type {\n Invoice, FinancialMovement, BankAccount, CashSession,\n PaymentMethod, PaymentMethodType, CardTransaction,\n FinancialSummary, StatementResult,\n InvoiceQuery, MovementQuery, StatementQuery,\n CreateInvoiceInput, PayMovementInput, CreateTransferInput,\n OpenCashSessionInput, CloseCashSessionInput,\n DateRange,\n} from './types'\n\n// ---------------------------------------------------------------------------\n// Store state\n// ---------------------------------------------------------------------------\n\nexport interface FinancialUIState {\n // Data cache\n invoices: Invoice[]\n invoicesTotal: number\n invoicesLoading: boolean\n invoiceQuery: InvoiceQuery\n\n movements: FinancialMovement[]\n movementsTotal: number\n movementsLoading: boolean\n\n bankAccounts: BankAccount[]\n bankAccountsLoading: boolean\n\n cashSessions: CashSession[]\n cashSessionsLoading: boolean\n\n paymentMethods: PaymentMethod[]\n paymentMethodTypes: PaymentMethodType[]\n\n summary: FinancialSummary | null\n summaryLoading: boolean\n\n statement: StatementResult | null\n statementLoading: boolean\n statementQuery: StatementQuery | null\n\n cardTransactions: CardTransaction[]\n cardsLoading: boolean\n\n // Actions\n fetchSummary(dateRange?: DateRange): Promise<void>\n fetchInvoices(query: InvoiceQuery): Promise<void>\n fetchBankAccounts(): Promise<void>\n fetchCashSessions(bankAccountId?: string): Promise<void>\n fetchPaymentMethods(): Promise<void>\n fetchStatement(query: StatementQuery): Promise<void>\n fetchCardTransactions(dateRange?: DateRange): Promise<void>\n createInvoice(input: CreateInvoiceInput): Promise<Invoice>\n payMovement(input: PayMovementInput): Promise<void>\n createTransfer(input: CreateTransferInput): Promise<void>\n cancelInvoice(invoiceId: string): Promise<void>\n openCashSession(input: OpenCashSessionInput): Promise<CashSession>\n closeCashSession(input: CloseCashSessionInput): Promise<CashSession>\n}\n\n// ---------------------------------------------------------------------------\n// Store factory\n// ---------------------------------------------------------------------------\n\nexport function createFinancialStore(provider: FinancialDataProvider): StoreApi<FinancialUIState> {\n return createStore<FinancialUIState>((set, get) => ({\n invoices: [],\n invoicesTotal: 0,\n invoicesLoading: false,\n invoiceQuery: {},\n\n movements: [],\n movementsTotal: 0,\n movementsLoading: false,\n\n bankAccounts: [],\n bankAccountsLoading: false,\n\n cashSessions: [],\n cashSessionsLoading: false,\n\n paymentMethods: [],\n paymentMethodTypes: [],\n\n summary: null,\n summaryLoading: false,\n\n statement: null,\n statementLoading: false,\n statementQuery: null,\n\n cardTransactions: [],\n cardsLoading: false,\n\n async fetchSummary(dateRange) {\n return dedup('fin:summary', async () => {\n set({ summaryLoading: true })\n const summary = await provider.getSummary(dateRange)\n set({ summary, summaryLoading: false })\n })\n },\n\n async fetchInvoices(query) {\n return dedup('fin:invoices:' + JSON.stringify(query), async () => {\n set({ invoicesLoading: true, invoiceQuery: query })\n const result = await provider.getInvoices(query)\n set({ invoices: result.data, invoicesTotal: result.total, invoicesLoading: false })\n })\n },\n\n async fetchBankAccounts() {\n return dedup('fin:bankAccounts', async () => {\n set({ bankAccountsLoading: true })\n const bankAccounts = await provider.getBankAccounts()\n set({ bankAccounts, bankAccountsLoading: false })\n })\n },\n\n async fetchCashSessions(bankAccountId) {\n return dedup('fin:cashSessions:' + (bankAccountId ?? ''), async () => {\n set({ cashSessionsLoading: true })\n const cashSessions = await provider.getCashSessions(bankAccountId)\n set({ cashSessions, cashSessionsLoading: false })\n })\n },\n\n async fetchPaymentMethods() {\n return dedup('fin:paymentMethods', async () => {\n const [paymentMethods, paymentMethodTypes] = await Promise.all([\n provider.getPaymentMethods(),\n provider.getPaymentMethodTypes(),\n ])\n set({ paymentMethods, paymentMethodTypes })\n })\n },\n\n async fetchStatement(query) {\n return dedup('fin:statement:' + JSON.stringify(query), async () => {\n set({ statementLoading: true, statementQuery: query })\n const statement = await provider.getStatement(query)\n set({ statement, statementLoading: false })\n })\n },\n\n async fetchCardTransactions(dateRange) {\n return dedup('fin:cards', async () => {\n set({ cardsLoading: true })\n const cardTransactions = await provider.getCardTransactions(dateRange)\n set({ cardTransactions, cardsLoading: false })\n })\n },\n\n async createInvoice(input) {\n try {\n const invoice = await provider.createInvoice(input)\n const query = get().invoiceQuery\n const result = await provider.getInvoices(query)\n const summary = await provider.getSummary()\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Invoice created')\n return invoice\n } catch (err: any) {\n toast.error('Failed to create invoice', { description: err?.message })\n throw err\n }\n },\n\n async payMovement(input) {\n try {\n await provider.payMovement(input)\n const query = get().invoiceQuery\n const [result, summary] = await Promise.all([provider.getInvoices(query), provider.getSummary()])\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Payment recorded')\n } catch (err: any) {\n toast.error('Failed to record payment', { description: err?.message })\n throw err\n }\n },\n\n async createTransfer(input) {\n try {\n await provider.createTransfer(input)\n const query = get().statementQuery\n const [bankAccounts, summary, statement] = await Promise.all([\n provider.getBankAccounts(),\n provider.getSummary(),\n query ? provider.getStatement(query) : Promise.resolve(get().statement),\n ])\n set({ bankAccounts, summary, statement })\n toast.success('Transfer recorded')\n } catch (err: any) {\n toast.error('Failed to record transfer', { description: err?.message })\n throw err\n }\n },\n\n async cancelInvoice(invoiceId) {\n try {\n await provider.cancelInvoice(invoiceId)\n const query = get().invoiceQuery\n const [result, summary] = await Promise.all([provider.getInvoices(query), provider.getSummary()])\n set({ invoices: result.data, invoicesTotal: result.total, summary })\n toast.success('Invoice cancelled')\n } catch (err: any) {\n toast.error('Failed to cancel invoice', { description: err?.message })\n throw err\n }\n },\n\n async openCashSession(input) {\n try {\n const session = await provider.openCashSession(input)\n const cashSessions = await provider.getCashSessions()\n set({ cashSessions })\n toast.success('Cash session opened')\n return session\n } catch (err: any) {\n toast.error('Failed to open session', { description: err?.message })\n throw err\n }\n },\n\n async closeCashSession(input) {\n try {\n const session = await provider.closeCashSession(input)\n const cashSessions = await provider.getCashSessions()\n set({ cashSessions })\n toast.success('Cash session closed')\n return session\n } catch (err: any) {\n toast.error('Failed to close session', { description: err?.message })\n throw err\n }\n },\n }))\n}\n","import type { PluginRegistryDef } from '@fayz-ai/core'\nimport type { EntityDef } from '@fayz-ai/core'\n\n// ---------------------------------------------------------------------------\n// Payment Method Types (seeded — Cash, PIX, Credit Card, etc.)\n// ---------------------------------------------------------------------------\n\nconst paymentMethodTypeEntity: EntityDef = {\n name: 'Payment Type',\n namePlural: 'Payment Types',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'transactionType', label: 'Transaction Type', type: 'select', options: ['cash', 'credit_card', 'debit_card', 'pix', 'bank_transfer', 'check', 'voucher'], showInTable: true, required: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'payment_method_types', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Payment Methods (user-created — e.g. \"Visa 2x\", \"PIX Store\")\n// ---------------------------------------------------------------------------\n\nconst paymentMethodEntity: EntityDef = {\n name: 'Payment Method',\n namePlural: 'Payment Methods',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n // FK to the seeded payment_method_types catalog — load real ids at runtime\n // (a static enum select would write the string into the uuid column).\n { key: 'paymentMethodTypeId', label: 'Type', type: 'relation', relation: { table: 'payment_method_types', labelField: 'name' }, showInTable: true, required: true },\n { key: 'discountValue', label: 'Discount %', type: 'number', showInTable: true },\n { key: 'interestValue', label: 'Interest %', type: 'number', showInTable: true },\n { key: 'minInstallments', label: 'Min Installments', type: 'number', defaultValue: 1 },\n { key: 'maxInstallments', label: 'Max Installments', type: 'number', defaultValue: 1, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'payment_methods', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Chart of Accounts (tree structure)\n// ---------------------------------------------------------------------------\n\nconst chartOfAccountsEntity: EntityDef = {\n name: 'Ledger Account',\n namePlural: 'Chart of Accounts',\n icon: 'BookOpen',\n displayField: 'name',\n defaultSort: 'code',\n fields: [\n { key: 'code', label: 'Code', type: 'text', required: true, showInTable: true },\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'nodeType', label: 'Type', type: 'select', options: ['group', 'leaf'], showInTable: true, required: true, defaultValue: 'leaf' },\n { key: 'parentId', label: 'Parent', type: 'text', showInTable: false },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'chart_of_accounts', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Cost Centers\n// ---------------------------------------------------------------------------\n\nconst costCenterEntity: EntityDef = {\n name: 'Cost Center',\n namePlural: 'Cost Centers',\n icon: 'Target',\n displayField: 'name',\n defaultSort: 'code',\n fields: [\n { key: 'code', label: 'Code', type: 'text', required: true, showInTable: true },\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'cost_centers', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Bank Accounts (physical cash, bank, credit card, digital wallet)\n// ---------------------------------------------------------------------------\n\nconst bankAccountEntity: EntityDef = {\n name: 'Bank Account',\n namePlural: 'Bank Accounts',\n icon: 'Landmark',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'accountType', label: 'Type', type: 'select', options: [\n { label: 'Bank Account', value: 'bank_account' },\n { label: 'Cash Register', value: 'cash_register' },\n { label: 'Credit Card', value: 'credit_card' },\n { label: 'Digital Wallet', value: 'digital_wallet' },\n ], showInTable: true, required: true },\n { key: 'bankName', label: 'Bank', type: 'text', showInTable: true },\n { key: 'accountNumber', label: 'Account Number', type: 'text' },\n { key: 'agencyNumber', label: 'Agency', type: 'text' },\n { key: 'initialBalance', label: 'Initial Balance', type: 'currency', defaultValue: 0 },\n { key: 'creditLimit', label: 'Credit Limit', type: 'currency' },\n { key: 'closingDay', label: 'Closing Day', type: 'number' },\n { key: 'dueDay', label: 'Due Day', type: 'number' },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'bank_accounts', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Card Brands (seeded)\n// ---------------------------------------------------------------------------\n\nconst cardBrandEntity: EntityDef = {\n name: 'Card Brand',\n namePlural: 'Card Brands',\n icon: 'CreditCard',\n displayField: 'name',\n defaultSort: 'name',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'card_brands', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Commission Rules\n// ---------------------------------------------------------------------------\n\nconst commissionRuleEntity: EntityDef = {\n name: 'Commission Rule',\n namePlural: 'Commission Rules',\n icon: 'TrendingUp',\n displayField: 'name',\n defaultSort: 'priority',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'priority', label: 'Priority', type: 'number', required: true, showInTable: true, defaultValue: 1 },\n { key: 'valueType', label: 'Type', type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true, defaultValue: 'percentage' },\n { key: 'value', label: 'Value', type: 'number', required: true, showInTable: true },\n { key: 'description', label: 'Description', type: 'textarea' },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'commission_rules', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Price Tables\n// ---------------------------------------------------------------------------\n\nconst priceTableEntity: EntityDef = {\n name: 'Price Table',\n namePlural: 'Price Tables',\n icon: 'Tag',\n displayField: 'description',\n defaultSort: 'createdAt',\n defaultSortDir: 'desc',\n fields: [\n { key: 'description', label: 'Description', type: 'text', required: true, showInTable: true },\n { key: 'type', label: 'Type', type: 'select', options: ['sale', 'cost'], required: true, showInTable: true, defaultValue: 'sale' },\n { key: 'validFrom', label: 'Valid From', type: 'date', showInTable: true },\n { key: 'validUntil', label: 'Valid Until', type: 'date', showInTable: true },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'price_tables', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Price Variations\n// ---------------------------------------------------------------------------\n\nconst priceVariationEntity: EntityDef = {\n name: 'Price Variation',\n namePlural: 'Price Variations',\n icon: 'Percent',\n displayField: 'name',\n defaultSort: 'createdAt',\n defaultSortDir: 'desc',\n fields: [\n { key: 'name', label: 'Name', type: 'text', required: true, showInTable: true },\n { key: 'variationType', label: 'Type', type: 'select', options: ['discount', 'increase'], required: true, showInTable: true },\n { key: 'valueType', label: 'Value Type', type: 'select', options: ['percentage', 'fixed'], required: true, showInTable: true },\n { key: 'value', label: 'Value', type: 'number', required: true, showInTable: true },\n { key: 'firstAppointmentOnly', label: 'First Appointment Only', type: 'boolean', defaultValue: false },\n { key: 'isActive', label: 'Active', type: 'boolean', showInTable: true, defaultValue: true },\n ],\n data: { table: 'price_variations', tenantScoped: true },\n}\n\n// ---------------------------------------------------------------------------\n// Export all registries\n// ---------------------------------------------------------------------------\n\nexport const financialRegistries: PluginRegistryDef[] = [\n // --- Editable registries (user manages) ---\n {\n id: 'payment-methods',\n entity: paymentMethodEntity,\n icon: 'Wallet',\n description: 'Configured payment methods with fees and installment rules',\n display: 'table',\n },\n {\n id: 'chart-of-accounts',\n entity: chartOfAccountsEntity,\n icon: 'BookOpen',\n description: 'Hierarchical chart of accounts for categorizing transactions',\n display: 'tree',\n seedData: [\n { id: 'coa-1', code: '1', name: 'Revenue', nodeType: 'group', isActive: true },\n { id: 'coa-1.1', code: '1.1', name: 'Sales Revenue', nodeType: 'group', parentId: 'coa-1', isActive: true },\n { id: 'coa-1.1.01', code: '1.1.01', name: 'Services', nodeType: 'leaf', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-1.1.02', code: '1.1.02', name: 'Products', nodeType: 'leaf', parentId: 'coa-1.1', isActive: true },\n { id: 'coa-2', code: '2', name: 'Other Revenue', nodeType: 'group', isActive: true },\n { id: 'coa-2.1', code: '2.1', name: 'Financial Income', nodeType: 'leaf', parentId: 'coa-2', isActive: true },\n { id: 'coa-3', code: '3', name: 'Operational Costs', nodeType: 'group', isActive: true },\n { id: 'coa-3.1', code: '3.1', name: 'Materials & Supplies', nodeType: 'group', parentId: 'coa-3', isActive: true },\n { id: 'coa-3.1.01', code: '3.1.01', name: 'Raw Materials', nodeType: 'leaf', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-3.1.02', code: '3.1.02', name: 'Consumables', nodeType: 'leaf', parentId: 'coa-3.1', isActive: true },\n { id: 'coa-4', code: '4', name: 'Expenses', nodeType: 'group', isActive: true },\n { id: 'coa-4.1', code: '4.1', name: 'Rent', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.2', code: '4.2', name: 'Utilities', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n { id: 'coa-4.3', code: '4.3', name: 'Payroll', nodeType: 'leaf', parentId: 'coa-4', isActive: true },\n ],\n },\n {\n id: 'cost-centers',\n entity: costCenterEntity,\n icon: 'Target',\n description: 'Cost centers for expense tracking and departmental budgets',\n display: 'table',\n seedData: [\n { id: 'cc-001', code: '001', name: 'General', isActive: true },\n ],\n },\n {\n id: 'bank-accounts',\n entity: bankAccountEntity,\n icon: 'Landmark',\n description: 'Bank accounts, cash registers, credit cards, and digital wallets',\n display: 'table',\n },\n {\n id: 'commission-rules',\n entity: commissionRuleEntity,\n icon: 'TrendingUp',\n description: 'Commission rules for service and product revenue sharing',\n display: 'table',\n },\n {\n id: 'price-tables',\n entity: priceTableEntity,\n icon: 'Tag',\n description: 'Price tables for sale and cost pricing',\n display: 'table',\n },\n {\n id: 'price-variations',\n entity: priceVariationEntity,\n icon: 'Percent',\n description: 'Discount and surcharge rules for pricing',\n display: 'table',\n },\n // --- Read-only registries (system / seeded data) ---\n {\n id: 'payment-method-types',\n entity: paymentMethodTypeEntity,\n icon: 'CreditCard',\n description: 'System payment types (cash, card, PIX, etc.)',\n display: 'table',\n readOnly: true,\n seedData: [\n { id: 'pmt-cash', name: 'Cash', transactionType: 'cash', isActive: true },\n { id: 'pmt-pix', name: 'PIX', transactionType: 'pix', isActive: true },\n { id: 'pmt-credit', name: 'Credit Card', transactionType: 'credit_card', isActive: true },\n { id: 'pmt-debit', name: 'Debit Card', transactionType: 'debit_card', isActive: true },\n { id: 'pmt-transfer', name: 'Bank Transfer', transactionType: 'bank_transfer', isActive: true },\n { id: 'pmt-check', name: 'Check', transactionType: 'check', isActive: true },\n ],\n },\n {\n id: 'card-brands',\n entity: cardBrandEntity,\n icon: 'CreditCard',\n description: 'Credit and debit card brands',\n display: 'table',\n readOnly: true,\n seedData: [\n { id: 'cb-visa', name: 'Visa', isActive: true },\n { id: 'cb-mastercard', name: 'Mastercard', isActive: true },\n { id: 'cb-amex', name: 'American Express', isActive: true },\n { id: 'cb-elo', name: 'Elo', isActive: true },\n { id: 'cb-hipercard', name: 'Hipercard', isActive: true },\n { id: 'cb-diners', name: 'Diners Club', isActive: true },\n { id: 'cb-discover', name: 'Discover', isActive: true },\n { id: 'cb-jcb', name: 'JCB', isActive: true },\n { id: 'cb-aura', name: 'Aura', isActive: true },\n { id: 'cb-hiper', name: 'Hiper', isActive: true },\n ],\n },\n]\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const en: Record<string, string> = {\n \"financial.cards.installment\": \"Installment {{current}}/{{total}}\",\n \"financial.cards.noTransactions\": \"No card transactions\",\n \"financial.cards.pending\": \"Pending\",\n \"financial.cards.received\": \"Received\",\n \"financial.cards.subtitle\": \"Credit and debit card transactions\",\n \"financial.cards.title\": \"Cards\",\n \"financial.cards.transactions\": \"({{count}} transactions)\",\n \"financial.cards.transactionsAppear\": \"Card transactions will appear here when payments are made via credit/debit cards\",\n \"financial.cashRegisters.addNotes\": \"Add notes\",\n \"financial.cashRegisters.back\": \"Back\",\n \"financial.cashRegisters.bills\": \"Bills\",\n \"financial.cashRegisters.closeSession\": \"Close Session\",\n \"financial.cashRegisters.closeThisSession\": \"Close this session\",\n \"financial.cashRegisters.closing\": \"Closing...\",\n \"financial.cashRegisters.closingBalance\": \"Closing Balance\",\n \"financial.cashRegisters.closingNotes\": \"Closing Notes\",\n \"financial.cashRegisters.coins\": \"Coins\",\n \"financial.cashRegisters.confirmOpen\": \"Confirm & Open\",\n \"financial.cashRegisters.confirmOpening\": \"Confirm Cash Opening\",\n \"financial.cashRegisters.count\": \"Count\",\n \"financial.cashRegisters.countBills\": \"Count Bills & Coins\",\n \"financial.cashRegisters.countedTotal\": \"Counted Total\",\n \"financial.cashRegisters.denominationCount\": \"Denomination count\",\n \"financial.cashRegisters.differenceFromOpening\": \"Difference from opening\",\n \"financial.cashRegisters.method\": \"Method\",\n \"financial.cashRegisters.noCashAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cashRegisters.noClosedSessions\": \"No closed sessions yet\",\n \"financial.cashRegisters.openAnother\": \"Open another register\",\n \"financial.cashRegisters.openSession\": \"Open Session\",\n \"financial.cashRegisters.openSessions\": \"Open Sessions\",\n \"financial.cashRegisters.opened\": \"Opened\",\n \"financial.cashRegisters.opening\": \"Opening...\",\n \"financial.cashRegisters.openingBalance\": \"Opening Balance\",\n \"financial.cashRegisters.quickAmount\": \"Quick Amount\",\n \"financial.cashRegisters.register\": \"Register\",\n \"financial.cashRegisters.sessionHistory\": \"Session History\",\n \"financial.cashRegisters.subtitle\": \"Open, count and close cash sessions\",\n \"financial.commissions.comingSoon\": \"Coming soon\",\n \"financial.commissions.subtitle\": \"Team commissions\",\n \"financial.invoice.accountsPayable\": \"Accounts Payable\",\n \"financial.invoice.accountsReceivable\": \"Accounts Receivable\",\n \"financial.invoice.cancelConfirm\": \"This action cannot be undone.\",\n \"financial.invoice.cancelDesc\": \"The invoice will be marked as cancelled. All pending installments will also be cancelled. This invoice will no longer count towards totals.\",\n \"financial.invoice.cancelInvoice\": \"Cancel Invoice\",\n \"financial.invoice.cancelling\": \"Cancelling...\",\n \"financial.invoice.contact\": \"Contact\",\n \"financial.invoice.createFirst\": \"Create your first invoice\",\n \"financial.invoice.date\": \"Date\",\n \"financial.invoice.booking\": \"Booking\",\n \"financial.invoice.discount\": \"Discount\",\n \"financial.invoice.due\": \"Due:\",\n \"financial.invoice.edit\": \"Edit Invoice\",\n \"financial.invoice.fullyPaid\": \"Fully paid\",\n \"financial.invoice.installments\": \"Installments\",\n \"financial.invoice.invoices\": \"{{count}} invoices\",\n \"financial.invoice.items\": \"Items\",\n \"financial.invoice.keepInvoice\": \"Keep Invoice\",\n \"financial.invoice.new\": \"New\",\n \"financial.invoice.noDetails\": \"No additional details recorded\",\n \"financial.invoice.noInstallments\": \"No installments\",\n \"financial.invoice.noInvoices\": \"No invoices yet\",\n \"financial.invoice.summaryTotal\": \"Total\",\n \"financial.invoice.summaryReceived\": \"Received\",\n \"financial.invoice.summaryReceivable\": \"Receivable\",\n \"financial.invoice.summaryPaid\": \"Paid\",\n \"financial.invoice.summaryPayable\": \"Payable\",\n \"financial.invoice.notFound\": \"Invoice not found\",\n \"financial.invoice.notFoundDesc\": \"This invoice could not be loaded.\",\n \"financial.invoice.notes\": \"Notes\",\n \"financial.invoice.paidLabel\": \"Paid:\",\n \"financial.invoice.paidOn\": \"Paid on:\",\n \"financial.invoice.pay\": \"Pay\",\n \"financial.invoice.paymentSchedule\": \"Payment Schedule\",\n \"financial.invoice.remaining\": \"Remaining:\",\n \"financial.invoice.searchPlaceholder\": \"Search by contact or description...\",\n \"financial.invoice.showing\": \"Showing {{shown}} of {{total}}\",\n \"financial.invoice.subtotal\": \"Subtotal\",\n \"financial.invoice.surcharge\": \"Surcharge\",\n \"financial.invoice.total\": \"Total\",\n \"financial.invoice.yesCancel\": \"Yes, Cancel\",\n \"financial.invoiceForm.addFirstItem\": \"Add your first item\",\n \"financial.invoiceForm.addItem\": \"Add Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Add items first\",\n \"financial.invoiceForm.additionalNotes\": \"Additional notes...\",\n \"financial.invoiceForm.cancel\": \"Cancel\",\n \"financial.invoiceForm.close\": \"Close\",\n \"financial.invoiceForm.creating\": \"Creating new invoice\",\n \"financial.invoiceForm.date\": \"Date\",\n \"financial.invoiceForm.description\": \"Description\",\n \"financial.invoiceForm.discountSurcharge\": \"Discount / Surcharge\",\n \"financial.invoiceForm.done\": \"Done\",\n \"financial.invoiceForm.editing\": \"Editing invoice\",\n \"financial.invoiceForm.fiscalNumber\": \"Fiscal Number (optional)\",\n \"financial.invoiceForm.headquarters\": \"Headquarters\",\n \"financial.invoiceForm.installments\": \"Installments\",\n \"financial.invoiceForm.item\": \"Item\",\n \"financial.invoiceForm.itemDescription\": \"Item description\",\n \"financial.invoiceForm.items\": \"Items\",\n \"financial.invoiceForm.noDescription\": \"No description\",\n \"financial.invoiceForm.noItems\": \"No items added yet\",\n \"financial.invoiceForm.noUnitsFound\": \"No units found\",\n \"financial.invoiceForm.observations\": \"Observations\",\n \"financial.invoiceForm.payTo\": \"Pay to\",\n \"financial.invoiceForm.qty\": \"Qty\",\n \"financial.invoiceForm.receiveFrom\": \"Receive from\",\n \"financial.invoiceForm.save\": \"Save\",\n \"financial.invoiceForm.saving\": \"Saving...\",\n \"financial.invoiceForm.searchType\": \"Type to search...\",\n \"financial.invoiceForm.searchUnit\": \"Search unit...\",\n \"financial.invoiceForm.selectInstallments\": \"Select installment count above\",\n \"financial.invoiceForm.selectItemType\": \"Select item type:\",\n \"financial.invoiceForm.selectUnit\": \"Select unit\",\n \"financial.invoiceForm.selectUnitTitle\": \"Select Unit\",\n \"financial.invoiceForm.unit\": \"Unit\",\n \"financial.invoiceForm.unitPrice\": \"Unit Price\",\n \"financial.nav.cards\": \"Cards\",\n \"financial.nav.cashRegisters\": \"Cash Registers\",\n \"financial.nav.commissions\": \"Commissions\",\n \"financial.nav.list\": \"List\",\n \"financial.nav.new\": \"New\",\n \"financial.nav.overview\": \"Overview\",\n \"financial.nav.payables\": \"Accounts Payable\",\n \"financial.nav.receivables\": \"Accounts Receivable\",\n \"financial.nav.reconciliation\": \"Reconciliation\",\n \"financial.nav.recurringExpenses\": \"Recurring Expenses\",\n \"financial.nav.rules\": \"Rules\",\n \"financial.nav.statements\": \"Statements\",\n \"financial.nav.summary\": \"Summary\",\n \"financial.reconciliation.title\": \"Reconciliation\",\n \"financial.reconciliation.subtitle\": \"Match imported bank lines to your movements\",\n \"financial.reconciliation.pending\": \"{{count}} to reconcile\",\n \"financial.reconciliation.allDone\": \"All caught up\",\n \"financial.reconciliation.empty\": \"Nothing to reconcile\",\n \"financial.reconciliation.emptyHint\": \"Imported bank transactions will appear here for matching.\",\n \"financial.reconciliation.bankLines\": \"Bank lines\",\n \"financial.reconciliation.candidates\": \"Suggested matches\",\n \"financial.reconciliation.selectLine\": \"Select a bank line to see suggested matches\",\n \"financial.reconciliation.noCandidates\": \"No suggested matches for this line\",\n \"financial.reconciliation.match\": \"Match\",\n \"financial.reconciliation.accept\": \"Accept as new\",\n \"financial.reconciliation.acceptHint\": \"No internal counterpart — keep as a standalone entry\",\n \"financial.reconciliation.matchScore\": \"{{score}}% match\",\n \"financial.reconciliation.refresh\": \"Refresh\",\n \"financial.onboarding.back\": \"Back\",\n \"financial.onboarding.configureHint\": \"You can configure this in detail from the Settings gear icon inside the Financial module.\",\n \"financial.onboarding.getStarted\": \"Get Started\",\n \"financial.onboarding.next\": \"Next\",\n \"financial.onboarding.startUsing\": \"Start using Financial\",\n \"financial.onboarding.skip\": \"Skip setup\",\n \"financial.onboarding.welcome\": \"Welcome to Financial\",\n \"financial.onboarding.description\": \"Let's set up your financial module. This quick wizard will help you configure the essentials.\",\n \"financial.onboarding.accounts.title\": \"Bank Accounts\",\n \"financial.onboarding.accounts.description\": \"Add your bank accounts, cash registers, and credit cards. You can always add more later from Settings.\",\n \"financial.onboarding.payments.title\": \"Payment Methods\",\n \"financial.onboarding.payments.description\": \"Review which payment types you accept. Default types (Cash, PIX, Credit Card, etc.) are already set up.\",\n \"financial.onboarding.chart.title\": \"Chart of Accounts\",\n \"financial.onboarding.chart.description\": \"A default chart of accounts template has been created. You can customize it anytime from Settings.\",\n \"financial.page.newPayable\": \"New Payable\",\n \"financial.page.newPayableDesc\": \"Record an expense or bill to pay\",\n \"financial.page.newReceivable\": \"New Receivable\",\n \"financial.page.newReceivableDesc\": \"Record income or amount to receive\",\n \"financial.page.openCash\": \"Open Cash Register\",\n \"financial.page.openCashDesc\": \"Start a new cash session\",\n \"financial.page.settingsSubtitle\": \"Preferences, payment methods, and accounts\",\n \"financial.page.settingsTitle\": \"Financial Settings\",\n \"financial.payment.amount\": \"Amount\",\n \"financial.payment.bankAccount\": \"Bank Account\",\n \"financial.payment.cancel\": \"Cancel\",\n \"financial.payment.card\": \"Card\",\n \"financial.payment.cardBrand\": \"Card Brand\",\n \"financial.payment.cardInstallments\": \"Installments\",\n \"financial.payment.date\": \"Date\",\n \"financial.payment.installment\": \"Installment #{{number}}\",\n \"financial.payment.method\": \"Payment Method\",\n \"financial.payment.notes\": \"Notes\",\n \"financial.payment.optionalNotes\": \"Optional notes...\",\n \"financial.payment.payAmount\": \"Pay {{amount}}\",\n \"financial.payment.processing\": \"Processing...\",\n \"financial.payment.remaining\": \"{{amount}} remaining\",\n \"financial.payment.select\": \"Select...\",\n \"financial.payment.selectAccount\": \"Select account...\",\n \"financial.payment.selectBrand\": \"Select brand...\",\n \"financial.payment.title\": \"Record Payment\",\n \"financial.settings.allowPartial\": \"Allow partial payments\",\n \"financial.settings.allowPartialDesc\": \"Accept payments less than the full installment amount\",\n \"financial.settings.autoClose\": \"Auto-close at end of day\",\n \"financial.settings.autoCloseDesc\": \"Remind to close open sessions at the end of business hours\",\n \"financial.settings.autoInstallments\": \"Auto-generate installments\",\n \"financial.settings.autoInstallmentsDesc\": \"Automatically split invoice total into equal installments\",\n \"financial.settings.cashRegister\": \"Cash Register\",\n \"financial.settings.cashRegisterDesc\": \"Cash session behavior\",\n \"financial.settings.dailySummary\": \"Daily financial summary\",\n \"financial.settings.dailySummaryDesc\": \"Send a daily email summary of receivables and payables\",\n \"financial.settings.invoices\": \"Invoices\",\n \"financial.settings.invoicesDesc\": \"How invoices and payments are handled\",\n \"financial.settings.notifications\": \"Notifications\",\n \"financial.settings.notificationsDesc\": \"Alerts and reminders\",\n \"financial.settings.overdueAlerts\": \"Overdue payment alerts\",\n \"financial.settings.overdueAlertsDesc\": \"Notify when invoices pass their due date\",\n \"financial.settings.requireDoc\": \"Require document number\",\n \"financial.settings.requireDocDesc\": \"Make document/invoice number mandatory on payments\",\n \"financial.settings.requireOpening\": \"Require opening balance\",\n \"financial.settings.requireOpeningDesc\": \"Opening balance must be confirmed before starting a session\",\n \"financial.settingsPage.subtitle\": \"Manage payment methods, accounts, and configurations\",\n \"financial.settingsPage.title\": \"Financial Settings\",\n \"financial.payment.noMethods\": \"No payment methods configured.\",\n \"financial.payment.configureMethods\": \"Set up payment methods\",\n \"financial.payment.noAccounts\": \"No compatible account. Create one in Settings.\",\n \"financial.payment.configureAccounts\": \"Set up accounts\",\n \"financial.statements.account\": \"Account\",\n \"financial.statements.from\": \"From\",\n \"financial.statements.noTransactions\": \"No transactions in this period\",\n \"financial.statements.selectAccount\": \"Select an account to view statement\",\n \"financial.statements.selectToView\": \"Select an account to view statement\",\n \"financial.statements.subtitle\": \"Bank account transactions and balances\",\n \"financial.statements.title\": \"Statements\",\n \"financial.statements.to\": \"To\",\n \"financial.summary.allAccounts\": \"All accounts\",\n \"financial.summary.cashFlow\": \"Cash Flow\",\n \"financial.summary.cashFlowBreakdown\": \"Cash Flow Breakdown\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Receivables vs. payables this month\",\n \"financial.summary.cashFlowSubtitle\": \"Monthly income vs expenses\",\n \"financial.summary.expenses\": \"Expenses\",\n \"financial.summary.income\": \"Income\",\n \"financial.summary.monthlyFlow\": \"Monthly Flow\",\n \"financial.summary.negativeBalance\": \"Negative balance\",\n \"financial.summary.net\": \"Net\",\n \"financial.summary.noOverdue\": \"No overdue transactions\",\n \"financial.summary.noTransactions\": \"No transactions yet\",\n \"financial.summary.overdue\": \"{{count}} overdue\",\n \"financial.summary.overduePayable\": \"Overdue payable\",\n \"financial.summary.overdueReceivable\": \"Overdue receivable\",\n \"financial.summary.overdueTitle\": \"Overdue\",\n \"financial.summary.paid\": \"Paid\",\n \"financial.summary.payable\": \"Payable\",\n \"financial.summary.positiveBalance\": \"Positive balance\",\n \"financial.summary.receivable\": \"Receivable\",\n \"financial.summary.received\": \"Received\",\n \"financial.summary.recentTransactions\": \"Recent Transactions\",\n \"financial.summary.totalBalance\": \"Total Balance\",\n \"financial.summary.transactionsAppear\": \"Transactions will appear here once recorded\",\n \"financial.summary.viewAll\": \"View all\",\n \"financial.quickActions.newPayable\": \"New Payable\",\n \"financial.quickActions.newPayableDesc\": \"Record an expense or bill to pay\",\n \"financial.quickActions.newReceivable\": \"New Receivable\",\n \"financial.quickActions.newReceivableDesc\": \"Record income or amount to receive\",\n \"financial.quickActions.openCashRegister\": \"Open Cash Register\",\n \"financial.quickActions.openCashRegisterDesc\": \"Start a new cash session\",\n \"financial.cash.title\": \"Cash Registers\",\n \"financial.cash.subtitle\": \"Open, count and close cash sessions\",\n \"financial.cash.bills\": \"Bills\",\n \"financial.cash.coins\": \"Coins\",\n \"financial.cash.noAccounts\": \"No cash register accounts found. Create a bank account with type \\\"Cash Register\\\" first.\",\n \"financial.cash.confirmOpening\": \"Confirm Cash Opening\",\n \"financial.cash.register\": \"Register\",\n \"financial.cash.openingBalance\": \"Opening Balance\",\n \"financial.cash.method\": \"Method\",\n \"financial.cash.denominationCount\": \"Denomination count\",\n \"financial.cash.notes\": \"Notes\",\n \"financial.cash.opening\": \"Opening...\",\n \"financial.cash.confirmAndOpen\": \"Confirm & Open\",\n \"financial.cash.quickAmount\": \"Quick Amount\",\n \"financial.cash.countBillsCoins\": \"Count Bills & Coins\",\n \"financial.cash.count\": \"Count\",\n \"financial.cash.countedTotal\": \"Counted Total\",\n \"financial.cash.addNotes\": \"Add notes\",\n \"financial.cash.openingObservations\": \"Opening observations...\",\n \"financial.cash.openSession\": \"Open Session\",\n \"financial.cash.closingBalance\": \"Closing Balance\",\n \"financial.cash.differenceFromOpening\": \"Difference from opening\",\n \"financial.cash.closingNotes\": \"Closing Notes\",\n \"financial.cash.closingObservations\": \"Closing observations...\",\n \"financial.cash.closing\": \"Closing...\",\n \"financial.cash.closeSession\": \"Close Session\",\n \"financial.cash.openSessions\": \"Open Sessions\",\n \"financial.cash.opened\": \"Opened\",\n \"financial.cash.by\": \"by\",\n \"financial.cash.closeThisSession\": \"Close this session\",\n \"financial.cash.sessionHistory\": \"Session History\",\n \"financial.cash.noClosedSessions\": \"No closed sessions yet\",\n \"financial.cash.openLabel\": \"Open\",\n \"financial.cash.closeLabel\": \"Close\",\n \"financial.cash.diff\": \"Diff\",\n \"financial.cash.openAnother\": \"Open another register\",\n \"financial.invoice.statusOpen\": \"Open\",\n \"financial.invoice.statusPartial\": \"Partial\",\n \"financial.invoice.statusPaid\": \"Paid\",\n \"financial.invoice.statusOverdue\": \"Overdue\",\n \"financial.invoice.statusCancelled\": \"Cancelled\",\n \"financial.invoice.statusPending\": \"Pending\",\n \"financial.invoice.statusDraft\": \"Draft\",\n \"financial.invoice.columnDate\": \"Date\",\n \"financial.invoice.columnDescription\": \"Description\",\n \"financial.invoice.columnAmount\": \"Amount\",\n \"financial.invoice.columnPaid\": \"Paid\",\n \"financial.invoice.columnStatus\": \"Status\",\n \"financial.invoice.columnInst\": \"Inst.\",\n \"financial.invoice.columnQty\": \"Qty\",\n \"financial.invoice.columnUnitPrice\": \"Unit Price\",\n \"financial.invoice.columnTotal\": \"Total\",\n \"financial.invoice.columnNumber\": \"#\",\n \"financial.invoice.invoice\": \"Invoice\",\n \"financial.invoice.loading\": \"Loading...\",\n \"financial.invoiceForm.cancelInvoice\": \"Cancel Invoice\",\n \"financial.invoiceForm.cancelConfirm\": \"This action cannot be undone.\",\n \"financial.invoiceForm.cancelDesc\": \"The invoice will be marked as cancelled. All pending installments will also be cancelled.\",\n \"financial.invoiceForm.keepInvoice\": \"Keep Invoice\",\n \"financial.invoiceForm.yesCancel\": \"Yes, Cancel\",\n \"financial.invoiceForm.cancelling\": \"Cancelling...\",\n \"financial.invoiceForm.removeAdjustments\": \"Remove adjustments\",\n \"financial.invoiceForm.discount\": \"Discount\",\n \"financial.invoiceForm.surcharge\": \"Surcharge\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Account\",\n \"financial.payment.due\": \"Due:\",\n \"financial.payment.paidAmount\": \"Paid:\",\n \"financial.payment.paidOn\": \"Paid on:\",\n \"financial.title\": \"Financial\",\n \"financial.summary.title\": \"Financial Summary\",\n \"financial.summary.revenue\": \"Revenue\",\n \"financial.invoice.title\": \"Invoices\",\n \"financial.invoice.create\": \"New Invoice\",\n \"financial.invoice.number\": \"Invoice #\",\n \"financial.invoice.client\": \"Client\",\n \"financial.invoice.amount\": \"Amount\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Due Date\",\n \"financial.invoice.addItem\": \"Add Item\",\n \"financial.invoice.tax\": \"Tax\",\n \"financial.invoice.save\": \"Save Invoice\",\n \"financial.invoice.saving\": \"Saving...\",\n \"financial.invoice.markPaid\": \"Mark as Paid\",\n \"financial.invoice.sendReminder\": \"Send Reminder\",\n \"financial.receivable.title\": \"Accounts Receivable\",\n \"financial.payable.title\": \"Accounts Payable\",\n \"financial.statements.loading\": \"Loading...\",\n \"financial.cards.empty\": \"No card transactions yet\",\n \"financial.commissions.title\": \"Commissions\",\n \"financial.cashRegister.title\": \"Cash Register\",\n \"financial.cashRegister.open\": \"Open Register\",\n \"financial.cashRegister.close\": \"Close Register\",\n \"financial.movements.title\": \"Movements\",\n \"financial.bankAccounts.title\": \"Bank Accounts\",\n \"financial.settings.title\": \"Financial Settings\",\n // Settings registry tabs\n \"registry.payment-methods\": \"Payment Methods\",\n \"registry.payment-methods.description\": \"Configured payment methods with fees and installment rules\",\n \"registry.bank-accounts\": \"Accounts\",\n \"registry.bank-accounts.description\": \"Bank accounts, cash registers, credit cards, and digital wallets\",\n \"registry.chart-of-accounts\": \"Chart of Accounts\",\n \"registry.chart-of-accounts.description\": \"Hierarchical chart of accounts for categorizing transactions\",\n \"registry.cost-centers\": \"Cost Centers\",\n \"registry.cost-centers.description\": \"Cost centers for expense tracking and departmental budgets\",\n \"registry.commission-rules\": \"Commission Rules\",\n \"registry.commission-rules.description\": \"Commission rules for service and product revenue sharing\",\n \"registry.price-tables\": \"Price Tables\",\n \"registry.price-tables.description\": \"Price tables for sale and cost pricing\",\n \"registry.price-variations\": \"Price Variations\",\n \"registry.price-variations.description\": \"Discount and surcharge rules for pricing\",\n \"registry.payment-method-types\": \"Payment Types\",\n \"registry.payment-method-types.description\": \"System payment types (cash, card, PIX, etc.)\",\n \"registry.card-brands\": \"Card Brands\",\n \"registry.card-brands.description\": \"Credit and debit card brands\",\n // Statements / extract\n \"financial.statements.columnDate\": \"Date\",\n \"financial.statements.columnDescription\": \"Description\",\n \"financial.statements.columnDebit\": \"Debit\",\n \"financial.statements.columnCredit\": \"Credit\",\n \"financial.statements.columnFee\": \"Fee\",\n \"financial.statements.columnBalance\": \"Balance\",\n \"financial.statements.columnMethod\": \"Method\",\n \"financial.statements.columnDoc\": \"Document\",\n \"financial.statements.installmentShort\": \"Inst. {{n}}\",\n \"financial.statements.viewInvoice\": \"View invoice\",\n \"financial.person.empty\": \"No financial activity for this contact yet\",\n \"financial.statements.opening\": \"Opening balance\",\n \"financial.statements.closing\": \"Closing balance\",\n \"financial.statements.currentBalance\": \"Current balance\",\n \"financial.statements.totalCredits\": \"Credits\",\n \"financial.statements.totalDebits\": \"Debits\",\n \"financial.statements.totalFees\": \"Fees\",\n \"financial.statements.net\": \"Net\",\n \"financial.statements.transfer\": \"Transfer\",\n \"financial.statements.reconciled\": \"Reconciled with the bank statement\",\n \"financial.statements.imported\": \"Imported from the bank · not reconciled\",\n \"financial.statements.reconciledWith\": \"Reconciled with {{ref}}\",\n \"financial.statements.newTransfer\": \"New Transfer\",\n // Transfer dialog\n \"financial.transfer.title\": \"Transfer Between Accounts\",\n \"financial.transfer.from\": \"From account\",\n \"financial.transfer.to\": \"To account\",\n \"financial.transfer.amount\": \"Amount\",\n \"financial.transfer.date\": \"Date\",\n \"financial.transfer.notes\": \"Notes\",\n \"financial.transfer.optionalNotes\": \"Optional notes...\",\n \"financial.transfer.selectAccount\": \"Select account...\",\n \"financial.transfer.submit\": \"Transfer\",\n \"financial.transfer.processing\": \"Transferring...\",\n \"financial.transfer.cancel\": \"Cancel\",\n \"financial.transfer.created\": \"Transfer recorded\",\n \"financial.transfer.failed\": \"Failed to record transfer\",\n \"financial.transfer.sameAccount\": \"Source and destination must differ\",\n \"financial.transfer.invalidAmount\": \"Amount must be greater than zero\",\n}\n","// financial.* — merged plugin-own + saas-core central i18n\nexport const ptBR: Record<string, string> = {\n \"financial.cards.installment\": \"Parcela {{current}}/{{total}}\",\n \"financial.cards.noTransactions\": \"Nenhuma transação com cartão\",\n \"financial.cards.pending\": \"Pendente\",\n \"financial.cards.received\": \"Recebido\",\n \"financial.cards.subtitle\": \"Transações de cartão de crédito e débito\",\n \"financial.cards.title\": \"Cartões\",\n \"financial.cards.transactions\": \"({{count}} transações)\",\n \"financial.cards.transactionsAppear\": \"As transações com cartão aparecerão aqui quando pagamentos forem feitos via cartão de crédito/débito\",\n \"financial.cashRegisters.addNotes\": \"Adicionar observações\",\n \"financial.cashRegisters.back\": \"Voltar\",\n \"financial.cashRegisters.bills\": \"Notas\",\n \"financial.cashRegisters.closeSession\": \"Fechar Sessão\",\n \"financial.cashRegisters.closeThisSession\": \"Fechar esta sessão\",\n \"financial.cashRegisters.closing\": \"Fechando...\",\n \"financial.cashRegisters.closingBalance\": \"Saldo de Fechamento\",\n \"financial.cashRegisters.closingNotes\": \"Observações de Fechamento\",\n \"financial.cashRegisters.coins\": \"Moedas\",\n \"financial.cashRegisters.confirmOpen\": \"Confirmar e Abrir\",\n \"financial.cashRegisters.confirmOpening\": \"Confirmar Abertura do Caixa\",\n \"financial.cashRegisters.count\": \"Contagem\",\n \"financial.cashRegisters.countBills\": \"Contar Notas e Moedas\",\n \"financial.cashRegisters.countedTotal\": \"Total Contado\",\n \"financial.cashRegisters.denominationCount\": \"Contagem por denominação\",\n \"financial.cashRegisters.differenceFromOpening\": \"Diferença em relação à abertura\",\n \"financial.cashRegisters.method\": \"Método\",\n \"financial.cashRegisters.noCashAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cashRegisters.noClosedSessions\": \"Nenhuma sessão encerrada ainda\",\n \"financial.cashRegisters.openAnother\": \"Abrir outro caixa\",\n \"financial.cashRegisters.openSession\": \"Abrir Sessão\",\n \"financial.cashRegisters.openSessions\": \"Sessões Abertas\",\n \"financial.cashRegisters.opened\": \"Aberto\",\n \"financial.cashRegisters.opening\": \"Abrindo...\",\n \"financial.cashRegisters.openingBalance\": \"Saldo de Abertura\",\n \"financial.cashRegisters.quickAmount\": \"Valor Rápido\",\n \"financial.cashRegisters.register\": \"Caixa\",\n \"financial.cashRegisters.sessionHistory\": \"Histórico de Sessões\",\n \"financial.cashRegisters.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.commissions.comingSoon\": \"Em breve\",\n \"financial.commissions.subtitle\": \"Comissões da equipe\",\n \"financial.invoice.accountsPayable\": \"Contas a Pagar\",\n \"financial.invoice.accountsReceivable\": \"Contas a Receber\",\n \"financial.invoice.cancelConfirm\": \"Esta ação não pode ser desfeita.\",\n \"financial.invoice.cancelDesc\": \"A fatura será marcada como cancelada. Todas as parcelas pendentes também serão canceladas. Esta fatura não contará mais nos totais.\",\n \"financial.invoice.cancelInvoice\": \"Cancelar Fatura\",\n \"financial.invoice.cancelling\": \"Cancelando...\",\n \"financial.invoice.contact\": \"Contato\",\n \"financial.invoice.createFirst\": \"Crie sua primeira fatura\",\n \"financial.invoice.date\": \"Data\",\n \"financial.invoice.booking\": \"Agendamento\",\n \"financial.invoice.discount\": \"Desconto\",\n \"financial.invoice.due\": \"Vencimento:\",\n \"financial.invoice.edit\": \"Editar Fatura\",\n \"financial.invoice.fullyPaid\": \"Totalmente pago\",\n \"financial.invoice.installments\": \"Parcelas\",\n \"financial.invoice.invoices\": \"{{count}} faturas\",\n \"financial.invoice.items\": \"Itens\",\n \"financial.invoice.keepInvoice\": \"Manter Fatura\",\n \"financial.invoice.new\": \"Nova\",\n \"financial.invoice.noDetails\": \"Nenhum detalhe adicional registrado\",\n \"financial.invoice.noInstallments\": \"Sem parcelas\",\n \"financial.invoice.noInvoices\": \"Nenhuma fatura ainda\",\n \"financial.invoice.summaryTotal\": \"Total\",\n \"financial.invoice.summaryReceived\": \"Recebido\",\n \"financial.invoice.summaryReceivable\": \"A Receber\",\n \"financial.invoice.summaryPaid\": \"Pago\",\n \"financial.invoice.summaryPayable\": \"A Pagar\",\n \"financial.invoice.notFound\": \"Fatura não encontrada\",\n \"financial.invoice.notFoundDesc\": \"Esta fatura não pôde ser carregada.\",\n \"financial.invoice.notes\": \"Observações\",\n \"financial.invoice.paidLabel\": \"Pago:\",\n \"financial.invoice.paidOn\": \"Pago em:\",\n \"financial.invoice.pay\": \"Pagar\",\n \"financial.invoice.paymentSchedule\": \"Cronograma de Pagamento\",\n \"financial.invoice.remaining\": \"Restante:\",\n \"financial.invoice.searchPlaceholder\": \"Buscar por contato ou descrição...\",\n \"financial.invoice.showing\": \"Exibindo {{shown}} de {{total}}\",\n \"financial.invoice.subtotal\": \"Subtotal\",\n \"financial.invoice.surcharge\": \"Acréscimo\",\n \"financial.invoice.total\": \"Total\",\n \"financial.invoice.yesCancel\": \"Sim, Cancelar\",\n \"financial.invoiceForm.addFirstItem\": \"Adicione seu primeiro item\",\n \"financial.invoiceForm.addItem\": \"Adicionar Item\",\n \"financial.invoiceForm.addItemsFirst\": \"Adicione itens primeiro\",\n \"financial.invoiceForm.additionalNotes\": \"Observações adicionais...\",\n \"financial.invoiceForm.cancel\": \"Cancelar\",\n \"financial.invoiceForm.close\": \"Fechar\",\n \"financial.invoiceForm.creating\": \"Criando nova fatura\",\n \"financial.invoiceForm.date\": \"Data\",\n \"financial.invoiceForm.description\": \"Descrição\",\n \"financial.invoiceForm.discountSurcharge\": \"Desconto / Acréscimo\",\n \"financial.invoiceForm.done\": \"Pronto\",\n \"financial.invoiceForm.editing\": \"Editando fatura\",\n \"financial.invoiceForm.fiscalNumber\": \"Número Fiscal (opcional)\",\n \"financial.invoiceForm.headquarters\": \"Sede\",\n \"financial.invoiceForm.installments\": \"Parcelas\",\n \"financial.invoiceForm.item\": \"Item\",\n \"financial.invoiceForm.itemDescription\": \"Descrição do item\",\n \"financial.invoiceForm.items\": \"Itens\",\n \"financial.invoiceForm.noDescription\": \"Sem descrição\",\n \"financial.invoiceForm.noItems\": \"Nenhum item adicionado ainda\",\n \"financial.invoiceForm.noUnitsFound\": \"Nenhuma unidade encontrada\",\n \"financial.invoiceForm.observations\": \"Observações\",\n \"financial.invoiceForm.payTo\": \"Pagar para\",\n \"financial.invoiceForm.qty\": \"Qtd\",\n \"financial.invoiceForm.receiveFrom\": \"Receber de\",\n \"financial.invoiceForm.save\": \"Salvar\",\n \"financial.invoiceForm.saving\": \"Salvando...\",\n \"financial.invoiceForm.searchType\": \"Digite para buscar...\",\n \"financial.invoiceForm.searchUnit\": \"Buscar unidade...\",\n \"financial.invoiceForm.selectInstallments\": \"Selecione a quantidade de parcelas acima\",\n \"financial.invoiceForm.selectItemType\": \"Selecione o tipo do item:\",\n \"financial.invoiceForm.selectUnit\": \"Selecionar unidade\",\n \"financial.invoiceForm.selectUnitTitle\": \"Selecionar Unidade\",\n \"financial.invoiceForm.unit\": \"Unidade\",\n \"financial.invoiceForm.unitPrice\": \"Preço Unitário\",\n \"financial.nav.cards\": \"Cartões\",\n \"financial.nav.cashRegisters\": \"Caixas\",\n \"financial.nav.commissions\": \"Comissões\",\n \"financial.nav.list\": \"Lista\",\n \"financial.nav.new\": \"Novo\",\n \"financial.nav.overview\": \"Visão Geral\",\n \"financial.nav.payables\": \"Contas a Pagar\",\n \"financial.nav.receivables\": \"Contas a Receber\",\n \"financial.nav.reconciliation\": \"Conciliação\",\n \"financial.nav.recurringExpenses\": \"Despesas Recorrentes\",\n \"financial.nav.rules\": \"Regras\",\n \"financial.nav.statements\": \"Extratos\",\n \"financial.nav.summary\": \"Resumo\",\n \"financial.reconciliation.title\": \"Conciliação\",\n \"financial.reconciliation.subtitle\": \"Concilie as linhas importadas do banco com seus lançamentos\",\n \"financial.reconciliation.pending\": \"{{count}} para conciliar\",\n \"financial.reconciliation.allDone\": \"Tudo conciliado\",\n \"financial.reconciliation.empty\": \"Nada para conciliar\",\n \"financial.reconciliation.emptyHint\": \"As transações bancárias importadas aparecem aqui para conciliação.\",\n \"financial.reconciliation.bankLines\": \"Linhas do banco\",\n \"financial.reconciliation.candidates\": \"Correspondências sugeridas\",\n \"financial.reconciliation.selectLine\": \"Selecione uma linha do banco para ver as sugestões\",\n \"financial.reconciliation.noCandidates\": \"Nenhuma correspondência sugerida para esta linha\",\n \"financial.reconciliation.match\": \"Conciliar\",\n \"financial.reconciliation.accept\": \"Aceitar como novo\",\n \"financial.reconciliation.acceptHint\": \"Sem contrapartida interna — manter como lançamento avulso\",\n \"financial.reconciliation.matchScore\": \"{{score}}% compatível\",\n \"financial.reconciliation.refresh\": \"Atualizar\",\n \"financial.onboarding.back\": \"Voltar\",\n \"financial.onboarding.configureHint\": \"Você pode configurar isso em detalhes pelo ícone de Configurações dentro do módulo Financeiro.\",\n \"financial.onboarding.getStarted\": \"Começar\",\n \"financial.onboarding.next\": \"Próximo\",\n \"financial.onboarding.startUsing\": \"Começar a usar o Financeiro\",\n \"financial.onboarding.skip\": \"Pular configuração\",\n \"financial.onboarding.welcome\": \"Bem-vindo ao Financeiro\",\n \"financial.onboarding.description\": \"Vamos configurar seu módulo financeiro. Este assistente rápido ajudará a configurar o essencial.\",\n \"financial.onboarding.accounts.title\": \"Contas Bancárias\",\n \"financial.onboarding.accounts.description\": \"Adicione suas contas bancárias, caixas registradoras e cartões de crédito. Você pode adicionar mais depois em Configurações.\",\n \"financial.onboarding.payments.title\": \"Métodos de Pagamento\",\n \"financial.onboarding.payments.description\": \"Revise os tipos de pagamento que você aceita. Os tipos padrão (Dinheiro, PIX, Cartão de Crédito, etc.) já estão configurados.\",\n \"financial.onboarding.chart.title\": \"Plano de Contas\",\n \"financial.onboarding.chart.description\": \"Um modelo padrão de plano de contas foi criado. Você pode personalizá-lo a qualquer momento em Configurações.\",\n \"financial.page.newPayable\": \"Nova Conta a Pagar\",\n \"financial.page.newPayableDesc\": \"Registrar uma despesa ou conta a pagar\",\n \"financial.page.newReceivable\": \"Nova Conta a Receber\",\n \"financial.page.newReceivableDesc\": \"Registrar receita ou valor a receber\",\n \"financial.page.openCash\": \"Abrir Caixa\",\n \"financial.page.openCashDesc\": \"Iniciar uma nova sessão de caixa\",\n \"financial.page.settingsSubtitle\": \"Preferências, métodos de pagamento e contas\",\n \"financial.page.settingsTitle\": \"Configurações Financeiras\",\n \"financial.payment.amount\": \"Valor\",\n \"financial.payment.bankAccount\": \"Conta Bancária\",\n \"financial.payment.cancel\": \"Cancelar\",\n \"financial.payment.card\": \"Cartão\",\n \"financial.payment.cardBrand\": \"Bandeira do Cartão\",\n \"financial.payment.cardInstallments\": \"Parcelas\",\n \"financial.payment.date\": \"Data\",\n \"financial.payment.installment\": \"Parcela #{{number}}\",\n \"financial.payment.method\": \"Método de Pagamento\",\n \"financial.payment.notes\": \"Observações\",\n \"financial.payment.optionalNotes\": \"Observações opcionais...\",\n \"financial.payment.payAmount\": \"Pagar {{amount}}\",\n \"financial.payment.processing\": \"Processando...\",\n \"financial.payment.remaining\": \"{{amount}} restante\",\n \"financial.payment.select\": \"Selecionar...\",\n \"financial.payment.selectAccount\": \"Selecionar conta...\",\n \"financial.payment.selectBrand\": \"Selecionar bandeira...\",\n \"financial.payment.title\": \"Registrar Pagamento\",\n \"financial.settings.allowPartial\": \"Permitir pagamentos parciais\",\n \"financial.settings.allowPartialDesc\": \"Aceitar pagamentos menores que o valor total da parcela\",\n \"financial.settings.autoClose\": \"Fechamento automático no fim do dia\",\n \"financial.settings.autoCloseDesc\": \"Lembrar de fechar sessões abertas no fim do expediente\",\n \"financial.settings.autoInstallments\": \"Gerar parcelas automaticamente\",\n \"financial.settings.autoInstallmentsDesc\": \"Dividir automaticamente o total da fatura em parcelas iguais\",\n \"financial.settings.cashRegister\": \"Caixa Registradora\",\n \"financial.settings.cashRegisterDesc\": \"Comportamento da sessão de caixa\",\n \"financial.settings.dailySummary\": \"Resumo financeiro diário\",\n \"financial.settings.dailySummaryDesc\": \"Enviar um resumo diário por e-mail de contas a receber e a pagar\",\n \"financial.settings.invoices\": \"Faturas\",\n \"financial.settings.invoicesDesc\": \"Como faturas e pagamentos são processados\",\n \"financial.settings.notifications\": \"Notificações\",\n \"financial.settings.notificationsDesc\": \"Alertas e lembretes\",\n \"financial.settings.overdueAlerts\": \"Alertas de pagamento atrasado\",\n \"financial.settings.overdueAlertsDesc\": \"Notificar quando faturas passarem da data de vencimento\",\n \"financial.settings.requireDoc\": \"Exigir número do documento\",\n \"financial.settings.requireDocDesc\": \"Tornar obrigatório o número do documento/fatura nos pagamentos\",\n \"financial.settings.requireOpening\": \"Exigir saldo de abertura\",\n \"financial.settings.requireOpeningDesc\": \"O saldo de abertura deve ser confirmado antes de iniciar uma sessão\",\n \"financial.settingsPage.subtitle\": \"Gerenciar métodos de pagamento, contas e configurações\",\n \"financial.settingsPage.title\": \"Configurações Financeiras\",\n \"financial.payment.noMethods\": \"Nenhuma forma de pagamento configurada.\",\n \"financial.payment.configureMethods\": \"Configurar formas de pagamento\",\n \"financial.payment.noAccounts\": \"Nenhuma conta compatível. Crie uma nas Configurações.\",\n \"financial.payment.configureAccounts\": \"Configurar contas\",\n \"financial.statements.account\": \"Conta\",\n \"financial.statements.from\": \"De\",\n \"financial.statements.noTransactions\": \"Sem transações neste período\",\n \"financial.statements.selectAccount\": \"Selecione uma conta para ver o extrato\",\n \"financial.statements.selectToView\": \"Selecione uma conta para ver o extrato\",\n \"financial.statements.subtitle\": \"Transações e saldos de contas bancárias\",\n \"financial.statements.title\": \"Extratos\",\n \"financial.statements.to\": \"Até\",\n \"financial.summary.allAccounts\": \"Todas as contas\",\n \"financial.summary.cashFlow\": \"Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdown\": \"Detalhamento do Fluxo de Caixa\",\n \"financial.summary.cashFlowBreakdownSubtitle\": \"Contas a receber vs. contas a pagar neste mês\",\n \"financial.summary.cashFlowSubtitle\": \"Receitas vs despesas mensais\",\n \"financial.summary.expenses\": \"Despesas\",\n \"financial.summary.income\": \"Receita\",\n \"financial.summary.monthlyFlow\": \"Fluxo Mensal\",\n \"financial.summary.negativeBalance\": \"Saldo negativo\",\n \"financial.summary.net\": \"Líquido\",\n \"financial.summary.noOverdue\": \"Nenhuma transação atrasada\",\n \"financial.summary.noTransactions\": \"Nenhuma transação ainda\",\n \"financial.summary.overdue\": \"{{count}} atrasados\",\n \"financial.summary.overduePayable\": \"Conta a pagar atrasada\",\n \"financial.summary.overdueReceivable\": \"Conta a receber atrasada\",\n \"financial.summary.overdueTitle\": \"Atrasados\",\n \"financial.summary.paid\": \"Pago\",\n \"financial.summary.payable\": \"A Pagar\",\n \"financial.summary.positiveBalance\": \"Saldo positivo\",\n \"financial.summary.receivable\": \"A Receber\",\n \"financial.summary.received\": \"Recebido\",\n \"financial.summary.recentTransactions\": \"Transações Recentes\",\n \"financial.summary.totalBalance\": \"Saldo Total\",\n \"financial.summary.transactionsAppear\": \"As transações aparecerão aqui após serem registradas\",\n \"financial.summary.viewAll\": \"Ver todos\",\n \"financial.quickActions.newPayable\": \"Nova Conta a Pagar\",\n \"financial.quickActions.newPayableDesc\": \"Registrar uma despesa ou conta a pagar\",\n \"financial.quickActions.newReceivable\": \"Nova Conta a Receber\",\n \"financial.quickActions.newReceivableDesc\": \"Registrar receita ou valor a receber\",\n \"financial.quickActions.openCashRegister\": \"Abrir Caixa\",\n \"financial.quickActions.openCashRegisterDesc\": \"Iniciar uma nova sessão de caixa\",\n \"financial.cash.title\": \"Caixa Registradora\",\n \"financial.cash.subtitle\": \"Abrir, contar e fechar sessões de caixa\",\n \"financial.cash.bills\": \"Notas\",\n \"financial.cash.coins\": \"Moedas\",\n \"financial.cash.noAccounts\": \"Nenhuma conta de caixa encontrada. Crie uma conta bancária do tipo \\\"Caixa Registradora\\\" primeiro.\",\n \"financial.cash.confirmOpening\": \"Confirmar Abertura de Caixa\",\n \"financial.cash.register\": \"Caixa\",\n \"financial.cash.openingBalance\": \"Saldo de Abertura\",\n \"financial.cash.method\": \"Método\",\n \"financial.cash.denominationCount\": \"Contagem de cédulas\",\n \"financial.cash.notes\": \"Observações\",\n \"financial.cash.opening\": \"Abrindo...\",\n \"financial.cash.confirmAndOpen\": \"Confirmar e Abrir\",\n \"financial.cash.quickAmount\": \"Valor Rápido\",\n \"financial.cash.countBillsCoins\": \"Contar Cédulas e Moedas\",\n \"financial.cash.count\": \"Contar\",\n \"financial.cash.countedTotal\": \"Total Contado\",\n \"financial.cash.addNotes\": \"Adicionar observações\",\n \"financial.cash.openingObservations\": \"Observações de abertura...\",\n \"financial.cash.openSession\": \"Abrir Sessão\",\n \"financial.cash.closingBalance\": \"Saldo de Fechamento\",\n \"financial.cash.differenceFromOpening\": \"Diferença da abertura\",\n \"financial.cash.closingNotes\": \"Observações de Fechamento\",\n \"financial.cash.closingObservations\": \"Observações de fechamento...\",\n \"financial.cash.closing\": \"Fechando...\",\n \"financial.cash.closeSession\": \"Fechar Sessão\",\n \"financial.cash.openSessions\": \"Sessões Abertas\",\n \"financial.cash.opened\": \"Aberto\",\n \"financial.cash.by\": \"por\",\n \"financial.cash.closeThisSession\": \"Fechar esta sessão\",\n \"financial.cash.sessionHistory\": \"Histórico de Sessões\",\n \"financial.cash.noClosedSessions\": \"Nenhuma sessão fechada ainda\",\n \"financial.cash.openLabel\": \"Abertura\",\n \"financial.cash.closeLabel\": \"Fechamento\",\n \"financial.cash.diff\": \"Dif\",\n \"financial.cash.openAnother\": \"Abrir outro caixa\",\n \"financial.invoice.statusOpen\": \"Aberto\",\n \"financial.invoice.statusPartial\": \"Parcial\",\n \"financial.invoice.statusPaid\": \"Pago\",\n \"financial.invoice.statusOverdue\": \"Vencido\",\n \"financial.invoice.statusCancelled\": \"Cancelado\",\n \"financial.invoice.statusPending\": \"Pendente\",\n \"financial.invoice.statusDraft\": \"Rascunho\",\n \"financial.invoice.columnDate\": \"Data\",\n \"financial.invoice.columnDescription\": \"Descrição\",\n \"financial.invoice.columnAmount\": \"Valor\",\n \"financial.invoice.columnPaid\": \"Pago\",\n \"financial.invoice.columnStatus\": \"Status\",\n \"financial.invoice.columnInst\": \"Parc.\",\n \"financial.invoice.columnQty\": \"Qtd\",\n \"financial.invoice.columnUnitPrice\": \"Preço Unit.\",\n \"financial.invoice.columnTotal\": \"Total\",\n \"financial.invoice.columnNumber\": \"#\",\n \"financial.invoice.invoice\": \"Fatura\",\n \"financial.invoice.loading\": \"Carregando...\",\n \"financial.invoiceForm.cancelInvoice\": \"Cancelar Fatura\",\n \"financial.invoiceForm.cancelConfirm\": \"Esta ação não pode ser desfeita.\",\n \"financial.invoiceForm.cancelDesc\": \"A fatura será marcada como cancelada. Todas as parcelas pendentes também serão canceladas.\",\n \"financial.invoiceForm.keepInvoice\": \"Manter Fatura\",\n \"financial.invoiceForm.yesCancel\": \"Sim, Cancelar\",\n \"financial.invoiceForm.cancelling\": \"Cancelando...\",\n \"financial.invoiceForm.removeAdjustments\": \"Remover ajustes\",\n \"financial.invoiceForm.discount\": \"Desconto\",\n \"financial.invoiceForm.surcharge\": \"Acréscimo\",\n \"financial.invoiceForm.total\": \"Total:\",\n \"financial.invoiceForm.itemCount\": \"{{count}} item{{plural}}\",\n \"financial.payment.account\": \"Conta\",\n \"financial.payment.due\": \"Venc.:\",\n \"financial.payment.paidAmount\": \"Pago:\",\n \"financial.payment.paidOn\": \"Pago em:\",\n \"financial.title\": \"Financeiro\",\n \"financial.summary.title\": \"Resumo Financeiro\",\n \"financial.summary.revenue\": \"Receita\",\n \"financial.invoice.title\": \"Faturas\",\n \"financial.invoice.create\": \"Nova Fatura\",\n \"financial.invoice.number\": \"Fatura #\",\n \"financial.invoice.client\": \"Cliente\",\n \"financial.invoice.amount\": \"Valor\",\n \"financial.invoice.status\": \"Status\",\n \"financial.invoice.dueDate\": \"Vencimento\",\n \"financial.invoice.addItem\": \"Adicionar Item\",\n \"financial.invoice.tax\": \"Imposto\",\n \"financial.invoice.save\": \"Salvar Fatura\",\n \"financial.invoice.saving\": \"Salvando...\",\n \"financial.invoice.markPaid\": \"Marcar como Pago\",\n \"financial.invoice.sendReminder\": \"Enviar Lembrete\",\n \"financial.receivable.title\": \"Contas a Receber\",\n \"financial.payable.title\": \"Contas a Pagar\",\n \"financial.statements.loading\": \"Carregando...\",\n \"financial.cards.empty\": \"Nenhuma transação de cartão ainda\",\n \"financial.commissions.title\": \"Comissões\",\n \"financial.cashRegister.title\": \"Caixa\",\n \"financial.cashRegister.open\": \"Abrir Caixa\",\n \"financial.cashRegister.close\": \"Fechar Caixa\",\n \"financial.movements.title\": \"Movimentações\",\n \"financial.bankAccounts.title\": \"Contas Bancárias\",\n \"financial.settings.title\": \"Configurações Financeiras\",\n // Abas de registros nas configurações\n \"registry.payment-methods\": \"Formas de Pagamento\",\n \"registry.payment-methods.description\": \"Formas de pagamento configuradas com taxas e regras de parcelamento\",\n \"registry.bank-accounts\": \"Contas\",\n \"registry.bank-accounts.description\": \"Contas bancárias, caixas, cartões de crédito e carteiras digitais\",\n \"registry.chart-of-accounts\": \"Plano de Contas\",\n \"registry.chart-of-accounts.description\": \"Plano de contas hierárquico para categorizar transações\",\n \"registry.cost-centers\": \"Centros de Custo\",\n \"registry.cost-centers.description\": \"Centros de custo para controle de despesas e orçamentos por departamento\",\n \"registry.commission-rules\": \"Regras de Comissão\",\n \"registry.commission-rules.description\": \"Regras de comissão para serviços e produtos\",\n \"registry.price-tables\": \"Tabelas de Preço\",\n \"registry.price-tables.description\": \"Tabelas de preço de venda e custo\",\n \"registry.price-variations\": \"Variações de Preço\",\n \"registry.price-variations.description\": \"Regras de desconto e acréscimo de preços\",\n \"registry.payment-method-types\": \"Tipos de Pagamento\",\n \"registry.payment-method-types.description\": \"Tipos de pagamento do sistema (dinheiro, cartão, PIX, etc.)\",\n \"registry.card-brands\": \"Bandeiras de Cartão\",\n \"registry.card-brands.description\": \"Bandeiras de cartão de crédito e débito\",\n // Extrato\n \"financial.statements.columnDate\": \"Data\",\n \"financial.statements.columnDescription\": \"Descrição\",\n \"financial.statements.columnDebit\": \"Débito\",\n \"financial.statements.columnCredit\": \"Crédito\",\n \"financial.statements.columnFee\": \"Taxa\",\n \"financial.statements.columnBalance\": \"Saldo\",\n \"financial.statements.columnMethod\": \"Forma\",\n \"financial.statements.columnDoc\": \"Documento\",\n \"financial.statements.installmentShort\": \"Parc. {{n}}\",\n \"financial.statements.viewInvoice\": \"Ver fatura\",\n \"financial.person.empty\": \"Nenhuma atividade financeira para este contato ainda\",\n \"financial.statements.opening\": \"Saldo inicial\",\n \"financial.statements.closing\": \"Saldo final\",\n \"financial.statements.currentBalance\": \"Saldo atual\",\n \"financial.statements.totalCredits\": \"Créditos\",\n \"financial.statements.totalDebits\": \"Débitos\",\n \"financial.statements.totalFees\": \"Taxas\",\n \"financial.statements.net\": \"Líquido\",\n \"financial.statements.transfer\": \"Transferência\",\n \"financial.statements.reconciled\": \"Conciliado com o extrato bancário\",\n \"financial.statements.imported\": \"Importado do banco · não conciliado\",\n \"financial.statements.reconciledWith\": \"Conciliado com {{ref}}\",\n \"financial.statements.newTransfer\": \"Nova Transferência\",\n // Diálogo de transferência\n \"financial.transfer.title\": \"Transferência entre Contas\",\n \"financial.transfer.from\": \"Conta de origem\",\n \"financial.transfer.to\": \"Conta de destino\",\n \"financial.transfer.amount\": \"Valor\",\n \"financial.transfer.date\": \"Data\",\n \"financial.transfer.notes\": \"Observações\",\n \"financial.transfer.optionalNotes\": \"Observações opcionais...\",\n \"financial.transfer.selectAccount\": \"Selecione a conta...\",\n \"financial.transfer.submit\": \"Transferir\",\n \"financial.transfer.processing\": \"Transferindo...\",\n \"financial.transfer.cancel\": \"Cancelar\",\n \"financial.transfer.created\": \"Transferência registrada\",\n \"financial.transfer.failed\": \"Falha ao registrar transferência\",\n \"financial.transfer.sameAccount\": \"Origem e destino devem ser diferentes\",\n \"financial.transfer.invalidAmount\": \"O valor deve ser maior que zero\",\n}\n","import { en } from './en'\nimport { ptBR } from './pt-BR'\n\nexport const financialLocales: Record<string, Record<string, string>> = {\n en,\n 'pt-BR': ptBR,\n}\n","import React, { useEffect, useMemo, useState } from 'react'\nimport { Wallet } from 'lucide-react'\nimport type { ColumnDef } from '@tanstack/react-table'\nimport { DataTable } from '@fayz-ai/ui'\nimport { useTranslation } from '@fayz-ai/core'\nimport { formatCurrency, type ResolvedFinancialConfig } from '../FinancialContext'\nimport type { FinancialDataProvider } from '../data/types'\nimport type { Invoice } from '../types'\n\nconst STATUS_STYLE: Record<string, string> = {\n paid: 'bg-success/15 text-success',\n partial: 'bg-warning/15 text-warning',\n overdue: 'bg-destructive/15 text-destructive',\n open: 'bg-muted text-muted-foreground',\n cancelled: 'bg-muted text-muted-foreground line-through',\n}\n\n/**\n * Per-person financial statement (account_central-style extract): every invoice where\n * this person is the contact — a client paying receivables, or a professional receiving\n * commissions/payables. Rendered as a tab on the person detail page via the\n * `person.detail.financial` widget zone.\n */\nexport function PersonStatementWidget({ person, provider, config }: {\n person: { id?: string; name?: string }\n provider: FinancialDataProvider\n config: ResolvedFinancialConfig\n}) {\n const t = useTranslation()\n const currency = config.currency\n const [invoices, setInvoices] = useState<Invoice[]>([])\n const [loading, setLoading] = useState(true)\n\n useEffect(() => {\n let alive = true\n if (!person?.id) { setLoading(false); return }\n setLoading(true)\n provider.getInvoices({ contactId: person.id, pageSize: 200 })\n .then((r) => { if (alive) { setInvoices(r.data); setLoading(false) } })\n .catch(() => { if (alive) setLoading(false) })\n return () => { alive = false }\n }, [person?.id, provider])\n\n const fmt = (n: number) => formatCurrency(n, currency)\n\n const totals = useMemo(() => {\n const active = invoices.filter((i) => i.status !== 'cancelled')\n const billed = active.reduce((s, i) => s + (i.totalAmount ?? 0), 0)\n const paid = active.reduce((s, i) => s + (i.paidAmount ?? 0), 0)\n return { billed, paid, balance: billed - paid }\n }, [invoices])\n\n const openInvoice = (inv: Invoice) => {\n const base = inv.direction === 'credit' ? 'receivables' : 'payables'\n window.location.hash = `/financial/${base}/detail/${inv.id}`\n }\n\n const columns: ColumnDef<Invoice, any>[] = useMemo(() => [\n {\n id: 'date', header: t('financial.invoice.columnDate'),\n cell: ({ row }) => <span className=\"text-muted-foreground text-xs\">{row.original.invoiceDate}</span>,\n },\n {\n id: 'description', header: t('financial.invoice.columnDescription'),\n cell: ({ row }) => {\n const inv = row.original\n return (\n <button onClick={() => openInvoice(inv)} className=\"text-left\">\n <span className=\"text-xs font-medium text-primary hover:underline\">\n {inv.itemsSummary || inv.contactName || t('financial.invoice.invoice')}\n </span>\n {inv.fiscalNumber && <span className=\"ml-1.5 text-[10px] text-muted-foreground font-mono\">{inv.fiscalNumber}</span>}\n </button>\n )\n },\n },\n {\n id: 'amount', header: t('financial.invoice.columnAmount'),\n cell: ({ row }) => (\n <span className={`text-right block text-xs ${row.original.direction === 'credit' ? 'text-success' : 'text-destructive'}`}>\n {fmt(row.original.totalAmount)}\n </span>\n ),\n },\n {\n id: 'paid', header: t('financial.invoice.columnPaid'),\n cell: ({ row }) => <span className=\"text-right block text-xs text-muted-foreground\">{fmt(row.original.paidAmount)}</span>,\n },\n {\n id: 'balance', header: t('financial.statements.columnBalance'),\n cell: ({ row }) => <span className=\"text-right block text-xs font-medium\">{fmt((row.original.totalAmount ?? 0) - (row.original.paidAmount ?? 0))}</span>,\n },\n {\n id: 'status', header: t('financial.invoice.columnStatus'),\n cell: ({ row }) => (\n <span className={`inline-flex rounded-full px-1.5 py-0.5 text-[9px] font-medium capitalize ${STATUS_STYLE[row.original.status] ?? STATUS_STYLE.open}`}>\n {row.original.status}\n </span>\n ),\n },\n ], [currency, t])\n\n return (\n <div className=\"space-y-3\">\n {/* Totals */}\n <div className=\"grid grid-cols-3 gap-2\">\n <Stat label={t('financial.invoice.summaryTotal')} value={fmt(totals.billed)} />\n <Stat label={t('financial.invoice.summaryPaid')} value={fmt(totals.paid)} positive />\n <Stat label={t('financial.statements.columnBalance')} value={fmt(totals.balance)} accent />\n </div>\n\n {loading ? (\n <DataTable columns={columns} data={[]} loading skeletonRows={5} compact />\n ) : invoices.length === 0 ? (\n <div className=\"flex flex-col items-center justify-center py-10 text-center rounded-lg border-2 border-dashed border-muted\">\n <Wallet className=\"h-7 w-7 text-muted-foreground mb-2\" />\n <p className=\"text-sm text-muted-foreground\">{t('financial.person.empty')}</p>\n </div>\n ) : (\n <DataTable columns={columns} data={invoices} compact />\n )}\n </div>\n )\n}\n\nfunction Stat({ label, value, accent, positive }: { label: string; value: string; accent?: boolean; positive?: boolean }) {\n return (\n <div className={`rounded-lg border px-3 py-2 ${accent ? 'bg-muted/40' : 'bg-card'}`}>\n <p className=\"text-[10px] font-medium text-muted-foreground uppercase truncate\">{label}</p>\n <p className={`text-sm font-semibold mt-0.5 ${positive ? 'text-success' : 'text-foreground'}`}>{value}</p>\n </div>\n )\n}\n","import React from 'react'\nimport type { PluginManifest, PluginScope, VerticalId } from '@fayz-ai/core'\nimport type { EntityLookupMap } from '@fayz-ai/saas'\nimport { FinancialPage } from './FinancialPage'\nimport { createFinancialDashboardWidgets } from './views/dashboardWidgets'\nimport type { ResolvedFinancialConfig } from './FinancialContext'\nimport type { FinancialDataProvider } from './data/types'\nimport { createMockFinancialProvider } from './data/mock'\nimport { createSupabaseFinancialProvider } from './data/supabase'\nimport { createSafeDataProvider, registerTranslations } from '@fayz-ai/core'\nimport { createFinancialStore } from './store'\n\n/**\n * Public: a lazy supabase-or-mock financial provider. Apps use this to share one\n * provider between the plugin and a cross-plugin bridge (e.g. agenda's financial\n * bridge in beauty-saas). Thin wrapper over the shared createSafeDataProvider.\n */\nexport function createSafeFinancialProvider(): FinancialDataProvider {\n return createSafeDataProvider(\n () => createSupabaseFinancialProvider(),\n () => createMockFinancialProvider(),\n )\n}\nimport { financialRegistries } from './registries'\nimport { financialLocales } from './locales'\nimport { FinancialGeneralSettings } from './components/FinancialGeneralSettings'\nimport { PersonStatementWidget } from './components/PersonStatementWidget'\nimport { PluginSettingsPanel } from '@fayz-ai/saas'\n\n// ---------------------------------------------------------------------------\n// Public types\n// ---------------------------------------------------------------------------\n\nexport interface FinancialPluginLabels {\n pageTitle: string\n pageSubtitle: string\n summary: string\n payables: string\n payablesNew: string\n payablesList: string\n payablesRecurring: string\n receivables: string\n receivablesNew: string\n receivablesList: string\n cashRegisters: string\n statements: string\n commissions: string\n commissionsOverview: string\n commissionsRules: string\n cards: string\n cardsOverview: string\n cardsReconciliation: string\n}\n\nexport interface ItemTypeOption {\n value: string\n label: string\n icon?: string\n}\n\nexport interface FinancialPluginOptions {\n modules?: {\n payables?: boolean\n receivables?: boolean\n cashRegisters?: boolean\n statements?: boolean\n commissions?: boolean\n cards?: boolean\n /** Bank reconciliation (conciliação). Defaults off — enable with a bank connector. */\n reconciliation?: boolean\n }\n labels?: Partial<FinancialPluginLabels>\n currency?: {\n code?: string\n locale?: string\n symbol?: string\n }\n navPosition?: number\n navSection?: 'main' | 'secondary'\n scope?: PluginScope\n verticalId?: VerticalId\n\n /** Data provider. Defaults to mock (in-memory) if not supplied. */\n dataProvider?: FinancialDataProvider\n\n /** Available item types for invoice lines. Default: product + service + other */\n itemTypes?: ItemTypeOption[]\n\n /** Enable service execution tracking on invoice items (default: false) */\n enableServiceExecution?: boolean\n\n /** Contact entity config — which person kind to use */\n contactEntity?: { archetypeKind: string; label?: string }\n\n /** Seed payment method types for mock provider */\n paymentMethodTypes?: Array<{ name: string; transactionType?: string }>\n\n /** Business units / locations. Unit selector only shows when 2+ locations are provided. */\n locations?: Array<{ id: string; name: string; isHQ?: boolean }>\n\n /**\n * Entity lookups for cross-plugin references.\n * Keys match `itemTypes` values (e.g., 'product', 'service').\n * When a lookup is provided, item forms show a search selector for that type.\n * When absent, users type descriptions manually.\n */\n entityLookups?: EntityLookupMap\n\n /** Contact/person lookup for \"Pay to\" / \"Receive from\" fields. Queries persons archetype. */\n contactLookup?: import('@fayz-ai/saas').EntityLookup\n\n /** Callback when user clicks a booking link on an invoice. Receives the order ID. */\n onBookingClick?: (orderId: string) => void\n}\n\n// ---------------------------------------------------------------------------\n// Defaults\n// ---------------------------------------------------------------------------\n\nconst DEFAULT_LABELS: FinancialPluginLabels = {\n pageTitle: 'Financial',\n pageSubtitle: 'Financial overview and cash flow management',\n summary: 'Summary',\n payables: 'Accounts Payable',\n payablesNew: 'New',\n payablesList: 'List',\n payablesRecurring: 'Recurring Expenses',\n receivables: 'Accounts Receivable',\n receivablesNew: 'New',\n receivablesList: 'List',\n cashRegisters: 'Cash Registers',\n statements: 'Statements',\n commissions: 'Commissions',\n commissionsOverview: 'Overview',\n commissionsRules: 'Rules',\n cards: 'Cards',\n cardsOverview: 'Overview',\n cardsReconciliation: 'Reconciliation',\n}\n\nconst DEFAULT_CURRENCY = { code: 'BRL', locale: 'pt-BR', symbol: 'R$' }\n\nconst DEFAULT_ITEM_TYPES: ItemTypeOption[] = [\n { value: 'service', label: 'Service', icon: 'Briefcase' },\n { value: 'product', label: 'Product', icon: 'Package' },\n { value: 'other', label: 'Other', icon: 'MoreHorizontal' },\n]\n\n// ---------------------------------------------------------------------------\n// Config resolver\n// ---------------------------------------------------------------------------\n\nfunction resolveConfig(options?: FinancialPluginOptions): ResolvedFinancialConfig {\n return {\n modules: {\n payables: options?.modules?.payables !== false,\n receivables: options?.modules?.receivables !== false,\n cashRegisters: options?.modules?.cashRegisters !== false,\n statements: options?.modules?.statements !== false,\n commissions: options?.modules?.commissions !== false,\n cards: options?.modules?.cards !== false,\n // Opt-in: only shown when an app explicitly enables reconciliation (bank connector present).\n reconciliation: options?.modules?.reconciliation === true,\n },\n labels: { ...DEFAULT_LABELS, ...options?.labels },\n currency: { ...DEFAULT_CURRENCY, ...options?.currency },\n itemTypes: options?.itemTypes ?? DEFAULT_ITEM_TYPES,\n enableServiceExecution: options?.enableServiceExecution ?? false,\n contactEntity: {\n archetypeKind: options?.contactEntity?.archetypeKind ?? 'client',\n label: options?.contactEntity?.label ?? 'Contact',\n },\n locations: options?.locations ?? [],\n entityLookups: options?.entityLookups ?? {},\n contactLookup: options?.contactLookup,\n onBookingClick: options?.onBookingClick,\n }\n}\n\n// ---------------------------------------------------------------------------\n// Factory\n// ---------------------------------------------------------------------------\n\nexport function createFinancialPlugin(options?: FinancialPluginOptions): PluginManifest {\n const config = resolveConfig(options)\n registerTranslations(financialLocales)\n\n const provider = options?.dataProvider ?? createSafeFinancialProvider()\n const store = createFinancialStore(provider)\n const dashboardWidgets = createFinancialDashboardWidgets({ config, provider, store })\n\n // Per-person statement tab (account_central-style): bound to this plugin's provider.\n const PersonStatementBound: React.FC<any> = (props) =>\n React.createElement(PersonStatementWidget, { person: props.item, provider, config })\n PersonStatementBound.displayName = 'FinancialPersonStatement'\n\n const PageComponent: React.FC<any> = () =>\n React.createElement(FinancialPage, { config, provider, store, registries: financialRegistries })\n\n return {\n id: 'financial',\n name: config.labels.pageTitle,\n icon: 'DollarSign',\n version: '1.0.0',\n scope: options?.scope ?? 'universal',\n verticalId: options?.verticalId,\n defaultEnabled: true,\n dependencies: [],\n declaredFeatures: [\n { id: 'financial', label: config.labels.pageTitle, group: config.labels.pageTitle },\n ...(config.modules.receivables ? [{ id: 'financial.receivables', label: config.labels.receivables, group: config.labels.pageTitle }] : []),\n ...(config.modules.payables ? [{ id: 'financial.payables', label: config.labels.payables, group: config.labels.pageTitle }] : []),\n ...(config.modules.commissions ? [{ id: 'financial.commissions', label: config.labels.commissions, group: config.labels.pageTitle }] : []),\n ],\n navigation: [\n {\n section: options?.navSection ?? 'main',\n position: options?.navPosition ?? 6,\n label: config.labels.pageTitle,\n route: '/financial',\n icon: 'DollarSign',\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n routes: [\n {\n path: '/financial',\n component: PageComponent,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n widgets: [\n {\n id: 'financial-person-statement',\n zone: 'person.detail.financial',\n component: PersonStatementBound as unknown as React.ComponentType<unknown>,\n order: 0,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n dashboardWidgets,\n aiTools: [\n {\n id: 'financial.get-revenue',\n name: 'getRevenue',\n description: 'Returns revenue for the business in a given period.',\n icon: 'DollarSign',\n mode: 'read' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n period: { type: 'string' as const, description: 'today, week, month, or custom date range' },\n },\n },\n suggestions: [\n { label: 'How much did we make today?' },\n { label: \"What's this month's revenue?\" },\n { label: \"Compare this week's revenue to last week\" },\n ],\n },\n {\n id: 'financial.create-invoice',\n name: 'createInvoice',\n description: 'Creates a new invoice/payable for a contact.',\n icon: 'FileText',\n mode: 'persist' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n contact: { type: 'string' as const, description: 'Contact/customer name' },\n amount: { type: 'number' as const, description: 'Invoice amount' },\n description: { type: 'string' as const, description: 'Invoice description' },\n },\n required: ['contact', 'amount'],\n },\n suggestions: [\n { label: 'Create an invoice for a new client' },\n ],\n permission: { feature: 'financial', action: 'create' as const },\n },\n {\n id: 'financial.list-payables',\n name: 'listPayables',\n description: 'Lists outstanding payables/bills.',\n icon: 'FileDown',\n mode: 'read' as const,\n category: 'Finance',\n parameters: {\n type: 'object' as const,\n properties: {\n status: { type: 'string' as const, enum: ['pending', 'overdue', 'paid'] },\n contact: { type: 'string' as const, description: 'Filter by contact name' },\n },\n },\n permission: { feature: 'financial', action: 'read' as const },\n suggestions: [\n { label: 'Show me overdue bills' },\n { label: 'What bills are due this week?' },\n ],\n },\n ],\n registries: financialRegistries,\n settings: [\n {\n id: 'financial',\n label: 'Financial',\n icon: 'DollarSign',\n component: (() => {\n const FinancialSettingsTab: React.FC = () =>\n React.createElement(PluginSettingsPanel, {\n title: 'Financial Settings',\n subtitle: 'Payment methods, accounts, and configurations',\n generalSettings: React.createElement(FinancialGeneralSettings),\n registries: financialRegistries,\n hostPluginId: 'financial',\n routeBase: '/settings/financial',\n })\n FinancialSettingsTab.displayName = 'FinancialSettingsTab'\n return FinancialSettingsTab as unknown as React.ComponentType<unknown>\n })(),\n order: 10,\n permission: { feature: 'financial', action: 'read' as const },\n },\n ],\n locales: financialLocales,\n }\n}\n\n// Re-export types and factories for consumers\nexport type { FinancialDataProvider } from './data/types'\nexport type { ResolvedFinancialConfig } from './FinancialContext'\n"]}