@gravity-rail/cli 0.2.0 → 0.4.0

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/errors.ts","../src/lib/pagination.ts","../src/lib/args.ts","../../client/src/index.ts","../../client/src/api/admin.ts","../../client/src/client/client.ts","../../client/src/client/bindings/admin.ts","../src/lib/context.ts","../src/lib/output.ts","../src/lib/realm.ts","../src/lib/input.ts","../src/lib/crud.ts","../src/lib/registry.ts","../src/lib/types.ts","../src/domains/agent-tasks.ts","../src/domains/agents.ts","../src/domains/chats.ts","../src/domains/members.ts","../src/domains/tasks.ts","../src/domains/workflows.ts","../src/domains/workflow-versions.ts","../src/domains/workspaces.ts","../src/domains/assignments.ts","../src/domains/calendars.ts","../src/domains/data-types.ts","../src/domains/events.ts","../src/domains/files.ts","../src/domains/journeys.ts","../src/domains/personas.ts","../src/domains/qualifications.ts","../src/domains/sites.ts","../src/domains/access-grants.ts","../src/domains/ai-models.ts","../src/domains/api-keys.ts","../src/domains/apps.ts","../src/domains/auth-manage.ts","../src/domains/billing-portal.ts","../src/lib/concierge-api.ts","../src/domains/concierge.ts","../src/domains/custom-toolkits.ts","../src/domains/features.ts","../src/domains/inboxes.ts","../src/domains/mcp-servers.ts","../src/domains/member-memories.ts","../src/domains/milestones.ts","../src/domains/notification-rules.ts","../src/domains/oauth.ts","../src/domains/operator-groups.ts","../src/domains/org.ts","../src/domains/org-phone-numbers.ts","../src/domains/phone-numbers.ts","../src/domains/pronunciations.ts","../src/domains/reports.ts","../src/domains/subscriptions.ts","../src/domains/prompts.ts","../src/domains/supervisors.ts","../src/domains/sync.ts","../src/domains/integrations/app-connections.ts","../src/domains/integrations/confluence.ts","../src/domains/integrations/discord-bots.ts","../src/domains/integrations/fhir-connections.ts","../src/domains/integrations/hubspot.ts","../src/domains/integrations/monday.ts","../src/domains/integrations/salesforce.ts","../src/domains/integrations/slack-apps.ts","../src/domains/index.ts","../src/commands/auth-browser.ts","../src/lib/chat-session.ts","../src/lib/realtime-client.ts","../src/lib/chat-tui.ts","../src/lib/audio.ts","../src/commands/concierge.ts","../src/commands/dev.ts","../src/commands/login.ts","../src/commands/manage.ts","../src/commands/organizations.ts","../src/commands/whoami.ts"],"sourcesContent":["export class CLIError extends Error {\n constructor(\n message: string,\n public exitCode: number = 1\n ) {\n super(message);\n this.name = 'CLIError';\n }\n}\n\nexport class AuthRequiredError extends CLIError {\n constructor(message = 'Not authenticated. Run `gr login` or set GRAVITY_RAIL_API_KEY.') {\n super(message, 2);\n this.name = 'AuthRequiredError';\n }\n}\n\nexport function handleError(err: unknown): never {\n if (err instanceof CLIError) {\n process.stderr.write(`Error: ${err.message}\\n`);\n process.exit(err.exitCode);\n }\n\n if (err instanceof Error) {\n process.stderr.write(`Error: ${err.message}\\n`);\n if ('errors' in err && Array.isArray((err as any).errors)) {\n for (const e of (err as any).errors) {\n process.stderr.write(` - ${e}\\n`);\n }\n }\n if ('statusCode' in err && (err as any).statusCode === 401) {\n process.stderr.write(`\\nHint: Run \"yarn gr login\" or use \"--realm <name>\" (dev only)\\n`);\n }\n process.exit(1);\n }\n\n process.stderr.write(`Error: ${String(err)}\\n`);\n process.exit(1);\n}\n","import type { ArgDef, ParsedArgs } from './types';\nimport { CLIError } from './errors';\n\n// ── Response shape detection ─────────────────────────────────────────\n\n/** Metadata extracted from a paginated API response */\nexport interface PaginationMeta {\n /** Total number of items across all pages (page-based only) */\n total?: number;\n /** Current page number (page-based only) */\n page?: number;\n /** Total pages (page-based only) */\n totalPages?: number;\n /** Whether more pages exist (cursor-based only) */\n hasMore?: boolean;\n /** Cursor for next page (cursor-based only) */\n nextCursor?: string;\n}\n\n/** Explicit pagination contract passed from commands to outputData */\nexport interface ListResult {\n items: unknown[];\n meta?: PaginationMeta;\n supportsAll?: boolean;\n}\n\n/** Type guard: is the value a ListResult (explicit contract)? */\nexport function isListResult(data: unknown): data is ListResult {\n if (!data || typeof data !== 'object' || Array.isArray(data)) return false;\n const obj = data as Record<string, unknown>;\n return (\n Array.isArray(obj.items) &&\n ('supportsAll' in obj ||\n ('meta' in obj && (obj.meta === undefined || typeof obj.meta === 'object')))\n );\n}\n\n/** Check if a response looks like a page-based paginated envelope.\n * Matches both `{ items, total, totalPages, page }` (standard) and\n * `{ items, total, page, pageSize }` (legacy — e.g. InvitationListResponse,\n * InquiryListResponse). This is a pure type guard with no side effects;\n * totalPages computation for legacy shapes happens in extractPaginationMeta. */\nexport function isPagePaginatedResponse(data: unknown): data is {\n items: unknown[];\n total: number;\n page: number;\n totalPages?: number;\n pageSize?: number;\n} {\n if (!data || typeof data !== 'object') return false;\n const obj = data as Record<string, unknown>;\n if (!Array.isArray(obj.items) || typeof obj.page !== 'number') return false;\n\n // Standard shape: has totalPages\n if (typeof obj.totalPages === 'number') return true;\n\n // Legacy shape: has total + pageSize but no totalPages\n if (typeof obj.total === 'number' && typeof obj.pageSize === 'number') return true;\n\n return false;\n}\n\n/** Check if a response looks like a cursor-based paginated envelope */\nexport function isCursorPaginatedResponse(data: unknown): data is {\n items: unknown[];\n hasMore: boolean;\n nextCursor?: string;\n} {\n if (!data || typeof data !== 'object') return false;\n const obj = data as Record<string, unknown>;\n return Array.isArray(obj.items) && typeof obj.hasMore === 'boolean';\n}\n\n/** Check if a response is any paginated envelope ({ items: [...], ... }) */\nexport function isPaginatedResponse(data: unknown): boolean {\n return isPagePaginatedResponse(data) || isCursorPaginatedResponse(data);\n}\n\n/** Extract pagination metadata from a response, or return undefined for non-paginated responses.\n * For legacy shapes without totalPages, computes it from total/pageSize. */\nexport function extractPaginationMeta(data: unknown): PaginationMeta | undefined {\n if (isPagePaginatedResponse(data)) {\n const totalPages =\n data.totalPages ?? (data.pageSize ? Math.ceil(data.total / data.pageSize) : undefined);\n return {\n total: data.total,\n page: data.page,\n totalPages,\n };\n }\n if (isCursorPaginatedResponse(data)) {\n return {\n hasMore: data.hasMore,\n nextCursor: data.nextCursor,\n };\n }\n return undefined;\n}\n\n// ── Warning formatting ───────────────────────────────────────────────\n\n/** Format a pagination warning for stderr. Returns undefined if no warning needed.\n * When `supportsAll` is false, the \"Use --all\" hint is omitted because the\n * command does not actually expose the --all flag. */\nexport function formatPaginationWarning(\n meta: PaginationMeta | undefined,\n supportsAll: boolean = true\n): string | undefined {\n if (!meta) return undefined;\n\n const allHint = supportsAll ? ' Use --all to fetch all pages.' : '';\n\n // Page-based: warn when there are multiple pages\n if (meta.totalPages !== undefined && meta.totalPages > 1) {\n const pageNum = meta.page ?? 1;\n return `Showing page ${pageNum} of ${meta.totalPages} (${meta.total} total items).${allHint}`;\n }\n\n // Cursor-based: warn when more pages exist\n if (meta.hasMore === true) {\n return `More results available.${allHint}`;\n }\n\n return undefined;\n}\n\n// ── Unwrapping ───────────────────────────────────────────────────────\n\n/** Unwrap items from a paginated response or return the data as-is if it's an array */\nexport function unwrapItems(data: unknown): unknown[] {\n if (Array.isArray(data)) return data;\n if (\n data &&\n typeof data === 'object' &&\n 'items' in data &&\n Array.isArray((data as Record<string, unknown>).items)\n ) {\n return (data as Record<string, unknown>).items as unknown[];\n }\n return [data];\n}\n\n// ── Arg definitions ──────────────────────────────────────────────────\n\n/** Default pagination args for list commands (page, page-size, all). No search. */\nexport const LIST_PAGINATION_ARGS: ArgDef[] = [\n { name: 'page', description: 'Page number' },\n { name: 'page-size', description: 'Page size' },\n { name: 'all', description: 'Fetch all pages and return combined results', isFlag: true },\n];\n\n// ── Arg-to-options helpers ───────────────────────────────────────────\n\n/** Convert parsed CLI args to API pagination options */\nexport function parsePaginationArgs(args: ParsedArgs): {\n page?: number;\n pageSize?: number;\n all?: boolean;\n} {\n const result: { page?: number; pageSize?: number; all?: boolean } = {};\n\n if (args.all === true) {\n result.all = true;\n }\n\n if (args.page !== undefined) {\n const num = Number(args.page);\n if (isNaN(num) || num < 1) throw new CLIError('--page must be a positive integer');\n result.page = num;\n }\n\n if (args['page-size'] !== undefined) {\n const num = Number(args['page-size']);\n if (isNaN(num) || num < 1) throw new CLIError('--page-size must be a positive integer');\n if (num > 100) throw new CLIError('--page-size must be at most 100 (API limit)');\n result.pageSize = num;\n }\n\n return result;\n}\n\n// ── fetchAll helpers ─────────────────────────────────────────────────\n\nconst MAX_PAGE_SIZE = 100;\nconst MAX_PAGES = 200; // Safety limit to prevent infinite loops\n\n/**\n * Fetch all pages from a page-based paginated endpoint.\n * The fetcher receives { page, pageSize } and should return the raw API response.\n * Throws CLIError if MAX_PAGES is reached without exhausting all pages.\n */\nexport async function fetchAllPages(\n fetcher: (opts: { page: number; pageSize: number }) => Promise<unknown>\n): Promise<unknown[]> {\n const allItems: unknown[] = [];\n let page = 1;\n\n while (page <= MAX_PAGES) {\n const result = await fetcher({ page, pageSize: MAX_PAGE_SIZE });\n const items = unwrapItems(result);\n allItems.push(...items);\n\n // Use server metadata for termination\n const meta = extractPaginationMeta(result);\n if (meta?.totalPages !== undefined) {\n if (page >= meta.totalPages) break;\n } else if (!isPagePaginatedResponse(result)) {\n // Raw array or no metadata — single fetch is enough\n if (items.length < MAX_PAGE_SIZE) break;\n }\n\n if (page === MAX_PAGES) {\n throw new CLIError(\n `Reached maximum page limit (${MAX_PAGES}). Results may be incomplete.`\n );\n }\n\n page++;\n }\n\n return allItems;\n}\n\n/**\n * Fetch all pages from a cursor-based paginated endpoint.\n * The fetcher receives { cursor? } and should return the raw API response.\n * Throws CLIError if MAX_PAGES is reached without exhausting all pages.\n */\nexport async function fetchAllCursorPages(\n fetcher: (opts: { cursor?: string }) => Promise<unknown>\n): Promise<unknown[]> {\n const allItems: unknown[] = [];\n let cursor: string | undefined;\n let pages = 0;\n\n while (pages < MAX_PAGES) {\n const result = await fetcher({ cursor });\n const items = unwrapItems(result);\n allItems.push(...items);\n pages++;\n\n if (isCursorPaginatedResponse(result) && result.hasMore && result.nextCursor) {\n cursor = result.nextCursor;\n } else {\n break;\n }\n\n if (pages === MAX_PAGES) {\n throw new CLIError(\n `Reached maximum page limit (${MAX_PAGES}). Results may be incomplete.`\n );\n }\n }\n\n return allItems;\n}\n\n// ── ListResult factory ──────────────────────────────────────────────\n\n/**\n * Wrap a raw API response into a ListResult with explicit pagination metadata.\n * Works with both page-based and cursor-based responses, as well as plain arrays.\n *\n * @param data - Raw API response (paginated envelope or plain array)\n * @param supportsAll - Whether the calling command exposes --all\n */\nexport function listResult(data: unknown, supportsAll: boolean = false): ListResult {\n return {\n items: unwrapItems(data),\n meta: extractPaginationMeta(data),\n supportsAll,\n };\n}\n","import type { ArgDef, ParsedArgs } from './types';\nimport { CLIError } from './errors';\nimport { LIST_PAGINATION_ARGS } from './pagination';\n\nexport { LIST_PAGINATION_ARGS };\n\n/** Standard pagination args used by admin list commands (includes search).\n * @deprecated Use LIST_PAGINATION_ARGS (page/page-size/all only) plus domain-specific filter args instead. */\nexport const PAGINATION_ARGS: ArgDef[] = [\n { name: 'search', description: 'Search by name' },\n ...LIST_PAGINATION_ARGS,\n];\n\n/** Common args automatically available to all commands */\nconst COMMON_ARGS: ArgDef[] = [\n { name: 'workspace', alias: 'w', description: 'Workspace UUID' },\n { name: 'data', alias: 'd', description: 'JSON data string' },\n { name: 'file', alias: 'f', description: 'Path to JSON file' },\n { name: 'id', description: 'Entity ID' },\n { name: 'uuid', description: 'Entity UUID' },\n];\n\nexport function parseArgs(defs: ArgDef[], argv: string[]): ParsedArgs {\n const allDefs = [...COMMON_ARGS, ...defs];\n const result: ParsedArgs = {};\n\n // Apply defaults\n for (const def of allDefs) {\n if (def.default !== undefined) {\n result[def.name] = def.default;\n }\n }\n\n // Known global options that parseGlobalOptions already consumed\n const KNOWN_GLOBAL_FLAGS = new Set([\n '--env',\n '--realm',\n '--output-format',\n '-o',\n '--verbose',\n '-v',\n '--allow-write',\n '--help',\n '-h',\n '--version',\n ]);\n\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i]!;\n\n // Support --flag=value and -f=value syntax\n const eqIdx = arg.indexOf('=');\n const flagPart = eqIdx !== -1 ? arg.slice(0, eqIdx) : arg;\n const inlineValue = eqIdx !== -1 ? arg.slice(eqIdx + 1) : undefined;\n\n const def = findDef(allDefs, flagPart);\n if (!def) {\n // Warn about unknown flags (typos etc.) but don't fail\n if (\n (flagPart.startsWith('--') || flagPart.startsWith('-')) &&\n !KNOWN_GLOBAL_FLAGS.has(flagPart)\n ) {\n process.stderr.write(`Warning: unknown flag \"${flagPart}\" (ignored)\\n`);\n }\n continue;\n }\n if (def.isFlag) {\n result[def.name] = true;\n } else {\n const value = inlineValue ?? argv[++i];\n if (value === undefined) {\n throw new CLIError(`Missing value for --${def.name}`);\n }\n result[def.name] = value;\n }\n }\n\n // Validate required\n for (const def of allDefs) {\n if (def.required && result[def.name] === undefined) {\n throw new CLIError(`Missing required argument: --${def.name}`);\n }\n }\n\n return result;\n}\n\nfunction findDef(defs: ArgDef[], arg: string): ArgDef | undefined {\n for (const def of defs) {\n if (arg === `--${def.name}`) return def;\n if (def.alias && arg === `-${def.alias}`) return def;\n if (def.aliases) {\n for (const a of def.aliases) {\n if (arg === `--${a}`) return def;\n }\n }\n }\n return undefined;\n}\n","/**\n * @gravity-rail/client — Internal full-surface API client.\n *\n * Re-exports the entire public SDK surface via `@gravity-rail/sdk/internal`\n * (which includes admin TypeScript types), and adds the admin runtime classes\n * (`AdminApi`, `ApiClient`, `AdminBindings`, `bindAdminMethods`).\n *\n * Consumers in the monorepo should continue importing from `@gravity-rail/client`\n * as before — nothing externally visible has changed. The admin runtime classes\n * are physically absent from the public `@gravity-rail/sdk` package.\n */\n\nexport * from '@gravity-rail/sdk/internal';\n\n// Admin-only runtime\nexport { AdminApi } from './api/admin';\nexport { ApiClient } from './client/client';\nexport type { AdminBindings } from './client/bindings/admin';\nexport { bindAdminMethods } from './client/bindings/admin';\n","import {\n AccountLookupResponse,\n CreateCustomerRequest,\n CreateResellerRequest,\n Customer,\n DataExportResponse,\n DeletionCancelResponse,\n DeletionRequestResponse,\n CustomerAccount,\n LinkResellerAccountRequest,\n Reseller,\n ResellerAccount,\n UpdateCustomerRequest,\n UpdateResellerRequest,\n AccountSortField,\n AdminAccount,\n AdminBulkWorkflowAccessValidationResponse,\n HealthDetailRequest,\n HealthMetricsRequest,\n HealthMetricsResponse,\n WorkspaceHealthDetail,\n AdminAccountFormData,\n AdminAccountMembership,\n AdminAccountOrgMembership,\n AdminOrganization,\n AdminUpdateProductRequest,\n AdminChat,\n AdminChatDetail,\n AdminChatsOptions,\n MemberOrgView,\n AdminWorkspace,\n AdminWorkspaceFormData,\n AdminWorkspaceMemberFormData,\n UsageDashboardResponse,\n CompareWithStripeResponse,\n UsageReport,\n UsageReportRequest,\n VoiceMetricsResponse,\n AdminTemporalDetailQuery,\n AdminTemporalFailedQuery,\n AdminTemporalStuckQuery,\n AdminTemporalSummaryQuery,\n FailedWorkflowsResponse,\n StuckWorkflowsResponse,\n TemporalAdminConfig,\n TemporalSummaryResponse,\n WorkflowDetailResponse,\n CreateOrganizationRequest,\n CreateProductRequest,\n GenerateSummariesResponse,\n InboxMappingDetailResponse,\n LogoUploadRequest,\n LogoUploadResponse,\n Member,\n MemberRole,\n MergeMembersRequest,\n MergeMembersResponse,\n MissingMembershipItem,\n OrgMember,\n PaginatedResponse,\n PaginatedSubscriptionsResponse,\n PhoneNumber,\n UnmappedPhoneNumber,\n Product,\n ProvisionPlanRequest,\n ProvisionPlanResponse,\n SiteMapping,\n SiteMappingFormData,\n SortOrder,\n StripeCustomer,\n StripeCustomerCreateRequest,\n StripeCustomerUpdateRequest,\n StripePaymentMethod,\n BillingPeriod,\n Invoice,\n RecordPaymentRequest,\n DirectSubscriptionCreateRequest,\n StripeSubscriptionCreateRequest,\n StripeSubscriptionUpdateRequest,\n Subscription,\n SyncProductToStripeRequest,\n SyncProductToStripeResponse,\n ThemesListResponse,\n OrgA2PStatus,\n ProviderPhoneNumber,\n UpdateOrganizationRequest,\n Workspace,\n WorkspaceHealthResponse,\n WorkspaceSortField,\n} from '@gravity-rail/sdk/internal';\nimport { BaseApiClient } from '@gravity-rail/sdk/internal';\n\nexport class AdminApi extends BaseApiClient {\n // Admin Accounts API\n async getAccounts(options: {\n search?: string;\n createdAfter?: string;\n createdBefore?: string;\n isActive?: boolean;\n organizationId?: number;\n pendingDeletion?: boolean;\n sortBy?: AccountSortField;\n sortOrder?: SortOrder;\n page?: number;\n pageSize?: number;\n }): Promise<PaginatedResponse<AdminAccount>> {\n const params = new URLSearchParams();\n if (options.search) params.append('search', options.search);\n if (options.createdAfter) params.append('created_after', options.createdAfter);\n if (options.createdBefore) params.append('created_before', options.createdBefore);\n if (options.sortBy) params.append('sortBy', options.sortBy);\n if (options.sortOrder) params.append('sortOrder', options.sortOrder);\n if (options.page) params.append('page', options.page.toString());\n if (options.pageSize) params.append('pageSize', options.pageSize.toString());\n if (options.isActive !== undefined) params.append('isActive', options.isActive.toString());\n if (options.organizationId !== undefined)\n params.append('organizationId', options.organizationId.toString());\n if (options.pendingDeletion !== undefined)\n params.append('pendingDeletion', options.pendingDeletion.toString());\n\n return this.fetch<PaginatedResponse<AdminAccount>>(`admin/accounts?${params.toString()}`);\n }\n\n async getAccountDetails(id: string | number): Promise<AdminAccount> {\n return this.fetch<AdminAccount>(`admin/accounts/${id}`);\n }\n\n async getAccountByUuid(uuid: string): Promise<AdminAccount> {\n return this.fetch<AdminAccount>(`admin/accounts/${uuid}`);\n }\n\n async getAccountMemberships(accountId: number): Promise<AdminAccountMembership[]> {\n return this.fetch<AdminAccountMembership[]>(`admin/accounts/${accountId}/memberships`);\n }\n\n async getAccountOrgMemberships(accountId: number): Promise<AdminAccountOrgMembership[]> {\n return this.fetch<AdminAccountOrgMembership[]>(`admin/accounts/${accountId}/org-memberships`);\n }\n\n async createAccountOrgMembership(\n accountId: number,\n organizationId: number,\n role: 'member' | 'admin' | 'owner' = 'member'\n ): Promise<{\n accountId: number;\n organizationId: number;\n organizationUuid: string;\n organizationName: string;\n role: string;\n message: string;\n }> {\n return this.fetch(`admin/accounts/${accountId}/org-memberships`, {\n method: 'POST',\n body: JSON.stringify({ organizationId, role }),\n });\n }\n\n async deleteAccountOrgMembership(\n accountId: number,\n organizationId: number\n ): Promise<{\n status: string;\n message: string;\n workspaceMembershipsRemoved: number;\n }> {\n return this.fetch(`admin/accounts/${accountId}/org-memberships/${organizationId}`, {\n method: 'DELETE',\n });\n }\n\n async getAccountMembership(\n accountId: number,\n workspaceId: string\n ): Promise<AdminAccountMembership> {\n return this.fetch<AdminAccountMembership>(\n `admin/accounts/${accountId}/memberships/${workspaceId}`\n );\n }\n\n async updateAccountMembership(\n accountId: number,\n workspaceId: string,\n updates: AdminWorkspaceMemberFormData\n ): Promise<AdminAccountMembership> {\n return this.fetch<AdminAccountMembership>(\n `admin/accounts/${accountId}/memberships/${workspaceId}`,\n {\n method: 'PUT',\n body: JSON.stringify(updates),\n }\n );\n }\n\n async createAccountMembership(\n accountId: number,\n workspaceId: string,\n data: { memberRoleId: number }\n ): Promise<AdminAccountMembership> {\n return this.fetch<AdminAccountMembership>(\n `admin/accounts/${accountId}/memberships/${workspaceId}`,\n {\n method: 'POST',\n body: JSON.stringify(data),\n }\n );\n }\n\n async deleteAccountMembership(accountId: number, workspaceId: string): Promise<void> {\n return this.fetch<void>(`admin/accounts/${accountId}/memberships/${workspaceId}`, {\n method: 'DELETE',\n });\n }\n\n async updateAccountAsAdmin(\n id: string | number,\n updates: AdminAccountFormData\n ): Promise<AdminAccount> {\n return this.fetch<AdminAccount>(`admin/accounts/${id}`, {\n method: 'PUT',\n body: JSON.stringify(updates),\n });\n }\n\n async createAccountAsAdmin(data: AdminAccountFormData): Promise<AdminAccount> {\n return this.fetch<AdminAccount>('admin/accounts', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async deleteAccountAsAdmin(id: number): Promise<void> {\n return this.fetch(`admin/accounts/${id}`, {\n method: 'DELETE',\n });\n }\n\n // GDPR Data Subject Rights (superuser only)\n\n async exportAccountData(accountId: number): Promise<DataExportResponse> {\n return this.fetch(`admin/data-rights/${accountId}/export`, {\n method: 'POST',\n });\n }\n\n async requestAccountDeletion(accountId: number): Promise<DeletionRequestResponse> {\n return this.fetch(`admin/data-rights/${accountId}/delete`, {\n method: 'POST',\n });\n }\n\n async cancelAccountDeletion(accountId: number): Promise<DeletionCancelResponse> {\n return this.fetch(`admin/data-rights/${accountId}/cancel-delete`, {\n method: 'POST',\n });\n }\n\n /**\n * Look up an account by email or phone. Returns verification status.\n * Used to check if a verified account exists before creating a new one.\n */\n async lookupAccount(options: {\n email?: string;\n phone?: string;\n }): Promise<AccountLookupResponse> {\n const params = new URLSearchParams();\n if (options.email) params.append('email', options.email);\n if (options.phone) params.append('phone', options.phone);\n\n return this.fetch<AccountLookupResponse>(`admin/accounts/lookup?${params.toString()}`);\n }\n\n // Admin Organizations API\n async getOrganizations(options?: {\n search?: string;\n page?: number;\n pageSize?: number;\n noSubscription?: boolean;\n sortBy?: string;\n sortOrder?: 'asc' | 'desc';\n }): Promise<PaginatedResponse<AdminOrganization>> {\n const params = new URLSearchParams();\n if (options?.search) params.append('search', options.search);\n if (options?.page) params.append('page', options.page.toString());\n if (options?.pageSize) params.append('pageSize', options.pageSize.toString());\n if (options?.noSubscription) params.append('no_subscription', 'true');\n if (options?.sortBy) params.append('sortBy', options.sortBy);\n if (options?.sortOrder) params.append('sortOrder', options.sortOrder);\n\n return this.fetch<PaginatedResponse<AdminOrganization>>(\n `admin/organizations?${params.toString()}`\n );\n }\n\n /**\n * Get organization by ID or UUID.\n * Returns different response based on user's role:\n * - Admins/Owners: AdminOrganization with full details\n * - Members: MemberOrgView with basic info and workspace list\n *\n * Use `viewType` field to determine the response type:\n * - 'admin': AdminOrganization\n * - 'member': MemberOrgView\n */\n async getOrganization(idOrUuid: number | string): Promise<AdminOrganization | MemberOrgView> {\n return this.fetch<AdminOrganization | MemberOrgView>(`o/${idOrUuid}`);\n }\n\n /**\n * Get organization by numeric ID via admin endpoint.\n * Does NOT require organization membership — superuser-only.\n */\n async getOrganizationAsAdmin(id: number): Promise<AdminOrganization> {\n return this.fetch<AdminOrganization>(`admin/organizations/${id}`);\n }\n\n async getOrganizationMembersAsAdmin(\n organizationId: number,\n options?: { search?: string; role?: string; page?: number; pageSize?: number }\n ): Promise<PaginatedResponse<OrgMember>> {\n const params = new URLSearchParams();\n if (options?.search) params.append('search', options.search);\n if (options?.role) params.append('role', options.role);\n if (options?.page) params.append('page', options.page.toString());\n if (options?.pageSize) params.append('pageSize', options.pageSize.toString());\n const qs = params.toString();\n return this.fetch<PaginatedResponse<OrgMember>>(\n `admin/organizations/${organizationId}/members${qs ? `?${qs}` : ''}`\n );\n }\n\n async createOrganization(data: CreateOrganizationRequest): Promise<AdminOrganization> {\n return this.fetch<AdminOrganization>('admin/organizations', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async updateOrganization(\n id: number,\n data: UpdateOrganizationRequest\n ): Promise<AdminOrganization> {\n return this.fetch<AdminOrganization>(`admin/organizations/${id}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n });\n }\n\n async deleteOrganization(id: number): Promise<void> {\n return this.fetch(`admin/organizations/${id}`, {\n method: 'DELETE',\n });\n }\n\n /**\n * Join an organization with a specified role (superuser only).\n * Creates or updates membership in the target org.\n * @param orgUuid - Organization UUID or numeric ID as string\n */\n async joinOrganization(\n orgUuid: string,\n role: 'member' | 'admin' | 'owner' = 'owner'\n ): Promise<{\n accountId: number;\n organizationId: number;\n organizationUuid: string;\n email: string | null;\n role: string;\n message: string;\n }> {\n return this.fetch(`admin/organizations/${orgUuid}/join`, {\n method: 'POST',\n body: JSON.stringify({ role }),\n });\n }\n\n /**\n * Leave an organization (superuser only).\n * @param orgUuid - Organization UUID or numeric ID as string\n */\n async leaveOrganization(orgUuid: string): Promise<{ status: string; message: string }> {\n return this.fetch(`admin/organizations/${orgUuid}/join`, {\n method: 'DELETE',\n });\n }\n\n async generateLogoUploadUrl(\n organizationUuid: string,\n data: LogoUploadRequest\n ): Promise<LogoUploadResponse> {\n return this.fetch<LogoUploadResponse>(`o/${organizationUuid}/logo-upload-url`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n // Organization Members API - moved to OrgApi at /api/v2/o/{org_uuid}/members\n // See packages/client/src/api/org.ts\n\n // Organization Invitations API - moved to OrgApi at /api/v2/o/{org_uuid}/invitations\n // See packages/client/src/api/org.ts\n\n // Admin Products API\n async importProducts(workspaceId: number): Promise<void> {\n return this.fetch('admin/import-products', {\n method: 'POST',\n body: JSON.stringify({ workspaceId }),\n });\n }\n\n // ===== Product CRUD =====\n\n async createProductAsAdmin(product: CreateProductRequest): Promise<Product> {\n return this.fetch<Product>('admin/products', {\n method: 'POST',\n body: JSON.stringify(product),\n });\n }\n\n async getProductsAsAdmin(workspaceUuid?: string, productTypes?: string[]): Promise<Product[]> {\n const params = new URLSearchParams();\n if (workspaceUuid) {\n params.append('workspace_uuid', workspaceUuid);\n }\n if (productTypes && productTypes.length > 0) {\n productTypes.forEach((type) => params.append('product_types', type));\n }\n const queryString = params.toString();\n return this.fetch<Product[]>(`admin/products${queryString ? `?${queryString}` : ''}`);\n }\n\n async getProductAsAdmin(productId: number): Promise<Product> {\n return this.fetch<Product>(`admin/products/${productId}`);\n }\n\n async updateProductAsAdmin(\n product_id: number,\n product: AdminUpdateProductRequest\n ): Promise<Product> {\n return this.fetch<Product>(`admin/products/${product_id}`, {\n method: 'PUT',\n body: JSON.stringify(product),\n });\n }\n\n async deleteProductAsAdmin(productId: number): Promise<{ message: string }> {\n return this.fetch<{ message: string }>(`admin/products/${productId}`, {\n method: 'DELETE',\n });\n }\n\n // Admin Workspace API\n async getWorkspacesAsAdmin(\n options: {\n page?: number;\n pageSize?: number;\n sortBy?: WorkspaceSortField;\n sortOrder?: SortOrder;\n search?: string;\n isReseller?: boolean;\n organizationId?: number;\n noActiveSubscription?: boolean;\n } = {}\n ): Promise<PaginatedResponse<AdminWorkspace>> {\n const params = new URLSearchParams();\n if (options.page !== undefined) params.append('page', options.page.toString());\n if (options.pageSize !== undefined) params.append('pageSize', options.pageSize.toString());\n if (options.sortBy) params.append('sortBy', options.sortBy);\n if (options.sortOrder) params.append('sortOrder', options.sortOrder);\n if (options.search) params.append('search', options.search);\n if (options.isReseller !== undefined)\n params.append('isReseller', options.isReseller.toString());\n if (options.organizationId !== undefined)\n params.append('organizationId', options.organizationId.toString());\n if (options.noActiveSubscription) params.append('noActiveSubscription', 'true');\n\n return this.fetch<PaginatedResponse<AdminWorkspace>>(`admin/workspaces?${params.toString()}`);\n }\n\n async getWorkspaceAsAdmin(wid: string): Promise<AdminWorkspace> {\n return this.fetch<AdminWorkspace>(`admin/workspaces/${wid}`);\n }\n\n async getWorkspaceByNumericIdAsAdmin(workspace_id: number): Promise<AdminWorkspace> {\n return this.fetch<AdminWorkspace>(`admin/workspaces/id/${workspace_id}`);\n }\n\n async createWorkspaceAsAdmin(ws: AdminWorkspaceFormData): Promise<Workspace> {\n return this.fetch<Workspace>('admin/workspaces', {\n method: 'POST',\n body: JSON.stringify(ws),\n });\n }\n\n async updateWorkspaceAsAdmin(wid: string, ws: AdminWorkspaceFormData): Promise<Workspace> {\n return this.fetch<Workspace>(`admin/workspaces/${wid}`, {\n method: 'PUT',\n body: JSON.stringify(ws),\n });\n }\n\n async deleteWorkspaceAsAdmin(wid: string): Promise<void> {\n return this.fetch(`admin/workspaces/${wid}`, {\n method: 'DELETE',\n });\n }\n\n async createSchemaAsAdmin(wid: string): Promise<AdminWorkspace> {\n return this.fetch(`admin/workspaces/${wid}/provision/create`, {\n method: 'POST',\n });\n }\n\n async migrateSchemaAsAdmin(wid: string): Promise<AdminWorkspace> {\n return this.fetch(`admin/workspaces/${wid}/provision/migrate`, {\n method: 'POST',\n });\n }\n\n async provisionWorkspaceAsAdmin(wid: string): Promise<AdminWorkspace> {\n return this.fetch(`admin/workspaces/${wid}/provision`, {\n method: 'POST',\n });\n }\n\n async refreshProvisionStatusAsAdmin(wid: string): Promise<AdminWorkspace> {\n return this.fetch(`admin/workspaces/${wid}/provision/refresh`, {\n method: 'POST',\n });\n }\n\n async enableMaintenanceMode(wid: string): Promise<AdminWorkspace> {\n return this.fetch(`admin/workspaces/${wid}/maintenance`, {\n method: 'PUT',\n });\n }\n\n async disableMaintenanceMode(wid: string): Promise<AdminWorkspace> {\n return this.fetch(`admin/workspaces/${wid}/maintenance`, {\n method: 'DELETE',\n });\n }\n\n // ===== Workspace Health Check =====\n\n async getWorkspaceHealth(workspaceUuid: string): Promise<WorkspaceHealthResponse> {\n return this.fetch<WorkspaceHealthResponse>(`admin/workspaces/${workspaceUuid}/health`);\n }\n\n async provisionPlanFeatures(\n workspaceUuid: string,\n request?: ProvisionPlanRequest\n ): Promise<ProvisionPlanResponse> {\n return this.fetch<ProvisionPlanResponse>(`admin/workspaces/${workspaceUuid}/provision-plan`, {\n method: 'POST',\n body: JSON.stringify(request || {}),\n });\n }\n\n // ===== Workflow Access Validation =====\n\n async validateWorkflowAccessAsAdmin(\n workspaceUuid?: string\n ): Promise<AdminBulkWorkflowAccessValidationResponse> {\n const params = new URLSearchParams();\n if (workspaceUuid) params.append('workspace_uuid', workspaceUuid);\n const qs = params.toString();\n return this.fetch<AdminBulkWorkflowAccessValidationResponse>(\n `admin/workspaces/validate-workflow-access${qs ? `?${qs}` : ''}`\n );\n }\n\n async mergeMembers(wid: string, request: MergeMembersRequest): Promise<MergeMembersResponse> {\n return this.fetch<MergeMembersResponse>(`admin/workspaces/${wid}/merge-members`, {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n async getAdminWorkspaceMember(wid: string): Promise<Member> {\n return this.fetch(`admin/workspaces/${wid}/me`, {\n method: 'GET',\n });\n }\n\n async createAdminWorkspaceMember(\n wid: string,\n data: AdminWorkspaceMemberFormData\n ): Promise<void> {\n return this.fetch(`admin/workspaces/${wid}/me`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async updateAdminWorkspaceMember(\n wid: string,\n data: AdminWorkspaceMemberFormData\n ): Promise<void> {\n return this.fetch(`admin/workspaces/${wid}/me`, {\n method: 'PUT',\n body: JSON.stringify(data),\n });\n }\n\n async getAdminWorkspaceMemberRoles(wid: string): Promise<MemberRole[]> {\n return this.fetch<MemberRole[]>(`admin/workspaces/${wid}/member-roles`);\n }\n\n async getUnmappedPhoneNumbers(): Promise<UnmappedPhoneNumber[]> {\n return this.fetch<UnmappedPhoneNumber[]>(`admin/phone-numbers/unmapped`);\n }\n\n async getWorkspaceUnmappedPhoneNumbers(workspaceId: number): Promise<UnmappedPhoneNumber[]> {\n return this.fetch<UnmappedPhoneNumber[]>(\n `admin/phone-numbers/workspace/${workspaceId}/unmapped`\n );\n }\n\n async getWorkspacePhoneNumbersAsAdmin(workspaceId: number): Promise<PhoneNumber[]> {\n return this.fetch<PhoneNumber[]>(`admin/workspace/${workspaceId}/phone-numbers`);\n }\n\n // Phone Numbers API (Provider phone numbers from Twilio, AWS, etc.)\n async getProviderPhoneNumbers(\n options: {\n search?: string;\n isAssigned?: boolean;\n provider?: string;\n organizationId?: number;\n sortBy?: string;\n sortOrder?: string;\n page?: number;\n pageSize?: number;\n } = {}\n ): Promise<PaginatedResponse<ProviderPhoneNumber>> {\n const params = new URLSearchParams();\n if (options.page) params.append('page', options.page.toString());\n if (options.pageSize) params.append('pageSize', options.pageSize.toString());\n if (options.search) params.append('search', options.search);\n if (options.isAssigned !== undefined)\n params.append('is_assigned', String(options.isAssigned));\n if (options.provider) params.append('provider', options.provider);\n if (options.organizationId !== undefined)\n params.append('organizationId', options.organizationId.toString());\n if (options.sortBy) params.append('sortBy', options.sortBy);\n if (options.sortOrder) params.append('sortOrder', options.sortOrder);\n\n return this.fetch<PaginatedResponse<ProviderPhoneNumber>>(\n `admin/phone-numbers${params.toString() ? `?${params.toString()}` : ''}`\n );\n }\n\n async getProviderPhoneNumber(id: number): Promise<ProviderPhoneNumber> {\n return this.fetch<ProviderPhoneNumber>(`admin/phone-numbers/${id}`);\n }\n\n async updateProviderPhoneNumber(\n id: number,\n data: { organizationId: number | null }\n ): Promise<ProviderPhoneNumber> {\n return this.fetch<ProviderPhoneNumber>(`admin/phone-numbers/${id}`, {\n method: 'PATCH',\n body: JSON.stringify(data),\n });\n }\n\n async mapMainAccountPhone(data: {\n phoneNumber: string;\n workspaceUuid: string;\n name?: string;\n }): Promise<ProviderPhoneNumber> {\n return this.fetch<ProviderPhoneNumber>(`admin/phone-numbers/map-from-main-account`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async unmapPhoneNumber(data: {\n phoneNumber: string;\n }): Promise<{ status: string; phoneNumber: string }> {\n return this.fetch<{ status: string; phoneNumber: string }>(`admin/phone-numbers/unmap`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async searchAvailablePhoneNumbersAsAdmin(data: {\n organizationId: number;\n country?: string;\n numberType?: string;\n areaCode?: string;\n contains?: string;\n limit?: number;\n }): Promise<\n Array<{\n phoneNumber: string;\n friendlyName: string;\n locality: string | null;\n region: string | null;\n isoCountry: string;\n voiceEnabled: boolean;\n smsEnabled: boolean;\n }>\n > {\n return this.fetch(`admin/phone-numbers/search`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async purchasePhoneNumberAsAdmin(data: {\n organizationId: number;\n phoneNumber: string;\n numberType?: string;\n }): Promise<ProviderPhoneNumber> {\n return this.fetch<ProviderPhoneNumber>(`admin/phone-numbers/purchase`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async getOrgA2PStatusAsAdmin(organizationId: number): Promise<OrgA2PStatus> {\n return this.fetch<OrgA2PStatus>(`admin/organizations/${organizationId}/a2p-status`);\n }\n\n async resetOrgA2PStatusAsAdmin(organizationId: number): Promise<{ status: string }> {\n return this.fetch(`admin/organizations/${organizationId}/a2p-status`, {\n method: 'DELETE',\n });\n }\n\n // Site Mappings API\n async getSiteMappings(options?: {\n search?: string;\n page?: number;\n pageSize?: number;\n }): Promise<PaginatedResponse<SiteMapping>> {\n const queryParams = new URLSearchParams();\n if (options?.search) queryParams.append('search', options.search);\n if (options?.page) queryParams.append('page', options.page.toString());\n if (options?.pageSize) queryParams.append('pageSize', options.pageSize.toString());\n\n const queryString = queryParams.toString();\n const url = `admin/site-mappings${queryString ? `?${queryString}` : ''}`;\n\n return this.fetch<PaginatedResponse<SiteMapping>>(url);\n }\n\n async getSiteMapping(siteId: number): Promise<SiteMapping> {\n return this.fetch<SiteMapping>(`admin/site-mappings/${siteId}`);\n }\n\n async updateSiteMapping(siteId: number, data: SiteMappingFormData): Promise<SiteMapping> {\n return this.fetch<SiteMapping>(`admin/site-mappings/${siteId}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n });\n }\n\n async updateSiteMappingWorkspace(siteId: number, workspaceId: number): Promise<SiteMapping> {\n return this.updateSiteMapping(siteId, {\n workspaceId,\n siteUuid: '', // These fields are required by the type but will be ignored on the server\n });\n }\n\n async adminDeleteSiteMapping(siteId: number): Promise<void> {\n return this.fetch<void>(`admin/site-mappings/${siteId}`, {\n method: 'DELETE',\n });\n }\n\n async createSiteMapping(mapping: SiteMappingFormData): Promise<SiteMapping> {\n return this.fetch<SiteMapping>(`admin/site-mappings`, {\n method: 'POST',\n body: JSON.stringify(mapping),\n });\n }\n\n // Keep for backward compatibility\n async createOrUpdateSiteMapping(\n wid: string,\n mapping: SiteMappingFormData\n ): Promise<SiteMapping> {\n return this.fetch<SiteMapping>(`admin/workspaces/${wid}/site-mappings`, {\n method: 'POST',\n body: JSON.stringify(mapping),\n });\n }\n\n async deleteSiteMapping(wid: string, siteUuid: string): Promise<void> {\n return this.fetch(`admin/workspaces/${wid}/site-mappings/${siteUuid}`, {\n method: 'DELETE',\n });\n }\n\n // Admin Inbox Mappings API\n async getInboxMappings(\n options: {\n page?: number;\n pageSize?: number;\n search?: string;\n workspaceId?: number;\n } = {}\n ): Promise<PaginatedResponse<InboxMappingDetailResponse>> {\n const params = new URLSearchParams();\n if (options.page) params.append('page', options.page.toString());\n if (options.pageSize) params.append('pageSize', options.pageSize.toString());\n if (options.search) params.append('search', options.search);\n if (options.workspaceId) params.append('workspaceId', options.workspaceId.toString());\n\n return this.fetch<PaginatedResponse<InboxMappingDetailResponse>>(\n `admin/inbox-mappings${params.toString() ? `?${params.toString()}` : ''}`\n );\n }\n\n async getInboxMapping(id: number): Promise<InboxMappingDetailResponse> {\n return this.fetch<InboxMappingDetailResponse>(`admin/inbox-mappings/${id}`);\n }\n\n async updateInboxMapping(id: number, workspaceId: number): Promise<InboxMappingDetailResponse> {\n return this.fetch<InboxMappingDetailResponse>(`admin/inbox-mappings/${id}`, {\n method: 'PUT',\n body: JSON.stringify({ workspaceId }),\n });\n }\n\n async deleteAdminInboxMapping(id: number): Promise<void> {\n return this.fetch(`admin/inbox-mappings/${id}`, {\n method: 'DELETE',\n });\n }\n\n // Evaluation API\n async generateChatSummaries(options: {\n afterDate?: Date;\n onlyWithoutSummaries?: boolean;\n }): Promise<GenerateSummariesResponse> {\n return this.fetch<GenerateSummariesResponse>('admin/generate-summaries', {\n method: 'POST',\n body: JSON.stringify({\n after_date: options.afterDate\n ? options.afterDate.toISOString().split('T')[0] +\n 'T' +\n options.afterDate.toTimeString().split(' ')[0]\n : undefined,\n only_without_summaries: options.onlyWithoutSummaries ?? true,\n }),\n });\n }\n\n async executeQuery(options: { query: string; workspaceUuid?: string }): Promise<{\n columns: string[];\n rows: any[][];\n rowCount: number;\n }> {\n return this.fetch<{\n columns: string[];\n rows: any[][];\n rowCount: number;\n }>('admin/execute-query', {\n method: 'POST',\n body: JSON.stringify({\n query: options.query,\n workspace_uuid: options.workspaceUuid,\n }),\n });\n }\n\n // Admin Themes API\n async listAllThemes(): Promise<ThemesListResponse> {\n return this.fetch<ThemesListResponse>('admin/themes/list');\n }\n\n // One-off Redis cadence-key migration (periodiq_* → routine_*). See\n // lib/routes/admin/admin_routine_cadence_api.py for context.\n async migrateRoutineCadenceKeys(options: { dryRun?: boolean; deleteLegacy?: boolean }): Promise<{\n dryRun: boolean;\n deleteLegacy: boolean;\n lastRunScanned: number;\n lastRunCopied: number;\n lastRunSkippedNewExists: number;\n lastRunLegacyDeleted: number;\n runCountScanned: number;\n runCountCopied: number;\n runCountSkippedNewExists: number;\n runCountLegacyDeleted: number;\n truncated: boolean;\n }> {\n return this.fetch('admin/redis/routine-cadence/migrate', {\n method: 'POST',\n body: JSON.stringify({\n dryRun: options.dryRun ?? true,\n deleteLegacy: options.deleteLegacy ?? false,\n }),\n });\n }\n\n // Missing Memberships API\n async getMissingMemberships(workspaceId: string): Promise<MissingMembershipItem[]> {\n return this.fetch<MissingMembershipItem[]>(\n `admin/workspaces/${workspaceId}/missing-memberships`\n );\n }\n\n async linkMissingMembership(\n workspaceId: string,\n memberId: number,\n accountId: number\n ): Promise<{ success: boolean; message: string }> {\n return this.fetch<{ success: boolean; message: string }>(\n `admin/workspaces/${workspaceId}/link-membership?member_id=${memberId}&account_id=${accountId}`,\n {\n method: 'POST',\n }\n );\n }\n\n // Bulk Phone Classification API\n async startBulkPhoneClassification(\n workspaceUuid: string,\n includeUnknown: boolean = false\n ): Promise<{\n success: boolean;\n message: string;\n job_id: string;\n workspace_uuid: string;\n include_unknown: boolean;\n }> {\n const params = new URLSearchParams();\n params.append('include_unknown', includeUnknown.toString());\n\n return this.fetch<{\n success: boolean;\n message: string;\n job_id: string;\n workspace_uuid: string;\n include_unknown: boolean;\n }>(`admin/workspaces/${workspaceUuid}/bulk-classify-phones?${params.toString()}`, {\n method: 'POST',\n });\n }\n\n // Bulk TOS Acceptance API\n async startBulkTOSAcceptance(workspaceUuid: string): Promise<{\n success: boolean;\n message: string;\n updated_count: number;\n workspace_uuid: string;\n }> {\n return this.fetch<{\n success: boolean;\n message: string;\n updated_count: number;\n workspace_uuid: string;\n }>(`admin/workspaces/${workspaceUuid}/bulk-accept-tos`, {\n method: 'POST',\n });\n }\n\n // Token Usage Backfill API\n async startTokenUsageBackfill(workspaceUuid: string): Promise<{\n success: boolean;\n message: string;\n job_id: string;\n workspace_uuid: string;\n }> {\n return this.fetch<{\n success: boolean;\n message: string;\n job_id: string;\n workspace_uuid: string;\n }>(`admin/workspaces/${workspaceUuid}/backfill-token-usage`, {\n method: 'POST',\n });\n }\n\n // ===== Admin Chat Endpoints =====\n\n async listWorkspaceChats(\n workspaceUuid: string,\n options?: AdminChatsOptions\n ): Promise<PaginatedResponse<AdminChat>> {\n const params = new URLSearchParams();\n if (options?.page) params.set('page', String(options.page));\n if (options?.pageSize) params.set('pageSize', String(options.pageSize));\n if (options?.search) params.set('search', options.search);\n if (options?.chatType) params.set('chatType', options.chatType);\n if (options?.channel) params.set('channel', options.channel);\n if (options?.archived !== undefined) params.set('archived', String(options.archived));\n const qs = params.toString();\n return this.fetch<PaginatedResponse<AdminChat>>(\n `admin/workspaces/${workspaceUuid}/chats${qs ? `?${qs}` : ''}`\n );\n }\n\n async getWorkspaceChat(\n workspaceUuid: string,\n chatId: number,\n options?: { page?: number; pageSize?: number }\n ): Promise<AdminChatDetail> {\n const params = new URLSearchParams();\n if (options?.page) params.set('page', String(options.page));\n if (options?.pageSize) params.set('pageSize', String(options.pageSize));\n const qs = params.toString();\n return this.fetch<AdminChatDetail>(\n `admin/workspaces/${workspaceUuid}/chats/${chatId}${qs ? `?${qs}` : ''}`\n );\n }\n\n // Update chat message content\n async updateChatMessage(\n workspaceUuid: string,\n chatId: number,\n messageId: string,\n content: string\n ): Promise<{\n success: boolean;\n message: string;\n messageId: string;\n chatId: number;\n workspaceUuid: string;\n }> {\n return this.fetch<{\n success: boolean;\n message: string;\n messageId: string;\n chatId: number;\n workspaceUuid: string;\n }>(`admin/workspaces/${workspaceUuid}/chats/${chatId}/messages/${messageId}`, {\n method: 'POST',\n body: JSON.stringify({ content }),\n });\n }\n\n async rateWorkspaceChatMessage(\n workspaceUuid: string,\n chatId: number,\n messageId: string,\n rating: number,\n comment?: string\n ): Promise<{ status: string; detail?: string }> {\n return this.fetch<{ status: string; detail?: string }>(\n `admin/workspaces/${workspaceUuid}/chats/${chatId}/messages/${messageId}/rate`,\n {\n method: 'POST',\n body: JSON.stringify({ rating, comment }),\n }\n );\n }\n\n // ===== Stripe Customer Management =====\n\n async getStripeCustomer(accountId: number): Promise<StripeCustomer> {\n return this.fetch<StripeCustomer>(`admin/accounts/${accountId}/stripe/customer`);\n }\n\n async createStripeCustomer(\n accountId: number,\n data: StripeCustomerCreateRequest\n ): Promise<StripeCustomer> {\n return this.fetch<StripeCustomer>(`admin/accounts/${accountId}/stripe/customer`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async updateStripeCustomer(\n accountId: number,\n data: StripeCustomerUpdateRequest\n ): Promise<StripeCustomer> {\n return this.fetch<StripeCustomer>(`admin/accounts/${accountId}/stripe/customer`, {\n method: 'PUT',\n body: JSON.stringify(data),\n });\n }\n\n // ===== Customer Management =====\n\n async createCustomerFromAccount(accountId: number): Promise<Customer> {\n return this.fetch<Customer>(`admin/accounts/${accountId}/customer`, {\n method: 'POST',\n });\n }\n\n async getCustomers(options?: {\n search?: string;\n page?: number;\n pageSize?: number;\n }): Promise<PaginatedResponse<Customer>> {\n const params = new URLSearchParams();\n if (options?.search) params.set('search', options.search);\n if (options?.page) params.set('page', String(options.page));\n if (options?.pageSize) params.set('page_size', String(options.pageSize));\n const qs = params.toString();\n return this.fetch<PaginatedResponse<Customer>>(`admin/customers${qs ? `?${qs}` : ''}`);\n }\n\n async getCustomer(customerId: number): Promise<Customer> {\n return this.fetch<Customer>(`admin/customers/${customerId}`);\n }\n\n async createCustomer(data: CreateCustomerRequest): Promise<Customer> {\n return this.fetch<Customer>('admin/customers', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async updateCustomer(customerId: number, data: UpdateCustomerRequest): Promise<Customer> {\n return this.fetch<Customer>(`admin/customers/${customerId}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n });\n }\n\n async syncCustomerToStripe(customerId: number): Promise<Customer> {\n return this.fetch<Customer>(`admin/customers/${customerId}/stripe/sync`, {\n method: 'POST',\n });\n }\n\n async getCustomerAccounts(customerId: number): Promise<CustomerAccount[]> {\n return this.fetch<CustomerAccount[]>(`admin/customers/${customerId}/accounts`);\n }\n\n async linkCustomerToAccount(\n customerId: number,\n accountId: number,\n role?: string\n ): Promise<CustomerAccount> {\n return this.fetch<CustomerAccount>(`admin/customers/${customerId}/accounts`, {\n method: 'POST',\n body: JSON.stringify({ accountId, role }),\n });\n }\n\n async unlinkCustomerFromAccount(customerId: number, accountId: number): Promise<void> {\n await this.fetch<void>(`admin/customers/${customerId}/accounts/${accountId}`, {\n method: 'DELETE',\n });\n }\n\n // ===== Stripe Subscription Management =====\n\n async getStripeSubscriptions(accountId: number): Promise<Subscription[]> {\n return this.fetch<Subscription[]>(`admin/accounts/${accountId}/stripe/subscriptions`);\n }\n\n async createStripeSubscription(\n customerId: number,\n data: StripeSubscriptionCreateRequest\n ): Promise<Subscription> {\n return this.fetch<Subscription>(`admin/customers/${customerId}/stripe/subscriptions`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async createDirectSubscription(\n customerId: number,\n data: DirectSubscriptionCreateRequest\n ): Promise<Subscription> {\n return this.fetch<Subscription>(`admin/customers/${customerId}/direct/subscriptions`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async updateStripeSubscription(\n accountId: number,\n subscriptionId: string,\n data: StripeSubscriptionUpdateRequest\n ): Promise<Subscription> {\n return this.fetch<Subscription>(\n `admin/accounts/${accountId}/stripe/subscriptions/${subscriptionId}`,\n {\n method: 'PUT',\n body: JSON.stringify(data),\n }\n );\n }\n\n async cancelStripeSubscription(\n accountId: number,\n subscriptionId: string\n ): Promise<{ message: string; status: string }> {\n return this.fetch<{ message: string; status: string }>(\n `admin/accounts/${accountId}/stripe/subscriptions/${subscriptionId}`,\n {\n method: 'DELETE',\n }\n );\n }\n\n async provisionWorkspaceForSubscription(\n accountId: number,\n subscriptionId: string\n ): Promise<AdminWorkspace> {\n return this.fetch<AdminWorkspace>(\n `admin/accounts/${accountId}/stripe/subscriptions/${subscriptionId}/provision`,\n {\n method: 'POST',\n }\n );\n }\n\n async associateWorkspaceWithSubscription(\n accountId: number,\n subscriptionId: string,\n workspaceId: number\n ): Promise<Subscription> {\n return this.fetch<Subscription>(\n `admin/accounts/${accountId}/stripe/subscriptions/${subscriptionId}/associate?workspace_id=${workspaceId}`,\n {\n method: 'POST',\n }\n );\n }\n\n async createSubscriptionPaymentLink(\n accountId: number,\n subscriptionId: string\n ): Promise<{\n needsPayment: boolean;\n paymentUrl?: string;\n amountDue?: number;\n currency?: string;\n status: string;\n invoiceId?: string;\n invoiceStatus?: string;\n dueDate?: number;\n message?: string;\n }> {\n return this.fetch<{\n needsPayment: boolean;\n paymentUrl?: string;\n amountDue?: number;\n currency?: string;\n status: string;\n invoiceId?: string;\n invoiceStatus?: string;\n dueDate?: number;\n message?: string;\n }>(`admin/accounts/${accountId}/stripe/subscriptions/${subscriptionId}/payment-link`, {\n method: 'POST',\n });\n }\n\n // ===== Stripe Payment Methods Management =====\n\n async createSetupIntent(accountId: number): Promise<{\n clientSecret: string;\n setupIntentId: string;\n status: string;\n }> {\n return this.fetch<{\n clientSecret: string;\n setupIntentId: string;\n status: string;\n }>(`admin/accounts/${accountId}/stripe/setup-intent`, {\n method: 'POST',\n });\n }\n\n async getStripePaymentMethods(accountId: number): Promise<StripePaymentMethod[]> {\n return this.fetch<StripePaymentMethod[]>(\n `admin/accounts/${accountId}/stripe/payment-methods`\n );\n }\n\n async attachStripePaymentMethod(\n accountId: number,\n paymentMethodId: string,\n setAsDefault: boolean = false\n ): Promise<{\n success: boolean;\n message: string;\n paymentMethodId: string;\n type: string;\n }> {\n return this.fetch<{\n success: boolean;\n message: string;\n paymentMethodId: string;\n type: string;\n }>(`admin/accounts/${accountId}/stripe/payment-methods/${paymentMethodId}/attach`, {\n method: 'POST',\n body: JSON.stringify({ setAsDefault }),\n });\n }\n\n async detachStripePaymentMethod(\n accountId: number,\n paymentMethodId: string\n ): Promise<{ success: string; message: string }> {\n return this.fetch<{ success: string; message: string }>(\n `admin/accounts/${accountId}/stripe/payment-methods/${paymentMethodId}`,\n {\n method: 'DELETE',\n }\n );\n }\n\n async setDefaultStripePaymentMethod(\n accountId: number,\n paymentMethodId: string\n ): Promise<{ success: string; message: string }> {\n return this.fetch<{ success: string; message: string }>(\n `admin/accounts/${accountId}/stripe/payment-methods/${paymentMethodId}/set-default`,\n {\n method: 'PUT',\n }\n );\n }\n\n // ===== Convert Direct Subscription to Stripe =====\n\n async convertSubscriptionToStripe(\n customerId: number,\n subscriptionId: number\n ): Promise<Subscription> {\n return this.fetch<Subscription>(\n `admin/customers/${customerId}/subscriptions/${subscriptionId}/convert-to-stripe`,\n { method: 'POST' }\n );\n }\n\n // ===== Customer-Level Stripe Payment Methods =====\n\n async createCustomerSetupIntent(customerId: number): Promise<{\n clientSecret: string;\n setupIntentId: string;\n status: string;\n }> {\n return this.fetch<{\n clientSecret: string;\n setupIntentId: string;\n status: string;\n }>(`admin/customers/${customerId}/stripe/setup-intent`, {\n method: 'POST',\n });\n }\n\n async getCustomerPaymentMethods(customerId: number): Promise<StripePaymentMethod[]> {\n return this.fetch<StripePaymentMethod[]>(\n `admin/customers/${customerId}/stripe/payment-methods`\n );\n }\n\n async attachCustomerPaymentMethod(\n customerId: number,\n paymentMethodId: string,\n setAsDefault: boolean = false\n ): Promise<{\n success: boolean;\n message: string;\n paymentMethodId: string;\n type: string;\n }> {\n return this.fetch<{\n success: boolean;\n message: string;\n paymentMethodId: string;\n type: string;\n }>(`admin/customers/${customerId}/stripe/payment-methods/${paymentMethodId}/attach`, {\n method: 'POST',\n body: JSON.stringify({ setAsDefault }),\n });\n }\n\n async detachCustomerPaymentMethod(\n customerId: number,\n paymentMethodId: string\n ): Promise<{ success: string; message: string }> {\n return this.fetch<{ success: string; message: string }>(\n `admin/customers/${customerId}/stripe/payment-methods/${paymentMethodId}`,\n {\n method: 'DELETE',\n }\n );\n }\n\n async setDefaultCustomerPaymentMethod(\n customerId: number,\n paymentMethodId: string\n ): Promise<{ success: string; message: string }> {\n return this.fetch<{ success: string; message: string }>(\n `admin/customers/${customerId}/stripe/payment-methods/${paymentMethodId}/set-default`,\n {\n method: 'PUT',\n }\n );\n }\n\n // ===== Workspace Organization Migration =====\n\n async previewWorkspaceOrganizationChange(\n workspaceUuid: string,\n targetOrganizationId: number,\n newCreatorId: number\n ): Promise<{\n targetOrganization: { id: number; name: string };\n newCreator: { id: number; name: string; email: string };\n currentOrganization: { id: number | null; name: string | null };\n impact: {\n accountsToMove: number;\n accountsToDuplicate: number;\n accountsToRemap: number;\n totalMembers: number;\n };\n details: {\n movableAccounts: Array<{\n id: number;\n uuid: string;\n name: string;\n email: string | null;\n phone: string | null;\n }>;\n duplicateAccounts: Array<{\n id: number;\n uuid: string;\n name: string;\n email: string | null;\n phone: string | null;\n }>;\n remappableAccounts: Array<{\n currentAccount: {\n id: number;\n uuid: string;\n name: string;\n email: string | null;\n phone: string | null;\n };\n targetAccount: {\n id: number;\n uuid: string;\n name: string;\n email: string | null;\n phone: string | null;\n };\n }>;\n };\n }> {\n return this.fetch<{\n targetOrganization: { id: number; name: string };\n newCreator: { id: number; name: string; email: string };\n currentOrganization: { id: number | null; name: string | null };\n impact: {\n accountsToMove: number;\n accountsToDuplicate: number;\n accountsToRemap: number;\n totalMembers: number;\n };\n details: {\n movableAccounts: Array<{\n id: number;\n uuid: string;\n name: string;\n email: string | null;\n phone: string | null;\n }>;\n duplicateAccounts: Array<{\n id: number;\n uuid: string;\n name: string;\n email: string | null;\n phone: string | null;\n }>;\n remappableAccounts: Array<{\n currentAccount: {\n id: number;\n uuid: string;\n name: string;\n email: string | null;\n phone: string | null;\n };\n targetAccount: {\n id: number;\n uuid: string;\n name: string;\n email: string | null;\n phone: string | null;\n };\n }>;\n };\n }>(`admin/workspaces/${workspaceUuid}/change-org/preview`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n targetOrganizationId,\n newCreatorId,\n }),\n });\n }\n\n async changeWorkspaceOrganization(\n workspaceUuid: string,\n targetOrganizationId: number,\n newCreatorId: number\n ): Promise<{\n success: boolean;\n workspace: {\n uuid: string;\n name: string;\n organizationId: number;\n creatorId: number;\n };\n migration: {\n accountsMoved: number;\n accountsCreated: number;\n accountsRemapped: number;\n };\n }> {\n return this.fetch<{\n success: boolean;\n workspace: {\n uuid: string;\n name: string;\n organizationId: number;\n creatorId: number;\n };\n migration: {\n accountsMoved: number;\n accountsCreated: number;\n accountsRemapped: number;\n };\n }>(`admin/workspaces/${workspaceUuid}/change-org`, {\n method: 'POST',\n body: JSON.stringify({\n targetOrganizationId,\n newCreatorId,\n }),\n });\n }\n\n // ===== Stripe Invoice Management =====\n\n async createStripeInvoice(\n accountId: number,\n data: {\n customer: string;\n description?: string;\n collectionMethod: 'charge_automatically' | 'send_invoice';\n daysUntilDue?: number;\n autoAdvance?: boolean;\n metadata?: Record<string, string>;\n }\n ): Promise<{\n id: string;\n number: string;\n status: string;\n collectionMethod: string;\n amountDue: number;\n amountPaid: number;\n amountRemaining: number;\n currency: string;\n created: number;\n dueDate: number | null;\n paid: boolean;\n hostedInvoiceUrl: string | null;\n invoicePdf: string | null;\n customerEmail: string | null;\n description: string | null;\n }> {\n return this.fetch<{\n id: string;\n number: string;\n status: string;\n collectionMethod: string;\n amountDue: number;\n amountPaid: number;\n amountRemaining: number;\n currency: string;\n created: number;\n dueDate: number | null;\n paid: boolean;\n hostedInvoiceUrl: string | null;\n invoicePdf: string | null;\n customerEmail: string | null;\n description: string | null;\n }>(`admin/accounts/${accountId}/stripe/invoices`, {\n method: 'POST',\n body: JSON.stringify({\n customer: data.customer,\n description: data.description,\n collection_method: data.collectionMethod,\n days_until_due: data.daysUntilDue,\n auto_advance: data.autoAdvance,\n metadata: data.metadata,\n }),\n });\n }\n\n async getStripeInvoices(\n accountId: number,\n options?: { limit?: number; startingAfter?: string }\n ): Promise<\n Array<{\n id: string;\n number: string;\n status: string;\n collectionMethod: string;\n amountDue: number;\n amountPaid: number;\n amountRemaining: number;\n currency: string;\n created: number;\n dueDate: number | null;\n paid: boolean;\n hostedInvoiceUrl: string | null;\n invoicePdf: string | null;\n description: string | null;\n periodStart: number | null;\n periodEnd: number | null;\n }>\n > {\n const params = new URLSearchParams();\n if (options?.limit) params.append('limit', options.limit.toString());\n if (options?.startingAfter) params.append('starting_after', options.startingAfter);\n\n return this.fetch<\n Array<{\n id: string;\n number: string;\n status: string;\n collectionMethod: string;\n amountDue: number;\n amountPaid: number;\n amountRemaining: number;\n currency: string;\n created: number;\n dueDate: number | null;\n paid: boolean;\n hostedInvoiceUrl: string | null;\n invoicePdf: string | null;\n description: string | null;\n periodStart: number | null;\n periodEnd: number | null;\n }>\n >(`admin/accounts/${accountId}/stripe/invoices?${params.toString()}`);\n }\n\n async getStripeUpcomingInvoice(\n accountId: number,\n subscriptionId?: string\n ): Promise<{\n amountDue: number;\n amountPaid: number;\n amountRemaining: number;\n currency: string;\n periodStart: number;\n periodEnd: number;\n subtotal: number;\n tax: number;\n total: number;\n lineItems: Array<{\n id: string;\n description: string | null;\n amount: number;\n currency: string;\n quantity: number;\n unitAmount: number;\n productName: string | null;\n productDescription: string | null;\n period: {\n start: number;\n end: number;\n };\n }>;\n customer: string;\n subscription: string | null;\n }> {\n const params = new URLSearchParams();\n if (subscriptionId) params.append('subscription_id', subscriptionId);\n\n return this.fetch<{\n amountDue: number;\n amountPaid: number;\n amountRemaining: number;\n currency: string;\n periodStart: number;\n periodEnd: number;\n subtotal: number;\n tax: number;\n total: number;\n lineItems: Array<{\n id: string;\n description: string | null;\n amount: number;\n currency: string;\n quantity: number;\n unitAmount: number;\n productName: string | null;\n productDescription: string | null;\n period: {\n start: number;\n end: number;\n };\n }>;\n customer: string;\n subscription: string | null;\n }>(`admin/accounts/${accountId}/stripe/upcoming-invoice?${params.toString()}`);\n }\n\n // Billing Dashboard API\n async getWorkspaceUsageDashboard(workspaceUuid: string): Promise<UsageDashboardResponse> {\n return this.fetch<UsageDashboardResponse>(\n `admin/workspaces/${workspaceUuid}/usage-dashboard`\n );\n }\n\n // Product Stripe Sync API\n async compareProductsWithStripe(workspaceUuid?: string): Promise<CompareWithStripeResponse> {\n const params = workspaceUuid ? `?workspace_uuid=${encodeURIComponent(workspaceUuid)}` : '';\n return this.fetch<CompareWithStripeResponse>(`admin/products/compare-stripe${params}`);\n }\n\n async syncProductToStripe(\n productId: number,\n request?: SyncProductToStripeRequest\n ): Promise<SyncProductToStripeResponse> {\n return this.fetch<SyncProductToStripeResponse>(`admin/products/${productId}/sync-stripe`, {\n method: 'POST',\n body: JSON.stringify({ ...request, productId }),\n });\n }\n\n // Search Stripe products\n async searchStripeProducts(\n query: string,\n limit: number = 10\n ): Promise<\n Array<{\n id: string;\n name: string;\n description: string | null;\n active: boolean;\n created: number;\n metadata: Record<string, string>;\n }>\n > {\n const params = new URLSearchParams({ query, limit: limit.toString() });\n return this.fetch<\n Array<{\n id: string;\n name: string;\n description: string | null;\n active: boolean;\n created: number;\n metadata: Record<string, string>;\n }>\n >(`admin/products/stripe/search?${params.toString()}`);\n }\n\n // ===== Subscriptions API =====\n\n async getSubscriptionsAsAdmin(options?: {\n productId?: number;\n productType?: string;\n customerId?: number;\n organizationId?: number;\n accountId?: number;\n isDirect?: boolean;\n status?: string;\n page?: number;\n pageSize?: number;\n }): Promise<PaginatedSubscriptionsResponse> {\n const params = new URLSearchParams();\n if (options?.productId) params.append('product_id', options.productId.toString());\n if (options?.productType) params.append('product_type', options.productType);\n if (options?.customerId) params.append('customer_id', options.customerId.toString());\n if (options?.organizationId)\n params.append('organization_id', options.organizationId.toString());\n if (options?.accountId) params.append('account_id', options.accountId.toString());\n if (options?.isDirect !== undefined) params.append('is_direct', options.isDirect.toString());\n if (options?.status) params.append('status', options.status);\n if (options?.page) params.append('page', options.page.toString());\n if (options?.pageSize) params.append('page_size', options.pageSize.toString());\n const queryString = params.toString();\n return this.fetch<PaginatedSubscriptionsResponse>(\n `admin/subscriptions${queryString ? `?${queryString}` : ''}`\n );\n }\n\n async getSubscriptionAsAdmin(subscriptionId: number): Promise<Subscription> {\n return this.fetch<Subscription>(`admin/subscriptions/${subscriptionId}`);\n }\n\n async updateSubscriptionStatusAsAdmin(\n subscriptionId: number,\n subscriptionStatus: string\n ): Promise<Subscription> {\n return this.fetch<Subscription>(`admin/subscriptions/${subscriptionId}`, {\n method: 'PUT',\n body: JSON.stringify({ subscription_status: subscriptionStatus }),\n });\n }\n\n async updateSubscriptionCreditSettingsAsAdmin(\n subscriptionId: number,\n settings: {\n extra_usage_enabled?: boolean;\n reload_amount_cents?: number | null;\n reload_threshold_cents?: number | null;\n monthly_reload_limit_cents?: number | null;\n }\n ): Promise<Subscription> {\n return this.fetch<Subscription>(`admin/subscriptions/${subscriptionId}`, {\n method: 'PUT',\n body: JSON.stringify(settings),\n });\n }\n\n /** Grant credits to a subscription (superuser only). */\n async grantCreditsAsAdmin(\n subscriptionId: number,\n creditUnits: number,\n grantType: string,\n reason: string\n ): Promise<{\n success: boolean;\n grantId: number;\n creditUnits: number;\n grantedBy: string;\n reason: string;\n }> {\n return this.fetch(`admin/subscriptions/${subscriptionId}/grant-credits`, {\n method: 'POST',\n body: JSON.stringify({ credit_units: creditUnits, grant_type: grantType, reason }),\n });\n }\n\n /** List credit grants for a subscription (superuser only). */\n async listCreditGrantsAsAdmin(subscriptionId: number): Promise<\n {\n id: number;\n uuid: string;\n grantType: string;\n creditUnits: number;\n remainingUnits: number;\n amountCents: number;\n status: string;\n effectiveAt: string | null;\n expiresAt: string | null;\n createdAt: string | null;\n createdBy: string | null;\n reason: string | null;\n }[]\n > {\n return this.fetch(`admin/subscriptions/${subscriptionId}/credit-grants`);\n }\n\n // ===== Usage API =====\n\n async getUsageReport(request: UsageReportRequest): Promise<UsageReport> {\n return this.fetch<UsageReport>('admin/usage', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n // Voice Metrics API\n async getVoiceMetrics(options?: {\n hours?: number;\n period?: number;\n workspace_uuid?: string;\n organization_id?: number;\n engine?: string;\n channel?: string;\n }): Promise<VoiceMetricsResponse> {\n const params = new URLSearchParams();\n if (options?.hours) params.append('hours', options.hours.toString());\n if (options?.period) params.append('period', options.period.toString());\n if (options?.workspace_uuid) params.append('workspace_uuid', options.workspace_uuid);\n if (options?.organization_id != null)\n params.append('organization_id', options.organization_id.toString());\n if (options?.engine) params.append('engine', options.engine);\n if (options?.channel) params.append('channel', options.channel);\n const qs = params.toString();\n return this.fetch<VoiceMetricsResponse>(`admin/voice-metrics${qs ? `?${qs}` : ''}`);\n }\n\n // Health Dashboard API\n async getHealthMetrics(request: HealthMetricsRequest): Promise<HealthMetricsResponse> {\n return this.fetch<HealthMetricsResponse>('admin/health/metrics', {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n async getHealthDetail(\n workspaceUuid: string,\n request: HealthDetailRequest\n ): Promise<WorkspaceHealthDetail> {\n return this.fetch<WorkspaceHealthDetail>(`admin/health/detail/${workspaceUuid}`, {\n method: 'POST',\n body: JSON.stringify(request),\n });\n }\n\n // ===== Reseller Management =====\n\n async getResellers(options?: {\n search?: string;\n page?: number;\n pageSize?: number;\n }): Promise<PaginatedResponse<Reseller>> {\n const params = new URLSearchParams();\n if (options?.search) params.set('search', options.search);\n if (options?.page) params.set('page', String(options.page));\n if (options?.pageSize) params.set('page_size', String(options.pageSize));\n const qs = params.toString();\n return this.fetch<PaginatedResponse<Reseller>>(`admin/resellers${qs ? `?${qs}` : ''}`);\n }\n\n async getReseller(resellerId: number): Promise<Reseller> {\n return this.fetch<Reseller>(`admin/resellers/${resellerId}`);\n }\n\n async createReseller(data: CreateResellerRequest): Promise<Reseller> {\n return this.fetch<Reseller>('admin/resellers', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async updateReseller(resellerId: number, data: UpdateResellerRequest): Promise<Reseller> {\n return this.fetch<Reseller>(`admin/resellers/${resellerId}`, {\n method: 'PUT',\n body: JSON.stringify(data),\n });\n }\n\n async getResellerAccounts(resellerId: number): Promise<ResellerAccount[]> {\n return this.fetch<ResellerAccount[]>(`admin/resellers/${resellerId}/accounts`);\n }\n\n async linkResellerToAccount(\n resellerId: number,\n data: LinkResellerAccountRequest\n ): Promise<ResellerAccount> {\n return this.fetch<ResellerAccount>(`admin/resellers/${resellerId}/accounts`, {\n method: 'POST',\n body: JSON.stringify({ account_id: data.accountId, role: data.role }),\n });\n }\n\n async unlinkResellerFromAccount(resellerId: number, accountId: number): Promise<void> {\n await this.fetch<void>(`admin/resellers/${resellerId}/accounts/${accountId}`, {\n method: 'DELETE',\n });\n }\n\n // ===== Invoice Management =====\n\n async generateInvoice(data: {\n subscriptionId: number;\n periodStart: string;\n periodEnd: string;\n regenerate?: boolean;\n }): Promise<Invoice> {\n return this.fetch<Invoice>('admin/invoices/generate', {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n async getInvoices(\n subscriptionId?: number,\n pageOpts?: { page?: number; pageSize?: number }\n ): Promise<PaginatedResponse<Invoice>> {\n const params = new URLSearchParams();\n if (subscriptionId !== undefined) params.set('subscription_id', String(subscriptionId));\n if (pageOpts?.page !== undefined) params.set('page', String(pageOpts.page));\n if (pageOpts?.pageSize !== undefined) params.set('pageSize', String(pageOpts.pageSize));\n const qs = params.toString();\n return this.fetch<PaginatedResponse<Invoice>>(`admin/invoices${qs ? `?${qs}` : ''}`);\n }\n\n async getBillingPeriods(subscriptionId: number): Promise<BillingPeriod[]> {\n return this.fetch<BillingPeriod[]>(\n `admin/invoices/periods?subscription_id=${subscriptionId}`\n );\n }\n\n async getInvoiceDownloadUrl(\n invoiceId: number\n ): Promise<{ downloadUrl: string; invoiceNumber: string }> {\n return this.fetch<{ downloadUrl: string; invoiceNumber: string }>(\n `admin/invoices/${invoiceId}/download`\n );\n }\n\n async getReceiptDownloadUrl(\n invoiceId: number\n ): Promise<{ downloadUrl: string; invoiceNumber: string }> {\n return this.fetch<{ downloadUrl: string; invoiceNumber: string }>(\n `admin/invoices/${invoiceId}/receipt`\n );\n }\n\n async recordInvoicePayment(invoiceId: number, data: RecordPaymentRequest): Promise<Invoice> {\n return this.fetch<Invoice>(`admin/invoices/${invoiceId}/record-payment`, {\n method: 'POST',\n body: JSON.stringify(data),\n });\n }\n\n // ===== Admin Temporal Inspection (PHI-safe, read-only) =====\n\n /**\n * Server-enforced bounds for admin Temporal queries (lookback, thresholds,\n * page sizes, history event cap). Superuser only.\n */\n async getTemporalAdminConfig(): Promise<TemporalAdminConfig> {\n return this.fetch<TemporalAdminConfig>('admin/temporal/config');\n }\n\n /**\n * List recent Temporal workflows in FAILED, TIMED_OUT, or TERMINATED\n * status. Returns only PHI-safe operational metadata. Superuser only.\n *\n * Pass `options.status` to filter to a single status and enable\n * deep pagination via `nextPageToken`. Merged mode (no status) returns\n * the first page only and always emits `nextPageToken: null`.\n */\n async listFailedTemporalWorkflows(\n options: AdminTemporalFailedQuery = {}\n ): Promise<FailedWorkflowsResponse> {\n const params = new URLSearchParams();\n if (options.lookbackHours !== undefined)\n params.set('lookback_hours', String(options.lookbackHours));\n if (options.pageSize !== undefined) params.set('page_size', String(options.pageSize));\n if (options.status) params.set('status', String(options.status));\n if (options.nextPageToken) params.set('next_page_token', options.nextPageToken);\n appendTemporalWorkspaceParams(params, options);\n const qs = params.toString();\n return this.fetch<FailedWorkflowsResponse>(\n `admin/temporal/workflows/failed${qs ? `?${qs}` : ''}`\n );\n }\n\n /**\n * List open Temporal workflows older than the stuck threshold.\n * Superuser only.\n */\n async listStuckTemporalWorkflows(\n options: AdminTemporalStuckQuery = {}\n ): Promise<StuckWorkflowsResponse> {\n const params = new URLSearchParams();\n if (options.thresholdMinutes !== undefined)\n params.set('threshold_minutes', String(options.thresholdMinutes));\n if (options.pageSize !== undefined) params.set('page_size', String(options.pageSize));\n if (options.nextPageToken) params.set('next_page_token', options.nextPageToken);\n appendTemporalWorkspaceParams(params, options);\n const qs = params.toString();\n return this.fetch<StuckWorkflowsResponse>(\n `admin/temporal/workflows/stuck${qs ? `?${qs}` : ''}`\n );\n }\n\n /**\n * Return grouped counts for recent Temporal executions. Superuser only.\n */\n async getTemporalSummary(\n options: AdminTemporalSummaryQuery = {}\n ): Promise<TemporalSummaryResponse> {\n const params = new URLSearchParams();\n if (options.lookbackHours !== undefined)\n params.set('lookback_hours', String(options.lookbackHours));\n appendTemporalWorkspaceParams(params, options);\n const qs = params.toString();\n return this.fetch<TemporalSummaryResponse>(\n `admin/temporal/workflows/summary${qs ? `?${qs}` : ''}`\n );\n }\n\n /**\n * Fetch metadata + bounded sanitized history summary for one Temporal\n * workflow. Superuser only. Does not return raw events or payloads.\n */\n async getTemporalWorkflowDetail(\n workflowId: string,\n options: AdminTemporalDetailQuery = {}\n ): Promise<WorkflowDetailResponse> {\n const params = new URLSearchParams();\n if (options.runId) params.set('run_id', options.runId);\n appendTemporalWorkspaceParams(params, options);\n const qs = params.toString();\n const encoded = encodeURIComponent(workflowId);\n return this.fetch<WorkflowDetailResponse>(\n `admin/temporal/workflows/${encoded}${qs ? `?${qs}` : ''}`\n );\n }\n}\n\n/**\n * Append the workspace filter params for admin Temporal endpoints.\n *\n * The server accepts a repeated `workspace_uuid` query parameter. For\n * backward compatibility with callers (including `gr admin temporal`)\n * that still pass a single `workspaceUuid`, we normalize both inputs\n * into the same repeated-parameter wire shape: a single value is\n * appended once; explicit `workspaceUuids` entries are appended in\n * order. Duplicates and blanks are dropped client-side so the final\n * URL stays compact.\n */\nfunction appendTemporalWorkspaceParams(\n params: URLSearchParams,\n options: {\n workspaceUuid?: string;\n workspaceUuids?: string[];\n }\n): void {\n const seen = new Set<string>();\n const push = (raw: string | undefined) => {\n if (!raw) return;\n const trimmed = raw.trim();\n if (!trimmed || seen.has(trimmed)) return;\n seen.add(trimmed);\n params.append('workspace_uuid', trimmed);\n };\n if (options.workspaceUuids) {\n for (const value of options.workspaceUuids) push(value);\n }\n push(options.workspaceUuid);\n}\n","import { GravityRailClient } from '@gravity-rail/sdk';\nimport { AdminApi } from '../api/admin';\nimport { AdminBindings, bindAdminMethods } from './bindings/admin';\n\n/**\n * ApiClient extends GravityRailClient with admin/superuser methods.\n *\n * This is the full-featured client used internally. For the public SDK,\n * use {@link GravityRailClient} from @gravity-rail/sdk which excludes\n * admin functionality.\n */\nexport class ApiClient extends GravityRailClient implements AdminBindings {\n // Admin API\n getAccounts!: AdminBindings['getAccounts'];\n getAccountDetails!: AdminBindings['getAccountDetails'];\n getAccountByUuid!: AdminBindings['getAccountByUuid'];\n getAccountMemberships!: AdminBindings['getAccountMemberships'];\n getAccountOrgMemberships!: AdminBindings['getAccountOrgMemberships'];\n createAccountOrgMembership!: AdminBindings['createAccountOrgMembership'];\n deleteAccountOrgMembership!: AdminBindings['deleteAccountOrgMembership'];\n getAccountMembership!: AdminBindings['getAccountMembership'];\n updateAccountMembership!: AdminBindings['updateAccountMembership'];\n createAccountMembership!: AdminBindings['createAccountMembership'];\n deleteAccountMembership!: AdminBindings['deleteAccountMembership'];\n updateAccountAsAdmin!: AdminBindings['updateAccountAsAdmin'];\n createAccountAsAdmin!: AdminBindings['createAccountAsAdmin'];\n deleteAccountAsAdmin!: AdminBindings['deleteAccountAsAdmin'];\n lookupAccount!: AdminBindings['lookupAccount'];\n exportAccountData!: AdminBindings['exportAccountData'];\n requestAccountDeletion!: AdminBindings['requestAccountDeletion'];\n cancelAccountDeletion!: AdminBindings['cancelAccountDeletion'];\n getOrganizations!: AdminBindings['getOrganizations'];\n getOrganization!: AdminBindings['getOrganization'];\n getOrganizationAsAdmin!: AdminBindings['getOrganizationAsAdmin'];\n getOrganizationMembersAsAdmin!: AdminBindings['getOrganizationMembersAsAdmin'];\n createOrganization!: AdminBindings['createOrganization'];\n updateOrganization!: AdminBindings['updateOrganization'];\n deleteOrganization!: AdminBindings['deleteOrganization'];\n joinOrganization!: AdminBindings['joinOrganization'];\n leaveOrganization!: AdminBindings['leaveOrganization'];\n generateLogoUploadUrl!: AdminBindings['generateLogoUploadUrl'];\n importProducts!: AdminBindings['importProducts'];\n createProductAsAdmin!: AdminBindings['createProductAsAdmin'];\n getProductsAsAdmin!: AdminBindings['getProductsAsAdmin'];\n getProductAsAdmin!: AdminBindings['getProductAsAdmin'];\n updateProductAsAdmin!: AdminBindings['updateProductAsAdmin'];\n deleteProductAsAdmin!: AdminBindings['deleteProductAsAdmin'];\n getWorkspacesAsAdmin!: AdminBindings['getWorkspacesAsAdmin'];\n getWorkspaceAsAdmin!: AdminBindings['getWorkspaceAsAdmin'];\n getWorkspaceByNumericIdAsAdmin!: AdminBindings['getWorkspaceByNumericIdAsAdmin'];\n createWorkspaceAsAdmin!: AdminBindings['createWorkspaceAsAdmin'];\n updateWorkspaceAsAdmin!: AdminBindings['updateWorkspaceAsAdmin'];\n deleteWorkspaceAsAdmin!: AdminBindings['deleteWorkspaceAsAdmin'];\n createSchemaAsAdmin!: AdminBindings['createSchemaAsAdmin'];\n migrateSchemaAsAdmin!: AdminBindings['migrateSchemaAsAdmin'];\n provisionWorkspaceAsAdmin!: AdminBindings['provisionWorkspaceAsAdmin'];\n refreshProvisionStatusAsAdmin!: AdminBindings['refreshProvisionStatusAsAdmin'];\n enableMaintenanceMode!: AdminBindings['enableMaintenanceMode'];\n disableMaintenanceMode!: AdminBindings['disableMaintenanceMode'];\n getWorkspaceHealth!: AdminBindings['getWorkspaceHealth'];\n provisionPlanFeatures!: AdminBindings['provisionPlanFeatures'];\n validateWorkflowAccessAsAdmin!: AdminBindings['validateWorkflowAccessAsAdmin'];\n mergeMembers!: AdminBindings['mergeMembers'];\n getAdminWorkspaceMember!: AdminBindings['getAdminWorkspaceMember'];\n createAdminWorkspaceMember!: AdminBindings['createAdminWorkspaceMember'];\n updateAdminWorkspaceMember!: AdminBindings['updateAdminWorkspaceMember'];\n getAdminWorkspaceMemberRoles!: AdminBindings['getAdminWorkspaceMemberRoles'];\n getMissingMemberships!: AdminBindings['getMissingMemberships'];\n linkMissingMembership!: AdminBindings['linkMissingMembership'];\n getUnmappedPhoneNumbers!: AdminBindings['getUnmappedPhoneNumbers'];\n getWorkspaceUnmappedPhoneNumbers!: AdminBindings['getWorkspaceUnmappedPhoneNumbers'];\n getWorkspacePhoneNumbersAsAdmin!: AdminBindings['getWorkspacePhoneNumbersAsAdmin'];\n getProviderPhoneNumbers!: AdminBindings['getProviderPhoneNumbers'];\n getProviderPhoneNumber!: AdminBindings['getProviderPhoneNumber'];\n updateProviderPhoneNumber!: AdminBindings['updateProviderPhoneNumber'];\n mapMainAccountPhone!: AdminBindings['mapMainAccountPhone'];\n unmapPhoneNumber!: AdminBindings['unmapPhoneNumber'];\n searchAvailablePhoneNumbersAsAdmin!: AdminBindings['searchAvailablePhoneNumbersAsAdmin'];\n purchasePhoneNumberAsAdmin!: AdminBindings['purchasePhoneNumberAsAdmin'];\n startBulkPhoneClassification!: AdminBindings['startBulkPhoneClassification'];\n getOrgA2PStatusAsAdmin!: AdminBindings['getOrgA2PStatusAsAdmin'];\n resetOrgA2PStatusAsAdmin!: AdminBindings['resetOrgA2PStatusAsAdmin'];\n getSiteMappings!: AdminBindings['getSiteMappings'];\n getSiteMapping!: AdminBindings['getSiteMapping'];\n updateSiteMapping!: AdminBindings['updateSiteMapping'];\n updateSiteMappingWorkspace!: AdminBindings['updateSiteMappingWorkspace'];\n adminDeleteSiteMapping!: AdminBindings['adminDeleteSiteMapping'];\n createSiteMapping!: AdminBindings['createSiteMapping'];\n createOrUpdateSiteMapping!: AdminBindings['createOrUpdateSiteMapping'];\n deleteSiteMapping!: AdminBindings['deleteSiteMapping'];\n getInboxMappings!: AdminBindings['getInboxMappings'];\n getInboxMapping!: AdminBindings['getInboxMapping'];\n updateInboxMapping!: AdminBindings['updateInboxMapping'];\n deleteAdminInboxMapping!: AdminBindings['deleteAdminInboxMapping'];\n generateChatSummaries!: AdminBindings['generateChatSummaries'];\n executeQuery!: AdminBindings['executeQuery'];\n listAllThemes!: AdminBindings['listAllThemes'];\n migrateRoutineCadenceKeys!: AdminBindings['migrateRoutineCadenceKeys'];\n startBulkTOSAcceptance!: AdminBindings['startBulkTOSAcceptance'];\n startTokenUsageBackfill!: AdminBindings['startTokenUsageBackfill'];\n updateChatMessage!: AdminBindings['updateChatMessage'];\n createCustomerFromAccount!: AdminBindings['createCustomerFromAccount'];\n getCustomers!: AdminBindings['getCustomers'];\n getCustomer!: AdminBindings['getCustomer'];\n createCustomer!: AdminBindings['createCustomer'];\n updateCustomer!: AdminBindings['updateCustomer'];\n getCustomerAccounts!: AdminBindings['getCustomerAccounts'];\n linkCustomerToAccount!: AdminBindings['linkCustomerToAccount'];\n unlinkCustomerFromAccount!: AdminBindings['unlinkCustomerFromAccount'];\n syncCustomerToStripe!: AdminBindings['syncCustomerToStripe'];\n getStripeCustomer!: AdminBindings['getStripeCustomer'];\n createStripeCustomer!: AdminBindings['createStripeCustomer'];\n updateStripeCustomer!: AdminBindings['updateStripeCustomer'];\n getStripeSubscriptions!: AdminBindings['getStripeSubscriptions'];\n createStripeSubscription!: AdminBindings['createStripeSubscription'];\n createDirectSubscription!: AdminBindings['createDirectSubscription'];\n updateStripeSubscription!: AdminBindings['updateStripeSubscription'];\n cancelStripeSubscription!: AdminBindings['cancelStripeSubscription'];\n provisionWorkspaceForSubscription!: AdminBindings['provisionWorkspaceForSubscription'];\n associateWorkspaceWithSubscription!: AdminBindings['associateWorkspaceWithSubscription'];\n createSubscriptionPaymentLink!: AdminBindings['createSubscriptionPaymentLink'];\n createSetupIntent!: AdminBindings['createSetupIntent'];\n getStripePaymentMethods!: AdminBindings['getStripePaymentMethods'];\n attachStripePaymentMethod!: AdminBindings['attachStripePaymentMethod'];\n detachStripePaymentMethod!: AdminBindings['detachStripePaymentMethod'];\n setDefaultStripePaymentMethod!: AdminBindings['setDefaultStripePaymentMethod'];\n createCustomerSetupIntent!: AdminBindings['createCustomerSetupIntent'];\n getCustomerPaymentMethods!: AdminBindings['getCustomerPaymentMethods'];\n attachCustomerPaymentMethod!: AdminBindings['attachCustomerPaymentMethod'];\n detachCustomerPaymentMethod!: AdminBindings['detachCustomerPaymentMethod'];\n setDefaultCustomerPaymentMethod!: AdminBindings['setDefaultCustomerPaymentMethod'];\n convertSubscriptionToStripe!: AdminBindings['convertSubscriptionToStripe'];\n previewWorkspaceOrganizationChange!: AdminBindings['previewWorkspaceOrganizationChange'];\n changeWorkspaceOrganization!: AdminBindings['changeWorkspaceOrganization'];\n createStripeInvoice!: AdminBindings['createStripeInvoice'];\n getStripeInvoices!: AdminBindings['getStripeInvoices'];\n getStripeUpcomingInvoice!: AdminBindings['getStripeUpcomingInvoice'];\n getWorkspaceUsageDashboard!: AdminBindings['getWorkspaceUsageDashboard'];\n compareProductsWithStripe!: AdminBindings['compareProductsWithStripe'];\n syncProductToStripe!: AdminBindings['syncProductToStripe'];\n searchStripeProducts!: AdminBindings['searchStripeProducts'];\n getUsageReport!: AdminBindings['getUsageReport'];\n getSubscriptionsAsAdmin!: AdminBindings['getSubscriptionsAsAdmin'];\n getSubscriptionAsAdmin!: AdminBindings['getSubscriptionAsAdmin'];\n updateSubscriptionStatusAsAdmin!: AdminBindings['updateSubscriptionStatusAsAdmin'];\n updateSubscriptionCreditSettingsAsAdmin!: AdminBindings['updateSubscriptionCreditSettingsAsAdmin'];\n grantCreditsAsAdmin!: AdminBindings['grantCreditsAsAdmin'];\n listCreditGrantsAsAdmin!: AdminBindings['listCreditGrantsAsAdmin'];\n getVoiceMetrics!: AdminBindings['getVoiceMetrics'];\n getHealthMetrics!: AdminBindings['getHealthMetrics'];\n getHealthDetail!: AdminBindings['getHealthDetail'];\n listWorkspaceChats!: AdminBindings['listWorkspaceChats'];\n getWorkspaceChat!: AdminBindings['getWorkspaceChat'];\n rateWorkspaceChatMessage!: AdminBindings['rateWorkspaceChatMessage'];\n getTemporalAdminConfig!: AdminBindings['getTemporalAdminConfig'];\n listFailedTemporalWorkflows!: AdminBindings['listFailedTemporalWorkflows'];\n listStuckTemporalWorkflows!: AdminBindings['listStuckTemporalWorkflows'];\n getTemporalSummary!: AdminBindings['getTemporalSummary'];\n getTemporalWorkflowDetail!: AdminBindings['getTemporalWorkflowDetail'];\n getResellers!: AdminBindings['getResellers'];\n getReseller!: AdminBindings['getReseller'];\n createReseller!: AdminBindings['createReseller'];\n updateReseller!: AdminBindings['updateReseller'];\n getResellerAccounts!: AdminBindings['getResellerAccounts'];\n linkResellerToAccount!: AdminBindings['linkResellerToAccount'];\n unlinkResellerFromAccount!: AdminBindings['unlinkResellerFromAccount'];\n getBillingPeriods!: AdminBindings['getBillingPeriods'];\n generateInvoice!: AdminBindings['generateInvoice'];\n getInvoices!: AdminBindings['getInvoices'];\n getInvoiceDownloadUrl!: AdminBindings['getInvoiceDownloadUrl'];\n getReceiptDownloadUrl!: AdminBindings['getReceiptDownloadUrl'];\n recordInvoicePayment!: AdminBindings['recordInvoicePayment'];\n\n protected adminApi: AdminApi;\n\n constructor(apiKey: string | undefined, baseUrl: string, customFetch?: typeof fetch) {\n super(apiKey, baseUrl, customFetch);\n this.adminApi = new AdminApi(apiKey, baseUrl, customFetch);\n bindAdminMethods(this, this.adminApi);\n }\n\n /**\n * Propagates acting member switches to the admin API module as well.\n */\n override setActingMember(memberUuid: string | undefined) {\n super.setActingMember(memberUuid);\n if (typeof this.adminApi.setActingMember === 'function') {\n this.adminApi.setActingMember(memberUuid);\n }\n }\n}\n","import { AdminApi } from '../../api';\n\nexport interface AdminBindings {\n // Accounts\n getAccounts: AdminApi['getAccounts'];\n getAccountDetails: AdminApi['getAccountDetails'];\n getAccountByUuid: AdminApi['getAccountByUuid'];\n getAccountMemberships: AdminApi['getAccountMemberships'];\n getAccountOrgMemberships: AdminApi['getAccountOrgMemberships'];\n createAccountOrgMembership: AdminApi['createAccountOrgMembership'];\n deleteAccountOrgMembership: AdminApi['deleteAccountOrgMembership'];\n getAccountMembership: AdminApi['getAccountMembership'];\n updateAccountMembership: AdminApi['updateAccountMembership'];\n createAccountMembership: AdminApi['createAccountMembership'];\n deleteAccountMembership: AdminApi['deleteAccountMembership'];\n updateAccountAsAdmin: AdminApi['updateAccountAsAdmin'];\n createAccountAsAdmin: AdminApi['createAccountAsAdmin'];\n deleteAccountAsAdmin: AdminApi['deleteAccountAsAdmin'];\n lookupAccount: AdminApi['lookupAccount'];\n exportAccountData: AdminApi['exportAccountData'];\n requestAccountDeletion: AdminApi['requestAccountDeletion'];\n cancelAccountDeletion: AdminApi['cancelAccountDeletion'];\n\n // Organizations\n getOrganizations: AdminApi['getOrganizations'];\n getOrganization: AdminApi['getOrganization'];\n getOrganizationAsAdmin: AdminApi['getOrganizationAsAdmin'];\n getOrganizationMembersAsAdmin: AdminApi['getOrganizationMembersAsAdmin'];\n createOrganization: AdminApi['createOrganization'];\n updateOrganization: AdminApi['updateOrganization'];\n deleteOrganization: AdminApi['deleteOrganization'];\n joinOrganization: AdminApi['joinOrganization'];\n leaveOrganization: AdminApi['leaveOrganization'];\n generateLogoUploadUrl: AdminApi['generateLogoUploadUrl'];\n\n // Products\n importProducts: AdminApi['importProducts'];\n createProductAsAdmin: AdminApi['createProductAsAdmin'];\n getProductsAsAdmin: AdminApi['getProductsAsAdmin'];\n getProductAsAdmin: AdminApi['getProductAsAdmin'];\n updateProductAsAdmin: AdminApi['updateProductAsAdmin'];\n deleteProductAsAdmin: AdminApi['deleteProductAsAdmin'];\n\n // Workspaces\n getWorkspacesAsAdmin: AdminApi['getWorkspacesAsAdmin'];\n getWorkspaceAsAdmin: AdminApi['getWorkspaceAsAdmin'];\n getWorkspaceByNumericIdAsAdmin: AdminApi['getWorkspaceByNumericIdAsAdmin'];\n createWorkspaceAsAdmin: AdminApi['createWorkspaceAsAdmin'];\n updateWorkspaceAsAdmin: AdminApi['updateWorkspaceAsAdmin'];\n deleteWorkspaceAsAdmin: AdminApi['deleteWorkspaceAsAdmin'];\n createSchemaAsAdmin: AdminApi['createSchemaAsAdmin'];\n migrateSchemaAsAdmin: AdminApi['migrateSchemaAsAdmin'];\n provisionWorkspaceAsAdmin: AdminApi['provisionWorkspaceAsAdmin'];\n refreshProvisionStatusAsAdmin: AdminApi['refreshProvisionStatusAsAdmin'];\n enableMaintenanceMode: AdminApi['enableMaintenanceMode'];\n disableMaintenanceMode: AdminApi['disableMaintenanceMode'];\n getWorkspaceHealth: AdminApi['getWorkspaceHealth'];\n provisionPlanFeatures: AdminApi['provisionPlanFeatures'];\n validateWorkflowAccessAsAdmin: AdminApi['validateWorkflowAccessAsAdmin'];\n\n // Members\n mergeMembers: AdminApi['mergeMembers'];\n getAdminWorkspaceMember: AdminApi['getAdminWorkspaceMember'];\n createAdminWorkspaceMember: AdminApi['createAdminWorkspaceMember'];\n updateAdminWorkspaceMember: AdminApi['updateAdminWorkspaceMember'];\n getAdminWorkspaceMemberRoles: AdminApi['getAdminWorkspaceMemberRoles'];\n getMissingMemberships: AdminApi['getMissingMemberships'];\n linkMissingMembership: AdminApi['linkMissingMembership'];\n\n // Phone Numbers\n getUnmappedPhoneNumbers: AdminApi['getUnmappedPhoneNumbers'];\n getWorkspaceUnmappedPhoneNumbers: AdminApi['getWorkspaceUnmappedPhoneNumbers'];\n getWorkspacePhoneNumbersAsAdmin: AdminApi['getWorkspacePhoneNumbersAsAdmin'];\n getProviderPhoneNumbers: AdminApi['getProviderPhoneNumbers'];\n getProviderPhoneNumber: AdminApi['getProviderPhoneNumber'];\n updateProviderPhoneNumber: AdminApi['updateProviderPhoneNumber'];\n mapMainAccountPhone: AdminApi['mapMainAccountPhone'];\n unmapPhoneNumber: AdminApi['unmapPhoneNumber'];\n searchAvailablePhoneNumbersAsAdmin: AdminApi['searchAvailablePhoneNumbersAsAdmin'];\n purchasePhoneNumberAsAdmin: AdminApi['purchasePhoneNumberAsAdmin'];\n startBulkPhoneClassification: AdminApi['startBulkPhoneClassification'];\n getOrgA2PStatusAsAdmin: AdminApi['getOrgA2PStatusAsAdmin'];\n resetOrgA2PStatusAsAdmin: AdminApi['resetOrgA2PStatusAsAdmin'];\n\n // Site Mappings\n getSiteMappings: AdminApi['getSiteMappings'];\n getSiteMapping: AdminApi['getSiteMapping'];\n updateSiteMapping: AdminApi['updateSiteMapping'];\n updateSiteMappingWorkspace: AdminApi['updateSiteMappingWorkspace'];\n adminDeleteSiteMapping: AdminApi['adminDeleteSiteMapping'];\n createSiteMapping: AdminApi['createSiteMapping'];\n createOrUpdateSiteMapping: AdminApi['createOrUpdateSiteMapping'];\n deleteSiteMapping: AdminApi['deleteSiteMapping'];\n\n // Inbox Mappings\n getInboxMappings: AdminApi['getInboxMappings'];\n getInboxMapping: AdminApi['getInboxMapping'];\n updateInboxMapping: AdminApi['updateInboxMapping'];\n deleteAdminInboxMapping: AdminApi['deleteAdminInboxMapping'];\n\n // Utilities\n generateChatSummaries: AdminApi['generateChatSummaries'];\n executeQuery: AdminApi['executeQuery'];\n listAllThemes: AdminApi['listAllThemes'];\n migrateRoutineCadenceKeys: AdminApi['migrateRoutineCadenceKeys'];\n startBulkTOSAcceptance: AdminApi['startBulkTOSAcceptance'];\n startTokenUsageBackfill: AdminApi['startTokenUsageBackfill'];\n updateChatMessage: AdminApi['updateChatMessage'];\n\n // Customer Management\n createCustomerFromAccount: AdminApi['createCustomerFromAccount'];\n getCustomers: AdminApi['getCustomers'];\n getCustomer: AdminApi['getCustomer'];\n createCustomer: AdminApi['createCustomer'];\n updateCustomer: AdminApi['updateCustomer'];\n getCustomerAccounts: AdminApi['getCustomerAccounts'];\n linkCustomerToAccount: AdminApi['linkCustomerToAccount'];\n unlinkCustomerFromAccount: AdminApi['unlinkCustomerFromAccount'];\n syncCustomerToStripe: AdminApi['syncCustomerToStripe'];\n\n // Stripe Customer Management\n getStripeCustomer: AdminApi['getStripeCustomer'];\n createStripeCustomer: AdminApi['createStripeCustomer'];\n updateStripeCustomer: AdminApi['updateStripeCustomer'];\n\n // Stripe Subscription Management\n getStripeSubscriptions: AdminApi['getStripeSubscriptions'];\n createStripeSubscription: AdminApi['createStripeSubscription'];\n createDirectSubscription: AdminApi['createDirectSubscription'];\n updateStripeSubscription: AdminApi['updateStripeSubscription'];\n cancelStripeSubscription: AdminApi['cancelStripeSubscription'];\n provisionWorkspaceForSubscription: AdminApi['provisionWorkspaceForSubscription'];\n associateWorkspaceWithSubscription: AdminApi['associateWorkspaceWithSubscription'];\n createSubscriptionPaymentLink: AdminApi['createSubscriptionPaymentLink'];\n\n // Stripe Payment Methods (account-level — deprecated, use customer-level)\n createSetupIntent: AdminApi['createSetupIntent'];\n getStripePaymentMethods: AdminApi['getStripePaymentMethods'];\n attachStripePaymentMethod: AdminApi['attachStripePaymentMethod'];\n detachStripePaymentMethod: AdminApi['detachStripePaymentMethod'];\n setDefaultStripePaymentMethod: AdminApi['setDefaultStripePaymentMethod'];\n\n // Convert direct subscription to Stripe\n convertSubscriptionToStripe: AdminApi['convertSubscriptionToStripe'];\n\n // Stripe Payment Methods (customer-level)\n createCustomerSetupIntent: AdminApi['createCustomerSetupIntent'];\n getCustomerPaymentMethods: AdminApi['getCustomerPaymentMethods'];\n attachCustomerPaymentMethod: AdminApi['attachCustomerPaymentMethod'];\n detachCustomerPaymentMethod: AdminApi['detachCustomerPaymentMethod'];\n setDefaultCustomerPaymentMethod: AdminApi['setDefaultCustomerPaymentMethod'];\n\n previewWorkspaceOrganizationChange: AdminApi['previewWorkspaceOrganizationChange'];\n changeWorkspaceOrganization: AdminApi['changeWorkspaceOrganization'];\n\n // Stripe Invoices\n createStripeInvoice: AdminApi['createStripeInvoice'];\n getStripeInvoices: AdminApi['getStripeInvoices'];\n getStripeUpcomingInvoice: AdminApi['getStripeUpcomingInvoice'];\n\n // Invoices\n getBillingPeriods: AdminApi['getBillingPeriods'];\n generateInvoice: AdminApi['generateInvoice'];\n getInvoices: AdminApi['getInvoices'];\n getInvoiceDownloadUrl: AdminApi['getInvoiceDownloadUrl'];\n getReceiptDownloadUrl: AdminApi['getReceiptDownloadUrl'];\n recordInvoicePayment: AdminApi['recordInvoicePayment'];\n\n // Billing Dashboard\n getWorkspaceUsageDashboard: AdminApi['getWorkspaceUsageDashboard'];\n\n // Product Stripe Sync\n compareProductsWithStripe: AdminApi['compareProductsWithStripe'];\n syncProductToStripe: AdminApi['syncProductToStripe'];\n searchStripeProducts: AdminApi['searchStripeProducts'];\n\n // Usage API\n getUsageReport: AdminApi['getUsageReport'];\n\n // Subscriptions Admin API\n getSubscriptionsAsAdmin: AdminApi['getSubscriptionsAsAdmin'];\n getSubscriptionAsAdmin: AdminApi['getSubscriptionAsAdmin'];\n updateSubscriptionStatusAsAdmin: AdminApi['updateSubscriptionStatusAsAdmin'];\n updateSubscriptionCreditSettingsAsAdmin: AdminApi['updateSubscriptionCreditSettingsAsAdmin'];\n grantCreditsAsAdmin: AdminApi['grantCreditsAsAdmin'];\n listCreditGrantsAsAdmin: AdminApi['listCreditGrantsAsAdmin'];\n\n // Voice Metrics API\n getVoiceMetrics: AdminApi['getVoiceMetrics'];\n\n // Health Dashboard API\n getHealthMetrics: AdminApi['getHealthMetrics'];\n getHealthDetail: AdminApi['getHealthDetail'];\n\n // Admin Chat Endpoints\n listWorkspaceChats: AdminApi['listWorkspaceChats'];\n getWorkspaceChat: AdminApi['getWorkspaceChat'];\n rateWorkspaceChatMessage: AdminApi['rateWorkspaceChatMessage'];\n\n // Admin Temporal Inspection\n getTemporalAdminConfig: AdminApi['getTemporalAdminConfig'];\n listFailedTemporalWorkflows: AdminApi['listFailedTemporalWorkflows'];\n listStuckTemporalWorkflows: AdminApi['listStuckTemporalWorkflows'];\n getTemporalSummary: AdminApi['getTemporalSummary'];\n getTemporalWorkflowDetail: AdminApi['getTemporalWorkflowDetail'];\n\n // Reseller Management\n getResellers: AdminApi['getResellers'];\n getReseller: AdminApi['getReseller'];\n createReseller: AdminApi['createReseller'];\n updateReseller: AdminApi['updateReseller'];\n getResellerAccounts: AdminApi['getResellerAccounts'];\n linkResellerToAccount: AdminApi['linkResellerToAccount'];\n unlinkResellerFromAccount: AdminApi['unlinkResellerFromAccount'];\n}\n\nexport function bindAdminMethods(target: AdminBindings, admin: AdminApi): void {\n // Accounts\n target.getAccounts = admin.getAccounts.bind(admin);\n target.getAccountDetails = admin.getAccountDetails.bind(admin);\n target.getAccountByUuid = admin.getAccountByUuid.bind(admin);\n target.getAccountMemberships = admin.getAccountMemberships.bind(admin);\n target.getAccountOrgMemberships = admin.getAccountOrgMemberships.bind(admin);\n target.createAccountOrgMembership = admin.createAccountOrgMembership.bind(admin);\n target.deleteAccountOrgMembership = admin.deleteAccountOrgMembership.bind(admin);\n target.getAccountMembership = admin.getAccountMembership.bind(admin);\n target.updateAccountMembership = admin.updateAccountMembership.bind(admin);\n target.createAccountMembership = admin.createAccountMembership.bind(admin);\n target.deleteAccountMembership = admin.deleteAccountMembership.bind(admin);\n target.updateAccountAsAdmin = admin.updateAccountAsAdmin.bind(admin);\n target.createAccountAsAdmin = admin.createAccountAsAdmin.bind(admin);\n target.deleteAccountAsAdmin = admin.deleteAccountAsAdmin.bind(admin);\n target.lookupAccount = admin.lookupAccount.bind(admin);\n target.exportAccountData = admin.exportAccountData.bind(admin);\n target.requestAccountDeletion = admin.requestAccountDeletion.bind(admin);\n target.cancelAccountDeletion = admin.cancelAccountDeletion.bind(admin);\n\n // Organizations\n target.getOrganizations = admin.getOrganizations.bind(admin);\n target.getOrganization = admin.getOrganization.bind(admin);\n target.getOrganizationAsAdmin = admin.getOrganizationAsAdmin.bind(admin);\n target.getOrganizationMembersAsAdmin = admin.getOrganizationMembersAsAdmin.bind(admin);\n target.createOrganization = admin.createOrganization.bind(admin);\n target.updateOrganization = admin.updateOrganization.bind(admin);\n target.deleteOrganization = admin.deleteOrganization.bind(admin);\n target.joinOrganization = admin.joinOrganization.bind(admin);\n target.leaveOrganization = admin.leaveOrganization.bind(admin);\n target.generateLogoUploadUrl = admin.generateLogoUploadUrl.bind(admin);\n\n // Products\n target.importProducts = admin.importProducts.bind(admin);\n target.createProductAsAdmin = admin.createProductAsAdmin.bind(admin);\n target.getProductsAsAdmin = admin.getProductsAsAdmin.bind(admin);\n target.getProductAsAdmin = admin.getProductAsAdmin.bind(admin);\n target.updateProductAsAdmin = admin.updateProductAsAdmin.bind(admin);\n target.deleteProductAsAdmin = admin.deleteProductAsAdmin.bind(admin);\n\n // Workspaces\n target.getWorkspacesAsAdmin = admin.getWorkspacesAsAdmin.bind(admin);\n target.getWorkspaceAsAdmin = admin.getWorkspaceAsAdmin.bind(admin);\n target.getWorkspaceByNumericIdAsAdmin = admin.getWorkspaceByNumericIdAsAdmin.bind(admin);\n target.createWorkspaceAsAdmin = admin.createWorkspaceAsAdmin.bind(admin);\n target.updateWorkspaceAsAdmin = admin.updateWorkspaceAsAdmin.bind(admin);\n target.deleteWorkspaceAsAdmin = admin.deleteWorkspaceAsAdmin.bind(admin);\n target.createSchemaAsAdmin = admin.createSchemaAsAdmin.bind(admin);\n target.migrateSchemaAsAdmin = admin.migrateSchemaAsAdmin.bind(admin);\n target.provisionWorkspaceAsAdmin = admin.provisionWorkspaceAsAdmin.bind(admin);\n target.refreshProvisionStatusAsAdmin = admin.refreshProvisionStatusAsAdmin.bind(admin);\n target.enableMaintenanceMode = admin.enableMaintenanceMode.bind(admin);\n target.disableMaintenanceMode = admin.disableMaintenanceMode.bind(admin);\n target.getWorkspaceHealth = admin.getWorkspaceHealth.bind(admin);\n target.provisionPlanFeatures = admin.provisionPlanFeatures.bind(admin);\n target.validateWorkflowAccessAsAdmin = admin.validateWorkflowAccessAsAdmin.bind(admin);\n\n // Members\n target.mergeMembers = admin.mergeMembers.bind(admin);\n target.getAdminWorkspaceMember = admin.getAdminWorkspaceMember.bind(admin);\n target.createAdminWorkspaceMember = admin.createAdminWorkspaceMember.bind(admin);\n target.updateAdminWorkspaceMember = admin.updateAdminWorkspaceMember.bind(admin);\n target.getAdminWorkspaceMemberRoles = admin.getAdminWorkspaceMemberRoles.bind(admin);\n target.getMissingMemberships = admin.getMissingMemberships.bind(admin);\n target.linkMissingMembership = admin.linkMissingMembership.bind(admin);\n\n // Phone Numbers\n target.getUnmappedPhoneNumbers = admin.getUnmappedPhoneNumbers.bind(admin);\n target.getWorkspaceUnmappedPhoneNumbers = admin.getWorkspaceUnmappedPhoneNumbers.bind(admin);\n target.getWorkspacePhoneNumbersAsAdmin = admin.getWorkspacePhoneNumbersAsAdmin.bind(admin);\n target.getProviderPhoneNumbers = admin.getProviderPhoneNumbers.bind(admin);\n target.getProviderPhoneNumber = admin.getProviderPhoneNumber.bind(admin);\n target.updateProviderPhoneNumber = admin.updateProviderPhoneNumber.bind(admin);\n target.mapMainAccountPhone = admin.mapMainAccountPhone.bind(admin);\n target.unmapPhoneNumber = admin.unmapPhoneNumber.bind(admin);\n target.searchAvailablePhoneNumbersAsAdmin = admin.searchAvailablePhoneNumbersAsAdmin.bind(admin);\n target.purchasePhoneNumberAsAdmin = admin.purchasePhoneNumberAsAdmin.bind(admin);\n target.startBulkPhoneClassification = admin.startBulkPhoneClassification.bind(admin);\n target.getOrgA2PStatusAsAdmin = admin.getOrgA2PStatusAsAdmin.bind(admin);\n target.resetOrgA2PStatusAsAdmin = admin.resetOrgA2PStatusAsAdmin.bind(admin);\n\n // Site Mappings\n target.getSiteMappings = admin.getSiteMappings.bind(admin);\n target.getSiteMapping = admin.getSiteMapping.bind(admin);\n target.updateSiteMapping = admin.updateSiteMapping.bind(admin);\n target.updateSiteMappingWorkspace = admin.updateSiteMappingWorkspace.bind(admin);\n target.adminDeleteSiteMapping = admin.adminDeleteSiteMapping.bind(admin);\n target.createSiteMapping = admin.createSiteMapping.bind(admin);\n target.createOrUpdateSiteMapping = admin.createOrUpdateSiteMapping.bind(admin);\n target.deleteSiteMapping = admin.deleteSiteMapping.bind(admin);\n\n // Inbox Mappings\n target.getInboxMappings = admin.getInboxMappings.bind(admin);\n target.getInboxMapping = admin.getInboxMapping.bind(admin);\n target.updateInboxMapping = admin.updateInboxMapping.bind(admin);\n target.deleteAdminInboxMapping = admin.deleteAdminInboxMapping.bind(admin);\n\n // Utilities\n target.generateChatSummaries = admin.generateChatSummaries.bind(admin);\n target.executeQuery = admin.executeQuery.bind(admin);\n target.listAllThemes = admin.listAllThemes.bind(admin);\n target.migrateRoutineCadenceKeys = admin.migrateRoutineCadenceKeys.bind(admin);\n target.startBulkTOSAcceptance = admin.startBulkTOSAcceptance.bind(admin);\n target.startTokenUsageBackfill = admin.startTokenUsageBackfill.bind(admin);\n target.updateChatMessage = admin.updateChatMessage.bind(admin);\n\n // Customer Management\n target.createCustomerFromAccount = admin.createCustomerFromAccount.bind(admin);\n target.getCustomers = admin.getCustomers.bind(admin);\n target.getCustomer = admin.getCustomer.bind(admin);\n target.createCustomer = admin.createCustomer.bind(admin);\n target.updateCustomer = admin.updateCustomer.bind(admin);\n target.getCustomerAccounts = admin.getCustomerAccounts.bind(admin);\n target.linkCustomerToAccount = admin.linkCustomerToAccount.bind(admin);\n target.unlinkCustomerFromAccount = admin.unlinkCustomerFromAccount.bind(admin);\n target.syncCustomerToStripe = admin.syncCustomerToStripe.bind(admin);\n\n // Stripe Customer Management\n target.getStripeCustomer = admin.getStripeCustomer.bind(admin);\n target.createStripeCustomer = admin.createStripeCustomer.bind(admin);\n target.updateStripeCustomer = admin.updateStripeCustomer.bind(admin);\n\n // Stripe Subscription Management\n target.getStripeSubscriptions = admin.getStripeSubscriptions.bind(admin);\n target.createStripeSubscription = admin.createStripeSubscription.bind(admin);\n target.createDirectSubscription = admin.createDirectSubscription.bind(admin);\n target.updateStripeSubscription = admin.updateStripeSubscription.bind(admin);\n target.cancelStripeSubscription = admin.cancelStripeSubscription.bind(admin);\n target.provisionWorkspaceForSubscription = admin.provisionWorkspaceForSubscription.bind(admin);\n target.associateWorkspaceWithSubscription = admin.associateWorkspaceWithSubscription.bind(admin);\n target.createSubscriptionPaymentLink = admin.createSubscriptionPaymentLink.bind(admin);\n\n // Stripe Payment Methods (account-level — deprecated)\n target.createSetupIntent = admin.createSetupIntent.bind(admin);\n target.getStripePaymentMethods = admin.getStripePaymentMethods.bind(admin);\n target.attachStripePaymentMethod = admin.attachStripePaymentMethod.bind(admin);\n target.detachStripePaymentMethod = admin.detachStripePaymentMethod.bind(admin);\n target.setDefaultStripePaymentMethod = admin.setDefaultStripePaymentMethod.bind(admin);\n\n // Convert direct subscription to Stripe\n target.convertSubscriptionToStripe = admin.convertSubscriptionToStripe.bind(admin);\n\n // Stripe Payment Methods (customer-level)\n target.createCustomerSetupIntent = admin.createCustomerSetupIntent.bind(admin);\n target.getCustomerPaymentMethods = admin.getCustomerPaymentMethods.bind(admin);\n target.attachCustomerPaymentMethod = admin.attachCustomerPaymentMethod.bind(admin);\n target.detachCustomerPaymentMethod = admin.detachCustomerPaymentMethod.bind(admin);\n target.setDefaultCustomerPaymentMethod = admin.setDefaultCustomerPaymentMethod.bind(admin);\n\n target.previewWorkspaceOrganizationChange = admin.previewWorkspaceOrganizationChange.bind(admin);\n target.changeWorkspaceOrganization = admin.changeWorkspaceOrganization.bind(admin);\n\n // Stripe Invoices\n target.createStripeInvoice = admin.createStripeInvoice.bind(admin);\n target.getStripeInvoices = admin.getStripeInvoices.bind(admin);\n target.getStripeUpcomingInvoice = admin.getStripeUpcomingInvoice.bind(admin);\n\n // Invoices\n target.getBillingPeriods = admin.getBillingPeriods.bind(admin);\n target.generateInvoice = admin.generateInvoice.bind(admin);\n target.getInvoices = admin.getInvoices.bind(admin);\n target.getInvoiceDownloadUrl = admin.getInvoiceDownloadUrl.bind(admin);\n target.getReceiptDownloadUrl = admin.getReceiptDownloadUrl.bind(admin);\n target.recordInvoicePayment = admin.recordInvoicePayment.bind(admin);\n\n // Billing Dashboard\n target.getWorkspaceUsageDashboard = admin.getWorkspaceUsageDashboard.bind(admin);\n\n // Product Stripe Sync\n target.compareProductsWithStripe = admin.compareProductsWithStripe.bind(admin);\n target.syncProductToStripe = admin.syncProductToStripe.bind(admin);\n target.searchStripeProducts = admin.searchStripeProducts.bind(admin);\n\n // Usage API\n target.getUsageReport = admin.getUsageReport.bind(admin);\n\n // Subscriptions Admin API\n target.getSubscriptionsAsAdmin = admin.getSubscriptionsAsAdmin.bind(admin);\n target.getSubscriptionAsAdmin = admin.getSubscriptionAsAdmin.bind(admin);\n target.updateSubscriptionStatusAsAdmin = admin.updateSubscriptionStatusAsAdmin.bind(admin);\n target.updateSubscriptionCreditSettingsAsAdmin =\n admin.updateSubscriptionCreditSettingsAsAdmin.bind(admin);\n target.grantCreditsAsAdmin = admin.grantCreditsAsAdmin.bind(admin);\n target.listCreditGrantsAsAdmin = admin.listCreditGrantsAsAdmin.bind(admin);\n\n // Voice Metrics API\n target.getVoiceMetrics = admin.getVoiceMetrics.bind(admin);\n\n // Health Dashboard API\n target.getHealthMetrics = admin.getHealthMetrics.bind(admin);\n target.getHealthDetail = admin.getHealthDetail.bind(admin);\n\n // Admin Chat Endpoints\n target.listWorkspaceChats = admin.listWorkspaceChats.bind(admin);\n target.getWorkspaceChat = admin.getWorkspaceChat.bind(admin);\n target.rateWorkspaceChatMessage = admin.rateWorkspaceChatMessage.bind(admin);\n\n // Admin Temporal Inspection\n target.getTemporalAdminConfig = admin.getTemporalAdminConfig.bind(admin);\n target.listFailedTemporalWorkflows = admin.listFailedTemporalWorkflows.bind(admin);\n target.listStuckTemporalWorkflows = admin.listStuckTemporalWorkflows.bind(admin);\n target.getTemporalSummary = admin.getTemporalSummary.bind(admin);\n target.getTemporalWorkflowDetail = admin.getTemporalWorkflowDetail.bind(admin);\n\n // Reseller Management\n target.getResellers = admin.getResellers.bind(admin);\n target.getReseller = admin.getReseller.bind(admin);\n target.createReseller = admin.createReseller.bind(admin);\n target.updateReseller = admin.updateReseller.bind(admin);\n target.getResellerAccounts = admin.getResellerAccounts.bind(admin);\n target.linkResellerToAccount = admin.linkResellerToAccount.bind(admin);\n target.unlinkResellerFromAccount = admin.unlinkResellerFromAccount.bind(admin);\n}\n","import { ApiClient as GravityRailClient } from '@gravity-rail/client';\nimport {\n CredentialsManager,\n getEnvironmentConfig,\n refreshAccessToken,\n type CLICredentials,\n type EnvironmentConfig,\n} from '../cli-utils';\nimport { homedir } from 'os';\nimport { detectOutputFormat, type OutputFormat } from './output';\nimport { loadDevCloudRealmFile, loadRealmCredentials } from './realm';\nimport { AuthRequiredError } from './errors';\n\n/** Try to silently refresh an expired access token. Returns an AuthenticatedContext or null. */\nasync function tryTokenRefresh(\n ctx: CommandContext,\n creds: CLICredentials\n): Promise<AuthenticatedContext | null> {\n if (!creds.refreshToken) return null;\n const refreshed = await refreshAccessToken(\n ctx.envConfig,\n creds,\n ctx.credentialsManager,\n ctx.env\n );\n if (!refreshed?.accessToken) return null;\n const apiClient = new GravityRailClient(refreshed.accessToken, ctx.envConfig.apiUrl);\n return { ...ctx, accessToken: refreshed.accessToken, apiClient };\n}\n\nexport interface GlobalOptions {\n env: string;\n realm?: string;\n outputFormat?: string;\n verbose?: boolean;\n allowWrite?: boolean;\n}\n\nexport interface PublicGlobalOptions {\n apiUrl?: string;\n frontendUrl?: string;\n outputFormat?: string;\n verbose?: boolean;\n allowWrite?: boolean;\n}\n\nexport interface CommandContext {\n env: string;\n envConfig: EnvironmentConfig;\n outputFormat: OutputFormat;\n verbose: boolean;\n allowWrite: boolean;\n credentialsManager: CredentialsManager;\n}\n\nexport interface AuthenticatedContext extends CommandContext {\n accessToken: string;\n apiClient: GravityRailClient;\n realmWorkspace?: string;\n}\n\n/** Create a base command context (no auth required) */\nexport function createContext(opts: GlobalOptions): CommandContext {\n const envConfig = getEnvironmentConfig(opts.env);\n const credentialsManager = new CredentialsManager(homedir(), envConfig.apiUrl);\n return {\n env: opts.env,\n envConfig,\n outputFormat: detectOutputFormat(opts.outputFormat),\n verbose: opts.verbose ?? false,\n allowWrite: opts.allowWrite ?? false,\n credentialsManager,\n };\n}\n\n/** Create an authenticated command context. Tries realm, env var, then cached token. Never auto-triggers OAuth. */\nexport async function createAuthenticatedContext(\n opts: GlobalOptions\n): Promise<AuthenticatedContext> {\n // eslint-disable-next-line @eslint-react/naming-convention-context-name -- CLI handler context, not React\n const ctx = createContext(opts);\n\n // Try --realm first (dev-only shortcut using dev-realms.json)\n if (opts.realm) {\n let devRealmsPath: string | undefined;\n if (opts.env.startsWith('dev-cloud:')) {\n const namespace = opts.env.slice('dev-cloud:'.length);\n devRealmsPath = loadDevCloudRealmFile(namespace);\n }\n const { token, workspaceUuid } = loadRealmCredentials(opts.realm, devRealmsPath);\n const apiClient = new GravityRailClient(token, ctx.envConfig.apiUrl);\n return { ...ctx, accessToken: token, apiClient, realmWorkspace: workspaceUuid };\n }\n\n // Try GRAVITY_RAIL_API_KEY first\n const apiKey = process.env.GRAVITY_RAIL_API_KEY;\n if (apiKey) {\n const apiClient = new GravityRailClient(apiKey, ctx.envConfig.apiUrl);\n return { ...ctx, accessToken: apiKey, apiClient };\n }\n\n // Try cached credentials (from `gr login`)\n const creds = ctx.credentialsManager.load(ctx.env);\n if (creds?.accessToken) {\n const buffer = 5 * 60 * 1000;\n const notExpired =\n !creds.expiresAt || new Date(creds.expiresAt) > new Date(Date.now() + buffer);\n if (notExpired) {\n const apiClient = new GravityRailClient(creds.accessToken, ctx.envConfig.apiUrl);\n return { ...ctx, accessToken: creds.accessToken, apiClient };\n }\n\n // Token expired — try refresh\n const refreshed = await tryTokenRefresh(ctx, creds);\n if (refreshed) return refreshed;\n }\n\n throw new AuthRequiredError();\n}\n\n/**\n * Narrow a handler context to `AuthenticatedContext`.\n *\n * Handler `ctx` is typed as `AuthenticatedContext | CommandContext` so that\n * `requiresAuth: false` handlers can also share the type. At runtime, every\n * handler that did not opt out of auth will receive an `AuthenticatedContext`,\n * but TypeScript cannot verify this — call this helper before accessing\n * `apiClient` / `accessToken`.\n *\n * Throws if called from a handler that did not declare `requiresAuth`.\n */\nexport function requireAuth(ctx: AuthenticatedContext | CommandContext): AuthenticatedContext {\n if (!('apiClient' in ctx)) {\n throw new Error('Command handler accessed apiClient without declaring requiresAuth');\n }\n return ctx;\n}\n\n/** Create a base command context for the public CLI (no --env flag, defaults to prod) */\nexport function createPublicContext(opts: PublicGlobalOptions): CommandContext {\n const apiUrl = opts.apiUrl || process.env.GRAVITY_RAIL_API_URL || 'https://api.gravityrail.com';\n const frontendUrl =\n opts.frontendUrl || process.env.GRAVITY_RAIL_FRONTEND_URL || 'https://app.gravityrail.com';\n const envConfig: EnvironmentConfig = { apiUrl, frontendUrl };\n const credentialsManager = new CredentialsManager(homedir(), apiUrl);\n return {\n env: 'prod',\n envConfig,\n outputFormat: detectOutputFormat(opts.outputFormat),\n verbose: opts.verbose ?? false,\n allowWrite: opts.allowWrite ?? false,\n credentialsManager,\n };\n}\n\n/** Create an authenticated context for the public CLI. Tries env var, then cached token. */\nexport async function createPublicAuthenticatedContext(\n opts: PublicGlobalOptions\n): Promise<AuthenticatedContext> {\n const ctx = createPublicContext(opts);\n\n const apiKey = process.env.GRAVITY_RAIL_API_KEY;\n if (apiKey) {\n const apiClient = new GravityRailClient(apiKey, ctx.envConfig.apiUrl);\n return { ...ctx, accessToken: apiKey, apiClient };\n }\n\n const creds = ctx.credentialsManager.load(ctx.env);\n if (creds?.accessToken) {\n const buffer = 5 * 60 * 1000;\n const notExpired =\n !creds.expiresAt || new Date(creds.expiresAt) > new Date(Date.now() + buffer);\n if (notExpired) {\n const apiClient = new GravityRailClient(creds.accessToken, ctx.envConfig.apiUrl);\n return { ...ctx, accessToken: creds.accessToken, apiClient };\n }\n\n // Token expired — try refresh\n const refreshed = await tryTokenRefresh(ctx, creds);\n if (refreshed) return refreshed;\n }\n\n throw new AuthRequiredError();\n}\n","import { printTable } from '../cli-utils';\nimport {\n type PaginationMeta,\n isListResult,\n extractPaginationMeta,\n formatPaginationWarning,\n unwrapItems,\n} from './pagination';\n\nexport type OutputFormat = 'json' | 'jsonl' | 'table';\n\nexport interface OutputOptions {\n outputFormat: OutputFormat;\n}\n\nexport interface TableColumn<T> {\n header: string;\n getValue: (item: T) => string;\n maxWidth?: number;\n}\n\n/** Detect default output format based on whether stdout is a TTY */\nexport function detectOutputFormat(explicit?: string): OutputFormat {\n if (explicit) return explicit as OutputFormat;\n return process.stdout.isTTY ? 'table' : 'json';\n}\n\n/**\n * Write a list of items to stdout in the requested format.\n *\n * Accepts:\n * - A `ListResult` (explicit contract with items, meta, supportsAll) — preferred.\n * - Raw arrays, paginated responses ({ items: [...] }), or any object — legacy.\n *\n * When a `ListResult` is passed, its explicit `meta` and `supportsAll` are used.\n * When raw data is passed, pagination metadata is auto-detected with\n * `supportsAll: false` as the safe default.\n *\n * The optional `paginationMeta` and `supportsAll` parameters are kept for\n * backward compatibility but are ignored when a `ListResult` is passed.\n */\nexport function outputData(\n data: unknown,\n opts: OutputOptions,\n columns?: TableColumn<any>[],\n paginationMeta?: PaginationMeta,\n supportsAll?: boolean\n): void {\n let items: unknown[];\n let meta: PaginationMeta | undefined;\n let allSupported: boolean;\n\n if (isListResult(data)) {\n // Explicit contract: use ListResult fields directly\n items = data.items;\n meta = data.meta;\n allSupported = data.supportsAll ?? false;\n } else {\n // Legacy path: auto-detect from raw data\n items = unwrapItems(data);\n meta = paginationMeta ?? extractPaginationMeta(data);\n allSupported = supportsAll ?? false;\n }\n\n const warning = formatPaginationWarning(meta, allSupported);\n if (warning) {\n process.stderr.write(warning + '\\n');\n }\n\n switch (opts.outputFormat) {\n case 'json':\n process.stdout.write(JSON.stringify(items, null, 2) + '\\n');\n break;\n case 'jsonl':\n for (const item of items) {\n process.stdout.write(JSON.stringify(item) + '\\n');\n }\n break;\n case 'table':\n if (columns) {\n printTable(items, columns);\n } else {\n process.stdout.write(JSON.stringify(items, null, 2) + '\\n');\n }\n break;\n }\n}\n\n/** Write a single object to stdout in the requested format */\nexport function outputSingle<T>(data: T, opts: OutputOptions, columns?: TableColumn<T>[]): void {\n switch (opts.outputFormat) {\n case 'json':\n process.stdout.write(JSON.stringify(data, null, 2) + '\\n');\n break;\n case 'jsonl':\n process.stdout.write(JSON.stringify(data) + '\\n');\n break;\n case 'table':\n if (columns) {\n printTable([data], columns);\n } else {\n process.stdout.write(JSON.stringify(data, null, 2) + '\\n');\n }\n break;\n }\n}\n\n/** Common column factory helpers for domain files */\nexport const COL = {\n id: (): TableColumn<any> => ({ header: 'ID', getValue: (item) => String(item.id ?? '') }),\n uuid: (): TableColumn<any> => ({ header: 'UUID', getValue: (item) => item.uuid ?? '' }),\n name: (): TableColumn<any> => ({ header: 'NAME', getValue: (item) => item.name ?? '' }),\n status: (): TableColumn<any> => ({ header: 'STATUS', getValue: (item) => item.status ?? '' }),\n created: (): TableColumn<any> => ({\n header: 'CREATED',\n getValue: (item) => item.created_at ?? '',\n }),\n updated: (): TableColumn<any> => ({\n header: 'UPDATED',\n getValue: (item) => item.updated_at ?? '',\n }),\n description: (): TableColumn<any> => ({\n header: 'DESCRIPTION',\n getValue: (item) => item.description ?? '',\n }),\n enabled: (): TableColumn<any> => ({\n header: 'ENABLED',\n getValue: (item) => String(item.enabled ?? ''),\n }),\n};\n\n/** Write a status/progress message to stderr (never pollutes stdout) */\nexport function stderr(msg: string): void {\n process.stderr.write(msg + '\\n');\n}\n","import { execSync } from 'child_process';\nimport { existsSync, mkdirSync, readFileSync, statSync, writeFileSync } from 'fs';\nimport { dirname, join } from 'path';\n\nexport interface RealmCredentials {\n token: string;\n workspaceUuid?: string;\n}\n\n/** Walk up from cwd looking for dev-realms.json (like finding package.json) */\nfunction findDevRealmsFile(): string {\n let dir = process.cwd();\n while (dir !== dirname(dir)) {\n const candidate = join(dir, 'dev-realms.json');\n if (existsSync(candidate)) return candidate;\n dir = dirname(dir);\n }\n throw new Error('Cannot find dev-realms.json in any parent directory');\n}\n\nconst DEV_CLOUD_CACHE_DIR = '.dev-cloud';\nconst CACHE_MAX_AGE_MS = 60 * 60 * 1000; // 1 hour\n\nfunction findRepoRoot(): string | undefined {\n let dir = process.cwd();\n while (dir !== dirname(dir)) {\n if (existsSync(join(dir, '.git'))) {\n return dir;\n }\n dir = dirname(dir);\n }\n return undefined;\n}\n\nfunction getDevCloudCacheDir(namespace: string): string {\n const repoRoot = findRepoRoot();\n const base = repoRoot ?? process.cwd();\n return join(base, DEV_CLOUD_CACHE_DIR, namespace);\n}\n\nfunction fetchDevCloudRealms(namespace: string): string {\n const k8sNamespace = `dev-cloud-${namespace}`;\n const cmd = `kubectl exec -n ${k8sNamespace} deploy/env -c devbox -- cat /workspace/dev-realms.json`;\n try {\n return execSync(cmd, { encoding: 'utf-8', timeout: 30000 });\n } catch (err: unknown) {\n const message = err instanceof Error ? err.message : String(err);\n throw new Error(\n `Failed to fetch dev-realms.json from dev-cloud pod \"${namespace}\": ${message}`\n );\n }\n}\n\n/**\n * Load (and cache) the dev-realms.json file from a dev-cloud pod.\n * Returns the path to the cached file.\n */\nexport function loadDevCloudRealmFile(namespace: string): string {\n const cacheDir = getDevCloudCacheDir(namespace);\n const cachePath = join(cacheDir, 'dev-realms.json');\n\n // Check cache freshness\n if (existsSync(cachePath)) {\n const stat = statSync(cachePath);\n const age = Date.now() - stat.mtimeMs;\n if (age < CACHE_MAX_AGE_MS) {\n return cachePath;\n }\n }\n\n // Fetch from pod\n const content = fetchDevCloudRealms(namespace);\n mkdirSync(cacheDir, { recursive: true });\n writeFileSync(cachePath, content, 'utf-8');\n return cachePath;\n}\n\nexport function loadRealmCredentials(realm: string, devRealmsPath?: string): RealmCredentials {\n const filePath = devRealmsPath ?? findDevRealmsFile();\n let data: Record<string, unknown>;\n try {\n data = JSON.parse(readFileSync(filePath, 'utf-8'));\n } catch {\n throw new Error(`Cannot read dev-realms.json at ${filePath}`);\n }\n\n const parts = realm.split('/');\n if (parts.length === 1) {\n // Account-level: --realm dr-chen\n const accounts = data._accounts as Record<string, { token?: string }> | undefined;\n const account = accounts?.[parts[0]!];\n if (!account?.token) {\n throw new Error(`Realm account \"${parts[0]}\" not found in dev-realms.json`);\n }\n return { token: account.token };\n } else {\n // Workspace/member: --realm boston-nephrology-clinic/dr-chen\n const [wsName, memberName] = parts;\n const ws = data[wsName!] as\n | { workspaceUuid?: string; members?: Record<string, { token?: string }> }\n | undefined;\n if (!ws) {\n throw new Error(`Realm workspace \"${wsName}\" not found in dev-realms.json`);\n }\n const member = ws.members?.[memberName!];\n if (!member?.token) {\n throw new Error(`Realm member \"${memberName}\" not found in workspace \"${wsName}\"`);\n }\n return { token: member.token, workspaceUuid: ws.workspaceUuid };\n }\n}\n","import { readFileSync } from 'fs';\nimport type { ParsedArgs } from './types';\nimport { CLIError } from './errors';\n\n/** Read JSON input from --data string, --file path, or stdin (if piped) */\nexport async function readJsonInput(args: ParsedArgs): Promise<unknown | undefined> {\n const dataStr = args.data as string | undefined;\n const filePath = args.file as string | undefined;\n\n if (dataStr) {\n try {\n return JSON.parse(dataStr);\n } catch {\n throw new CLIError('Invalid JSON in --data argument');\n }\n }\n\n if (filePath) {\n try {\n const content = readFileSync(filePath, 'utf-8');\n return JSON.parse(content);\n } catch (err) {\n if (err instanceof SyntaxError) {\n throw new CLIError(`Invalid JSON in file: ${filePath}`);\n }\n throw new CLIError(`Cannot read file: ${filePath}`);\n }\n }\n\n // Read from stdin if piped\n if (!process.stdin.isTTY) {\n return readStdin();\n }\n\n return undefined;\n}\n\nfunction readStdin(): Promise<unknown> {\n return new Promise((resolve, reject) => {\n let data = '';\n process.stdin.setEncoding('utf-8');\n process.stdin.on('data', (chunk: string) => {\n data += chunk;\n });\n process.stdin.on('end', () => {\n if (!data.trim()) {\n resolve(undefined);\n return;\n }\n try {\n resolve(JSON.parse(data));\n } catch {\n reject(new CLIError('Invalid JSON from stdin'));\n }\n });\n process.stdin.on('error', (err: Error) => {\n reject(new CLIError(`Error reading stdin: ${err.message}`));\n });\n });\n}\n","import type { GravityRailClient } from '@gravity-rail/sdk';\nimport { requireAuth } from './context';\nimport type { ArgDef, CommandDef, CommandHandlerContext } from './types';\nimport type { TableColumn } from './output';\nimport { outputData, outputSingle } from './output';\nimport { CLIError } from './errors';\nimport { LIST_PAGINATION_ARGS, fetchAllPages, listResult, unwrapItems } from './pagination';\n\n/**\n * @deprecated Use `SimpleCrudConfig` with `simpleCrudCommands()` for new code.\n *\n * This interface uses string method names that are resolved at runtime via\n * dynamic dispatch, which prevents TypeScript from validating call signatures.\n * It is safe for simple top-level CRUD resources but must NOT be used for\n * nested resources that require parent IDs.\n */\nexport interface CrudConfig<T = unknown> {\n prefix: string[];\n entityName: string;\n listMethod?: string;\n getMethod?: string;\n createMethod?: string;\n updateMethod?: string;\n deleteMethod?: string;\n archiveMethod?: string;\n unarchiveMethod?: string;\n /** When true, adds a --cascade flag to the delete command. Only enable for entities whose backend endpoint accepts a cascade parameter. */\n supportsCascade?: boolean;\n columns?: TableColumn<T>[];\n requiresWorkspace?: boolean;\n listArgs?: ArgDef[];\n extra?: CommandDef[];\n /** Example lines shown in help for the create command */\n createExamples?: string[];\n /**\n * Controls how the CRUD list handler interacts with pagination.\n *\n * - `'full'` — The client method accepts an options object with page/pageSize.\n * Pagination args (--page, --page-size, --all) are injected and\n * forwarded to the API method via `callApiWithOptions`.\n * - `'client-only'` — Pagination args are injected for --all support (client-side\n * page-walking), but options are NOT forwarded to the API method.\n * Use for raw-array endpoints that don't accept page/pageSize.\n * - `false` — No pagination args are injected. The list method is called with\n * `callApi` (workspace-only) or `callApiWithOptions` for domain\n * listArgs only. Use for legacy/positional signatures where passing\n * an options object would be misinterpreted.\n *\n * Default: `false` (safe — never forwards pagination options unless opted in).\n */\n paginationSupport?: 'full' | 'client-only' | false;\n}\n\n/**\n * @deprecated Use `simpleCrudCommands()` for new code — it provides compile-time\n * safety via typed callables instead of string method names.\n *\n * Existing usages are safe for simple top-level CRUD resources. Do NOT use this\n * for nested resources that require parent IDs (workflowId, memberId, toolkitId, etc.).\n */\nexport function crudCommands<T>(config: CrudConfig<T>): CommandDef[] {\n const {\n prefix,\n entityName,\n columns,\n requiresWorkspace = true,\n listArgs = [],\n extra = [],\n } = config;\n\n // Default: false (safe — never forwards pagination options unless explicitly opted in)\n const paginationSupport = config.paginationSupport ?? false;\n\n const cmds: CommandDef[] = [];\n\n if (config.listMethod) {\n // Determine which args to expose on this list command.\n // 'full' and 'client-only' inject pagination args; false does not.\n const injectPaginationArgs = paginationSupport !== false;\n const seenArgNames = new Set(listArgs.map((a) => a.name));\n const mergedArgs = injectPaginationArgs\n ? [...listArgs, ...LIST_PAGINATION_ARGS.filter((a) => !seenArgNames.has(a.name))]\n : [...listArgs];\n\n cmds.push({\n path: [...prefix, 'list'],\n description: `List ${entityName}s`,\n args: mergedArgs,\n requiresWorkspace,\n columns: columns as TableColumn<unknown>[] | undefined,\n handler: async (hctx: CommandHandlerContext) => {\n // Track whether the domain defines custom list args (domain filters or pagination).\n // When true, always pass an options object to the API method for compatibility.\n const domainHasListArgs = listArgs.length > 0;\n\n if (injectPaginationArgs && hctx.args['all']) {\n let allItems: unknown[];\n if (paginationSupport === 'full') {\n // Fetch all pages using server-side pagination\n allItems = await fetchAllPages(async ({ page, pageSize }) => {\n const opts = buildListOptions(hctx, listArgs);\n opts['page'] = page;\n opts['pageSize'] = pageSize;\n return callApiWithOptions(hctx, config.listMethod!, requiresWorkspace, opts);\n });\n } else {\n // client-only: single fetch, return whatever the API gives us\n const result = await callApi(hctx, config.listMethod!, requiresWorkspace);\n allItems = unwrapItems(result);\n }\n outputData(allItems, hctx.ctx, columns as TableColumn<T>[] | undefined);\n } else if (paginationSupport === 'full') {\n // Build options from domain-specific + pagination args\n const opts = buildListOptions(hctx, mergedArgs);\n const result =\n domainHasListArgs || Object.keys(opts).length > 0\n ? await callApiWithOptions(hctx, config.listMethod!, requiresWorkspace, opts)\n : await callApi(hctx, config.listMethod!, requiresWorkspace);\n // Explicit contract: supportsAll=true because this path exposes --all\n outputData(\n listResult(result, true),\n hctx.ctx,\n columns as TableColumn<T>[] | undefined\n );\n } else {\n // paginationSupport is false or 'client-only': never forward options to the API.\n // Only pass domain listArgs if the domain defines custom args and the method\n // is options-compatible (domainHasListArgs implies the method accepts an object).\n if (domainHasListArgs) {\n const opts = buildListOptions(hctx, listArgs);\n const result =\n Object.keys(opts).length > 0\n ? await callApiWithOptions(\n hctx,\n config.listMethod!,\n requiresWorkspace,\n opts\n )\n : await callApi(hctx, config.listMethod!, requiresWorkspace);\n outputData(\n listResult(result, false),\n hctx.ctx,\n columns as TableColumn<T>[] | undefined\n );\n } else {\n const result = await callApi(hctx, config.listMethod!, requiresWorkspace);\n outputData(\n listResult(result, false),\n hctx.ctx,\n columns as TableColumn<T>[] | undefined\n );\n }\n }\n },\n });\n }\n\n if (config.getMethod) {\n cmds.push({\n path: [...prefix, 'get'],\n description: `Get a ${entityName} by ID`,\n args: [{ name: 'id', description: `${entityName} ID`, required: true }],\n requiresWorkspace,\n columns: columns as TableColumn<unknown>[] | undefined,\n handler: async (hctx: CommandHandlerContext) => {\n const id = resolveId(hctx);\n const result = await callApiWithId(hctx, config.getMethod!, id, requiresWorkspace);\n outputSingle(result as T, hctx.ctx, columns as TableColumn<T>[] | undefined);\n },\n });\n }\n\n if (config.createMethod) {\n cmds.push({\n path: [...prefix, 'create'],\n description: `Create a ${entityName}`,\n mutates: true,\n requiresWorkspace,\n ...(config.createExamples ? { examples: config.createExamples } : {}),\n handler: async (hctx: CommandHandlerContext) => {\n if (!hctx.data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const result = await callApiWithData(hctx, config.createMethod!, requiresWorkspace);\n outputSingle(result as T, hctx.ctx, columns as TableColumn<T>[] | undefined);\n },\n });\n }\n\n if (config.updateMethod) {\n cmds.push({\n path: [...prefix, 'update'],\n description: `Update a ${entityName}`,\n mutates: true,\n args: [{ name: 'id', description: `${entityName} ID`, required: true }],\n requiresWorkspace,\n handler: async (hctx: CommandHandlerContext) => {\n if (!hctx.data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const id = resolveId(hctx);\n const result = await callApiWithIdAndData(\n hctx,\n config.updateMethod!,\n id,\n requiresWorkspace\n );\n outputSingle(result as T, hctx.ctx, columns as TableColumn<T>[] | undefined);\n },\n });\n }\n\n if (config.deleteMethod) {\n const deleteArgs: ArgDef[] = [\n { name: 'id', description: `${entityName} ID`, required: true },\n ];\n if (config.supportsCascade) {\n deleteArgs.push({\n name: 'cascade',\n description: 'Also delete dependent child entities',\n required: false,\n isFlag: true,\n });\n }\n cmds.push({\n path: [...prefix, 'delete'],\n description: `Delete a ${entityName}`,\n mutates: true,\n args: deleteArgs,\n requiresWorkspace,\n handler: async (hctx: CommandHandlerContext) => {\n const id = resolveId(hctx);\n if (config.supportsCascade) {\n const cascade = hctx.args.cascade === true;\n const result = await callMethod(\n hctx,\n config.deleteMethod!,\n requiresWorkspace ? [hctx.workspace, id, cascade] : [id, cascade]\n );\n const suffix =\n result &&\n typeof result === 'object' &&\n 'deletedTaskCount' in result &&\n result.deletedTaskCount\n ? ` and ${result.deletedTaskCount} child entities`\n : '';\n process.stdout.write(`Deleted ${entityName} ${id}${suffix}\\n`);\n } else {\n await callApiWithId(hctx, config.deleteMethod!, id, requiresWorkspace);\n process.stdout.write(`Deleted ${entityName} ${id}\\n`);\n }\n },\n });\n }\n\n if (config.archiveMethod) {\n cmds.push({\n path: [...prefix, 'archive'],\n description: `Archive a ${entityName}`,\n mutates: true,\n args: [{ name: 'id', description: `${entityName} ID`, required: true }],\n requiresWorkspace,\n handler: async (hctx: CommandHandlerContext) => {\n const id = resolveId(hctx);\n const result = await callApiWithId(hctx, config.archiveMethod!, id, requiresWorkspace);\n outputSingle(result as T, hctx.ctx, columns as TableColumn<T>[] | undefined);\n },\n });\n }\n\n if (config.unarchiveMethod) {\n cmds.push({\n path: [...prefix, 'unarchive'],\n description: `Unarchive a ${entityName}`,\n mutates: true,\n args: [{ name: 'id', description: `${entityName} ID`, required: true }],\n requiresWorkspace,\n handler: async (hctx: CommandHandlerContext) => {\n const id = resolveId(hctx);\n const result = await callApiWithId(\n hctx,\n config.unarchiveMethod!,\n id,\n requiresWorkspace\n );\n outputSingle(result as T, hctx.ctx, columns as TableColumn<T>[] | undefined);\n },\n });\n }\n\n return [...cmds, ...extra];\n}\n\nfunction resolveId(hctx: CommandHandlerContext): string {\n const id = (hctx.args.id ?? hctx.args.uuid) as string | undefined;\n if (!id) throw new CLIError('--id is required');\n return id;\n}\n\n/**\n * Encapsulates the dynamic dispatch used by the legacy stringly-typed\n * `crudCommands()` factory. The `GravityRailClient` is structurally typed —\n * we deliberately erase that type here to allow string-key lookup, but the\n * scope of the unsafe access is contained in this single helper instead of\n * leaking into every call site.\n */\nfunction callMethod(\n hctx: CommandHandlerContext,\n method: string,\n args: unknown[]\n): Promise<unknown> {\n const client = requireAuth(hctx.ctx).apiClient as unknown as Record<\n string,\n (...a: unknown[]) => Promise<unknown>\n >;\n const fn = client[method];\n if (typeof fn !== 'function') {\n throw new CLIError(`API method not found: ${method}`);\n }\n return fn.apply(client, args);\n}\n\nasync function callApi(\n hctx: CommandHandlerContext,\n method: string,\n requiresWorkspace: boolean\n): Promise<unknown> {\n return callMethod(hctx, method, requiresWorkspace ? [hctx.workspace] : []);\n}\n\nasync function callApiWithId(\n hctx: CommandHandlerContext,\n method: string,\n id: string,\n requiresWorkspace: boolean\n): Promise<unknown> {\n return callMethod(hctx, method, requiresWorkspace ? [hctx.workspace, id] : [id]);\n}\n\nasync function callApiWithData(\n hctx: CommandHandlerContext,\n method: string,\n requiresWorkspace: boolean\n): Promise<unknown> {\n return callMethod(hctx, method, requiresWorkspace ? [hctx.workspace, hctx.data] : [hctx.data]);\n}\n\nasync function callApiWithIdAndData(\n hctx: CommandHandlerContext,\n method: string,\n id: string,\n requiresWorkspace: boolean\n): Promise<unknown> {\n return callMethod(\n hctx,\n method,\n requiresWorkspace ? [hctx.workspace, id, hctx.data] : [id, hctx.data]\n );\n}\n\nfunction buildListOptions(\n hctx: CommandHandlerContext,\n listArgs: ArgDef[]\n): Record<string, unknown> {\n const opts: Record<string, unknown> = {};\n for (const arg of listArgs) {\n if (arg.name === 'all') continue; // handled by caller, not sent to API\n const key = arg.name.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase());\n const val = hctx.args[arg.name];\n if (val !== undefined) {\n if (key === 'page' || key === 'pageSize') {\n const num = Number(val);\n if (isNaN(num) || num < 1)\n throw new CLIError(`--${arg.name} must be a positive integer`);\n if (key === 'pageSize' && num > 100)\n throw new CLIError(`--${arg.name} must be at most 100 (API limit)`);\n opts[key] = num;\n } else {\n opts[key] = val;\n }\n }\n }\n return opts;\n}\n\nasync function callApiWithOptions(\n hctx: CommandHandlerContext,\n method: string,\n requiresWorkspace: boolean,\n opts: Record<string, unknown>\n): Promise<unknown> {\n return callMethod(hctx, method, requiresWorkspace ? [hctx.workspace, opts] : [opts]);\n}\n\n// ---------------------------------------------------------------------------\n// SimpleCrudConfig — typed-callable variant of CrudConfig\n// ---------------------------------------------------------------------------\n\n/**\n * Typed CRUD config for simple, top-level resources.\n *\n * Unlike the stringly-typed `CrudConfig`, operations are typed functions that\n * receive the real `GravityRailClient`. TypeScript validates the call at the definition\n * site, eliminating the string-dispatch + positional-argument blind spot.\n *\n * Use this for resources that fit the simple CRUD contract:\n * - optional workspace scope\n * - single resource ID (no parent IDs)\n * - optional list-options object\n *\n * For nested resources that need parent IDs, use explicit handlers.\n *\n * @example\n * ```ts\n * simpleCrudCommands({\n * prefix: ['tasks'],\n * entityName: 'task',\n * list: (client, wid) => client.getTasks(wid),\n * get: (client, wid, id) => client.getTask(wid, id),\n * create: (client, wid, data) => client.createTask(wid, data),\n * update: (client, wid, id, data) => client.updateTask(wid, id, data),\n * delete: (client, wid, id) => client.deleteTask(wid, id),\n * })\n * ```\n */\nexport interface SimpleCrudConfig<T = unknown> {\n prefix: string[];\n entityName: string;\n columns?: TableColumn<T>[];\n requiresWorkspace?: boolean;\n listArgs?: ArgDef[];\n extra?: CommandDef[];\n createExamples?: string[];\n paginationSupport?: 'full' | 'client-only' | false;\n\n // Typed operations — each receives the real GravityRailClient and typed positional args\n list?: (\n client: GravityRailClient,\n workspace: string,\n opts?: Record<string, unknown>\n ) => Promise<unknown>;\n get?: (client: GravityRailClient, workspace: string, id: string) => Promise<unknown>;\n create?: (client: GravityRailClient, workspace: string, data: unknown) => Promise<unknown>;\n update?: (\n client: GravityRailClient,\n workspace: string,\n id: string,\n data: unknown\n ) => Promise<unknown>;\n delete?: (client: GravityRailClient, workspace: string, id: string) => Promise<unknown>;\n archive?: (client: GravityRailClient, workspace: string, id: string) => Promise<unknown>;\n unarchive?: (client: GravityRailClient, workspace: string, id: string) => Promise<unknown>;\n\n /** When true, adds a --cascade flag to the delete command. */\n supportsCascade?: boolean;\n deleteFn?: (\n client: GravityRailClient,\n workspace: string,\n id: string,\n cascade: boolean\n ) => Promise<unknown>;\n}\n\n/**\n * Generate CRUD commands from typed callable functions.\n *\n * This is the recommended path for new simple CRUD domains. It provides\n * compile-time safety by accepting typed callables instead of string method names.\n */\nexport function simpleCrudCommands<T>(config: SimpleCrudConfig<T>): CommandDef[] {\n const {\n prefix,\n entityName,\n columns,\n requiresWorkspace = true,\n listArgs = [],\n extra = [],\n } = config;\n\n const paginationSupport = config.paginationSupport ?? false;\n const cmds: CommandDef[] = [];\n\n if (config.list) {\n const listFn = config.list;\n const injectPaginationArgs = paginationSupport !== false;\n const seenArgNames = new Set(listArgs.map((a) => a.name));\n const mergedArgs = injectPaginationArgs\n ? [...listArgs, ...LIST_PAGINATION_ARGS.filter((a) => !seenArgNames.has(a.name))]\n : [...listArgs];\n\n cmds.push({\n path: [...prefix, 'list'],\n description: `List ${entityName}s`,\n args: mergedArgs,\n requiresWorkspace,\n columns: columns as TableColumn<unknown>[] | undefined,\n handler: async (hctx: CommandHandlerContext) => {\n const client = requireAuth(hctx.ctx).apiClient;\n const domainHasListArgs = listArgs.length > 0;\n\n if (injectPaginationArgs && hctx.args['all']) {\n let allItems: unknown[];\n if (paginationSupport === 'full') {\n allItems = await fetchAllPages(async ({ page, pageSize }) => {\n const opts = buildListOptions(hctx, listArgs);\n opts['page'] = page;\n opts['pageSize'] = pageSize;\n return listFn(client, hctx.workspace, opts);\n });\n } else {\n const result = await listFn(client, hctx.workspace);\n allItems = unwrapItems(result);\n }\n outputData(allItems, hctx.ctx, columns as TableColumn<T>[] | undefined);\n } else if (paginationSupport === 'full') {\n const opts = buildListOptions(hctx, mergedArgs);\n const result =\n domainHasListArgs || Object.keys(opts).length > 0\n ? await listFn(client, hctx.workspace, opts)\n : await listFn(client, hctx.workspace);\n outputData(\n listResult(result, true),\n hctx.ctx,\n columns as TableColumn<T>[] | undefined\n );\n } else {\n if (domainHasListArgs) {\n const opts = buildListOptions(hctx, listArgs);\n const result =\n Object.keys(opts).length > 0\n ? await listFn(client, hctx.workspace, opts)\n : await listFn(client, hctx.workspace);\n outputData(\n listResult(result, false),\n hctx.ctx,\n columns as TableColumn<T>[] | undefined\n );\n } else {\n const result = await listFn(client, hctx.workspace);\n outputData(\n listResult(result, false),\n hctx.ctx,\n columns as TableColumn<T>[] | undefined\n );\n }\n }\n },\n });\n }\n\n if (config.get) {\n const getFn = config.get;\n cmds.push({\n path: [...prefix, 'get'],\n description: `Get a ${entityName} by ID`,\n args: [{ name: 'id', description: `${entityName} ID`, required: true }],\n requiresWorkspace,\n columns: columns as TableColumn<unknown>[] | undefined,\n handler: async (hctx: CommandHandlerContext) => {\n const id = resolveId(hctx);\n const result = await getFn(requireAuth(hctx.ctx).apiClient, hctx.workspace, id);\n outputSingle(result as T, hctx.ctx, columns as TableColumn<T>[] | undefined);\n },\n });\n }\n\n if (config.create) {\n const createFn = config.create;\n cmds.push({\n path: [...prefix, 'create'],\n description: `Create a ${entityName}`,\n mutates: true,\n requiresWorkspace,\n ...(config.createExamples ? { examples: config.createExamples } : {}),\n handler: async (hctx: CommandHandlerContext) => {\n if (!hctx.data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const result = await createFn(\n requireAuth(hctx.ctx).apiClient,\n hctx.workspace,\n hctx.data\n );\n outputSingle(result as T, hctx.ctx, columns as TableColumn<T>[] | undefined);\n },\n });\n }\n\n if (config.update) {\n const updateFn = config.update;\n cmds.push({\n path: [...prefix, 'update'],\n description: `Update a ${entityName}`,\n mutates: true,\n args: [{ name: 'id', description: `${entityName} ID`, required: true }],\n requiresWorkspace,\n handler: async (hctx: CommandHandlerContext) => {\n if (!hctx.data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const id = resolveId(hctx);\n const result = await updateFn(\n requireAuth(hctx.ctx).apiClient,\n hctx.workspace,\n id,\n hctx.data\n );\n outputSingle(result as T, hctx.ctx, columns as TableColumn<T>[] | undefined);\n },\n });\n }\n\n if (config.delete || config.deleteFn) {\n const deleteArgs: ArgDef[] = [\n { name: 'id', description: `${entityName} ID`, required: true },\n ];\n if (config.supportsCascade) {\n deleteArgs.push({\n name: 'cascade',\n description: 'Also delete dependent child entities',\n required: false,\n isFlag: true,\n });\n }\n cmds.push({\n path: [...prefix, 'delete'],\n description: `Delete a ${entityName}`,\n mutates: true,\n args: deleteArgs,\n requiresWorkspace,\n handler: async (hctx: CommandHandlerContext) => {\n const id = resolveId(hctx);\n const client = requireAuth(hctx.ctx).apiClient;\n if (config.deleteFn) {\n const cascade = config.supportsCascade ? hctx.args.cascade === true : false;\n const result = await config.deleteFn(client, hctx.workspace, id, cascade);\n const suffix =\n result &&\n typeof result === 'object' &&\n 'deletedTaskCount' in result &&\n result.deletedTaskCount\n ? ` and ${result.deletedTaskCount} child entities`\n : '';\n process.stdout.write(`Deleted ${entityName} ${id}${suffix}\\n`);\n } else if (config.delete) {\n await config.delete(client, hctx.workspace, id);\n process.stdout.write(`Deleted ${entityName} ${id}\\n`);\n }\n },\n });\n }\n\n if (config.archive) {\n const archiveFn = config.archive;\n cmds.push({\n path: [...prefix, 'archive'],\n description: `Archive a ${entityName}`,\n mutates: true,\n args: [{ name: 'id', description: `${entityName} ID`, required: true }],\n requiresWorkspace,\n handler: async (hctx: CommandHandlerContext) => {\n const id = resolveId(hctx);\n const result = await archiveFn(requireAuth(hctx.ctx).apiClient, hctx.workspace, id);\n outputSingle(result as T, hctx.ctx, columns as TableColumn<T>[] | undefined);\n },\n });\n }\n\n if (config.unarchive) {\n const unarchiveFn = config.unarchive;\n cmds.push({\n path: [...prefix, 'unarchive'],\n description: `Unarchive a ${entityName}`,\n mutates: true,\n args: [{ name: 'id', description: `${entityName} ID`, required: true }],\n requiresWorkspace,\n handler: async (hctx: CommandHandlerContext) => {\n const id = resolveId(hctx);\n const result = await unarchiveFn(requireAuth(hctx.ctx).apiClient, hctx.workspace, id);\n outputSingle(result as T, hctx.ctx, columns as TableColumn<T>[] | undefined);\n },\n });\n }\n\n return [...cmds, ...extra];\n}\n","import type { CommandDef, DomainDef } from './types';\n\nexport class CommandRegistry {\n private commands = new Map<string, CommandDef>();\n private domains: DomainDef[] = [];\n\n register(domain: DomainDef): void {\n this.domains.push(domain);\n for (const cmd of domain.commands) {\n const key = cmd.path.join(' ');\n this.commands.set(key, cmd);\n }\n }\n\n registerCommand(cmd: CommandDef): void {\n const key = cmd.path.join(' ');\n this.commands.set(key, cmd);\n }\n\n /** Resolve command words to a CommandDef using longest-match.\n * Supports {param} path segments that match any word and extract as pathParams. */\n resolve(\n words: string[]\n ): { cmd: CommandDef; rest: string[]; pathParams: Record<string, string> } | undefined {\n // Try exact match first (4-word, 3-word, 2-word, 1-word)\n for (let len = Math.min(words.length, 4); len >= 1; len--) {\n const key = words.slice(0, len).join(' ');\n const cmd = this.commands.get(key);\n if (cmd) {\n return { cmd, rest: words.slice(len), pathParams: {} };\n }\n }\n // Try pattern match ({param} segments)\n for (const [, cmd] of this.commands) {\n if (cmd.path.length > words.length) continue;\n const params: Record<string, string> = {};\n let matched = true;\n for (let i = 0; i < cmd.path.length; i++) {\n const segment = cmd.path[i]!;\n const word = words[i]!;\n if (segment.startsWith('{') && segment.endsWith('}')) {\n params[segment.slice(1, -1)] = word;\n } else if (segment !== word) {\n matched = false;\n break;\n }\n }\n if (matched) {\n return { cmd, rest: words.slice(cmd.path.length), pathParams: params };\n }\n }\n return undefined;\n }\n\n /** Generate help text. If prefix given, show commands under that prefix. */\n getHelp(prefix?: string[]): string {\n if (!prefix || prefix.length === 0) {\n return this.getTopLevelHelp();\n }\n\n const prefixStr = prefix.join(' ');\n const matching: CommandDef[] = [];\n for (const [key, cmd] of this.commands) {\n if (key.startsWith(prefixStr + ' ') || key === prefixStr) {\n matching.push(cmd);\n }\n }\n\n // Also match commands with {param} segments in the prefix position\n for (const [, cmd] of this.commands) {\n if (matching.includes(cmd)) continue;\n if (cmd.path.length <= prefix.length) continue;\n let prefixMatches = true;\n for (let i = 0; i < prefix.length; i++) {\n const seg = cmd.path[i]!;\n if (seg !== prefix[i] && !(seg.startsWith('{') && seg.endsWith('}'))) {\n prefixMatches = false;\n break;\n }\n }\n if (prefixMatches) matching.push(cmd);\n }\n\n if (matching.length === 0) {\n return `No commands found for: ${prefixStr}`;\n }\n\n // If exactly one command matched (leaf command), show detailed help\n if (matching.length === 1 && matching[0]!.path.join(' ') === prefixStr) {\n return this.getCommandHelp(matching[0]!);\n }\n\n // Determine the placeholder: if all next segments are {param}, use that param name\n const nextSegments = new Set(matching.map((cmd) => cmd.path[prefix.length]).filter(Boolean));\n const allParams = [...nextSegments].every((s) => s!.startsWith('{') && s!.endsWith('}'));\n const placeholder =\n allParams && nextSegments.size === 1\n ? `<${[...nextSegments][0]!.slice(1, -1)}>`\n : '<command>';\n\n const lines = [`Usage: gr ${prefixStr} ${placeholder} [options]\\n`, 'Commands:'];\n for (const cmd of matching.sort((a, b) => a.path.join(' ').localeCompare(b.path.join(' ')))) {\n const subPath = cmd.path.slice(prefix.length).join(' ') || cmd.path[cmd.path.length - 1]!;\n lines.push(` ${subPath.padEnd(28)} ${cmd.description}`);\n }\n return lines.join('\\n') + '\\n';\n }\n\n private getCommandHelp(cmd: CommandDef): string {\n const cmdStr = cmd.path.join(' ');\n const lines = [`${cmd.description}\\n`, `Usage: gr ${cmdStr} [options]`];\n\n if (cmd.requiresWorkspace) {\n lines.push(' Requires: -w <workspace-uuid>');\n }\n if (cmd.mutates) {\n lines.push(' Requires: --allow-write');\n }\n\n if (cmd.args && cmd.args.length > 0) {\n lines.push('', 'Arguments:');\n for (const arg of cmd.args) {\n const flag = arg.isFlag ? `--${arg.name}` : `--${arg.name} <value>`;\n const req = arg.required ? ' (required)' : '';\n lines.push(` ${flag.padEnd(28)} ${arg.description}${req}`);\n }\n }\n\n if (cmd.examples && cmd.examples.length > 0) {\n lines.push('', 'Examples:');\n for (const ex of cmd.examples) {\n lines.push(` ${ex}`);\n }\n }\n\n return lines.join('\\n') + '\\n';\n }\n\n private getTopLevelHelp(): string {\n const lines = ['Usage: gr <command> [options]\\n', 'Commands:'];\n\n // Group by domain\n const seen = new Set<string>();\n for (const domain of this.domains) {\n if (!seen.has(domain.name)) {\n seen.add(domain.name);\n lines.push(` ${domain.name.padEnd(28)} ${domain.description}`);\n }\n }\n\n // Add standalone commands (not in any domain)\n for (const [, cmd] of this.commands) {\n const topWord = cmd.path[0]!;\n if (!seen.has(topWord) && cmd.path.length === 1) {\n seen.add(topWord);\n lines.push(` ${topWord.padEnd(28)} ${cmd.description}`);\n }\n }\n\n lines.push(\n '',\n 'Global Options:',\n ' --env <env> Environment: dev, staging, prod (default: dev)',\n ' -o, --output-format <fmt> Output format: json, jsonl, table (default: auto)',\n ' -v, --verbose Verbose output to stderr',\n ' --help Show help',\n ' --version Show version'\n );\n\n return lines.join('\\n') + '\\n';\n }\n}\n","import type { AuthenticatedContext, CommandContext } from './context';\nimport type { TableColumn } from './output';\n\nexport interface ArgDef {\n name: string;\n alias?: string;\n /** Additional long-form aliases (e.g. ['workspace-id', 'id'] for --wid) */\n aliases?: string[];\n description: string;\n required?: boolean;\n isFlag?: boolean;\n default?: string | boolean;\n}\n\nexport type ParsedArgs = Record<string, string | boolean | undefined>;\n\n/**\n * Context passed to a command handler.\n *\n * `ctx` is a discriminated union of `AuthenticatedContext` and `CommandContext`.\n * Handlers registered without `requiresAuth: false` always receive an\n * `AuthenticatedContext` at runtime, but the type does not express this — call\n * `requireAuth(hctx.ctx)` before accessing `apiClient` / `accessToken` so that\n * a handler missing `requiresAuth: false` cannot silently access undefined\n * fields if it is later miswired.\n */\nexport interface CommandHandlerContext {\n ctx: AuthenticatedContext | CommandContext;\n args: ParsedArgs;\n workspace: string;\n data?: unknown;\n}\n\nexport interface CommandDef<T = unknown> {\n path: string[];\n description: string;\n args?: ArgDef[];\n /** Example usage lines shown in command-level help */\n examples?: string[];\n requiresWorkspace?: boolean;\n requiresAuth?: boolean;\n /** Whether this command mutates data. Requires --allow-write to execute. */\n mutates?: boolean;\n columns?: TableColumn<T>[];\n handler: (hctx: CommandHandlerContext) => Promise<void>;\n}\n\nexport interface DomainDef {\n name: string;\n description: string;\n commands: CommandDef[];\n}\n\n/** Extract a required string arg, throwing if missing or not a string */\nexport function requireString(args: ParsedArgs, key: string): string {\n const val = args[key];\n if (typeof val !== 'string') throw new Error(`Missing required argument: --${key}`);\n return val;\n}\n\n/** Extract a required numeric arg, throwing if missing */\nexport function requireNumber(args: ParsedArgs, key: string): number {\n const val = args[key];\n if (typeof val !== 'string') throw new Error(`Missing required argument: --${key}`);\n const num = Number(val);\n if (isNaN(num)) throw new Error(`Argument --${key} must be a number`);\n return num;\n}\n","import type { DomainDef } from '../lib/types';\nimport { requireString } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\n// Operator-facing CLI domain for async sub-agent tasks.\n//\n// Unlike the LLM a2a tools (which are scoped to the requestor for\n// inter-agent isolation), this domain calls workspace-scoped HTTP routes\n// that return any agent task in the workspace. The routes require the\n// caller to hold MEMBERS_READ / MEMBERS_WRITE — they are for operators,\n// not sibling agents.\n\nconst LIST_COLUMNS: TableColumn<unknown>[] = [\n { header: 'UUID', getValue: (item: any) => String(item.uuid ?? '') },\n { header: 'STATUS', getValue: (item: any) => String(item.status ?? '') },\n {\n header: 'AGENT',\n getValue: (item: any) => (item.agentMemberId != null ? String(item.agentMemberId) : ''),\n },\n { header: 'DEPTH', getValue: (item: any) => String(item.depth ?? 0) },\n { header: 'CREATED', getValue: (item: any) => String(item.createdAt ?? '') },\n];\n\nconst MESSAGE_COLUMNS: TableColumn<unknown>[] = [\n { header: 'ROLE', getValue: (item: any) => String(item.role ?? '') },\n {\n header: 'TIMESTAMP',\n getValue: (item: any) => String(item.receivedAt ?? ''),\n },\n {\n header: 'CONTENT',\n getValue: (item: any) => {\n const content = String(item.content ?? '');\n const oneLine = content.replace(/\\s+/g, ' ').trim();\n return oneLine.length > 80 ? `${oneLine.slice(0, 77)}...` : oneLine;\n },\n },\n];\n\nexport const agentTasksDomain: DomainDef = {\n name: 'agent-tasks',\n description:\n 'Inspect and cancel async sub-agent tasks (operator-facing; requires members_read/write)',\n commands: [\n {\n path: ['agent-tasks', 'list'],\n description: 'List agent tasks in the workspace (newest first)',\n requiresWorkspace: true,\n args: [\n {\n name: 'status',\n description:\n 'Filter by A2A state (submitted|working|input-required|completed|failed|canceled|rejected|auth-required)',\n required: false,\n },\n {\n name: 'agent',\n description: 'Filter by executing agent member id',\n required: false,\n },\n {\n name: 'parent-task',\n description:\n 'Filter by parent agent task uuid (not supported server-side yet — filters by id)',\n required: false,\n },\n {\n name: 'limit',\n description: 'Max rows to return (default 50)',\n required: false,\n },\n ],\n columns: LIST_COLUMNS,\n handler: async ({ ctx, workspace, args }) => {\n const params: {\n status?: any;\n agentMemberId?: number;\n parentTaskId?: number;\n limit?: number;\n } = {};\n if (typeof args.status === 'string') params.status = args.status;\n if (typeof args.agent === 'string') {\n const n = Number(args.agent);\n if (!isNaN(n)) params.agentMemberId = n;\n }\n if (typeof args['parent-task'] === 'string') {\n const n = Number(args['parent-task']);\n if (!isNaN(n)) params.parentTaskId = n;\n }\n if (typeof args.limit === 'string') {\n const n = Number(args.limit);\n if (!isNaN(n)) params.limit = n;\n }\n const result = await requireAuth(ctx).apiClient.getAgentTasks(workspace, params);\n outputData(result, ctx, LIST_COLUMNS);\n },\n },\n {\n path: ['agent-tasks', 'get'],\n description: 'Get a single agent task by UUID',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Agent task UUID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getAgentTask(\n workspace,\n requireString(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['agent-tasks', 'cancel'],\n description: 'Cancel a running agent task (idempotent; terminal tasks are returned as-is)',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Agent task UUID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.cancelAgentTask(\n workspace,\n requireString(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['agent-tasks', 'messages'],\n description: 'Show recent messages from a sub-agent task context chat',\n requiresWorkspace: true,\n args: [\n { name: 'id', description: 'Agent task UUID', required: true },\n {\n name: 'limit',\n description: 'Max messages to return (default 20)',\n required: false,\n },\n ],\n columns: MESSAGE_COLUMNS,\n handler: async ({ ctx, workspace, args }) => {\n const params: { limit?: number } = {};\n if (typeof args.limit === 'string') {\n const n = Number(args.limit);\n if (!isNaN(n)) params.limit = n;\n }\n const result = await requireAuth(ctx).apiClient.getAgentTaskMessages(\n workspace,\n requireString(args, 'id'),\n params\n );\n outputData(result, ctx, MESSAGE_COLUMNS);\n },\n },\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { crudCommands } from '../lib/crud';\nimport { COL } from '../lib/output';\n\nconst COLUMNS = [COL.id(), COL.uuid(), COL.name(), COL.status(), COL.created()];\n\nexport const agentsDomain: DomainDef = {\n name: 'agents',\n description: 'Manage agents',\n commands: [\n ...crudCommands({\n prefix: ['agents'],\n entityName: 'agent',\n listMethod: 'getAgents',\n getMethod: 'getAgent',\n createMethod: 'createAgent',\n updateMethod: 'updateAgent',\n deleteMethod: 'deleteAgent',\n archiveMethod: 'archiveAgent',\n unarchiveMethod: 'unarchiveAgent',\n columns: COLUMNS,\n paginationSupport: 'full',\n }),\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { AGUIClient, getTextDelta, getErrorMessage } from '../cli-utils';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.uuid(),\n { header: 'MEMBER', getValue: (item: any) => item.member_name ?? String(item.member_id ?? '') },\n COL.status(),\n { header: 'CHANNEL', getValue: (item: any) => item.channel ?? '' },\n COL.created(),\n];\n\nconst LABEL_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.uuid(),\n COL.name(),\n { header: 'COLOR', getValue: (item: any) => item.color ?? '' },\n];\n\nconst FILTER_COLUMNS: TableColumn<unknown>[] = [COL.id(), COL.uuid(), COL.name()];\n\nconst MESSAGE_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'ROLE', getValue: (item: any) => item.role ?? '' },\n {\n header: 'CONTENT',\n getValue: (item: any) => String(item.content ?? '').slice(0, 80),\n maxWidth: 80,\n },\n {\n header: 'TOOL_CALLS',\n getValue: (item: any) =>\n Array.isArray(item.tool_calls) && item.tool_calls.length > 0\n ? item.tool_calls.map((t: any) => t.function?.name ?? '?').join(',')\n : '',\n },\n COL.created(),\n];\n\nexport const chatsDomain: DomainDef = {\n name: 'chats',\n description: 'Manage chats',\n commands: [\n ...crudCommands({\n prefix: ['chats'],\n entityName: 'chat',\n listMethod: 'getChats',\n getMethod: 'getChat',\n createMethod: 'createChat',\n updateMethod: 'updateChat',\n deleteMethod: 'deleteChat',\n archiveMethod: 'archiveChat',\n unarchiveMethod: 'unarchiveChat',\n columns: COLUMNS,\n paginationSupport: 'full',\n listArgs: [\n { name: 'search', description: 'Search by name' },\n { name: 'channel', description: 'Filter by channel (phone, sms, web, email)' },\n {\n name: 'is-anonymous',\n description: 'Show only anonymous chats (requires CHATS_ADMIN)',\n isFlag: true,\n },\n { name: 'is-test', description: 'Show only test chats', isFlag: true },\n { name: 'member-id', description: 'Filter by member ID' },\n ],\n }),\n // Messages\n {\n path: ['chats', 'messages', 'list'],\n description:\n 'List messages for a chat. Use --limit/--offset to page; the API caps a single request at 100. Tool-call shell rows that the API filter excludes (parent_message_id IS NOT NULL or parent_call_id IS NOT NULL) are still hidden — use `gr chats inspect --id <chat>` for the full debug view.',\n requiresWorkspace: true,\n args: [\n { name: 'chat-id', description: 'Chat ID', required: true },\n {\n name: 'limit',\n description: 'Max messages to return (1-100, default 100)',\n },\n {\n name: 'offset',\n description: 'Offset for pagination (default 0)',\n },\n ],\n handler: async ({ ctx, workspace, args }) => {\n // Default to 100 (the API max). The API's own default of 10\n // hides almost every message in long voice chats — operators\n // hit it constantly when debugging EventRule canned messages\n // that show up later in the conversation. See\n // docs/dev/xai-grok-voice-agent-audit-2026-04-24.md \"P5\".\n const rawLimit = (args as any).limit;\n const rawOffset = (args as any).offset;\n const limit =\n rawLimit === undefined || rawLimit === null || rawLimit === ''\n ? 100\n : Number(rawLimit);\n const offset =\n rawOffset === undefined || rawOffset === null || rawOffset === ''\n ? 0\n : Number(rawOffset);\n if (!Number.isInteger(limit) || limit < 1 || limit > 100) {\n throw new Error('--limit must be an integer between 1 and 100');\n }\n if (!Number.isInteger(offset) || offset < 0) {\n throw new Error('--offset must be a non-negative integer');\n }\n const result = await requireAuth(ctx).apiClient.getChatMessages(\n workspace,\n requireNumber(args, 'chat-id'),\n limit,\n offset\n );\n outputData(result, ctx, MESSAGE_COLUMNS);\n },\n },\n {\n path: ['chats', 'messages', 'send'],\n description:\n 'Send a user message to a chat (triggers AI inference). Use --stream to stream the response.',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'chat-id', description: 'Chat ID', required: true },\n { name: 'stream', description: 'Stream the AI response via AG-UI', isFlag: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n const content = typeof data === 'string' ? data : (data as any)?.content;\n if (!content)\n throw new Error(\n 'Message content is required (pass --data \\'\"your message\"\\' or --data \\'{\"content\":\"your message\"}\\')'\n );\n const chatId = requireNumber(args, 'chat-id');\n\n if (args.stream) {\n // Stream via AG-UI protocol\n const aguiClient = new AGUIClient({\n baseUrl: ctx.envConfig.apiUrl,\n workspaceUuid: workspace,\n chatId,\n accessToken: requireAuth(ctx).accessToken,\n });\n process.stdout.write('\\x1B[32mAssistant:\\x1B[0m ');\n await aguiClient.sendMessage([{ role: 'user', content }], (event) => {\n const delta = getTextDelta(event);\n if (delta) process.stdout.write(delta);\n const errorMsg = getErrorMessage(event);\n if (errorMsg) process.stderr.write(`\\n\\x1B[31mError: ${errorMsg}\\x1B[0m\\n`);\n });\n process.stdout.write('\\n');\n } else {\n const result = await requireAuth(ctx).apiClient.sendChatMessage(\n workspace,\n chatId,\n content\n );\n outputSingle(result, ctx, MESSAGE_COLUMNS);\n }\n },\n },\n {\n path: ['chats', 'messages', 'send-as-assistant'],\n description: 'Send an assistant message to a chat (does not trigger AI inference)',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'chat-id', description: 'Chat ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.sendAssistantMessage(\n workspace,\n requireNumber(args, 'chat-id'),\n data as any\n );\n outputSingle(result, ctx, MESSAGE_COLUMNS);\n },\n },\n // Summarize\n {\n path: ['chats', 'summarize'],\n description: 'Summarize a chat',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Chat ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.summarizeChat(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n // Export\n {\n path: ['chats', 'export'],\n description: 'Export a single chat',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Chat ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.exportChat(\n workspace,\n requireNumber(args, 'id')\n );\n process.stdout.write(await result.text());\n },\n },\n {\n path: ['chats', 'export-all'],\n description: 'Export all chats',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.exportChats(workspace);\n process.stdout.write(await result.text());\n },\n },\n // Token usage\n {\n path: ['chats', 'token-usage'],\n description: 'Get token usage for a chat',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Chat ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getChatTokenUsage(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n // Needs response\n {\n path: ['chats', 'needs-response'],\n description: 'List chats that need a response',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getChatsNeedsResponse(workspace);\n outputData(result, ctx, COLUMNS);\n },\n },\n // Inspect (aggregated debug view)\n {\n path: ['chats', 'inspect'],\n description: 'Inspect a chat with messages, assignment state, and data records',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Chat ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const chatId = requireNumber(args, 'id');\n const [chat, messages, ws] = await Promise.all([\n requireAuth(ctx).apiClient.getChat(workspace, chatId),\n requireAuth(ctx).apiClient.getChatMessages(workspace, chatId),\n requireAuth(ctx).apiClient.getWorkspace(workspace),\n ]);\n const isHipaa = ws.features?.includes('hipaa_compliance' as any);\n\n const truncate = (content: unknown) => {\n const text = typeof content === 'string' ? content : JSON.stringify(content);\n return text.slice(0, 200);\n };\n\n const result: Record<string, unknown> = {\n chat: {\n id: chat.id,\n title: chat.title,\n channel: chat.channel,\n chatType: chat.chatType,\n workflowId: chat.workflowId,\n assignmentId: chat.assignmentId,\n messageCount: chat.messageCount,\n createdAt: chat.createdAt,\n },\n messages: messages.map((m: any) => ({\n id: m.id,\n role: m.role,\n content: isHipaa ? '[REDACTED — HIPAA workspace]' : truncate(m.content),\n })),\n };\n\n // If assignment chat, fetch assignment with current task + data records\n const assignmentId = chat.assignmentId;\n if (assignmentId) {\n const assignment = await requireAuth(ctx).apiClient.getAssignment(\n workspace,\n assignmentId\n );\n result.assignment = {\n id: assignment.id,\n status: assignment.status,\n workflowId: assignment.workflowId,\n workflowName: assignment.workflowName,\n currentTask: assignment.currentTask,\n dataRecords: assignment.dataRecords?.map((dr: any) => ({\n id: dr.id,\n dataTypeId: dr.dataTypeId,\n fieldValues: isHipaa ? '[REDACTED — HIPAA workspace]' : dr.fieldValues,\n })),\n };\n }\n\n outputSingle(result, ctx);\n },\n },\n // Chat Labels CRUD\n ...crudCommands({\n prefix: ['chats', 'labels'],\n entityName: 'chat label',\n listMethod: 'getChatLabels',\n getMethod: 'getChatLabel',\n createMethod: 'createChatLabel',\n updateMethod: 'updateChatLabel',\n deleteMethod: 'deleteChatLabel',\n columns: LABEL_COLUMNS,\n }),\n // Chat Filters CRUD\n ...crudCommands({\n prefix: ['chats', 'filters'],\n entityName: 'chat filter',\n listMethod: 'getChatFilters',\n getMethod: 'getChatFilter',\n createMethod: 'createChatFilter',\n updateMethod: 'updateChatFilter',\n deleteMethod: 'deleteChatFilter',\n columns: FILTER_COLUMNS,\n }),\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { CLIError } from '../lib/errors';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.uuid(),\n COL.name(),\n { header: 'ROLE', getValue: (item: any) => item.role ?? '' },\n COL.status(),\n COL.created(),\n];\n\nconst LABEL_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.uuid(),\n COL.name(),\n { header: 'COLOR', getValue: (item: any) => item.color ?? '' },\n];\n\nconst FILTER_COLUMNS: TableColumn<unknown>[] = [COL.id(), COL.uuid(), COL.name()];\n\nconst FIELD_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'TYPE', getValue: (item: any) => item.field_type ?? '' },\n { header: 'REQUIRED', getValue: (item: any) => String(item.required ?? false) },\n];\n\nconst ROLE_COLUMNS: TableColumn<unknown>[] = [COL.id(), COL.uuid(), COL.name()];\n\nexport const membersDomain: DomainDef = {\n name: 'members',\n description: 'Manage members',\n commands: [\n ...crudCommands({\n prefix: ['members'],\n entityName: 'member',\n listMethod: 'getWorkspaceMembers',\n getMethod: 'getWorkspaceMember',\n createMethod: 'createWorkspaceMember',\n updateMethod: 'updateMember',\n deleteMethod: 'deleteMember',\n archiveMethod: 'archiveMember',\n unarchiveMethod: 'unarchiveMember',\n columns: COLUMNS,\n }),\n // Current member\n {\n path: ['members', 'me'],\n description: 'Get the current member',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getCurrentMember(workspace);\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Import/Export\n {\n path: ['members', 'import'],\n description: 'Import members from data',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const result = await (requireAuth(ctx).apiClient as any).importMembers(workspace, data);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['members', 'export'],\n description: 'Export members',\n requiresWorkspace: true,\n args: [\n {\n name: 'fields',\n description:\n 'Comma-separated field names (default: id,name,email,phone,member_type,labels)',\n },\n {\n name: 'member-type',\n description: 'Filter by member type: member, test, anonymous',\n },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const defaultFields = ['id', 'name', 'email', 'phone', 'member_type', 'labels'];\n const fields = args.fields\n ? String(args.fields)\n .split(',')\n .map((f: string) => f.trim())\n : defaultFields;\n const memberType = args['member-type'] as 'member' | 'test' | 'anonymous' | undefined;\n const result = await (requireAuth(ctx).apiClient as any).exportMembers(\n workspace,\n fields,\n [],\n memberType\n );\n process.stdout.write(await result.text());\n },\n },\n // Member Labels CRUD\n ...crudCommands({\n prefix: ['members', 'labels'],\n entityName: 'member label',\n listMethod: 'getMemberLabels',\n getMethod: 'getMemberLabel',\n createMethod: 'createMemberLabel',\n updateMethod: 'updateMemberLabel',\n deleteMethod: 'deleteMemberLabel',\n columns: LABEL_COLUMNS,\n }),\n // Member Filters CRUD\n ...crudCommands({\n prefix: ['members', 'filters'],\n entityName: 'member filter',\n listMethod: 'getMemberFilters',\n getMethod: 'getMemberFilter',\n createMethod: 'createMemberFilter',\n updateMethod: 'updateMemberFilter',\n deleteMethod: 'deleteMemberFilter',\n columns: FILTER_COLUMNS,\n }),\n // Member Fields — nested resource requiring memberId\n {\n path: ['members', 'fields', 'list'],\n description: 'List fields for a member',\n requiresWorkspace: true,\n args: [{ name: 'member-id', description: 'Member ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const memberId = requireNumber(args, 'member-id');\n const result = await requireAuth(ctx).apiClient.getMemberFields(workspace, memberId);\n outputData(result, ctx, FIELD_COLUMNS);\n },\n },\n {\n path: ['members', 'fields', 'create'],\n description: 'Create a member field',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'member-id', description: 'Member ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const memberId = requireNumber(args, 'member-id');\n const result = await requireAuth(ctx).apiClient.createMemberField(\n workspace,\n memberId,\n data as any\n );\n outputSingle(result, ctx, FIELD_COLUMNS);\n },\n },\n {\n path: ['members', 'fields', 'update'],\n description: 'Update a member field',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'member-id', description: 'Member ID', required: true },\n { name: 'id', description: 'Field ID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const memberId = requireNumber(args, 'member-id');\n const fieldId = requireNumber(args, 'id');\n const result = await requireAuth(ctx).apiClient.updateMemberField(\n workspace,\n memberId,\n fieldId,\n data as any\n );\n outputSingle(result, ctx, FIELD_COLUMNS);\n },\n },\n {\n path: ['members', 'fields', 'delete'],\n description: 'Delete a member field',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'member-id', description: 'Member ID', required: true },\n { name: 'id', description: 'Field ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const memberId = requireNumber(args, 'member-id');\n const fieldId = requireNumber(args, 'id');\n await requireAuth(ctx).apiClient.deleteMemberField(workspace, memberId, fieldId);\n process.stdout.write(`Deleted member field ${fieldId}\\n`);\n },\n },\n // Member Roles CRUD\n ...crudCommands({\n prefix: ['members', 'roles'],\n entityName: 'member role',\n listMethod: 'getMemberRoles',\n getMethod: 'getMemberRole',\n createMethod: 'createMemberRole',\n updateMethod: 'updateMemberRole',\n deleteMethod: 'deleteMemberRole',\n columns: ROLE_COLUMNS,\n }),\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.uuid(),\n COL.name(),\n COL.status(),\n {\n header: 'WORKFLOW',\n getValue: (item: any) => item.workflow_name ?? String(item.workflow_id ?? ''),\n },\n COL.created(),\n];\n\nexport const tasksDomain: DomainDef = {\n name: 'tasks',\n description: 'Manage tasks',\n commands: [\n ...crudCommands({\n prefix: ['tasks'],\n entityName: 'task',\n listMethod: 'getTasks',\n getMethod: 'getTask',\n createMethod: 'createTask',\n updateMethod: 'updateTask',\n deleteMethod: 'deleteTask',\n archiveMethod: 'archiveTask',\n unarchiveMethod: 'unarchiveTask',\n columns: COLUMNS,\n }),\n {\n path: ['tasks', 'clone'],\n description: 'Clone a task',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Task ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.cloneTask(\n workspace,\n requireNumber(args, 'id'),\n (data as any)?.name ?? '',\n (data as any)?.slug\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['tasks', 'ability-types'],\n description: 'List available ability types',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getAbilityTypes(workspace);\n outputData(result, ctx);\n },\n },\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { CLIError } from '../lib/errors';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.uuid(),\n COL.name(),\n { header: 'TASKS', getValue: (item: any) => String(item.taskCount ?? '') },\n COL.created(),\n];\n\nconst NOTE_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'TITLE', getValue: (item: any) => item.title ?? '' },\n {\n header: 'CONTENT',\n getValue: (item: any) => String(item.content ?? '').slice(0, 60),\n maxWidth: 60,\n },\n COL.created(),\n];\n\nconst CONTRIBUTOR_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n {\n header: 'ACCOUNT',\n getValue: (item: any) => item.account_name ?? String(item.account_id ?? ''),\n },\n { header: 'ROLE', getValue: (item: any) => item.role ?? '' },\n];\n\nconst TEMPLATE_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n {\n header: 'DESCRIPTION',\n getValue: (item: any) => String(item.description ?? '').slice(0, 60),\n maxWidth: 60,\n },\n];\n\nexport const workflowsDomain: DomainDef = {\n name: 'workflows',\n description: 'Manage workflows',\n commands: [\n ...crudCommands({\n prefix: ['workflows'],\n entityName: 'workflow',\n listMethod: 'getWorkflows',\n getMethod: 'getWorkflow',\n createMethod: 'createWorkflow',\n updateMethod: 'updateWorkflow',\n deleteMethod: 'deleteWorkflow',\n supportsCascade: true,\n archiveMethod: 'archiveWorkflow',\n unarchiveMethod: 'unarchiveWorkflow',\n columns: COLUMNS,\n }),\n // Clone\n {\n path: ['workflows', 'clone'],\n description: 'Clone a workflow',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Workflow ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.cloneWorkflow(\n workspace,\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Templates\n {\n path: ['workflows', 'templates'],\n description: 'List workflow templates',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getWorkflowTemplates(workspace);\n outputData(result, ctx, TEMPLATE_COLUMNS);\n },\n },\n {\n path: ['workflows', 'create-from-template'],\n description: 'Create a workflow from a template',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const result = await requireAuth(ctx).apiClient.createWorkflowFromTemplate(\n workspace,\n (data as any)?.templateUuid ?? '',\n data as any\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Activity\n {\n path: ['workflows', 'activity'],\n description: 'Get workflow activity',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Workflow ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getWorkflowActivity(\n workspace,\n requireNumber(args, 'id')\n );\n outputData(result, ctx);\n },\n },\n // Diagram\n {\n path: ['workflows', 'diagram'],\n description: 'Get workflow diagram',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Workflow ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getWorkflowDiagram(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n // Notes — nested resource requiring workflowId\n {\n path: ['workflows', 'notes', 'list'],\n description: 'List workflow notes',\n requiresWorkspace: true,\n args: [{ name: 'workflow-id', description: 'Workflow ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const workflowId = requireNumber(args, 'workflow-id');\n const result = await requireAuth(ctx).apiClient.getWorkflowNotes(workspace, workflowId);\n outputData(result, ctx, NOTE_COLUMNS);\n },\n },\n {\n path: ['workflows', 'notes', 'create'],\n description: 'Create a workflow note',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'workflow-id', description: 'Workflow ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const workflowId = requireNumber(args, 'workflow-id');\n const result = await requireAuth(ctx).apiClient.createWorkflowNote(\n workspace,\n workflowId,\n data as any\n );\n outputSingle(result, ctx, NOTE_COLUMNS);\n },\n },\n {\n path: ['workflows', 'notes', 'update'],\n description: 'Update a workflow note',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'workflow-id', description: 'Workflow ID', required: true },\n { name: 'id', description: 'Note ID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const workflowId = requireNumber(args, 'workflow-id');\n const noteId = requireNumber(args, 'id');\n const result = await requireAuth(ctx).apiClient.updateWorkflowNote(\n workspace,\n workflowId,\n noteId,\n data as any\n );\n outputSingle(result, ctx, NOTE_COLUMNS);\n },\n },\n {\n path: ['workflows', 'notes', 'delete'],\n description: 'Delete a workflow note',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'workflow-id', description: 'Workflow ID', required: true },\n { name: 'id', description: 'Note ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const workflowId = requireNumber(args, 'workflow-id');\n const noteId = requireNumber(args, 'id');\n await requireAuth(ctx).apiClient.deleteWorkflowNote(workspace, workflowId, noteId);\n process.stdout.write(`Deleted workflow note ${noteId}\\n`);\n },\n },\n // Contributors — nested resource requiring workflowId\n {\n path: ['workflows', 'contributors', 'list'],\n description: 'List workflow contributors',\n requiresWorkspace: true,\n args: [{ name: 'workflow-id', description: 'Workflow ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const workflowId = requireNumber(args, 'workflow-id');\n const result = await requireAuth(ctx).apiClient.getWorkflowContributors(\n workspace,\n workflowId\n );\n outputData(result, ctx, CONTRIBUTOR_COLUMNS);\n },\n },\n {\n path: ['workflows', 'contributors', 'create'],\n description: 'Add a workflow contributor',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'workflow-id', description: 'Workflow ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const workflowId = requireNumber(args, 'workflow-id');\n const result = await requireAuth(ctx).apiClient.createWorkflowContributor(\n workspace,\n workflowId,\n data as any\n );\n outputSingle(result, ctx, CONTRIBUTOR_COLUMNS);\n },\n },\n {\n path: ['workflows', 'contributors', 'update'],\n description: 'Update a workflow contributor',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'workflow-id', description: 'Workflow ID', required: true },\n { name: 'id', description: 'Contributor ID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const workflowId = requireNumber(args, 'workflow-id');\n const contributorId = requireNumber(args, 'id');\n const result = await requireAuth(ctx).apiClient.updateWorkflowContributor(\n workspace,\n workflowId,\n contributorId,\n data as any\n );\n outputSingle(result, ctx, CONTRIBUTOR_COLUMNS);\n },\n },\n {\n path: ['workflows', 'contributors', 'delete'],\n description: 'Remove a workflow contributor',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'workflow-id', description: 'Workflow ID', required: true },\n { name: 'id', description: 'Contributor ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const workflowId = requireNumber(args, 'workflow-id');\n const contributorId = requireNumber(args, 'id');\n await requireAuth(ctx).apiClient.deleteWorkflowContributor(\n workspace,\n workflowId,\n contributorId\n );\n process.stdout.write(`Deleted workflow contributor ${contributorId}\\n`);\n },\n },\n ],\n};\n","import { type DomainDef, requireString, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst WORKFLOW_UUID_ARG = {\n name: 'workflow-uuid',\n description: 'Workflow UUID',\n required: true,\n} as const;\n\nconst VERSION_ARG = {\n name: 'version',\n description: 'Version number',\n required: true,\n} as const;\n\nconst COLUMNS: TableColumn<unknown>[] = [\n { header: 'VERSION', getValue: (item: any) => String(item.versionNumber ?? '') },\n COL.uuid(),\n COL.name(),\n {\n header: 'ACTIVE',\n getValue: (item: any) => (item.isActive ? 'yes' : 'no'),\n },\n {\n header: 'SOURCE',\n getValue: (item: any) => item.sourceType ?? '',\n },\n {\n header: 'PUBLISHED',\n getValue: (item: any) => item.publishedAt ?? '',\n },\n {\n header: 'SUMMARY',\n getValue: (item: any) => (item.changeSummary ?? '').slice(0, 50),\n maxWidth: 50,\n },\n];\n\nexport const workflowVersionsDomain: DomainDef = {\n name: 'workflow-versions',\n description: 'Manage workflow versions (publish, activate, inspect snapshots)',\n commands: [\n // List versions\n {\n path: ['workflow-versions', 'list'],\n description: 'List all published versions of a workflow',\n requiresWorkspace: true,\n args: [WORKFLOW_UUID_ARG],\n handler: async ({ ctx, workspace, args }) => {\n const workflowUuid = requireString(args, 'workflow-uuid');\n const result = await requireAuth(ctx).apiClient.getWorkflowVersions(\n workspace,\n workflowUuid\n );\n process.stderr.write(`Next version number: ${result.nextVersionNumber}\\n`);\n outputData(result.versions, ctx, COLUMNS);\n },\n },\n // Get specific version\n {\n path: ['workflow-versions', 'get'],\n description: 'Get a specific version by number (includes full snapshot)',\n requiresWorkspace: true,\n args: [WORKFLOW_UUID_ARG, VERSION_ARG],\n handler: async ({ ctx, workspace, args }) => {\n const workflowUuid = requireString(args, 'workflow-uuid');\n const versionNumber = requireNumber(args, 'version');\n const result = await requireAuth(ctx).apiClient.getWorkflowVersion(\n workspace,\n workflowUuid,\n versionNumber\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Get active version\n {\n path: ['workflow-versions', 'active'],\n description: 'Get the currently active version of a workflow',\n requiresWorkspace: true,\n args: [WORKFLOW_UUID_ARG],\n handler: async ({ ctx, workspace, args }) => {\n const workflowUuid = requireString(args, 'workflow-uuid');\n const result = await requireAuth(ctx).apiClient.getWorkflowVersionActive(\n workspace,\n workflowUuid\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Publish\n {\n path: ['workflow-versions', 'publish'],\n description: 'Publish the live workflow as a new immutable version',\n mutates: true,\n requiresWorkspace: true,\n args: [\n WORKFLOW_UUID_ARG,\n {\n name: 'name',\n description: 'Human-readable version name',\n required: false,\n },\n {\n name: 'summary',\n description: 'Change summary',\n required: false,\n },\n {\n name: 'no-activate',\n description: 'Publish without activating',\n isFlag: true,\n required: false,\n },\n ],\n examples: [\n 'workflow-versions publish --workflow-uuid $UUID',\n 'workflow-versions publish --workflow-uuid $UUID --name \"v2 Release\" --summary \"Added triage step\"',\n 'workflow-versions publish --workflow-uuid $UUID --no-activate',\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n const workflowUuid = requireString(args, 'workflow-uuid');\n const body = (data as Record<string, unknown>) ?? {};\n // CLI flags override JSON data\n if (args.name) body.name = args.name;\n if (args.summary) body.changeSummary = args.summary;\n if (args['no-activate']) body.activate = false;\n const result = await requireAuth(ctx).apiClient.publishWorkflowVersion(\n workspace,\n workflowUuid,\n body\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Activate\n {\n path: ['workflow-versions', 'activate'],\n description: 'Activate a version so it receives new assignments',\n mutates: true,\n requiresWorkspace: true,\n args: [WORKFLOW_UUID_ARG, VERSION_ARG],\n handler: async ({ ctx, workspace, args }) => {\n const workflowUuid = requireString(args, 'workflow-uuid');\n const versionNumber = requireNumber(args, 'version');\n const result = await requireAuth(ctx).apiClient.activateWorkflowVersion(\n workspace,\n workflowUuid,\n versionNumber\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Deactivate\n {\n path: ['workflow-versions', 'deactivate'],\n description: 'Deactivate a version so it no longer receives new assignments',\n mutates: true,\n requiresWorkspace: true,\n args: [WORKFLOW_UUID_ARG, VERSION_ARG],\n handler: async ({ ctx, workspace, args }) => {\n const workflowUuid = requireString(args, 'workflow-uuid');\n const versionNumber = requireNumber(args, 'version');\n const result = await requireAuth(ctx).apiClient.deactivateWorkflowVersion(\n workspace,\n workflowUuid,\n versionNumber\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Diff (compare two versions, 0 = draft)\n {\n path: ['workflow-versions', 'diff'],\n description: 'Compare two versions (use 0 for draft)',\n requiresWorkspace: true,\n args: [\n WORKFLOW_UUID_ARG,\n { name: 'from', description: 'Base version number (0 = draft)', required: true },\n { name: 'to', description: 'Target version number (0 = draft)', required: true },\n ],\n examples: [\n 'workflow-versions diff --workflow-uuid $UUID --from 1 --to 2',\n 'workflow-versions diff --workflow-uuid $UUID --from 1 --to 0 # compare v1 to draft',\n ],\n handler: async ({ ctx, workspace, args }) => {\n const workflowUuid = requireString(args, 'workflow-uuid');\n const from = requireNumber(args, 'from');\n const to = requireNumber(args, 'to');\n const diff = await requireAuth(ctx).apiClient.diffWorkflowVersions(\n workspace,\n workflowUuid,\n from,\n to\n );\n\n if (ctx.outputFormat === 'json') {\n process.stdout.write(JSON.stringify(diff, null, 2) + '\\n');\n return;\n }\n\n // Human-readable output\n process.stdout.write(\n `\\nComparing ${diff.fromVersion.label} → ${diff.toVersion.label}\\n`\n );\n process.stdout.write(\n `Changes: +${diff.summary.added} −${diff.summary.removed} ~${diff.summary.modified}\\n\\n`\n );\n\n if (diff.changes.length === 0) {\n process.stdout.write('No differences.\\n');\n return;\n }\n\n let currentCategory = '';\n for (const change of diff.changes) {\n if (change.category !== currentCategory) {\n currentCategory = change.category;\n process.stdout.write(`[${currentCategory}]\\n`);\n }\n const prefix =\n change.changeType === 'added'\n ? ' + '\n : change.changeType === 'removed'\n ? ' − '\n : ' ~ ';\n const fieldSummary =\n change.fields && change.fields.length > 0\n ? ` (${change.fields.map((f: any) => f.field).join(', ')})`\n : '';\n process.stdout.write(`${prefix}${change.label}${fieldSummary}\\n`);\n\n // Show text-level diffs for fields with old/new values\n if (change.fields) {\n for (const field of change.fields) {\n if (field.oldValue != null || field.newValue != null) {\n process.stdout.write(` ${field.field}:\\n`);\n if (field.oldValue != null) {\n process.stdout.write(` - ${field.oldValue}\\n`);\n }\n if (field.newValue != null) {\n process.stdout.write(` + ${field.newValue}\\n`);\n }\n }\n }\n }\n }\n process.stdout.write('\\n');\n },\n },\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { CLIError } from '../lib/errors';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { listResult } from '../lib/pagination';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.uuid(),\n COL.name(),\n { header: 'SLUG', getValue: (item: any) => item.slug ?? '' },\n COL.status(),\n COL.created(),\n];\n\nconst PRODUCT_COLUMNS: TableColumn<unknown>[] = [COL.id(), COL.uuid(), COL.name(), COL.status()];\n\nconst INVITATION_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'EMAIL', getValue: (item: any) => item.email ?? '' },\n COL.status(),\n COL.created(),\n];\n\nconst NOTIFICATION_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'TYPE', getValue: (item: any) => item.type ?? '' },\n { header: 'READ', getValue: (item: any) => String(item.read ?? false) },\n COL.created(),\n];\n\nconst FEATURE_COLUMNS: TableColumn<unknown>[] = [\n { header: 'SLUG', getValue: (item: any) => item.slug ?? '' },\n COL.name(),\n { header: 'CATEGORY', getValue: (item: any) => item.category ?? '' },\n];\n\nconst SCOPE_COLUMNS: TableColumn<unknown>[] = [\n COL.name(),\n { header: 'CATEGORY', getValue: (item: any) => item.category ?? '' },\n COL.description(),\n];\n\nconst THEME_COLUMNS: TableColumn<unknown>[] = [\n { header: 'SLUG', getValue: (item: any) => item.slug ?? '' },\n COL.name(),\n COL.description(),\n];\n\nconst DM_COLUMNS: TableColumn<unknown>[] = [\n { header: 'ID', getValue: (item: any) => String(item.id ?? '') },\n {\n header: 'PARTICIPANTS',\n getValue: (item: any) => (item.participants ?? []).map((p: any) => p.name).join(', '),\n maxWidth: 40,\n },\n {\n header: 'SUMMARY',\n getValue: (item: any) => String(item.summary ?? '').slice(0, 60),\n maxWidth: 60,\n },\n { header: 'UPDATED', getValue: (item: any) => item.updatedAt ?? '' },\n];\n\nconst MESSAGE_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'ROLE', getValue: (item: any) => item.role ?? '' },\n {\n header: 'CONTENT',\n getValue: (item: any) => String(item.content ?? '').slice(0, 80),\n maxWidth: 80,\n },\n COL.created(),\n];\n\nexport const workspacesDomain: DomainDef = {\n name: 'workspaces',\n description: 'Manage workspaces',\n commands: [\n // List workspaces (no workspace required)\n ...crudCommands({\n prefix: ['workspaces'],\n entityName: 'workspace',\n listMethod: 'getWorkspaces',\n // getMethod omitted — custom get below accepts -w as the identifier\n updateMethod: 'updateWorkspace',\n deleteMethod: 'deleteWorkspace',\n columns: COLUMNS,\n requiresWorkspace: false,\n }),\n // Custom get that accepts either --id or -w as the workspace identifier\n {\n path: ['workspaces', 'get'],\n description: 'Get a workspace by UUID (via --id or -w)',\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'Workspace UUID (or use -w)' }],\n handler: async ({ ctx, workspace, args }) => {\n const id = (args.id ?? args.uuid ?? workspace) as string | undefined;\n if (!id) throw new CLIError('Provide workspace UUID via --id or -w');\n const result = await requireAuth(ctx).apiClient.getWorkspace(id);\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Create a workspace via the public endpoint\n {\n path: ['workspaces', 'create'],\n description: 'Create a workspace',\n mutates: true,\n requiresWorkspace: false,\n handler: async ({ ctx, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const payload = data as Record<string, unknown>;\n if (!payload.organizationId) {\n throw new CLIError(\n 'organizationId is required in --data (e.g. --data \\'{\"organizationId\": 1, \"name\": \"My Workspace\"}\\')'\n );\n }\n const result = await requireAuth(ctx).apiClient.createWorkspace(payload as any);\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Defaults\n {\n path: ['workspaces', 'defaults'],\n description: 'Get workspace defaults',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getWorkspaceDefaults(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['workspaces', 'update-defaults'],\n description: 'Update workspace defaults',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const result = await requireAuth(ctx).apiClient.updateWorkspaceDefaults(\n workspace,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n // Counts\n {\n path: ['workspaces', 'counts'],\n description: 'Get workspace entity counts',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getWorkspaceCounts(workspace);\n outputSingle(result, ctx);\n },\n },\n // Export/Import\n {\n path: ['workspaces', 'export'],\n description: 'Export workspace configuration',\n requiresWorkspace: true,\n args: [\n {\n name: 'scope',\n description: 'Export scope: \"workflows\" for workflow-only export',\n },\n {\n name: 'workflow-id',\n description: 'Export a single workflow by ID',\n },\n {\n name: 'exclude',\n description: 'Comma-separated categories to exclude (e.g. \"channels\")',\n },\n ],\n examples: [\n 'yarn gr workspaces export -w $UUID --env prod',\n 'yarn gr workspaces export -w $UUID --env prod --scope workflows',\n 'yarn gr workspaces export -w $UUID --env prod --workflow-id 42',\n 'yarn gr workspaces export -w $UUID --env prod --exclude channels',\n ],\n handler: async ({ ctx, workspace, args }) => {\n const scope = args['scope'] as string | undefined;\n const workflowIdStr = args['workflow-id'] as string | undefined;\n const exclude = args['exclude'] as string | undefined;\n const workflowId = workflowIdStr ? Number(workflowIdStr) : undefined;\n if (workflowId !== undefined && isNaN(workflowId)) {\n throw new CLIError('--workflow-id must be a number');\n }\n if (scope && workflowId !== undefined) {\n throw new CLIError('Cannot specify both --scope and --workflow-id');\n }\n if (scope && scope !== 'workflows') {\n throw new CLIError('--scope must be \"workflows\"');\n }\n const result = await requireAuth(ctx).apiClient.exportWorkspace(\n workspace,\n workflowId,\n scope as 'workflows' | undefined,\n exclude\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['workspaces', 'import'],\n description: 'Import workspace configuration',\n mutates: true,\n requiresWorkspace: true,\n args: [\n {\n name: 'create-all',\n description:\n 'Auto-generate createNew entries for all entities in the export data. Use when importing into a fresh workspace.',\n isFlag: true,\n },\n ],\n examples: [\n 'yarn gr workspaces import -w $UUID --env dev --file export.json --create-all',\n 'yarn gr workspaces import -w $UUID --env dev --data \\'{\"exportData\": ..., \"createNew\": ..., \"importMappings\": {}}\\'',\n ],\n handler: async ({ ctx, workspace, data, args }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const payload = data as Record<string, unknown>;\n const createAll = args['create-all'] === true;\n\n // Detect if input is a full import payload or raw export data\n let exportData: Record<string, unknown>;\n let importMappings: Record<string, Record<string, string>>;\n let createNew: Record<string, string[]>;\n\n if (payload.exportData && typeof payload.exportData === 'object') {\n // Full import payload: {exportData, importMappings?, createNew?}\n exportData = payload.exportData as Record<string, unknown>;\n importMappings =\n (payload.importMappings as Record<string, Record<string, string>>) ?? {};\n createNew = (payload.createNew as Record<string, string[]>) ?? {};\n } else if (payload.version && payload.workflows) {\n // Raw export data (has version + entity arrays at top level)\n exportData = payload;\n importMappings = {};\n createNew = {};\n } else {\n throw new CLIError(\n 'Unrecognized data format. Provide either raw export data (from \"workspaces export\") or a full import payload with {exportData, importMappings, createNew}.'\n );\n }\n\n if (createAll) {\n // Auto-generate createNew from all UUIDs in the export data.\n // Entity keys that contain arrays of objects with uuid fields.\n const entityKeys = [\n 'workflows',\n 'tasks',\n 'dataTypes',\n 'agents',\n 'memberLabels',\n 'files',\n 'eventRules',\n 'memberRoles',\n 'phoneNumbers',\n 'sites',\n 'inboxes',\n 'routines',\n 'memberFilters',\n 'memberFilterRules',\n 'milestones',\n 'milestoneGoals',\n 'customToolkits',\n 'customTools',\n 'pages',\n 'menuItems',\n 'mcpServers',\n 'fileFolders',\n 'fileLabels',\n 'workflowNotes',\n 'abilities',\n 'qualifications',\n 'chatLabels',\n 'chatFilters',\n 'chatFilterRules',\n 'calendars',\n 'calendarEventTypes',\n 'calendarSchedules',\n 'journeys',\n ];\n for (const key of entityKeys) {\n const entities = exportData[key];\n if (Array.isArray(entities)) {\n createNew[key] = entities\n .map((e: Record<string, unknown>) => e.uuid as string)\n .filter(Boolean);\n }\n }\n }\n\n const result = await requireAuth(ctx).apiClient.importWorkspace(\n workspace,\n exportData as any,\n importMappings as any,\n createNew as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['workspaces', 'preview-import'],\n description: 'Preview workspace import',\n requiresWorkspace: true,\n args: [\n {\n name: 'create-all',\n description: 'Auto-generate createNew entries for all entities in the export data',\n isFlag: true,\n },\n ],\n handler: async ({ ctx, workspace, data, args }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const payload = data as Record<string, unknown>;\n const createAll = args['create-all'] === true;\n\n let exportData: Record<string, unknown>;\n let importMappings: Record<string, Record<string, string>>;\n let createNew: Record<string, string[]>;\n\n if (payload.exportData && typeof payload.exportData === 'object') {\n exportData = payload.exportData as Record<string, unknown>;\n importMappings =\n (payload.importMappings as Record<string, Record<string, string>>) ?? {};\n createNew = (payload.createNew as Record<string, string[]>) ?? {};\n } else if (payload.version && payload.workflows) {\n exportData = payload;\n importMappings = {};\n createNew = {};\n } else {\n throw new CLIError(\n 'Unrecognized data format. Provide either raw export data (from \"workspaces export\") or a full import payload with {exportData, importMappings, createNew}.'\n );\n }\n\n if (createAll) {\n const entityKeys = [\n 'workflows',\n 'tasks',\n 'dataTypes',\n 'agents',\n 'memberLabels',\n 'files',\n 'eventRules',\n 'memberRoles',\n 'phoneNumbers',\n 'sites',\n 'inboxes',\n 'routines',\n 'memberFilters',\n 'memberFilterRules',\n 'milestones',\n 'milestoneGoals',\n 'customToolkits',\n 'customTools',\n 'pages',\n 'menuItems',\n 'mcpServers',\n 'fileFolders',\n 'fileLabels',\n 'workflowNotes',\n 'abilities',\n 'qualifications',\n 'chatLabels',\n 'chatFilters',\n 'chatFilterRules',\n 'calendars',\n 'calendarEventTypes',\n 'calendarSchedules',\n 'journeys',\n ];\n for (const key of entityKeys) {\n const entities = exportData[key];\n if (Array.isArray(entities)) {\n createNew[key] = entities\n .map((e: Record<string, unknown>) => e.uuid as string)\n .filter(Boolean);\n }\n }\n }\n\n const result = await requireAuth(ctx).apiClient.previewImportWorkspace(\n workspace,\n exportData as any,\n importMappings as any,\n createNew as any\n );\n outputSingle(result, ctx);\n },\n },\n // Features\n {\n path: ['workspaces', 'features'],\n description: 'List available workspace features',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getAvailableWorkspaceFeatures();\n outputData(listResult(result, false), ctx, FEATURE_COLUMNS);\n },\n },\n // Scopes\n {\n path: ['workspaces', 'scopes'],\n description: 'List workspace scopes',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getWorkspaceScopes();\n outputData(listResult(result, false), ctx, SCOPE_COLUMNS);\n },\n },\n // Products — getProduct is a global endpoint (no workspace param), so use a custom get handler\n ...crudCommands({\n prefix: ['workspaces', 'products'],\n entityName: 'product',\n listMethod: 'getProducts',\n // getMethod omitted — custom get below handles the global endpoint\n createMethod: 'createProduct',\n updateMethod: 'updateProduct',\n deleteMethod: 'deleteProduct',\n columns: PRODUCT_COLUMNS,\n }),\n {\n path: ['workspaces', 'products', 'get'],\n description: 'Get a product by ID',\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'Product ID', required: true }],\n handler: async ({ ctx, args }) => {\n const id = requireNumber(args, 'id');\n const result = await requireAuth(ctx).apiClient.getProduct(id);\n outputSingle(result, ctx, PRODUCT_COLUMNS);\n },\n },\n // Invitations — workspace-scoped admin methods\n {\n path: ['workspaces', 'invitations', 'list'],\n description: 'List workspace invitations',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result =\n await requireAuth(ctx).apiClient.listWorkspaceInvitationsAdmin(workspace);\n outputData(listResult(result, false), ctx, INVITATION_COLUMNS);\n },\n },\n {\n path: ['workspaces', 'invitations', 'delete'],\n description: 'Delete a workspace invitation',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Invitation ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const invitationId = requireNumber(args, 'id');\n await requireAuth(ctx).apiClient.deleteWorkspaceInvitationAdmin(\n workspace,\n invitationId\n );\n process.stdout.write(`Deleted invitation ${invitationId}\\n`);\n },\n },\n {\n path: ['workspaces', 'invitations', 'invite'],\n description: 'Invite a user to the workspace',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const payload = data as Record<string, unknown> | undefined;\n if (!payload) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const emailOrAccountId = (payload.email ?? payload.accountId) as string | number;\n if (!emailOrAccountId) {\n throw new CLIError('--data must include \"email\" or \"accountId\"');\n }\n const result = await requireAuth(ctx).apiClient.inviteToWorkspace(\n workspace,\n emailOrAccountId,\n payload.message as string | undefined,\n payload.memberRoleId !== undefined ? Number(payload.memberRoleId) : undefined,\n payload.name as string | undefined\n );\n outputSingle(result, ctx, INVITATION_COLUMNS);\n },\n },\n {\n path: ['workspaces', 'invitations', 'approve'],\n description: 'Approve a workspace invitation',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Invitation ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const invitationId = requireNumber(args, 'id');\n const result = await requireAuth(ctx).apiClient.approveWorkspaceInvitation(\n workspace,\n invitationId\n );\n outputSingle(result, ctx, INVITATION_COLUMNS);\n },\n },\n {\n path: ['workspaces', 'invitations', 'deny'],\n description: 'Deny a workspace invitation',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Invitation ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const invitationId = requireNumber(args, 'id');\n const result = await requireAuth(ctx).apiClient.denyWorkspaceInvitation(\n workspace,\n invitationId\n );\n outputSingle(result, ctx, INVITATION_COLUMNS);\n },\n },\n // Notifications\n ...crudCommands({\n prefix: ['workspaces', 'notifications'],\n entityName: 'notification',\n listMethod: 'getNotifications',\n getMethod: 'getNotification',\n columns: NOTIFICATION_COLUMNS,\n paginationSupport: 'full',\n }),\n {\n path: ['workspaces', 'notifications', 'mark-read'],\n description: 'Mark a notification as read',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Notification ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.markNotificationAsRead(\n workspace,\n requireNumber(args, 'id')\n );\n process.stdout.write(`Marked notification ${args.id} as read\\n`);\n },\n },\n {\n path: ['workspaces', 'notifications', 'dismiss-all'],\n description: 'Dismiss all notifications',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n await requireAuth(ctx).apiClient.dismissAllNotifications(workspace);\n process.stdout.write('Dismissed all notifications\\n');\n },\n },\n // Themes\n {\n path: ['workspaces', 'themes', 'list'],\n description: 'List workspace themes',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getWorkspaceThemes(workspace);\n outputData(listResult(result, false), ctx, THEME_COLUMNS);\n },\n },\n {\n path: ['workspaces', 'themes', 'update'],\n description: 'Update workspace themes',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const result = await requireAuth(ctx).apiClient.updateWorkspaceThemes(\n workspace,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n // Direct Messages (via chats API with chatType=dm)\n {\n path: ['workspaces', 'dms', 'list'],\n description: 'List direct message chats',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getChats(workspace, {\n chatType: 'member',\n mine: true,\n sortBy: 'updatedAt',\n sortOrder: 'desc',\n });\n outputData(listResult(result, false), ctx, DM_COLUMNS);\n },\n },\n {\n path: ['workspaces', 'dms', 'get'],\n description: 'Get messages for a DM chat',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Chat ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getChatMessages(\n workspace,\n requireNumber(args, 'id')\n );\n outputData(listResult(result, false), ctx, MESSAGE_COLUMNS);\n },\n },\n {\n path: ['workspaces', 'dms', 'send'],\n description: 'Send a message in a DM chat',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Chat ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const chatId = requireNumber(args, 'id');\n const content = (data as any)?.content ?? '';\n const result = await requireAuth(ctx).apiClient.sendChatMessage(\n workspace,\n chatId,\n content\n );\n outputSingle(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.status(),\n { header: 'MEMBER', getValue: (item: any) => String(item.member_id ?? '') },\n { header: 'TASK', getValue: (item: any) => String(item.current_assignment_task_id ?? '') },\n { header: 'WF_VERSION', getValue: (item: any) => String(item.workflowVersionNumber ?? '') },\n COL.created(),\n];\n\nconst MESSAGE_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'ROLE', getValue: (item: any) => item.role ?? '' },\n { header: 'CONTENT', getValue: (item: any) => (item.content ?? '').slice(0, 80) },\n COL.created(),\n];\n\nconst TASK_COLUMNS: TableColumn<unknown>[] = [COL.id(), COL.name(), COL.status()];\n\nconst TOOL_COLUMNS: TableColumn<unknown>[] = [\n COL.name(),\n { header: 'DESCRIPTION', getValue: (item: any) => (item.description ?? '').slice(0, 60) },\n];\n\nexport const assignmentsDomain: DomainDef = {\n name: 'assignments',\n description: 'Manage assignments',\n commands: [\n ...crudCommands({\n prefix: ['assignments'],\n entityName: 'assignment',\n listMethod: 'getAssignments',\n getMethod: 'getAssignment',\n createMethod: 'createAssignment',\n updateMethod: 'updateAssignment',\n deleteMethod: 'deleteAssignment',\n columns: COLUMNS,\n paginationSupport: 'full',\n }),\n {\n path: ['assignments', 'cancel'],\n description: 'Cancel an assignment',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Assignment ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const body = (data as any) ?? {};\n const result = await requireAuth(ctx).apiClient.cancelAssignment(\n workspace,\n requireNumber(args, 'id'),\n body\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['assignments', 'messages', 'list'],\n description: 'List messages for an assignment',\n requiresWorkspace: true,\n args: [{ name: 'assignment-id', description: 'Assignment ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getAssignmentMessages(\n workspace,\n requireNumber(args, 'assignment-id')\n );\n outputData(result, ctx, MESSAGE_COLUMNS);\n },\n },\n {\n path: ['assignments', 'tasks', 'get'],\n description: 'Get an assignment task',\n requiresWorkspace: true,\n args: [\n { name: 'assignment-id', description: 'Assignment ID', required: true },\n { name: 'id', description: 'Assignment task ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getAssignmentTask(\n workspace,\n requireNumber(args, 'assignment-id'),\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, TASK_COLUMNS);\n },\n },\n {\n path: ['assignments', 'tasks', 'detail'],\n description: 'Get current task detail for an assignment',\n requiresWorkspace: true,\n args: [{ name: 'assignment-id', description: 'Assignment ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getAssignmentTaskDetail(\n workspace,\n requireNumber(args, 'assignment-id')\n );\n outputSingle(result, ctx, TASK_COLUMNS);\n },\n },\n {\n path: ['assignments', 'tasks', 'select'],\n description: 'Select current assignment task',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'assignment-id', description: 'Assignment ID', required: true },\n { name: 'id', description: 'Assignment task ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.selectCurrentAssignmentTask(\n workspace,\n requireNumber(args, 'assignment-id'),\n requireNumber(args, 'id')\n );\n process.stdout.write(`Selected assignment task ${args.id}\\n`);\n },\n },\n {\n path: ['assignments', 'tools', 'list'],\n description: 'List tools for an assignment',\n requiresWorkspace: true,\n args: [{ name: 'assignment-id', description: 'Assignment ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getAssignmentTools(\n workspace,\n requireNumber(args, 'assignment-id')\n );\n const tools = result.tools ?? result;\n outputData(Array.isArray(tools) ? tools : [tools], ctx, TOOL_COLUMNS);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'TIMEZONE', getValue: (item: any) => item.timezone ?? '' },\n];\n\nconst SCHEDULE_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'CALENDAR', getValue: (item: any) => String(item.calendar_id ?? '') },\n];\n\nconst EVENT_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'TITLE', getValue: (item: any) => item.title ?? item.name ?? '' },\n { header: 'START', getValue: (item: any) => item.start_time ?? item.start ?? '' },\n { header: 'END', getValue: (item: any) => item.end_time ?? item.end ?? '' },\n COL.status(),\n];\n\nconst EVENT_TYPE_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'DURATION', getValue: (item: any) => String(item.duration ?? '') },\n { header: 'SLUG', getValue: (item: any) => item.slug ?? '' },\n];\n\nexport const calendarsDomain: DomainDef = {\n name: 'calendars',\n description: 'Manage calendars, schedules, events, and event types',\n commands: [\n ...crudCommands({\n prefix: ['calendars'],\n entityName: 'calendar',\n listMethod: 'getCalendars',\n getMethod: 'getCalendar',\n createMethod: 'createCalendar',\n updateMethod: 'updateCalendar',\n deleteMethod: 'deleteCalendar',\n columns: COLUMNS,\n paginationSupport: 'full',\n }),\n // Schedules sub-resource\n {\n path: ['calendars', 'schedules', 'list'],\n description: 'List schedules for a calendar',\n requiresWorkspace: true,\n args: [{ name: 'calendar-id', description: 'Calendar ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getCalendarSchedules(\n workspace,\n requireNumber(args, 'calendar-id')\n );\n outputData(result, ctx, SCHEDULE_COLUMNS);\n },\n },\n {\n path: ['calendars', 'schedules', 'create'],\n description: 'Create a schedule',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'calendar-id', description: 'Calendar ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.createCalendarSchedule(\n workspace,\n requireNumber(args, 'calendar-id'),\n data as any\n );\n outputSingle(result, ctx, SCHEDULE_COLUMNS);\n },\n },\n {\n path: ['calendars', 'schedules', 'update'],\n description: 'Update a schedule',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'calendar-id', description: 'Calendar ID', required: true },\n { name: 'id', description: 'Schedule ID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updateCalendarSchedule(\n workspace,\n requireNumber(args, 'calendar-id'),\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, SCHEDULE_COLUMNS);\n },\n },\n {\n path: ['calendars', 'schedules', 'delete'],\n description: 'Delete a schedule',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'calendar-id', description: 'Calendar ID', required: true },\n { name: 'id', description: 'Schedule ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.deleteCalendarSchedule(\n workspace,\n requireNumber(args, 'calendar-id'),\n requireNumber(args, 'id')\n );\n process.stdout.write(`Deleted schedule ${args.id}\\n`);\n },\n },\n // Events sub-resource\n {\n path: ['calendars', 'events', 'list'],\n description: 'List calendar events (optionally filter by calendar)',\n requiresWorkspace: true,\n args: [{ name: 'calendar-id', description: 'Calendar ID (optional filter)' }],\n handler: async ({ ctx, workspace, args }) => {\n const calendarId = args['calendar-id'] ? requireNumber(args, 'calendar-id') : undefined;\n const result = await requireAuth(ctx).apiClient.getCalendarEvents(workspace, {\n ...(calendarId ? { calendarId } : {}),\n });\n outputData(result, ctx, EVENT_COLUMNS);\n },\n },\n {\n path: ['calendars', 'events', 'get'],\n description: 'Get a calendar event',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Event ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getCalendarEvent(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, EVENT_COLUMNS);\n },\n },\n {\n path: ['calendars', 'events', 'create'],\n description: 'Create a calendar event',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const result = await requireAuth(ctx).apiClient.createCalendarEvent(\n workspace,\n data as any\n );\n outputSingle(result, ctx, EVENT_COLUMNS);\n },\n },\n {\n path: ['calendars', 'events', 'update'],\n description: 'Update a calendar event',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Event ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updateCalendarEvent(\n workspace,\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, EVENT_COLUMNS);\n },\n },\n {\n path: ['calendars', 'events', 'cancel'],\n description: 'Cancel a calendar event',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Event ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.cancelCalendarEvent(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, EVENT_COLUMNS);\n },\n },\n {\n path: ['calendars', 'events', 'delete'],\n description: 'Delete a calendar event',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Event ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.deleteCalendarEvent(\n workspace,\n requireNumber(args, 'id')\n );\n process.stdout.write(`Deleted calendar event ${args.id}\\n`);\n },\n },\n // Event types sub-resource\n {\n path: ['calendars', 'event-types', 'list'],\n description: 'List calendar event types',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getCalendarEventTypes(workspace);\n outputData(result, ctx, EVENT_TYPE_COLUMNS);\n },\n },\n {\n path: ['calendars', 'event-types', 'get'],\n description: 'Get a calendar event type',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Event type ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getCalendarEventType(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, EVENT_TYPE_COLUMNS);\n },\n },\n {\n path: ['calendars', 'event-types', 'create'],\n description: 'Create a calendar event type',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const result = await requireAuth(ctx).apiClient.createCalendarEventType(\n workspace,\n data as any\n );\n outputSingle(result, ctx, EVENT_TYPE_COLUMNS);\n },\n },\n {\n path: ['calendars', 'event-types', 'update'],\n description: 'Update a calendar event type',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Event type ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updateCalendarEventType(\n workspace,\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, EVENT_TYPE_COLUMNS);\n },\n },\n {\n path: ['calendars', 'event-types', 'delete'],\n description: 'Delete a calendar event type',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Event type ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.deleteCalendarEventType(\n workspace,\n requireNumber(args, 'id')\n );\n process.stdout.write(`Deleted event type ${args.id}\\n`);\n },\n },\n ],\n};\n","import { type DomainDef, requireString, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { fetchAllPages, parsePaginationArgs, listResult } from '../lib/pagination';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'SLUG', getValue: (item: any) => item.slug ?? '' },\n COL.status(),\n];\n\nconst RECORD_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'DATA TYPE', getValue: (item: any) => String(item.data_type_id ?? '') },\n { header: 'MEMBER', getValue: (item: any) => String(item.member_id ?? '') },\n COL.updated(),\n];\n\nexport const dataTypesDomain: DomainDef = {\n name: 'data-types',\n description: 'Manage data types and records',\n commands: [\n ...crudCommands({\n prefix: ['data-types'],\n entityName: 'data type',\n listMethod: 'getDataTypes',\n getMethod: 'getDataType',\n createMethod: 'createDataType',\n updateMethod: 'updateDataType',\n deleteMethod: 'deleteDataType',\n archiveMethod: 'archiveDataType',\n unarchiveMethod: 'unarchiveDataType',\n columns: COLUMNS,\n }),\n {\n path: ['data-types', 'clone'],\n description: 'Clone a data type',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Data type ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.cloneDataType(\n workspace,\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['data-types', 'get-by-slug'],\n description: 'Get a data type by slug',\n requiresWorkspace: true,\n args: [{ name: 'slug', description: 'Data type slug', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getDataTypeBySlug(\n workspace,\n requireString(args, 'slug')\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Data Records sub-resource\n {\n path: ['data-types', 'records', 'list'],\n description: 'List records for a data type',\n requiresWorkspace: true,\n args: [\n { name: 'data-type-id', description: 'Data type ID', required: true },\n { name: 'page', description: 'Page number (default: 1)' },\n { name: 'page-size', description: 'Page size (default: 10)' },\n { name: 'all', description: 'Fetch all pages', isFlag: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const dataTypeId = requireNumber(args, 'data-type-id');\n const pag = parsePaginationArgs(args);\n\n if (pag.all) {\n const allItems = await fetchAllPages(({ page, pageSize }) =>\n requireAuth(ctx).apiClient.getDataRecords(workspace, dataTypeId, {\n page,\n pageSize,\n })\n );\n outputData(allItems, ctx, RECORD_COLUMNS);\n } else {\n const options: { page?: number; pageSize?: number } = {};\n if (pag.page) options.page = pag.page;\n if (pag.pageSize) options.pageSize = pag.pageSize;\n const result = await requireAuth(ctx).apiClient.getDataRecords(\n workspace,\n dataTypeId,\n options\n );\n // Explicit contract: supportsAll=true because this command HAS --all\n outputData(listResult(result, true), ctx, RECORD_COLUMNS);\n }\n },\n },\n {\n path: ['data-types', 'records', 'get'],\n description: 'Get a data record',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Record ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getDataRecord(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, RECORD_COLUMNS);\n },\n },\n {\n path: ['data-types', 'records', 'create'],\n description: 'Create a data record',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'data-type-id', description: 'Data type ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.createDataRecord(\n workspace,\n requireNumber(args, 'data-type-id'),\n data as any\n );\n outputSingle(result, ctx, RECORD_COLUMNS);\n },\n },\n {\n path: ['data-types', 'records', 'update'],\n description: 'Update a data record',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'data-type-id', description: 'Data type ID', required: true },\n { name: 'id', description: 'Record ID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updateDataRecord(\n workspace,\n requireNumber(args, 'data-type-id'),\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, RECORD_COLUMNS);\n },\n },\n {\n path: ['data-types', 'records', 'delete'],\n description: 'Delete a data record',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'data-type-id', description: 'Data type ID', required: true },\n { name: 'id', description: 'Record ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.deleteDataRecord(\n workspace,\n requireNumber(args, 'data-type-id'),\n requireNumber(args, 'id')\n );\n process.stdout.write(`Deleted data record ${args.id}\\n`);\n },\n },\n ],\n};\n","import { EventRuleActionType, EventRuleEventType, EventRuleObjectType } from '@gravity-rail/sdk';\nimport { type DomainDef, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\ninterface SearchEventRulesArgs {\n objectType?: EventRuleObjectType;\n eventType?: EventRuleEventType;\n actionType?: EventRuleActionType;\n taskId?: number;\n dataTypeId?: number;\n routineId?: number;\n workflowId?: number;\n journeyStepId?: number;\n includeDisabled?: boolean;\n}\n\nconst RULE_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'EVENT', getValue: (item: any) => item.event_type ?? '' },\n COL.enabled(),\n];\n\nconst EVENT_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'SLUG', getValue: (item: any) => item.slug ?? '' },\n COL.status(),\n];\n\n// Generate event rules CRUD commands so we can reference the list/get handlers for aliases\nconst eventRulesCrud = crudCommands({\n prefix: ['events', 'rules'],\n entityName: 'event rule',\n listMethod: 'getEventRules',\n getMethod: 'getEventRule',\n createMethod: 'createEventRule',\n updateMethod: 'updateEventRule',\n deleteMethod: 'deleteEventRule',\n // The endpoint is paginated and excludes nothing by object_type. Without\n // 'full', the CLI silently returned only page 1 (default 25 rules), which\n // hid routine/journey/calendar-scoped rules in workspaces with many\n // task-scoped rules. 'full' wires up --page/--page-size and --all.\n paginationSupport: 'full',\n columns: RULE_COLUMNS,\n createExamples: [\n 'gr events rules create -w $WID --data \\'{\"name\":\"Label on step\",\"objectType\":\"journey\",',\n ' \"eventType\":\"journey_step:execute\",\"actionType\":\"member:label\",',\n ' \"actionParams\":{\"addLabelIds\":[\"<label-uuid>\"]},\"journeyStepId\":<step-id>}\\'',\n '',\n 'Required: objectType, eventType, actionType',\n 'Optional: name, actionParams, conditions (CEL), journeyStepId, delay (sec), order',\n '',\n 'Common eventTypes: journey_step:execute, journey:enrolled, journey:completed,',\n ' task:created, chat:created, data_record:created, member:created',\n '',\n 'Common actionTypes: member:label, member:notify, webhook:send, email:send,',\n ' sms:send, chat:create, member:upsert',\n '',\n 'member:label actionParams: {\"addLabelIds\":[\"uuid\"],\"removeLabelIds\":[\"uuid\"]}',\n ],\n});\n\n// Build aliases: \"events list\" → \"events rules list\", \"events get\" → \"events rules get\"\nconst eventRulesAliases = eventRulesCrud\n .filter((cmd) => {\n const verb = cmd.path[cmd.path.length - 1];\n return verb === 'list' || verb === 'get';\n })\n .map((cmd) => ({\n ...cmd,\n path: ['events', cmd.path[cmd.path.length - 1]!],\n description: `${cmd.description} (alias for events rules ${cmd.path[cmd.path.length - 1]})`,\n }));\n\nexport const eventsDomain: DomainDef = {\n name: 'events',\n description: 'Manage event rules and custom events',\n commands: [\n // Event rules\n ...eventRulesCrud,\n // Aliases: \"events list\" → \"events rules list\", etc.\n ...eventRulesAliases,\n {\n path: ['events', 'rules', 'executions'],\n description: 'List executions for an event rule',\n requiresWorkspace: true,\n args: [{ name: 'rule-id', description: 'Event rule ID' }],\n handler: async ({ ctx, workspace, args }) => {\n const ruleId = args['rule-id'] ? requireNumber(args, 'rule-id') : undefined;\n const result = await requireAuth(ctx).apiClient.getRuleExecutions(workspace, {\n ...(ruleId ? { ruleId } : {}),\n });\n outputData(result, ctx);\n },\n },\n {\n // The /event-rules/search endpoint returns an unpaginated list — the\n // server applies the filters and returns whatever matches. No --all\n // flag is needed; if the result becomes too large in practice,\n // tighten the filter rather than paginate.\n path: ['events', 'rules', 'search'],\n description: 'Search event rules by object/event/action type or related entity ID',\n requiresWorkspace: true,\n args: [\n {\n name: 'object-type',\n description:\n 'Filter by object type (task, routine, journey, workflow, calendar, ...)',\n },\n { name: 'event-type', description: 'Filter by event type' },\n { name: 'action-type', description: 'Filter by action type' },\n { name: 'task-id', description: 'Filter by task ID' },\n { name: 'data-type-id', description: 'Filter by data type ID' },\n { name: 'routine-id', description: 'Filter by routine ID' },\n { name: 'workflow-id', description: 'Filter by workflow ID' },\n { name: 'journey-step-id', description: 'Filter by journey step ID' },\n {\n name: 'include-disabled',\n description: 'Include inactive rules (default: active only)',\n },\n ],\n columns: RULE_COLUMNS,\n handler: async ({ ctx, workspace, args }) => {\n const opts: SearchEventRulesArgs = {};\n if (args['object-type']) opts.objectType = args['object-type'] as EventRuleObjectType;\n if (args['event-type']) opts.eventType = args['event-type'] as EventRuleEventType;\n if (args['action-type']) opts.actionType = args['action-type'] as EventRuleActionType;\n if (args['task-id']) opts.taskId = requireNumber(args, 'task-id');\n if (args['data-type-id']) opts.dataTypeId = requireNumber(args, 'data-type-id');\n if (args['routine-id']) opts.routineId = requireNumber(args, 'routine-id');\n if (args['workflow-id']) opts.workflowId = requireNumber(args, 'workflow-id');\n if (args['journey-step-id'])\n opts.journeyStepId = requireNumber(args, 'journey-step-id');\n if (args['include-disabled']) opts.includeDisabled = true;\n const result = await requireAuth(ctx).apiClient.searchEventRules(workspace, opts);\n outputData(result, ctx, RULE_COLUMNS);\n },\n },\n // Routines\n ...crudCommands({\n prefix: ['routines'],\n entityName: 'routine',\n listMethod: 'getRoutines',\n getMethod: 'getRoutine',\n createMethod: 'createRoutine',\n updateMethod: 'updateRoutine',\n deleteMethod: 'deleteRoutine',\n paginationSupport: 'full',\n columns: EVENT_COLUMNS,\n }),\n {\n path: ['routines', 'run'],\n description: 'Run a routine now',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Routine ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.runRoutine(\n workspace,\n requireNumber(args, 'id'),\n (data ?? {}) as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['routines', 'runs', 'list'],\n description: 'List runs for a routine',\n requiresWorkspace: true,\n args: [\n {\n name: 'id',\n description: 'Routine ID (aligns with routines get/run/update/delete)',\n },\n { name: 'status', description: 'Filter by run status' },\n { name: 'page', description: 'Page number (1-indexed)' },\n { name: 'page-size', description: 'Page size (max 100)' },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const routineId = args.id ? requireNumber(args, 'id') : undefined;\n const page = args.page ? requireNumber(args, 'page') : undefined;\n const pageSize = args['page-size'] ? requireNumber(args, 'page-size') : undefined;\n const status = (args.status as string | undefined) ?? undefined;\n const result = await requireAuth(ctx).apiClient.getRoutineRuns(workspace, {\n ...(routineId !== undefined ? { routineId } : {}),\n ...(page !== undefined ? { page } : {}),\n ...(pageSize !== undefined ? { pageSize } : {}),\n ...(status ? { status } : {}),\n });\n outputData(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'TYPE', getValue: (item: any) => item.content_type ?? item.type ?? '' },\n { header: 'SIZE', getValue: (item: any) => String(item.size ?? '') },\n { header: 'FOLDER', getValue: (item: any) => String(item.folder_id ?? '') },\n];\n\nconst FOLDER_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'PARENT', getValue: (item: any) => String(item.parentId ?? '') },\n { header: 'CHILDREN', getValue: (item: any) => String(item.childCount ?? '') },\n { header: 'FILES', getValue: (item: any) => String(item.fileCount ?? '') },\n { header: 'ACCESS', getValue: (item: any) => item.access ?? '' },\n];\n\nconst LABEL_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'COLOR', getValue: (item: any) => item.color ?? '' },\n];\n\nexport const filesDomain: DomainDef = {\n name: 'files',\n description: 'Manage files, folders, and labels',\n commands: [\n ...crudCommands({\n prefix: ['files'],\n entityName: 'file',\n listMethod: 'getFiles',\n getMethod: 'getFile',\n createMethod: 'createFile',\n updateMethod: 'updateFile',\n deleteMethod: 'deleteFile',\n columns: COLUMNS,\n paginationSupport: 'full',\n }),\n // Folders sub-resource\n ...crudCommands({\n prefix: ['files', 'folders'],\n entityName: 'folder',\n listMethod: 'getFolders',\n getMethod: 'getFolder',\n createMethod: 'createFolder',\n updateMethod: 'updateFolder',\n deleteMethod: 'deleteFolder',\n columns: FOLDER_COLUMNS,\n listArgs: [\n {\n name: 'parent-id',\n description: 'Parent folder ID (required)',\n required: true,\n },\n ],\n }),\n {\n path: ['files', 'folders', 'reindex'],\n description: 'Reindex a folder',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Folder ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.reindexFolder(workspace, requireNumber(args, 'id'));\n process.stdout.write(`Reindexing folder ${args.id}\\n`);\n },\n },\n // Labels sub-resource\n ...crudCommands({\n prefix: ['files', 'labels'],\n entityName: 'file label',\n listMethod: 'getFileLabels',\n getMethod: 'getFileLabel',\n createMethod: 'createFileLabel',\n updateMethod: 'updateFileLabel',\n deleteMethod: 'deleteFileLabel',\n columns: LABEL_COLUMNS,\n }),\n ],\n};\n","import { requireAuth, type AuthenticatedContext } from '../lib/context';\nimport { CLIError } from '../lib/errors';\nimport type { TableColumn } from '../lib/output';\nimport { COL, outputData, outputSingle } from '../lib/output';\nimport { listResult } from '../lib/pagination';\nimport type { DomainDef } from '../lib/types';\nimport { requireString } from '../lib/types';\n\n// ── Column definitions ──────────────────────────────────────────────\n\nconst JOURNEY_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'UUID', getValue: (item: any) => (item.uuid ?? '').slice(0, 8) },\n COL.name(),\n COL.status(),\n COL.created(),\n];\n\nconst STEP_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'UUID', getValue: (item: any) => (item.uuid ?? '').slice(0, 8) },\n COL.name(),\n { header: 'TYPE', getValue: (item: any) => item.stepType ?? '' },\n { header: 'TRIGGER', getValue: (item: any) => item.triggerType ?? '' },\n { header: 'ORDER', getValue: (item: any) => String(item.order ?? '') },\n];\n\nconst MEMBER_JOURNEY_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'MEMBER', getValue: (item: any) => String(item.memberId ?? '') },\n COL.status(),\n { header: 'ENROLLED', getValue: (item: any) => item.enrolledAt ?? '' },\n];\n\nconst MEMBER_STEP_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'STEP', getValue: (item: any) => String(item.journeyStepId ?? '') },\n COL.status(),\n { header: 'ELIGIBLE', getValue: (item: any) => item.eligibleAt ?? '' },\n { header: 'COMPLETED', getValue: (item: any) => item.completedAt ?? '' },\n];\n\nconst GOAL_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'UUID', getValue: (item: any) => (item.uuid ?? '').slice(0, 8) },\n COL.name(),\n { header: 'VALUE', getValue: (item: any) => (item.value != null ? String(item.value) : '') },\n {\n header: 'ACHIEVED',\n getValue: (item: any) => (item.achievedCount != null ? String(item.achievedCount) : ''),\n },\n {\n header: 'ENROLLED',\n getValue: (item: any) => (item.totalEnrolled != null ? String(item.totalEnrolled) : ''),\n },\n];\n\nconst CONNECTION_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'PARENT', getValue: (item: any) => String(item.parentStepId ?? '') },\n { header: 'CHILD', getValue: (item: any) => String(item.childStepId ?? '') },\n { header: 'REQUIRED', getValue: (item: any) => (item.required ? 'yes' : '') },\n {\n header: 'TIMEOUT',\n getValue: (item: any) => (item.timeoutSeconds != null ? `${item.timeoutSeconds}s` : ''),\n },\n { header: 'CONDITION', getValue: (item: any) => item.celCondition ?? '' },\n {\n header: 'FILTER',\n getValue: (item: any) => (item.filterId != null ? String(item.filterId) : ''),\n },\n];\n\nconst NOTE_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'AUTHOR', getValue: (item: any) => String(item.creatorId ?? '') },\n { header: 'CONTENT', getValue: (item: any) => (item.contents ?? '').slice(0, 60) },\n { header: 'CREATED', getValue: (item: any) => item.createdAt ?? '' },\n];\n\n// ── REST helpers ────────────────────────────────────────────────────\n\nfunction baseUrl(ctx: AuthenticatedContext, wid: string): string {\n return `${ctx.envConfig.apiUrl}/api/v2/w/${wid}/journeys`;\n}\n\nfunction notesUrl(ctx: AuthenticatedContext, wid: string, journeyId: string): string {\n return `${baseUrl(ctx, wid)}/${journeyId}/notes`;\n}\n\nfunction headers(ctx: AuthenticatedContext): Record<string, string> {\n return {\n Authorization: `Bearer ${ctx.accessToken}`,\n 'Content-Type': 'application/json',\n };\n}\n\nasync function errorDetail(res: Response): Promise<string> {\n try {\n const text = await res.text();\n const json = JSON.parse(text);\n return json.detail ?? json.message ?? text;\n } catch {\n return '';\n }\n}\n\nasync function apiGet(ctx: AuthenticatedContext, url: string): Promise<unknown> {\n const res = await fetch(url, { headers: headers(ctx) });\n if (!res.ok) {\n const detail = await errorDetail(res);\n throw new CLIError(`GET ${url} failed: ${res.status}${detail ? ` — ${detail}` : ''}`);\n }\n return res.json();\n}\n\nasync function apiPost(ctx: AuthenticatedContext, url: string, body?: unknown): Promise<unknown> {\n const res = await fetch(url, {\n method: 'POST',\n headers: headers(ctx),\n body: body ? JSON.stringify(body) : undefined,\n });\n if (!res.ok) {\n const detail = await errorDetail(res);\n throw new CLIError(`POST ${url} failed: ${res.status}${detail ? ` — ${detail}` : ''}`);\n }\n return res.json();\n}\n\nasync function apiPut(ctx: AuthenticatedContext, url: string, body: unknown): Promise<unknown> {\n const res = await fetch(url, {\n method: 'PUT',\n headers: headers(ctx),\n body: JSON.stringify(body),\n });\n if (!res.ok) {\n const detail = await errorDetail(res);\n throw new CLIError(`PUT ${url} failed: ${res.status}${detail ? ` — ${detail}` : ''}`);\n }\n return res.json();\n}\n\nasync function apiDelete(ctx: AuthenticatedContext, url: string): Promise<void> {\n const res = await fetch(url, { method: 'DELETE', headers: headers(ctx) });\n if (!res.ok) {\n const detail = await errorDetail(res);\n throw new CLIError(`DELETE ${url} failed: ${res.status}${detail ? ` — ${detail}` : ''}`);\n }\n}\n\n// ── Domain definition ───────────────────────────────────────────────\n\nexport const journeysDomain: DomainDef = {\n name: 'journeys',\n description: 'Manage journeys, steps, goals, connections, and enrollment',\n commands: [\n // ── Journey CRUD ───────────────────────────────────────────\n {\n path: ['journeys', 'list'],\n description: 'List all journeys in a workspace',\n requiresWorkspace: true,\n examples: ['gr journeys list -w $WID --env staging'],\n handler: async ({ ctx, workspace }) => {\n const result = await apiGet(requireAuth(ctx), baseUrl(requireAuth(ctx), workspace));\n outputData(listResult(result, false), ctx, JOURNEY_COLUMNS);\n },\n },\n {\n path: ['journeys', 'get'],\n description: 'Get a journey by ID',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Journey ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const id = requireString(args, 'id');\n const result = await apiGet(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${id}`\n );\n outputSingle(result, ctx, JOURNEY_COLUMNS);\n },\n },\n {\n path: ['journeys', 'create'],\n description: 'Create a journey',\n mutates: true,\n requiresWorkspace: true,\n examples: [\n 'gr journeys create -w $WID --data \\'{\"name\":\"Onboarding\",\"description\":\"New patient flow\",\"status\":\"draft\"}\\'',\n '',\n 'Fields: name (required), description, status (draft|active|paused)',\n ' ownerId (member ID), autoEnrollFilterId (filter ID)',\n ],\n handler: async ({ ctx, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const result = await apiPost(\n requireAuth(ctx),\n baseUrl(requireAuth(ctx), workspace),\n data\n );\n outputSingle(result, ctx, JOURNEY_COLUMNS);\n },\n },\n {\n path: ['journeys', 'update'],\n description: 'Update a journey',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Journey ID', required: true }],\n examples: ['gr journeys update -w $WID --id <journey-id> --data \\'{\"status\":\"active\"}\\''],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const id = requireString(args, 'id');\n const result = await apiPut(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${id}`,\n data\n );\n outputSingle(result, ctx, JOURNEY_COLUMNS);\n },\n },\n {\n path: ['journeys', 'archive'],\n description: 'Archive a journey (soft delete)',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Journey ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const id = requireString(args, 'id');\n await apiDelete(requireAuth(ctx), `${baseUrl(requireAuth(ctx), workspace)}/${id}`);\n process.stdout.write(`Archived journey ${id}\\n`);\n },\n },\n\n // ── Steps ──────────────────────────────────────────────────\n {\n path: ['journeys', 'steps', 'list'],\n description: 'List steps for a journey (from journey detail)',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Journey ID', required: true }],\n examples: ['gr journeys steps list -w $WID --id <id>'],\n handler: async ({ ctx, workspace, args }) => {\n const id = requireString(args, 'id');\n const result = (await apiGet(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${id}`\n )) as any;\n outputData(result?.steps ?? [], ctx, STEP_COLUMNS);\n },\n },\n {\n path: ['journeys', 'steps', 'create'],\n description: 'Create a step in a journey',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'journey-id', description: 'Journey ID', required: true }],\n examples: [\n 'gr journeys steps create -w $WID --journey-id <journey-id> --data \\'{\"name\":\"Intake\"}\\'',\n '',\n 'Fields: name (required), description, order (int), workflowId (int),',\n ' assigneeId (member ID), posX/posY (canvas coords)',\n '',\n 'Attach event rules (e.g. label member) via \"gr events rules create\"',\n 'with eventType \"journey_step:execute\" and journeyStepId <step-id>',\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const journeyId = requireString(args, 'journey-id');\n const result = await apiPost(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/steps`,\n data\n );\n outputSingle(result, ctx, STEP_COLUMNS);\n },\n },\n {\n path: ['journeys', 'steps', 'update'],\n description: 'Update a step',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Step UUID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const journeyId = requireString(args, 'journey-id');\n const stepId = requireString(args, 'id');\n const result = await apiPut(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/steps/${stepId}`,\n data\n );\n outputSingle(result, ctx, STEP_COLUMNS);\n },\n },\n {\n path: ['journeys', 'steps', 'archive'],\n description: 'Archive a step',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Step UUID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const journeyId = requireString(args, 'journey-id');\n const stepId = requireString(args, 'id');\n await apiDelete(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/steps/${stepId}`\n );\n process.stdout.write(`Archived step ${stepId}\\n`);\n },\n },\n\n // ── Connections ────────────────────────────────────────────\n {\n path: ['journeys', 'connections', 'list'],\n description: 'List connections for a journey (aggregated from steps)',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Journey ID', required: true }],\n examples: ['gr journeys connections list -w $WID --id <id>'],\n handler: async ({ ctx, workspace, args }) => {\n const id = requireString(args, 'id');\n const result = (await apiGet(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${id}`\n )) as any;\n // Connections are nested in steps — dedupe by id from childConnections\n const seen = new Set<number>();\n const connections: unknown[] = [];\n for (const step of result?.steps ?? []) {\n for (const conn of step?.childConnections ?? []) {\n if (!seen.has(conn.id)) {\n seen.add(conn.id);\n connections.push(conn);\n }\n }\n }\n outputData(connections, ctx, CONNECTION_COLUMNS);\n },\n },\n {\n path: ['journeys', 'connections', 'create'],\n description: 'Create a DAG edge between two steps (with optional CEL condition)',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'journey-id', description: 'Journey ID', required: true }],\n examples: [\n 'gr journeys connections create -w $WID --journey-id <journey-id> \\\\',\n ' --data \\'{\"parentStepUuid\":\"<src>\",\"childStepUuid\":\"<dst>\"}\\'',\n '',\n 'Fields: parentStepUuid (required), childStepUuid (required),',\n ' order (int), celCondition (CEL expression string),',\n ' required (bool, default false), timeoutSeconds (int),',\n ' filterId (member filter ID, optional)',\n '',\n 'CEL condition example: \"member.labels.contains(\\\\\"step-1-done\\\\\")\"',\n '',\n 'Required edge (AND-gate — child waits for this parent):',\n ' --data \\'{\"parentStepUuid\":\"<src>\",\"childStepUuid\":\"<dst>\",\"required\":true}\\'',\n '',\n 'Edge with CEL timeout (300s = 5 min):',\n ' --data \\'{\"parentStepUuid\":\"<src>\",\"childStepUuid\":\"<dst>\",',\n ' \"celCondition\":\"member.labels.contains(\\\\\"approved\\\\\")\",\"timeoutSeconds\":300}\\'',\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const journeyId = requireString(args, 'journey-id');\n const result = await apiPost(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/connections`,\n data\n );\n outputSingle(result, ctx, CONNECTION_COLUMNS);\n },\n },\n {\n path: ['journeys', 'connections', 'update'],\n description: 'Update a connection',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Connection ID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const journeyId = requireString(args, 'journey-id');\n const connId = requireString(args, 'id');\n const result = await apiPut(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/connections/${connId}`,\n data\n );\n outputSingle(result, ctx, CONNECTION_COLUMNS);\n },\n },\n {\n path: ['journeys', 'connections', 'delete'],\n description: 'Remove a connection',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Connection ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const journeyId = requireString(args, 'journey-id');\n const connId = requireString(args, 'id');\n await apiDelete(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/connections/${connId}`\n );\n process.stdout.write(`Deleted connection ${connId}\\n`);\n },\n },\n\n // ── Goals ──────────────────────────────────────────────────\n {\n path: ['journeys', 'goals', 'list'],\n description: 'List goals for a journey (from journey detail)',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Journey ID', required: true }],\n examples: ['gr journeys goals list -w $WID --id <id>'],\n handler: async ({ ctx, workspace, args }) => {\n const id = requireString(args, 'id');\n const result = (await apiGet(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${id}`\n )) as any;\n outputData(result?.goals ?? [], ctx, GOAL_COLUMNS);\n },\n },\n {\n path: ['journeys', 'goals', 'create'],\n description: 'Create a goal (high-value outcome to track) for a journey',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'journey-id', description: 'Journey ID', required: true }],\n examples: [\n 'gr journeys goals create -w $WID --journey-id <journey-id> \\\\',\n ' --data \\'{\"name\":\"Onboarded\",\"goalStepUuid\":\"<step-uuid>\"}\\'',\n '',\n 'Fields: name (required), description, goalStepUuid (step that satisfies goal),',\n ' completionCel (CEL expression), value (float), order (int)',\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const journeyId = requireString(args, 'journey-id');\n const result = await apiPost(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/goals`,\n data\n );\n outputSingle(result, ctx, GOAL_COLUMNS);\n },\n },\n {\n path: ['journeys', 'goals', 'update'],\n description: 'Update a goal',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Goal UUID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const journeyId = requireString(args, 'journey-id');\n const goalId = requireString(args, 'id');\n const result = await apiPut(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/goals/${goalId}`,\n data\n );\n outputSingle(result, ctx, GOAL_COLUMNS);\n },\n },\n {\n path: ['journeys', 'goals', 'delete'],\n description: 'Delete a goal',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Goal UUID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const journeyId = requireString(args, 'journey-id');\n const goalId = requireString(args, 'id');\n await apiDelete(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/goals/${goalId}`\n );\n process.stdout.write(`Deleted goal ${goalId}\\n`);\n },\n },\n\n // ── Enrollment ─────────────────────────────────────────────\n {\n path: ['journeys', 'enroll'],\n description: 'Enroll member(s) in a journey',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Journey ID', required: true }],\n examples: [\n 'gr journeys enroll -w $WID --id <id> --data \\'{\"memberIds\":[1,2,3]}\\'',\n 'gr journeys enroll -w $WID --id <id> --data \\'{\"memberId\":42}\\'',\n '',\n 'Fields: memberId (single) or memberIds (batch, max 100)',\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const id = requireString(args, 'id');\n const result = await apiPost(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${id}/enroll`,\n data\n );\n outputData(listResult(result, false), ctx, MEMBER_JOURNEY_COLUMNS);\n },\n },\n {\n path: ['journeys', 'unenroll'],\n description: 'Unenroll member(s) from a journey',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Journey ID', required: true }],\n examples: [\n 'gr journeys unenroll -w $WID --id <journey-id> --data \\'{\"memberIds\":[1],\"canceledReason\":\"test\"}\\'',\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const id = requireString(args, 'id');\n await apiPost(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${id}/unenroll`,\n data\n );\n process.stdout.write(`Unenrolled member(s) from journey ${id}\\n`);\n },\n },\n {\n path: ['journeys', 'reenroll'],\n description: 'Re-enroll a canceled member back into a journey',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Journey ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const id = requireString(args, 'id');\n const result = await apiPost(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${id}/reenroll`,\n data\n );\n outputSingle(result, ctx, MEMBER_JOURNEY_COLUMNS);\n },\n },\n {\n path: ['journeys', 'members', 'delete'],\n description: 'Hard-delete a canceled enrollment so member can re-enroll fresh',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'member-id', description: 'Member ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const journeyId = requireString(args, 'journey-id');\n const memberId = requireString(args, 'member-id');\n await apiDelete(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/members/${memberId}`\n );\n process.stdout.write(\n `Deleted enrollment for member ${memberId} from journey ${journeyId}\\n`\n );\n },\n },\n {\n path: ['journeys', 'members', 'list'],\n description: 'List members enrolled in a journey',\n requiresWorkspace: true,\n args: [{ name: 'journey-id', description: 'Journey ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const journeyId = requireString(args, 'journey-id');\n const result = await apiGet(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/members`\n );\n outputData(listResult(result, false), ctx, MEMBER_JOURNEY_COLUMNS);\n },\n },\n {\n path: ['journeys', 'members', 'get'],\n description: \"Get a member's journeys\",\n requiresWorkspace: true,\n args: [{ name: 'member-id', description: 'Member ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const memberId = requireString(args, 'member-id');\n const result = await apiGet(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/by-member/${memberId}`\n );\n outputData(listResult(result, false), ctx, MEMBER_JOURNEY_COLUMNS);\n },\n },\n\n // ── Step progression ───────────────────────────────────────\n {\n path: ['journeys', 'steps', 'advance'],\n description: 'Mark a step as completed for a member (triggers downstream propagation)',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Step UUID', required: true },\n ],\n examples: [\n 'gr journeys steps advance -w $WID --journey-id <journey-id> --id <step-uuid>',\n 'gr journeys steps advance -w $WID --journey-id <journey-id> --id <step-uuid> --data \\'{\"memberId\":42,\"notes\":\"Passed\"}\\'',\n '',\n 'Fields: memberId (defaults to current user), notes (optional)',\n 'Completing a step makes downstream steps eligible (if all parents complete)',\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n const journeyId = requireString(args, 'journey-id');\n const stepId = requireString(args, 'id');\n const result = await apiPost(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/steps/${stepId}/advance`,\n data ?? {}\n );\n outputSingle(result, ctx, MEMBER_STEP_COLUMNS);\n },\n },\n {\n path: ['journeys', 'steps', 'skip'],\n description: 'Skip a step for a member (requires journeys:admin scope)',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Step UUID', required: true },\n ],\n examples: [\n 'gr journeys steps skip -w $WID --journey-id <journey-id> --id <step-uuid> --data \\'{\"memberId\":42,\"reason\":\"N/A\"}\\'',\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n const journeyId = requireString(args, 'journey-id');\n const stepId = requireString(args, 'id');\n const result = await apiPost(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/steps/${stepId}/skip`,\n data ?? {}\n );\n outputSingle(result, ctx, MEMBER_STEP_COLUMNS);\n },\n },\n\n // ── Step member visibility ──────────────────────────────────\n {\n path: ['journeys', 'steps', 'members'],\n description: 'List members at a specific journey step',\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Step UUID', required: true },\n ],\n examples: [\n 'gr journeys steps members -w $WID --journey-id 5 --id <step-uuid>',\n 'gr journeys steps members -w $WID --journey-id 5 --id <step-uuid> --data \\'{\"status\":\"in_progress\"}\\'',\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n const journeyId = requireString(args, 'journey-id');\n const stepId = requireString(args, 'id');\n const qs = new URLSearchParams();\n if (data && typeof data === 'object') {\n const d = data as Record<string, unknown>;\n if (d.status) qs.set('status', String(d.status));\n if (d.mode) qs.set('mode', String(d.mode));\n if (d.page) qs.set('page', String(d.page));\n if (d.pageSize) qs.set('pageSize', String(d.pageSize));\n }\n const query = qs.toString();\n const url = `${baseUrl(requireAuth(ctx), workspace)}/${journeyId}/steps/${stepId}/members${query ? `?${query}` : ''}`;\n const result = await apiGet(requireAuth(ctx), url);\n const STEP_MEMBER_COLS: TableColumn<unknown>[] = [\n { header: 'MEMBER_ID', getValue: (item: any) => String(item.memberId ?? '') },\n { header: 'NAME', getValue: (item: any) => item.memberName ?? '' },\n { header: 'STATUS', getValue: (item: any) => item.stepStatus ?? '' },\n { header: 'ELIGIBLE', getValue: (item: any) => item.eligibleAt ?? '' },\n { header: 'ACTIVATED', getValue: (item: any) => item.activatedAt ?? '' },\n { header: 'COMPLETED', getValue: (item: any) => item.completedAt ?? '' },\n ];\n outputData(listResult(result, false), ctx, STEP_MEMBER_COLS);\n },\n },\n {\n path: ['journeys', 'step-member-counts'],\n description: 'Get member counts per step for a journey',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Journey ID', required: true }],\n examples: ['gr journeys step-member-counts -w $WID --id 5'],\n handler: async ({ ctx, workspace, args }) => {\n const id = requireString(args, 'id');\n const result = await apiGet(\n requireAuth(ctx),\n `${baseUrl(requireAuth(ctx), workspace)}/${id}/step-member-counts`\n );\n const COUNT_COLS: TableColumn<unknown>[] = [\n { header: 'STEP_ID', getValue: (item: any) => String(item.stepId ?? '') },\n {\n header: 'STEP_UUID',\n getValue: (item: any) => (item.stepUuid ?? '').slice(0, 8),\n },\n { header: 'TOTAL', getValue: (item: any) => String(item.total ?? 0) },\n {\n header: 'BY_STATUS',\n getValue: (item: any) => {\n const bs = item.byStatus;\n if (!bs || typeof bs !== 'object') return '';\n return Object.entries(bs)\n .filter(([, v]) => (v as number) > 0)\n .map(([k, v]) => `${k}:${v}`)\n .join(', ');\n },\n },\n ];\n outputData(listResult(result, false), ctx, COUNT_COLS);\n },\n },\n\n // ── Notes ───────────────────────────────────────────────────\n {\n path: ['journeys', 'notes', 'list'],\n description: 'List notes for a journey',\n requiresWorkspace: true,\n args: [{ name: 'journey-id', description: 'Journey ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const journeyId = requireString(args, 'journey-id');\n const result = await apiGet(\n requireAuth(ctx),\n notesUrl(requireAuth(ctx), workspace, journeyId)\n );\n outputData(listResult(result, false), ctx, NOTE_COLUMNS);\n },\n },\n {\n path: ['journeys', 'notes', 'create'],\n description: 'Create a note on a journey (canvas sticky note)',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'journey-id', description: 'Journey ID', required: true }],\n examples: [\n 'gr journeys notes create -w $WID --journey-id 5 --data \\'{\"posX\":0,\"posY\":0,\"contents\":\"Note text\"}\\'',\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data with content)');\n const journeyId = requireString(args, 'journey-id');\n const result = await apiPost(\n requireAuth(ctx),\n notesUrl(requireAuth(ctx), workspace, journeyId),\n data\n );\n outputSingle(result, ctx, NOTE_COLUMNS);\n },\n },\n {\n path: ['journeys', 'notes', 'update'],\n description: 'Update a journey note',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Note ID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data with content)');\n const journeyId = requireString(args, 'journey-id');\n const noteId = requireString(args, 'id');\n const result = await apiPut(\n requireAuth(ctx),\n `${notesUrl(requireAuth(ctx), workspace, journeyId)}/${noteId}`,\n data\n );\n outputSingle(result, ctx, NOTE_COLUMNS);\n },\n },\n {\n path: ['journeys', 'notes', 'delete'],\n description: 'Delete a journey note',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'journey-id', description: 'Journey ID', required: true },\n { name: 'id', description: 'Note ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const journeyId = requireString(args, 'journey-id');\n const noteId = requireString(args, 'id');\n await apiDelete(\n requireAuth(ctx),\n `${notesUrl(requireAuth(ctx), workspace, journeyId)}/${noteId}`\n );\n process.stdout.write(`Deleted note ${noteId}\\n`);\n },\n },\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { crudCommands } from '../lib/crud';\nimport type { TableColumn } from '../lib/output';\nimport { COL } from '../lib/output';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'AGE', getValue: (item: any) => (item.age != null ? String(item.age) : '') },\n {\n header: 'HAS_PHONE',\n getValue: (item: any) => (item.hasPhone ? 'yes' : 'no'),\n },\n {\n header: 'HAS_EMAIL',\n getValue: (item: any) => (item.hasEmail ? 'yes' : 'no'),\n },\n {\n header: 'DATA_RECORDS',\n getValue: (item: any) =>\n item.dataRecords ? String(Object.keys(item.dataRecords).length) : '0',\n },\n COL.created(),\n];\n\nexport const personasDomain: DomainDef = {\n name: 'personas',\n description: 'Manage workspace-scoped test personas (identity templates for scenario runs)',\n commands: [\n ...crudCommands({\n prefix: ['personas'],\n entityName: 'persona',\n listMethod: 'listPersonas',\n getMethod: 'getPersona',\n createMethod: 'createPersona',\n updateMethod: 'updatePersona',\n deleteMethod: 'deletePersona',\n columns: COLUMNS,\n paginationSupport: 'full',\n }),\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst QUALIFICATION_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'WORKFLOW', getValue: (item: any) => String(item.workflowId ?? '') },\n { header: 'WORKFLOW_NAME', getValue: (item: any) => item.workflowName ?? '' },\n COL.created(),\n];\n\nconst SCENARIO_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'PERSONA', getValue: (item: any) => item.personaName ?? '' },\n { header: 'CHANNEL', getValue: (item: any) => item.channel ?? '' },\n];\n\nconst RUN_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'WORKFLOW', getValue: (item: any) => String(item.workflowId ?? '') },\n {\n header: 'SCENARIO',\n getValue: (item: any) =>\n item.scenarioName ?? (item.scenarioId != null ? String(item.scenarioId) : 'ad-hoc'),\n },\n {\n header: 'DRIVER',\n getValue: (item: any) =>\n item.driverMemberId == null\n ? 'auto'\n : (item.driverMemberName ?? `member #${item.driverMemberId}`),\n },\n { header: 'STARTED', getValue: (item: any) => item.startedAt ?? '' },\n { header: 'COMPLETED', getValue: (item: any) => item.completedAt ?? '' },\n {\n header: 'SCORE',\n getValue: (item: any) => (item.overallScore != null ? String(item.overallScore) : ''),\n },\n {\n header: 'PASSED',\n getValue: (item: any) => (item.passed != null ? String(item.passed) : ''),\n },\n];\n\nexport const qualificationsDomain: DomainDef = {\n name: 'qualifications',\n description: 'Manage qualifications, scenarios, and test chat runs',\n commands: [\n {\n path: ['qualifications', 'list'],\n description: 'List qualifications (one per workflow)',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getQualifications(workspace);\n outputData(result.items, ctx, QUALIFICATION_COLUMNS);\n },\n },\n {\n path: ['qualifications', 'get'],\n description: 'Get a qualification by ID',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Qualification ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getQualification(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['qualifications', 'for-workflow'],\n description: 'Fetch (auto-creating if absent) the qualification for a workflow',\n requiresWorkspace: true,\n args: [{ name: 'workflow-id', description: 'Workflow ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getOrCreateQualificationForWorkflow(\n workspace,\n requireNumber(args, 'workflow-id')\n );\n outputSingle(result, ctx);\n },\n },\n // Scenarios\n {\n path: ['qualifications', 'scenarios', 'list'],\n description: 'List scenarios on a qualification',\n requiresWorkspace: true,\n args: [{ name: 'qualification-id', description: 'Qualification ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.listScenarios(\n workspace,\n requireNumber(args, 'qualification-id')\n );\n outputData(result, ctx, SCENARIO_COLUMNS);\n },\n },\n {\n path: ['qualifications', 'scenarios', 'get'],\n description: 'Get a scenario',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Scenario ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getScenario(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, SCENARIO_COLUMNS);\n },\n },\n {\n path: ['qualifications', 'scenarios', 'create'],\n description: 'Create a scenario on a qualification (pass JSON via --data)',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'qualification-id', description: 'Qualification ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.createScenario(\n workspace,\n requireNumber(args, 'qualification-id'),\n data as any\n );\n outputSingle(result, ctx, SCENARIO_COLUMNS);\n },\n },\n {\n path: ['qualifications', 'scenarios', 'update'],\n description: 'Update a scenario (pass JSON via --data)',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Scenario ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updateScenario(\n workspace,\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, SCENARIO_COLUMNS);\n },\n },\n {\n path: ['qualifications', 'scenarios', 'delete'],\n description: 'Archive a scenario',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Scenario ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.deleteScenario(workspace, requireNumber(args, 'id'));\n process.stdout.write(`Archived scenario ${args['id']}\\n`);\n },\n },\n // Test chat runs\n {\n path: ['qualifications', 'runs', 'list'],\n description: 'List recent test chat runs for a workflow',\n requiresWorkspace: true,\n args: [\n { name: 'workflow-id', description: 'Workflow ID', required: true },\n { name: 'scenario-id', description: 'Filter by scenario', required: false },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const scenarioId = args['scenario-id'] ? requireNumber(args, 'scenario-id') : undefined;\n const result = await requireAuth(ctx).apiClient.listTestChatRuns(\n workspace,\n requireNumber(args, 'workflow-id'),\n scenarioId != null ? { scenarioId } : undefined\n );\n outputData(result, ctx, RUN_COLUMNS);\n },\n },\n {\n path: ['qualifications', 'runs', 'get'],\n description: 'Get a test chat run',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Test chat run ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getTestChatRun(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['qualifications', 'runs', 'start'],\n description: 'Start a test chat run',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'workflow-id', description: 'Workflow ID', required: true },\n { name: 'scenario-id', description: 'Bind to a scenario', required: false },\n {\n name: 'persona-id',\n description: 'Persona (required if no scenario)',\n required: false,\n },\n { name: 'goal', description: 'Goal for the user simulator', required: false },\n { name: 'driver', description: 'Driver mode: auto | human', required: false },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const driver = (args['driver'] === 'human' ? 'human' : 'auto') as 'auto' | 'human';\n const scenarioId = args['scenario-id'] ? requireNumber(args, 'scenario-id') : undefined;\n const personaId = args['persona-id'] ? requireNumber(args, 'persona-id') : undefined;\n const result = await requireAuth(ctx).apiClient.startTestChatRun(\n workspace,\n requireNumber(args, 'workflow-id'),\n {\n ...(scenarioId != null ? { scenarioId } : {}),\n ...(personaId != null ? { personaId } : {}),\n ...(args['goal'] ? { goal: String(args['goal']) } : {}),\n driver,\n } as any\n );\n outputSingle(result.run, ctx);\n },\n },\n {\n path: ['qualifications', 'runs', 'evaluate'],\n description: 'Evaluate a completed scenario-bound test chat run',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Test chat run ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.evaluateTestChatRun(\n workspace,\n requireNumber(args, 'id')\n );\n process.stdout.write(`Evaluation started for test chat run ${args['id']}\\n`);\n },\n },\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'SLUG', getValue: (item: any) => item.slug ?? '' },\n { header: 'DOMAIN', getValue: (item: any) => item.domain ?? '' },\n];\n\nconst PAGE_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'TITLE', getValue: (item: any) => item.title ?? '' },\n { header: 'SLUG', getValue: (item: any) => item.slug ?? '' },\n COL.status(),\n];\n\nconst MENU_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'LABEL', getValue: (item: any) => item.label ?? '' },\n { header: 'TYPE', getValue: (item: any) => item.type ?? '' },\n { header: 'ORDER', getValue: (item: any) => String(item.order ?? '') },\n];\n\nexport const sitesDomain: DomainDef = {\n name: 'sites',\n description: 'Manage sites, pages, and menus',\n commands: [\n ...crudCommands({\n prefix: ['sites'],\n entityName: 'site',\n listMethod: 'getSites',\n getMethod: 'getSite',\n createMethod: 'createSite',\n updateMethod: 'updateSite',\n deleteMethod: 'deleteSite',\n columns: COLUMNS,\n }),\n // Pages sub-resource\n {\n path: ['sites', 'pages', 'list'],\n description: 'List pages for a site',\n requiresWorkspace: true,\n args: [{ name: 'site-id', description: 'Site ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getSitePages(\n workspace,\n requireNumber(args, 'site-id')\n );\n outputData(result, ctx, PAGE_COLUMNS);\n },\n },\n {\n path: ['sites', 'pages', 'get'],\n description: 'Get a page',\n requiresWorkspace: true,\n args: [\n { name: 'site-id', description: 'Site ID', required: true },\n { name: 'id', description: 'Page ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getPage(\n workspace,\n requireNumber(args, 'site-id'),\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, PAGE_COLUMNS);\n },\n },\n {\n path: ['sites', 'pages', 'create'],\n description: 'Create a page',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'site-id', description: 'Site ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.createPage(\n workspace,\n requireNumber(args, 'site-id'),\n data as any\n );\n outputSingle(result, ctx, PAGE_COLUMNS);\n },\n },\n {\n path: ['sites', 'pages', 'update'],\n description: 'Update a page',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'site-id', description: 'Site ID', required: true },\n { name: 'id', description: 'Page ID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updatePage(\n workspace,\n requireNumber(args, 'site-id'),\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, PAGE_COLUMNS);\n },\n },\n {\n path: ['sites', 'pages', 'delete'],\n description: 'Delete a page',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'site-id', description: 'Site ID', required: true },\n { name: 'id', description: 'Page ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.deletePage(\n workspace,\n requireNumber(args, 'site-id'),\n requireNumber(args, 'id')\n );\n process.stdout.write(`Deleted page ${args.id}\\n`);\n },\n },\n // Menu items sub-resource\n {\n path: ['sites', 'menu', 'list'],\n description: 'List menu items for a site',\n requiresWorkspace: true,\n args: [{ name: 'site-id', description: 'Site ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getMenuItems(\n workspace,\n requireNumber(args, 'site-id')\n );\n outputData(result, ctx, MENU_COLUMNS);\n },\n },\n {\n path: ['sites', 'menu', 'create'],\n description: 'Create a menu item',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'site-id', description: 'Site ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.createMenuItem(\n workspace,\n requireNumber(args, 'site-id'),\n data as any\n );\n outputSingle(result, ctx, MENU_COLUMNS);\n },\n },\n {\n path: ['sites', 'menu', 'update'],\n description: 'Update a menu item',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'site-id', description: 'Site ID', required: true },\n { name: 'id', description: 'Menu item ID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updateMenuItem(\n workspace,\n requireNumber(args, 'site-id'),\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, MENU_COLUMNS);\n },\n },\n {\n path: ['sites', 'menu', 'delete'],\n description: 'Delete a menu item',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'site-id', description: 'Site ID', required: true },\n { name: 'id', description: 'Menu item ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.deleteMenuItem(\n workspace,\n requireNumber(args, 'site-id'),\n requireNumber(args, 'id')\n );\n process.stdout.write(`Deleted menu item ${args.id}\\n`);\n },\n },\n ],\n};\n","import { type DomainDef, requireString, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { listResult } from '../lib/pagination';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.status(),\n { header: 'GRANTOR', getValue: (item: any) => String(item.grantor_member_id ?? '') },\n { header: 'GRANTEE', getValue: (item: any) => String(item.grantee_member_id ?? '') },\n COL.created(),\n];\n\nexport const accessGrantsDomain: DomainDef = {\n name: 'access-grants',\n description: 'Manage access grants',\n commands: [\n {\n path: ['access-grants', 'list'],\n description: 'List all access grants',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getAccessGrants(workspace);\n outputData(listResult(result, false), ctx, COLUMNS);\n },\n },\n {\n path: ['access-grants', 'get'],\n description: 'Get an access grant by ID',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Access grant ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getAccessGrant(\n workspace,\n requireString(args, 'id')\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['access-grants', 'create'],\n description: 'Create an access grant',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const result = await requireAuth(ctx).apiClient.createAccessGrant(\n workspace,\n data as any\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['access-grants', 'received'],\n description: 'List access grants received by me',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getMyReceivedGrants(workspace, {\n pageSize: 200,\n });\n outputData(listResult(result, false), ctx, COLUMNS);\n },\n },\n {\n path: ['access-grants', 'given'],\n description: 'List access grants given by me',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getMyGivenGrants(workspace, {\n pageSize: 200,\n });\n outputData(listResult(result, false), ctx, COLUMNS);\n },\n },\n {\n path: ['access-grants', 'resolve'],\n description: 'Resolve an access grant',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Access grant ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.resolveAccessGrant(\n workspace,\n requireString(args, 'id'),\n (data ?? {}) as any\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['access-grants', 'revoke'],\n description: 'Revoke an access grant',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Access grant ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.revokeAccessGrant(\n workspace,\n requireString(args, 'id'),\n (data ?? {}) as any\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['access-grants', 'member'],\n description: 'List access grants for a specific member',\n requiresWorkspace: true,\n args: [{ name: 'member-id', description: 'Member ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getMemberGrants(\n workspace,\n requireNumber(args, 'member-id')\n );\n outputData(listResult(result, false), ctx, COLUMNS);\n },\n },\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { outputData } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n { header: 'ID', getValue: (item: any) => String(item.id ?? item.model_id ?? '') },\n { header: 'NAME', getValue: (item: any) => item.name ?? item.display_name ?? '' },\n { header: 'PROVIDER', getValue: (item: any) => item.provider ?? '' },\n { header: 'TYPE', getValue: (item: any) => item.type ?? '' },\n];\n\nexport const aiModelsDomain: DomainDef = {\n name: 'ai-models',\n description: 'List available AI models',\n commands: [\n {\n path: ['ai-models', 'list'],\n description: 'List all available AI models',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getAllModels();\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['ai-models', 'chat'],\n description: 'List chat models',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getChatModels();\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['ai-models', 'realtime'],\n description: 'List realtime models',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getRealtimeModels();\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['ai-models', 'voice'],\n description: 'List voice models',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getVoiceModels();\n outputData(result, ctx, COLUMNS);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'PREFIX', getValue: (item: any) => item.prefix ?? '' },\n COL.created(),\n];\n\nexport const apiKeysDomain: DomainDef = {\n name: 'api-keys',\n description: 'Manage API keys',\n commands: [\n {\n path: ['api-keys', 'list'],\n description: 'List workspace API keys',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getApiKeys(workspace);\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['api-keys', 'create'],\n description: 'Create a workspace API key',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const result = await requireAuth(ctx).apiClient.createApiKey(workspace, data as any);\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['api-keys', 'revoke'],\n description: 'Revoke a workspace API key',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'API key ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const id = requireNumber(args, 'id');\n await requireAuth(ctx).apiClient.revokeApiKey(workspace, id);\n process.stdout.write(`Revoked API key ${id}\\n`);\n },\n },\n {\n path: ['api-keys', 'global', 'list'],\n description: 'List global/account-level API keys',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getGlobalApiKeys();\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['api-keys', 'global', 'create'],\n description: 'Create a global/account-level API key',\n mutates: true,\n requiresWorkspace: false,\n handler: async ({ ctx, data }) => {\n const result = await requireAuth(ctx).apiClient.createGlobalApiKey(data as any);\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['api-keys', 'global', 'revoke'],\n description: 'Revoke a global/account-level API key',\n mutates: true,\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'API key ID', required: true }],\n handler: async ({ ctx, args }) => {\n const id = requireNumber(args, 'id');\n await requireAuth(ctx).apiClient.revokeGlobalApiKey(id);\n process.stdout.write(`Revoked global API key ${id}\\n`);\n },\n },\n ],\n};\n","import { type DomainDef, requireString } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst APP_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'CLIENT_ID', getValue: (item: any) => item.client_id ?? '' },\n COL.status(),\n];\n\nconst BUILDER_COLUMNS: TableColumn<unknown>[] = [COL.id(), COL.name(), COL.status()];\n\nconst INQUIRY_COLUMNS: TableColumn<unknown>[] = [COL.id(), COL.status(), COL.created()];\n\nexport const appsDomain: DomainDef = {\n name: 'apps',\n description: 'Manage apps, builders, and inquiries',\n commands: [\n // Apps\n {\n path: ['apps', 'list'],\n description: 'List apps',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.listApps();\n outputData(result, ctx, APP_COLUMNS);\n },\n },\n {\n path: ['apps', 'get'],\n description: 'Get an app by ID',\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'App ID', required: true }],\n handler: async ({ ctx, args }) => {\n const result = await requireAuth(ctx).apiClient.getApp(requireString(args, 'id'));\n outputSingle(result, ctx, APP_COLUMNS);\n },\n },\n {\n path: ['apps', 'create'],\n description: 'Create an app',\n mutates: true,\n requiresWorkspace: false,\n handler: async ({ ctx, data }) => {\n const result = await requireAuth(ctx).apiClient.createApp(data as any);\n outputSingle(result, ctx, APP_COLUMNS);\n },\n },\n {\n path: ['apps', 'update'],\n description: 'Update an app',\n mutates: true,\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'App ID', required: true }],\n handler: async ({ ctx, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updateApp(\n requireString(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, APP_COLUMNS);\n },\n },\n {\n path: ['apps', 'delete'],\n description: 'Delete an app',\n mutates: true,\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'App ID', required: true }],\n handler: async ({ ctx, args }) => {\n const id = requireString(args, 'id');\n await requireAuth(ctx).apiClient.deleteApp(id);\n process.stdout.write(`Deleted app ${id}\\n`);\n },\n },\n {\n path: ['apps', 'regenerate-secret'],\n description: 'Regenerate client secret for an app',\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'App ID', required: true }],\n handler: async ({ ctx, args }) => {\n const result = await requireAuth(ctx).apiClient.regenerateClientSecret(\n requireString(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n\n // Builders\n ...crudCommands({\n prefix: ['apps', 'builders'],\n entityName: 'builder',\n listMethod: 'listBuilders',\n getMethod: 'getBuilder',\n createMethod: 'createBuilder',\n updateMethod: 'updateBuilder',\n deleteMethod: 'deleteBuilder',\n columns: BUILDER_COLUMNS,\n requiresWorkspace: false,\n }),\n {\n path: ['apps', 'builders', 'apps'],\n description: 'List apps for a builder',\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'Builder ID', required: true }],\n handler: async ({ ctx, args }) => {\n const result = await requireAuth(ctx).apiClient.getBuilderApps(\n requireString(args, 'id')\n );\n outputData(result, ctx, APP_COLUMNS);\n },\n },\n\n // Inquiries\n ...crudCommands({\n prefix: ['apps', 'inquiries'],\n entityName: 'inquiry',\n listMethod: 'listInquiries',\n getMethod: 'getInquiry',\n createMethod: 'createInquiry',\n updateMethod: 'updateInquiry',\n deleteMethod: 'deleteInquiry',\n columns: INQUIRY_COLUMNS,\n requiresWorkspace: false,\n paginationSupport: 'full',\n }),\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { outputSingle, outputData } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nexport const authManageDomain: DomainDef = {\n name: 'auth',\n description: 'Manage authentication, 2FA, and credentials',\n commands: [\n {\n path: ['auth', 'account'],\n description: 'Get current user account info',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getUserAccount();\n outputSingle(result, ctx);\n },\n },\n {\n path: ['auth', 'update-account'],\n description: 'Update current user account',\n mutates: true,\n requiresWorkspace: false,\n handler: async ({ ctx, data }) => {\n const result = await requireAuth(ctx).apiClient.updateUserAccount(data as any);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['auth', 'password-status'],\n description: 'Get password status',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getPasswordStatus();\n outputSingle(result, ctx);\n },\n },\n {\n path: ['auth', 'change-password'],\n description: 'Change password',\n mutates: true,\n requiresWorkspace: false,\n handler: async ({ ctx, data }) => {\n const result = await requireAuth(ctx).apiClient.changePassword(\n (data as any)?.currentPassword,\n (data as any)?.newPassword\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['auth', 'set-password'],\n description: 'Set password (for accounts without one)',\n mutates: true,\n requiresWorkspace: false,\n handler: async ({ ctx, data }) => {\n const result = await requireAuth(ctx).apiClient.setPassword(data as any);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['auth', '2fa-status'],\n description: 'Get two-factor authentication status',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getTwoFactorStatus();\n outputSingle(result, ctx);\n },\n },\n {\n path: ['auth', 'pending-credential-changes'],\n description: 'List pending credential changes',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getPendingCredentialChanges();\n outputData(result, ctx);\n },\n },\n {\n path: ['auth', 'request-credential-change'],\n description: 'Request a credential change',\n mutates: true,\n requiresWorkspace: false,\n handler: async ({ ctx, data }) => {\n const result = await requireAuth(ctx).apiClient.requestCredentialChange(\n (data as any)?.credentialType,\n (data as any)?.newValue\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['auth', 'cancel-credential-change'],\n description: 'Cancel a pending credential change',\n mutates: true,\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'Credential change ID', required: true }],\n handler: async ({ ctx, args }) => {\n await requireAuth(ctx).apiClient.cancelCredentialChange(requireNumber(args, 'id'));\n process.stdout.write(`Cancelled credential change ${args.id}\\n`);\n },\n },\n // ── Consent (GDPR) ──\n {\n path: ['auth', 'consent'],\n description: 'Get current consent state',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getConsentState();\n const columns: TableColumn<unknown>[] = [\n { header: 'TYPE', getValue: (item: any) => item.consent_type ?? '' },\n { header: 'GRANTED', getValue: (item: any) => String(item.granted) },\n { header: 'UPDATED', getValue: (item: any) => item.updated_at ?? '' },\n { header: 'VERSION', getValue: (item: any) => item.policy_version ?? '' },\n ];\n outputData(result.consents, ctx, columns);\n },\n },\n {\n path: ['auth', 'consent-update'],\n description:\n 'Update consent (e.g. --data \\'{\"consents\":[{\"consent_type\":\"cookie_analytics\",\"granted\":true}]}\\')',\n mutates: true,\n requiresWorkspace: false,\n handler: async ({ ctx, data }) => {\n const body = data as any;\n const consents = body?.consents;\n if (!Array.isArray(consents) || consents.length === 0) {\n process.stderr.write(\n 'Error: --data must include \"consents\" array, e.g. --data \\'{\"consents\":[{\"consent_type\":\"cookie_analytics\",\"granted\":true}]}\\'\\n'\n );\n process.exit(1);\n }\n const result = await requireAuth(ctx).apiClient.updateConsent(consents);\n const columns: TableColumn<unknown>[] = [\n { header: 'TYPE', getValue: (item: any) => item.consent_type ?? '' },\n { header: 'GRANTED', getValue: (item: any) => String(item.granted) },\n { header: 'UPDATED', getValue: (item: any) => item.updated_at ?? '' },\n { header: 'VERSION', getValue: (item: any) => item.policy_version ?? '' },\n ];\n outputData(result.consents, ctx, columns);\n },\n },\n ],\n};\n","// `Invoice` is not re-exported from the public `@gravity-rail/sdk` surface.\n// Use a structural shape that matches the runtime response.\ninterface Invoice {\n id: number;\n invoiceNumber: string;\n status: string;\n amount: number;\n periodStart?: string;\n periodEnd?: string;\n productName?: string;\n paymentReference?: string | null;\n}\nimport { CLIError } from '../lib/errors';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle } from '../lib/output';\nimport { listResult } from '../lib/pagination';\nimport type { CommandDef, DomainDef } from '../lib/types';\nimport { requireAuth } from '../lib/context';\n\nconst INVOICE_COLUMNS: TableColumn<Invoice>[] = [\n { header: 'ID', getValue: (i) => String(i.id) },\n { header: 'Invoice #', getValue: (i) => i.invoiceNumber },\n { header: 'Status', getValue: (i) => i.status },\n {\n header: 'Amount',\n getValue: (i) => `$${(i.amount / 100).toFixed(2)}`,\n },\n {\n header: 'Period Start',\n getValue: (i) => (i.periodStart ? new Date(i.periodStart).toLocaleDateString() : ''),\n },\n {\n header: 'Period End',\n getValue: (i) => (i.periodEnd ? new Date(i.periodEnd).toLocaleDateString() : ''),\n },\n { header: 'Product', getValue: (i) => i.productName ?? '' },\n { header: 'Ref', getValue: (i) => i.paymentReference ?? '' },\n];\n\nconst commands: CommandDef[] = [\n {\n path: ['billing', 'customers'],\n description: 'List your customer accounts',\n requiresWorkspace: false,\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.getMyCustomers();\n outputData(listResult(result, false), hctx.ctx);\n },\n },\n {\n path: ['billing', 'customer'],\n description: 'Get a customer by UUID',\n args: [{ name: 'uuid', description: 'Customer UUID', required: true }],\n requiresWorkspace: false,\n handler: async (hctx) => {\n const uuid = hctx.args.uuid as string;\n const result = await requireAuth(hctx.ctx).apiClient.getMyCustomer(uuid);\n outputSingle(result, hctx.ctx);\n },\n },\n {\n path: ['billing', 'update-customer'],\n description: 'Update a customer record (billing owner only)',\n mutates: true,\n args: [\n { name: 'uuid', description: 'Customer UUID', required: true },\n { name: 'name', description: 'Customer name' },\n { name: 'email', description: 'Billing email' },\n { name: 'phone', description: 'Phone number' },\n { name: 'description', description: 'Description / notes' },\n ],\n requiresWorkspace: false,\n handler: async (hctx) => {\n const uuid = hctx.args.uuid as string;\n const data: Record<string, string | undefined> = {};\n if (hctx.args.name) data.name = hctx.args.name as string;\n if (hctx.args.email) data.email = hctx.args.email as string;\n if (hctx.args.phone) data.phone = hctx.args.phone as string;\n if (hctx.args.description) data.description = hctx.args.description as string;\n if (Object.keys(data).length === 0 && !hctx.data) {\n throw new CLIError('Provide --name, --email, --phone, --description, or JSON data');\n }\n const result = await requireAuth(hctx.ctx).apiClient.updateMyCustomer(\n uuid,\n hctx.data ? (hctx.data as Record<string, string>) : data\n );\n outputSingle(result, hctx.ctx);\n },\n },\n {\n path: ['billing', 'invoices'],\n description: 'List invoices for a customer',\n args: [{ name: 'uuid', description: 'Customer UUID', required: true }],\n requiresWorkspace: false,\n handler: async (hctx) => {\n const uuid = hctx.args.uuid as string;\n const result = await requireAuth(hctx.ctx).apiClient.getMyCustomerInvoices(uuid);\n outputData(listResult(result, false), hctx.ctx, INVOICE_COLUMNS as TableColumn<unknown>[]);\n },\n },\n {\n path: ['billing', 'subscriptions'],\n description: 'List subscriptions for a customer',\n args: [{ name: 'uuid', description: 'Customer UUID', required: true }],\n requiresWorkspace: false,\n handler: async (hctx) => {\n const uuid = hctx.args.uuid as string;\n const result = await requireAuth(hctx.ctx).apiClient.getMyCustomerSubscriptions(uuid);\n outputData(listResult(result, false), hctx.ctx);\n },\n },\n];\n\nexport const billingPortalDomain: DomainDef = {\n name: 'billing',\n description: 'Billing portal (customer invoices, subscriptions)',\n commands,\n};\n","/**\n * Concierge API client — direct HTTP calls to the global concierge endpoints.\n *\n * The concierge is account-level (no workspace), so these bypass the ApiClient\n * which is workspace-oriented.\n */\n\nimport type { AuthenticatedContext } from './context';\n\nexport interface ConciergeChat {\n id: number;\n uuid: string;\n chatType: string;\n title: string | null;\n threadId: string;\n createdAt: string;\n updatedAt: string;\n}\n\nexport interface ConciergeMessage {\n id: string;\n role: string;\n content: string;\n createdAt: string | null;\n toolCalls: any[] | null;\n toolCallId: string | null;\n}\n\nfunction baseUrl(ctx: AuthenticatedContext): string {\n return `${ctx.envConfig.apiUrl}/api/v2/concierge`;\n}\n\nfunction authHeaders(ctx: AuthenticatedContext): Record<string, string> {\n return {\n Authorization: `Bearer ${ctx.accessToken}`,\n 'Content-Type': 'application/json',\n };\n}\n\nfunction toCamelChat(raw: any): ConciergeChat {\n return {\n id: raw.id,\n uuid: raw.uuid,\n chatType: raw.chat_type,\n title: raw.title,\n threadId: raw.thread_id,\n createdAt: raw.created_at,\n updatedAt: raw.updated_at,\n };\n}\n\nfunction toCamelMessage(raw: any): ConciergeMessage {\n return {\n id: raw.id,\n role: raw.role,\n content: raw.content ?? '',\n createdAt: raw.created_at ?? null,\n toolCalls: raw.tool_calls ?? null,\n toolCallId: raw.tool_call_id ?? null,\n };\n}\n\nexport async function listConciergeChats(ctx: AuthenticatedContext): Promise<ConciergeChat[]> {\n const res = await fetch(`${baseUrl(ctx)}/chats`, { headers: authHeaders(ctx) });\n if (!res.ok) throw new Error(`Failed to list concierge chats: ${res.status}`);\n const data = await res.json();\n return (data as any[]).map(toCamelChat);\n}\n\nexport async function createConciergeChat(\n ctx: AuthenticatedContext,\n title?: string\n): Promise<ConciergeChat> {\n const res = await fetch(`${baseUrl(ctx)}/chats`, {\n method: 'POST',\n headers: authHeaders(ctx),\n body: JSON.stringify({ title: title ?? null }),\n });\n if (!res.ok) throw new Error(`Failed to create concierge chat: ${res.status}`);\n return toCamelChat(await res.json());\n}\n\nexport async function getConciergeChat(\n ctx: AuthenticatedContext,\n chatId: number\n): Promise<ConciergeChat> {\n const res = await fetch(`${baseUrl(ctx)}/chats/${chatId}`, { headers: authHeaders(ctx) });\n if (!res.ok) throw new Error(`Failed to get concierge chat ${chatId}: ${res.status}`);\n return toCamelChat(await res.json());\n}\n\nexport async function getConciergeChatMessages(\n ctx: AuthenticatedContext,\n chatId: number\n): Promise<ConciergeMessage[]> {\n const res = await fetch(`${baseUrl(ctx)}/chats/${chatId}/messages`, {\n headers: authHeaders(ctx),\n });\n if (!res.ok)\n throw new Error(`Failed to get concierge messages for chat ${chatId}: ${res.status}`);\n const data = await res.json();\n return (data as any[]).map(toCamelMessage);\n}\n","import type { DomainDef } from '../lib/types';\nimport { requireAuth } from '../lib/context';\nimport { outputData, COL } from '../lib/output';\nimport { listConciergeChats, getConciergeChatMessages } from '../lib/concierge-api';\n\nconst CHAT_COLUMNS = [\n COL.id(),\n COL.uuid(),\n { header: 'TITLE', getValue: (c: any) => c.title ?? '' },\n { header: 'UPDATED', getValue: (c: any) => c.updatedAt ?? '' },\n];\n\nconst MESSAGE_COLUMNS = [\n { header: 'ID', getValue: (m: any) => m.id },\n { header: 'ROLE', getValue: (m: any) => m.role },\n { header: 'CONTENT', getValue: (m: any) => (m.content || '').slice(0, 120) },\n];\n\nexport const conciergeDomain: DomainDef = {\n name: 'concierge',\n description: 'Concierge chat management',\n commands: [\n {\n path: ['concierge', 'list'],\n description: 'List concierge chats',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const auth = requireAuth(ctx);\n const chats = await listConciergeChats(auth);\n outputData(chats, auth, CHAT_COLUMNS);\n },\n },\n {\n path: ['concierge', 'messages'],\n description: 'Show messages for a concierge chat',\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'Chat ID', required: true }],\n handler: async ({ ctx, args }) => {\n const auth = requireAuth(ctx);\n const chatId = Number(args.id);\n if (isNaN(chatId)) throw new Error('--id must be a number');\n const messages = await getConciergeChatMessages(auth, chatId);\n outputData(messages, auth, MESSAGE_COLUMNS);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport { crudCommands } from '../lib/crud';\nimport { CLIError } from '../lib/errors';\nimport { outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS = [COL.id(), COL.name(), COL.description(), COL.enabled()];\n\nconst TOOL_COLUMNS = [COL.id(), COL.name(), COL.description()];\n\nexport const customToolkitsDomain: DomainDef = {\n name: 'custom-toolkits',\n description: 'Manage custom toolkits and their tools',\n commands: [\n ...crudCommands({\n prefix: ['custom-toolkits'],\n entityName: 'custom toolkit',\n listMethod: 'getCustomToolkits',\n getMethod: 'getCustomToolkit',\n createMethod: 'createCustomToolkit',\n updateMethod: 'updateCustomToolkit',\n deleteMethod: 'deleteCustomToolkit',\n columns: COLUMNS,\n }),\n {\n path: ['custom-toolkits', 'enable'],\n description: 'Enable a custom toolkit',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Custom toolkit ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.enableCustomToolkit(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['custom-toolkits', 'disable'],\n description: 'Disable a custom toolkit',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Custom toolkit ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.disableCustomToolkit(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n // Tools — nested resource requiring toolkitId\n {\n path: ['custom-toolkits', 'tools', 'create'],\n description: 'Create a custom tool in a toolkit',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'toolkit-id', description: 'Custom toolkit ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const toolkitId = requireNumber(args, 'toolkit-id');\n const result = await requireAuth(ctx).apiClient.createCustomTool(\n workspace,\n toolkitId,\n data as any\n );\n outputSingle(result, ctx, TOOL_COLUMNS);\n },\n },\n {\n path: ['custom-toolkits', 'tools', 'update'],\n description: 'Update a custom tool',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'toolkit-id', description: 'Custom toolkit ID', required: true },\n { name: 'id', description: 'Tool ID', required: true },\n ],\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const toolkitId = requireNumber(args, 'toolkit-id');\n const toolId = requireNumber(args, 'id');\n const result = await requireAuth(ctx).apiClient.updateCustomTool(\n workspace,\n toolkitId,\n toolId,\n data as any\n );\n outputSingle(result, ctx, TOOL_COLUMNS);\n },\n },\n {\n path: ['custom-toolkits', 'tools', 'delete'],\n description: 'Delete a custom tool',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'toolkit-id', description: 'Custom toolkit ID', required: true },\n { name: 'id', description: 'Tool ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const toolkitId = requireNumber(args, 'toolkit-id');\n const toolId = requireNumber(args, 'id');\n await requireAuth(ctx).apiClient.deleteCustomTool(workspace, toolkitId, toolId);\n process.stdout.write(`Deleted custom tool ${toolId}\\n`);\n },\n },\n ],\n};\n","import { type DomainDef, requireString } from '../lib/types';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS = [\n { header: 'SLUG', getValue: (item: any) => item.slug ?? '' },\n COL.name(),\n COL.description(),\n];\n\nexport const featuresDomain: DomainDef = {\n name: 'features',\n description: 'List available features',\n commands: [\n {\n path: ['features', 'list'],\n description: 'List all available features',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getFeatureRegistry();\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['features', 'get'],\n description: 'Get a feature by slug',\n requiresWorkspace: false,\n args: [{ name: 'slug', description: 'Feature slug', required: true }],\n handler: async ({ ctx, args }) => {\n const result = await requireAuth(ctx).apiClient.getFeatureBySlug(\n requireString(args, 'slug')\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['features', 'workspace'],\n description: 'List available features for a workspace',\n requiresWorkspace: true,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getAvailableWorkspaceFeatures();\n outputData(result, ctx, COLUMNS);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'EMAIL', getValue: (item: any) => item.email_address ?? '' },\n COL.status(),\n];\n\nconst EMAIL_COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'SUBJECT', getValue: (item: any) => item.subject ?? '' },\n { header: 'FROM', getValue: (item: any) => item.from_address ?? '' },\n { header: 'DATE', getValue: (item: any) => item.received_at ?? '' },\n { header: 'READ', getValue: (item: any) => String(item.is_read ?? '') },\n];\n\nexport const inboxesDomain: DomainDef = {\n name: 'inboxes',\n description: 'Manage email inboxes',\n commands: [\n ...crudCommands({\n prefix: ['inboxes'],\n entityName: 'inbox',\n listMethod: 'getInboxes',\n getMethod: 'getInbox',\n createMethod: 'createInbox',\n updateMethod: 'updateInbox',\n deleteMethod: 'deleteInbox',\n columns: COLUMNS,\n }),\n {\n path: ['inboxes', 'emails', 'list'],\n description: 'List emails in an inbox',\n requiresWorkspace: true,\n args: [{ name: 'inbox-id', description: 'Inbox ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getInboxEmails(\n workspace,\n requireNumber(args, 'inbox-id')\n );\n outputData(result, ctx, EMAIL_COLUMNS);\n },\n },\n {\n path: ['inboxes', 'emails', 'get'],\n description: 'Get a specific email',\n requiresWorkspace: true,\n args: [\n { name: 'inbox-id', description: 'Inbox ID', required: true },\n { name: 'id', description: 'Email ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getInboxEmail(\n workspace,\n requireNumber(args, 'inbox-id'),\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, EMAIL_COLUMNS);\n },\n },\n {\n path: ['inboxes', 'emails', 'threads'],\n description: 'List email threads in an inbox',\n requiresWorkspace: true,\n args: [{ name: 'inbox-id', description: 'Inbox ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getInboxThreads(\n workspace,\n requireNumber(args, 'inbox-id')\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['inboxes', 'emails', 'mark-read'],\n description: 'Mark an email as read',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'inbox-id', description: 'Inbox ID', required: true },\n { name: 'id', description: 'Email ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.markEmailAsRead(\n workspace,\n requireNumber(args, 'inbox-id'),\n requireNumber(args, 'id')\n );\n process.stdout.write('Email marked as read\\n');\n },\n },\n {\n path: ['inboxes', 'emails', 'mark-unread'],\n description: 'Mark an email as unread',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'inbox-id', description: 'Inbox ID', required: true },\n { name: 'id', description: 'Email ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.markEmailAsUnread(\n workspace,\n requireNumber(args, 'inbox-id'),\n requireNumber(args, 'id')\n );\n process.stdout.write('Email marked as unread\\n');\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS = [\n COL.id(),\n COL.name(),\n { header: 'URL', getValue: (item: any) => item.url ?? '' },\n COL.enabled(),\n];\n\nexport const mcpServersDomain: DomainDef = {\n name: 'mcp-servers',\n description: 'Manage MCP servers',\n commands: [\n ...crudCommands({\n prefix: ['mcp-servers'],\n entityName: 'MCP server',\n listMethod: 'getMcpServers',\n getMethod: 'getMcpServer',\n createMethod: 'createMcpServer',\n updateMethod: 'updateMcpServer',\n deleteMethod: 'deleteMcpServer',\n columns: COLUMNS,\n }),\n {\n path: ['mcp-servers', 'enable'],\n description: 'Enable an MCP server',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'MCP server ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.enableMcpServer(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['mcp-servers', 'disable'],\n description: 'Disable an MCP server',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'MCP server ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.disableMcpServer(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['mcp-servers', 'tools', 'list'],\n description: 'List tools for an MCP server',\n requiresWorkspace: true,\n args: [{ name: 'mcp-server-id', description: 'MCP server ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getMcpServerTools(\n workspace,\n requireNumber(args, 'mcp-server-id')\n );\n outputData(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber, requireString } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport type { MemoryType } from '@gravity-rail/client';\nimport { outputData } from '../lib/output';\nimport { listResult } from '../lib/pagination';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n { header: 'KEY', getValue: (item: any) => item.key ?? '' },\n { header: 'TYPE', getValue: (item: any) => item.type ?? 'basic' },\n { header: 'DESCRIPTION', getValue: (item: any) => truncate(item.description ?? '', 60) },\n { header: 'PRIORITY', getValue: (item: any) => item.priority ?? 0 },\n { header: 'UPDATED', getValue: (item: any) => item.updatedAt ?? item.createdAt ?? '' },\n];\n\nfunction truncate(s: string, max: number): string {\n return s.length > max ? s.slice(0, max - 1) + '…' : s;\n}\n\nexport const memberMemoriesDomain: DomainDef = {\n name: 'member-memories',\n description: 'Manage member persistent memories',\n commands: [\n {\n path: ['member-memories', 'list'],\n description: 'List memories for a member',\n requiresWorkspace: true,\n args: [\n { name: 'member-id', description: 'Member ID', required: true },\n {\n name: 'type',\n description:\n 'Memory type filter (basic, preferences, semantic, summaries, episodic, all)',\n },\n { name: 'query', description: 'Semantic search query (for AgentCore memory types)' },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const memberId = requireNumber(args, 'member-id');\n const type = args.type as MemoryType | 'all' | undefined;\n const query = args.query as string | undefined;\n const result = await requireAuth(ctx).apiClient.getMemberMemories(workspace, memberId, {\n type,\n query,\n });\n outputData(listResult(result, false), ctx, COLUMNS);\n },\n },\n {\n path: ['member-memories', 'delete'],\n description: 'Delete a memory for a member',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'member-id', description: 'Member ID', required: true },\n { name: 'key', description: 'Memory key', required: true },\n {\n name: 'type',\n description: 'Memory type (basic, preferences, semantic, summaries, episodic)',\n },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const memberId = requireNumber(args, 'member-id');\n const key = requireString(args, 'key');\n const type = args.type as MemoryType | undefined;\n await requireAuth(ctx).apiClient.deleteMemberMemory(\n workspace,\n memberId,\n key,\n type ? { type } : undefined\n );\n process.stdout.write(`Deleted memory ${key}\\n`);\n },\n },\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { crudCommands } from '../lib/crud';\nimport { COL } from '../lib/output';\n\nconst COLUMNS = [\n COL.id(),\n COL.name(),\n COL.status(),\n { header: 'DUE DATE', getValue: (item: any) => item.due_date ?? '' },\n];\n\nexport const milestonesDomain: DomainDef = {\n name: 'milestones',\n description: 'Manage milestones',\n commands: [\n ...crudCommands({\n prefix: ['milestones'],\n entityName: 'milestone',\n listMethod: 'getMilestones',\n getMethod: 'getMilestone',\n createMethod: 'createMilestone',\n updateMethod: 'updateMilestone',\n deleteMethod: 'deleteMilestone',\n columns: COLUMNS,\n paginationSupport: 'full',\n }),\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { crudCommands } from '../lib/crud';\nimport { COL } from '../lib/output';\n\nconst COLUMNS = [\n COL.id(),\n COL.name(),\n { header: 'TYPE', getValue: (item: any) => item.type ?? '' },\n COL.enabled(),\n];\n\nexport const notificationRulesDomain: DomainDef = {\n name: 'notification-rules',\n description: 'Manage notification rules',\n commands: [\n ...crudCommands({\n prefix: ['notification-rules'],\n entityName: 'notification rule',\n listMethod: 'getNotificationRules',\n createMethod: 'createNotificationRule',\n updateMethod: 'updateNotificationRule',\n deleteMethod: 'deleteNotificationRule',\n columns: COLUMNS,\n }),\n ],\n};\n","import { type DomainDef, requireString } from '../lib/types';\nimport { outputSingle, outputData } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nexport const oauthDomain: DomainDef = {\n name: 'oauth',\n description: 'Manage OAuth connections',\n commands: [\n {\n path: ['oauth', 'status'],\n description: 'Get OAuth connection status for a provider',\n requiresWorkspace: false,\n args: [{ name: 'provider', description: 'OAuth provider name', required: true }],\n handler: async ({ ctx, args }) => {\n const result = await requireAuth(ctx).apiClient.getOAuthConnectionStatus(\n requireString(args, 'provider') as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['oauth', 'auth-url'],\n description: 'Get OAuth authorization URL for a provider',\n requiresWorkspace: false,\n args: [{ name: 'provider', description: 'OAuth provider name', required: true }],\n handler: async ({ ctx, args }) => {\n const result = await requireAuth(ctx).apiClient.getOAuthAuthorizationUrl(\n requireString(args, 'provider') as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['oauth', 'disconnect'],\n description: 'Disconnect an OAuth provider',\n mutates: true,\n requiresWorkspace: false,\n args: [{ name: 'provider', description: 'OAuth provider name', required: true }],\n handler: async ({ ctx, args }) => {\n const provider = requireString(args, 'provider');\n await requireAuth(ctx).apiClient.disconnectOAuthProvider(provider as any);\n process.stdout.write(`Disconnected OAuth provider ${provider}\\n`);\n },\n },\n {\n path: ['oauth', 'scopes'],\n description: 'List available OAuth scopes',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getAvailableScopes();\n outputData(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS = [COL.id(), COL.name(), COL.description()];\n\nexport const operatorGroupsDomain: DomainDef = {\n name: 'operator-groups',\n description: 'Manage operator groups',\n commands: [\n ...crudCommands({\n prefix: ['operator-groups'],\n entityName: 'operator group',\n listMethod: 'getOperatorGroups',\n getMethod: 'getOperatorGroup',\n createMethod: 'createOperatorGroup',\n updateMethod: 'updateOperatorGroup',\n deleteMethod: 'deleteOperatorGroup',\n columns: COLUMNS,\n }),\n {\n path: ['operator-groups', 'add-member'],\n description: 'Add a member to an operator group',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'id', description: 'Operator group ID', required: true },\n { name: 'member-id', description: 'Member ID to add', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.addGroupMember(\n workspace,\n requireNumber(args, 'id'),\n { member_id: requireNumber(args, 'member-id') } as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['operator-groups', 'remove-member'],\n description: 'Remove a member from an operator group',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'id', description: 'Operator group ID', required: true },\n { name: 'member-id', description: 'Member ID to remove', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.removeGroupMember(\n workspace,\n requireNumber(args, 'id'),\n requireNumber(args, 'member-id')\n );\n process.stdout.write('Member removed from group\\n');\n },\n },\n {\n path: ['operator-groups', 'live'],\n description: 'List live operators',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getLiveOperators(workspace);\n outputData(result, ctx);\n },\n },\n {\n path: ['operator-groups', 'presence'],\n description: 'Get presence status',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getPresenceStatus(workspace);\n outputSingle(result, ctx);\n },\n },\n ],\n};\n","import type { OrgDomain } from '@gravity-rail/sdk';\nimport { requireAuth, type AuthenticatedContext } from '../lib/context';\nimport { CLIError } from '../lib/errors';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle } from '../lib/output';\nimport type { CommandDef, DomainDef, ParsedArgs } from '../lib/types';\n\ntype OrgMembership = Awaited<\n ReturnType<AuthenticatedContext['apiClient']['getMyOrganizations']>\n>[number];\n\nconst ORG_COLUMNS: TableColumn<OrgMembership>[] = [\n { header: 'ID', getValue: (item) => String(item.organizationId ?? '') },\n { header: 'NAME', getValue: (item) => item.organizationName || '' },\n { header: 'ROLE', getValue: (item) => item.role || '' },\n];\n\nconst ORG_DOMAIN_COLUMNS: TableColumn<OrgDomain>[] = [\n { header: 'UUID', getValue: (item) => item.uuid ?? '' },\n { header: 'DOMAIN', getValue: (item) => item.domain ?? '' },\n { header: 'OWNERSHIP', getValue: (item) => item.ownershipStatus ?? '' },\n { header: 'EMAIL', getValue: (item) => item.emailStatus ?? '-' },\n { header: 'SITE', getValue: (item) => item.siteStatus ?? '-' },\n { header: 'TXT HOST', getValue: (item) => item.ownershipDnsRecord?.host ?? '' },\n {\n header: 'TXT VALUE',\n getValue: (item) => item.ownershipDnsRecord?.value ?? '',\n maxWidth: 80,\n },\n];\n\nfunction requireOrgId(args: ParsedArgs): string {\n const val = args['org-uuid'] ?? args.org;\n if (typeof val !== 'string' || !val) {\n throw new CLIError('Missing required argument: --org-uuid');\n }\n return val;\n}\n\nfunction requireDomainUuid(args: ParsedArgs): string {\n const val = args['domain-uuid'] ?? args.uuid;\n if (typeof val !== 'string' || !val) {\n throw new CLIError('Missing required argument: --domain-uuid');\n }\n return val;\n}\n\nfunction requireDomain(args: ParsedArgs): string {\n const val = args.domain;\n if (typeof val !== 'string' || !val) {\n throw new CLIError('Missing required argument: --domain');\n }\n return val;\n}\n\nconst ORG_UUID_ARG = {\n name: 'org-uuid',\n aliases: ['org'],\n description: 'Organization UUID or ID',\n required: true,\n};\n\nconst DOMAIN_UUID_ARG = {\n name: 'domain-uuid',\n aliases: ['domain-id'],\n description: 'OrgDomain UUID',\n required: true,\n};\n\nfunction pluralize(count: number, singular: string, plural = `${singular}s`): string {\n return count === 1 ? singular : plural;\n}\n\nfunction emailVerifyCommand(path: string[], description: string): CommandDef {\n return {\n path,\n description,\n mutates: true,\n requiresWorkspace: false,\n args: [ORG_UUID_ARG, DOMAIN_UUID_ARG],\n examples: [\n `yarn gr ${path.join(' ')} --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID --allow-write`,\n ],\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.verifyOrgDomainEmail(\n requireOrgId(hctx.args),\n requireDomainUuid(hctx.args)\n );\n outputSingle(result, hctx.ctx);\n },\n };\n}\n\nfunction siteVerifyCommand(path: string[], description: string): CommandDef {\n return {\n path,\n description,\n mutates: true,\n requiresWorkspace: false,\n args: [ORG_UUID_ARG, DOMAIN_UUID_ARG],\n examples: [\n `yarn gr ${path.join(' ')} --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID --allow-write`,\n ],\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.verifyOrgDomainSite(\n requireOrgId(hctx.args),\n requireDomainUuid(hctx.args)\n );\n outputSingle(result, hctx.ctx);\n },\n };\n}\n\nfunction registerDomainCommand(path: string[]): CommandDef {\n return {\n path,\n description: 'Register an organization domain and return ownership TXT instructions',\n mutates: true,\n requiresWorkspace: false,\n args: [\n ORG_UUID_ARG,\n { name: 'domain', description: 'Domain to register, e.g. example.com', required: true },\n ],\n examples: [\n `yarn gr ${path.join(' ')} --org-uuid $ORG_UUID --domain example.com --allow-write`,\n ],\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.registerOrgDomain(\n requireOrgId(hctx.args),\n requireDomain(hctx.args)\n );\n outputSingle(result, hctx.ctx, ORG_DOMAIN_COLUMNS);\n },\n };\n}\n\nconst domainCommands: CommandDef[] = [\n {\n path: ['org', 'domains', 'list'],\n description: 'List domains registered to an organization',\n requiresWorkspace: false,\n args: [ORG_UUID_ARG],\n examples: ['yarn gr org domains list --org-uuid $ORG_UUID'],\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.listOrgDomains(\n requireOrgId(hctx.args)\n );\n outputData(result, hctx.ctx, ORG_DOMAIN_COLUMNS);\n },\n },\n {\n path: ['org', 'domains', 'get'],\n description: 'Get a registered organization domain',\n requiresWorkspace: false,\n args: [ORG_UUID_ARG, DOMAIN_UUID_ARG],\n examples: ['yarn gr org domains get --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID'],\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.getOrgDomain(\n requireOrgId(hctx.args),\n requireDomainUuid(hctx.args)\n );\n outputSingle(result, hctx.ctx, ORG_DOMAIN_COLUMNS);\n },\n },\n registerDomainCommand(['org', 'domains', 'register']),\n registerDomainCommand(['org', 'domains', 'create']),\n {\n path: ['org', 'domains', 'verify-ownership'],\n description: 'Verify domain ownership by checking the _gravity-verify TXT record',\n mutates: true,\n requiresWorkspace: false,\n args: [ORG_UUID_ARG, DOMAIN_UUID_ARG],\n examples: [\n 'yarn gr org domains verify-ownership --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID --allow-write',\n ],\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.verifyOrgDomainOwnership(\n requireOrgId(hctx.args),\n requireDomainUuid(hctx.args)\n );\n outputSingle(result, hctx.ctx);\n },\n },\n {\n path: ['org', 'domains', 'delete'],\n description: 'Delete a registered organization domain',\n mutates: true,\n requiresWorkspace: false,\n args: [ORG_UUID_ARG, DOMAIN_UUID_ARG],\n examples: [\n 'yarn gr org domains delete --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID --allow-write',\n ],\n handler: async (hctx) => {\n const domainUuid = requireDomainUuid(hctx.args);\n await requireAuth(hctx.ctx).apiClient.deleteOrgDomain(requireOrgId(hctx.args), domainUuid);\n process.stdout.write(`Deleted org domain ${domainUuid}\\n`);\n },\n },\n {\n path: ['org', 'domains', 'email', 'enable'],\n description: 'Enable email DNS records on a verified organization domain',\n mutates: true,\n requiresWorkspace: false,\n args: [ORG_UUID_ARG, DOMAIN_UUID_ARG],\n examples: [\n 'yarn gr org domains email enable --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID --allow-write',\n ],\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.enableOrgDomainEmail(\n requireOrgId(hctx.args),\n requireDomainUuid(hctx.args)\n );\n outputSingle(result, hctx.ctx);\n },\n },\n {\n path: ['org', 'domains', 'email', 'get'],\n description: 'Get email DNS setup and status for an organization domain',\n requiresWorkspace: false,\n args: [ORG_UUID_ARG, DOMAIN_UUID_ARG],\n examples: ['yarn gr org domains email get --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID'],\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.getOrgDomainEmail(\n requireOrgId(hctx.args),\n requireDomainUuid(hctx.args)\n );\n outputSingle(result, hctx.ctx);\n },\n },\n emailVerifyCommand(\n ['org', 'domains', 'email', 'verify'],\n 'Verify email DNS records, including MX'\n ),\n emailVerifyCommand(\n ['org', 'domains', 'email', 'verify-mx'],\n 'Verify email DNS records, including MX'\n ),\n {\n path: ['org', 'domains', 'email', 'disable'],\n description: 'Disable email on an organization domain',\n mutates: true,\n requiresWorkspace: false,\n args: [\n ORG_UUID_ARG,\n DOMAIN_UUID_ARG,\n {\n name: 'confirm',\n description: 'Confirm removal of inbox routing that depends on this domain',\n isFlag: true,\n },\n ],\n examples: [\n 'yarn gr org domains email disable --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID --confirm --allow-write',\n ],\n handler: async (hctx) => {\n const domainUuid = requireDomainUuid(hctx.args);\n const result = await requireAuth(hctx.ctx).apiClient.disableOrgDomainEmail(\n requireOrgId(hctx.args),\n domainUuid,\n hctx.args.confirm === true\n );\n if (!result.ok) {\n const { inboxCount } = result.impact;\n throw new CLIError(\n `Email is still used by ${inboxCount} ${pluralize(\n inboxCount,\n 'inbox',\n 'inboxes'\n )}. Re-run with --confirm to disable it anyway.`\n );\n }\n process.stdout.write(`Disabled email for org domain ${domainUuid}\\n`);\n },\n },\n {\n path: ['org', 'domains', 'site', 'enable'],\n description: 'Enable custom site CNAME verification on a verified organization domain',\n mutates: true,\n requiresWorkspace: false,\n args: [ORG_UUID_ARG, DOMAIN_UUID_ARG],\n examples: [\n 'yarn gr org domains site enable --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID --allow-write',\n ],\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.enableOrgDomainSite(\n requireOrgId(hctx.args),\n requireDomainUuid(hctx.args)\n );\n outputSingle(result, hctx.ctx);\n },\n },\n {\n path: ['org', 'domains', 'site', 'get'],\n description: 'Get custom site CNAME setup and status for an organization domain',\n requiresWorkspace: false,\n args: [ORG_UUID_ARG, DOMAIN_UUID_ARG],\n examples: ['yarn gr org domains site get --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID'],\n handler: async (hctx) => {\n const result = await requireAuth(hctx.ctx).apiClient.getOrgDomainSite(\n requireOrgId(hctx.args),\n requireDomainUuid(hctx.args)\n );\n outputSingle(result, hctx.ctx);\n },\n },\n siteVerifyCommand(\n ['org', 'domains', 'site', 'verify'],\n 'Verify the site CNAME points at Gravity Rail'\n ),\n siteVerifyCommand(\n ['org', 'domains', 'site', 'verify-cname'],\n 'Verify the site CNAME points at Gravity Rail'\n ),\n {\n path: ['org', 'domains', 'site', 'disable'],\n description: 'Disable custom site routing on an organization domain',\n mutates: true,\n requiresWorkspace: false,\n args: [\n ORG_UUID_ARG,\n DOMAIN_UUID_ARG,\n {\n name: 'confirm',\n description: 'Confirm removal of site mappings that depend on this domain',\n isFlag: true,\n },\n ],\n examples: [\n 'yarn gr org domains site disable --org-uuid $ORG_UUID --domain-uuid $DOMAIN_UUID --confirm --allow-write',\n ],\n handler: async (hctx) => {\n const domainUuid = requireDomainUuid(hctx.args);\n const result = await requireAuth(hctx.ctx).apiClient.disableOrgDomainSite(\n requireOrgId(hctx.args),\n domainUuid,\n hctx.args.confirm === true\n );\n if (!result.ok) {\n const { siteCount } = result.impact;\n throw new CLIError(\n `Site routing is still used by ${siteCount} ${pluralize(\n siteCount,\n 'site'\n )}. Re-run with --confirm to disable it anyway.`\n );\n }\n process.stdout.write(`Disabled site routing for org domain ${domainUuid}\\n`);\n },\n },\n];\n\nexport const orgDomain: DomainDef = {\n name: 'org',\n description: 'Organization membership and domains',\n commands: [\n {\n path: ['org', 'list'],\n description: 'List my organizations',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getMyOrganizations();\n outputData(result, ctx, ORG_COLUMNS);\n },\n },\n ...domainCommands,\n ],\n};\n","/**\n * Organization-scoped phone number management CLI commands.\n *\n * Covers the /api/v2/o/{org_uuid}/phone-numbers/ routes:\n * - list, search, purchase, assign, reassign, release, delete\n */\nimport { OrgApi } from '@gravity-rail/sdk';\nimport { requireAuth } from '../lib/context';\nimport { CLIError } from '../lib/errors';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle } from '../lib/output';\nimport type { CommandDef, CommandHandlerContext, DomainDef } from '../lib/types';\n\nfunction getOrgApi(hctx: CommandHandlerContext): OrgApi {\n const ctx = requireAuth(hctx.ctx);\n return new OrgApi(ctx.accessToken, ctx.envConfig.apiUrl);\n}\n\ntype AnyRecord = Record<string, any>;\n\nconst PROVIDER_PHONE_COLUMNS: TableColumn<AnyRecord>[] = [\n { header: 'ID', getValue: (p) => String(p.id ?? '') },\n { header: 'UUID', getValue: (p) => (p.uuid ?? '').slice(0, 8) },\n { header: 'Phone', getValue: (p) => p.phoneNumber ?? '' },\n { header: 'Type', getValue: (p) => p.phoneNumberType ?? '' },\n { header: 'Assigned', getValue: (p) => String(p.isAssigned ?? false) },\n { header: 'Workspace', getValue: (p) => p.workspaceName ?? '-' },\n];\n\nconst AVAILABLE_PHONE_COLUMNS: TableColumn<AnyRecord>[] = [\n { header: 'Phone', getValue: (p) => p.phoneNumber ?? '' },\n { header: 'Name', getValue: (p) => p.friendlyName ?? '' },\n { header: 'Locality', getValue: (p) => p.locality ?? '' },\n { header: 'Region', getValue: (p) => p.region ?? '' },\n { header: 'Type', getValue: (p) => p.phoneNumberType ?? '' },\n];\n\nfunction requireOrgUuid(args: Record<string, any>): string {\n const val = args['org-uuid'] ?? args['org'];\n if (typeof val !== 'string' || !val) {\n throw new CLIError('Missing required argument: --org-uuid');\n }\n return val;\n}\n\nconst commands: CommandDef[] = [\n {\n path: ['org', 'phone-numbers', 'list'],\n description: 'List all phone numbers owned by an organization',\n args: [\n { name: 'org-uuid', aliases: ['org'], description: 'Organization UUID', required: true },\n ],\n requiresWorkspace: false,\n columns: PROVIDER_PHONE_COLUMNS as TableColumn<unknown>[],\n handler: async (hctx) => {\n const orgUuid = requireOrgUuid(hctx.args);\n const result = await getOrgApi(hctx).listPhoneNumbers(orgUuid);\n outputData(result, hctx.ctx, PROVIDER_PHONE_COLUMNS);\n },\n },\n {\n path: ['org', 'phone-numbers', 'search'],\n description: 'Search for available phone numbers to purchase',\n args: [\n { name: 'org-uuid', aliases: ['org'], description: 'Organization UUID', required: true },\n { name: 'number-type', description: 'Number type: local or toll_free', default: 'local' },\n { name: 'area-code', description: 'Area code filter' },\n { name: 'contains', description: 'Phone number pattern to match' },\n { name: 'limit', description: 'Maximum results (default: 20)' },\n ],\n requiresWorkspace: false,\n columns: AVAILABLE_PHONE_COLUMNS as TableColumn<unknown>[],\n handler: async (hctx) => {\n const orgUuid = requireOrgUuid(hctx.args);\n const result = await getOrgApi(hctx).searchPhoneNumbers(orgUuid, {\n numberType: (hctx.args['number-type'] as 'local' | 'toll_free') ?? 'local',\n areaCode: hctx.args['area-code'] as string | undefined,\n contains: hctx.args.contains as string | undefined,\n limit: hctx.args.limit ? Number(hctx.args.limit) : undefined,\n });\n outputData(result, hctx.ctx, AVAILABLE_PHONE_COLUMNS);\n },\n },\n {\n path: ['org', 'phone-numbers', 'purchase'],\n description: 'Purchase a phone number from Twilio for this org',\n mutates: true,\n args: [\n { name: 'org-uuid', aliases: ['org'], description: 'Organization UUID', required: true },\n { name: 'phone-number', description: 'E.164 phone number to purchase', required: true },\n { name: 'number-type', description: 'Number type: local or toll_free', default: 'local' },\n ],\n requiresWorkspace: false,\n columns: PROVIDER_PHONE_COLUMNS as TableColumn<unknown>[],\n handler: async (hctx) => {\n const orgUuid = requireOrgUuid(hctx.args);\n const phoneNumber = hctx.args['phone-number'] as string;\n if (!phoneNumber) throw new CLIError('Missing required argument: --phone-number');\n const numberType = (hctx.args['number-type'] as 'local' | 'toll_free') ?? 'local';\n const result = await getOrgApi(hctx).purchasePhoneNumber(orgUuid, phoneNumber, numberType);\n outputSingle(result, hctx.ctx, PROVIDER_PHONE_COLUMNS);\n },\n },\n {\n path: ['org', 'phone-numbers', 'assign'],\n description: 'Assign an org phone number to a workspace',\n mutates: true,\n args: [\n { name: 'org-uuid', aliases: ['org'], description: 'Organization UUID', required: true },\n { name: 'provider-phone-uuid', description: 'Provider phone UUID', required: true },\n { name: 'workspace-uuid', description: 'Target workspace UUID', required: true },\n ],\n requiresWorkspace: false,\n columns: PROVIDER_PHONE_COLUMNS as TableColumn<unknown>[],\n handler: async (hctx) => {\n const orgUuid = requireOrgUuid(hctx.args);\n const providerPhoneUuid = hctx.args['provider-phone-uuid'] as string;\n const workspaceUuid = hctx.args['workspace-uuid'] as string;\n if (!providerPhoneUuid)\n throw new CLIError('Missing required argument: --provider-phone-uuid');\n if (!workspaceUuid) throw new CLIError('Missing required argument: --workspace-uuid');\n const result = await getOrgApi(hctx).assignPhoneToWorkspace(\n orgUuid,\n providerPhoneUuid,\n workspaceUuid\n );\n outputSingle(result, hctx.ctx, PROVIDER_PHONE_COLUMNS);\n },\n },\n {\n path: ['org', 'phone-numbers', 'reassign'],\n description: 'Reassign a phone number to a different workspace',\n mutates: true,\n args: [\n { name: 'org-uuid', aliases: ['org'], description: 'Organization UUID', required: true },\n { name: 'provider-phone-uuid', description: 'Provider phone UUID', required: true },\n { name: 'new-workspace-uuid', description: 'New workspace UUID', required: true },\n ],\n requiresWorkspace: false,\n columns: PROVIDER_PHONE_COLUMNS as TableColumn<unknown>[],\n handler: async (hctx) => {\n const orgUuid = requireOrgUuid(hctx.args);\n const providerPhoneUuid = hctx.args['provider-phone-uuid'] as string;\n const newWorkspaceUuid = hctx.args['new-workspace-uuid'] as string;\n if (!providerPhoneUuid)\n throw new CLIError('Missing required argument: --provider-phone-uuid');\n if (!newWorkspaceUuid)\n throw new CLIError('Missing required argument: --new-workspace-uuid');\n const result = await getOrgApi(hctx).reassignPhone(\n orgUuid,\n providerPhoneUuid,\n newWorkspaceUuid\n );\n outputSingle(result, hctx.ctx, PROVIDER_PHONE_COLUMNS);\n },\n },\n {\n path: ['org', 'phone-numbers', 'release'],\n description: 'Release a phone number from its current workspace',\n mutates: true,\n args: [\n { name: 'org-uuid', aliases: ['org'], description: 'Organization UUID', required: true },\n { name: 'provider-phone-uuid', description: 'Provider phone UUID', required: true },\n ],\n requiresWorkspace: false,\n columns: PROVIDER_PHONE_COLUMNS as TableColumn<unknown>[],\n handler: async (hctx) => {\n const orgUuid = requireOrgUuid(hctx.args);\n const providerPhoneUuid = hctx.args['provider-phone-uuid'] as string;\n if (!providerPhoneUuid)\n throw new CLIError('Missing required argument: --provider-phone-uuid');\n const result = await getOrgApi(hctx).releasePhone(orgUuid, providerPhoneUuid);\n outputSingle(result, hctx.ctx, PROVIDER_PHONE_COLUMNS);\n },\n },\n {\n path: ['org', 'phone-numbers', 'delete'],\n description: 'Delete a phone number from the org (releases from Twilio)',\n mutates: true,\n args: [\n { name: 'org-uuid', aliases: ['org'], description: 'Organization UUID', required: true },\n { name: 'provider-phone-uuid', description: 'Provider phone UUID', required: true },\n ],\n requiresWorkspace: false,\n handler: async (hctx) => {\n const orgUuid = requireOrgUuid(hctx.args);\n const providerPhoneUuid = hctx.args['provider-phone-uuid'] as string;\n if (!providerPhoneUuid)\n throw new CLIError('Missing required argument: --provider-phone-uuid');\n await getOrgApi(hctx).deletePhoneNumber(orgUuid, providerPhoneUuid);\n console.log('Phone number deleted successfully');\n },\n },\n];\n\nexport const orgPhoneNumbersDomain: DomainDef = {\n name: 'org',\n description: 'Organization management',\n commands,\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { crudCommands } from '../lib/crud';\nimport { outputData, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'NUMBER', getValue: (item: any) => item.phone_number ?? '' },\n { header: 'LABEL', getValue: (item: any) => item.label ?? '' },\n COL.status(),\n];\n\nexport const phoneNumbersDomain: DomainDef = {\n name: 'phone-numbers',\n description: 'Manage phone numbers',\n commands: [\n ...crudCommands({\n prefix: ['phone-numbers'],\n entityName: 'phone number',\n listMethod: 'getPhoneNumbers',\n getMethod: 'getPhoneNumber',\n createMethod: 'createPhoneNumber',\n updateMethod: 'updatePhoneNumber',\n archiveMethod: 'archivePhoneNumber',\n columns: COLUMNS,\n }),\n {\n path: ['phone-numbers', 'available'],\n description: 'List available phone numbers for purchase',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getAvailablePhoneNumbers(workspace);\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['phone-numbers', 'request'],\n description: 'Request a phone number',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const result = await requireAuth(ctx).apiClient.requestPhoneNumber(\n workspace,\n data as any\n );\n outputData([result], ctx, COLUMNS);\n },\n },\n {\n path: ['phone-numbers', 'calls', 'list'],\n description: 'List calls for a phone number',\n requiresWorkspace: true,\n args: [\n { name: 'phone-number-id', description: 'Phone number ID', required: true },\n { name: 'page', description: 'Page number' },\n { name: 'page-size', description: 'Page size' },\n { name: 'status', description: 'Filter by status' },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const status = args.status as string | undefined;\n const result = await requireAuth(ctx).apiClient.getPhoneNumberCalls(\n workspace,\n requireNumber(args, 'phone-number-id'),\n args.page ? Number(args.page) : undefined,\n args['page-size'] ? Number(args['page-size']) : undefined,\n status ? { status } : undefined\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['phone-numbers', 'messages', 'list'],\n description: 'List messages for a phone number',\n requiresWorkspace: true,\n args: [\n { name: 'phone-number-id', description: 'Phone number ID', required: true },\n { name: 'page', description: 'Page number' },\n { name: 'page-size', description: 'Page size' },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getPhoneNumberMessages(\n workspace,\n requireNumber(args, 'phone-number-id'),\n args.page ? Number(args.page) : undefined,\n args['page-size'] ? Number(args['page-size']) : undefined\n );\n outputData(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireString, requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n { header: 'WORD', getValue: (item: any) => item.word ?? '' },\n { header: 'PRONUNCIATION', getValue: (item: any) => item.pronunciation ?? '' },\n { header: 'TYPE', getValue: (item: any) => item.type ?? '' },\n];\n\nexport const pronunciationsDomain: DomainDef = {\n name: 'pronunciations',\n description: 'Manage pronunciation entries',\n commands: [\n {\n path: ['pronunciations', 'list'],\n description: 'List pronunciation entries',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getPronunciationEntries(workspace);\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['pronunciations', 'create'],\n description: 'Create a pronunciation entry',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n const result = await requireAuth(ctx).apiClient.createPronunciationEntry(\n workspace,\n data as any\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['pronunciations', 'update'],\n description: 'Update a pronunciation entry',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Pronunciation entry ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updatePronunciationEntry(\n workspace,\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['pronunciations', 'delete'],\n description: 'Delete a pronunciation entry',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Pronunciation entry ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const id = requireNumber(args, 'id');\n await requireAuth(ctx).apiClient.deletePronunciationEntry(workspace, id);\n process.stdout.write(`Deleted pronunciation entry ${id}\\n`);\n },\n },\n {\n path: ['pronunciations', 'my-list'],\n description: 'List my personal pronunciations',\n requiresWorkspace: true,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getMyPronunciations();\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['pronunciations', 'my-create'],\n description: 'Create a personal pronunciation',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, data }) => {\n const result = await requireAuth(ctx).apiClient.createMyPronunciation(data as any);\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['pronunciations', 'suggest'],\n description: 'Get pronunciation suggestions for a word',\n requiresWorkspace: true,\n args: [{ name: 'word', description: 'Word to get suggestions for', required: true }],\n handler: async ({ ctx, args }) => {\n const result = await requireAuth(ctx).apiClient.suggestPronunciations(\n requireString(args, 'word')\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['pronunciations', 'voices'],\n description: 'Get recommended voices',\n requiresWorkspace: true,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getRecommendedVoices();\n outputData(result, ctx);\n },\n },\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { requireNumber } from '../lib/types';\nimport { outputSingle } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nexport const reportsDomain: DomainDef = {\n name: 'reports',\n description: 'View usage reports',\n commands: [\n {\n path: ['reports', 'ai-usage'],\n description: 'Get AI usage report',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getAIUsageReport(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['reports', 'sms-usage'],\n description: 'Get SMS usage report',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getSMSUsageReport(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['reports', 'phone-usage'],\n description: 'Get phone usage report',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getPhoneUsageReport(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['reports', 'voice-usage'],\n description: 'Get voice usage report',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getVoiceUsageReport(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['reports', 'member-usage'],\n description: 'Get usage for a specific member',\n requiresWorkspace: true,\n args: [{ name: 'member-id', description: 'Member ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getMemberUsage(\n workspace,\n requireNumber(args, 'member-id')\n );\n outputSingle(result, ctx);\n },\n },\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { requireNumber } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle, COL } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.status(),\n { header: 'PLAN', getValue: (item: any) => item.plan_name ?? item.plan ?? '' },\n COL.created(),\n];\n\nexport const subscriptionsDomain: DomainDef = {\n name: 'subscriptions',\n description: 'Manage subscriptions',\n commands: [\n {\n path: ['subscriptions', 'list'],\n description: 'List all subscriptions',\n requiresWorkspace: false,\n handler: async ({ ctx }) => {\n const result = await requireAuth(ctx).apiClient.getSubscriptions();\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['subscriptions', 'workspace'],\n description: 'List subscriptions for a workspace',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getWorkspaceSubscriptions(workspace);\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['subscriptions', 'cancel'],\n description: 'Cancel a subscription',\n mutates: true,\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'Subscription ID', required: true }],\n handler: async ({ ctx, args }) => {\n const result = await requireAuth(ctx).apiClient.cancelSubscription(\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['subscriptions', 'reactivate'],\n description: 'Reactivate a cancelled subscription',\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'Subscription ID', required: true }],\n handler: async ({ ctx, args }) => {\n const result = await requireAuth(ctx).apiClient.reactivateSubscription(\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['subscriptions', 'update'],\n description: 'Update a subscription',\n mutates: true,\n requiresWorkspace: false,\n args: [{ name: 'id', description: 'Subscription ID', required: true }],\n handler: async ({ ctx, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updateSubscription(\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../lib/types';\nimport { outputSingle } from '../lib/output';\nimport { requireAuth } from '../lib/context';\n\nexport const promptsDomain: DomainDef = {\n name: 'prompts',\n description: 'Inspect and debug LLM prompts',\n commands: [\n {\n path: ['prompts', 'inspect'],\n description: 'Show the full composed prompt for a task or chat, broken into layers',\n requiresWorkspace: true,\n args: [\n { name: 'task-id', description: 'Task ID to inspect (static mode)' },\n { name: 'chat-id', description: 'Chat ID to inspect (live mode)' },\n { name: 'channel', description: 'Channel to simulate (static mode only)' },\n { name: 'turn', description: 'Turn number (chat mode only, default 1)' },\n ],\n examples: [\n 'gr prompts inspect --task-id 42',\n 'gr prompts inspect --task-id 42 --channel phone-voice',\n 'gr prompts inspect --chat-id 789',\n 'gr prompts inspect --chat-id 789 --turn 3',\n ],\n handler: async ({ ctx, workspace, args }) => {\n const taskId = args['task-id'] ? requireNumber(args, 'task-id') : undefined;\n const chatId = args['chat-id'] ? requireNumber(args, 'chat-id') : undefined;\n\n if (!taskId && !chatId) {\n throw new Error('Provide --task-id or --chat-id');\n }\n if (taskId && chatId) {\n throw new Error('Provide --task-id or --chat-id, not both');\n }\n\n const channel = (args.channel as string) || undefined;\n const turn = args.turn ? requireNumber(args, 'turn') : undefined;\n\n const result = await requireAuth(ctx).apiClient.inspectPrompt(workspace, taskId ?? 0, {\n channel,\n ...(chatId ? { chatId } : {}),\n ...(turn ? { turn } : {}),\n });\n outputSingle(result, ctx);\n },\n },\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport { crudCommands } from '../lib/crud';\nimport { COL } from '../lib/output';\n\nconst COLUMNS = [\n COL.id(),\n COL.name(),\n { header: 'TYPE', getValue: (item: any) => item.type ?? '' },\n COL.status(),\n];\n\nexport const supervisorsDomain: DomainDef = {\n name: 'supervisors',\n description: 'Manage supervisors',\n commands: [\n ...crudCommands({\n prefix: ['supervisors'],\n entityName: 'supervisor',\n listMethod: 'getSupervisors',\n getMethod: 'getSupervisor',\n createMethod: 'createSupervisor',\n updateMethod: 'updateSupervisor',\n deleteMethod: 'deleteSupervisor',\n columns: COLUMNS,\n }),\n ],\n};\n","import type { DomainDef } from '../lib/types';\nimport type { TableColumn } from '../lib/output';\nimport { outputData, outputSingle } from '../lib/output';\nimport { requireNumber } from '../lib/types';\nimport { CLIError } from '../lib/errors';\nimport { requireAuth } from '../lib/context';\n\nconst RUN_COLUMNS: TableColumn<unknown>[] = [\n { header: 'RUN ID', getValue: (item: any) => item.runId ?? '' },\n { header: 'STATUS', getValue: (item: any) => item.status ?? '' },\n { header: 'MODE', getValue: (item: any) => item.mode ?? '' },\n { header: 'TOTAL', getValue: (item: any) => String(item.total ?? 0) },\n { header: 'SYNCED', getValue: (item: any) => String(item.synced ?? 0) },\n { header: 'FAILED', getValue: (item: any) => String(item.failed ?? 0) },\n { header: 'SKIPPED', getValue: (item: any) => String(item.skipped ?? 0) },\n { header: 'DRY RUN', getValue: (item: any) => (item.dryRun ? 'yes' : 'no') },\n { header: 'STARTED', getValue: (item: any) => item.startedAt ?? '' },\n];\n\nconst ITEM_COLUMNS: TableColumn<unknown>[] = [\n { header: 'INDEX', getValue: (item: any) => String(item.index ?? '') },\n { header: 'DIR', getValue: (item: any) => item.direction ?? '' },\n { header: 'STATUS', getValue: (item: any) => item.status ?? '' },\n { header: 'ENTITY', getValue: (item: any) => item.entityType ?? 'member' },\n {\n header: 'MEMBER',\n getValue: (item: any) => (item.memberId != null ? String(item.memberId) : ''),\n },\n { header: 'REMOTE', getValue: (item: any) => item.remoteRecordId ?? '' },\n { header: 'DETAIL', getValue: (item: any) => item.detail ?? '' },\n];\n\nasync function streamSyncRun(response: Response, verbose: boolean): Promise<void> {\n const reader = response.body?.getReader();\n if (!reader) {\n console.error('No response body');\n return;\n }\n\n const decoder = new TextDecoder();\n let buffer = '';\n let lastRun: any = null;\n\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n\n buffer += decoder.decode(value, { stream: true });\n const lines = buffer.split('\\n');\n buffer = lines.pop() ?? '';\n\n for (const line of lines) {\n if (!line.startsWith('data: ')) continue;\n try {\n const data = JSON.parse(line.slice(6));\n if (data.type === 'sync_run') {\n lastRun = data;\n if (verbose) {\n const s = data;\n process.stderr.write(\n `\\r ${s.status} — ${s.synced} synced, ${s.failed} failed, ${s.skipped} skipped (${s.total} total)`\n );\n }\n } else if (data.type === 'sync_item') {\n if (verbose) {\n const i = data;\n const detail = i.detail ? ` — ${i.detail}` : '';\n const member = i.memberId != null ? ` member:${i.memberId}` : '';\n const remote = i.remoteRecordId ? ` remote:${i.remoteRecordId}` : '';\n console.error(`\\n [${i.status}] ${i.direction}${member}${remote}${detail}`);\n }\n }\n } catch {\n // Non-JSON line, skip\n }\n }\n }\n\n if (verbose) {\n console.error(''); // newline after progress\n }\n\n if (lastRun) {\n console.log(JSON.stringify(lastRun, null, 2));\n }\n}\n\nexport const syncDomain: DomainDef = {\n name: 'sync',\n description: 'Run and monitor connection syncs',\n commands: [\n {\n path: ['sync', 'run'],\n description: 'Start a sync run and stream progress (SSE)',\n args: [\n { name: 'connection-id', description: 'Connection ID', required: true },\n { name: 'dry-run', description: 'Test sync without making changes', isFlag: true },\n {\n name: 'full-resync',\n description: 'Clear checkpoints and re-sync all records',\n isFlag: true,\n },\n { name: 'quiet', description: 'Only output final result JSON', isFlag: true },\n { name: 'entity-type', description: 'Scope to entity type: member or record' },\n {\n name: 'board-id',\n description: 'Scope to a single board mapping (requires --entity-type)',\n },\n ],\n examples: [\n 'sync run --connection-id 6',\n 'sync run --connection-id 6 --dry-run',\n 'sync run --connection-id 6 --full-resync',\n 'sync run --connection-id 6 --quiet',\n 'sync run --connection-id 6 --entity-type member',\n 'sync run --connection-id 6 --entity-type member --board-id 18406694561',\n ],\n mutates: true,\n handler: async ({ ctx, args, workspace }) => {\n const connectionId = requireNumber(args, 'connection-id');\n const dryRun = args['dry-run'] === true;\n const fullResync = args['full-resync'] === true;\n const quiet = args['quiet'] === true;\n const VALID_ENTITY_TYPES = ['member', 'record'] as const;\n type ValidEntityType = (typeof VALID_ENTITY_TYPES)[number];\n const rawEntityType = args['entity-type'] as string | undefined;\n let entityType: ValidEntityType | undefined;\n if (rawEntityType) {\n if (!VALID_ENTITY_TYPES.includes(rawEntityType as ValidEntityType)) {\n throw new CLIError(\n `Invalid --entity-type \"${rawEntityType}\". Allowed values: ${VALID_ENTITY_TYPES.join(', ')}`\n );\n }\n entityType = rawEntityType as ValidEntityType;\n }\n const boardId = args['board-id'] as string | undefined;\n\n if (!quiet) {\n const flags = [\n dryRun && '(dry run)',\n fullResync && '(full re-sync)',\n entityType && `(${entityType} only)`,\n boardId && `(board ${boardId})`,\n ]\n .filter(Boolean)\n .join(' ');\n console.error(\n `Starting sync for connection ${connectionId}${flags ? ` ${flags}` : ''}...`\n );\n }\n\n const response = await requireAuth(ctx).apiClient.startSyncRun(\n workspace,\n connectionId,\n {\n dryRun,\n resetCheckpoints: fullResync,\n entityType,\n boardId,\n }\n );\n\n if (!response.ok) {\n const text = await response.text();\n console.error(`Sync failed: ${response.status} ${text}`);\n process.exit(1);\n }\n\n await streamSyncRun(response, !quiet);\n },\n },\n {\n path: ['sync', 'runs'],\n description: 'List recent sync runs for a connection',\n args: [\n { name: 'connection-id', description: 'Connection ID', required: true },\n { name: 'limit', description: 'Max runs to return' },\n ],\n handler: async ({ ctx, args, workspace }) => {\n const connectionId = requireNumber(args, 'connection-id');\n const limit = args['limit'] ? Number(args['limit']) : 20;\n const runs = await requireAuth(ctx).apiClient.getSyncRuns(\n workspace,\n connectionId,\n limit\n );\n outputData(runs, ctx, RUN_COLUMNS);\n },\n },\n {\n path: ['sync', 'items'],\n description: 'List items for a specific sync run',\n args: [\n { name: 'connection-id', description: 'Connection ID', required: true },\n { name: 'run-id', description: 'Run ID', required: true },\n ],\n handler: async ({ ctx, args, workspace }) => {\n const connectionId = requireNumber(args, 'connection-id');\n const runId = args['run-id'] as string;\n if (!runId) throw new Error('Missing required argument: --run-id');\n const items = await requireAuth(ctx).apiClient.getSyncRunItems(\n workspace,\n connectionId,\n runId\n );\n outputData(items, ctx, ITEM_COLUMNS);\n },\n },\n {\n path: ['sync', 'config'],\n description: 'Get sync configuration for a connection',\n args: [{ name: 'connection-id', description: 'Connection ID', required: true }],\n handler: async ({ ctx, args, workspace }) => {\n const connectionId = requireNumber(args, 'connection-id');\n const config = await requireAuth(ctx).apiClient.getConnectionSyncConfig(\n workspace,\n connectionId\n );\n console.log(JSON.stringify(config, null, 2));\n },\n },\n {\n path: ['sync', 'update-config'],\n description: 'Update sync configuration for a connection',\n args: [{ name: 'connection-id', description: 'Connection ID', required: true }],\n mutates: true,\n examples: [\n 'sync update-config --connection-id 2 --data \\'{\"syncKey\":\"default\",\"entities\":[...]}\\'',\n 'sync update-config --connection-id 2 --file sync-config.json',\n ],\n handler: async ({ ctx, args, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const connectionId = requireNumber(args, 'connection-id');\n const result = await requireAuth(ctx).apiClient.updateConnectionSyncConfig(\n workspace,\n connectionId,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber, requireString } from '../../lib/types';\nimport { outputData, outputSingle, COL } from '../../lib/output';\nimport { requireAuth } from '../../lib/context';\n\nconst COLUMNS = [\n COL.id(),\n COL.name(),\n { header: 'TYPE', getValue: (item: any) => item.type ?? '' },\n COL.status(),\n];\n\nexport const appConnectionsDomain: DomainDef = {\n name: 'app-connections',\n description: 'Manage platform app connections',\n commands: [\n {\n path: ['app-connections', 'available'],\n description: 'List available app connections',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.listAvailableAppConnections(workspace);\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['app-connections', 'list'],\n description: 'List enabled app connections',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.listAppConnections(workspace);\n outputData(result, ctx, COLUMNS);\n },\n },\n {\n path: ['app-connections', 'enable'],\n description: 'Enable a platform app',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'App connection ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.enablePlatformApp(workspace, {\n app_slug: requireString(args, 'id'),\n } as any);\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['app-connections', 'get'],\n description: 'Get a platform app',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'App connection ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getPlatformApp(\n workspace,\n requireString(args, 'id')\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['app-connections', 'update'],\n description: 'Update a platform app',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'App connection ID', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updatePlatformApp(\n workspace,\n requireString(args, 'id'),\n data as any\n );\n outputSingle(result, ctx, COLUMNS);\n },\n },\n {\n path: ['app-connections', 'delete'],\n description: 'Delete a platform app',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'App connection ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const id = requireString(args, 'id');\n await requireAuth(ctx).apiClient.deletePlatformApp(workspace, id);\n process.stdout.write(`Deleted app connection ${id}\\n`);\n },\n },\n {\n path: ['app-connections', 'sync-config'],\n description: 'Get sync configuration for a connection',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Connection ID (numeric)', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getConnectionSyncConfig(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['app-connections', 'update-sync-config'],\n description: 'Update sync configuration for a connection (pass raw config as --data)',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Connection ID (numeric)', required: true }],\n handler: async ({ ctx, workspace, args, data }) => {\n const result = await requireAuth(ctx).apiClient.updateConnectionSyncConfig(\n workspace,\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef } from '../../lib/types';\nimport { CLIError } from '../../lib/errors';\nimport { outputData, outputSingle } from '../../lib/output';\nimport { requireAuth } from '../../lib/context';\n\nexport const confluenceDomain: DomainDef = {\n name: 'confluence',\n description: 'Confluence knowledge base integration',\n commands: [\n {\n path: ['confluence', 'status'],\n description: 'Get Confluence connection status',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getConfluenceStatus(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['confluence', 'configure'],\n description: 'Configure Confluence OAuth credentials',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const result = await requireAuth(ctx).apiClient.configureConfluence(\n workspace,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['confluence', 'authorize'],\n description: 'Start Confluence OAuth flow',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.startConfluenceOAuth(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['confluence', 'disconnect'],\n description: 'Disconnect Confluence (clear tokens)',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.disconnectConfluence(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['confluence', 'enable'],\n description: 'Enable Confluence connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.enableConfluence(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['confluence', 'disable'],\n description: 'Disable Confluence connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.disableConfluence(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['confluence', 'delete'],\n description: 'Delete Confluence connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n await requireAuth(ctx).apiClient.deleteConfluence(workspace);\n process.stdout.write('Deleted Confluence connection\\n');\n },\n },\n {\n path: ['confluence', 'spaces'],\n description: 'List available Confluence spaces',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.listConfluenceSpaces(workspace);\n outputData(result.results, ctx);\n },\n },\n {\n path: ['confluence', 'pages'],\n description: 'List pages in a Confluence space',\n requiresWorkspace: true,\n args: [{ name: 'space-id', description: 'Confluence space ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const spaceId = args['space-id'];\n if (!spaceId || typeof spaceId !== 'string')\n throw new CLIError('--space-id is required');\n const result = await requireAuth(ctx).apiClient.listConfluencePages(workspace, spaceId);\n outputData(result.results, ctx);\n },\n },\n {\n path: ['confluence', 'sync-config'],\n description: 'Get Confluence sync configuration',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const conns = await requireAuth(ctx).apiClient.listAppConnections(workspace);\n const conn = conns.find((c: any) => c.connectionType === 'confluence_connection');\n if (!conn) throw new CLIError('No Confluence connection found');\n const result = await requireAuth(ctx).apiClient.getConnectionSyncConfig(\n workspace,\n conn.id\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['confluence', 'update-sync-config'],\n description: 'Update Confluence sync configuration',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const conns = await requireAuth(ctx).apiClient.listAppConnections(workspace);\n const conn = conns.find((c: any) => c.connectionType === 'confluence_connection');\n if (!conn) throw new CLIError('No Confluence connection found');\n const result = await requireAuth(ctx).apiClient.updateConnectionSyncConfig(\n workspace,\n conn.id,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../../lib/types';\nimport { crudCommands } from '../../lib/crud';\nimport { outputData, outputSingle, COL } from '../../lib/output';\nimport { requireAuth } from '../../lib/context';\n\nconst COLUMNS = [COL.id(), COL.name(), COL.status()];\n\nexport const discordBotsDomain: DomainDef = {\n name: 'discord-bots',\n description: 'Manage Discord bot integrations',\n commands: [\n ...crudCommands({\n prefix: ['discord-bots'],\n entityName: 'Discord bot',\n listMethod: 'getDiscordBots',\n getMethod: 'getDiscordBot',\n createMethod: 'createDiscordBot',\n updateMethod: 'updateDiscordBot',\n deleteMethod: 'deleteDiscordBot',\n columns: COLUMNS,\n paginationSupport: 'full',\n }),\n {\n path: ['discord-bots', 'register-commands'],\n description: 'Register slash commands for a Discord bot',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Discord bot ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.registerDiscordSlashCommands(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['discord-bots', 'threads'],\n description: 'List Discord threads',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Discord bot ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getDiscordThreads(\n workspace,\n requireNumber(args, 'id')\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['discord-bots', 'guilds'],\n description: 'List Discord guilds',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Discord bot ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getDiscordGuilds(\n workspace,\n requireNumber(args, 'id')\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['discord-bots', 'accounts'],\n description: 'List Discord bot accounts',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Discord bot ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getDiscordBotAccounts(\n workspace,\n requireNumber(args, 'id')\n );\n outputData(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../../lib/types';\nimport type { TableColumn } from '../../lib/output';\nimport { crudCommands } from '../../lib/crud';\nimport { outputSingle, COL } from '../../lib/output';\nimport { requireAuth } from '../../lib/context';\n\nconst COLUMNS: TableColumn<unknown>[] = [\n COL.id(),\n COL.name(),\n { header: 'URL', getValue: (item: any) => item.base_url ?? '' },\n COL.status(),\n];\n\nexport const fhirConnectionsDomain: DomainDef = {\n name: 'fhir-connections',\n description: 'Manage FHIR connections',\n commands: [\n ...crudCommands({\n prefix: ['fhir-connections'],\n entityName: 'FHIR connection',\n listMethod: 'getFhirConnections',\n getMethod: 'getFhirConnection',\n createMethod: 'createFhirConnection',\n updateMethod: 'updateFhirConnection',\n deleteMethod: 'deleteFhirConnection',\n columns: COLUMNS,\n paginationSupport: 'full',\n }),\n {\n path: ['fhir-connections', 'test'],\n description: 'Test a FHIR connection',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'FHIR connection ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.testFhirConnection(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber, requireString } from '../../lib/types';\nimport { CLIError } from '../../lib/errors';\nimport { outputData, outputSingle } from '../../lib/output';\nimport {\n LIST_PAGINATION_ARGS,\n fetchAllPages,\n listResult,\n parsePaginationArgs,\n} from '../../lib/pagination';\nimport { requireAuth } from '../../lib/context';\n\nexport const hubspotDomain: DomainDef = {\n name: 'hubspot',\n description: 'HubSpot CRM integration',\n commands: [\n {\n path: ['hubspot', 'status'],\n description: 'Get HubSpot connection status',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getHubspotStatus(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['hubspot', 'configure'],\n description: 'Configure HubSpot connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const result = await requireAuth(ctx).apiClient.configureHubspot(\n workspace,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['hubspot', 'authorize'],\n description: 'Start HubSpot OAuth flow',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.startHubspotOAuth(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['hubspot', 'disconnect'],\n description: 'Disconnect HubSpot',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.disconnectHubspot(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['hubspot', 'enable'],\n description: 'Enable HubSpot connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.enableHubspot(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['hubspot', 'disable'],\n description: 'Disable HubSpot connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.disableHubspot(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['hubspot', 'delete'],\n description: 'Delete HubSpot connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n await requireAuth(ctx).apiClient.deleteHubspot(workspace);\n process.stdout.write('Deleted HubSpot connection\\n');\n },\n },\n {\n path: ['hubspot', 'sync-config'],\n description: 'Get HubSpot sync configuration',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n // Find hubspot connection ID\n const conns = await requireAuth(ctx).apiClient.listAppConnections(workspace);\n const conn = conns.find((c: any) => c.connectionType === 'hubspot_connection');\n if (!conn) throw new CLIError('No HubSpot connection found');\n const result = await requireAuth(ctx).apiClient.getConnectionSyncConfig(\n workspace,\n conn.id\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['hubspot', 'update-sync-config'],\n description: 'Update HubSpot sync configuration',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const conns = await requireAuth(ctx).apiClient.listAppConnections(workspace);\n const conn = conns.find((c: any) => c.connectionType === 'hubspot_connection');\n if (!conn) throw new CLIError('No HubSpot connection found');\n const result = await requireAuth(ctx).apiClient.updateConnectionSyncConfig(\n workspace,\n conn.id,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['hubspot', 'reconciliation'],\n description: 'Find matching HubSpot contacts for workspace members',\n requiresWorkspace: true,\n args: [\n { name: 'offset', description: 'Pagination offset' },\n { name: 'limit', description: 'Max results' },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const offset = args['offset'] ? Number(args['offset']) : undefined;\n const limit = args['limit'] ? Number(args['limit']) : undefined;\n const result = await requireAuth(ctx).apiClient.getHubspotReconciliationMatches(\n workspace,\n {\n offset,\n limit,\n }\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['hubspot', 'linked-members'],\n description: 'List members linked to HubSpot contacts',\n requiresWorkspace: true,\n args: LIST_PAGINATION_ARGS,\n handler: async ({ ctx, workspace, args }) => {\n const pag = parsePaginationArgs(args);\n if (pag.all) {\n const allItems = await fetchAllPages(({ page, pageSize }) =>\n requireAuth(ctx).apiClient.getLinkedHubspotMembers(workspace, { page, pageSize })\n );\n outputData(allItems, ctx);\n return;\n }\n const options: { page?: number; pageSize?: number } = {};\n if (pag.page) options.page = pag.page;\n if (pag.pageSize) options.pageSize = pag.pageSize;\n const result = await requireAuth(ctx).apiClient.getLinkedHubspotMembers(\n workspace,\n options\n );\n outputData(listResult(result, true), ctx);\n },\n },\n {\n path: ['hubspot', 'link-member'],\n description: 'Link a member to a HubSpot contact',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'member-id', description: 'Member ID', required: true },\n { name: 'contact-id', description: 'HubSpot contact ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.linkMemberToHubspot(workspace, {\n memberId: requireNumber(args, 'member-id'),\n hubspotRecordId: requireString(args, 'contact-id'),\n });\n outputSingle(result, ctx);\n },\n },\n {\n path: ['hubspot', 'unlink-member'],\n description: 'Unlink a member from HubSpot',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'member-id', description: 'Member ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.unlinkMemberFromHubspot(\n workspace,\n requireNumber(args, 'member-id')\n );\n process.stdout.write('Unlinked member from HubSpot\\n');\n },\n },\n {\n path: ['hubspot', 'contact-properties'],\n description: 'List available HubSpot contact properties',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getHubspotContactProperties(workspace);\n outputData(result, ctx);\n },\n },\n {\n path: ['hubspot', 'managed-rules'],\n description: 'List HubSpot managed sync rules and their status',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getHubspotManagedRules(workspace);\n outputData(result, ctx);\n },\n },\n {\n path: ['hubspot', 'transform-presets'],\n description: 'List available HubSpot field transform presets',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getHubspotTransformPresets(workspace);\n outputData(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber, requireString } from '../../lib/types';\nimport { CLIError } from '../../lib/errors';\nimport { outputData, outputSingle } from '../../lib/output';\nimport {\n LIST_PAGINATION_ARGS,\n fetchAllPages,\n listResult,\n parsePaginationArgs,\n} from '../../lib/pagination';\nimport { requireAuth } from '../../lib/context';\n\nexport const mondayDomain: DomainDef = {\n name: 'monday',\n description: 'Monday.com integration',\n commands: [\n {\n path: ['monday', 'status'],\n description: 'Get Monday.com connection status',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getMondayConnectionStatus(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'authorize'],\n description: 'Get Monday.com OAuth authorization URL',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.authorizeMondayConnection(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'configure'],\n description: 'Configure Monday.com connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const result = await requireAuth(ctx).apiClient.configureMondayConnection(\n workspace,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'disconnect'],\n description: 'Disconnect Monday.com',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.disconnectMondayConnection(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'enable'],\n description: 'Enable Monday.com connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.enableMondayConnection(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'disable'],\n description: 'Disable Monday.com connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.disableMondayConnection(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'delete'],\n description: 'Delete Monday.com connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n await requireAuth(ctx).apiClient.deleteMondayConnection(workspace);\n process.stdout.write('Deleted Monday.com connection\\n');\n },\n },\n {\n path: ['monday', 'sync-config'],\n description: 'Get Monday.com sync configuration',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getMondaySyncConfig(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'update-sync-config'],\n description: 'Update Monday.com sync configuration',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n // Accept both the raw config and the full GET response shape\n // ({ syncConfig: {...} }). The API client wraps in { syncConfig },\n // so unwrap here to avoid double-wrapping.\n const syncConfig = (data as any).syncConfig ?? data;\n const result = await requireAuth(ctx).apiClient.updateMondaySyncConfig(\n workspace,\n syncConfig as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'reconciliation'],\n description: 'Find matching Monday.com items for workspace members',\n requiresWorkspace: true,\n args: [\n { name: 'offset', description: 'Pagination offset' },\n { name: 'limit', description: 'Max results' },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const offset = args['offset'] ? Number(args['offset']) : undefined;\n const limit = args['limit'] ? Number(args['limit']) : undefined;\n const result = await requireAuth(ctx).apiClient.getMondayReconciliationMatches(\n workspace,\n {\n offset,\n limit,\n }\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['monday', 'linked-members'],\n description: 'List members linked to Monday.com items',\n requiresWorkspace: true,\n args: [{ name: 'board-id', description: 'Board ID' }, ...LIST_PAGINATION_ARGS],\n handler: async ({ ctx, workspace, args }) => {\n const boardId = (args['board-id'] as string) ?? undefined;\n const pag = parsePaginationArgs(args);\n if (pag.all) {\n const allItems = await fetchAllPages(({ page, pageSize }) =>\n requireAuth(ctx).apiClient.getLinkedMondayMembers(workspace, {\n board_id: boardId,\n page,\n pageSize,\n })\n );\n outputData(allItems, ctx);\n return;\n }\n const options: { board_id?: string; page?: number; pageSize?: number } = {};\n if (boardId) options.board_id = boardId;\n if (pag.page) options.page = pag.page;\n if (pag.pageSize) options.pageSize = pag.pageSize;\n const result = await requireAuth(ctx).apiClient.getLinkedMondayMembers(\n workspace,\n options\n );\n outputData(listResult(result, true), ctx);\n },\n },\n {\n path: ['monday', 'link-member'],\n description: 'Link a member to a Monday.com item',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'member-id', description: 'Member ID', required: true },\n { name: 'item-id', description: 'Monday item ID', required: true },\n { name: 'board-id', description: 'Monday board ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.linkMemberToMonday(workspace, {\n memberId: requireNumber(args, 'member-id'),\n mondayItemId: requireString(args, 'item-id'),\n boardId: requireString(args, 'board-id'),\n });\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'unlink-member'],\n description: 'Unlink a member from Monday.com',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'member-id', description: 'Member ID', required: true },\n { name: 'board-id', description: 'Monday board ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.unlinkMemberFromMonday(\n workspace,\n requireNumber(args, 'member-id'),\n requireString(args, 'board-id')\n );\n process.stdout.write('Unlinked member from Monday.com\\n');\n },\n },\n {\n path: ['monday', 'boards'],\n description: 'List Monday.com boards',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getMondayBoards(workspace);\n outputData(result, ctx);\n },\n },\n {\n path: ['monday', 'board-columns'],\n description: 'List columns for a Monday.com board',\n requiresWorkspace: true,\n args: [{ name: 'board-id', description: 'Board ID', required: true }],\n handler: async ({ ctx, args, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getMondayBoardColumns(\n workspace,\n requireString(args, 'board-id')\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['monday', 'board-groups'],\n description: 'List groups for a Monday.com board',\n requiresWorkspace: true,\n args: [{ name: 'board-id', description: 'Board ID', required: true }],\n handler: async ({ ctx, args, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getMondayBoardGroups(\n workspace,\n requireString(args, 'board-id')\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['monday', 'webhook-get'],\n description: 'Get a Monday.com webhook',\n requiresWorkspace: true,\n args: [\n { name: 'board-id', description: 'Board ID', required: true },\n { name: 'id', description: 'Webhook ID', required: true },\n ],\n handler: async ({ ctx, args, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getMondayWebhook(\n workspace,\n requireString(args, 'board-id'),\n requireString(args, 'id')\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'webhook-create'],\n description: 'Create a Monday.com webhook',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, data, workspace }) => {\n const result = await requireAuth(ctx).apiClient.createMondayWebhook(\n workspace,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['monday', 'webhook-delete'],\n description: 'Delete a Monday.com webhook',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Webhook ID', required: true }],\n handler: async ({ ctx, args, workspace }) => {\n const id = requireString(args, 'id');\n await requireAuth(ctx).apiClient.deleteMondayWebhook(workspace, id);\n process.stdout.write(`Deleted Monday webhook ${id}\\n`);\n },\n },\n {\n path: ['monday', 'user-info'],\n description: 'Get current Monday.com user info',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getMondayCurrentUserInfo(workspace);\n outputSingle(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber, requireString } from '../../lib/types';\nimport { CLIError } from '../../lib/errors';\nimport { outputData, outputSingle } from '../../lib/output';\nimport {\n LIST_PAGINATION_ARGS,\n fetchAllPages,\n listResult,\n parsePaginationArgs,\n} from '../../lib/pagination';\nimport { requireAuth } from '../../lib/context';\n\nexport const salesforceDomain: DomainDef = {\n name: 'salesforce',\n description: 'Salesforce CRM integration',\n commands: [\n {\n path: ['salesforce', 'status'],\n description: 'Get Salesforce connection status',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getSalesforceStatus(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['salesforce', 'configure'],\n description: 'Configure Salesforce connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const result = await requireAuth(ctx).apiClient.configureSalesforce(\n workspace,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['salesforce', 'authorize'],\n description: 'Start Salesforce OAuth flow',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.startSalesforceOAuth(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['salesforce', 'disconnect'],\n description: 'Disconnect Salesforce',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.disconnectSalesforce(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['salesforce', 'enable'],\n description: 'Enable Salesforce connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.enableSalesforce(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['salesforce', 'disable'],\n description: 'Disable Salesforce connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.disableSalesforce(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['salesforce', 'delete'],\n description: 'Delete Salesforce connection',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n await requireAuth(ctx).apiClient.deleteSalesforce(workspace);\n process.stdout.write('Deleted Salesforce connection\\n');\n },\n },\n {\n path: ['salesforce', 'sync-config'],\n description: 'Get Salesforce sync configuration',\n requiresWorkspace: true,\n handler: async ({ ctx, workspace }) => {\n const result = await requireAuth(ctx).apiClient.getSalesforceSyncConfig(workspace);\n outputSingle(result, ctx);\n },\n },\n {\n path: ['salesforce', 'update-sync-config'],\n description: 'Update Salesforce sync configuration',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const result = await requireAuth(ctx).apiClient.updateSalesforceSyncConfig(\n workspace,\n data as any\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['salesforce', 'reconciliation'],\n description: 'Find matching Salesforce records for workspace members',\n requiresWorkspace: true,\n args: [\n { name: 'offset', description: 'Pagination offset' },\n { name: 'limit', description: 'Max results' },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const offset = args['offset'] ? Number(args['offset']) : undefined;\n const limit = args['limit'] ? Number(args['limit']) : undefined;\n const result = await requireAuth(ctx).apiClient.getSalesforceReconciliationMatches(\n workspace,\n {\n offset,\n limit,\n }\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['salesforce', 'linked-members'],\n description: 'List members linked to Salesforce records',\n requiresWorkspace: true,\n args: LIST_PAGINATION_ARGS,\n handler: async ({ ctx, workspace, args }) => {\n const pag = parsePaginationArgs(args);\n if (pag.all) {\n const allItems = await fetchAllPages(({ page, pageSize }) =>\n requireAuth(ctx).apiClient.getLinkedSalesforceMembers(workspace, {\n page,\n pageSize,\n })\n );\n outputData(allItems, ctx);\n return;\n }\n const options: { page?: number; pageSize?: number } = {};\n if (pag.page) options.page = pag.page;\n if (pag.pageSize) options.pageSize = pag.pageSize;\n const result = await requireAuth(ctx).apiClient.getLinkedSalesforceMembers(\n workspace,\n options\n );\n outputData(listResult(result, true), ctx);\n },\n },\n {\n path: ['salesforce', 'link-member'],\n description: 'Link a member to a Salesforce record',\n mutates: true,\n requiresWorkspace: true,\n args: [\n { name: 'member-id', description: 'Member ID', required: true },\n { name: 'record-id', description: 'Salesforce record ID', required: true },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.linkMemberToSalesforce(workspace, {\n memberId: requireNumber(args, 'member-id'),\n salesforceRecordId: requireString(args, 'record-id'),\n });\n outputSingle(result, ctx);\n },\n },\n {\n path: ['salesforce', 'unlink-member'],\n description: 'Unlink a member from Salesforce',\n mutates: true,\n requiresWorkspace: true,\n args: [{ name: 'member-id', description: 'Member ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n await requireAuth(ctx).apiClient.unlinkMemberFromSalesforce(\n workspace,\n requireNumber(args, 'member-id')\n );\n process.stdout.write('Unlinked member from Salesforce\\n');\n },\n },\n {\n path: ['salesforce', 'describe'],\n description: 'Describe a Salesforce object schema',\n requiresWorkspace: true,\n args: [\n {\n name: 'object-type',\n description: 'Salesforce object type (e.g., Contact)',\n required: true,\n },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.describeSalesforceObject(\n workspace,\n requireString(args, 'object-type')\n );\n outputSingle(result, ctx);\n },\n },\n {\n path: ['salesforce', 'search'],\n description: 'Search Salesforce records',\n requiresWorkspace: true,\n args: [\n { name: 'query', description: 'Search query', required: true },\n { name: 'object-type', description: 'Salesforce object type' },\n ],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.searchSalesforceRecords(workspace, {\n query: requireString(args, 'query'),\n objectType: (args['object-type'] as string) ?? undefined,\n } as any);\n outputData(result, ctx);\n },\n },\n ],\n};\n","import { type DomainDef, requireNumber } from '../../lib/types';\nimport { crudCommands } from '../../lib/crud';\nimport { CLIError } from '../../lib/errors';\nimport { outputData, outputSingle, COL } from '../../lib/output';\nimport { requireAuth } from '../../lib/context';\n\nconst COLUMNS = [COL.id(), COL.name(), COL.status()];\n\n/** Inject computed Slack integration URLs into the response object. */\nfunction addSlackUrls(\n data: Record<string, unknown>,\n apiUrl: string,\n workspaceUuid: string\n): Record<string, unknown> {\n const base = `${apiUrl}/api/v2/w/${workspaceUuid}/app-connections/slack`;\n return {\n ...data,\n _urls: {\n eventsEndpoint: `${base}/routines`,\n oauthBotCallback: `${base}/oauth/callback`,\n oauthUserCallback: `${base}/oauth/user/callback`,\n oauthInstall: `${base}/oauth/install?app_uuid=${data.uuid ?? ''}`,\n },\n };\n}\n\nexport const slackAppsDomain: DomainDef = {\n name: 'slack-apps',\n description: 'Manage Slack app integrations',\n commands: [\n // List + delete from CRUD; get/create/update are custom to inject URLs\n ...crudCommands({\n prefix: ['slack-apps'],\n entityName: 'Slack app',\n listMethod: 'getSlackApps',\n deleteMethod: 'deleteSlackApp',\n columns: COLUMNS,\n paginationSupport: 'full',\n }),\n {\n path: ['slack-apps', 'get'],\n description: 'Get a Slack app by ID',\n args: [{ name: 'id', description: 'Slack app ID', required: true }],\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getSlackApp(\n workspace,\n requireNumber(args, 'id')\n );\n outputSingle(addSlackUrls(result as any, ctx.envConfig.apiUrl, workspace), ctx);\n },\n },\n {\n path: ['slack-apps', 'create'],\n description: 'Create a Slack app',\n mutates: true,\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const result = await requireAuth(ctx).apiClient.createSlackApp(workspace, data as any);\n outputSingle(addSlackUrls(result as any, ctx.envConfig.apiUrl, workspace), ctx);\n },\n },\n {\n path: ['slack-apps', 'update'],\n description: 'Update a Slack app',\n mutates: true,\n args: [{ name: 'id', description: 'Slack app ID', required: true }],\n requiresWorkspace: true,\n handler: async ({ ctx, workspace, args, data }) => {\n if (!data) throw new CLIError('JSON data required (--data, --file, or stdin)');\n const result = await requireAuth(ctx).apiClient.updateSlackApp(\n workspace,\n requireNumber(args, 'id'),\n data as any\n );\n outputSingle(addSlackUrls(result as any, ctx.envConfig.apiUrl, workspace), ctx);\n },\n },\n {\n path: ['slack-apps', 'threads'],\n description: 'List Slack threads',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Slack app ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getSlackThreads(\n workspace,\n requireNumber(args, 'id')\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['slack-apps', 'installations'],\n description: 'List Slack installations',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Slack app ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getSlackInstallations(\n workspace,\n requireNumber(args, 'id')\n );\n outputData(result, ctx);\n },\n },\n {\n path: ['slack-apps', 'accounts'],\n description: 'List Slack app accounts',\n requiresWorkspace: true,\n args: [{ name: 'id', description: 'Slack app ID', required: true }],\n handler: async ({ ctx, workspace, args }) => {\n const result = await requireAuth(ctx).apiClient.getSlackAppAccounts(\n workspace,\n requireNumber(args, 'id')\n );\n outputData(result, ctx);\n },\n },\n ],\n};\n","import type { CommandRegistry } from '../lib/registry';\n\n// Core domains — Phase 2a\nimport { agentTasksDomain } from './agent-tasks';\nimport { agentsDomain } from './agents';\nimport { chatsDomain } from './chats';\nimport { membersDomain } from './members';\nimport { tasksDomain } from './tasks';\nimport { workflowsDomain } from './workflows';\nimport { workflowVersionsDomain } from './workflow-versions';\nimport { workspacesDomain } from './workspaces';\n\n// Core domains — Phase 2b\nimport { assignmentsDomain } from './assignments';\nimport { calendarsDomain } from './calendars';\nimport { dataTypesDomain } from './data-types';\nimport { eventsDomain } from './events';\nimport { filesDomain } from './files';\nimport { journeysDomain } from './journeys';\nimport { personasDomain } from './personas';\nimport { qualificationsDomain } from './qualifications';\nimport { sitesDomain } from './sites';\n\n// Secondary domains — Phase 3\nimport { accessGrantsDomain } from './access-grants';\nimport { aiModelsDomain } from './ai-models';\nimport { apiKeysDomain } from './api-keys';\nimport { appsDomain } from './apps';\nimport { authManageDomain } from './auth-manage';\nimport { billingPortalDomain } from './billing-portal';\nimport { conciergeDomain } from './concierge';\nimport { customToolkitsDomain } from './custom-toolkits';\nimport { featuresDomain } from './features';\nimport { inboxesDomain } from './inboxes';\nimport { mcpServersDomain } from './mcp-servers';\nimport { memberMemoriesDomain } from './member-memories';\nimport { milestonesDomain } from './milestones';\nimport { notificationRulesDomain } from './notification-rules';\nimport { oauthDomain } from './oauth';\nimport { operatorGroupsDomain } from './operator-groups';\nimport { orgDomain } from './org';\nimport { orgPhoneNumbersDomain } from './org-phone-numbers';\nimport { phoneNumbersDomain } from './phone-numbers';\nimport { pronunciationsDomain } from './pronunciations';\nimport { reportsDomain } from './reports';\nimport { subscriptionsDomain } from './subscriptions';\nimport { promptsDomain } from './prompts';\nimport { supervisorsDomain } from './supervisors';\nimport { syncDomain } from './sync';\n\n// Integration domains — Phase 4\nimport { appConnectionsDomain } from './integrations/app-connections';\nimport { confluenceDomain } from './integrations/confluence';\nimport { discordBotsDomain } from './integrations/discord-bots';\nimport { fhirConnectionsDomain } from './integrations/fhir-connections';\nimport { hubspotDomain } from './integrations/hubspot';\nimport { mondayDomain } from './integrations/monday';\nimport { salesforceDomain } from './integrations/salesforce';\nimport { slackAppsDomain } from './integrations/slack-apps';\n\n/**\n * Register the full set of public CLI domains on a registry.\n *\n * This file intentionally does NOT import any admin or infrastructure domains\n * (deploy, rollback, railgun, admin/*). Those live in `@gravity-rail/gr-cli`\n * and are layered on top via its own `registerAllDomains`.\n */\nexport function registerPublicDomains(registry: CommandRegistry): void {\n // Core\n registry.register(tasksDomain);\n registry.register(chatsDomain);\n registry.register(membersDomain);\n registry.register(workspacesDomain);\n registry.register(workflowsDomain);\n registry.register(workflowVersionsDomain);\n registry.register(agentsDomain);\n registry.register(agentTasksDomain);\n registry.register(assignmentsDomain);\n registry.register(dataTypesDomain);\n registry.register(sitesDomain);\n registry.register(filesDomain);\n registry.register(eventsDomain);\n registry.register(calendarsDomain);\n registry.register(qualificationsDomain);\n registry.register(personasDomain);\n registry.register(journeysDomain);\n\n // Secondary\n registry.register(phoneNumbersDomain);\n registry.register(inboxesDomain);\n registry.register(operatorGroupsDomain);\n registry.register(accessGrantsDomain);\n registry.register(notificationRulesDomain);\n registry.register(supervisorsDomain);\n registry.register(promptsDomain);\n registry.register(milestonesDomain);\n registry.register(customToolkitsDomain);\n registry.register(mcpServersDomain);\n registry.register(apiKeysDomain);\n registry.register(subscriptionsDomain);\n registry.register(reportsDomain);\n registry.register(aiModelsDomain);\n registry.register(featuresDomain);\n registry.register(pronunciationsDomain);\n registry.register(orgDomain);\n registry.register(orgPhoneNumbersDomain);\n registry.register(authManageDomain);\n registry.register(appsDomain);\n registry.register(oauthDomain);\n registry.register(conciergeDomain);\n registry.register(memberMemoriesDomain);\n registry.register(syncDomain);\n\n // Integrations\n registry.register(confluenceDomain);\n registry.register(discordBotsDomain);\n registry.register(slackAppsDomain);\n registry.register(fhirConnectionsDomain);\n registry.register(appConnectionsDomain);\n registry.register(hubspotDomain);\n registry.register(mondayDomain);\n registry.register(salesforceDomain);\n\n // Billing portal (non-admin)\n registry.register(billingPortalDomain);\n}\n","import { execFile } from 'child_process';\nimport { stderr } from '../lib/output';\nimport type { AuthenticatedContext } from '../lib/context';\n\n/**\n * Open an authenticated browser session using the CLI's existing credentials.\n *\n * Flow:\n * 1. Get the current account's email from the CLI session\n * 2. Request a magic link via the API (token returned directly since caller is authenticated)\n * 3. Open the magic link URL in the default browser (or print it with --no-open)\n */\nexport async function authBrowserCommand(\n ctx: AuthenticatedContext,\n args: Record<string, unknown>\n): Promise<void> {\n const noOpen = Boolean(args['no-open']);\n\n // Get current account email\n const account = await ctx.apiClient.getUserAccount();\n if (!account.email) {\n process.stderr.write('Error: No email associated with current account\\n');\n process.exit(1);\n }\n\n // Request magic link — since we're authenticated, the API returns the token directly\n const response = await ctx.apiClient.requestMagicLink(account.email);\n\n if (!response.success || !response.magicLinkUrl) {\n process.stderr.write('Error: Failed to create magic link\\n');\n process.exit(1);\n }\n\n const url = response.magicLinkUrl;\n\n if (noOpen) {\n // Just print the URL to stdout for scripting/manual use\n process.stdout.write(url + '\\n');\n return;\n }\n\n // Open in default browser\n stderr(`Opening browser for ${account.email} (${ctx.env})...`);\n openUrl(url);\n stderr('Browser opened. Link expires in 15 minutes.');\n}\n\n/** Open a URL in the default browser (cross-platform). Uses execFile to avoid shell injection. */\nfunction openUrl(url: string): void {\n const platform = process.platform;\n\n let command: string;\n let args: string[];\n\n if (platform === 'darwin') {\n command = 'open';\n args = [url];\n } else if (platform === 'win32') {\n command = 'cmd.exe';\n args = ['/c', 'start', '', url];\n } else {\n command = 'xdg-open';\n args = [url];\n }\n\n execFile(command, args, (err) => {\n if (err) {\n // Non-fatal — user can copy the URL from --no-open output\n process.stderr.write('Warning: Could not open browser automatically\\n');\n }\n });\n}\n","/**\n * Shared chat session infrastructure.\n *\n * Defines the ChatSession abstraction consumed by all chat modes (text, realtime, voice).\n * Entry points (manage, chat, concierge) construct a ChatSession and pass it here.\n */\n\nimport {\n AGUIClient,\n clearScreen,\n getErrorMessage,\n getTextDelta,\n printMessage,\n type AGUIChatMessage,\n} from '../cli-utils';\nimport * as readline from 'readline';\nimport { CLIError } from './errors';\nimport type { AuthenticatedContext } from './context';\nimport { RealtimeClient } from './realtime-client';\nimport { ChatTUI, type ChatItem } from './chat-tui';\nimport {\n checkSoxAvailable,\n listInputDevices,\n listOutputDevices,\n selectDevice,\n MicCapture,\n AudioPlayer,\n} from './audio';\n\n// ─── ChatSession abstraction ─────────────────────────────────────────────────\n\n/** Everything a chat mode needs — constructed differently per entry point. */\nexport interface ChatSession {\n ctx: AuthenticatedContext;\n chatId: number;\n chatUuid: string;\n chatTitle: string;\n aguiEndpointUrl: string;\n wsUrl: string;\n loadMessages: () => Promise<any[]>;\n /** Display label: \"Workspace Manager\", \"Concierge\", etc. */\n label: string;\n /** AGUI request model field. Undefined = omit from body. */\n model?: string;\n}\n\n// ─── Mode dispatcher ─────────────────────────────────────────────────────────\n\nexport async function runChatSession(\n session: ChatSession,\n args: Record<string, any>\n): Promise<void> {\n const debug = !!args.debug;\n const isVoice = !!args.voice;\n const isRealtime = !!args.realtime || isVoice;\n const message = typeof args.message === 'string' ? args.message : undefined;\n const autoApprove = !!args['auto-approve'];\n\n if (args['list-devices']) {\n await listAudioDevices();\n return;\n }\n\n if (!message && !process.stdin.isTTY) {\n throw new CLIError(\n 'Interactive mode requires a TTY. Use --message for non-interactive mode.'\n );\n }\n\n if (message) {\n await singleTurnChatSession(session, message, debug, autoApprove);\n } else if (isVoice) {\n await voiceChatSession(session, vadMode(args), args, debug);\n } else if (isRealtime) {\n await realtimeChatSession(session, vadMode(args), debug);\n } else {\n await interactiveChatSession(session, debug);\n }\n}\n\nexport function vadMode(args: Record<string, any>): 'client' | 'server' {\n return (typeof args.vad === 'string' ? args.vad : 'server') as 'client' | 'server';\n}\n\n// ─── Single-turn text mode (SSE) ────────────────────────────────────────────\n\nasync function singleTurnChatSession(\n session: ChatSession,\n message: string,\n debug: boolean,\n autoApprove: boolean = false\n): Promise<void> {\n const aguiClient = new AGUIClient({\n baseUrl: session.ctx.envConfig.apiUrl,\n endpointUrl: session.aguiEndpointUrl,\n accessToken: session.ctx.accessToken,\n debug,\n model: session.model,\n });\n\n // Stream all SSE events. The AGUI stream includes tool calls, tool\n // results, and text content across all inference turns. We accumulate\n // text and show tool call progress, then poll for final text if the\n // stream ended mid-turn (e.g. after tool calls with no final text).\n let streamText = '';\n let hasToolCalls = false;\n let eventCount = 0;\n\n // Optionally log raw events to a file for debugging\n const logFile = process.env.GR_SSE_LOG;\n const fs = logFile ? await import('fs') : null;\n const logStream = logFile && fs ? fs.createWriteStream(logFile, { flags: 'a' }) : null;\n\n await aguiClient.sendMessage(\n [{ role: 'user', content: message }],\n (event) => {\n eventCount++;\n if (logStream) logStream.write(JSON.stringify(event) + '\\n');\n\n const delta = getTextDelta(event);\n if (delta) streamText += delta;\n\n const type = event.type?.toLowerCase() ?? '';\n if (type === 'tool_call_start') {\n hasToolCalls = true;\n const name = (event as Record<string, any>).name ?? '';\n process.stderr.write(` [${name}]\\n`);\n }\n\n const errorMsg = getErrorMessage(event);\n if (errorMsg) process.stderr.write(`\\x1B[31mError: ${errorMsg}\\x1B[0m\\n`);\n },\n { autoApprove }\n );\n\n if (logStream) logStream.end();\n if (debug) process.stderr.write(` (${eventCount} SSE events)\\n`);\n\n // If we got text from the stream, print it\n if (streamText) {\n process.stdout.write(`\\x1B[32mAssistant:\\x1B[0m ${streamText}\\n`);\n return;\n }\n\n // No text in stream (tool calls only) — poll for the final response\n if (hasToolCalls) {\n process.stderr.write(' (waiting for completion...)\\n');\n const maxWaitMs = 180_000;\n const pollIntervalMs = 2000;\n const startTime = Date.now();\n let finalText = '';\n\n while (Date.now() - startTime < maxWaitMs) {\n await new Promise((r) => setTimeout(r, pollIntervalMs));\n try {\n const msgs = await session.loadMessages();\n // Find the last assistant message with actual text\n for (let i = msgs.length - 1; i >= 0; i--) {\n const m = msgs[i];\n if (m.role === 'assistant' && m.content && !m.tool_calls?.length) {\n finalText = m.content;\n break;\n }\n }\n if (finalText) break;\n } catch {\n // keep polling\n }\n }\n\n process.stdout.write(`\\x1B[32mAssistant:\\x1B[0m ${finalText || '(no text response)'}\\n`);\n } else {\n process.stdout.write(`\\x1B[32mAssistant:\\x1B[0m (no response)\\n`);\n }\n}\n\n// ─── Interactive text mode (SSE) ─────────────────────────────────────────────\n\nasync function interactiveChatSession(session: ChatSession, debug: boolean): Promise<void> {\n const aguiClient = new AGUIClient({\n baseUrl: session.ctx.envConfig.apiUrl,\n endpointUrl: session.aguiEndpointUrl,\n accessToken: session.ctx.accessToken,\n debug,\n model: session.model,\n });\n\n clearScreen();\n console.log('='.repeat(60));\n console.log(session.label);\n console.log('='.repeat(60));\n console.log(`Chat: ${session.chatTitle}`);\n console.log(\"Type your message and press Enter. Type 'exit' or Ctrl+C to quit.\");\n console.log('='.repeat(60));\n console.log('');\n\n const existingMessages = await session.loadMessages();\n if (existingMessages.length > 0) {\n console.log('\\x1B[90m--- Previous messages ---\\x1B[0m\\n');\n for (const msg of existingMessages.slice(-10)) {\n const text = typeof msg.content === 'string' ? msg.content : '';\n if (text && text.trim()) {\n printMessage(text, msg.role as 'user' | 'assistant' | 'system');\n }\n }\n console.log('\\x1B[90m--- End of history ---\\x1B[0m\\n');\n }\n\n const conversationMessages: AGUIChatMessage[] = [];\n for (const msg of existingMessages.slice(-10)) {\n const text = typeof msg.content === 'string' ? msg.content : '';\n if (text && text.trim() && (msg.role === 'user' || msg.role === 'assistant')) {\n conversationMessages.push({ role: msg.role, content: text });\n }\n }\n\n const rl = readline.createInterface({ input: process.stdin, output: process.stdout });\n\n return new Promise<void>((resolve) => {\n const prompt = (): void => {\n rl.question('\\x1B[34mYou:\\x1B[0m ', async (input) => {\n const trimmed = input.trim();\n if (!trimmed) {\n prompt();\n return;\n }\n if (trimmed.toLowerCase() === 'exit' || trimmed.toLowerCase() === 'quit') {\n console.log('\\nGoodbye!');\n rl.close();\n return;\n }\n\n conversationMessages.push({ role: 'user', content: trimmed });\n process.stdout.write('\\n\\x1B[32mAssistant:\\x1B[0m ');\n let assistantContent = '';\n\n try {\n await aguiClient.sendMessage(conversationMessages, (event) => {\n const delta = getTextDelta(event);\n if (delta) {\n process.stdout.write(delta);\n assistantContent += delta;\n }\n const errorMsg = getErrorMessage(event);\n if (errorMsg) console.log(`\\n\\x1B[31mError: ${errorMsg}\\x1B[0m`);\n });\n if (assistantContent)\n conversationMessages.push({ role: 'assistant', content: assistantContent });\n console.log('\\n');\n } catch (error) {\n console.log(\n `\\n\\x1B[31mError: ${error instanceof Error ? error.message : error}\\x1B[0m\\n`\n );\n }\n\n prompt();\n });\n };\n\n rl.on('close', () => {\n console.log('\\nGoodbye!');\n resolve();\n });\n prompt();\n });\n}\n\n// ─── Shared helpers for realtime modes ───────────────────────────────────────\n\nexport function buildHistory(messages: any[]): ChatItem[] {\n const history: ChatItem[] = [];\n for (const msg of messages.slice(-30)) {\n const text = typeof msg.content === 'string' ? msg.content : '';\n if (msg.role === 'user' || msg.role === 'assistant') {\n if (text.trim()) {\n history.push({ role: msg.role, content: text });\n }\n if (msg.role === 'assistant' && msg.tool_calls) {\n for (const tc of msg.tool_calls) {\n history.push({\n kind: 'tool_call',\n id: tc.id,\n name: tc.function.name,\n args: tc.function.arguments || '',\n done: true,\n });\n }\n }\n } else if (msg.role === 'tool') {\n const toolName = (msg as any).name || 'tool';\n history.push({\n kind: 'tool_result',\n toolCallId: (msg as any).tool_call_id || '',\n toolName,\n content: text,\n });\n }\n }\n return history;\n}\n\nexport function wireRealtimeEvents(client: RealtimeClient, tui: ChatTUI): void {\n client.on('text_start', () => tui.streamStart());\n client.on('text_delta', (data: any) => tui.streamDelta(data.delta));\n client.on('text_end', () => tui.streamEnd());\n\n client.on('tool_call_start', (data: any) => {\n tui.toolCallStart(data.toolCallId, data.toolCallName);\n });\n client.on('tool_call_args', (data: any) => {\n tui.toolCallArgs(data.toolCallId, data.delta);\n });\n client.on('tool_call_end', (data: any) => {\n tui.toolCallEnd(data.toolCallId);\n });\n client.on('tool_call_result', (data: any) => {\n const toolName = tui.findToolCallName(data.toolCallId);\n const content = typeof data.result === 'string' ? data.result : JSON.stringify(data.result);\n tui.toolCallResult(data.toolCallId, toolName, content);\n });\n\n client.on('run_error', (data: any) => {\n tui.showError(data.message);\n });\n\n client.on('error', (err: Error) => {\n tui.showError(`Connection: ${err.message}`);\n });\n\n client.on('ws_recv', (msg: any) => tui.logDebug('in', msg));\n client.on('ws_send', (msg: any) => tui.logDebug('out', msg));\n}\n\n// ─── Realtime text mode (WebSocket + TUI) ────────────────────────────────────\n\nasync function realtimeChatSession(\n session: ChatSession,\n vad: 'client' | 'server',\n debug: boolean\n): Promise<void> {\n const client = new RealtimeClient({\n url: session.wsUrl,\n token: session.ctx.accessToken,\n chatId: session.chatId,\n vadMode: vad,\n debug,\n });\n\n process.stderr.write(`Connecting to ${session.label.toLowerCase()}...\\n`);\n\n try {\n await client.connect();\n } catch (err) {\n throw new CLIError(`Failed to connect: ${err instanceof Error ? err.message : err}`);\n }\n\n const existingMessages = await session.loadMessages();\n const history = buildHistory(existingMessages);\n\n const tui = new ChatTUI({\n onSend: (text) => {\n client.sendTextMessage(text);\n },\n onExit: () => {\n client.close();\n },\n debug,\n env: session.ctx.env,\n });\n\n wireRealtimeEvents(client, tui);\n\n client.on('closed', () => {\n tui.stop();\n console.log('Disconnected.');\n });\n\n tui.loadHistory(history);\n tui.start();\n\n await new Promise<void>((resolve) => {\n client.once('closed', resolve);\n });\n}\n\n// ─── Voice mode (WebSocket + mic + speaker + TUI) ────────────────────────────\n\nasync function voiceChatSession(\n session: ChatSession,\n vad: 'client' | 'server',\n args: Record<string, string | boolean | undefined>,\n debug: boolean\n): Promise<void> {\n if (!checkSoxAvailable()) {\n throw new CLIError(\n 'Voice mode requires SoX. Install it:\\n' +\n ' macOS: brew install sox\\n' +\n ' Linux: apt install sox\\n' +\n ' Windows: choco install sox'\n );\n }\n\n const inputDeviceName =\n typeof args['input-device'] === 'string' ? args['input-device'] : undefined;\n const outputDeviceName =\n typeof args['output-device'] === 'string' ? args['output-device'] : undefined;\n\n let inputDeviceId: string | undefined;\n let outputDeviceId: string | undefined;\n\n if (!inputDeviceName || !outputDeviceName) {\n process.stderr.write('\\n Audio Devices\\n');\n }\n\n if (inputDeviceName) {\n inputDeviceId = inputDeviceName;\n } else {\n const inputDevices = await listInputDevices();\n const selected = await selectDevice(inputDevices, 'Input (microphone)');\n inputDeviceId = selected.id;\n }\n\n if (outputDeviceName) {\n outputDeviceId = outputDeviceName;\n } else {\n const outputDevices = await listOutputDevices();\n const selected = await selectDevice(outputDevices, 'Output (speaker)');\n outputDeviceId = selected.id;\n }\n\n const client = new RealtimeClient({\n url: session.wsUrl,\n token: session.ctx.accessToken,\n chatId: session.chatId,\n vadMode: vad,\n debug,\n });\n\n process.stderr.write(`\\nConnecting to ${session.label.toLowerCase()}...\\n`);\n\n try {\n await client.connect();\n } catch (err) {\n throw new CLIError(`Failed to connect: ${err instanceof Error ? err.message : err}`);\n }\n\n const existingMessages = await session.loadMessages();\n const history = buildHistory(existingMessages);\n\n const mic = new MicCapture((pcm16) => {\n if (!client.isConnected()) return;\n client.sendAudio(pcm16);\n });\n const player = new AudioPlayer(outputDeviceId);\n\n function cleanup(): void {\n mic.stop();\n player.stop();\n client.close();\n }\n\n const tui = new ChatTUI({\n onSend: (text) => {\n client.sendTextMessage(text);\n },\n onExit: () => {\n cleanup();\n },\n debug,\n env: session.ctx.env,\n });\n\n wireRealtimeEvents(client, tui);\n\n client.on('audio', (data: any) => {\n player.write(data.pcm16);\n });\n\n client.on('audio_end', (data: any) => {\n player.endResponse(data?.messageId);\n });\n\n client.on('interrupt', () => {\n const playbackMs = player.getPlaybackTimeMs();\n const messageId = player.playingMessageId;\n\n if (playbackMs !== null && playbackMs > 0 && player.isPlaying) {\n client.sendInterrupt(playbackMs, messageId);\n player.stop();\n\n if (debug) {\n tui.logDebug('in', {\n type: 'CUSTOM',\n name: 'voice.interrupt',\n value: { action: 'echoed', audioEndMs: playbackMs, messageId },\n });\n }\n } else if (debug) {\n tui.logDebug('in', {\n type: 'CUSTOM',\n name: 'voice.interrupt',\n value: { action: 'ignored', wasPlaying: player.isPlaying },\n });\n }\n });\n\n client.on('truncate', (data: any) => {\n player.stop();\n tui.truncateAssistant(\n data.content ?? '',\n data.originalContent,\n data.truncationReason ?? 'barge_in',\n data.truncatedAtMs\n );\n });\n\n client.on('response_message', (data: any) => {\n if (data.role === 'user' && data.content) {\n tui.addTranscription(data.content);\n }\n });\n\n client.on('closed', () => {\n tui.stop();\n cleanup();\n console.log('Disconnected.');\n });\n\n tui.loadHistory(history);\n tui.start();\n\n mic.start(inputDeviceId);\n\n await new Promise<void>((resolve) => {\n client.once('closed', resolve);\n });\n}\n\n// ─── Device listing ──────────────────────────────────────────────────────────\n\nexport async function listAudioDevices(): Promise<void> {\n if (!checkSoxAvailable()) {\n throw new CLIError(\n 'Device listing requires SoX. Install it:\\n' +\n ' macOS: brew install sox\\n' +\n ' Linux: apt install sox\\n' +\n ' Windows: choco install sox'\n );\n }\n\n const inputs = await listInputDevices();\n const outputs = await listOutputDevices();\n\n console.log('Input devices (microphone):');\n for (const dev of inputs) {\n const marker = dev.isDefault ? ' (default)' : '';\n console.log(` ${dev.id}: ${dev.name}${marker}`);\n }\n\n console.log('\\nOutput devices (speaker):');\n for (const dev of outputs) {\n const marker = dev.isDefault ? ' (default)' : '';\n console.log(` ${dev.id}: ${dev.name}${marker}`);\n }\n}\n","/**\n * WebSocket-based AG-UI Realtime Client for CLI\n *\n * Handles the AG-UI protocol over WebSocket for realtime voice and text\n * interactions with the Workspace Manager. Adapted from the browser\n * implementation in src/components/voice/ws-unified.ts.\n *\n * Uses the native WebSocket global (Node.js 22+).\n */\n\nimport { EventEmitter } from 'events';\n\n// AG-UI event format over WebSocket\ninterface AGUIWebSocketEvent {\n type: string;\n name?: string;\n value?: any;\n messageId?: string;\n delta?: string;\n role?: string;\n message?: string;\n code?: string;\n toolCallId?: string;\n toolCallName?: string;\n [key: string]: any;\n}\n\nexport interface RealtimeClientOptions {\n /** WebSocket URL (wss://...) */\n url: string;\n /** JWT access token for authentication */\n token: string;\n /** Chat ID to connect to (null to create a new chat) */\n chatId: number | null;\n /** VAD mode: 'server' (default) or 'client' */\n vadMode?: 'client' | 'server';\n /** Enable debug logging */\n debug?: boolean;\n}\n\n/**\n * Realtime WebSocket client for AG-UI protocol.\n *\n * Events:\n * - connected: Login success with chat/member/assistant IDs\n * - audio: Received audio PCM16 buffer\n * - text_start/text_delta/text_end: Streaming text message\n * - transcription: User speech transcription\n * - response_message: Full message object\n * - tool_call_start/tool_call_args/tool_call_end: Tool calls\n * - run_error: Run error from server\n * - error: Connection/protocol error\n * - closed: WebSocket closed\n */\nexport class RealtimeClient extends EventEmitter {\n private ws: WebSocket | null = null;\n private connected = false;\n private options: Required<RealtimeClientOptions>;\n\n constructor(options: RealtimeClientOptions) {\n super();\n this.options = {\n vadMode: 'server',\n debug: false,\n ...options,\n };\n }\n\n /** Connect to the realtime WebSocket endpoint */\n connect(): Promise<void> {\n if (typeof globalThis.WebSocket === 'undefined') {\n return Promise.reject(\n new Error('WebSocket not available. Node.js 22+ is required for realtime mode.')\n );\n }\n\n return new Promise((resolve, reject) => {\n const params = new URLSearchParams();\n if (this.options.vadMode) {\n params.append('vad', this.options.vadMode);\n }\n const url = params.toString()\n ? `${this.options.url}?${params.toString()}`\n : this.options.url;\n\n if (this.options.debug) {\n process.stderr.write(`[debug] Connecting to ${url}\\n`);\n }\n\n this.ws = new WebSocket(url);\n\n this.ws.onerror = (event: Event) => {\n const msg = event instanceof ErrorEvent ? event.message : 'WebSocket connection failed';\n if (!this.connected) {\n reject(new Error(msg));\n } else {\n this.emit('error', new Error(msg));\n }\n };\n\n this.ws.onclose = (event: CloseEvent) => {\n const reason = event.code === 1006 ? 'Connection lost' : event.reason || 'Closed';\n this.connected = false;\n this.emit('closed', { reason, code: event.code });\n };\n\n this.ws.onmessage = (event: MessageEvent) => {\n try {\n const data = typeof event.data === 'string' ? event.data : event.data.toString();\n const parsed: AGUIWebSocketEvent = JSON.parse(data);\n this.emit('ws_recv', parsed);\n this.handleEvent(parsed);\n } catch {\n if (this.options.debug) {\n process.stderr.write(`[debug] Failed to parse message\\n`);\n }\n }\n };\n\n this.ws.onopen = () => {\n if (this.options.debug) {\n process.stderr.write('[debug] WebSocket connected, sending login\\n');\n }\n this.sendCustom('voice.login', {\n token: this.options.token,\n chat_id: this.options.chatId,\n vad: this.options.vadMode,\n });\n };\n\n // Wait for login_success or timeout\n const timeout = setTimeout(() => {\n if (!this.connected) {\n this.close();\n reject(new Error('Connection timeout - no login response within 10s'));\n }\n }, 10000);\n\n this.once('connected', () => {\n clearTimeout(timeout);\n resolve();\n });\n\n this.once('error', () => {\n clearTimeout(timeout);\n });\n });\n }\n\n private handleEvent(event: AGUIWebSocketEvent): void {\n switch (event.type) {\n case 'CUSTOM':\n this.handleCustomEvent(event.name || '', event.value);\n break;\n\n case 'TEXT_MESSAGE_START':\n this.emit('text_start', { messageId: event.messageId || '' });\n break;\n case 'TEXT_MESSAGE_CONTENT':\n this.emit('text_delta', {\n messageId: event.messageId || '',\n delta: event.delta || '',\n });\n break;\n case 'TEXT_MESSAGE_END':\n this.emit('text_end', { messageId: event.messageId || '' });\n break;\n\n case 'TOOL_CALL_START':\n this.emit('tool_call_start', {\n toolCallId: event.toolCallId || '',\n toolCallName: event.toolCallName || '',\n });\n break;\n case 'TOOL_CALL_ARGS':\n this.emit('tool_call_args', {\n toolCallId: event.toolCallId || '',\n delta: event.delta || '',\n });\n break;\n case 'TOOL_CALL_END':\n this.emit('tool_call_end', { toolCallId: event.toolCallId || '' });\n break;\n case 'TOOL_CALL_RESULT':\n this.emit('tool_call_result', {\n toolCallId: event.toolCallId || '',\n result: event.result,\n });\n break;\n\n case 'RUN_STARTED':\n this.emit('run_started', { runId: event.runId });\n break;\n case 'RUN_FINISHED':\n this.emit('run_finished', { runId: event.runId });\n break;\n case 'RUN_ERROR':\n this.emit('run_error', {\n message: event.message || 'Unknown error',\n code: event.code,\n });\n break;\n\n default:\n if (this.options.debug) {\n process.stderr.write(`[debug] Unknown event type: ${event.type}\\n`);\n }\n }\n }\n\n private handleCustomEvent(name: string, value: any): void {\n switch (name) {\n case 'voice.login_success':\n this.connected = true;\n this.emit('connected', {\n chatId: value?.chat_id,\n memberId: value?.member_id,\n assistantId: value?.assistant_id,\n });\n break;\n\n case 'voice.audio':\n if (value?.data) {\n const pcm16 = Buffer.from(value.data, 'base64');\n this.emit('audio', { pcm16, messageId: value.message_id });\n }\n break;\n\n case 'voice.audio_begin':\n this.emit('audio_begin', { messageId: value?.message_id });\n break;\n case 'voice.audio_end':\n this.emit('audio_end', { messageId: value?.message_id });\n break;\n\n case 'voice.interrupt':\n this.emit('interrupt', { messageId: value?.message_id });\n break;\n\n case 'voice.response_message':\n if (value) {\n this.emit('response_message', value);\n }\n break;\n\n case 'voice.transcription':\n if (value) {\n this.emit('transcription', { text: value.text, role: value.role });\n }\n break;\n\n case 'voice.truncate':\n if (value) {\n this.emit('truncate', {\n messageId: value.message_id,\n content: value.content,\n originalContent: value.original_content,\n truncationReason: value.truncation_reason || 'barge_in',\n truncatedAtMs: value.audio_end_ms,\n });\n }\n break;\n\n case 'app.data_update':\n case 'app.navigation':\n case 'app.notification':\n break;\n\n default:\n if (this.options.debug) {\n process.stderr.write(`[debug] Unknown CUSTOM event: ${name}\\n`);\n }\n }\n }\n\n private sendCustom(name: string, value?: any): void {\n if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {\n return;\n }\n const event: AGUIWebSocketEvent = { type: 'CUSTOM', name };\n if (value !== undefined) {\n event.value = value;\n }\n this.emit('ws_send', event);\n this.ws.send(JSON.stringify(event));\n }\n\n /** Send raw PCM16 audio data (will be base64-encoded) */\n sendAudio(pcm16: Buffer): void {\n this.sendCustom('voice.audio', {\n data: pcm16.toString('base64'),\n format: 'pcm16',\n sample_rate: 24000,\n });\n }\n\n /** Signal the start of an audio utterance */\n sendAudioBegin(messageId: string): void {\n this.sendCustom('voice.audio_begin', { message_id: messageId });\n }\n\n /** Signal the end of an audio utterance */\n sendAudioEnd(): void {\n this.sendCustom('voice.audio_end');\n }\n\n /** Send a text message (triggers AI inference) */\n sendTextMessage(content: string): void {\n this.sendCustom('voice.user_message', {\n message: { role: 'user', content },\n });\n }\n\n /** Send interrupt signal with playback position */\n sendInterrupt(audioEndMs: number, messageId?: string): void {\n this.sendCustom('voice.interrupt', {\n audio_end_ms: audioEndMs,\n message_id: messageId,\n });\n }\n\n /** Check if the client is connected */\n isConnected(): boolean {\n return this.connected && this.ws?.readyState === WebSocket.OPEN;\n }\n\n /** Close the connection */\n close(): void {\n this.connected = false;\n if (this.ws) {\n this.ws.close();\n this.ws = null;\n }\n }\n}\n","/**\n * Chat TUI — terminal chat interface using ANSI escape codes.\n *\n * Layout (normal):\n * Rows 1..R-2: Message area (full width)\n * Row R-1: Separator + hints\n * Row R: Input (\"You: ...\")\n *\n * Layout (debug):\n * Rows 1..R-2: Chat (left) │ Debug log (right)\n * Row R-1: Separator + hints\n * Row R: Input (\"You: ...\")\n *\n * Keyboard:\n * Up/Down Scroll 1 line\n * Page Up/Down Scroll 1 page\n * Ctrl+B Page up (less-style)\n * Ctrl+F Page down (less-style)\n * Home/End Top / bottom\n * Ctrl+O Toggle detail expansion (tool calls + debug messages)\n * Ctrl+D Toggle debug panel (when --debug)\n * Ctrl+C / exit Quit\n *\n * Mouse:\n * Scroll wheel Scroll 3 lines\n *\n * Zero external dependencies — only Node.js built-ins.\n */\n\nimport { createWriteStream, type WriteStream } from 'fs';\n\n// ─── Public types ─────────────────────────────────────────────────────────────\n\nexport interface ChatMessage {\n role: 'user' | 'assistant' | 'system';\n content: string;\n /** Reason the message was truncated (voice interruption) */\n truncationReason?: string;\n /** Ms offset where truncation occurred */\n truncatedAtMs?: number;\n /** The full original content before truncation */\n originalContent?: string;\n}\n\nexport interface ChatTUIOptions {\n /** Called when the user sends a message */\n onSend: (text: string) => void;\n /** Called when the user exits (Ctrl+C, 'exit', 'quit') */\n onExit: () => void;\n /** Enable debug panel showing WebSocket traffic */\n debug?: boolean;\n /** Environment name (e.g. 'dev', 'staging', 'prod') — controls debug log file creation */\n env?: string;\n}\n\n// ─── Item types ───────────────────────────────────────────────────────────────\n\nexport interface ToolCallItem {\n kind: 'tool_call';\n id: string;\n name: string;\n args: string;\n done: boolean;\n}\n\nexport interface ToolResultItem {\n kind: 'tool_result';\n toolCallId: string;\n toolName: string;\n content: string;\n}\n\nexport type ChatItem = ChatMessage | ToolCallItem | ToolResultItem;\n\nfunction isToolCall(item: ChatItem): item is ToolCallItem {\n return 'kind' in item && (item as ToolCallItem).kind === 'tool_call';\n}\n\nfunction isToolResult(item: ChatItem): item is ToolResultItem {\n return 'kind' in item && (item as ToolResultItem).kind === 'tool_result';\n}\n\n/** Friendly label for truncation reason */\nfunction getTruncationLabel(reason: string, truncatedAtMs?: number): string {\n const timeStr = truncatedAtMs ? ` at ${(truncatedAtMs / 1000).toFixed(1)}s` : '';\n switch (reason) {\n case 'barge_in':\n return `interrupted: user spoke${timeStr}`;\n case 'client_interrupt':\n return `interrupted${timeStr}`;\n case 'user_cancel':\n return `cancelled by user${timeStr}`;\n case 'error':\n return `error${timeStr}`;\n default:\n return `interrupted${timeStr}`;\n }\n}\n\n/** Extract the unspoken portion of a truncated message */\nfunction getExtraContent(\n content: string | undefined,\n originalContent: string | undefined\n): string | null {\n if (!content || !originalContent) return null;\n const stripped = content.replace(/—interrupted$/, '');\n if (originalContent.startsWith(stripped)) {\n const extra = originalContent.slice(stripped.length);\n return extra.length > 0 ? extra : null;\n }\n return originalContent !== content ? originalContent : null;\n}\n\n// ─── Debug log entry ──────────────────────────────────────────────────────────\n\ninterface DebugEntry {\n direction: 'in' | 'out';\n summary: string; // one-line summary (always shown)\n detail: string; // full JSON (shown when expanded)\n ts: string; // HH:MM:SS\n}\n\n// ─── ANSI helpers ─────────────────────────────────────────────────────────────\n\nconst CSI = '\\x1B[';\nconst HIDE_CURSOR = `${CSI}?25l`;\nconst SHOW_CURSOR = `${CSI}?25h`;\nconst ALT_SCREEN_ON = `${CSI}?1049h`;\nconst ALT_SCREEN_OFF = `${CSI}?1049l`;\nconst CLEAR_EOL = `${CSI}K`;\nconst RESET = `${CSI}0m`;\nconst MOUSE_ON = `${CSI}?1000h${CSI}?1006h`; // Button events + SGR extended\nconst MOUSE_OFF = `${CSI}?1000l${CSI}?1006l`;\n\nconst BLUE = `${CSI}34m`;\nconst GREEN = `${CSI}32m`;\nconst GRAY = `${CSI}90m`;\nconst YELLOW = `${CSI}33m`;\nconst ORANGE = `${CSI}38;5;208m`; // 256-color orange — inbound\nconst LIGHT_BLUE = `${CSI}38;5;117m`; // 256-color light blue — outbound\nconst DIM = `${CSI}2m`;\nconst DIM_ITALIC_GRAY = `${CSI}2;3;90m`; // dim + italic + gray\n\nfunction moveTo(row: number, col: number): string {\n return `${CSI}${row};${col}H`;\n}\n\n// ─── ChatTUI ──────────────────────────────────────────────────────────────────\n\nexport class ChatTUI {\n private items: ChatItem[] = [];\n private inputBuffer = '';\n private isStreaming = false;\n private streamContent = '';\n private scrollOffset = 0;\n private expandDetails = false;\n private rows = 24;\n private cols = 80;\n private started = false;\n private renderTimer: ReturnType<typeof setTimeout> | null = null;\n private displayLinesCache: string[] | null = null;\n private debugLinesCache: string[] | null = null;\n private options: ChatTUIOptions;\n\n // Debug panel state\n private debugEntries: DebugEntry[] = [];\n private debugPanelVisible = false;\n private debugLogStream: WriteStream | null = null;\n\n // Escape sequence accumulator for raw stdin parsing\n private escBuf = '';\n private escTimer: ReturnType<typeof setTimeout> | null = null;\n\n constructor(options: ChatTUIOptions) {\n this.options = options;\n this.debugPanelVisible = !!options.debug;\n }\n\n /** Whether the debug panel is currently being rendered */\n private get debugVisible(): boolean {\n return this.debugPanelVisible;\n }\n\n // ─── Lifecycle ──────────────────────────────────────────────────────\n\n start(): void {\n this.updateDimensions();\n process.stdout.write(ALT_SCREEN_ON + MOUSE_ON);\n process.stdout.write(`${CSI}1;${Math.max(1, this.rows - 2)}r`);\n\n // Raw mode + direct data handler (not readline — we parse escape seqs ourselves)\n process.stdin.setEncoding('utf8');\n if (process.stdin.isTTY) process.stdin.setRawMode(true);\n process.stdin.on('data', this.onData);\n process.stdin.resume();\n\n process.stdout.on('resize', this.onResize);\n process.on('exit', this.restoreTerminal);\n\n // Debug log file — only write to disk in dev/staging (never in prod to avoid PHI on disk)\n if (this.options.debug && this.options.env !== 'prod') {\n this.debugLogStream = createWriteStream('gr-cli-realtime-debug.log', { flags: 'a' });\n this.debugLogStream.write(`\\n--- session ${new Date().toISOString()} ---\\n`);\n }\n\n this.started = true;\n this.render();\n }\n\n stop(): void {\n if (!this.started) return;\n this.started = false;\n if (this.renderTimer) {\n clearTimeout(this.renderTimer);\n this.renderTimer = null;\n }\n this.clearEsc();\n if (this.debugLogStream) {\n this.debugLogStream.end();\n this.debugLogStream = null;\n }\n this.restoreTerminal();\n process.stdout.removeListener('resize', this.onResize);\n process.stdin.removeListener('data', this.onData);\n if (process.stdin.isTTY) process.stdin.setRawMode(false);\n process.stdin.pause();\n process.removeListener('exit', this.restoreTerminal);\n }\n\n // ─── Chat state ────────────────────────────────────────────────────\n\n loadHistory(items: ChatItem[]): void {\n this.items = items.filter((item) => (isToolCall(item) ? true : item.content?.trim()));\n this.dirty();\n }\n\n streamStart(): void {\n this.isStreaming = true;\n this.streamContent = '';\n this.scrollOffset = 0;\n this.dirty();\n }\n\n streamDelta(delta: string): void {\n this.streamContent += delta;\n this.dirty();\n }\n\n streamEnd(): void {\n if (this.streamContent.trim()) {\n this.items.push({ role: 'assistant', content: this.streamContent });\n }\n this.isStreaming = false;\n this.streamContent = '';\n this.dirty();\n }\n\n toolCallStart(id: string, name: string): void {\n this.items.push({ kind: 'tool_call', id, name, args: '', done: false });\n this.dirty();\n }\n\n toolCallArgs(id: string, delta: string): void {\n const tc = this.findToolCall(id);\n if (tc) {\n tc.args += delta;\n this.dirty();\n }\n }\n\n toolCallEnd(id: string): void {\n const tc = this.findToolCall(id);\n if (tc) {\n tc.done = true;\n this.dirty();\n }\n }\n\n /** Add a transcription of the user's spoken words (voice mode) */\n addTranscription(text: string): void {\n this.items.push({ role: 'user', content: text });\n this.scrollOffset = 0;\n this.dirty();\n }\n\n /**\n * Truncate the most recent assistant message (voice interruption).\n * Replaces its content with the spoken portion and stores the original.\n */\n truncateAssistant(\n content: string,\n originalContent: string | undefined,\n reason: string,\n truncatedAtMs?: number\n ): void {\n // If currently streaming, commit the stream first\n if (this.isStreaming) {\n this.isStreaming = false;\n this.streamContent = '';\n }\n\n // Find the last assistant message and update it\n for (let i = this.items.length - 1; i >= 0; i--) {\n const item = this.items[i]!;\n if ('role' in item && item.role === 'assistant') {\n item.content = content;\n item.truncationReason = reason;\n item.truncatedAtMs = truncatedAtMs;\n item.originalContent = originalContent;\n this.dirty();\n return;\n }\n }\n\n // No existing assistant message — push the truncated content\n this.items.push({\n role: 'assistant',\n content,\n truncationReason: reason,\n truncatedAtMs: truncatedAtMs,\n originalContent,\n });\n this.dirty();\n }\n\n toolCallResult(toolCallId: string, toolName: string, content: string): void {\n this.items.push({ kind: 'tool_result', toolCallId, toolName, content });\n this.dirty();\n }\n\n /** Find the tool name for a given tool call ID */\n findToolCallName(toolCallId: string): string {\n for (let i = this.items.length - 1; i >= 0; i--) {\n const item = this.items[i]!;\n if (isToolCall(item) && item.id === toolCallId) return item.name;\n }\n return 'tool';\n }\n\n showError(msg: string): void {\n this.items.push({ role: 'system', content: `Error: ${msg}` });\n this.dirty();\n }\n\n // ─── Debug panel ──────────────────────────────────────────────────\n\n /** Log a WebSocket message to the debug panel and (optionally) log file */\n logDebug(direction: 'in' | 'out', raw: any): void {\n const redacted = redactAudio(raw);\n const now = new Date();\n const ts = `${pad2(now.getHours())}:${pad2(now.getMinutes())}:${pad2(now.getSeconds())}`;\n\n // Write to log file (JSON lines, with full redacted payload)\n if (this.debugLogStream) {\n const logLine = JSON.stringify({ ts: now.toISOString(), dir: direction, ...redacted });\n this.debugLogStream.write(logLine + '\\n');\n }\n\n // Add to in-memory debug panel\n const summary = buildDebugSummary(direction, redacted);\n let detail: string;\n try {\n detail = JSON.stringify(redacted, null, 2);\n } catch {\n detail = String(redacted);\n }\n this.debugEntries.push({ direction, summary, detail, ts });\n // Cap at 500 entries to prevent memory growth\n if (this.debugEntries.length > 500) {\n this.debugEntries = this.debugEntries.slice(-300);\n }\n this.debugLinesCache = null;\n this.dirty();\n }\n\n // ─── Private helpers ──────────────────────────────────────────────\n\n private findToolCall(id: string): ToolCallItem | undefined {\n for (let i = this.items.length - 1; i >= 0; i--) {\n const item = this.items[i]!;\n if (isToolCall(item) && item.id === id) return item;\n }\n return undefined;\n }\n\n private dirty(): void {\n this.displayLinesCache = null;\n this.debugLinesCache = null;\n this.scheduleRender();\n }\n\n private restoreTerminal = (): void => {\n process.stdout.write(`${MOUSE_OFF}${CSI}r${ALT_SCREEN_OFF}${SHOW_CURSOR}`);\n };\n\n private updateDimensions(): void {\n this.rows = process.stdout.rows || 24;\n this.cols = process.stdout.columns || 80;\n }\n\n /** Width of the chat (left) panel */\n private chatWidth(): number {\n if (!this.debugVisible) return this.cols;\n // 60% for chat, 40% for debug, with 1 col for divider\n return Math.max(30, Math.floor(this.cols * 0.6) - 1);\n }\n\n /** Width of the debug (right) panel */\n private debugWidth(): number {\n if (!this.debugVisible) return 0;\n return this.cols - this.chatWidth() - 1; // -1 for divider\n }\n\n private scrollHeight(): number {\n return Math.max(1, this.rows - 2);\n }\n\n private pageSize(): number {\n return Math.max(1, this.rows - 4);\n }\n\n // ─── Scroll ───────────────────────────────────────────────────────\n\n private scrollUp(lines: number): void {\n const total = this.getDisplayLines().length;\n const max = Math.max(0, total - this.scrollHeight());\n this.scrollOffset = Math.min(max, this.scrollOffset + lines);\n this.render();\n }\n\n private scrollDown(lines: number): void {\n this.scrollOffset = Math.max(0, this.scrollOffset - lines);\n this.render();\n }\n\n private scrollToTop(): void {\n const total = this.getDisplayLines().length;\n this.scrollOffset = Math.max(0, total - this.scrollHeight());\n this.render();\n }\n\n private scrollToBottom(): void {\n this.scrollOffset = 0;\n this.render();\n }\n\n // ─── Raw stdin parsing ────────────────────────────────────────────\n //\n // We parse stdin directly instead of using readline.emitKeypressEvents\n // because readline doesn't understand SGR mouse sequences and leaks\n // their contents into keypress events as regular characters.\n\n private onData = (data: string): void => {\n for (let i = 0; i < data.length; i++) {\n const ch = data[i]!;\n\n // Accumulating an escape sequence\n if (this.escBuf) {\n this.escBuf += ch;\n\n if (this.escBuf.length === 2) {\n if (ch !== '[') {\n // Not a CSI sequence (Alt+key etc.) — discard\n this.clearEsc();\n }\n continue;\n }\n\n // \\x1B[... — wait for a terminating character (letter or ~)\n if (/[A-Za-z~]/.test(ch)) {\n this.handleCSI(this.escBuf.slice(2, -1), ch);\n this.clearEsc();\n } else if (this.escBuf.length > 32) {\n this.clearEsc(); // safety bail\n }\n continue;\n }\n\n // Start of escape sequence\n if (ch === '\\x1B') {\n this.escBuf = '\\x1B';\n this.escTimer = setTimeout(() => {\n // Bare ESC with no follow-up — ignore\n this.escBuf = '';\n this.escTimer = null;\n }, 100);\n continue;\n }\n\n // Regular byte\n this.handleByte(ch);\n }\n };\n\n private clearEsc(): void {\n this.escBuf = '';\n if (this.escTimer) {\n clearTimeout(this.escTimer);\n this.escTimer = null;\n }\n }\n\n /** Handle a parsed CSI sequence: params is everything between \\x1B[ and the final char */\n private handleCSI(params: string, code: string): void {\n // Mouse SGR: \\x1B[<button;col;rowM (press) or m (release)\n if (params.startsWith('<') && (code === 'M' || code === 'm')) {\n if (code === 'm') return; // ignore button release\n const parts = params.slice(1).split(';');\n if (parts.length >= 1) {\n const button = parseInt(parts[0]!, 10);\n if (button === 64) this.scrollUp(3);\n else if (button === 65) this.scrollDown(3);\n }\n return;\n }\n\n // Arrow keys (no params)\n if (!params) {\n if (code === 'A') {\n this.scrollUp(1);\n return;\n }\n if (code === 'B') {\n this.scrollDown(1);\n return;\n }\n // Home/End (xterm-style)\n if (code === 'H') {\n this.scrollToTop();\n return;\n }\n if (code === 'F') {\n this.scrollToBottom();\n return;\n }\n }\n\n // Tilde sequences: Page Up (5~), Page Down (6~), Home (1~), End (4~)\n if (code === '~') {\n if (params === '5') {\n this.scrollUp(this.pageSize());\n return;\n }\n if (params === '6') {\n this.scrollDown(this.pageSize());\n return;\n }\n if (params === '1') {\n this.scrollToTop();\n return;\n }\n if (params === '4') {\n this.scrollToBottom();\n return;\n }\n }\n }\n\n /** Handle a single non-escape byte */\n private handleByte(ch: string): void {\n const code = ch.charCodeAt(0);\n\n // Ctrl+C → exit\n if (code === 0x03) {\n this.stop();\n this.options.onExit();\n return;\n }\n\n // Ctrl+B → page up (less-style)\n if (code === 0x02) {\n this.scrollUp(this.pageSize());\n return;\n }\n\n // Ctrl+F → page down (less-style)\n if (code === 0x06) {\n this.scrollDown(this.pageSize());\n return;\n }\n\n // Ctrl+D → toggle debug panel visibility (always available)\n if (code === 0x04) {\n this.debugPanelVisible = !this.debugPanelVisible;\n this.displayLinesCache = null;\n this.debugLinesCache = null;\n this.render();\n return;\n }\n\n // Ctrl+O → toggle detail expansion (tool calls + debug messages)\n if (code === 0x0f) {\n this.expandDetails = !this.expandDetails;\n this.displayLinesCache = null;\n this.debugLinesCache = null;\n this.render();\n return;\n }\n\n // Enter\n if (code === 0x0d) {\n this.handleEnter();\n return;\n }\n\n // Backspace (0x7F on most terminals, 0x08 on some)\n if (code === 0x7f || code === 0x08) {\n if (this.inputBuffer.length > 0) {\n this.inputBuffer = this.inputBuffer.slice(0, -1);\n this.renderInputLine();\n }\n return;\n }\n\n // Ignore other control characters\n if (code < 0x20) return;\n\n // Printable character → add to input\n this.inputBuffer += ch;\n this.renderInputLine();\n }\n\n private handleEnter(): void {\n const text = this.inputBuffer.trim();\n this.inputBuffer = '';\n if (!text) {\n this.renderInputLine();\n return;\n }\n if (text.toLowerCase() === 'exit' || text.toLowerCase() === 'quit') {\n this.stop();\n this.options.onExit();\n return;\n }\n this.items.push({ role: 'user', content: text });\n this.scrollOffset = 0;\n this.displayLinesCache = null;\n this.render();\n this.options.onSend(text);\n }\n\n // ─── Events ───────────────────────────────────────────────────────\n\n private onResize = (): void => {\n this.updateDimensions();\n process.stdout.write(`${CSI}1;${Math.max(1, this.rows - 2)}r`);\n this.displayLinesCache = null;\n this.debugLinesCache = null;\n this.render();\n };\n\n // ─── Rendering ────────────────────────────────────────────────────\n\n private scheduleRender(): void {\n if (!this.started || this.renderTimer) return;\n this.renderTimer = setTimeout(() => {\n this.renderTimer = null;\n this.render();\n }, 30);\n }\n\n private getDisplayLines(): string[] {\n if (!this.displayLinesCache) {\n this.displayLinesCache = this.buildDisplayLines();\n }\n return this.displayLinesCache;\n }\n\n private getDebugLines(): string[] {\n if (!this.debugLinesCache) {\n this.debugLinesCache = this.buildDebugLines();\n }\n return this.debugLinesCache;\n }\n\n private render(): void {\n if (!this.started) return;\n this.updateDimensions();\n\n const sh = this.scrollHeight();\n const displayLines = this.getDisplayLines();\n const total = displayLines.length;\n\n // Clamp scroll offset\n const maxOff = Math.max(0, total - sh);\n if (this.scrollOffset > maxOff) this.scrollOffset = maxOff;\n\n // Select visible slice for chat\n let visible: string[];\n if (total <= sh) {\n visible = [...new Array<string>(sh - total).fill(''), ...displayLines];\n } else {\n const end = total - this.scrollOffset;\n const start = end - sh;\n visible = displayLines.slice(start, end);\n }\n\n const buf: string[] = [HIDE_CURSOR];\n\n if (this.debugVisible) {\n this.renderSplitScreen(buf, visible, sh);\n } else {\n for (let i = 0; i < sh; i++) {\n buf.push(moveTo(i + 1, 1), visible[i] || '', CLEAR_EOL);\n }\n }\n\n // Separator with hints (row R-1)\n buf.push(moveTo(this.rows - 1, 1), this.buildSeparator(), CLEAR_EOL);\n\n // Input (row R)\n buf.push(moveTo(this.rows, 1), `${BLUE}You:${RESET} ${this.inputBuffer}${CLEAR_EOL}`);\n\n buf.push(SHOW_CURSOR);\n process.stdout.write(buf.join(''));\n }\n\n private renderSplitScreen(buf: string[], chatVisible: string[], sh: number): void {\n const cw = this.chatWidth();\n const dw = this.debugWidth();\n const divCol = cw + 1;\n\n // Debug panel: auto-scroll to bottom (always show latest)\n const debugLines = this.getDebugLines();\n const debugTotal = debugLines.length;\n let debugVisible: string[];\n if (debugTotal <= sh) {\n debugVisible = [...new Array<string>(sh - debugTotal).fill(''), ...debugLines];\n } else {\n debugVisible = debugLines.slice(debugTotal - sh);\n }\n\n for (let i = 0; i < sh; i++) {\n const chatLine = truncateAnsi(chatVisible[i] || '', cw);\n const debugLine = truncateAnsi(debugVisible[i] || '', dw);\n buf.push(\n moveTo(i + 1, 1),\n chatLine,\n CLEAR_EOL, // clear to end handles rest, but we need to position divider\n moveTo(i + 1, divCol),\n `${DIM}\\u2502${RESET}`,\n debugLine\n );\n // Clear remainder of the debug area\n buf.push(CLEAR_EOL);\n }\n }\n\n private renderInputLine(): void {\n process.stdout.write(\n `${moveTo(this.rows, 1)}${BLUE}You:${RESET} ${this.inputBuffer}${CLEAR_EOL}`\n );\n }\n\n // ─── Separator ────────────────────────────────────────────────────\n\n private buildSeparator(): string {\n const hints: string[] = [];\n\n if (this.scrollOffset > 0) {\n hints.push(`\\u2191${this.scrollOffset}`);\n }\n\n const hasDetails =\n this.items.some((i) => isToolCall(i) || isToolResult(i)) || this.options.debug;\n if (hasDetails) {\n hints.push(`^O ${this.expandDetails ? 'collapse' : 'details'}`);\n }\n\n if (this.options.debug) {\n hints.push(`^D ${this.debugPanelVisible ? 'hide' : 'show'} debug`);\n }\n\n const lineWidth = Math.min(this.cols, 60);\n\n if (!hints.length) {\n return `${GRAY}${'\\u2500'.repeat(lineWidth)}${RESET}`;\n }\n\n const hintStr = ` ${hints.join(' ')} `;\n const dashes = Math.max(0, lineWidth - hintStr.length);\n const left = Math.max(2, Math.floor(dashes / 2));\n const right = Math.max(2, dashes - left);\n return `${GRAY}${'\\u2500'.repeat(left)}${hintStr}${'\\u2500'.repeat(right)}${RESET}`;\n }\n\n // ─── Chat display line building ───────────────────────────────────\n\n private buildDisplayLines(): string[] {\n const lines: string[] = [];\n const w = this.chatWidth();\n\n for (const item of this.items) {\n if (isToolCall(item)) {\n this.appendToolCallLines(lines, item, w);\n } else if (isToolResult(item)) {\n this.appendToolResultLines(lines, item, w);\n } else {\n this.appendMessageLines(lines, item, w);\n }\n lines.push('');\n }\n\n if (this.isStreaming) {\n this.appendStreamLines(lines, w);\n }\n\n return lines;\n }\n\n private appendToolCallLines(lines: string[], tc: ToolCallItem, width: number): void {\n const status = tc.done ? 'Called' : 'Calling';\n const summary = ` ${GRAY}${status} ${tc.name}${tc.done ? '' : '...'}${RESET}`;\n\n if (!this.expandDetails) {\n lines.push(summary);\n return;\n }\n\n lines.push(summary);\n if (tc.args) {\n let formatted = tc.args;\n try {\n formatted = JSON.stringify(JSON.parse(tc.args), null, 2);\n } catch {\n // use raw\n }\n const indent = ' ';\n for (const argLine of formatted.split('\\n')) {\n for (const wl of this.wrapText(argLine, width - indent.length)) {\n lines.push(`${indent}${GRAY}${wl}${RESET}`);\n }\n }\n }\n }\n\n private appendToolResultLines(lines: string[], tr: ToolResultItem, width: number): void {\n if (!this.expandDetails) {\n // Collapsed: show truncated one-liner\n const maxLen = width - 10;\n const preview = tr.content.replace(/\\n/g, ' ').slice(0, maxLen);\n const truncated = preview.length < tr.content.length ? '...' : '';\n lines.push(` ${GRAY}\\u2192 ${tr.toolName}: ${preview}${truncated}${RESET}`);\n return;\n }\n\n lines.push(` ${GRAY}\\u2192 ${tr.toolName} result:${RESET}`);\n let formatted = tr.content;\n try {\n formatted = JSON.stringify(JSON.parse(tr.content), null, 2);\n } catch {\n // use raw\n }\n const indent = ' ';\n for (const resultLine of formatted.split('\\n')) {\n for (const wl of this.wrapText(resultLine, width - indent.length)) {\n lines.push(`${indent}${GRAY}${wl}${RESET}`);\n }\n }\n }\n\n private appendMessageLines(lines: string[], msg: ChatMessage, width: number): void {\n if (msg.role === 'system') {\n for (const para of msg.content.split('\\n')) {\n for (const wl of this.wrapText(para, width - 2)) {\n lines.push(` ${GRAY}${wl}${RESET}`);\n }\n }\n return;\n }\n\n const isUser = msg.role === 'user';\n const label = isUser ? `${BLUE}You:${RESET} ` : `${GREEN}Assistant:${RESET} `;\n const labelWidth = isUser ? 5 : 12;\n const indent = ' '.repeat(labelWidth);\n let first = true;\n\n // Strip the \"—interrupted\" suffix from content for display\n const displayContent = msg.truncationReason\n ? msg.content.replace(/—interrupted$/, '')\n : msg.content;\n\n for (const para of displayContent.split('\\n')) {\n for (const wl of this.wrapText(para, width - labelWidth)) {\n lines.push(first ? label + wl : indent + wl);\n first = false;\n }\n }\n\n // Truncation indicator\n if (msg.truncationReason) {\n const reasonLabel = getTruncationLabel(msg.truncationReason, msg.truncatedAtMs);\n lines.push(`${indent}${YELLOW}[${reasonLabel}]${RESET}`);\n\n // Show unspoken text in dim italic gray\n const extra = getExtraContent(msg.content, msg.originalContent);\n if (extra) {\n for (const para of extra.split('\\n')) {\n for (const wl of this.wrapText(para, width - labelWidth)) {\n lines.push(`${indent}${DIM_ITALIC_GRAY}${wl}${RESET}`);\n }\n }\n }\n }\n }\n\n private appendStreamLines(lines: string[], width: number): void {\n const label = `${GREEN}Assistant:${RESET} `;\n const labelWidth = 12;\n const indent = ' '.repeat(labelWidth);\n\n if (!this.streamContent) {\n lines.push(label);\n return;\n }\n\n let first = true;\n for (const para of this.streamContent.split('\\n')) {\n for (const wl of this.wrapText(para, width - labelWidth)) {\n lines.push(first ? label + wl : indent + wl);\n first = false;\n }\n }\n }\n\n // ─── Debug display line building ──────────────────────────────────\n\n private buildDebugLines(): string[] {\n const lines: string[] = [];\n const dw = this.debugWidth();\n if (dw <= 0) return lines;\n\n for (const entry of this.debugEntries) {\n const color = entry.direction === 'in' ? ORANGE : LIGHT_BLUE;\n const arrow = entry.direction === 'in' ? '\\u25bc' : '\\u25b2'; // ▼ in, ▲ out\n const prefix = `${DIM}${entry.ts}${RESET} ${color}${arrow}${RESET} `;\n const prefixWidth = entry.ts.length + 3; // \"HH:MM:SS ▼ \"\n\n if (!this.expandDetails) {\n // Collapsed: single summary line, truncated\n const maxSummary = dw - prefixWidth;\n const summaryText = entry.summary.slice(0, maxSummary);\n lines.push(`${prefix}${color}${summaryText}${RESET}`);\n } else {\n // Expanded: summary + full detail\n lines.push(`${prefix}${color}${entry.summary}${RESET}`);\n const indent = ' '.repeat(prefixWidth);\n for (const detailLine of entry.detail.split('\\n')) {\n for (const wl of this.wrapText(detailLine, dw - prefixWidth)) {\n lines.push(`${indent}${color}${DIM}${wl}${RESET}`);\n }\n }\n lines.push(''); // blank line between expanded entries\n }\n }\n\n return lines;\n }\n\n // ─── Text utilities ───────────────────────────────────────────────\n\n private wrapText(text: string, maxWidth: number): string[] {\n if (maxWidth <= 0) maxWidth = 1;\n if (!text) return [''];\n if (text.length <= maxWidth) return [text];\n\n const words = text.split(' ');\n const result: string[] = [];\n let current = '';\n\n for (const word of words) {\n if (!current) {\n current = word;\n } else if (current.length + 1 + word.length <= maxWidth) {\n current += ' ' + word;\n } else {\n result.push(current);\n current = word;\n }\n }\n if (current) result.push(current);\n\n return result.length ? result : [''];\n }\n}\n\n// ─── Module-level helpers ─────────────────────────────────────────────────────\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : String(n);\n}\n\n/** Truncate a string (which may contain ANSI codes) to fit in maxCols visible characters */\nfunction truncateAnsi(s: string, maxCols: number): string {\n if (maxCols <= 0) return '';\n let visible = 0;\n let i = 0;\n while (i < s.length && visible < maxCols) {\n if (s[i] === '\\x1B') {\n // Skip ANSI sequence\n const end = s.indexOf('m', i);\n if (end !== -1) {\n i = end + 1;\n } else {\n i++;\n }\n } else {\n visible++;\n i++;\n }\n }\n // Append RESET to close any open ANSI sequences\n return s.slice(0, i) + RESET;\n}\n\n/** Redact audio PCM buffers from WebSocket messages for debug display (does not redact text content) */\nfunction redactAudio(msg: any): any {\n if (!msg || typeof msg !== 'object') return msg;\n const clone = { ...msg };\n // Redact voice.audio CUSTOM events\n if (clone.type === 'CUSTOM' && clone.value && typeof clone.value === 'object') {\n const name = clone.name || '';\n if (name === 'voice.audio' && clone.value.data) {\n clone.value = { ...clone.value, data: '[audio]' };\n }\n }\n return clone;\n}\n\n/** Build a one-line summary of a WebSocket message for the collapsed debug view */\nfunction buildDebugSummary(_direction: 'in' | 'out', msg: any): string {\n if (!msg || typeof msg !== 'object') return String(msg);\n\n if (msg.type === 'CUSTOM') {\n const name = msg.name || '?';\n // For audio, just show the event name\n if (name === 'voice.audio') return name;\n // For other CUSTOM events, show name + compact value hint\n if (msg.value && typeof msg.value === 'object') {\n const keys = Object.keys(msg.value);\n if (keys.length <= 3) {\n return `${name} {${keys.join(', ')}}`;\n }\n return `${name} {${keys.length} keys}`;\n }\n return name;\n }\n\n // Standard AG-UI events: TEXT_MESSAGE_CONTENT, TOOL_CALL_START, etc.\n const type = msg.type || '?';\n if (msg.delta) {\n const preview = msg.delta.length > 30 ? msg.delta.slice(0, 30) + '...' : msg.delta;\n return `${type} \"${preview}\"`;\n }\n if (msg.toolCallName) {\n return `${type} ${msg.toolCallName}`;\n }\n return type;\n}\n","/**\n * Audio I/O for CLI using SoX (Sound eXchange)\n *\n * Uses the `rec` command for microphone capture and `play` for audio playback.\n * SoX is cross-platform and available via:\n * macOS: brew install sox\n * Linux: apt install sox\n * Windows: choco install sox\n */\n\nimport { spawn, execSync, spawnSync, type ChildProcess } from 'child_process';\nimport { EventEmitter } from 'events';\nimport * as readline from 'readline';\n\nconst SAMPLE_RATE = 24000;\n// 100ms of PCM16 audio at 24kHz mono = 4800 bytes\nconst MIC_CHUNK_BYTES = 4800;\n\nexport interface AudioDevice {\n id: string;\n name: string;\n isDefault: boolean;\n}\n\n/** Check if SoX is installed and available */\nexport function checkSoxAvailable(): boolean {\n try {\n execSync('which sox', { stdio: 'pipe' });\n return true;\n } catch {\n return false;\n }\n}\n\n/** List audio input devices via SoX */\nexport async function listInputDevices(): Promise<AudioDevice[]> {\n return listDevices('rec');\n}\n\n/** List audio output devices via SoX */\nexport async function listOutputDevices(): Promise<AudioDevice[]> {\n return listDevices('play');\n}\n\nfunction listDevices(command: string): Promise<AudioDevice[]> {\n return new Promise((resolve) => {\n try {\n // spawnSync avoids shell interpolation — command and args are always separate\n const proc = spawnSync(command, ['--list-devices'], {\n encoding: 'utf-8',\n stdio: ['ignore', 'pipe', 'pipe'],\n timeout: 5000,\n });\n // SoX outputs device list to stderr; combine both streams to be safe\n const output = (proc.stdout ?? '') + (proc.stderr ?? '');\n\n const devices: AudioDevice[] = [];\n const lines = output.split('\\n');\n for (const line of lines) {\n // Parse lines like: \" Input Device 0 : Built-in Microphone\"\n // or \" Output Device 0 : Built-in Output\"\n const match = line.match(/(?:Input|Output)\\s+Device\\s+(\\d+)\\s*:\\s*(.+)/i);\n if (match && match[1] && match[2]) {\n devices.push({\n id: match[1],\n name: match[2].trim(),\n isDefault: devices.length === 0, // First device is typically the default\n });\n }\n }\n\n // If SoX didn't give us devices, return a default entry\n if (devices.length === 0) {\n devices.push({ id: 'default', name: 'System Default', isDefault: true });\n }\n\n resolve(devices);\n } catch {\n // Fallback to system default\n resolve([{ id: 'default', name: 'System Default', isDefault: true }]);\n }\n });\n}\n\n/** Interactively select an audio device */\nexport async function selectDevice(devices: AudioDevice[], label: string): Promise<AudioDevice> {\n if (devices.length <= 1) {\n return devices[0]!;\n }\n\n const rl = readline.createInterface({\n input: process.stdin,\n output: process.stderr,\n terminal: true,\n });\n\n process.stderr.write(`\\n ${label}:\\n`);\n for (let i = 0; i < devices.length; i++) {\n const dev = devices[i]!;\n const marker = dev.isDefault ? ' (default)' : '';\n process.stderr.write(` ${i + 1}. ${dev.name}${marker}\\n`);\n }\n\n return new Promise((resolve) => {\n const defaultIdx = devices.findIndex((d) => d.isDefault);\n const defaultNum = defaultIdx >= 0 ? defaultIdx + 1 : 1;\n\n rl.question(` Select [${defaultNum}]: `, (answer) => {\n rl.close();\n const num = answer.trim() ? parseInt(answer.trim(), 10) : defaultNum;\n const idx = Math.max(0, Math.min(devices.length - 1, num - 1));\n resolve(devices[idx]!);\n });\n });\n}\n\n/**\n * Microphone capture via SoX `rec`.\n * Streams raw PCM16 signed 16-bit LE mono audio at 24kHz.\n */\nexport class MicCapture {\n private process: ChildProcess | null = null;\n private onData: (pcm16: Buffer) => void;\n private buffer = Buffer.alloc(0);\n\n constructor(onData: (pcm16: Buffer) => void) {\n this.onData = onData;\n }\n\n /** Start recording from the microphone */\n start(deviceId?: string): void {\n const args = [\n '-q', // quiet\n '-t',\n 'raw', // raw PCM output\n '-r',\n String(SAMPLE_RATE),\n '-e',\n 'signed-integer',\n '-b',\n '16', // 16-bit\n '-c',\n '1', // mono\n '-L', // little-endian\n '-', // stdout\n ];\n\n const env = { ...process.env };\n if (deviceId && deviceId !== 'default') {\n env.AUDIODEV = deviceId;\n }\n\n this.process = spawn('rec', args, {\n env,\n stdio: ['ignore', 'pipe', 'pipe'],\n });\n\n this.process.stdout?.on('data', (data: Buffer) => {\n // Accumulate data and emit in consistent chunk sizes\n this.buffer = Buffer.concat([this.buffer, data]);\n while (this.buffer.length >= MIC_CHUNK_BYTES) {\n const chunk = this.buffer.subarray(0, MIC_CHUNK_BYTES);\n this.buffer = this.buffer.subarray(MIC_CHUNK_BYTES);\n this.onData(Buffer.from(chunk));\n }\n });\n\n this.process.stderr?.on('data', (data: Buffer) => {\n // SoX outputs warnings/errors to stderr - ignore unless debugging\n const msg = data.toString().trim();\n if (msg && !msg.includes('WARN')) {\n process.stderr.write(`[mic] ${msg}\\n`);\n }\n });\n\n this.process.on('error', (err) => {\n process.stderr.write(`[mic] Process error: ${err.message}\\n`);\n });\n }\n\n /** Stop recording */\n stop(): void {\n if (this.process) {\n this.process.kill('SIGTERM');\n this.process = null;\n }\n this.buffer = Buffer.alloc(0);\n }\n}\n\n/**\n * Audio playback via SoX `play`.\n * Accepts raw PCM16 signed 16-bit LE mono audio at 24kHz.\n *\n * Streams audio to SoX's stdin so playback begins immediately on the first\n * chunk — no waiting for the full response. Queues back-to-back responses\n * so a second response never kills the first mid-playback.\n *\n * Events:\n * - 'playing': SoX process spawned for a response\n * - 'done': All queued responses finished (or playback was stopped)\n */\nexport class AudioPlayer extends EventEmitter {\n private process: ChildProcess | null = null;\n private deviceId?: string;\n\n // When true, we own the SoX process's stdin and are actively streaming to it.\n // When false with a process, the stdin has been closed and SoX is draining.\n private streaming = false;\n\n // Buffer chunks when another response is already playing\n private pendingChunks: Buffer[] = [];\n private pendingBytes = 0;\n\n // Queue of complete response buffers waiting to play\n private queue: { audio: Buffer; messageId?: string }[] = [];\n\n // Playback position tracking for barge-in\n private currentMessageId?: string;\n private playbackStartTime = 0; // Date.now() when SoX started\n private bytesWritten = 0; // total bytes piped to SoX for duration estimation\n\n constructor(deviceId?: string) {\n super();\n this.deviceId = deviceId;\n }\n\n /** Check if audio is currently playing or queued */\n get isPlaying(): boolean {\n return this.process !== null || this.queue.length > 0;\n }\n\n /** Get the message ID of the currently playing audio */\n get playingMessageId(): string | undefined {\n return this.currentMessageId;\n }\n\n /** Duration of audio written so far in ms */\n private get currentDurationMs(): number {\n // PCM16 mono 24kHz = 48000 bytes/sec\n return (this.bytesWritten / (SAMPLE_RATE * 2)) * 1000;\n }\n\n /**\n * Estimate current playback position in milliseconds.\n * Uses wall-clock time since SoX started playing.\n */\n getPlaybackTimeMs(): number | null {\n if (!this.process || this.playbackStartTime === 0) return null;\n const elapsed = Date.now() - this.playbackStartTime;\n return Math.min(elapsed, this.currentDurationMs);\n }\n\n /**\n * Stream PCM16 audio data for playback.\n * On the first chunk, spawns SoX and begins playback immediately.\n */\n write(pcm16: Buffer): void {\n if (this.process && !this.streaming) {\n // A previous response is still playing/draining — buffer for later\n this.pendingChunks.push(pcm16);\n this.pendingBytes += pcm16.length;\n return;\n }\n\n if (!this.process) {\n this.spawnSoxProcess();\n }\n\n this.process!.stdin!.write(pcm16);\n this.bytesWritten += pcm16.length;\n }\n\n /**\n * End the current audio response.\n * If streaming, closes stdin to let SoX finish playing.\n * If buffering behind another response, adds to the queue.\n */\n endResponse(messageId?: string): void {\n if (this.streaming && this.process) {\n this.currentMessageId = messageId;\n this.streaming = false;\n this.process.stdin!.end();\n } else if (this.pendingChunks.length > 0) {\n const audio = Buffer.concat(this.pendingChunks);\n this.pendingChunks = [];\n this.pendingBytes = 0;\n this.queue.push({ audio, messageId });\n }\n }\n\n /** Stop current playback, discard all queued audio */\n stop(): void {\n this.pendingChunks = [];\n this.pendingBytes = 0;\n this.queue = [];\n this.streaming = false;\n\n const wasPlaying = this.process !== null;\n if (this.process) {\n try {\n this.process.stdin?.destroy();\n this.process.kill('SIGTERM');\n } catch {\n // Ignore\n }\n this.process = null;\n }\n this.currentMessageId = undefined;\n this.playbackStartTime = 0;\n this.bytesWritten = 0;\n if (wasPlaying) {\n this.emit('done');\n }\n }\n\n /** Spawn a SoX `play` process reading raw PCM from stdin */\n private spawnSoxProcess(): void {\n this.bytesWritten = 0;\n this.currentMessageId = undefined;\n\n const args = [\n '-q', // quiet\n '-t',\n 'raw',\n '-r',\n String(SAMPLE_RATE),\n '-e',\n 'signed-integer',\n '-b',\n '16',\n '-c',\n '1',\n '-L', // little-endian\n '-', // read from stdin\n ];\n\n const env = { ...process.env };\n if (this.deviceId && this.deviceId !== 'default') {\n env.AUDIODEV = this.deviceId;\n }\n\n const proc = spawn('play', args, {\n env,\n stdio: ['pipe', 'pipe', 'pipe'],\n });\n\n proc.on('error', (err) => {\n process.stderr.write(`[player] Process error: ${err.message}\\n`);\n });\n\n proc.on('exit', (code, _signal) => {\n // 143 = SIGTERM (normal stop/interrupt)\n if (code !== null && code !== 0 && code !== 143) {\n process.stderr.write(`[player] SoX exited with code ${code}\\n`);\n }\n if (this.process === proc) {\n this.process = null;\n this.streaming = false;\n if (this.queue.length > 0) {\n const next = this.queue.shift()!;\n this.playQueued(next.audio, next.messageId);\n } else {\n this.emit('done');\n }\n }\n });\n\n proc.stderr?.on('data', (data: Buffer) => {\n const msg = data.toString().trim();\n if (msg) {\n process.stderr.write(`[player:sox] ${msg}\\n`);\n }\n });\n\n proc.stdout?.resume();\n\n this.process = proc;\n this.streaming = true;\n this.playbackStartTime = Date.now();\n this.emit('playing');\n }\n\n /** Play a complete pre-buffered response (from the queue) */\n private playQueued(audio: Buffer, messageId?: string): void {\n this.spawnSoxProcess();\n this.currentMessageId = messageId;\n this.process!.stdin!.write(audio);\n this.bytesWritten = audio.length;\n this.process!.stdin!.end();\n this.streaming = false;\n }\n}\n","/**\n * Concierge chat command — interactive chat with the global concierge agent.\n *\n * Supports the same modes as workspace manager chat (text, realtime, voice)\n * but without requiring a workspace.\n */\n\nimport { formatTimestamp, selectFromList } from '../cli-utils';\nimport {\n createConciergeChat,\n getConciergeChat,\n getConciergeChatMessages,\n listConciergeChats,\n type ConciergeChat,\n} from '../lib/concierge-api';\nimport { requireAuth, type AuthenticatedContext } from '../lib/context';\nimport { CLIError } from '../lib/errors';\nimport type { CommandHandlerContext } from '../lib/types';\nimport { runChatSession, type ChatSession } from '../lib/chat-session';\n\nexport async function conciergeCommand(hctx: CommandHandlerContext): Promise<void> {\n const ctx = requireAuth(hctx.ctx);\n const { args } = hctx;\n const chatIdArg = typeof args['chat-id'] === 'string' ? args['chat-id'] : undefined;\n const message = typeof args.message === 'string' ? args.message : undefined;\n\n const chat = await getOrCreateConciergeChat(ctx, chatIdArg, !!message);\n const session = buildConciergeSession(ctx, chat);\n await runChatSession(session, args);\n}\n\nfunction buildConciergeSession(ctx: AuthenticatedContext, chat: ConciergeChat): ChatSession {\n const wsBase = ctx.envConfig.apiUrl.replace(/^https:/, 'wss:').replace(/^http:/, 'ws:');\n return {\n ctx,\n chatId: chat.id,\n chatUuid: chat.uuid,\n chatTitle: chat.title || chat.uuid,\n aguiEndpointUrl: `${ctx.envConfig.apiUrl}/api/v2/concierge/chats/${chat.id}/chat/agui`,\n wsUrl: `${wsBase}/api/v2/concierge/voice/stream-ws`,\n loadMessages: () => getConciergeChatMessages(ctx, chat.id).catch(() => []),\n label: 'Concierge',\n model: undefined, // concierge doesn't send model field\n };\n}\n\nasync function getOrCreateConciergeChat(\n ctx: AuthenticatedContext,\n chatIdArg: string | undefined,\n skipSelection: boolean\n): Promise<ConciergeChat> {\n if (chatIdArg) {\n const id = Number(chatIdArg);\n if (isNaN(id)) throw new CLIError('--chat-id must be a number');\n return getConciergeChat(ctx, id);\n }\n\n if (skipSelection) {\n const chat = await createConciergeChat(ctx);\n process.stderr.write(`Created concierge chat #${chat.id}\\n`);\n return chat;\n }\n\n const chats = await listConciergeChats(ctx);\n\n const { item: selectedChat, isNew } = await selectFromList(chats, {\n title: 'Select a concierge chat or create a new one',\n labelFn: (c) => c.title || `Chat ${c.uuid.slice(0, 8)}...`,\n detailFn: (c) => formatTimestamp(c.updatedAt),\n emptyMessage: 'No existing concierge chats.',\n allowNew: true,\n newLabel: '+ Start new chat',\n });\n\n if (!selectedChat && !isNew) {\n throw new CLIError('No chat selected.');\n }\n\n if (isNew) {\n const chat = await createConciergeChat(ctx);\n process.stderr.write(`Created concierge chat #${chat.id}\\n`);\n return chat;\n }\n return selectedChat!;\n}\n","import { existsSync, mkdirSync, writeFileSync, readFileSync } from 'fs';\nimport { execSync } from 'child_process';\nimport { join } from 'path';\nimport type { AuthenticatedContext } from '../lib/context';\nimport { CLIError } from '../lib/errors';\nimport { stderr } from '../lib/output';\n\nexport async function devImportLocalCommand(\n ctx: AuthenticatedContext,\n workspace: string\n): Promise<void> {\n stderr(`Exporting workspace ${workspace}...`);\n const exportData = await ctx.apiClient.exportWorkspace(workspace);\n\n stderr('Export successful!');\n stderr(` Workflows: ${(exportData.workflows || []).length}`);\n stderr(` Tasks: ${(exportData.tasks || []).length}`);\n stderr(` Data Types: ${(exportData.dataTypes || []).length}`);\n stderr(` Sites: ${(exportData.sites || []).length}`);\n\n const slug = workspace.slice(0, 8);\n const importCacheDir = join(ctx.credentialsManager.getCacheDir(), 'imports');\n if (!existsSync(importCacheDir)) {\n mkdirSync(importCacheDir, { recursive: true });\n }\n const filename = `ws-${slug}-${workspace}.json`;\n const filepath = join(importCacheDir, filename);\n writeFileSync(filepath, JSON.stringify(exportData, null, 2));\n stderr(`Saved to: ${filepath}`);\n\n stderr('Running dev:restore...');\n const rootDir = findProjectRoot();\n const relativePath = filepath.replace(rootDir + '/', '');\n\n try {\n const result = execSync(`yarn dev:restore ${relativePath}`, {\n cwd: rootDir,\n stdio: 'pipe',\n encoding: 'utf-8',\n });\n process.stderr.write(result);\n\n const failed =\n (result.includes('Failed/Skipped: ') && !result.includes('Failed/Skipped: 0')) ||\n result.includes('Successfully restored: 0');\n\n if (failed) throw new CLIError('Import failed');\n } catch (error: unknown) {\n if (error instanceof CLIError) throw error;\n const execError = error as { stdout?: string; stderr?: string };\n if (execError.stdout) process.stderr.write(execError.stdout);\n if (execError.stderr) process.stderr.write(execError.stderr);\n throw new CLIError('dev:restore failed');\n }\n\n stderr(`Import complete: ${workspace}`);\n}\n\nfunction findProjectRoot(): string {\n let dir = process.cwd();\n while (dir !== '/') {\n const pkgPath = join(dir, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n if (pkg.workspaces) return dir;\n } catch {\n // continue\n }\n }\n dir = join(dir, '..');\n }\n return process.cwd();\n}\n","import { GravityRailClient } from '@gravity-rail/sdk';\nimport { performOAuthFlow } from '../cli-utils';\nimport type { CommandContext } from '../lib/context';\nimport { stderr } from '../lib/output';\n\nexport async function loginCommand(ctx: CommandContext): Promise<void> {\n const { accessToken } = await performOAuthFlow({\n env: ctx.env,\n envConfig: ctx.envConfig,\n credentialsManager: ctx.credentialsManager,\n });\n\n const apiClient = new GravityRailClient(accessToken, ctx.envConfig.apiUrl);\n const account = await apiClient.getUserAccount();\n stderr(`Logged in as ${account.name} (${account.email})`);\n}\n\nexport async function logoutCommand(ctx: CommandContext): Promise<void> {\n ctx.credentialsManager.clear(ctx.env);\n stderr(`Credentials cleared for ${ctx.env}`);\n}\n","import type { Chat, GravityRailClient } from '@gravity-rail/sdk';\nimport { formatTimestamp, selectFromList } from '../cli-utils';\nimport { CLIError } from '../lib/errors';\nimport { requireAuth, type AuthenticatedContext } from '../lib/context';\nimport type { CommandHandlerContext } from '../lib/types';\nimport { runChatSession, type ChatSession } from '../lib/chat-session';\n\n// ─── Entry point ─────────────────────────────────────────────────────────────\n\nexport async function manageCommand(hctx: CommandHandlerContext): Promise<void> {\n const ctx = requireAuth(hctx.ctx);\n const { workspace, args } = hctx;\n const asMember = typeof args['as-member'] === 'string' ? args['as-member'] : undefined;\n const chatIdArg = typeof args['chat-id'] === 'string' ? args['chat-id'] : undefined;\n const message = typeof args.message === 'string' ? args.message : undefined;\n\n const chat = await getOrCreateChat(ctx, workspace, chatIdArg, asMember, 'manager', !!message);\n const session = buildWorkspaceSession(ctx, workspace, chat, 'Workspace Manager');\n await runChatSession(session, args);\n}\n\nexport async function chatCommand(hctx: CommandHandlerContext): Promise<void> {\n const ctx = requireAuth(hctx.ctx);\n const { workspace, args } = hctx;\n const chatIdArg = typeof args['chat-id'] === 'string' ? args['chat-id'] : undefined;\n const workflowId = typeof args.workflow === 'string' ? args.workflow : undefined;\n const memberId = typeof args.member === 'string' ? args.member : undefined;\n\n let chat: Chat;\n if (chatIdArg) {\n const id = Number(chatIdArg);\n if (isNaN(id)) throw new CLIError('--chat-id must be a number');\n chat = await ctx.apiClient.getChat(workspace, id);\n } else if (workflowId) {\n chat = await createAssignmentChat(ctx.apiClient, workspace, Number(workflowId), memberId);\n } else if (memberId) {\n chat = await createMemberChat(ctx.apiClient, workspace, memberId);\n } else {\n throw new CLIError(\n 'Specify --workflow <id>, --member <id>, or --chat-id <id>.\\n' +\n 'Use \"gr manage\" for workspace manager chats.'\n );\n }\n\n const session = buildWorkspaceSession(ctx, workspace, chat, 'Chat');\n await runChatSession(session, args);\n}\n\n// ─── Session builder ─────────────────────────────────────────────────────────\n\nfunction buildWorkspaceSession(\n ctx: AuthenticatedContext,\n workspace: string,\n chat: Chat,\n label: string\n): ChatSession {\n const wsBase = ctx.envConfig.apiUrl.replace(/^https:/, 'wss:').replace(/^http:/, 'ws:');\n return {\n ctx,\n chatId: chat.id,\n chatUuid: chat.uuid,\n chatTitle: chat.title || chat.uuid,\n aguiEndpointUrl: `${ctx.envConfig.apiUrl}/api/v2/w/${workspace}/web-chat/${chat.id}/chat/agui`,\n wsUrl: `${wsBase}/api/v2/w/${workspace}/realtime/stream-ws`,\n loadMessages: () => ctx.apiClient.getChatMessages(workspace, chat.id, 50).catch(() => []),\n label,\n model: 'manager',\n };\n}\n\n// ─── Chat selection ──────────────────────────────────────────────────────────\n\nasync function getOrCreateChat(\n ctx: AuthenticatedContext,\n workspace: string,\n chatIdArg: string | undefined,\n asMemberId: string | undefined,\n chatType: 'manager' | 'assignment' | 'member' | 'contributor' | 'developer',\n skipSelection: boolean = false\n): Promise<Chat> {\n if (chatIdArg) {\n const chatId = Number(chatIdArg);\n if (isNaN(chatId)) throw new CLIError('--chat-id must be a number');\n return ctx.apiClient.getChat(workspace, chatId);\n }\n\n if (skipSelection) {\n return createManagerChat(ctx.apiClient, workspace, asMemberId);\n }\n\n const chatsResponse = await ctx.apiClient.getChats(workspace, {\n chatType,\n sortBy: 'updatedAt',\n sortOrder: 'desc',\n pageSize: 20,\n });\n const chats = chatsResponse.items || [];\n\n const { item: selectedChat, isNew } = await selectFromList(chats, {\n title: 'Select a chat or create a new one',\n labelFn: (chat) => chat.title || `Chat ${chat.uuid.slice(0, 8)}...`,\n detailFn: (chat) => {\n const time = formatTimestamp(chat.updatedAt);\n const msgCount = chat.messageCount || 0;\n return `${msgCount} msg${msgCount !== 1 ? 's' : ''} - ${time}`;\n },\n emptyMessage: 'No existing chats.',\n allowNew: true,\n newLabel: '+ Start new chat',\n });\n\n if (!selectedChat && !isNew) {\n throw new CLIError('No chat selected.');\n }\n\n if (isNew) {\n return createManagerChat(ctx.apiClient, workspace, asMemberId);\n }\n return selectedChat!;\n}\n\nasync function createManagerChat(\n apiClient: GravityRailClient,\n workspace: string,\n asMemberId: string | undefined\n): Promise<Chat> {\n const data: Record<string, any> = {\n chatType: 'manager',\n channel: 'web-chat',\n };\n if (asMemberId) {\n data.memberId = Number(asMemberId);\n }\n const chat = await apiClient.createChat(workspace, data as any);\n process.stderr.write(`Created chat #${chat.id}\\n`);\n return chat;\n}\n\nasync function createAssignmentChat(\n apiClient: GravityRailClient,\n workspace: string,\n workflowId: number,\n asMemberId: string | undefined\n): Promise<Chat> {\n if (isNaN(workflowId)) throw new CLIError('--workflow must be a number');\n const data: Record<string, any> = {\n chatType: 'assignment',\n channel: 'web-chat',\n workflowId,\n };\n if (asMemberId) {\n data.memberId = Number(asMemberId);\n }\n const chat = await apiClient.createChat(workspace, data as any);\n process.stderr.write(`Created assignment chat #${chat.id} (workflow ${workflowId})\\n`);\n return chat;\n}\n\nasync function createMemberChat(\n apiClient: GravityRailClient,\n workspace: string,\n memberId: string\n): Promise<Chat> {\n const id = Number(memberId);\n if (isNaN(id)) throw new CLIError('--member must be a number');\n const data: Record<string, any> = {\n chatType: 'member',\n channel: 'web-chat',\n memberId: id,\n };\n const chat = await apiClient.createChat(workspace, data as any);\n process.stderr.write(`Created DM chat #${chat.id} (member ${memberId})\\n`);\n return chat;\n}\n","import type { AuthenticatedContext } from '../lib/context';\nimport { outputData, type TableColumn } from '../lib/output';\n\n// The return type of getMyOrganizations references the admin-only\n// AdminAccountOrgMembership type, which is not re-exported from the public\n// @gravity-rail/sdk surface. We infer the element shape from the runtime\n// method signature here.\ntype OrgMembership = Awaited<\n ReturnType<AuthenticatedContext['apiClient']['getMyOrganizations']>\n>[number];\n\nconst COLUMNS: TableColumn<OrgMembership>[] = [\n { header: 'NAME', getValue: (o) => o.organizationName || '', maxWidth: 35 },\n { header: 'SLUG', getValue: (o) => o.organizationSlug || '', maxWidth: 25 },\n { header: 'UUID', getValue: (o) => o.organizationUuid },\n { header: 'ROLE', getValue: (o) => o.role || '' },\n];\n\nexport async function organizationsListCommand(ctx: AuthenticatedContext): Promise<void> {\n const organizations = await ctx.apiClient.getMyOrganizations();\n outputData(organizations, ctx, COLUMNS);\n}\n","import type { Account } from '@gravity-rail/sdk';\nimport type { AuthenticatedContext } from '../lib/context';\nimport { outputSingle, type TableColumn } from '../lib/output';\n\nconst COLUMNS: TableColumn<Account>[] = [\n { header: 'NAME', getValue: (a) => a.name || '', maxWidth: 30 },\n { header: 'EMAIL', getValue: (a) => a.email || '', maxWidth: 40 },\n { header: 'UUID', getValue: (a) => a.uuid },\n { header: 'SUPERUSER', getValue: (a) => (a.isSuperuser ? 'yes' : 'no') },\n];\n\nexport async function whoamiCommand(ctx: AuthenticatedContext): Promise<void> {\n const account = await ctx.apiClient.getUserAccount();\n outputSingle(account, ctx, COLUMNS);\n}\n"],"mappings":"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ACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEU;EAEV,YAAY,QAA4BA,UAAiB,aAA4B;AAClF,UAAM,QAAQA,UAAS,WAAW;AAClC,SAAK,WAAW,IAAI,SAAS,QAAQA,UAAS,WAAW;AACzD,qBAAiB,MAAM,KAAK,QAAQ;EACvC;;;;EAKS,gBAAgB,YAAgC;AACtD,UAAM,gBAAgB,UAAU;AAChC,QAAI,OAAO,KAAK,SAAS,oBAAoB,YAAY;AACtD,WAAK,SAAS,gBAAgB,UAAU;IAC3C;EACH;AACH;;;AEtLA,SAAS,eAAe;;;ACcjB,SAAS,mBAAmB,UAAiC;AACjE,MAAI,SAAU,QAAO;AACrB,SAAO,QAAQ,OAAO,QAAQ,UAAU;AAC3C;AAgBO,SAAS,WACb,MACA,MACA,SACA,gBACA,aACK;AACL,MAAI;AACJ,MAAI;AACJ,MAAI;AAEJ,MAAI,aAAa,IAAI,GAAG;AAErB,YAAQ,KAAK;AACb,WAAO,KAAK;AACZ,mBAAe,KAAK,eAAe;AAAA,EACtC,OAAO;AAEJ,YAAQ,YAAY,IAAI;AACxB,WAAO,kBAAkB,sBAAsB,IAAI;AACnD,mBAAe,eAAe;AAAA,EACjC;AAEA,QAAM,UAAU,wBAAwB,MAAM,YAAY;AAC1D,MAAI,SAAS;AACV,YAAQ,OAAO,MAAM,UAAU,IAAI;AAAA,EACtC;AAEA,UAAQ,KAAK,cAAc;AAAA,IACxB,KAAK;AACF,cAAQ,OAAO,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,IAAI,IAAI;AAC1D;AAAA,IACH,KAAK;AACF,iBAAW,QAAQ,OAAO;AACvB,gBAAQ,OAAO,MAAM,KAAK,UAAU,IAAI,IAAI,IAAI;AAAA,MACnD;AACA;AAAA,IACH,KAAK;AACF,UAAI,SAAS;AACV,mBAAW,OAAO,OAAO;AAAA,MAC5B,OAAO;AACJ,gBAAQ,OAAO,MAAM,KAAK,UAAU,OAAO,MAAM,CAAC,IAAI,IAAI;AAAA,MAC7D;AACA;AAAA,EACN;AACH;AAGO,SAAS,aAAgB,MAAS,MAAqB,SAAkC;AAC7F,UAAQ,KAAK,cAAc;AAAA,IACxB,KAAK;AACF,cAAQ,OAAO,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,IAAI;AACzD;AAAA,IACH,KAAK;AACF,cAAQ,OAAO,MAAM,KAAK,UAAU,IAAI,IAAI,IAAI;AAChD;AAAA,IACH,KAAK;AACF,UAAI,SAAS;AACV,mBAAW,CAAC,IAAI,GAAG,OAAO;AAAA,MAC7B,OAAO;AACJ,gBAAQ,OAAO,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,IAAI;AAAA,MAC5D;AACA;AAAA,EACN;AACH;AAGO,IAAM,MAAM;AAAA,EAChB,IAAI,OAAyB,EAAE,QAAQ,MAAM,UAAU,CAAC,SAAS,OAAO,KAAK,MAAM,EAAE,EAAE;AAAA,EACvF,MAAM,OAAyB,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAS,KAAK,QAAQ,GAAG;AAAA,EACrF,MAAM,OAAyB,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAS,KAAK,QAAQ,GAAG;AAAA,EACrF,QAAQ,OAAyB,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAS,KAAK,UAAU,GAAG;AAAA,EAC3F,SAAS,OAAyB;AAAA,IAC/B,QAAQ;AAAA,IACR,UAAU,CAAC,SAAS,KAAK,cAAc;AAAA,EAC1C;AAAA,EACA,SAAS,OAAyB;AAAA,IAC/B,QAAQ;AAAA,IACR,UAAU,CAAC,SAAS,KAAK,cAAc;AAAA,EAC1C;AAAA,EACA,aAAa,OAAyB;AAAA,IACnC,QAAQ;AAAA,IACR,UAAU,CAAC,SAAS,KAAK,eAAe;AAAA,EAC3C;AAAA,EACA,SAAS,OAAyB;AAAA,IAC/B,QAAQ;AAAA,IACR,UAAU,CAAC,SAAS,OAAO,KAAK,WAAW,EAAE;AAAA,EAChD;AACH;AAGO,SAAS,OAAO,KAAmB;AACvC,UAAQ,OAAO,MAAM,MAAM,IAAI;AAClC;;;ACtIA,SAAS,gBAAgB;AACzB,SAAS,YAAY,WAAW,cAAc,UAAU,qBAAqB;AAC7E,SAAS,SAAS,YAAY;AAQ9B,SAAS,oBAA4B;AAClC,MAAI,MAAM,QAAQ,IAAI;AACtB,SAAO,QAAQ,QAAQ,GAAG,GAAG;AAC1B,UAAM,YAAY,KAAK,KAAK,iBAAiB;AAC7C,QAAI,WAAW,SAAS,EAAG,QAAO;AAClC,UAAM,QAAQ,GAAG;AAAA,EACpB;AACA,QAAM,IAAI,MAAM,qDAAqD;AACxE;AAEA,IAAM,sBAAsB;AAC5B,IAAM,mBAAmB,KAAK,KAAK;AAEnC,SAAS,eAAmC;AACzC,MAAI,MAAM,QAAQ,IAAI;AACtB,SAAO,QAAQ,QAAQ,GAAG,GAAG;AAC1B,QAAI,WAAW,KAAK,KAAK,MAAM,CAAC,GAAG;AAChC,aAAO;AAAA,IACV;AACA,UAAM,QAAQ,GAAG;AAAA,EACpB;AACA,SAAO;AACV;AAEA,SAAS,oBAAoB,WAA2B;AACrD,QAAM,WAAW,aAAa;AAC9B,QAAM,OAAO,YAAY,QAAQ,IAAI;AACrC,SAAO,KAAK,MAAM,qBAAqB,SAAS;AACnD;AAEA,SAAS,oBAAoB,WAA2B;AACrD,QAAM,eAAe,aAAa,SAAS;AAC3C,QAAM,MAAM,mBAAmB,YAAY;AAC3C,MAAI;AACD,WAAO,SAAS,KAAK,EAAE,UAAU,SAAS,SAAS,IAAM,CAAC;AAAA,EAC7D,SAAS,KAAc;AACpB,UAAM,UAAU,eAAe,QAAQ,IAAI,UAAU,OAAO,GAAG;AAC/D,UAAM,IAAI;AAAA,MACP,uDAAuD,SAAS,MAAM,OAAO;AAAA,IAChF;AAAA,EACH;AACH;AAMO,SAAS,sBAAsB,WAA2B;AAC9D,QAAM,WAAW,oBAAoB,SAAS;AAC9C,QAAM,YAAY,KAAK,UAAU,iBAAiB;AAGlD,MAAI,WAAW,SAAS,GAAG;AACxB,UAAM,OAAO,SAAS,SAAS;AAC/B,UAAM,MAAM,KAAK,IAAI,IAAI,KAAK;AAC9B,QAAI,MAAM,kBAAkB;AACzB,aAAO;AAAA,IACV;AAAA,EACH;AAGA,QAAM,UAAU,oBAAoB,SAAS;AAC7C,YAAU,UAAU,EAAE,WAAW,KAAK,CAAC;AACvC,gBAAc,WAAW,SAAS,OAAO;AACzC,SAAO;AACV;AAEO,SAAS,qBAAqB,OAAe,eAA0C;AAC3F,QAAM,WAAW,iBAAiB,kBAAkB;AACpD,MAAI;AACJ,MAAI;AACD,WAAO,KAAK,MAAM,aAAa,UAAU,OAAO,CAAC;AAAA,EACpD,QAAQ;AACL,UAAM,IAAI,MAAM,kCAAkC,QAAQ,EAAE;AAAA,EAC/D;AAEA,QAAM,QAAQ,MAAM,MAAM,GAAG;AAC7B,MAAI,MAAM,WAAW,GAAG;AAErB,UAAM,WAAW,KAAK;AACtB,UAAM,UAAU,WAAW,MAAM,CAAC,CAAE;AACpC,QAAI,CAAC,SAAS,OAAO;AAClB,YAAM,IAAI,MAAM,kBAAkB,MAAM,CAAC,CAAC,gCAAgC;AAAA,IAC7E;AACA,WAAO,EAAE,OAAO,QAAQ,MAAM;AAAA,EACjC,OAAO;AAEJ,UAAM,CAAC,QAAQ,UAAU,IAAI;AAC7B,UAAM,KAAK,KAAK,MAAO;AAGvB,QAAI,CAAC,IAAI;AACN,YAAM,IAAI,MAAM,oBAAoB,MAAM,gCAAgC;AAAA,IAC7E;AACA,UAAM,SAAS,GAAG,UAAU,UAAW;AACvC,QAAI,CAAC,QAAQ,OAAO;AACjB,YAAM,IAAI,MAAM,iBAAiB,UAAU,6BAA6B,MAAM,GAAG;AAAA,IACpF;AACA,WAAO,EAAE,OAAO,OAAO,OAAO,eAAe,GAAG,cAAc;AAAA,EACjE;AACH;;;AFhGA,eAAe,gBACZ,KACA,OACqC;AACrC,MAAI,CAAC,MAAM,aAAc,QAAO;AAChC,QAAM,YAAY,MAAM;AAAA,IACrB,IAAI;AAAA,IACJ;AAAA,IACA,IAAI;AAAA,IACJ,IAAI;AAAA,EACP;AACA,MAAI,CAAC,WAAW,YAAa,QAAO;AACpC,QAAM,YAAY,IAAI,UAAkB,UAAU,aAAa,IAAI,UAAU,MAAM;AACnF,SAAO,EAAE,GAAG,KAAK,aAAa,UAAU,aAAa,UAAU;AAClE;AAkCO,SAAS,cAAc,MAAqC;AAChE,QAAM,YAAY,qBAAqB,KAAK,GAAG;AAC/C,QAAM,qBAAqB,IAAI,mBAAmB,QAAQ,GAAG,UAAU,MAAM;AAC7E,SAAO;AAAA,IACJ,KAAK,KAAK;AAAA,IACV;AAAA,IACA,cAAc,mBAAmB,KAAK,YAAY;AAAA,IAClD,SAAS,KAAK,WAAW;AAAA,IACzB,YAAY,KAAK,cAAc;AAAA,IAC/B;AAAA,EACH;AACH;AAGA,eAAsB,2BACnB,MAC8B;AAE9B,QAAM,MAAM,cAAc,IAAI;AAG9B,MAAI,KAAK,OAAO;AACb,QAAI;AACJ,QAAI,KAAK,IAAI,WAAW,YAAY,GAAG;AACpC,YAAM,YAAY,KAAK,IAAI,MAAM,aAAa,MAAM;AACpD,sBAAgB,sBAAsB,SAAS;AAAA,IAClD;AACA,UAAM,EAAE,OAAO,cAAc,IAAI,qBAAqB,KAAK,OAAO,aAAa;AAC/E,UAAM,YAAY,IAAI,UAAkB,OAAO,IAAI,UAAU,MAAM;AACnE,WAAO,EAAE,GAAG,KAAK,aAAa,OAAO,WAAW,gBAAgB,cAAc;AAAA,EACjF;AAGA,QAAM,SAAS,QAAQ,IAAI;AAC3B,MAAI,QAAQ;AACT,UAAM,YAAY,IAAI,UAAkB,QAAQ,IAAI,UAAU,MAAM;AACpE,WAAO,EAAE,GAAG,KAAK,aAAa,QAAQ,UAAU;AAAA,EACnD;AAGA,QAAM,QAAQ,IAAI,mBAAmB,KAAK,IAAI,GAAG;AACjD,MAAI,OAAO,aAAa;AACrB,UAAM,SAAS,IAAI,KAAK;AACxB,UAAM,aACH,CAAC,MAAM,aAAa,IAAI,KAAK,MAAM,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM;AAC/E,QAAI,YAAY;AACb,YAAM,YAAY,IAAI,UAAkB,MAAM,aAAa,IAAI,UAAU,MAAM;AAC/E,aAAO,EAAE,GAAG,KAAK,aAAa,MAAM,aAAa,UAAU;AAAA,IAC9D;AAGA,UAAM,YAAY,MAAM,gBAAgB,KAAK,KAAK;AAClD,QAAI,UAAW,QAAO;AAAA,EACzB;AAEA,QAAM,IAAI,kBAAkB;AAC/B;AAaO,SAAS,YAAY,KAAkE;AAC3F,MAAI,EAAE,eAAe,MAAM;AACxB,UAAM,IAAI,MAAM,mEAAmE;AAAA,EACtF;AACA,SAAO;AACV;AAGO,SAAS,oBAAoB,MAA2C;AAC5E,QAAM,SAAS,KAAK,UAAU,QAAQ,IAAI,wBAAwB;AAClE,QAAM,cACH,KAAK,eAAe,QAAQ,IAAI,6BAA6B;AAChE,QAAM,YAA+B,EAAE,QAAQ,YAAY;AAC3D,QAAM,qBAAqB,IAAI,mBAAmB,QAAQ,GAAG,MAAM;AACnE,SAAO;AAAA,IACJ,KAAK;AAAA,IACL;AAAA,IACA,cAAc,mBAAmB,KAAK,YAAY;AAAA,IAClD,SAAS,KAAK,WAAW;AAAA,IACzB,YAAY,KAAK,cAAc;AAAA,IAC/B;AAAA,EACH;AACH;AAGA,eAAsB,iCACnB,MAC8B;AAC9B,QAAM,MAAM,oBAAoB,IAAI;AAEpC,QAAM,SAAS,QAAQ,IAAI;AAC3B,MAAI,QAAQ;AACT,UAAM,YAAY,IAAI,UAAkB,QAAQ,IAAI,UAAU,MAAM;AACpE,WAAO,EAAE,GAAG,KAAK,aAAa,QAAQ,UAAU;AAAA,EACnD;AAEA,QAAM,QAAQ,IAAI,mBAAmB,KAAK,IAAI,GAAG;AACjD,MAAI,OAAO,aAAa;AACrB,UAAM,SAAS,IAAI,KAAK;AACxB,UAAM,aACH,CAAC,MAAM,aAAa,IAAI,KAAK,MAAM,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM;AAC/E,QAAI,YAAY;AACb,YAAM,YAAY,IAAI,UAAkB,MAAM,aAAa,IAAI,UAAU,MAAM;AAC/E,aAAO,EAAE,GAAG,KAAK,aAAa,MAAM,aAAa,UAAU;AAAA,IAC9D;AAGA,UAAM,YAAY,MAAM,gBAAgB,KAAK,KAAK;AAClD,QAAI,UAAW,QAAO;AAAA,EACzB;AAEA,QAAM,IAAI,kBAAkB;AAC/B;;;AGvLA,SAAS,gBAAAC,qBAAoB;AAK7B,eAAsB,cAAc,MAAgD;AACjF,QAAM,UAAU,KAAK;AACrB,QAAM,WAAW,KAAK;AAEtB,MAAI,SAAS;AACV,QAAI;AACD,aAAO,KAAK,MAAM,OAAO;AAAA,IAC5B,QAAQ;AACL,YAAM,IAAI,SAAS,iCAAiC;AAAA,IACvD;AAAA,EACH;AAEA,MAAI,UAAU;AACX,QAAI;AACD,YAAM,UAAUC,cAAa,UAAU,OAAO;AAC9C,aAAO,KAAK,MAAM,OAAO;AAAA,IAC5B,SAAS,KAAK;AACX,UAAI,eAAe,aAAa;AAC7B,cAAM,IAAI,SAAS,yBAAyB,QAAQ,EAAE;AAAA,MACzD;AACA,YAAM,IAAI,SAAS,qBAAqB,QAAQ,EAAE;AAAA,IACrD;AAAA,EACH;AAGA,MAAI,CAAC,QAAQ,MAAM,OAAO;AACvB,WAAO,UAAU;AAAA,EACpB;AAEA,SAAO;AACV;AAEA,SAAS,YAA8B;AACpC,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACrC,QAAI,OAAO;AACX,YAAQ,MAAM,YAAY,OAAO;AACjC,YAAQ,MAAM,GAAG,QAAQ,CAAC,UAAkB;AACzC,cAAQ;AAAA,IACX,CAAC;AACD,YAAQ,MAAM,GAAG,OAAO,MAAM;AAC3B,UAAI,CAAC,KAAK,KAAK,GAAG;AACf,gBAAQ,MAAS;AACjB;AAAA,MACH;AACA,UAAI;AACD,gBAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,MAC3B,QAAQ;AACL,eAAO,IAAI,SAAS,yBAAyB,CAAC;AAAA,MACjD;AAAA,IACH,CAAC;AACD,YAAQ,MAAM,GAAG,SAAS,CAAC,QAAe;AACvC,aAAO,IAAI,SAAS,wBAAwB,IAAI,OAAO,EAAE,CAAC;AAAA,IAC7D,CAAC;AAAA,EACJ,CAAC;AACJ;;;ACCO,SAAS,aAAgB,QAAqC;AAClE,QAAM;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB,WAAW,CAAC;AAAA,IACZ,QAAQ,CAAC;AAAA,EACZ,IAAI;AAGJ,QAAM,oBAAoB,OAAO,qBAAqB;AAEtD,QAAM,OAAqB,CAAC;AAE5B,MAAI,OAAO,YAAY;AAGpB,UAAM,uBAAuB,sBAAsB;AACnD,UAAM,eAAe,IAAI,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AACxD,UAAM,aAAa,uBACd,CAAC,GAAG,UAAU,GAAG,qBAAqB,OAAO,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,IAAI,CAAC,CAAC,IAC9E,CAAC,GAAG,QAAQ;AAEjB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,MAAM;AAAA,MACxB,aAAa,QAAQ,UAAU;AAAA,MAC/B,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,SAAS,OAAO,SAAgC;AAG7C,cAAM,oBAAoB,SAAS,SAAS;AAE5C,YAAI,wBAAwB,KAAK,KAAK,KAAK,GAAG;AAC3C,cAAI;AACJ,cAAI,sBAAsB,QAAQ;AAE/B,uBAAW,MAAM,cAAc,OAAO,EAAE,MAAM,SAAS,MAAM;AAC1D,oBAAM,OAAO,iBAAiB,MAAM,QAAQ;AAC5C,mBAAK,MAAM,IAAI;AACf,mBAAK,UAAU,IAAI;AACnB,qBAAO,mBAAmB,MAAM,OAAO,YAAa,mBAAmB,IAAI;AAAA,YAC9E,CAAC;AAAA,UACJ,OAAO;AAEJ,kBAAM,SAAS,MAAM,QAAQ,MAAM,OAAO,YAAa,iBAAiB;AACxE,uBAAW,YAAY,MAAM;AAAA,UAChC;AACA,qBAAW,UAAU,KAAK,KAAK,OAAuC;AAAA,QACzE,WAAW,sBAAsB,QAAQ;AAEtC,gBAAM,OAAO,iBAAiB,MAAM,UAAU;AAC9C,gBAAM,SACH,qBAAqB,OAAO,KAAK,IAAI,EAAE,SAAS,IAC3C,MAAM,mBAAmB,MAAM,OAAO,YAAa,mBAAmB,IAAI,IAC1E,MAAM,QAAQ,MAAM,OAAO,YAAa,iBAAiB;AAEjE;AAAA,YACG,WAAW,QAAQ,IAAI;AAAA,YACvB,KAAK;AAAA,YACL;AAAA,UACH;AAAA,QACH,OAAO;AAIJ,cAAI,mBAAmB;AACpB,kBAAM,OAAO,iBAAiB,MAAM,QAAQ;AAC5C,kBAAM,SACH,OAAO,KAAK,IAAI,EAAE,SAAS,IACtB,MAAM;AAAA,cACH;AAAA,cACA,OAAO;AAAA,cACP;AAAA,cACA;AAAA,YACH,IACA,MAAM,QAAQ,MAAM,OAAO,YAAa,iBAAiB;AACjE;AAAA,cACG,WAAW,QAAQ,KAAK;AAAA,cACxB,KAAK;AAAA,cACL;AAAA,YACH;AAAA,UACH,OAAO;AACJ,kBAAM,SAAS,MAAM,QAAQ,MAAM,OAAO,YAAa,iBAAiB;AACxE;AAAA,cACG,WAAW,QAAQ,KAAK;AAAA,cACxB,KAAK;AAAA,cACL;AAAA,YACH;AAAA,UACH;AAAA,QACH;AAAA,MACH;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,WAAW;AACnB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,KAAK;AAAA,MACvB,aAAa,SAAS,UAAU;AAAA,MAChC,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,GAAG,UAAU,OAAO,UAAU,KAAK,CAAC;AAAA,MACtE;AAAA,MACA;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,cAAM,KAAK,UAAU,IAAI;AACzB,cAAM,SAAS,MAAM,cAAc,MAAM,OAAO,WAAY,IAAI,iBAAiB;AACjF,qBAAa,QAAa,KAAK,KAAK,OAAuC;AAAA,MAC9E;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,cAAc;AACtB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,QAAQ;AAAA,MAC1B,aAAa,YAAY,UAAU;AAAA,MACnC,SAAS;AAAA,MACT;AAAA,MACA,GAAI,OAAO,iBAAiB,EAAE,UAAU,OAAO,eAAe,IAAI,CAAC;AAAA,MACnE,SAAS,OAAO,SAAgC;AAC7C,YAAI,CAAC,KAAK,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAClF,cAAM,SAAS,MAAM,gBAAgB,MAAM,OAAO,cAAe,iBAAiB;AAClF,qBAAa,QAAa,KAAK,KAAK,OAAuC;AAAA,MAC9E;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,cAAc;AACtB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,QAAQ;AAAA,MAC1B,aAAa,YAAY,UAAU;AAAA,MACnC,SAAS;AAAA,MACT,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,GAAG,UAAU,OAAO,UAAU,KAAK,CAAC;AAAA,MACtE;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,YAAI,CAAC,KAAK,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAClF,cAAM,KAAK,UAAU,IAAI;AACzB,cAAM,SAAS,MAAM;AAAA,UAClB;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAa,KAAK,KAAK,OAAuC;AAAA,MAC9E;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,cAAc;AACtB,UAAM,aAAuB;AAAA,MAC1B,EAAE,MAAM,MAAM,aAAa,GAAG,UAAU,OAAO,UAAU,KAAK;AAAA,IACjE;AACA,QAAI,OAAO,iBAAiB;AACzB,iBAAW,KAAK;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,QAAQ;AAAA,MACX,CAAC;AAAA,IACJ;AACA,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,QAAQ;AAAA,MAC1B,aAAa,YAAY,UAAU;AAAA,MACnC,SAAS;AAAA,MACT,MAAM;AAAA,MACN;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,cAAM,KAAK,UAAU,IAAI;AACzB,YAAI,OAAO,iBAAiB;AACzB,gBAAM,UAAU,KAAK,KAAK,YAAY;AACtC,gBAAM,SAAS,MAAM;AAAA,YAClB;AAAA,YACA,OAAO;AAAA,YACP,oBAAoB,CAAC,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,IAAI,OAAO;AAAA,UACnE;AACA,gBAAM,SACH,UACA,OAAO,WAAW,YAClB,sBAAsB,UACtB,OAAO,mBACF,QAAQ,OAAO,gBAAgB,oBAC/B;AACR,kBAAQ,OAAO,MAAM,WAAW,UAAU,IAAI,EAAE,GAAG,MAAM;AAAA,CAAI;AAAA,QAChE,OAAO;AACJ,gBAAM,cAAc,MAAM,OAAO,cAAe,IAAI,iBAAiB;AACrE,kBAAQ,OAAO,MAAM,WAAW,UAAU,IAAI,EAAE;AAAA,CAAI;AAAA,QACvD;AAAA,MACH;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,eAAe;AACvB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,SAAS;AAAA,MAC3B,aAAa,aAAa,UAAU;AAAA,MACpC,SAAS;AAAA,MACT,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,GAAG,UAAU,OAAO,UAAU,KAAK,CAAC;AAAA,MACtE;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,cAAM,KAAK,UAAU,IAAI;AACzB,cAAM,SAAS,MAAM,cAAc,MAAM,OAAO,eAAgB,IAAI,iBAAiB;AACrF,qBAAa,QAAa,KAAK,KAAK,OAAuC;AAAA,MAC9E;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,iBAAiB;AACzB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,WAAW;AAAA,MAC7B,aAAa,eAAe,UAAU;AAAA,MACtC,SAAS;AAAA,MACT,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,GAAG,UAAU,OAAO,UAAU,KAAK,CAAC;AAAA,MACtE;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,cAAM,KAAK,UAAU,IAAI;AACzB,cAAM,SAAS,MAAM;AAAA,UAClB;AAAA,UACA,OAAO;AAAA,UACP;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAa,KAAK,KAAK,OAAuC;AAAA,MAC9E;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,SAAO,CAAC,GAAG,MAAM,GAAG,KAAK;AAC5B;AAEA,SAAS,UAAU,MAAqC;AACrD,QAAM,KAAM,KAAK,KAAK,MAAM,KAAK,KAAK;AACtC,MAAI,CAAC,GAAI,OAAM,IAAI,SAAS,kBAAkB;AAC9C,SAAO;AACV;AASA,SAAS,WACN,MACA,QACA,MACiB;AACjB,QAAM,SAAS,YAAY,KAAK,GAAG,EAAE;AAIrC,QAAM,KAAK,OAAO,MAAM;AACxB,MAAI,OAAO,OAAO,YAAY;AAC3B,UAAM,IAAI,SAAS,yBAAyB,MAAM,EAAE;AAAA,EACvD;AACA,SAAO,GAAG,MAAM,QAAQ,IAAI;AAC/B;AAEA,eAAe,QACZ,MACA,QACA,mBACiB;AACjB,SAAO,WAAW,MAAM,QAAQ,oBAAoB,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC;AAC5E;AAEA,eAAe,cACZ,MACA,QACA,IACA,mBACiB;AACjB,SAAO,WAAW,MAAM,QAAQ,oBAAoB,CAAC,KAAK,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC;AAClF;AAEA,eAAe,gBACZ,MACA,QACA,mBACiB;AACjB,SAAO,WAAW,MAAM,QAAQ,oBAAoB,CAAC,KAAK,WAAW,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC;AAChG;AAEA,eAAe,qBACZ,MACA,QACA,IACA,mBACiB;AACjB,SAAO;AAAA,IACJ;AAAA,IACA;AAAA,IACA,oBAAoB,CAAC,KAAK,WAAW,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI;AAAA,EACvE;AACH;AAEA,SAAS,iBACN,MACA,UACwB;AACxB,QAAM,OAAgC,CAAC;AACvC,aAAW,OAAO,UAAU;AACzB,QAAI,IAAI,SAAS,MAAO;AACxB,UAAM,MAAM,IAAI,KAAK,QAAQ,aAAa,CAAC,GAAG,MAAc,EAAE,YAAY,CAAC;AAC3E,UAAM,MAAM,KAAK,KAAK,IAAI,IAAI;AAC9B,QAAI,QAAQ,QAAW;AACpB,UAAI,QAAQ,UAAU,QAAQ,YAAY;AACvC,cAAM,MAAM,OAAO,GAAG;AACtB,YAAI,MAAM,GAAG,KAAK,MAAM;AACrB,gBAAM,IAAI,SAAS,KAAK,IAAI,IAAI,6BAA6B;AAChE,YAAI,QAAQ,cAAc,MAAM;AAC7B,gBAAM,IAAI,SAAS,KAAK,IAAI,IAAI,kCAAkC;AACrE,aAAK,GAAG,IAAI;AAAA,MACf,OAAO;AACJ,aAAK,GAAG,IAAI;AAAA,MACf;AAAA,IACH;AAAA,EACH;AACA,SAAO;AACV;AAEA,eAAe,mBACZ,MACA,QACA,mBACA,MACiB;AACjB,SAAO,WAAW,MAAM,QAAQ,oBAAoB,CAAC,KAAK,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC;AACtF;AA6EO,SAAS,mBAAsB,QAA2C;AAC9E,QAAM;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,IACA,oBAAoB;AAAA,IACpB,WAAW,CAAC;AAAA,IACZ,QAAQ,CAAC;AAAA,EACZ,IAAI;AAEJ,QAAM,oBAAoB,OAAO,qBAAqB;AACtD,QAAM,OAAqB,CAAC;AAE5B,MAAI,OAAO,MAAM;AACd,UAAM,SAAS,OAAO;AACtB,UAAM,uBAAuB,sBAAsB;AACnD,UAAM,eAAe,IAAI,IAAI,SAAS,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AACxD,UAAM,aAAa,uBACd,CAAC,GAAG,UAAU,GAAG,qBAAqB,OAAO,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,IAAI,CAAC,CAAC,IAC9E,CAAC,GAAG,QAAQ;AAEjB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,MAAM;AAAA,MACxB,aAAa,QAAQ,UAAU;AAAA,MAC/B,MAAM;AAAA,MACN;AAAA,MACA;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,cAAM,SAAS,YAAY,KAAK,GAAG,EAAE;AACrC,cAAM,oBAAoB,SAAS,SAAS;AAE5C,YAAI,wBAAwB,KAAK,KAAK,KAAK,GAAG;AAC3C,cAAI;AACJ,cAAI,sBAAsB,QAAQ;AAC/B,uBAAW,MAAM,cAAc,OAAO,EAAE,MAAM,SAAS,MAAM;AAC1D,oBAAM,OAAO,iBAAiB,MAAM,QAAQ;AAC5C,mBAAK,MAAM,IAAI;AACf,mBAAK,UAAU,IAAI;AACnB,qBAAO,OAAO,QAAQ,KAAK,WAAW,IAAI;AAAA,YAC7C,CAAC;AAAA,UACJ,OAAO;AACJ,kBAAM,SAAS,MAAM,OAAO,QAAQ,KAAK,SAAS;AAClD,uBAAW,YAAY,MAAM;AAAA,UAChC;AACA,qBAAW,UAAU,KAAK,KAAK,OAAuC;AAAA,QACzE,WAAW,sBAAsB,QAAQ;AACtC,gBAAM,OAAO,iBAAiB,MAAM,UAAU;AAC9C,gBAAM,SACH,qBAAqB,OAAO,KAAK,IAAI,EAAE,SAAS,IAC3C,MAAM,OAAO,QAAQ,KAAK,WAAW,IAAI,IACzC,MAAM,OAAO,QAAQ,KAAK,SAAS;AAC3C;AAAA,YACG,WAAW,QAAQ,IAAI;AAAA,YACvB,KAAK;AAAA,YACL;AAAA,UACH;AAAA,QACH,OAAO;AACJ,cAAI,mBAAmB;AACpB,kBAAM,OAAO,iBAAiB,MAAM,QAAQ;AAC5C,kBAAM,SACH,OAAO,KAAK,IAAI,EAAE,SAAS,IACtB,MAAM,OAAO,QAAQ,KAAK,WAAW,IAAI,IACzC,MAAM,OAAO,QAAQ,KAAK,SAAS;AAC3C;AAAA,cACG,WAAW,QAAQ,KAAK;AAAA,cACxB,KAAK;AAAA,cACL;AAAA,YACH;AAAA,UACH,OAAO;AACJ,kBAAM,SAAS,MAAM,OAAO,QAAQ,KAAK,SAAS;AAClD;AAAA,cACG,WAAW,QAAQ,KAAK;AAAA,cACxB,KAAK;AAAA,cACL;AAAA,YACH;AAAA,UACH;AAAA,QACH;AAAA,MACH;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,KAAK;AACb,UAAM,QAAQ,OAAO;AACrB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,KAAK;AAAA,MACvB,aAAa,SAAS,UAAU;AAAA,MAChC,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,GAAG,UAAU,OAAO,UAAU,KAAK,CAAC;AAAA,MACtE;AAAA,MACA;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,cAAM,KAAK,UAAU,IAAI;AACzB,cAAM,SAAS,MAAM,MAAM,YAAY,KAAK,GAAG,EAAE,WAAW,KAAK,WAAW,EAAE;AAC9E,qBAAa,QAAa,KAAK,KAAK,OAAuC;AAAA,MAC9E;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,QAAQ;AAChB,UAAM,WAAW,OAAO;AACxB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,QAAQ;AAAA,MAC1B,aAAa,YAAY,UAAU;AAAA,MACnC,SAAS;AAAA,MACT;AAAA,MACA,GAAI,OAAO,iBAAiB,EAAE,UAAU,OAAO,eAAe,IAAI,CAAC;AAAA,MACnE,SAAS,OAAO,SAAgC;AAC7C,YAAI,CAAC,KAAK,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAClF,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,KAAK,GAAG,EAAE;AAAA,UACtB,KAAK;AAAA,UACL,KAAK;AAAA,QACR;AACA,qBAAa,QAAa,KAAK,KAAK,OAAuC;AAAA,MAC9E;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,QAAQ;AAChB,UAAM,WAAW,OAAO;AACxB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,QAAQ;AAAA,MAC1B,aAAa,YAAY,UAAU;AAAA,MACnC,SAAS;AAAA,MACT,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,GAAG,UAAU,OAAO,UAAU,KAAK,CAAC;AAAA,MACtE;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,YAAI,CAAC,KAAK,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAClF,cAAM,KAAK,UAAU,IAAI;AACzB,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,KAAK,GAAG,EAAE;AAAA,UACtB,KAAK;AAAA,UACL;AAAA,UACA,KAAK;AAAA,QACR;AACA,qBAAa,QAAa,KAAK,KAAK,OAAuC;AAAA,MAC9E;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,UAAU,OAAO,UAAU;AACnC,UAAM,aAAuB;AAAA,MAC1B,EAAE,MAAM,MAAM,aAAa,GAAG,UAAU,OAAO,UAAU,KAAK;AAAA,IACjE;AACA,QAAI,OAAO,iBAAiB;AACzB,iBAAW,KAAK;AAAA,QACb,MAAM;AAAA,QACN,aAAa;AAAA,QACb,UAAU;AAAA,QACV,QAAQ;AAAA,MACX,CAAC;AAAA,IACJ;AACA,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,QAAQ;AAAA,MAC1B,aAAa,YAAY,UAAU;AAAA,MACnC,SAAS;AAAA,MACT,MAAM;AAAA,MACN;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,cAAM,KAAK,UAAU,IAAI;AACzB,cAAM,SAAS,YAAY,KAAK,GAAG,EAAE;AACrC,YAAI,OAAO,UAAU;AAClB,gBAAM,UAAU,OAAO,kBAAkB,KAAK,KAAK,YAAY,OAAO;AACtE,gBAAM,SAAS,MAAM,OAAO,SAAS,QAAQ,KAAK,WAAW,IAAI,OAAO;AACxE,gBAAM,SACH,UACA,OAAO,WAAW,YAClB,sBAAsB,UACtB,OAAO,mBACF,QAAQ,OAAO,gBAAgB,oBAC/B;AACR,kBAAQ,OAAO,MAAM,WAAW,UAAU,IAAI,EAAE,GAAG,MAAM;AAAA,CAAI;AAAA,QAChE,WAAW,OAAO,QAAQ;AACvB,gBAAM,OAAO,OAAO,QAAQ,KAAK,WAAW,EAAE;AAC9C,kBAAQ,OAAO,MAAM,WAAW,UAAU,IAAI,EAAE;AAAA,CAAI;AAAA,QACvD;AAAA,MACH;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,SAAS;AACjB,UAAM,YAAY,OAAO;AACzB,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,SAAS;AAAA,MAC3B,aAAa,aAAa,UAAU;AAAA,MACpC,SAAS;AAAA,MACT,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,GAAG,UAAU,OAAO,UAAU,KAAK,CAAC;AAAA,MACtE;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,cAAM,KAAK,UAAU,IAAI;AACzB,cAAM,SAAS,MAAM,UAAU,YAAY,KAAK,GAAG,EAAE,WAAW,KAAK,WAAW,EAAE;AAClF,qBAAa,QAAa,KAAK,KAAK,OAAuC;AAAA,MAC9E;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,MAAI,OAAO,WAAW;AACnB,UAAM,cAAc,OAAO;AAC3B,SAAK,KAAK;AAAA,MACP,MAAM,CAAC,GAAG,QAAQ,WAAW;AAAA,MAC7B,aAAa,eAAe,UAAU;AAAA,MACtC,SAAS;AAAA,MACT,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,GAAG,UAAU,OAAO,UAAU,KAAK,CAAC;AAAA,MACtE;AAAA,MACA,SAAS,OAAO,SAAgC;AAC7C,cAAM,KAAK,UAAU,IAAI;AACzB,cAAM,SAAS,MAAM,YAAY,YAAY,KAAK,GAAG,EAAE,WAAW,KAAK,WAAW,EAAE;AACpF,qBAAa,QAAa,KAAK,KAAK,OAAuC;AAAA,MAC9E;AAAA,IACH,CAAC;AAAA,EACJ;AAEA,SAAO,CAAC,GAAG,MAAM,GAAG,KAAK;AAC5B;;;ACnqBO,IAAM,kBAAN,MAAsB;AAAA,EAClB,WAAW,oBAAI,IAAwB;AAAA,EACvC,UAAuB,CAAC;AAAA,EAEhC,SAAS,QAAyB;AAC/B,SAAK,QAAQ,KAAK,MAAM;AACxB,eAAW,OAAO,OAAO,UAAU;AAChC,YAAM,MAAM,IAAI,KAAK,KAAK,GAAG;AAC7B,WAAK,SAAS,IAAI,KAAK,GAAG;AAAA,IAC7B;AAAA,EACH;AAAA,EAEA,gBAAgB,KAAuB;AACpC,UAAM,MAAM,IAAI,KAAK,KAAK,GAAG;AAC7B,SAAK,SAAS,IAAI,KAAK,GAAG;AAAA,EAC7B;AAAA;AAAA;AAAA,EAIA,QACG,OACoF;AAEpF,aAAS,MAAM,KAAK,IAAI,MAAM,QAAQ,CAAC,GAAG,OAAO,GAAG,OAAO;AACxD,YAAM,MAAM,MAAM,MAAM,GAAG,GAAG,EAAE,KAAK,GAAG;AACxC,YAAM,MAAM,KAAK,SAAS,IAAI,GAAG;AACjC,UAAI,KAAK;AACN,eAAO,EAAE,KAAK,MAAM,MAAM,MAAM,GAAG,GAAG,YAAY,CAAC,EAAE;AAAA,MACxD;AAAA,IACH;AAEA,eAAW,CAAC,EAAE,GAAG,KAAK,KAAK,UAAU;AAClC,UAAI,IAAI,KAAK,SAAS,MAAM,OAAQ;AACpC,YAAM,SAAiC,CAAC;AACxC,UAAI,UAAU;AACd,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK,QAAQ,KAAK;AACvC,cAAM,UAAU,IAAI,KAAK,CAAC;AAC1B,cAAM,OAAO,MAAM,CAAC;AACpB,YAAI,QAAQ,WAAW,GAAG,KAAK,QAAQ,SAAS,GAAG,GAAG;AACnD,iBAAO,QAAQ,MAAM,GAAG,EAAE,CAAC,IAAI;AAAA,QAClC,WAAW,YAAY,MAAM;AAC1B,oBAAU;AACV;AAAA,QACH;AAAA,MACH;AACA,UAAI,SAAS;AACV,eAAO,EAAE,KAAK,MAAM,MAAM,MAAM,IAAI,KAAK,MAAM,GAAG,YAAY,OAAO;AAAA,MACxE;AAAA,IACH;AACA,WAAO;AAAA,EACV;AAAA;AAAA,EAGA,QAAQ,QAA2B;AAChC,QAAI,CAAC,UAAU,OAAO,WAAW,GAAG;AACjC,aAAO,KAAK,gBAAgB;AAAA,IAC/B;AAEA,UAAM,YAAY,OAAO,KAAK,GAAG;AACjC,UAAM,WAAyB,CAAC;AAChC,eAAW,CAAC,KAAK,GAAG,KAAK,KAAK,UAAU;AACrC,UAAI,IAAI,WAAW,YAAY,GAAG,KAAK,QAAQ,WAAW;AACvD,iBAAS,KAAK,GAAG;AAAA,MACpB;AAAA,IACH;AAGA,eAAW,CAAC,EAAE,GAAG,KAAK,KAAK,UAAU;AAClC,UAAI,SAAS,SAAS,GAAG,EAAG;AAC5B,UAAI,IAAI,KAAK,UAAU,OAAO,OAAQ;AACtC,UAAI,gBAAgB;AACpB,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACrC,cAAM,MAAM,IAAI,KAAK,CAAC;AACtB,YAAI,QAAQ,OAAO,CAAC,KAAK,EAAE,IAAI,WAAW,GAAG,KAAK,IAAI,SAAS,GAAG,IAAI;AACnE,0BAAgB;AAChB;AAAA,QACH;AAAA,MACH;AACA,UAAI,cAAe,UAAS,KAAK,GAAG;AAAA,IACvC;AAEA,QAAI,SAAS,WAAW,GAAG;AACxB,aAAO,0BAA0B,SAAS;AAAA,IAC7C;AAGA,QAAI,SAAS,WAAW,KAAK,SAAS,CAAC,EAAG,KAAK,KAAK,GAAG,MAAM,WAAW;AACrE,aAAO,KAAK,eAAe,SAAS,CAAC,CAAE;AAAA,IAC1C;AAGA,UAAM,eAAe,IAAI,IAAI,SAAS,IAAI,CAAC,QAAQ,IAAI,KAAK,OAAO,MAAM,CAAC,EAAE,OAAO,OAAO,CAAC;AAC3F,UAAM,YAAY,CAAC,GAAG,YAAY,EAAE,MAAM,CAAC,MAAM,EAAG,WAAW,GAAG,KAAK,EAAG,SAAS,GAAG,CAAC;AACvF,UAAM,cACH,aAAa,aAAa,SAAS,IAC9B,IAAI,CAAC,GAAG,YAAY,EAAE,CAAC,EAAG,MAAM,GAAG,EAAE,CAAC,MACtC;AAER,UAAM,QAAQ,CAAC,aAAa,SAAS,IAAI,WAAW;AAAA,GAAgB,WAAW;AAC/E,eAAW,OAAO,SAAS,KAAK,CAAC,GAAG,MAAM,EAAE,KAAK,KAAK,GAAG,EAAE,cAAc,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC,GAAG;AAC1F,YAAM,UAAU,IAAI,KAAK,MAAM,OAAO,MAAM,EAAE,KAAK,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,SAAS,CAAC;AACvF,YAAM,KAAK,KAAK,QAAQ,OAAO,EAAE,CAAC,IAAI,IAAI,WAAW,EAAE;AAAA,IAC1D;AACA,WAAO,MAAM,KAAK,IAAI,IAAI;AAAA,EAC7B;AAAA,EAEQ,eAAe,KAAyB;AAC7C,UAAM,SAAS,IAAI,KAAK,KAAK,GAAG;AAChC,UAAM,QAAQ,CAAC,GAAG,IAAI,WAAW;AAAA,GAAM,aAAa,MAAM,YAAY;AAEtE,QAAI,IAAI,mBAAmB;AACxB,YAAM,KAAK,iCAAiC;AAAA,IAC/C;AACA,QAAI,IAAI,SAAS;AACd,YAAM,KAAK,2BAA2B;AAAA,IACzC;AAEA,QAAI,IAAI,QAAQ,IAAI,KAAK,SAAS,GAAG;AAClC,YAAM,KAAK,IAAI,YAAY;AAC3B,iBAAW,OAAO,IAAI,MAAM;AACzB,cAAM,OAAO,IAAI,SAAS,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI;AACzD,cAAM,MAAM,IAAI,WAAW,gBAAgB;AAC3C,cAAM,KAAK,KAAK,KAAK,OAAO,EAAE,CAAC,IAAI,IAAI,WAAW,GAAG,GAAG,EAAE;AAAA,MAC7D;AAAA,IACH;AAEA,QAAI,IAAI,YAAY,IAAI,SAAS,SAAS,GAAG;AAC1C,YAAM,KAAK,IAAI,WAAW;AAC1B,iBAAW,MAAM,IAAI,UAAU;AAC5B,cAAM,KAAK,KAAK,EAAE,EAAE;AAAA,MACvB;AAAA,IACH;AAEA,WAAO,MAAM,KAAK,IAAI,IAAI;AAAA,EAC7B;AAAA,EAEQ,kBAA0B;AAC/B,UAAM,QAAQ,CAAC,mCAAmC,WAAW;AAG7D,UAAM,OAAO,oBAAI,IAAY;AAC7B,eAAW,UAAU,KAAK,SAAS;AAChC,UAAI,CAAC,KAAK,IAAI,OAAO,IAAI,GAAG;AACzB,aAAK,IAAI,OAAO,IAAI;AACpB,cAAM,KAAK,KAAK,OAAO,KAAK,OAAO,EAAE,CAAC,IAAI,OAAO,WAAW,EAAE;AAAA,MACjE;AAAA,IACH;AAGA,eAAW,CAAC,EAAE,GAAG,KAAK,KAAK,UAAU;AAClC,YAAM,UAAU,IAAI,KAAK,CAAC;AAC1B,UAAI,CAAC,KAAK,IAAI,OAAO,KAAK,IAAI,KAAK,WAAW,GAAG;AAC9C,aAAK,IAAI,OAAO;AAChB,cAAM,KAAK,KAAK,QAAQ,OAAO,EAAE,CAAC,IAAI,IAAI,WAAW,EAAE;AAAA,MAC1D;AAAA,IACH;AAEA,UAAM;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACH;AAEA,WAAO,MAAM,KAAK,IAAI,IAAI;AAAA,EAC7B;AACH;;;ACrHO,SAAS,cAAc,MAAkB,KAAqB;AAClE,QAAM,MAAM,KAAK,GAAG;AACpB,MAAI,OAAO,QAAQ,SAAU,OAAM,IAAI,MAAM,gCAAgC,GAAG,EAAE;AAClF,SAAO;AACV;AAGO,SAAS,cAAc,MAAkB,KAAqB;AAClE,QAAM,MAAM,KAAK,GAAG;AACpB,MAAI,OAAO,QAAQ,SAAU,OAAM,IAAI,MAAM,gCAAgC,GAAG,EAAE;AAClF,QAAM,MAAM,OAAO,GAAG;AACtB,MAAI,MAAM,GAAG,EAAG,OAAM,IAAI,MAAM,cAAc,GAAG,mBAAmB;AACpE,SAAO;AACV;;;ACrDA,IAAM,eAAuC;AAAA,EAC1C,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,OAAO,KAAK,QAAQ,EAAE,EAAE;AAAA,EACnE,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,OAAO,KAAK,UAAU,EAAE,EAAE;AAAA,EACvE;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,iBAAiB,OAAO,OAAO,KAAK,aAAa,IAAI;AAAA,EACvF;AAAA,EACA,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,OAAO,KAAK,SAAS,CAAC,EAAE;AAAA,EACpE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,OAAO,KAAK,aAAa,EAAE,EAAE;AAC9E;AAEA,IAAM,kBAA0C;AAAA,EAC7C,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,OAAO,KAAK,QAAQ,EAAE,EAAE;AAAA,EACnE;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc,OAAO,KAAK,cAAc,EAAE;AAAA,EACxD;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc;AACtB,YAAM,UAAU,OAAO,KAAK,WAAW,EAAE;AACzC,YAAM,UAAU,QAAQ,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAClD,aAAO,QAAQ,SAAS,KAAK,GAAG,QAAQ,MAAM,GAAG,EAAE,CAAC,QAAQ;AAAA,IAC/D;AAAA,EACH;AACH;AAEO,IAAM,mBAA8B;AAAA,EACxC,MAAM;AAAA,EACN,aACG;AAAA,EACH,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,eAAe,MAAM;AAAA,MAC5B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH;AAAA,UACG,MAAM;AAAA,UACN,aACG;AAAA,UACH,UAAU;AAAA,QACb;AAAA,QACA;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,UAAU;AAAA,QACb;AAAA,QACA;AAAA,UACG,MAAM;AAAA,UACN,aACG;AAAA,UACH,UAAU;AAAA,QACb;AAAA,QACA;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,UAAU;AAAA,QACb;AAAA,MACH;AAAA,MACA,SAAS;AAAA,MACT,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAKF,CAAC;AACL,YAAI,OAAO,KAAK,WAAW,SAAU,QAAO,SAAS,KAAK;AAC1D,YAAI,OAAO,KAAK,UAAU,UAAU;AACjC,gBAAM,IAAI,OAAO,KAAK,KAAK;AAC3B,cAAI,CAAC,MAAM,CAAC,EAAG,QAAO,gBAAgB;AAAA,QACzC;AACA,YAAI,OAAO,KAAK,aAAa,MAAM,UAAU;AAC1C,gBAAM,IAAI,OAAO,KAAK,aAAa,CAAC;AACpC,cAAI,CAAC,MAAM,CAAC,EAAG,QAAO,eAAe;AAAA,QACxC;AACA,YAAI,OAAO,KAAK,UAAU,UAAU;AACjC,gBAAM,IAAI,OAAO,KAAK,KAAK;AAC3B,cAAI,CAAC,MAAM,CAAC,EAAG,QAAO,QAAQ;AAAA,QACjC;AACA,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,cAAc,WAAW,MAAM;AAC/E,mBAAW,QAAQ,KAAK,YAAY;AAAA,MACvC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,eAAe,KAAK;AAAA,MAC3B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,mBAAmB,UAAU,KAAK,CAAC;AAAA,MACrE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,eAAe,QAAQ;AAAA,MAC9B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,mBAAmB,UAAU,KAAK,CAAC;AAAA,MACrE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,eAAe,UAAU;AAAA,MAChC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,MAAM,aAAa,mBAAmB,UAAU,KAAK;AAAA,QAC7D;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,UAAU;AAAA,QACb;AAAA,MACH;AAAA,MACA,SAAS;AAAA,MACT,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAA6B,CAAC;AACpC,YAAI,OAAO,KAAK,UAAU,UAAU;AACjC,gBAAM,IAAI,OAAO,KAAK,KAAK;AAC3B,cAAI,CAAC,MAAM,CAAC,EAAG,QAAO,QAAQ;AAAA,QACjC;AACA,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,mBAAW,QAAQ,KAAK,eAAe;AAAA,MAC1C;AAAA,IACH;AAAA,EACH;AACH;;;ACtJA,IAAM,UAAU,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,OAAO,GAAG,IAAI,QAAQ,CAAC;AAEvE,IAAM,eAA0B;AAAA,EACpC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,QAAQ;AAAA,MACjB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,SAAS;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA,EACJ;AACH;;;ACjBA,IAAMC,WAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,eAAe,OAAO,KAAK,aAAa,EAAE,EAAE;AAAA,EAC9F,IAAI,OAAO;AAAA,EACX,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,WAAW,GAAG;AAAA,EACjE,IAAI,QAAQ;AACf;AAEA,IAAM,gBAAwC;AAAA,EAC3C,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,SAAS,GAAG;AAChE;AAEA,IAAM,iBAAyC,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC;AAEhF,IAAMC,mBAA0C;AAAA,EAC7C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc,OAAO,KAAK,WAAW,EAAE,EAAE,MAAM,GAAG,EAAE;AAAA,IAC/D,UAAU;AAAA,EACb;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SACR,MAAM,QAAQ,KAAK,UAAU,KAAK,KAAK,WAAW,SAAS,IACtD,KAAK,WAAW,IAAI,CAAC,MAAW,EAAE,UAAU,QAAQ,GAAG,EAAE,KAAK,GAAG,IACjE;AAAA,EACX;AAAA,EACA,IAAI,QAAQ;AACf;AAEO,IAAM,cAAyB;AAAA,EACnC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,OAAO;AAAA,MAChB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,SAASD;AAAA,MACT,mBAAmB;AAAA,MACnB,UAAU;AAAA,QACP,EAAE,MAAM,UAAU,aAAa,iBAAiB;AAAA,QAChD,EAAE,MAAM,WAAW,aAAa,6CAA6C;AAAA,QAC7E;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,QAAQ;AAAA,QACX;AAAA,QACA,EAAE,MAAM,WAAW,aAAa,wBAAwB,QAAQ,KAAK;AAAA,QACrE,EAAE,MAAM,aAAa,aAAa,sBAAsB;AAAA,MAC3D;AAAA,IACH,CAAC;AAAA;AAAA,IAED;AAAA,MACG,MAAM,CAAC,SAAS,YAAY,MAAM;AAAA,MAClC,aACG;AAAA,MACH,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK;AAAA,QAC1D;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,QAChB;AAAA,QACA;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,QAChB;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAM1C,cAAM,WAAY,KAAa;AAC/B,cAAM,YAAa,KAAa;AAChC,cAAM,QACH,aAAa,UAAa,aAAa,QAAQ,aAAa,KACvD,MACA,OAAO,QAAQ;AACvB,cAAM,SACH,cAAc,UAAa,cAAc,QAAQ,cAAc,KAC1D,IACA,OAAO,SAAS;AACxB,YAAI,CAAC,OAAO,UAAU,KAAK,KAAK,QAAQ,KAAK,QAAQ,KAAK;AACvD,gBAAM,IAAI,MAAM,8CAA8C;AAAA,QACjE;AACA,YAAI,CAAC,OAAO,UAAU,MAAM,KAAK,SAAS,GAAG;AAC1C,gBAAM,IAAI,MAAM,yCAAyC;AAAA,QAC5D;AACA,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,UAC7B;AAAA,UACA;AAAA,QACH;AACA,mBAAW,QAAQ,KAAKC,gBAAe;AAAA,MAC1C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,YAAY,MAAM;AAAA,MAClC,aACG;AAAA,MACH,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK;AAAA,QAC1D,EAAE,MAAM,UAAU,aAAa,oCAAoC,QAAQ,KAAK;AAAA,MACnF;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,UAAU,OAAO,SAAS,WAAW,OAAQ,MAAc;AACjE,YAAI,CAAC;AACF,gBAAM,IAAI;AAAA,YACP;AAAA,UACH;AACH,cAAM,SAAS,cAAc,MAAM,SAAS;AAE5C,YAAI,KAAK,QAAQ;AAEd,gBAAM,aAAa,IAAI,WAAW;AAAA,YAC/B,SAAS,IAAI,UAAU;AAAA,YACvB,eAAe;AAAA,YACf;AAAA,YACA,aAAa,YAAY,GAAG,EAAE;AAAA,UACjC,CAAC;AACD,kBAAQ,OAAO,MAAM,4BAA4B;AACjD,gBAAM,WAAW,YAAY,CAAC,EAAE,MAAM,QAAQ,QAAQ,CAAC,GAAG,CAAC,UAAU;AAClE,kBAAM,QAAQ,aAAa,KAAK;AAChC,gBAAI,MAAO,SAAQ,OAAO,MAAM,KAAK;AACrC,kBAAM,WAAW,gBAAgB,KAAK;AACtC,gBAAI,SAAU,SAAQ,OAAO,MAAM;AAAA,iBAAoB,QAAQ;AAAA,CAAW;AAAA,UAC7E,CAAC;AACD,kBAAQ,OAAO,MAAM,IAAI;AAAA,QAC5B,OAAO;AACJ,gBAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,YAC7C;AAAA,YACA;AAAA,YACA;AAAA,UACH;AACA,uBAAa,QAAQ,KAAKA,gBAAe;AAAA,QAC5C;AAAA,MACH;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,YAAY,mBAAmB;AAAA,MAC/C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAClE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,UAC7B;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,gBAAe;AAAA,MAC5C;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,SAAS,WAAW;AAAA,MAC3B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAC7D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,SAAS,QAAQ;AAAA,MACxB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAC7D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,YAAY;AAAA,MAC5B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,YAAY,SAAS;AACrE,gBAAQ,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AAAA,MAC3C;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,SAAS,aAAa;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAC7D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,SAAS,gBAAgB;AAAA,MAChC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,sBAAsB,SAAS;AAC/E,mBAAW,QAAQ,KAAKD,QAAO;AAAA,MAClC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,SAAS,SAAS;AAAA,MACzB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAC7D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,CAAC,MAAM,UAAU,EAAE,IAAI,MAAM,QAAQ,IAAI;AAAA,UAC5C,YAAY,GAAG,EAAE,UAAU,QAAQ,WAAW,MAAM;AAAA,UACpD,YAAY,GAAG,EAAE,UAAU,gBAAgB,WAAW,MAAM;AAAA,UAC5D,YAAY,GAAG,EAAE,UAAU,aAAa,SAAS;AAAA,QACpD,CAAC;AACD,cAAM,UAAU,GAAG,UAAU,SAAS,kBAAyB;AAE/D,cAAME,YAAW,CAAC,YAAqB;AACpC,gBAAM,OAAO,OAAO,YAAY,WAAW,UAAU,KAAK,UAAU,OAAO;AAC3E,iBAAO,KAAK,MAAM,GAAG,GAAG;AAAA,QAC3B;AAEA,cAAM,SAAkC;AAAA,UACrC,MAAM;AAAA,YACH,IAAI,KAAK;AAAA,YACT,OAAO,KAAK;AAAA,YACZ,SAAS,KAAK;AAAA,YACd,UAAU,KAAK;AAAA,YACf,YAAY,KAAK;AAAA,YACjB,cAAc,KAAK;AAAA,YACnB,cAAc,KAAK;AAAA,YACnB,WAAW,KAAK;AAAA,UACnB;AAAA,UACA,UAAU,SAAS,IAAI,CAAC,OAAY;AAAA,YACjC,IAAI,EAAE;AAAA,YACN,MAAM,EAAE;AAAA,YACR,SAAS,UAAU,sCAAiCA,UAAS,EAAE,OAAO;AAAA,UACzE,EAAE;AAAA,QACL;AAGA,cAAM,eAAe,KAAK;AAC1B,YAAI,cAAc;AACf,gBAAM,aAAa,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,YACjD;AAAA,YACA;AAAA,UACH;AACA,iBAAO,aAAa;AAAA,YACjB,IAAI,WAAW;AAAA,YACf,QAAQ,WAAW;AAAA,YACnB,YAAY,WAAW;AAAA,YACvB,cAAc,WAAW;AAAA,YACzB,aAAa,WAAW;AAAA,YACxB,aAAa,WAAW,aAAa,IAAI,CAAC,QAAa;AAAA,cACpD,IAAI,GAAG;AAAA,cACP,YAAY,GAAG;AAAA,cACf,aAAa,UAAU,sCAAiC,GAAG;AAAA,YAC9D,EAAE;AAAA,UACL;AAAA,QACH;AAEA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA;AAAA,IAEA,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAC1B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA,IACZ,CAAC;AAAA;AAAA,IAED,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,SAAS,SAAS;AAAA,MAC3B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA,IACZ,CAAC;AAAA,EACJ;AACH;;;AC5TA,IAAMC,WAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,OAAO;AAAA,EACX,IAAI,QAAQ;AACf;AAEA,IAAMC,iBAAwC;AAAA,EAC3C,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,SAAS,GAAG;AAChE;AAEA,IAAMC,kBAAyC,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC;AAEhF,IAAM,gBAAwC;AAAA,EAC3C,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,cAAc,GAAG;AAAA,EACjE,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,OAAO,KAAK,YAAY,KAAK,EAAE;AACjF;AAEA,IAAM,eAAuC,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,CAAC;AAEvE,IAAM,gBAA2B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,SAAS;AAAA,MAClB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,SAASF;AAAA,IACZ,CAAC;AAAA;AAAA,IAED;AAAA,MACG,MAAM,CAAC,WAAW,IAAI;AAAA,MACtB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,SAAS;AAC1E,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,WAAW,QAAQ;AAAA,MAC1B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAO,YAAY,GAAG,EAAE,UAAkB,cAAc,WAAW,IAAI;AACtF,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,QAAQ;AAAA,MAC1B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH;AAAA,UACG,MAAM;AAAA,UACN,aACG;AAAA,QACN;AAAA,QACA;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,QAChB;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,gBAAgB,CAAC,MAAM,QAAQ,SAAS,SAAS,eAAe,QAAQ;AAC9E,cAAM,SAAS,KAAK,SACf,OAAO,KAAK,MAAM,EACd,MAAM,GAAG,EACT,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC,IAC/B;AACL,cAAM,aAAa,KAAK,aAAa;AACrC,cAAM,SAAS,MAAO,YAAY,GAAG,EAAE,UAAkB;AAAA,UACtD;AAAA,UACA;AAAA,UACA,CAAC;AAAA,UACD;AAAA,QACH;AACA,gBAAQ,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AAAA,MAC3C;AAAA,IACH;AAAA;AAAA,IAEA,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,WAAW,QAAQ;AAAA,MAC5B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASC;AAAA,IACZ,CAAC;AAAA;AAAA,IAED,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,WAAW,SAAS;AAAA,MAC7B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASC;AAAA,IACZ,CAAC;AAAA;AAAA,IAED;AAAA,MACG,MAAM,CAAC,WAAW,UAAU,MAAM;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,WAAW,cAAc,MAAM,WAAW;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,gBAAgB,WAAW,QAAQ;AACnF,mBAAW,QAAQ,KAAK,aAAa;AAAA,MACxC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,UAAU,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,WAAW,cAAc,MAAM,WAAW;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,aAAa;AAAA,MAC1C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,UAAU,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK;AAAA,QAC9D,EAAE,MAAM,MAAM,aAAa,YAAY,UAAU,KAAK;AAAA,MACzD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,WAAW,cAAc,MAAM,WAAW;AAChD,cAAM,UAAU,cAAc,MAAM,IAAI;AACxC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,aAAa;AAAA,MAC1C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,UAAU,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK;AAAA,QAC9D,EAAE,MAAM,MAAM,aAAa,YAAY,UAAU,KAAK;AAAA,MACzD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,WAAW,cAAc,MAAM,WAAW;AAChD,cAAM,UAAU,cAAc,MAAM,IAAI;AACxC,cAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,WAAW,UAAU,OAAO;AAC/E,gBAAQ,OAAO,MAAM,wBAAwB,OAAO;AAAA,CAAI;AAAA,MAC3D;AAAA,IACH;AAAA;AAAA,IAEA,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,WAAW,OAAO;AAAA,MAC3B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA,IACZ,CAAC;AAAA,EACJ;AACH;;;ACtMA,IAAMC,WAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,IAAI,KAAK;AAAA,EACT,IAAI,OAAO;AAAA,EACX;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc,KAAK,iBAAiB,OAAO,KAAK,eAAe,EAAE;AAAA,EAC/E;AAAA,EACA,IAAI,QAAQ;AACf;AAEO,IAAM,cAAyB;AAAA,EACnC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,OAAO;AAAA,MAChB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,SAASA;AAAA,IACZ,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,SAAS,OAAO;AAAA,MACvB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAC7D,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACvB,MAAc,QAAQ;AAAA,UACtB,MAAc;AAAA,QAClB;AACA,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,eAAe;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,gBAAgB,SAAS;AACzE,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,EACH;AACH;;;ACrDA,IAAMC,WAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,OAAO,KAAK,aAAa,EAAE,EAAE;AAAA,EACzE,IAAI,QAAQ;AACf;AAEA,IAAM,eAAuC;AAAA,EAC1C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,SAAS,GAAG;AAAA,EAC7D;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc,OAAO,KAAK,WAAW,EAAE,EAAE,MAAM,GAAG,EAAE;AAAA,IAC/D,UAAU;AAAA,EACb;AAAA,EACA,IAAI,QAAQ;AACf;AAEA,IAAM,sBAA8C;AAAA,EACjD,IAAI,GAAG;AAAA,EACP;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc,KAAK,gBAAgB,OAAO,KAAK,cAAc,EAAE;AAAA,EAC7E;AAAA,EACA,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAC9D;AAEA,IAAM,mBAA2C;AAAA,EAC9C,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc,OAAO,KAAK,eAAe,EAAE,EAAE,MAAM,GAAG,EAAE;AAAA,IACnE,UAAU;AAAA,EACb;AACH;AAEO,IAAM,kBAA6B;AAAA,EACvC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,WAAW;AAAA,MACpB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,iBAAiB;AAAA,MACjB,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,SAASA;AAAA,IACZ,CAAC;AAAA;AAAA,IAED;AAAA,MACG,MAAM,CAAC,aAAa,OAAO;AAAA,MAC3B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MACjE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,aAAa,WAAW;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,qBAAqB,SAAS;AAC9E,mBAAW,QAAQ,KAAK,gBAAgB;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,sBAAsB;AAAA,MAC1C,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACC,MAAc,gBAAgB;AAAA,UAC/B;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,aAAa,UAAU;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MACjE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,aAAa,SAAS;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MACjE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,aAAa,SAAS,MAAM;AAAA,MACnC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MAC1E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,aAAa,cAAc,MAAM,aAAa;AACpD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,WAAW,UAAU;AACtF,mBAAW,QAAQ,KAAK,YAAY;AAAA,MACvC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,SAAS,QAAQ;AAAA,MACrC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MAC1E,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,aAAa,cAAc,MAAM,aAAa;AACpD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,SAAS,QAAQ;AAAA,MACrC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK;AAAA,QAClE,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK;AAAA,MACxD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,aAAa,cAAc,MAAM,aAAa;AACpD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,SAAS,QAAQ;AAAA,MACrC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK;AAAA,QAClE,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK;AAAA,MACxD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,aAAa,cAAc,MAAM,aAAa;AACpD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,WAAW,YAAY,MAAM;AACjF,gBAAQ,OAAO,MAAM,yBAAyB,MAAM;AAAA,CAAI;AAAA,MAC3D;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,aAAa,gBAAgB,MAAM;AAAA,MAC1C,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MAC1E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,aAAa,cAAc,MAAM,aAAa;AACpD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,mBAAW,QAAQ,KAAK,mBAAmB;AAAA,MAC9C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,gBAAgB,QAAQ;AAAA,MAC5C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MAC1E,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,aAAa,cAAc,MAAM,aAAa;AACpD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,mBAAmB;AAAA,MAChD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,gBAAgB,QAAQ;AAAA,MAC5C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK;AAAA,QAClE,EAAE,MAAM,MAAM,aAAa,kBAAkB,UAAU,KAAK;AAAA,MAC/D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,aAAa,cAAc,MAAM,aAAa;AACpD,cAAM,gBAAgB,cAAc,MAAM,IAAI;AAC9C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,mBAAmB;AAAA,MAChD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,gBAAgB,QAAQ;AAAA,MAC5C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK;AAAA,QAClE,EAAE,MAAM,MAAM,aAAa,kBAAkB,UAAU,KAAK;AAAA,MAC/D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,aAAa,cAAc,MAAM,aAAa;AACpD,cAAM,gBAAgB,cAAc,MAAM,IAAI;AAC9C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,gBAAQ,OAAO,MAAM,gCAAgC,aAAa;AAAA,CAAI;AAAA,MACzE;AAAA,IACH;AAAA,EACH;AACH;;;AC3QA,IAAM,oBAAoB;AAAA,EACvB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AACb;AAEA,IAAM,cAAc;AAAA,EACjB,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AACb;AAEA,IAAMC,WAAkC;AAAA,EACrC,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,OAAO,KAAK,iBAAiB,EAAE,EAAE;AAAA,EAC/E,IAAI,KAAK;AAAA,EACT,IAAI,KAAK;AAAA,EACT;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,WAAW,QAAQ;AAAA,EACrD;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc,KAAK,cAAc;AAAA,EAC/C;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc,KAAK,eAAe;AAAA,EAChD;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,UAAe,KAAK,iBAAiB,IAAI,MAAM,GAAG,EAAE;AAAA,IAC/D,UAAU;AAAA,EACb;AACH;AAEO,IAAM,yBAAoC;AAAA,EAC9C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA;AAAA,IAEP;AAAA,MACG,MAAM,CAAC,qBAAqB,MAAM;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,iBAAiB;AAAA,MACxB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,gBAAQ,OAAO,MAAM,wBAAwB,OAAO,iBAAiB;AAAA,CAAI;AACzE,mBAAW,OAAO,UAAU,KAAKA,QAAO;AAAA,MAC3C;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,qBAAqB,KAAK;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,mBAAmB,WAAW;AAAA,MACrC,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,gBAAgB,cAAc,MAAM,SAAS;AACnD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,qBAAqB,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,iBAAiB;AAAA,MACxB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,qBAAqB,SAAS;AAAA,MACrC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH;AAAA,QACA;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,UAAU;AAAA,QACb;AAAA,QACA;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,UAAU;AAAA,QACb;AAAA,QACA;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,QAAQ;AAAA,UACR,UAAU;AAAA,QACb;AAAA,MACH;AAAA,MACA,UAAU;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,OAAQ,QAAoC,CAAC;AAEnD,YAAI,KAAK,KAAM,MAAK,OAAO,KAAK;AAChC,YAAI,KAAK,QAAS,MAAK,gBAAgB,KAAK;AAC5C,YAAI,KAAK,aAAa,EAAG,MAAK,WAAW;AACzC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,qBAAqB,UAAU;AAAA,MACtC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,mBAAmB,WAAW;AAAA,MACrC,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,gBAAgB,cAAc,MAAM,SAAS;AACnD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,qBAAqB,YAAY;AAAA,MACxC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,mBAAmB,WAAW;AAAA,MACrC,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,gBAAgB,cAAc,MAAM,SAAS;AACnD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,qBAAqB,MAAM;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH;AAAA,QACA,EAAE,MAAM,QAAQ,aAAa,mCAAmC,UAAU,KAAK;AAAA,QAC/E,EAAE,MAAM,MAAM,aAAa,qCAAqC,UAAU,KAAK;AAAA,MAClF;AAAA,MACA,UAAU;AAAA,QACP;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,OAAO,cAAc,MAAM,MAAM;AACvC,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,OAAO,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC3C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AAEA,YAAI,IAAI,iBAAiB,QAAQ;AAC9B,kBAAQ,OAAO,MAAM,KAAK,UAAU,MAAM,MAAM,CAAC,IAAI,IAAI;AACzD;AAAA,QACH;AAGA,gBAAQ,OAAO;AAAA,UACZ;AAAA,YAAe,KAAK,YAAY,KAAK,WAAM,KAAK,UAAU,KAAK;AAAA;AAAA,QAClE;AACA,gBAAQ,OAAO;AAAA,UACZ,aAAa,KAAK,QAAQ,KAAK,UAAK,KAAK,QAAQ,OAAO,KAAK,KAAK,QAAQ,QAAQ;AAAA;AAAA;AAAA,QACrF;AAEA,YAAI,KAAK,QAAQ,WAAW,GAAG;AAC5B,kBAAQ,OAAO,MAAM,mBAAmB;AACxC;AAAA,QACH;AAEA,YAAI,kBAAkB;AACtB,mBAAW,UAAU,KAAK,SAAS;AAChC,cAAI,OAAO,aAAa,iBAAiB;AACtC,8BAAkB,OAAO;AACzB,oBAAQ,OAAO,MAAM,IAAI,eAAe;AAAA,CAAK;AAAA,UAChD;AACA,gBAAM,SACH,OAAO,eAAe,UACjB,SACA,OAAO,eAAe,YACpB,cACA;AACV,gBAAM,eACH,OAAO,UAAU,OAAO,OAAO,SAAS,IACnC,KAAK,OAAO,OAAO,IAAI,CAAC,MAAW,EAAE,KAAK,EAAE,KAAK,IAAI,CAAC,MACtD;AACR,kBAAQ,OAAO,MAAM,GAAG,MAAM,GAAG,OAAO,KAAK,GAAG,YAAY;AAAA,CAAI;AAGhE,cAAI,OAAO,QAAQ;AAChB,uBAAW,SAAS,OAAO,QAAQ;AAChC,kBAAI,MAAM,YAAY,QAAQ,MAAM,YAAY,MAAM;AACnD,wBAAQ,OAAO,MAAM,SAAS,MAAM,KAAK;AAAA,CAAK;AAC9C,oBAAI,MAAM,YAAY,MAAM;AACzB,0BAAQ,OAAO,MAAM,aAAa,MAAM,QAAQ;AAAA,CAAI;AAAA,gBACvD;AACA,oBAAI,MAAM,YAAY,MAAM;AACzB,0BAAQ,OAAO,MAAM,aAAa,MAAM,QAAQ;AAAA,CAAI;AAAA,gBACvD;AAAA,cACH;AAAA,YACH;AAAA,UACH;AAAA,QACH;AACA,gBAAQ,OAAO,MAAM,IAAI;AAAA,MAC5B;AAAA,IACH;AAAA,EACH;AACH;;;ACpPA,IAAMC,WAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,OAAO;AAAA,EACX,IAAI,QAAQ;AACf;AAEA,IAAM,kBAA0C,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC;AAE/F,IAAM,qBAA6C;AAAA,EAChD,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,SAAS,GAAG;AAAA,EAC7D,IAAI,OAAO;AAAA,EACX,IAAI,QAAQ;AACf;AAEA,IAAM,uBAA+C;AAAA,EAClD,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,OAAO,KAAK,QAAQ,KAAK,EAAE;AAAA,EACtE,IAAI,QAAQ;AACf;AAEA,IAAM,kBAA0C;AAAA,EAC7C,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,KAAK,YAAY,GAAG;AACtE;AAEA,IAAM,gBAAwC;AAAA,EAC3C,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,KAAK,YAAY,GAAG;AAAA,EACnE,IAAI,YAAY;AACnB;AAEA,IAAM,gBAAwC;AAAA,EAC3C,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,KAAK;AAAA,EACT,IAAI,YAAY;AACnB;AAEA,IAAM,aAAqC;AAAA,EACxC,EAAE,QAAQ,MAAM,UAAU,CAAC,SAAc,OAAO,KAAK,MAAM,EAAE,EAAE;AAAA,EAC/D;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,UAAe,KAAK,gBAAgB,CAAC,GAAG,IAAI,CAAC,MAAW,EAAE,IAAI,EAAE,KAAK,IAAI;AAAA,IACpF,UAAU;AAAA,EACb;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc,OAAO,KAAK,WAAW,EAAE,EAAE,MAAM,GAAG,EAAE;AAAA,IAC/D,UAAU;AAAA,EACb;AAAA,EACA,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,aAAa,GAAG;AACtE;AAEA,IAAMC,mBAA0C;AAAA,EAC7C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAc,OAAO,KAAK,WAAW,EAAE,EAAE,MAAM,GAAG,EAAE;AAAA,IAC/D,UAAU;AAAA,EACb;AAAA,EACA,IAAI,QAAQ;AACf;AAEO,IAAM,mBAA8B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA;AAAA,IAEP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,YAAY;AAAA,MACrB,YAAY;AAAA,MACZ,YAAY;AAAA;AAAA,MAEZ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASD;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA;AAAA,IAED;AAAA,MACG,MAAM,CAAC,cAAc,KAAK;AAAA,MAC1B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,6BAA6B,CAAC;AAAA,MAChE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,KAAM,KAAK,MAAM,KAAK,QAAQ;AACpC,YAAI,CAAC,GAAI,OAAM,IAAI,SAAS,uCAAuC;AACnE,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,aAAa,EAAE;AAC/D,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,UAAU;AAChB,YAAI,CAAC,QAAQ,gBAAgB;AAC1B,gBAAM,IAAI;AAAA,YACP;AAAA,UACH;AAAA,QACH;AACA,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,gBAAgB,OAAc;AAC9E,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,cAAc,UAAU;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,qBAAqB,SAAS;AAC9E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,iBAAiB;AAAA,MACtC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,SAAS;AAC5E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,QAChB;AAAA,QACA;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,QAChB;AAAA,QACA;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,QAChB;AAAA,MACH;AAAA,MACA,UAAU;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,QAAQ,KAAK,OAAO;AAC1B,cAAM,gBAAgB,KAAK,aAAa;AACxC,cAAM,UAAU,KAAK,SAAS;AAC9B,cAAM,aAAa,gBAAgB,OAAO,aAAa,IAAI;AAC3D,YAAI,eAAe,UAAa,MAAM,UAAU,GAAG;AAChD,gBAAM,IAAI,SAAS,gCAAgC;AAAA,QACtD;AACA,YAAI,SAAS,eAAe,QAAW;AACpC,gBAAM,IAAI,SAAS,+CAA+C;AAAA,QACrE;AACA,YAAI,SAAS,UAAU,aAAa;AACjC,gBAAM,IAAI,SAAS,6BAA6B;AAAA,QACnD;AACA,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH;AAAA,UACG,MAAM;AAAA,UACN,aACG;AAAA,UACH,QAAQ;AAAA,QACX;AAAA,MACH;AAAA,MACA,UAAU;AAAA,QACP;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,UAAU;AAChB,cAAM,YAAY,KAAK,YAAY,MAAM;AAGzC,YAAI;AACJ,YAAI;AACJ,YAAI;AAEJ,YAAI,QAAQ,cAAc,OAAO,QAAQ,eAAe,UAAU;AAE/D,uBAAa,QAAQ;AACrB,2BACI,QAAQ,kBAA6D,CAAC;AAC1E,sBAAa,QAAQ,aAA0C,CAAC;AAAA,QACnE,WAAW,QAAQ,WAAW,QAAQ,WAAW;AAE9C,uBAAa;AACb,2BAAiB,CAAC;AAClB,sBAAY,CAAC;AAAA,QAChB,OAAO;AACJ,gBAAM,IAAI;AAAA,YACP;AAAA,UACH;AAAA,QACH;AAEA,YAAI,WAAW;AAGZ,gBAAM,aAAa;AAAA,YAChB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACH;AACA,qBAAW,OAAO,YAAY;AAC3B,kBAAM,WAAW,WAAW,GAAG;AAC/B,gBAAI,MAAM,QAAQ,QAAQ,GAAG;AAC1B,wBAAU,GAAG,IAAI,SACb,IAAI,CAAC,MAA+B,EAAE,IAAc,EACpD,OAAO,OAAO;AAAA,YACrB;AAAA,UACH;AAAA,QACH;AAEA,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,gBAAgB;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,QAAQ;AAAA,QACX;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,UAAU;AAChB,cAAM,YAAY,KAAK,YAAY,MAAM;AAEzC,YAAI;AACJ,YAAI;AACJ,YAAI;AAEJ,YAAI,QAAQ,cAAc,OAAO,QAAQ,eAAe,UAAU;AAC/D,uBAAa,QAAQ;AACrB,2BACI,QAAQ,kBAA6D,CAAC;AAC1E,sBAAa,QAAQ,aAA0C,CAAC;AAAA,QACnE,WAAW,QAAQ,WAAW,QAAQ,WAAW;AAC9C,uBAAa;AACb,2BAAiB,CAAC;AAClB,sBAAY,CAAC;AAAA,QAChB,OAAO;AACJ,gBAAM,IAAI;AAAA,YACP;AAAA,UACH;AAAA,QACH;AAEA,YAAI,WAAW;AACZ,gBAAM,aAAa;AAAA,YAChB;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACH;AACA,qBAAW,OAAO,YAAY;AAC3B,kBAAM,WAAW,WAAW,GAAG;AAC/B,gBAAI,MAAM,QAAQ,QAAQ,GAAG;AAC1B,wBAAU,GAAG,IAAI,SACb,IAAI,CAAC,MAA+B,EAAE,IAAc,EACpD,OAAO,OAAO;AAAA,YACrB;AAAA,UACH;AAAA,QACH;AAEA,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,cAAc,UAAU;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,8BAA8B;AAC9E,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,eAAe;AAAA,MAC7D;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB;AACnE,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,aAAa;AAAA,MAC3D;AAAA,IACH;AAAA;AAAA,IAEA,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,cAAc,UAAU;AAAA,MACjC,YAAY;AAAA,MACZ,YAAY;AAAA;AAAA,MAEZ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA,IACZ,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,cAAc,YAAY,KAAK;AAAA,MACtC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,WAAW,EAAE;AAC7D,qBAAa,QAAQ,KAAK,eAAe;AAAA,MAC5C;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,cAAc,eAAe,MAAM;AAAA,MAC1C,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SACH,MAAM,YAAY,GAAG,EAAE,UAAU,8BAA8B,SAAS;AAC3E,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,kBAAkB;AAAA,MAChE;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,eAAe,QAAQ;AAAA,MAC5C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MACnE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,IAAI;AAC7C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA;AAAA,QACH;AACA,gBAAQ,OAAO,MAAM,sBAAsB,YAAY;AAAA,CAAI;AAAA,MAC9D;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,eAAe,QAAQ;AAAA,MAC5C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,UAAU;AAChB,YAAI,CAAC,QAAS,OAAM,IAAI,SAAS,+CAA+C;AAChF,cAAM,mBAAoB,QAAQ,SAAS,QAAQ;AACnD,YAAI,CAAC,kBAAkB;AACpB,gBAAM,IAAI,SAAS,4CAA4C;AAAA,QAClE;AACA,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,QAAQ,iBAAiB,SAAY,OAAO,QAAQ,YAAY,IAAI;AAAA,UACpE,QAAQ;AAAA,QACX;AACA,qBAAa,QAAQ,KAAK,kBAAkB;AAAA,MAC/C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,eAAe,SAAS;AAAA,MAC7C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MACnE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,IAAI;AAC7C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,kBAAkB;AAAA,MAC/C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,eAAe,MAAM;AAAA,MAC1C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MACnE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,IAAI;AAC7C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,kBAAkB;AAAA,MAC/C;AAAA,IACH;AAAA;AAAA,IAEA,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,cAAc,eAAe;AAAA,MACtC,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,SAAS;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,cAAc,iBAAiB,WAAW;AAAA,MACjD,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,mBAAmB,UAAU,KAAK,CAAC;AAAA,MACrE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,uBAAuB,KAAK,EAAE;AAAA,CAAY;AAAA,MAClE;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,iBAAiB,aAAa;AAAA,MACnD,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,YAAY,GAAG,EAAE,UAAU,wBAAwB,SAAS;AAClE,gBAAQ,OAAO,MAAM,+BAA+B;AAAA,MACvD;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,cAAc,UAAU,MAAM;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,SAAS;AAC5E,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,aAAa;AAAA,MAC3D;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,UAAU,QAAQ;AAAA,MACvC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,cAAc,OAAO,MAAM;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,SAAS,WAAW;AAAA,UACjE,UAAU;AAAA,UACV,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,WAAW;AAAA,QACd,CAAC;AACD,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,UAAU;AAAA,MACxD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,OAAO,KAAK;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAC7D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAKC,gBAAe;AAAA,MAC7D;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,OAAO,MAAM;AAAA,MAClC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAC7D,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,UAAW,MAAc,WAAW;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,EACH;AACH;;;ACpmBA,IAAMC,WAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,OAAO;AAAA,EACX,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,OAAO,KAAK,aAAa,EAAE,EAAE;AAAA,EAC1E,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,OAAO,KAAK,8BAA8B,EAAE,EAAE;AAAA,EACzF,EAAE,QAAQ,cAAc,UAAU,CAAC,SAAc,OAAO,KAAK,yBAAyB,EAAE,EAAE;AAAA,EAC1F,IAAI,QAAQ;AACf;AAEA,IAAMC,mBAA0C;AAAA,EAC7C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,EAAE,QAAQ,WAAW,UAAU,CAAC,UAAe,KAAK,WAAW,IAAI,MAAM,GAAG,EAAE,EAAE;AAAA,EAChF,IAAI,QAAQ;AACf;AAEA,IAAM,eAAuC,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC;AAEhF,IAAM,eAAuC;AAAA,EAC1C,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,eAAe,UAAU,CAAC,UAAe,KAAK,eAAe,IAAI,MAAM,GAAG,EAAE,EAAE;AAC3F;AAEO,IAAM,oBAA+B;AAAA,EACzC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,aAAa;AAAA,MACtB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASD;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,eAAe,QAAQ;AAAA,MAC9B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MACnE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,OAAQ,QAAgB,CAAC;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,QAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,eAAe,YAAY,MAAM;AAAA,MACxC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MAC9E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,eAAe;AAAA,QACtC;AACA,mBAAW,QAAQ,KAAKC,gBAAe;AAAA,MAC1C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,eAAe,SAAS,KAAK;AAAA,MACpC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK;AAAA,QACtE,EAAE,MAAM,MAAM,aAAa,sBAAsB,UAAU,KAAK;AAAA,MACnE;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,eAAe;AAAA,UACnC,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,eAAe,SAAS,QAAQ;AAAA,MACvC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MAC9E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,eAAe;AAAA,QACtC;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,eAAe,SAAS,QAAQ;AAAA,MACvC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK;AAAA,QACtE,EAAE,MAAM,MAAM,aAAa,sBAAsB,UAAU,KAAK;AAAA,MACnE;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,eAAe;AAAA,UACnC,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,4BAA4B,KAAK,EAAE;AAAA,CAAI;AAAA,MAC/D;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,eAAe,SAAS,MAAM;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MAC9E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,eAAe;AAAA,QACtC;AACA,cAAM,QAAQ,OAAO,SAAS;AAC9B,mBAAW,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,KAAK,YAAY;AAAA,MACvE;AAAA,IACH;AAAA,EACH;AACH;;;AClIA,IAAMC,WAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,KAAK,YAAY,GAAG;AACtE;AAEA,IAAM,mBAA2C;AAAA,EAC9C,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,OAAO,KAAK,eAAe,EAAE,EAAE;AACjF;AAEA,IAAM,gBAAwC;AAAA,EAC3C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,SAAS,KAAK,QAAQ,GAAG;AAAA,EAC1E,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,cAAc,KAAK,SAAS,GAAG;AAAA,EAChF,EAAE,QAAQ,OAAO,UAAU,CAAC,SAAc,KAAK,YAAY,KAAK,OAAO,GAAG;AAAA,EAC1E,IAAI,OAAO;AACd;AAEA,IAAM,qBAA6C;AAAA,EAChD,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,OAAO,KAAK,YAAY,EAAE,EAAE;AAAA,EAC3E,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAC9D;AAEO,IAAM,kBAA6B;AAAA,EACvC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,WAAW;AAAA,MACpB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA;AAAA,IAED;AAAA,MACG,MAAM,CAAC,aAAa,aAAa,MAAM;AAAA,MACvC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MAC1E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,aAAa;AAAA,QACpC;AACA,mBAAW,QAAQ,KAAK,gBAAgB;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,aAAa,QAAQ;AAAA,MACzC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MAC1E,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,aAAa;AAAA,UACjC;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,gBAAgB;AAAA,MAC7C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,aAAa,QAAQ;AAAA,MACzC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK;AAAA,QAClE,EAAE,MAAM,MAAM,aAAa,eAAe,UAAU,KAAK;AAAA,MAC5D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,aAAa;AAAA,UACjC,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,gBAAgB;AAAA,MAC7C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,aAAa,QAAQ;AAAA,MACzC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK;AAAA,QAClE,EAAE,MAAM,MAAM,aAAa,eAAe,UAAU,KAAK;AAAA,MAC5D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,aAAa;AAAA,UACjC,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,oBAAoB,KAAK,EAAE;AAAA,CAAI;AAAA,MACvD;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,aAAa,UAAU,MAAM;AAAA,MACpC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,eAAe,aAAa,gCAAgC,CAAC;AAAA,MAC5E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,aAAa,KAAK,aAAa,IAAI,cAAc,MAAM,aAAa,IAAI;AAC9E,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,WAAW;AAAA,UAC1E,GAAI,aAAa,EAAE,WAAW,IAAI,CAAC;AAAA,QACtC,CAAC;AACD,mBAAW,QAAQ,KAAK,aAAa;AAAA,MACxC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,UAAU,KAAK;AAAA,MACnC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,YAAY,UAAU,KAAK,CAAC;AAAA,MAC9D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAK,aAAa;AAAA,MAC1C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,UAAU,QAAQ;AAAA,MACtC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,aAAa;AAAA,MAC1C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,UAAU,QAAQ;AAAA,MACtC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,YAAY,UAAU,KAAK,CAAC;AAAA,MAC9D,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,aAAa;AAAA,MAC1C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,UAAU,QAAQ;AAAA,MACtC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,YAAY,UAAU,KAAK,CAAC;AAAA,MAC9D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAK,aAAa;AAAA,MAC1C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,UAAU,QAAQ;AAAA,MACtC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,YAAY,UAAU,KAAK,CAAC;AAAA,MAC9D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,0BAA0B,KAAK,EAAE;AAAA,CAAI;AAAA,MAC7D;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,aAAa,eAAe,MAAM;AAAA,MACzC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,sBAAsB,SAAS;AAC/E,mBAAW,QAAQ,KAAK,kBAAkB;AAAA,MAC7C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,eAAe,KAAK;AAAA,MACxC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MACnE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAK,kBAAkB;AAAA,MAC/C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,eAAe,QAAQ;AAAA,MAC3C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,kBAAkB;AAAA,MAC/C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,eAAe,QAAQ;AAAA,MAC3C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MACnE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,kBAAkB;AAAA,MAC/C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,eAAe,QAAQ;AAAA,MAC3C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MACnE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,sBAAsB,KAAK,EAAE;AAAA,CAAI;AAAA,MACzD;AAAA,IACH;AAAA,EACH;AACH;;;AChQA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,OAAO;AACd;AAEA,IAAM,iBAAyC;AAAA,EAC5C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,aAAa,UAAU,CAAC,SAAc,OAAO,KAAK,gBAAgB,EAAE,EAAE;AAAA,EAChF,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,OAAO,KAAK,aAAa,EAAE,EAAE;AAAA,EAC1E,IAAI,QAAQ;AACf;AAEO,IAAM,kBAA6B;AAAA,EACvC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,YAAY;AAAA,MACrB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,iBAAiB;AAAA,MACjB,SAASA;AAAA,IACZ,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,cAAc,OAAO;AAAA,MAC5B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,gBAAgB,UAAU,KAAK,CAAC;AAAA,MAClE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,aAAa;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,QAAQ,aAAa,kBAAkB,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,MAAM;AAAA,QAC7B;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,cAAc,WAAW,MAAM;AAAA,MACtC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,gBAAgB,aAAa,gBAAgB,UAAU,KAAK;AAAA,QACpE,EAAE,MAAM,QAAQ,aAAa,2BAA2B;AAAA,QACxD,EAAE,MAAM,aAAa,aAAa,0BAA0B;AAAA,QAC5D,EAAE,MAAM,OAAO,aAAa,mBAAmB,QAAQ,KAAK;AAAA,MAC/D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,aAAa,cAAc,MAAM,cAAc;AACrD,cAAM,MAAM,oBAAoB,IAAI;AAEpC,YAAI,IAAI,KAAK;AACV,gBAAM,WAAW,MAAM;AAAA,YAAc,CAAC,EAAE,MAAM,SAAS,MACpD,YAAY,GAAG,EAAE,UAAU,eAAe,WAAW,YAAY;AAAA,cAC9D;AAAA,cACA;AAAA,YACH,CAAC;AAAA,UACJ;AACA,qBAAW,UAAU,KAAK,cAAc;AAAA,QAC3C,OAAO;AACJ,gBAAM,UAAgD,CAAC;AACvD,cAAI,IAAI,KAAM,SAAQ,OAAO,IAAI;AACjC,cAAI,IAAI,SAAU,SAAQ,WAAW,IAAI;AACzC,gBAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,YAC7C;AAAA,YACA;AAAA,YACA;AAAA,UACH;AAEA,qBAAW,WAAW,QAAQ,IAAI,GAAG,KAAK,cAAc;AAAA,QAC3D;AAAA,MACH;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,WAAW,KAAK;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK,CAAC;AAAA,MAC/D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAK,cAAc;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,WAAW,QAAQ;AAAA,MACxC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,gBAAgB,aAAa,gBAAgB,UAAU,KAAK,CAAC;AAAA,MAC5E,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,cAAc;AAAA,UAClC;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,cAAc;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,WAAW,QAAQ;AAAA,MACxC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,gBAAgB,aAAa,gBAAgB,UAAU,KAAK;AAAA,QACpE,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK;AAAA,MAC1D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,cAAc;AAAA,UAClC,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,cAAc;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,WAAW,QAAQ;AAAA,MACxC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,gBAAgB,aAAa,gBAAgB,UAAU,KAAK;AAAA,QACpE,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK;AAAA,MAC1D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,cAAc;AAAA,UAClC,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,uBAAuB,KAAK,EAAE;AAAA,CAAI;AAAA,MAC1D;AAAA,IACH;AAAA,EACH;AACH;;;ACrJA,IAAM,eAAuC;AAAA,EAC1C,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,cAAc,GAAG;AAAA,EAClE,IAAI,QAAQ;AACf;AAEA,IAAMC,iBAAwC;AAAA,EAC3C,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,OAAO;AACd;AAGA,IAAM,iBAAiB,aAAa;AAAA,EACjC,QAAQ,CAAC,UAAU,OAAO;AAAA,EAC1B,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,cAAc;AAAA,EACd,cAAc;AAAA,EACd,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA,EAKd,mBAAmB;AAAA,EACnB,SAAS;AAAA,EACT,gBAAgB;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACH;AACH,CAAC;AAGD,IAAM,oBAAoB,eACtB,OAAO,CAAC,QAAQ;AACd,QAAM,OAAO,IAAI,KAAK,IAAI,KAAK,SAAS,CAAC;AACzC,SAAO,SAAS,UAAU,SAAS;AACtC,CAAC,EACA,IAAI,CAAC,SAAS;AAAA,EACZ,GAAG;AAAA,EACH,MAAM,CAAC,UAAU,IAAI,KAAK,IAAI,KAAK,SAAS,CAAC,CAAE;AAAA,EAC/C,aAAa,GAAG,IAAI,WAAW,4BAA4B,IAAI,KAAK,IAAI,KAAK,SAAS,CAAC,CAAC;AAC3F,EAAE;AAEE,IAAM,eAA0B;AAAA,EACpC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA;AAAA,IAEP,GAAG;AAAA;AAAA,IAEH,GAAG;AAAA,IACH;AAAA,MACG,MAAM,CAAC,UAAU,SAAS,YAAY;AAAA,MACtC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,WAAW,aAAa,gBAAgB,CAAC;AAAA,MACxD,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,KAAK,SAAS,IAAI,cAAc,MAAM,SAAS,IAAI;AAClE,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,WAAW;AAAA,UAC1E,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,QAC9B,CAAC;AACD,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,MAKG,MAAM,CAAC,UAAU,SAAS,QAAQ;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH;AAAA,UACG,MAAM;AAAA,UACN,aACG;AAAA,QACN;AAAA,QACA,EAAE,MAAM,cAAc,aAAa,uBAAuB;AAAA,QAC1D,EAAE,MAAM,eAAe,aAAa,wBAAwB;AAAA,QAC5D,EAAE,MAAM,WAAW,aAAa,oBAAoB;AAAA,QACpD,EAAE,MAAM,gBAAgB,aAAa,yBAAyB;AAAA,QAC9D,EAAE,MAAM,cAAc,aAAa,uBAAuB;AAAA,QAC1D,EAAE,MAAM,eAAe,aAAa,wBAAwB;AAAA,QAC5D,EAAE,MAAM,mBAAmB,aAAa,4BAA4B;AAAA,QACpE;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,QAChB;AAAA,MACH;AAAA,MACA,SAAS;AAAA,MACT,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,OAA6B,CAAC;AACpC,YAAI,KAAK,aAAa,EAAG,MAAK,aAAa,KAAK,aAAa;AAC7D,YAAI,KAAK,YAAY,EAAG,MAAK,YAAY,KAAK,YAAY;AAC1D,YAAI,KAAK,aAAa,EAAG,MAAK,aAAa,KAAK,aAAa;AAC7D,YAAI,KAAK,SAAS,EAAG,MAAK,SAAS,cAAc,MAAM,SAAS;AAChE,YAAI,KAAK,cAAc,EAAG,MAAK,aAAa,cAAc,MAAM,cAAc;AAC9E,YAAI,KAAK,YAAY,EAAG,MAAK,YAAY,cAAc,MAAM,YAAY;AACzE,YAAI,KAAK,aAAa,EAAG,MAAK,aAAa,cAAc,MAAM,aAAa;AAC5E,YAAI,KAAK,iBAAiB;AACvB,eAAK,gBAAgB,cAAc,MAAM,iBAAiB;AAC7D,YAAI,KAAK,kBAAkB,EAAG,MAAK,kBAAkB;AACrD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,WAAW,IAAI;AAChF,mBAAW,QAAQ,KAAK,YAAY;AAAA,MACvC;AAAA,IACH;AAAA;AAAA,IAEA,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,UAAU;AAAA,MACnB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,mBAAmB;AAAA,MACnB,SAASA;AAAA,IACZ,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,YAAY,KAAK;AAAA,MACxB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACvB,QAAQ,CAAC;AAAA,QACb;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,QAAQ,MAAM;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,QAChB;AAAA,QACA,EAAE,MAAM,UAAU,aAAa,uBAAuB;AAAA,QACtD,EAAE,MAAM,QAAQ,aAAa,0BAA0B;AAAA,QACvD,EAAE,MAAM,aAAa,aAAa,sBAAsB;AAAA,MAC3D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,KAAK,KAAK,cAAc,MAAM,IAAI,IAAI;AACxD,cAAM,OAAO,KAAK,OAAO,cAAc,MAAM,MAAM,IAAI;AACvD,cAAM,WAAW,KAAK,WAAW,IAAI,cAAc,MAAM,WAAW,IAAI;AACxE,cAAM,SAAU,KAAK,UAAiC;AACtD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,eAAe,WAAW;AAAA,UACvE,GAAI,cAAc,SAAY,EAAE,UAAU,IAAI,CAAC;AAAA,UAC/C,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,UACrC,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,UAC7C,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,QAC9B,CAAC;AACD,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,EACH;AACH;;;AC/LA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,gBAAgB,KAAK,QAAQ,GAAG;AAAA,EAChF,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,OAAO,KAAK,QAAQ,EAAE,EAAE;AAAA,EACnE,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,OAAO,KAAK,aAAa,EAAE,EAAE;AAC7E;AAEA,IAAM,iBAAyC;AAAA,EAC5C,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,OAAO,KAAK,YAAY,EAAE,EAAE;AAAA,EACzE,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,OAAO,KAAK,cAAc,EAAE,EAAE;AAAA,EAC7E,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,OAAO,KAAK,aAAa,EAAE,EAAE;AAAA,EACzE,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,UAAU,GAAG;AAClE;AAEA,IAAMC,iBAAwC;AAAA,EAC3C,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,SAAS,GAAG;AAChE;AAEO,IAAM,cAAyB;AAAA,EACnC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,OAAO;AAAA,MAChB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASD;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA;AAAA,IAED,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,SAAS,SAAS;AAAA,MAC3B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA,MACT,UAAU;AAAA,QACP;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,UAAU;AAAA,QACb;AAAA,MACH;AAAA,IACH,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,SAAS,WAAW,SAAS;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK,CAAC;AAAA,MAC/D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU,cAAc,WAAW,cAAc,MAAM,IAAI,CAAC;AACnF,gBAAQ,OAAO,MAAM,qBAAqB,KAAK,EAAE;AAAA,CAAI;AAAA,MACxD;AAAA,IACH;AAAA;AAAA,IAEA,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,SAAS,QAAQ;AAAA,MAC1B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASC;AAAA,IACZ,CAAC;AAAA,EACJ;AACH;;;AC3EA,IAAM,kBAA0C;AAAA,EAC7C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,QAAQ,UAAU,CAAC,UAAe,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE;AAAA,EACzE,IAAI,KAAK;AAAA,EACT,IAAI,OAAO;AAAA,EACX,IAAI,QAAQ;AACf;AAEA,IAAM,eAAuC;AAAA,EAC1C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,QAAQ,UAAU,CAAC,UAAe,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE;AAAA,EACzE,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,YAAY,GAAG;AAAA,EAC/D,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,eAAe,GAAG;AAAA,EACrE,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,OAAO,KAAK,SAAS,EAAE,EAAE;AACxE;AAEA,IAAM,yBAAiD;AAAA,EACpD,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,OAAO,KAAK,YAAY,EAAE,EAAE;AAAA,EACzE,IAAI,OAAO;AAAA,EACX,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,KAAK,cAAc,GAAG;AACxE;AAEA,IAAM,sBAA8C;AAAA,EACjD,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,OAAO,KAAK,iBAAiB,EAAE,EAAE;AAAA,EAC5E,IAAI,OAAO;AAAA,EACX,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,KAAK,cAAc,GAAG;AAAA,EACrE,EAAE,QAAQ,aAAa,UAAU,CAAC,SAAc,KAAK,eAAe,GAAG;AAC1E;AAEA,IAAM,eAAuC;AAAA,EAC1C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,QAAQ,UAAU,CAAC,UAAe,KAAK,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE;AAAA,EACzE,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAe,KAAK,SAAS,OAAO,OAAO,KAAK,KAAK,IAAI,GAAI;AAAA,EAC3F;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,iBAAiB,OAAO,OAAO,KAAK,aAAa,IAAI;AAAA,EACvF;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,iBAAiB,OAAO,OAAO,KAAK,aAAa,IAAI;AAAA,EACvF;AACH;AAEA,IAAM,qBAA6C;AAAA,EAChD,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,OAAO,KAAK,gBAAgB,EAAE,EAAE;AAAA,EAC7E,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,OAAO,KAAK,eAAe,EAAE,EAAE;AAAA,EAC3E,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAe,KAAK,WAAW,QAAQ,GAAI;AAAA,EAC5E;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,kBAAkB,OAAO,GAAG,KAAK,cAAc,MAAM;AAAA,EACvF;AAAA,EACA,EAAE,QAAQ,aAAa,UAAU,CAAC,SAAc,KAAK,gBAAgB,GAAG;AAAA,EACxE;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,YAAY,OAAO,OAAO,KAAK,QAAQ,IAAI;AAAA,EAC7E;AACH;AAEA,IAAMC,gBAAuC;AAAA,EAC1C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,OAAO,KAAK,aAAa,EAAE,EAAE;AAAA,EAC1E,EAAE,QAAQ,WAAW,UAAU,CAAC,UAAe,KAAK,YAAY,IAAI,MAAM,GAAG,EAAE,EAAE;AAAA,EACjF,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,aAAa,GAAG;AACtE;AAIA,SAAS,QAAQ,KAA2B,KAAqB;AAC9D,SAAO,GAAG,IAAI,UAAU,MAAM,aAAa,GAAG;AACjD;AAEA,SAAS,SAAS,KAA2B,KAAa,WAA2B;AAClF,SAAO,GAAG,QAAQ,KAAK,GAAG,CAAC,IAAI,SAAS;AAC3C;AAEA,SAAS,QAAQ,KAAmD;AACjE,SAAO;AAAA,IACJ,eAAe,UAAU,IAAI,WAAW;AAAA,IACxC,gBAAgB;AAAA,EACnB;AACH;AAEA,eAAe,YAAY,KAAgC;AACxD,MAAI;AACD,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,UAAM,OAAO,KAAK,MAAM,IAAI;AAC5B,WAAO,KAAK,UAAU,KAAK,WAAW;AAAA,EACzC,QAAQ;AACL,WAAO;AAAA,EACV;AACH;AAEA,eAAe,OAAO,KAA2B,KAA+B;AAC7E,QAAM,MAAM,MAAM,MAAM,KAAK,EAAE,SAAS,QAAQ,GAAG,EAAE,CAAC;AACtD,MAAI,CAAC,IAAI,IAAI;AACV,UAAM,SAAS,MAAM,YAAY,GAAG;AACpC,UAAM,IAAI,SAAS,OAAO,GAAG,YAAY,IAAI,MAAM,GAAG,SAAS,WAAM,MAAM,KAAK,EAAE,EAAE;AAAA,EACvF;AACA,SAAO,IAAI,KAAK;AACnB;AAEA,eAAe,QAAQ,KAA2B,KAAa,MAAkC;AAC9F,QAAM,MAAM,MAAM,MAAM,KAAK;AAAA,IAC1B,QAAQ;AAAA,IACR,SAAS,QAAQ,GAAG;AAAA,IACpB,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI;AAAA,EACvC,CAAC;AACD,MAAI,CAAC,IAAI,IAAI;AACV,UAAM,SAAS,MAAM,YAAY,GAAG;AACpC,UAAM,IAAI,SAAS,QAAQ,GAAG,YAAY,IAAI,MAAM,GAAG,SAAS,WAAM,MAAM,KAAK,EAAE,EAAE;AAAA,EACxF;AACA,SAAO,IAAI,KAAK;AACnB;AAEA,eAAe,OAAO,KAA2B,KAAa,MAAiC;AAC5F,QAAM,MAAM,MAAM,MAAM,KAAK;AAAA,IAC1B,QAAQ;AAAA,IACR,SAAS,QAAQ,GAAG;AAAA,IACpB,MAAM,KAAK,UAAU,IAAI;AAAA,EAC5B,CAAC;AACD,MAAI,CAAC,IAAI,IAAI;AACV,UAAM,SAAS,MAAM,YAAY,GAAG;AACpC,UAAM,IAAI,SAAS,OAAO,GAAG,YAAY,IAAI,MAAM,GAAG,SAAS,WAAM,MAAM,KAAK,EAAE,EAAE;AAAA,EACvF;AACA,SAAO,IAAI,KAAK;AACnB;AAEA,eAAe,UAAU,KAA2B,KAA4B;AAC7E,QAAM,MAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,UAAU,SAAS,QAAQ,GAAG,EAAE,CAAC;AACxE,MAAI,CAAC,IAAI,IAAI;AACV,UAAM,SAAS,MAAM,YAAY,GAAG;AACpC,UAAM,IAAI,SAAS,UAAU,GAAG,YAAY,IAAI,MAAM,GAAG,SAAS,WAAM,MAAM,KAAK,EAAE,EAAE;AAAA,EAC1F;AACH;AAIO,IAAM,iBAA4B;AAAA,EACtC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA;AAAA,IAEP;AAAA,MACG,MAAM,CAAC,YAAY,MAAM;AAAA,MACzB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,UAAU,CAAC,wCAAwC;AAAA,MACnD,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,OAAO,YAAY,GAAG,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC;AAClF,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,eAAe;AAAA,MAC7D;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,KAAK;AAAA,MACxB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE;AAAA,QAChD;AACA,qBAAa,QAAQ,KAAK,eAAe;AAAA,MAC5C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,QAAQ;AAAA,MAC3B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,UAAU;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,QAAQ,YAAY,GAAG,GAAG,SAAS;AAAA,UACnC;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,eAAe;AAAA,MAC5C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,QAAQ;AAAA,MAC3B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,UAAU,CAAC,2EAA6E;AAAA,MACxF,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE;AAAA,UAC7C;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,eAAe;AAAA,MAC5C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS;AAAA,MAC5B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,UAAU,YAAY,GAAG,GAAG,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE;AACjF,gBAAQ,OAAO,MAAM,oBAAoB,EAAE;AAAA,CAAI;AAAA,MAClD;AAAA,IACH;AAAA;AAAA,IAGA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,MAAM;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,UAAU,CAAC,0CAA0C;AAAA,MACrD,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,SAAU,MAAM;AAAA,UACnB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE;AAAA,QAChD;AACA,mBAAW,QAAQ,SAAS,CAAC,GAAG,KAAK,YAAY;AAAA,MACpD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MACxE,UAAU;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS;AAAA,UACpD;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK;AAAA,MAC1D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,UAAU,MAAM;AAAA,UACpE;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,SAAS;AAAA,MACrC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK;AAAA,MAC1D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM;AAAA,UACH,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,UAAU,MAAM;AAAA,QACvE;AACA,gBAAQ,OAAO,MAAM,iBAAiB,MAAM;AAAA,CAAI;AAAA,MACnD;AAAA,IACH;AAAA;AAAA,IAGA;AAAA,MACG,MAAM,CAAC,YAAY,eAAe,MAAM;AAAA,MACxC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,UAAU,CAAC,gDAAgD;AAAA,MAC3D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,SAAU,MAAM;AAAA,UACnB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE;AAAA,QAChD;AAEA,cAAM,OAAO,oBAAI,IAAY;AAC7B,cAAM,cAAyB,CAAC;AAChC,mBAAW,QAAQ,QAAQ,SAAS,CAAC,GAAG;AACrC,qBAAW,QAAQ,MAAM,oBAAoB,CAAC,GAAG;AAC9C,gBAAI,CAAC,KAAK,IAAI,KAAK,EAAE,GAAG;AACrB,mBAAK,IAAI,KAAK,EAAE;AAChB,0BAAY,KAAK,IAAI;AAAA,YACxB;AAAA,UACH;AAAA,QACH;AACA,mBAAW,aAAa,KAAK,kBAAkB;AAAA,MAClD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,eAAe,QAAQ;AAAA,MAC1C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MACxE,UAAU;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS;AAAA,UACpD;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,kBAAkB;AAAA,MAC/C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,eAAe,QAAQ;AAAA,MAC1C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK;AAAA,MAC9D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,gBAAgB,MAAM;AAAA,UAC1E;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,kBAAkB;AAAA,MAC/C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,eAAe,QAAQ;AAAA,MAC1C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK;AAAA,MAC9D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM;AAAA,UACH,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,gBAAgB,MAAM;AAAA,QAC7E;AACA,gBAAQ,OAAO,MAAM,sBAAsB,MAAM;AAAA,CAAI;AAAA,MACxD;AAAA,IACH;AAAA;AAAA,IAGA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,MAAM;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,UAAU,CAAC,0CAA0C;AAAA,MACrD,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,SAAU,MAAM;AAAA,UACnB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE;AAAA,QAChD;AACA,mBAAW,QAAQ,SAAS,CAAC,GAAG,KAAK,YAAY;AAAA,MACpD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MACxE,UAAU;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS;AAAA,UACpD;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK;AAAA,MAC1D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,UAAU,MAAM;AAAA,UACpE;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK;AAAA,MAC1D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM;AAAA,UACH,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,UAAU,MAAM;AAAA,QACvE;AACA,gBAAQ,OAAO,MAAM,gBAAgB,MAAM;AAAA,CAAI;AAAA,MAClD;AAAA,IACH;AAAA;AAAA,IAGA;AAAA,MACG,MAAM,CAAC,YAAY,QAAQ;AAAA,MAC3B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,UAAU;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE;AAAA,UAC7C;AAAA,QACH;AACA,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,sBAAsB;AAAA,MACpE;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,UAAU;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,UAAU;AAAA,QACP;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM;AAAA,UACH,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE;AAAA,UAC7C;AAAA,QACH;AACA,gBAAQ,OAAO,MAAM,qCAAqC,EAAE;AAAA,CAAI;AAAA,MACnE;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,UAAU;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE;AAAA,UAC7C;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,sBAAsB;AAAA,MACnD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,WAAW,QAAQ;AAAA,MACtC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK;AAAA,MACjE;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,WAAW,cAAc,MAAM,WAAW;AAChD,cAAM;AAAA,UACH,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,YAAY,QAAQ;AAAA,QAC3E;AACA,gBAAQ,OAAO;AAAA,UACZ,iCAAiC,QAAQ,iBAAiB,SAAS;AAAA;AAAA,QACtE;AAAA,MACH;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,WAAW,MAAM;AAAA,MACpC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MACxE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS;AAAA,QACvD;AACA,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,sBAAsB;AAAA,MACpE;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,WAAW,KAAK;AAAA,MACnC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,WAAW,cAAc,MAAM,WAAW;AAChD,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,cAAc,QAAQ;AAAA,QAChE;AACA,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,sBAAsB;AAAA,MACpE;AAAA,IACH;AAAA;AAAA,IAGA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,SAAS;AAAA,MACrC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK;AAAA,MAC1D;AAAA,MACA,UAAU;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,UAAU,MAAM;AAAA,UACpE,QAAQ,CAAC;AAAA,QACZ;AACA,qBAAa,QAAQ,KAAK,mBAAmB;AAAA,MAChD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,MAAM;AAAA,MAClC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK;AAAA,MAC1D;AAAA,MACA,UAAU;AAAA,QACP;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,UAAU,MAAM;AAAA,UACpE,QAAQ,CAAC;AAAA,QACZ;AACA,qBAAa,QAAQ,KAAK,mBAAmB;AAAA,MAChD;AAAA,IACH;AAAA;AAAA,IAGA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,SAAS;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,aAAa,UAAU,KAAK;AAAA,MAC1D;AAAA,MACA,UAAU;AAAA,QACP;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,KAAK,IAAI,gBAAgB;AAC/B,YAAI,QAAQ,OAAO,SAAS,UAAU;AACnC,gBAAM,IAAI;AACV,cAAI,EAAE,OAAQ,IAAG,IAAI,UAAU,OAAO,EAAE,MAAM,CAAC;AAC/C,cAAI,EAAE,KAAM,IAAG,IAAI,QAAQ,OAAO,EAAE,IAAI,CAAC;AACzC,cAAI,EAAE,KAAM,IAAG,IAAI,QAAQ,OAAO,EAAE,IAAI,CAAC;AACzC,cAAI,EAAE,SAAU,IAAG,IAAI,YAAY,OAAO,EAAE,QAAQ,CAAC;AAAA,QACxD;AACA,cAAM,QAAQ,GAAG,SAAS;AAC1B,cAAM,MAAM,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,SAAS,UAAU,MAAM,WAAW,QAAQ,IAAI,KAAK,KAAK,EAAE;AACnH,cAAM,SAAS,MAAM,OAAO,YAAY,GAAG,GAAG,GAAG;AACjD,cAAM,mBAA2C;AAAA,UAC9C,EAAE,QAAQ,aAAa,UAAU,CAAC,SAAc,OAAO,KAAK,YAAY,EAAE,EAAE;AAAA,UAC5E,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,cAAc,GAAG;AAAA,UACjE,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,cAAc,GAAG;AAAA,UACnE,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,KAAK,cAAc,GAAG;AAAA,UACrE,EAAE,QAAQ,aAAa,UAAU,CAAC,SAAc,KAAK,eAAe,GAAG;AAAA,UACvE,EAAE,QAAQ,aAAa,UAAU,CAAC,SAAc,KAAK,eAAe,GAAG;AAAA,QAC1E;AACA,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,gBAAgB;AAAA,MAC9D;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,oBAAoB;AAAA,MACvC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,UAAU,CAAC,+CAA+C;AAAA,MAC1D,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,QAAQ,YAAY,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE;AAAA,QAChD;AACA,cAAM,aAAqC;AAAA,UACxC,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,OAAO,KAAK,UAAU,EAAE,EAAE;AAAA,UACxE;AAAA,YACG,QAAQ;AAAA,YACR,UAAU,CAAC,UAAe,KAAK,YAAY,IAAI,MAAM,GAAG,CAAC;AAAA,UAC5D;AAAA,UACA,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,OAAO,KAAK,SAAS,CAAC,EAAE;AAAA,UACpE;AAAA,YACG,QAAQ;AAAA,YACR,UAAU,CAAC,SAAc;AACtB,oBAAM,KAAK,KAAK;AAChB,kBAAI,CAAC,MAAM,OAAO,OAAO,SAAU,QAAO;AAC1C,qBAAO,OAAO,QAAQ,EAAE,EACpB,OAAO,CAAC,CAAC,EAAE,CAAC,MAAO,IAAe,CAAC,EACnC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,EAAE,EAC3B,KAAK,IAAI;AAAA,YAChB;AAAA,UACH;AAAA,QACH;AACA,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,UAAU;AAAA,MACxD;AAAA,IACH;AAAA;AAAA,IAGA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,MAAM;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MACxE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,SAAS,YAAY,GAAG,GAAG,WAAW,SAAS;AAAA,QAClD;AACA,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAKA,aAAY;AAAA,MAC1D;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MACxE,UAAU;AAAA,QACP;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,0CAA0C;AACxE,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,SAAS,YAAY,GAAG,GAAG,WAAW,SAAS;AAAA,UAC/C;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,aAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK;AAAA,MACxD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,0CAA0C;AACxE,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,SAAS,MAAM;AAAA,UAClB,YAAY,GAAG;AAAA,UACf,GAAG,SAAS,YAAY,GAAG,GAAG,WAAW,SAAS,CAAC,IAAI,MAAM;AAAA,UAC7D;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,aAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,SAAS,QAAQ;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,cAAc,UAAU,KAAK;AAAA,QAChE,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK;AAAA,MACxD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM;AAAA,UACH,YAAY,GAAG;AAAA,UACf,GAAG,SAAS,YAAY,GAAG,GAAG,WAAW,SAAS,CAAC,IAAI,MAAM;AAAA,QAChE;AACA,gBAAQ,OAAO,MAAM,gBAAgB,MAAM;AAAA,CAAI;AAAA,MAClD;AAAA,IACH;AAAA,EACH;AACH;;;ACvyBA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,OAAO,UAAU,CAAC,SAAe,KAAK,OAAO,OAAO,OAAO,KAAK,GAAG,IAAI,GAAI;AAAA,EACrF;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,WAAW,QAAQ;AAAA,EACrD;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,WAAW,QAAQ;AAAA,EACrD;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SACR,KAAK,cAAc,OAAO,OAAO,KAAK,KAAK,WAAW,EAAE,MAAM,IAAI;AAAA,EACxE;AAAA,EACA,IAAI,QAAQ;AACf;AAEO,IAAM,iBAA4B;AAAA,EACtC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,UAAU;AAAA,MACnB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA,EACJ;AACH;;;ACnCA,IAAM,wBAAgD;AAAA,EACnD,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,OAAO,KAAK,cAAc,EAAE,EAAE;AAAA,EAC7E,EAAE,QAAQ,iBAAiB,UAAU,CAAC,SAAc,KAAK,gBAAgB,GAAG;AAAA,EAC5E,IAAI,QAAQ;AACf;AAEA,IAAM,mBAA2C;AAAA,EAC9C,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,eAAe,GAAG;AAAA,EACrE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,WAAW,GAAG;AACpE;AAEA,IAAM,cAAsC;AAAA,EACzC,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,OAAO,KAAK,cAAc,EAAE,EAAE;AAAA,EAC7E;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SACR,KAAK,iBAAiB,KAAK,cAAc,OAAO,OAAO,KAAK,UAAU,IAAI;AAAA,EAChF;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SACR,KAAK,kBAAkB,OAClB,SACC,KAAK,oBAAoB,WAAW,KAAK,cAAc;AAAA,EACnE;AAAA,EACA,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,aAAa,GAAG;AAAA,EACnE,EAAE,QAAQ,aAAa,UAAU,CAAC,SAAc,KAAK,eAAe,GAAG;AAAA,EACvE;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,gBAAgB,OAAO,OAAO,KAAK,YAAY,IAAI;AAAA,EACrF;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,UAAU,OAAO,OAAO,KAAK,MAAM,IAAI;AAAA,EACzE;AACH;AAEO,IAAM,uBAAkC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,kBAAkB,MAAM;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,SAAS;AAC3E,mBAAW,OAAO,OAAO,KAAK,qBAAqB;AAAA,MACtD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,KAAK;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,oBAAoB,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,cAAc;AAAA,MACvC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MAC1E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,aAAa;AAAA,QACpC;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,kBAAkB,aAAa,MAAM;AAAA,MAC5C,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,oBAAoB,aAAa,oBAAoB,UAAU,KAAK,CAAC;AAAA,MACpF,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,kBAAkB;AAAA,QACzC;AACA,mBAAW,QAAQ,KAAK,gBAAgB;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,aAAa,KAAK;AAAA,MAC3C,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MACjE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAK,gBAAgB;AAAA,MAC7C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,aAAa,QAAQ;AAAA,MAC9C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,oBAAoB,aAAa,oBAAoB,UAAU,KAAK,CAAC;AAAA,MACpF,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,kBAAkB;AAAA,UACtC;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,gBAAgB;AAAA,MAC7C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,aAAa,QAAQ;AAAA,MAC9C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MACjE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,gBAAgB;AAAA,MAC7C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,aAAa,QAAQ;AAAA,MAC9C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,eAAe,UAAU,KAAK,CAAC;AAAA,MACjE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU,eAAe,WAAW,cAAc,MAAM,IAAI,CAAC;AACpF,gBAAQ,OAAO,MAAM,qBAAqB,KAAK,IAAI,CAAC;AAAA,CAAI;AAAA,MAC3D;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,kBAAkB,QAAQ,MAAM;AAAA,MACvC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK;AAAA,QAClE,EAAE,MAAM,eAAe,aAAa,sBAAsB,UAAU,MAAM;AAAA,MAC7E;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,aAAa,KAAK,aAAa,IAAI,cAAc,MAAM,aAAa,IAAI;AAC9E,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,aAAa;AAAA,UACjC,cAAc,OAAO,EAAE,WAAW,IAAI;AAAA,QACzC;AACA,mBAAW,QAAQ,KAAK,WAAW;AAAA,MACtC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,QAAQ,KAAK;AAAA,MACtC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,oBAAoB,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,QAAQ,OAAO;AAAA,MACxC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,eAAe,aAAa,eAAe,UAAU,KAAK;AAAA,QAClE,EAAE,MAAM,eAAe,aAAa,sBAAsB,UAAU,MAAM;AAAA,QAC1E;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,UAAU;AAAA,QACb;AAAA,QACA,EAAE,MAAM,QAAQ,aAAa,+BAA+B,UAAU,MAAM;AAAA,QAC5E,EAAE,MAAM,UAAU,aAAa,6BAA6B,UAAU,MAAM;AAAA,MAC/E;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAU,KAAK,QAAQ,MAAM,UAAU,UAAU;AACvD,cAAM,aAAa,KAAK,aAAa,IAAI,cAAc,MAAM,aAAa,IAAI;AAC9E,cAAM,YAAY,KAAK,YAAY,IAAI,cAAc,MAAM,YAAY,IAAI;AAC3E,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,aAAa;AAAA,UACjC;AAAA,YACG,GAAI,cAAc,OAAO,EAAE,WAAW,IAAI,CAAC;AAAA,YAC3C,GAAI,aAAa,OAAO,EAAE,UAAU,IAAI,CAAC;AAAA,YACzC,GAAI,KAAK,MAAM,IAAI,EAAE,MAAM,OAAO,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC;AAAA,YACrD;AAAA,UACH;AAAA,QACH;AACA,qBAAa,OAAO,KAAK,GAAG;AAAA,MAC/B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,QAAQ,UAAU;AAAA,MAC3C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,oBAAoB,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,wCAAwC,KAAK,IAAI,CAAC;AAAA,CAAI;AAAA,MAC9E;AAAA,IACH;AAAA,EACH;AACH;;;ACnOA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,UAAU,GAAG;AAClE;AAEA,IAAM,eAAuC;AAAA,EAC1C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,SAAS,GAAG;AAAA,EAC7D,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,OAAO;AACd;AAEA,IAAM,eAAuC;AAAA,EAC1C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,SAAS,GAAG;AAAA,EAC7D,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,OAAO,KAAK,SAAS,EAAE,EAAE;AACxE;AAEO,IAAM,cAAyB;AAAA,EACnC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,OAAO;AAAA,MAChB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,IACZ,CAAC;AAAA;AAAA,IAED;AAAA,MACG,MAAM,CAAC,SAAS,SAAS,MAAM;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAClE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,QAChC;AACA,mBAAW,QAAQ,KAAK,YAAY;AAAA,MACvC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,SAAS,KAAK;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK;AAAA,QAC1D,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK;AAAA,MACxD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,UAC7B,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,SAAS,QAAQ;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAClE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,UAC7B;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,SAAS,QAAQ;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK;AAAA,QAC1D,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK;AAAA,MACxD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,UAC7B,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,SAAS,QAAQ;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK;AAAA,QAC1D,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK;AAAA,MACxD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,UAC7B,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,gBAAgB,KAAK,EAAE;AAAA,CAAI;AAAA,MACnD;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,SAAS,QAAQ,MAAM;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAClE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,QAChC;AACA,mBAAW,QAAQ,KAAK,YAAY;AAAA,MACvC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,QAAQ,QAAQ;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAClE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,UAC7B;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,QAAQ,QAAQ;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK;AAAA,QAC1D,EAAE,MAAM,MAAM,aAAa,gBAAgB,UAAU,KAAK;AAAA,MAC7D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,UAC7B,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,YAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,QAAQ,QAAQ;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,WAAW,aAAa,WAAW,UAAU,KAAK;AAAA,QAC1D,EAAE,MAAM,MAAM,aAAa,gBAAgB,UAAU,KAAK;AAAA,MAC7D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,SAAS;AAAA,UAC7B,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,qBAAqB,KAAK,EAAE;AAAA,CAAI;AAAA,MACxD;AAAA,IACH;AAAA,EACH;AACH;;;AC1LA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,OAAO;AAAA,EACX,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,OAAO,KAAK,qBAAqB,EAAE,EAAE;AAAA,EACnF,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,OAAO,KAAK,qBAAqB,EAAE,EAAE;AAAA,EACnF,IAAI,QAAQ;AACf;AAEO,IAAM,qBAAgC;AAAA,EAC1C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,iBAAiB,MAAM;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,gBAAgB,SAAS;AACzE,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAKA,SAAO;AAAA,MACrD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,KAAK;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,mBAAmB,UAAU,KAAK,CAAC;AAAA,MACrE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,QAAQ;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,UAAU;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,oBAAoB,WAAW;AAAA,UAC5E,UAAU;AAAA,QACb,CAAC;AACD,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAKA,SAAO;AAAA,MACrD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,OAAO;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,WAAW;AAAA,UACzE,UAAU;AAAA,QACb,CAAC;AACD,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAKA,SAAO;AAAA,MACrD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,SAAS;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,mBAAmB,UAAU,KAAK,CAAC;AAAA,MACrE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACvB,QAAQ,CAAC;AAAA,QACb;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,QAAQ;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,mBAAmB,UAAU,KAAK,CAAC;AAAA,MACrE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACvB,QAAQ,CAAC;AAAA,QACb;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,QAAQ;AAAA,MAChC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,WAAW;AAAA,QAClC;AACA,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAKA,SAAO;AAAA,MACrD;AAAA,IACH;AAAA,EACH;AACH;;;ACjHA,IAAMC,YAAkC;AAAA,EACrC,EAAE,QAAQ,MAAM,UAAU,CAAC,SAAc,OAAO,KAAK,MAAM,KAAK,YAAY,EAAE,EAAE;AAAA,EAChF,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,KAAK,gBAAgB,GAAG;AAAA,EAChF,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,KAAK,YAAY,GAAG;AAAA,EACnE,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAC9D;AAEO,IAAM,iBAA4B;AAAA,EACtC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,aAAa,MAAM;AAAA,MAC1B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,aAAa;AAC7D,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,MAAM;AAAA,MAC1B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,cAAc;AAC9D,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,UAAU;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB;AAClE,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,OAAO;AAAA,MAC3B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,eAAe;AAC/D,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,EACH;AACH;;;AChDA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,UAAU,GAAG;AAAA,EAC/D,IAAI,QAAQ;AACf;AAEO,IAAM,gBAA2B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,YAAY,MAAM;AAAA,MACzB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,WAAW,SAAS;AACpE,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,QAAQ;AAAA,MAC3B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,aAAa,WAAW,IAAW;AACnF,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,QAAQ;AAAA,MAC3B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,YAAY,GAAG,EAAE,UAAU,aAAa,WAAW,EAAE;AAC3D,gBAAQ,OAAO,MAAM,mBAAmB,EAAE;AAAA,CAAI;AAAA,MACjD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,UAAU,MAAM;AAAA,MACnC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB;AACjE,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,UAAU,QAAQ;AAAA,MACrC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,IAAW;AAC9E,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,UAAU,QAAQ;AAAA,MACrC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,EAAE;AACtD,gBAAQ,OAAO,MAAM,0BAA0B,EAAE;AAAA,CAAI;AAAA,MACxD;AAAA,IACH;AAAA,EACH;AACH;;;ACzEA,IAAM,cAAsC;AAAA,EACzC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,aAAa,UAAU,CAAC,SAAc,KAAK,aAAa,GAAG;AAAA,EACrE,IAAI,OAAO;AACd;AAEA,IAAM,kBAA0C,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC;AAEnF,IAAM,kBAA0C,CAAC,IAAI,GAAG,GAAG,IAAI,OAAO,GAAG,IAAI,QAAQ,CAAC;AAE/E,IAAM,aAAwB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA;AAAA,IAEP;AAAA,MACG,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,SAAS;AACzD,mBAAW,QAAQ,KAAK,WAAW;AAAA,MACtC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,KAAK;AAAA,MACpB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,UAAU,UAAU,KAAK,CAAC;AAAA,MAC5D,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,OAAO,cAAc,MAAM,IAAI,CAAC;AAChF,qBAAa,QAAQ,KAAK,WAAW;AAAA,MACxC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,QAAQ;AAAA,MACvB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,UAAU,IAAW;AACrE,qBAAa,QAAQ,KAAK,WAAW;AAAA,MACxC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,QAAQ;AAAA,MACvB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,UAAU,UAAU,KAAK,CAAC;AAAA,MAC5D,SAAS,OAAO,EAAE,KAAK,MAAM,KAAK,MAAM;AACrC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAK,WAAW;AAAA,MACxC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,QAAQ;AAAA,MACvB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,UAAU,UAAU,KAAK,CAAC;AAAA,MAC5D,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,YAAY,GAAG,EAAE,UAAU,UAAU,EAAE;AAC7C,gBAAQ,OAAO,MAAM,eAAe,EAAE;AAAA,CAAI;AAAA,MAC7C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,mBAAmB;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,UAAU,UAAU,KAAK,CAAC;AAAA,MAC5D,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA;AAAA,IAGA,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,QAAQ,UAAU;AAAA,MAC3B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,QAAQ,YAAY,MAAM;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,mBAAW,QAAQ,KAAK,WAAW;AAAA,MACtC;AAAA,IACH;AAAA;AAAA,IAGA,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,QAAQ,WAAW;AAAA,MAC5B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,mBAAmB;AAAA,IACtB,CAAC;AAAA,EACJ;AACH;;;AC5HO,IAAM,mBAA8B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,QAAQ,SAAS;AAAA,MACxB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,eAAe;AAC/D,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,gBAAgB;AAAA,MAC/B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,IAAW;AAC7E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,iBAAiB;AAAA,MAChC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB;AAClE,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,iBAAiB;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC5C,MAAc;AAAA,UACd,MAAc;AAAA,QAClB;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,cAAc;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,YAAY,IAAW;AACvE,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,YAAY;AAAA,MAC3B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB;AACnE,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,4BAA4B;AAAA,MAC3C,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,4BAA4B;AAC5E,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,2BAA2B;AAAA,MAC1C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC5C,MAAc;AAAA,UACd,MAAc;AAAA,QAClB;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,0BAA0B;AAAA,MACzC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,wBAAwB,UAAU,KAAK,CAAC;AAAA,MAC1E,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,YAAY,GAAG,EAAE,UAAU,uBAAuB,cAAc,MAAM,IAAI,CAAC;AACjF,gBAAQ,OAAO,MAAM,+BAA+B,KAAK,EAAE;AAAA,CAAI;AAAA,MAClE;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,QAAQ,SAAS;AAAA,MACxB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,gBAAgB;AAChE,cAAM,UAAkC;AAAA,UACrC,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,gBAAgB,GAAG;AAAA,UACnE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,OAAO,KAAK,OAAO,EAAE;AAAA,UACnE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,cAAc,GAAG;AAAA,UACpE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,kBAAkB,GAAG;AAAA,QAC3E;AACA,mBAAW,OAAO,UAAU,KAAK,OAAO;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,gBAAgB;AAAA,MAC/B,aACG;AAAA,MACH,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,OAAO;AACb,cAAM,WAAW,MAAM;AACvB,YAAI,CAAC,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,GAAG;AACpD,kBAAQ,OAAO;AAAA,YACZ;AAAA;AAAA,UACH;AACA,kBAAQ,KAAK,CAAC;AAAA,QACjB;AACA,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,cAAc,QAAQ;AACtE,cAAM,UAAkC;AAAA,UACrC,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,gBAAgB,GAAG;AAAA,UACnE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,OAAO,KAAK,OAAO,EAAE;AAAA,UACnE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,cAAc,GAAG;AAAA,UACpE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,kBAAkB,GAAG;AAAA,QAC3E;AACA,mBAAW,OAAO,UAAU,KAAK,OAAO;AAAA,MAC3C;AAAA,IACH;AAAA,EACH;AACH;;;AC7HA,IAAM,kBAA0C;AAAA,EAC7C,EAAE,QAAQ,MAAM,UAAU,CAAC,MAAM,OAAO,EAAE,EAAE,EAAE;AAAA,EAC9C,EAAE,QAAQ,aAAa,UAAU,CAAC,MAAM,EAAE,cAAc;AAAA,EACxD,EAAE,QAAQ,UAAU,UAAU,CAAC,MAAM,EAAE,OAAO;AAAA,EAC9C;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,MAAM,KAAK,EAAE,SAAS,KAAK,QAAQ,CAAC,CAAC;AAAA,EACnD;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,MAAO,EAAE,cAAc,IAAI,KAAK,EAAE,WAAW,EAAE,mBAAmB,IAAI;AAAA,EACpF;AAAA,EACA;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,MAAO,EAAE,YAAY,IAAI,KAAK,EAAE,SAAS,EAAE,mBAAmB,IAAI;AAAA,EAChF;AAAA,EACA,EAAE,QAAQ,WAAW,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG;AAAA,EAC1D,EAAE,QAAQ,OAAO,UAAU,CAAC,MAAM,EAAE,oBAAoB,GAAG;AAC9D;AAEA,IAAM,WAAyB;AAAA,EAC5B;AAAA,IACG,MAAM,CAAC,WAAW,WAAW;AAAA,IAC7B,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU,eAAe;AACpE,iBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,GAAG;AAAA,IACjD;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,WAAW,UAAU;AAAA,IAC5B,aAAa;AAAA,IACb,MAAM,CAAC,EAAE,MAAM,QAAQ,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,IACrE,mBAAmB;AAAA,IACnB,SAAS,OAAO,SAAS;AACtB,YAAM,OAAO,KAAK,KAAK;AACvB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU,cAAc,IAAI;AACvE,mBAAa,QAAQ,KAAK,GAAG;AAAA,IAChC;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,WAAW,iBAAiB;AAAA,IACnC,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,MACH,EAAE,MAAM,QAAQ,aAAa,iBAAiB,UAAU,KAAK;AAAA,MAC7D,EAAE,MAAM,QAAQ,aAAa,gBAAgB;AAAA,MAC7C,EAAE,MAAM,SAAS,aAAa,gBAAgB;AAAA,MAC9C,EAAE,MAAM,SAAS,aAAa,eAAe;AAAA,MAC7C,EAAE,MAAM,eAAe,aAAa,sBAAsB;AAAA,IAC7D;AAAA,IACA,mBAAmB;AAAA,IACnB,SAAS,OAAO,SAAS;AACtB,YAAM,OAAO,KAAK,KAAK;AACvB,YAAM,OAA2C,CAAC;AAClD,UAAI,KAAK,KAAK,KAAM,MAAK,OAAO,KAAK,KAAK;AAC1C,UAAI,KAAK,KAAK,MAAO,MAAK,QAAQ,KAAK,KAAK;AAC5C,UAAI,KAAK,KAAK,MAAO,MAAK,QAAQ,KAAK,KAAK;AAC5C,UAAI,KAAK,KAAK,YAAa,MAAK,cAAc,KAAK,KAAK;AACxD,UAAI,OAAO,KAAK,IAAI,EAAE,WAAW,KAAK,CAAC,KAAK,MAAM;AAC/C,cAAM,IAAI,SAAS,+DAA+D;AAAA,MACrF;AACA,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD;AAAA,QACA,KAAK,OAAQ,KAAK,OAAkC;AAAA,MACvD;AACA,mBAAa,QAAQ,KAAK,GAAG;AAAA,IAChC;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,WAAW,UAAU;AAAA,IAC5B,aAAa;AAAA,IACb,MAAM,CAAC,EAAE,MAAM,QAAQ,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,IACrE,mBAAmB;AAAA,IACnB,SAAS,OAAO,SAAS;AACtB,YAAM,OAAO,KAAK,KAAK;AACvB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU,sBAAsB,IAAI;AAC/E,iBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,KAAK,eAAyC;AAAA,IAC5F;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,WAAW,eAAe;AAAA,IACjC,aAAa;AAAA,IACb,MAAM,CAAC,EAAE,MAAM,QAAQ,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,IACrE,mBAAmB;AAAA,IACnB,SAAS,OAAO,SAAS;AACtB,YAAM,OAAO,KAAK,KAAK;AACvB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU,2BAA2B,IAAI;AACpF,iBAAW,WAAW,QAAQ,KAAK,GAAG,KAAK,GAAG;AAAA,IACjD;AAAA,EACH;AACH;AAEO,IAAM,sBAAiC;AAAA,EAC3C,MAAM;AAAA,EACN,aAAa;AAAA,EACb;AACH;;;ACzFA,SAASC,SAAQ,KAAmC;AACjD,SAAO,GAAG,IAAI,UAAU,MAAM;AACjC;AAEA,SAAS,YAAY,KAAmD;AACrE,SAAO;AAAA,IACJ,eAAe,UAAU,IAAI,WAAW;AAAA,IACxC,gBAAgB;AAAA,EACnB;AACH;AAEA,SAAS,YAAY,KAAyB;AAC3C,SAAO;AAAA,IACJ,IAAI,IAAI;AAAA,IACR,MAAM,IAAI;AAAA,IACV,UAAU,IAAI;AAAA,IACd,OAAO,IAAI;AAAA,IACX,UAAU,IAAI;AAAA,IACd,WAAW,IAAI;AAAA,IACf,WAAW,IAAI;AAAA,EAClB;AACH;AAEA,SAAS,eAAe,KAA4B;AACjD,SAAO;AAAA,IACJ,IAAI,IAAI;AAAA,IACR,MAAM,IAAI;AAAA,IACV,SAAS,IAAI,WAAW;AAAA,IACxB,WAAW,IAAI,cAAc;AAAA,IAC7B,WAAW,IAAI,cAAc;AAAA,IAC7B,YAAY,IAAI,gBAAgB;AAAA,EACnC;AACH;AAEA,eAAsB,mBAAmB,KAAqD;AAC3F,QAAM,MAAM,MAAM,MAAM,GAAGA,SAAQ,GAAG,CAAC,UAAU,EAAE,SAAS,YAAY,GAAG,EAAE,CAAC;AAC9E,MAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,mCAAmC,IAAI,MAAM,EAAE;AAC5E,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,SAAQ,KAAe,IAAI,WAAW;AACzC;AAEA,eAAsB,oBACnB,KACA,OACuB;AACvB,QAAM,MAAM,MAAM,MAAM,GAAGA,SAAQ,GAAG,CAAC,UAAU;AAAA,IAC9C,QAAQ;AAAA,IACR,SAAS,YAAY,GAAG;AAAA,IACxB,MAAM,KAAK,UAAU,EAAE,OAAO,SAAS,KAAK,CAAC;AAAA,EAChD,CAAC;AACD,MAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,oCAAoC,IAAI,MAAM,EAAE;AAC7E,SAAO,YAAY,MAAM,IAAI,KAAK,CAAC;AACtC;AAEA,eAAsB,iBACnB,KACA,QACuB;AACvB,QAAM,MAAM,MAAM,MAAM,GAAGA,SAAQ,GAAG,CAAC,UAAU,MAAM,IAAI,EAAE,SAAS,YAAY,GAAG,EAAE,CAAC;AACxF,MAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,gCAAgC,MAAM,KAAK,IAAI,MAAM,EAAE;AACpF,SAAO,YAAY,MAAM,IAAI,KAAK,CAAC;AACtC;AAEA,eAAsB,yBACnB,KACA,QAC4B;AAC5B,QAAM,MAAM,MAAM,MAAM,GAAGA,SAAQ,GAAG,CAAC,UAAU,MAAM,aAAa;AAAA,IACjE,SAAS,YAAY,GAAG;AAAA,EAC3B,CAAC;AACD,MAAI,CAAC,IAAI;AACN,UAAM,IAAI,MAAM,6CAA6C,MAAM,KAAK,IAAI,MAAM,EAAE;AACvF,QAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,SAAQ,KAAe,IAAI,cAAc;AAC5C;;;ACjGA,IAAM,eAAe;AAAA,EAClB,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,SAAS,UAAU,CAAC,MAAW,EAAE,SAAS,GAAG;AAAA,EACvD,EAAE,QAAQ,WAAW,UAAU,CAAC,MAAW,EAAE,aAAa,GAAG;AAChE;AAEA,IAAMC,mBAAkB;AAAA,EACrB,EAAE,QAAQ,MAAM,UAAU,CAAC,MAAW,EAAE,GAAG;AAAA,EAC3C,EAAE,QAAQ,QAAQ,UAAU,CAAC,MAAW,EAAE,KAAK;AAAA,EAC/C,EAAE,QAAQ,WAAW,UAAU,CAAC,OAAY,EAAE,WAAW,IAAI,MAAM,GAAG,GAAG,EAAE;AAC9E;AAEO,IAAM,kBAA6B;AAAA,EACvC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,aAAa,MAAM;AAAA,MAC1B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,OAAO,YAAY,GAAG;AAC5B,cAAM,QAAQ,MAAM,mBAAmB,IAAI;AAC3C,mBAAW,OAAO,MAAM,YAAY;AAAA,MACvC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,aAAa,UAAU;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK,CAAC;AAAA,MAC7D,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,OAAO,YAAY,GAAG;AAC5B,cAAM,SAAS,OAAO,KAAK,EAAE;AAC7B,YAAI,MAAM,MAAM,EAAG,OAAM,IAAI,MAAM,uBAAuB;AAC1D,cAAM,WAAW,MAAM,yBAAyB,MAAM,MAAM;AAC5D,mBAAW,UAAU,MAAMA,gBAAe;AAAA,MAC7C;AAAA,IACH;AAAA,EACH;AACH;;;ACxCA,IAAMC,YAAU,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,YAAY,GAAG,IAAI,QAAQ,CAAC;AAEvE,IAAMC,gBAAe,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,YAAY,CAAC;AAEtD,IAAM,uBAAkC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,iBAAiB;AAAA,MAC1B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASD;AAAA,IACZ,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,mBAAmB,QAAQ;AAAA,MAClC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,qBAAqB,UAAU,KAAK,CAAC;AAAA,MACvE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,SAAS;AAAA,MACnC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,qBAAqB,UAAU,KAAK,CAAC;AAAA,MACvE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA;AAAA,IAEA;AAAA,MACG,MAAM,CAAC,mBAAmB,SAAS,QAAQ;AAAA,MAC3C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,cAAc,aAAa,qBAAqB,UAAU,KAAK,CAAC;AAAA,MAC/E,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKC,aAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,SAAS,QAAQ;AAAA,MAC3C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,qBAAqB,UAAU,KAAK;AAAA,QACvE,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK;AAAA,MACxD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,aAAY;AAAA,MACzC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,SAAS,QAAQ;AAAA,MAC3C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,cAAc,aAAa,qBAAqB,UAAU,KAAK;AAAA,QACvE,EAAE,MAAM,MAAM,aAAa,WAAW,UAAU,KAAK;AAAA,MACxD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,cAAc,MAAM,YAAY;AAClD,cAAM,SAAS,cAAc,MAAM,IAAI;AACvC,cAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,WAAW,WAAW,MAAM;AAC9E,gBAAQ,OAAO,MAAM,uBAAuB,MAAM;AAAA,CAAI;AAAA,MACzD;AAAA,IACH;AAAA,EACH;AACH;;;ACzGA,IAAMC,YAAU;AAAA,EACb,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,KAAK;AAAA,EACT,IAAI,YAAY;AACnB;AAEO,IAAM,iBAA4B;AAAA,EACtC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,YAAY,MAAM;AAAA,MACzB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB;AACnE,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,KAAK;AAAA,MACxB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,QAAQ,aAAa,gBAAgB,UAAU,KAAK,CAAC;AAAA,MACpE,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C,cAAc,MAAM,MAAM;AAAA,QAC7B;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,YAAY,WAAW;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,8BAA8B;AAC9E,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,EACH;AACH;;;ACvCA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,iBAAiB,GAAG;AAAA,EACrE,IAAI,OAAO;AACd;AAEA,IAAM,gBAAwC;AAAA,EAC3C,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,WAAW,GAAG;AAAA,EACjE,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,gBAAgB,GAAG;AAAA,EACnE,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,eAAe,GAAG;AAAA,EAClE,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,OAAO,KAAK,WAAW,EAAE,EAAE;AACzE;AAEO,IAAM,gBAA2B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,SAAS;AAAA,MAClB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,IACZ,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,WAAW,UAAU,MAAM;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,YAAY,aAAa,YAAY,UAAU,KAAK,CAAC;AAAA,MACpE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,UAAU;AAAA,QACjC;AACA,mBAAW,QAAQ,KAAK,aAAa;AAAA,MACxC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,UAAU,KAAK;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,YAAY,aAAa,YAAY,UAAU,KAAK;AAAA,QAC5D,EAAE,MAAM,MAAM,aAAa,YAAY,UAAU,KAAK;AAAA,MACzD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,UAAU;AAAA,UAC9B,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAK,aAAa;AAAA,MAC1C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,UAAU,SAAS;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,YAAY,aAAa,YAAY,UAAU,KAAK,CAAC;AAAA,MACpE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,UAAU;AAAA,QACjC;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,UAAU,WAAW;AAAA,MACvC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,YAAY,aAAa,YAAY,UAAU,KAAK;AAAA,QAC5D,EAAE,MAAM,MAAM,aAAa,YAAY,UAAU,KAAK;AAAA,MACzD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,UAAU;AAAA,UAC9B,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,wBAAwB;AAAA,MAChD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,UAAU,aAAa;AAAA,MACzC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,YAAY,aAAa,YAAY,UAAU,KAAK;AAAA,QAC5D,EAAE,MAAM,MAAM,aAAa,YAAY,UAAU,KAAK;AAAA,MACzD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,UAAU;AAAA,UAC9B,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,gBAAQ,OAAO,MAAM,0BAA0B;AAAA,MAClD;AAAA,IACH;AAAA,EACH;AACH;;;AC9GA,IAAMC,YAAU;AAAA,EACb,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,OAAO,UAAU,CAAC,SAAc,KAAK,OAAO,GAAG;AAAA,EACzD,IAAI,QAAQ;AACf;AAEO,IAAM,mBAA8B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,aAAa;AAAA,MACtB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,IACZ,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,eAAe,QAAQ;AAAA,MAC9B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MACnE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,eAAe,SAAS;AAAA,MAC/B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MACnE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,eAAe,SAAS,MAAM;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MAC9E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,eAAe;AAAA,QACtC;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,EACH;AACH;;;AC7DA,IAAMC,YAAkC;AAAA,EACrC,EAAE,QAAQ,OAAO,UAAU,CAAC,SAAc,KAAK,OAAO,GAAG;AAAA,EACzD,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,QAAQ;AAAA,EAChE,EAAE,QAAQ,eAAe,UAAU,CAAC,SAAc,SAAS,KAAK,eAAe,IAAI,EAAE,EAAE;AAAA,EACvF,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,KAAK,YAAY,EAAE;AAAA,EAClE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,aAAa,KAAK,aAAa,GAAG;AACxF;AAEA,SAAS,SAAS,GAAW,KAAqB;AAC/C,SAAO,EAAE,SAAS,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,IAAI,WAAM;AACvD;AAEO,IAAM,uBAAkC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,mBAAmB,MAAM;AAAA,MAChC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK;AAAA,QAC9D;AAAA,UACG,MAAM;AAAA,UACN,aACG;AAAA,QACN;AAAA,QACA,EAAE,MAAM,SAAS,aAAa,qDAAqD;AAAA,MACtF;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,WAAW,cAAc,MAAM,WAAW;AAChD,cAAM,OAAO,KAAK;AAClB,cAAM,QAAQ,KAAK;AACnB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,WAAW,UAAU;AAAA,UACpF;AAAA,UACA;AAAA,QACH,CAAC;AACD,mBAAW,WAAW,QAAQ,KAAK,GAAG,KAAKA,SAAO;AAAA,MACrD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,QAAQ;AAAA,MAClC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK;AAAA,QAC9D,EAAE,MAAM,OAAO,aAAa,cAAc,UAAU,KAAK;AAAA,QACzD;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,QAChB;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,WAAW,cAAc,MAAM,WAAW;AAChD,cAAM,MAAM,cAAc,MAAM,KAAK;AACrC,cAAM,OAAO,KAAK;AAClB,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO,EAAE,KAAK,IAAI;AAAA,QACrB;AACA,gBAAQ,OAAO,MAAM,kBAAkB,GAAG;AAAA,CAAI;AAAA,MACjD;AAAA,IACH;AAAA,EACH;AACH;;;ACtEA,IAAMC,YAAU;AAAA,EACb,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,IAAI,OAAO;AAAA,EACX,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAc,KAAK,YAAY,GAAG;AACtE;AAEO,IAAM,mBAA8B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,YAAY;AAAA,MACrB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA,EACJ;AACH;;;ACvBA,IAAMC,YAAU;AAAA,EACb,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,QAAQ;AACf;AAEO,IAAM,0BAAqC;AAAA,EAC/C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,oBAAoB;AAAA,MAC7B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,IACZ,CAAC;AAAA,EACJ;AACH;;;ACrBO,IAAM,cAAyB;AAAA,EACnC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,SAAS,QAAQ;AAAA,MACxB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,YAAY,aAAa,uBAAuB,UAAU,KAAK,CAAC;AAAA,MAC/E,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C,cAAc,MAAM,UAAU;AAAA,QACjC;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,UAAU;AAAA,MAC1B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,YAAY,aAAa,uBAAuB,UAAU,KAAK,CAAC;AAAA,MAC/E,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C,cAAc,MAAM,UAAU;AAAA,QACjC;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,YAAY;AAAA,MAC5B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,YAAY,aAAa,uBAAuB,UAAU,KAAK,CAAC;AAAA,MAC/E,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,WAAW,cAAc,MAAM,UAAU;AAC/C,cAAM,YAAY,GAAG,EAAE,UAAU,wBAAwB,QAAe;AACxE,gBAAQ,OAAO,MAAM,+BAA+B,QAAQ;AAAA,CAAI;AAAA,MACnE;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,SAAS,QAAQ;AAAA,MACxB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB;AACnE,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,EACH;AACH;;;ACjDA,IAAMC,YAAU,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,YAAY,CAAC;AAEjD,IAAM,uBAAkC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,iBAAiB;AAAA,MAC1B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,IACZ,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,mBAAmB,YAAY;AAAA,MACtC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,MAAM,aAAa,qBAAqB,UAAU,KAAK;AAAA,QAC/D,EAAE,MAAM,aAAa,aAAa,oBAAoB,UAAU,KAAK;AAAA,MACxE;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB,EAAE,WAAW,cAAc,MAAM,WAAW,EAAE;AAAA,QACjD;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,eAAe;AAAA,MACzC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,MAAM,aAAa,qBAAqB,UAAU,KAAK;AAAA,QAC/D,EAAE,MAAM,aAAa,aAAa,uBAAuB,UAAU,KAAK;AAAA,MAC3E;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB,cAAc,MAAM,WAAW;AAAA,QAClC;AACA,gBAAQ,OAAO,MAAM,6BAA6B;AAAA,MACrD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,MAAM;AAAA,MAChC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,SAAS;AAC1E,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,UAAU;AAAA,MACpC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,SAAS;AAC3E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,EACH;AACH;;;ACjEA,IAAM,cAA4C;AAAA,EAC/C,EAAE,QAAQ,MAAM,UAAU,CAAC,SAAS,OAAO,KAAK,kBAAkB,EAAE,EAAE;AAAA,EACtE,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAS,KAAK,oBAAoB,GAAG;AAAA,EAClE,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAS,KAAK,QAAQ,GAAG;AACzD;AAEA,IAAM,qBAA+C;AAAA,EAClD,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAS,KAAK,QAAQ,GAAG;AAAA,EACtD,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAS,KAAK,UAAU,GAAG;AAAA,EAC1D,EAAE,QAAQ,aAAa,UAAU,CAAC,SAAS,KAAK,mBAAmB,GAAG;AAAA,EACtE,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAS,KAAK,eAAe,IAAI;AAAA,EAC/D,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAS,KAAK,cAAc,IAAI;AAAA,EAC7D,EAAE,QAAQ,YAAY,UAAU,CAAC,SAAS,KAAK,oBAAoB,QAAQ,GAAG;AAAA,EAC9E;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAS,KAAK,oBAAoB,SAAS;AAAA,IACtD,UAAU;AAAA,EACb;AACH;AAEA,SAAS,aAAa,MAA0B;AAC7C,QAAM,MAAM,KAAK,UAAU,KAAK,KAAK;AACrC,MAAI,OAAO,QAAQ,YAAY,CAAC,KAAK;AAClC,UAAM,IAAI,SAAS,uCAAuC;AAAA,EAC7D;AACA,SAAO;AACV;AAEA,SAAS,kBAAkB,MAA0B;AAClD,QAAM,MAAM,KAAK,aAAa,KAAK,KAAK;AACxC,MAAI,OAAO,QAAQ,YAAY,CAAC,KAAK;AAClC,UAAM,IAAI,SAAS,0CAA0C;AAAA,EAChE;AACA,SAAO;AACV;AAEA,SAAS,cAAc,MAA0B;AAC9C,QAAM,MAAM,KAAK;AACjB,MAAI,OAAO,QAAQ,YAAY,CAAC,KAAK;AAClC,UAAM,IAAI,SAAS,qCAAqC;AAAA,EAC3D;AACA,SAAO;AACV;AAEA,IAAM,eAAe;AAAA,EAClB,MAAM;AAAA,EACN,SAAS,CAAC,KAAK;AAAA,EACf,aAAa;AAAA,EACb,UAAU;AACb;AAEA,IAAM,kBAAkB;AAAA,EACrB,MAAM;AAAA,EACN,SAAS,CAAC,WAAW;AAAA,EACrB,aAAa;AAAA,EACb,UAAU;AACb;AAEA,SAAS,UAAU,OAAe,UAAkB,SAAS,GAAG,QAAQ,KAAa;AAClF,SAAO,UAAU,IAAI,WAAW;AACnC;AAEA,SAAS,mBAAmB,MAAgB,aAAiC;AAC1E,SAAO;AAAA,IACJ;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,MAAM,CAAC,cAAc,eAAe;AAAA,IACpC,UAAU;AAAA,MACP,WAAW,KAAK,KAAK,GAAG,CAAC;AAAA,IAC5B;AAAA,IACA,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB,kBAAkB,KAAK,IAAI;AAAA,MAC9B;AACA,mBAAa,QAAQ,KAAK,GAAG;AAAA,IAChC;AAAA,EACH;AACH;AAEA,SAAS,kBAAkB,MAAgB,aAAiC;AACzE,SAAO;AAAA,IACJ;AAAA,IACA;AAAA,IACA,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,MAAM,CAAC,cAAc,eAAe;AAAA,IACpC,UAAU;AAAA,MACP,WAAW,KAAK,KAAK,GAAG,CAAC;AAAA,IAC5B;AAAA,IACA,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB,kBAAkB,KAAK,IAAI;AAAA,MAC9B;AACA,mBAAa,QAAQ,KAAK,GAAG;AAAA,IAChC;AAAA,EACH;AACH;AAEA,SAAS,sBAAsB,MAA4B;AACxD,SAAO;AAAA,IACJ;AAAA,IACA,aAAa;AAAA,IACb,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,MAAM;AAAA,MACH;AAAA,MACA,EAAE,MAAM,UAAU,aAAa,wCAAwC,UAAU,KAAK;AAAA,IACzF;AAAA,IACA,UAAU;AAAA,MACP,WAAW,KAAK,KAAK,GAAG,CAAC;AAAA,IAC5B;AAAA,IACA,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB,cAAc,KAAK,IAAI;AAAA,MAC1B;AACA,mBAAa,QAAQ,KAAK,KAAK,kBAAkB;AAAA,IACpD;AAAA,EACH;AACH;AAEA,IAAM,iBAA+B;AAAA,EAClC;AAAA,IACG,MAAM,CAAC,OAAO,WAAW,MAAM;AAAA,IAC/B,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,MAAM,CAAC,YAAY;AAAA,IACnB,UAAU,CAAC,+CAA+C;AAAA,IAC1D,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,MACzB;AACA,iBAAW,QAAQ,KAAK,KAAK,kBAAkB;AAAA,IAClD;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,WAAW,KAAK;AAAA,IAC9B,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,MAAM,CAAC,cAAc,eAAe;AAAA,IACpC,UAAU,CAAC,yEAAyE;AAAA,IACpF,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB,kBAAkB,KAAK,IAAI;AAAA,MAC9B;AACA,mBAAa,QAAQ,KAAK,KAAK,kBAAkB;AAAA,IACpD;AAAA,EACH;AAAA,EACA,sBAAsB,CAAC,OAAO,WAAW,UAAU,CAAC;AAAA,EACpD,sBAAsB,CAAC,OAAO,WAAW,QAAQ,CAAC;AAAA,EAClD;AAAA,IACG,MAAM,CAAC,OAAO,WAAW,kBAAkB;AAAA,IAC3C,aAAa;AAAA,IACb,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,MAAM,CAAC,cAAc,eAAe;AAAA,IACpC,UAAU;AAAA,MACP;AAAA,IACH;AAAA,IACA,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB,kBAAkB,KAAK,IAAI;AAAA,MAC9B;AACA,mBAAa,QAAQ,KAAK,GAAG;AAAA,IAChC;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,WAAW,QAAQ;AAAA,IACjC,aAAa;AAAA,IACb,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,MAAM,CAAC,cAAc,eAAe;AAAA,IACpC,UAAU;AAAA,MACP;AAAA,IACH;AAAA,IACA,SAAS,OAAO,SAAS;AACtB,YAAM,aAAa,kBAAkB,KAAK,IAAI;AAC9C,YAAM,YAAY,KAAK,GAAG,EAAE,UAAU,gBAAgB,aAAa,KAAK,IAAI,GAAG,UAAU;AACzF,cAAQ,OAAO,MAAM,sBAAsB,UAAU;AAAA,CAAI;AAAA,IAC5D;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,WAAW,SAAS,QAAQ;AAAA,IAC1C,aAAa;AAAA,IACb,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,MAAM,CAAC,cAAc,eAAe;AAAA,IACpC,UAAU;AAAA,MACP;AAAA,IACH;AAAA,IACA,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB,kBAAkB,KAAK,IAAI;AAAA,MAC9B;AACA,mBAAa,QAAQ,KAAK,GAAG;AAAA,IAChC;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,WAAW,SAAS,KAAK;AAAA,IACvC,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,MAAM,CAAC,cAAc,eAAe;AAAA,IACpC,UAAU,CAAC,+EAA+E;AAAA,IAC1F,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB,kBAAkB,KAAK,IAAI;AAAA,MAC9B;AACA,mBAAa,QAAQ,KAAK,GAAG;AAAA,IAChC;AAAA,EACH;AAAA,EACA;AAAA,IACG,CAAC,OAAO,WAAW,SAAS,QAAQ;AAAA,IACpC;AAAA,EACH;AAAA,EACA;AAAA,IACG,CAAC,OAAO,WAAW,SAAS,WAAW;AAAA,IACvC;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,WAAW,SAAS,SAAS;AAAA,IAC3C,aAAa;AAAA,IACb,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,MAAM;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,QACG,MAAM;AAAA,QACN,aAAa;AAAA,QACb,QAAQ;AAAA,MACX;AAAA,IACH;AAAA,IACA,UAAU;AAAA,MACP;AAAA,IACH;AAAA,IACA,SAAS,OAAO,SAAS;AACtB,YAAM,aAAa,kBAAkB,KAAK,IAAI;AAC9C,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB;AAAA,QACA,KAAK,KAAK,YAAY;AAAA,MACzB;AACA,UAAI,CAAC,OAAO,IAAI;AACb,cAAM,EAAE,WAAW,IAAI,OAAO;AAC9B,cAAM,IAAI;AAAA,UACP,0BAA0B,UAAU,IAAI;AAAA,YACrC;AAAA,YACA;AAAA,YACA;AAAA,UACH,CAAC;AAAA,QACJ;AAAA,MACH;AACA,cAAQ,OAAO,MAAM,iCAAiC,UAAU;AAAA,CAAI;AAAA,IACvE;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,WAAW,QAAQ,QAAQ;AAAA,IACzC,aAAa;AAAA,IACb,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,MAAM,CAAC,cAAc,eAAe;AAAA,IACpC,UAAU;AAAA,MACP;AAAA,IACH;AAAA,IACA,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB,kBAAkB,KAAK,IAAI;AAAA,MAC9B;AACA,mBAAa,QAAQ,KAAK,GAAG;AAAA,IAChC;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,WAAW,QAAQ,KAAK;AAAA,IACtC,aAAa;AAAA,IACb,mBAAmB;AAAA,IACnB,MAAM,CAAC,cAAc,eAAe;AAAA,IACpC,UAAU,CAAC,8EAA8E;AAAA,IACzF,SAAS,OAAO,SAAS;AACtB,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB,kBAAkB,KAAK,IAAI;AAAA,MAC9B;AACA,mBAAa,QAAQ,KAAK,GAAG;AAAA,IAChC;AAAA,EACH;AAAA,EACA;AAAA,IACG,CAAC,OAAO,WAAW,QAAQ,QAAQ;AAAA,IACnC;AAAA,EACH;AAAA,EACA;AAAA,IACG,CAAC,OAAO,WAAW,QAAQ,cAAc;AAAA,IACzC;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,WAAW,QAAQ,SAAS;AAAA,IAC1C,aAAa;AAAA,IACb,SAAS;AAAA,IACT,mBAAmB;AAAA,IACnB,MAAM;AAAA,MACH;AAAA,MACA;AAAA,MACA;AAAA,QACG,MAAM;AAAA,QACN,aAAa;AAAA,QACb,QAAQ;AAAA,MACX;AAAA,IACH;AAAA,IACA,UAAU;AAAA,MACP;AAAA,IACH;AAAA,IACA,SAAS,OAAO,SAAS;AACtB,YAAM,aAAa,kBAAkB,KAAK,IAAI;AAC9C,YAAM,SAAS,MAAM,YAAY,KAAK,GAAG,EAAE,UAAU;AAAA,QAClD,aAAa,KAAK,IAAI;AAAA,QACtB;AAAA,QACA,KAAK,KAAK,YAAY;AAAA,MACzB;AACA,UAAI,CAAC,OAAO,IAAI;AACb,cAAM,EAAE,UAAU,IAAI,OAAO;AAC7B,cAAM,IAAI;AAAA,UACP,iCAAiC,SAAS,IAAI;AAAA,YAC3C;AAAA,YACA;AAAA,UACH,CAAC;AAAA,QACJ;AAAA,MACH;AACA,cAAQ,OAAO,MAAM,wCAAwC,UAAU;AAAA,CAAI;AAAA,IAC9E;AAAA,EACH;AACH;AAEO,IAAM,YAAuB;AAAA,EACjC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,OAAO,MAAM;AAAA,MACpB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB;AACnE,mBAAW,QAAQ,KAAK,WAAW;AAAA,MACtC;AAAA,IACH;AAAA,IACA,GAAG;AAAA,EACN;AACH;;;ACxWA,SAAS,cAAc;AAOvB,SAAS,UAAU,MAAqC;AACrD,QAAM,MAAM,YAAY,KAAK,GAAG;AAChC,SAAO,IAAI,OAAO,IAAI,aAAa,IAAI,UAAU,MAAM;AAC1D;AAIA,IAAM,yBAAmD;AAAA,EACtD,EAAE,QAAQ,MAAM,UAAU,CAAC,MAAM,OAAO,EAAE,MAAM,EAAE,EAAE;AAAA,EACpD,EAAE,QAAQ,QAAQ,UAAU,CAAC,OAAO,EAAE,QAAQ,IAAI,MAAM,GAAG,CAAC,EAAE;AAAA,EAC9D,EAAE,QAAQ,SAAS,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG;AAAA,EACxD,EAAE,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG;AAAA,EAC3D,EAAE,QAAQ,YAAY,UAAU,CAAC,MAAM,OAAO,EAAE,cAAc,KAAK,EAAE;AAAA,EACrE,EAAE,QAAQ,aAAa,UAAU,CAAC,MAAM,EAAE,iBAAiB,IAAI;AAClE;AAEA,IAAM,0BAAoD;AAAA,EACvD,EAAE,QAAQ,SAAS,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG;AAAA,EACxD,EAAE,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,gBAAgB,GAAG;AAAA,EACxD,EAAE,QAAQ,YAAY,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG;AAAA,EACxD,EAAE,QAAQ,UAAU,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG;AAAA,EACpD,EAAE,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG;AAC9D;AAEA,SAAS,eAAe,MAAmC;AACxD,QAAM,MAAM,KAAK,UAAU,KAAK,KAAK,KAAK;AAC1C,MAAI,OAAO,QAAQ,YAAY,CAAC,KAAK;AAClC,UAAM,IAAI,SAAS,uCAAuC;AAAA,EAC7D;AACA,SAAO;AACV;AAEA,IAAMC,YAAyB;AAAA,EAC5B;AAAA,IACG,MAAM,CAAC,OAAO,iBAAiB,MAAM;AAAA,IACrC,aAAa;AAAA,IACb,MAAM;AAAA,MACH,EAAE,MAAM,YAAY,SAAS,CAAC,KAAK,GAAG,aAAa,qBAAqB,UAAU,KAAK;AAAA,IAC1F;AAAA,IACA,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,SAAS,OAAO,SAAS;AACtB,YAAM,UAAU,eAAe,KAAK,IAAI;AACxC,YAAM,SAAS,MAAM,UAAU,IAAI,EAAE,iBAAiB,OAAO;AAC7D,iBAAW,QAAQ,KAAK,KAAK,sBAAsB;AAAA,IACtD;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,iBAAiB,QAAQ;AAAA,IACvC,aAAa;AAAA,IACb,MAAM;AAAA,MACH,EAAE,MAAM,YAAY,SAAS,CAAC,KAAK,GAAG,aAAa,qBAAqB,UAAU,KAAK;AAAA,MACvF,EAAE,MAAM,eAAe,aAAa,mCAAmC,SAAS,QAAQ;AAAA,MACxF,EAAE,MAAM,aAAa,aAAa,mBAAmB;AAAA,MACrD,EAAE,MAAM,YAAY,aAAa,gCAAgC;AAAA,MACjE,EAAE,MAAM,SAAS,aAAa,gCAAgC;AAAA,IACjE;AAAA,IACA,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,SAAS,OAAO,SAAS;AACtB,YAAM,UAAU,eAAe,KAAK,IAAI;AACxC,YAAM,SAAS,MAAM,UAAU,IAAI,EAAE,mBAAmB,SAAS;AAAA,QAC9D,YAAa,KAAK,KAAK,aAAa,KAA+B;AAAA,QACnE,UAAU,KAAK,KAAK,WAAW;AAAA,QAC/B,UAAU,KAAK,KAAK;AAAA,QACpB,OAAO,KAAK,KAAK,QAAQ,OAAO,KAAK,KAAK,KAAK,IAAI;AAAA,MACtD,CAAC;AACD,iBAAW,QAAQ,KAAK,KAAK,uBAAuB;AAAA,IACvD;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,iBAAiB,UAAU;AAAA,IACzC,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,MACH,EAAE,MAAM,YAAY,SAAS,CAAC,KAAK,GAAG,aAAa,qBAAqB,UAAU,KAAK;AAAA,MACvF,EAAE,MAAM,gBAAgB,aAAa,kCAAkC,UAAU,KAAK;AAAA,MACtF,EAAE,MAAM,eAAe,aAAa,mCAAmC,SAAS,QAAQ;AAAA,IAC3F;AAAA,IACA,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,SAAS,OAAO,SAAS;AACtB,YAAM,UAAU,eAAe,KAAK,IAAI;AACxC,YAAM,cAAc,KAAK,KAAK,cAAc;AAC5C,UAAI,CAAC,YAAa,OAAM,IAAI,SAAS,2CAA2C;AAChF,YAAM,aAAc,KAAK,KAAK,aAAa,KAA+B;AAC1E,YAAM,SAAS,MAAM,UAAU,IAAI,EAAE,oBAAoB,SAAS,aAAa,UAAU;AACzF,mBAAa,QAAQ,KAAK,KAAK,sBAAsB;AAAA,IACxD;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,iBAAiB,QAAQ;AAAA,IACvC,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,MACH,EAAE,MAAM,YAAY,SAAS,CAAC,KAAK,GAAG,aAAa,qBAAqB,UAAU,KAAK;AAAA,MACvF,EAAE,MAAM,uBAAuB,aAAa,uBAAuB,UAAU,KAAK;AAAA,MAClF,EAAE,MAAM,kBAAkB,aAAa,yBAAyB,UAAU,KAAK;AAAA,IAClF;AAAA,IACA,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,SAAS,OAAO,SAAS;AACtB,YAAM,UAAU,eAAe,KAAK,IAAI;AACxC,YAAM,oBAAoB,KAAK,KAAK,qBAAqB;AACzD,YAAM,gBAAgB,KAAK,KAAK,gBAAgB;AAChD,UAAI,CAAC;AACF,cAAM,IAAI,SAAS,kDAAkD;AACxE,UAAI,CAAC,cAAe,OAAM,IAAI,SAAS,6CAA6C;AACpF,YAAM,SAAS,MAAM,UAAU,IAAI,EAAE;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,MACH;AACA,mBAAa,QAAQ,KAAK,KAAK,sBAAsB;AAAA,IACxD;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,iBAAiB,UAAU;AAAA,IACzC,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,MACH,EAAE,MAAM,YAAY,SAAS,CAAC,KAAK,GAAG,aAAa,qBAAqB,UAAU,KAAK;AAAA,MACvF,EAAE,MAAM,uBAAuB,aAAa,uBAAuB,UAAU,KAAK;AAAA,MAClF,EAAE,MAAM,sBAAsB,aAAa,sBAAsB,UAAU,KAAK;AAAA,IACnF;AAAA,IACA,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,SAAS,OAAO,SAAS;AACtB,YAAM,UAAU,eAAe,KAAK,IAAI;AACxC,YAAM,oBAAoB,KAAK,KAAK,qBAAqB;AACzD,YAAM,mBAAmB,KAAK,KAAK,oBAAoB;AACvD,UAAI,CAAC;AACF,cAAM,IAAI,SAAS,kDAAkD;AACxE,UAAI,CAAC;AACF,cAAM,IAAI,SAAS,iDAAiD;AACvE,YAAM,SAAS,MAAM,UAAU,IAAI,EAAE;AAAA,QAClC;AAAA,QACA;AAAA,QACA;AAAA,MACH;AACA,mBAAa,QAAQ,KAAK,KAAK,sBAAsB;AAAA,IACxD;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,iBAAiB,SAAS;AAAA,IACxC,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,MACH,EAAE,MAAM,YAAY,SAAS,CAAC,KAAK,GAAG,aAAa,qBAAqB,UAAU,KAAK;AAAA,MACvF,EAAE,MAAM,uBAAuB,aAAa,uBAAuB,UAAU,KAAK;AAAA,IACrF;AAAA,IACA,mBAAmB;AAAA,IACnB,SAAS;AAAA,IACT,SAAS,OAAO,SAAS;AACtB,YAAM,UAAU,eAAe,KAAK,IAAI;AACxC,YAAM,oBAAoB,KAAK,KAAK,qBAAqB;AACzD,UAAI,CAAC;AACF,cAAM,IAAI,SAAS,kDAAkD;AACxE,YAAM,SAAS,MAAM,UAAU,IAAI,EAAE,aAAa,SAAS,iBAAiB;AAC5E,mBAAa,QAAQ,KAAK,KAAK,sBAAsB;AAAA,IACxD;AAAA,EACH;AAAA,EACA;AAAA,IACG,MAAM,CAAC,OAAO,iBAAiB,QAAQ;AAAA,IACvC,aAAa;AAAA,IACb,SAAS;AAAA,IACT,MAAM;AAAA,MACH,EAAE,MAAM,YAAY,SAAS,CAAC,KAAK,GAAG,aAAa,qBAAqB,UAAU,KAAK;AAAA,MACvF,EAAE,MAAM,uBAAuB,aAAa,uBAAuB,UAAU,KAAK;AAAA,IACrF;AAAA,IACA,mBAAmB;AAAA,IACnB,SAAS,OAAO,SAAS;AACtB,YAAM,UAAU,eAAe,KAAK,IAAI;AACxC,YAAM,oBAAoB,KAAK,KAAK,qBAAqB;AACzD,UAAI,CAAC;AACF,cAAM,IAAI,SAAS,kDAAkD;AACxE,YAAM,UAAU,IAAI,EAAE,kBAAkB,SAAS,iBAAiB;AAClE,cAAQ,IAAI,mCAAmC;AAAA,IAClD;AAAA,EACH;AACH;AAEO,IAAM,wBAAmC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAAA;AACH;;;ACjMA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,gBAAgB,GAAG;AAAA,EACrE,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,KAAK,SAAS,GAAG;AAAA,EAC7D,IAAI,OAAO;AACd;AAEO,IAAM,qBAAgC;AAAA,EAC1C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,eAAe;AAAA,MACxB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,eAAe;AAAA,MACf,SAASA;AAAA,IACZ,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,iBAAiB,WAAW;AAAA,MACnC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,yBAAyB,SAAS;AAClF,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,SAAS;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,mBAAW,CAAC,MAAM,GAAG,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,SAAS,MAAM;AAAA,MACvC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,mBAAmB,aAAa,mBAAmB,UAAU,KAAK;AAAA,QAC1E,EAAE,MAAM,QAAQ,aAAa,cAAc;AAAA,QAC3C,EAAE,MAAM,aAAa,aAAa,YAAY;AAAA,QAC9C,EAAE,MAAM,UAAU,aAAa,mBAAmB;AAAA,MACrD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,KAAK;AACpB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,iBAAiB;AAAA,UACrC,KAAK,OAAO,OAAO,KAAK,IAAI,IAAI;AAAA,UAChC,KAAK,WAAW,IAAI,OAAO,KAAK,WAAW,CAAC,IAAI;AAAA,UAChD,SAAS,EAAE,OAAO,IAAI;AAAA,QACzB;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,YAAY,MAAM;AAAA,MAC1C,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,mBAAmB,aAAa,mBAAmB,UAAU,KAAK;AAAA,QAC1E,EAAE,MAAM,QAAQ,aAAa,cAAc;AAAA,QAC3C,EAAE,MAAM,aAAa,aAAa,YAAY;AAAA,MACjD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,iBAAiB;AAAA,UACrC,KAAK,OAAO,OAAO,KAAK,IAAI,IAAI;AAAA,UAChC,KAAK,WAAW,IAAI,OAAO,KAAK,WAAW,CAAC,IAAI;AAAA,QACnD;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,EACH;AACH;;;ACtFA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,EAAE,QAAQ,iBAAiB,UAAU,CAAC,SAAc,KAAK,iBAAiB,GAAG;AAAA,EAC7E,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAC9D;AAEO,IAAM,uBAAkC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,kBAAkB,MAAM;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,wBAAwB,SAAS;AACjF,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,QAAQ;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,QAAQ;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,0BAA0B,UAAU,KAAK,CAAC;AAAA,MAC5E,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,QAAQ;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,0BAA0B,UAAU,KAAK,CAAC;AAAA,MAC5E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,YAAY,GAAG,EAAE,UAAU,yBAAyB,WAAW,EAAE;AACvE,gBAAQ,OAAO,MAAM,+BAA+B,EAAE;AAAA,CAAI;AAAA,MAC7D;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,SAAS;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,oBAAoB;AACpE,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,WAAW;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,sBAAsB,IAAW;AACjF,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,SAAS;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,QAAQ,aAAa,+BAA+B,UAAU,KAAK,CAAC;AAAA,MACnF,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C,cAAc,MAAM,MAAM;AAAA,QAC7B;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,kBAAkB,QAAQ;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,qBAAqB;AACrE,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,EACH;AACH;;;ACrGO,IAAM,gBAA2B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,WAAW,UAAU;AAAA,MAC5B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,SAAS;AAC1E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,WAAW;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,SAAS;AAC3E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,aAAa;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,oBAAoB,SAAS;AAC7E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,aAAa;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,oBAAoB,SAAS;AAC7E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,cAAc;AAAA,MAChC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,WAAW;AAAA,QAClC;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,EACH;AACH;;;ACrDA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,OAAO;AAAA,EACX,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,aAAa,KAAK,QAAQ,GAAG;AAAA,EAC7E,IAAI,QAAQ;AACf;AAEO,IAAM,sBAAiC;AAAA,EAC3C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,iBAAiB,MAAM;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,IAAI,MAAM;AACzB,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB;AACjE,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,WAAW;AAAA,MACnC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,0BAA0B,SAAS;AACnF,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,QAAQ;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,mBAAmB,UAAU,KAAK,CAAC;AAAA,MACrE,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,YAAY;AAAA,MACpC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,mBAAmB,UAAU,KAAK,CAAC;AAAA,MACrE,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM;AAC/B,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,iBAAiB,QAAQ;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,mBAAmB,UAAU,KAAK,CAAC;AAAA,MACrE,SAAS,OAAO,EAAE,KAAK,MAAM,KAAK,MAAM;AACrC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,EACH;AACH;;;ACvEO,IAAM,gBAA2B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,WAAW,SAAS;AAAA,MAC3B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,WAAW,aAAa,mCAAmC;AAAA,QACnE,EAAE,MAAM,WAAW,aAAa,iCAAiC;AAAA,QACjE,EAAE,MAAM,WAAW,aAAa,yCAAyC;AAAA,QACzE,EAAE,MAAM,QAAQ,aAAa,0CAA0C;AAAA,MAC1E;AAAA,MACA,UAAU;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,KAAK,SAAS,IAAI,cAAc,MAAM,SAAS,IAAI;AAClE,cAAM,SAAS,KAAK,SAAS,IAAI,cAAc,MAAM,SAAS,IAAI;AAElE,YAAI,CAAC,UAAU,CAAC,QAAQ;AACrB,gBAAM,IAAI,MAAM,gCAAgC;AAAA,QACnD;AACA,YAAI,UAAU,QAAQ;AACnB,gBAAM,IAAI,MAAM,0CAA0C;AAAA,QAC7D;AAEA,cAAM,UAAW,KAAK,WAAsB;AAC5C,cAAM,OAAO,KAAK,OAAO,cAAc,MAAM,MAAM,IAAI;AAEvD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,cAAc,WAAW,UAAU,GAAG;AAAA,UACnF;AAAA,UACA,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,UAC3B,GAAI,OAAO,EAAE,KAAK,IAAI,CAAC;AAAA,QAC1B,CAAC;AACD,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,EACH;AACH;;;AC3CA,IAAMC,YAAU;AAAA,EACb,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,OAAO;AACd;AAEO,IAAM,oBAA+B;AAAA,EACzC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,aAAa;AAAA,MACtB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,IACZ,CAAC;AAAA,EACJ;AACH;;;ACnBA,IAAMC,eAAsC;AAAA,EACzC,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,SAAS,GAAG;AAAA,EAC9D,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,UAAU,GAAG;AAAA,EAC/D,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,OAAO,KAAK,SAAS,CAAC,EAAE;AAAA,EACpE,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,OAAO,KAAK,UAAU,CAAC,EAAE;AAAA,EACtE,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,OAAO,KAAK,UAAU,CAAC,EAAE;AAAA,EACtE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,OAAO,KAAK,WAAW,CAAC,EAAE;AAAA,EACxE,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAe,KAAK,SAAS,QAAQ,KAAM;AAAA,EAC3E,EAAE,QAAQ,WAAW,UAAU,CAAC,SAAc,KAAK,aAAa,GAAG;AACtE;AAEA,IAAM,eAAuC;AAAA,EAC1C,EAAE,QAAQ,SAAS,UAAU,CAAC,SAAc,OAAO,KAAK,SAAS,EAAE,EAAE;AAAA,EACrE,EAAE,QAAQ,OAAO,UAAU,CAAC,SAAc,KAAK,aAAa,GAAG;AAAA,EAC/D,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,UAAU,GAAG;AAAA,EAC/D,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,cAAc,SAAS;AAAA,EACzE;AAAA,IACG,QAAQ;AAAA,IACR,UAAU,CAAC,SAAe,KAAK,YAAY,OAAO,OAAO,KAAK,QAAQ,IAAI;AAAA,EAC7E;AAAA,EACA,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,kBAAkB,GAAG;AAAA,EACvE,EAAE,QAAQ,UAAU,UAAU,CAAC,SAAc,KAAK,UAAU,GAAG;AAClE;AAEA,eAAe,cAAc,UAAoB,SAAiC;AAC/E,QAAM,SAAS,SAAS,MAAM,UAAU;AACxC,MAAI,CAAC,QAAQ;AACV,YAAQ,MAAM,kBAAkB;AAChC;AAAA,EACH;AAEA,QAAM,UAAU,IAAI,YAAY;AAChC,MAAI,SAAS;AACb,MAAI,UAAe;AAEnB,SAAO,MAAM;AACV,UAAM,EAAE,MAAM,MAAM,IAAI,MAAM,OAAO,KAAK;AAC1C,QAAI,KAAM;AAEV,cAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,KAAK,CAAC;AAChD,UAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,aAAS,MAAM,IAAI,KAAK;AAExB,eAAW,QAAQ,OAAO;AACvB,UAAI,CAAC,KAAK,WAAW,QAAQ,EAAG;AAChC,UAAI;AACD,cAAM,OAAO,KAAK,MAAM,KAAK,MAAM,CAAC,CAAC;AACrC,YAAI,KAAK,SAAS,YAAY;AAC3B,oBAAU;AACV,cAAI,SAAS;AACV,kBAAM,IAAI;AACV,oBAAQ,OAAO;AAAA,cACZ,OAAO,EAAE,MAAM,WAAM,EAAE,MAAM,YAAY,EAAE,MAAM,YAAY,EAAE,OAAO,aAAa,EAAE,KAAK;AAAA,YAC7F;AAAA,UACH;AAAA,QACH,WAAW,KAAK,SAAS,aAAa;AACnC,cAAI,SAAS;AACV,kBAAM,IAAI;AACV,kBAAM,SAAS,EAAE,SAAS,WAAM,EAAE,MAAM,KAAK;AAC7C,kBAAM,SAAS,EAAE,YAAY,OAAO,WAAW,EAAE,QAAQ,KAAK;AAC9D,kBAAM,SAAS,EAAE,iBAAiB,WAAW,EAAE,cAAc,KAAK;AAClE,oBAAQ,MAAM;AAAA,KAAQ,EAAE,MAAM,KAAK,EAAE,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE;AAAA,UAC9E;AAAA,QACH;AAAA,MACH,QAAQ;AAAA,MAER;AAAA,IACH;AAAA,EACH;AAEA,MAAI,SAAS;AACV,YAAQ,MAAM,EAAE;AAAA,EACnB;AAEA,MAAI,SAAS;AACV,YAAQ,IAAI,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA,EAC/C;AACH;AAEO,IAAM,aAAwB;AAAA,EAClC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,QAAQ,KAAK;AAAA,MACpB,aAAa;AAAA,MACb,MAAM;AAAA,QACH,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK;AAAA,QACtE,EAAE,MAAM,WAAW,aAAa,oCAAoC,QAAQ,KAAK;AAAA,QACjF;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,QAAQ;AAAA,QACX;AAAA,QACA,EAAE,MAAM,SAAS,aAAa,iCAAiC,QAAQ,KAAK;AAAA,QAC5E,EAAE,MAAM,eAAe,aAAa,yCAAyC;AAAA,QAC7E;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,QAChB;AAAA,MACH;AAAA,MACA,UAAU;AAAA,QACP;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS;AAAA,MACT,SAAS,OAAO,EAAE,KAAK,MAAM,UAAU,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,SAAS,KAAK,SAAS,MAAM;AACnC,cAAM,aAAa,KAAK,aAAa,MAAM;AAC3C,cAAM,QAAQ,KAAK,OAAO,MAAM;AAChC,cAAM,qBAAqB,CAAC,UAAU,QAAQ;AAE9C,cAAM,gBAAgB,KAAK,aAAa;AACxC,YAAI;AACJ,YAAI,eAAe;AAChB,cAAI,CAAC,mBAAmB,SAAS,aAAgC,GAAG;AACjE,kBAAM,IAAI;AAAA,cACP,0BAA0B,aAAa,sBAAsB,mBAAmB,KAAK,IAAI,CAAC;AAAA,YAC7F;AAAA,UACH;AACA,uBAAa;AAAA,QAChB;AACA,cAAM,UAAU,KAAK,UAAU;AAE/B,YAAI,CAAC,OAAO;AACT,gBAAM,QAAQ;AAAA,YACX,UAAU;AAAA,YACV,cAAc;AAAA,YACd,cAAc,IAAI,UAAU;AAAA,YAC5B,WAAW,UAAU,OAAO;AAAA,UAC/B,EACI,OAAO,OAAO,EACd,KAAK,GAAG;AACZ,kBAAQ;AAAA,YACL,gCAAgC,YAAY,GAAG,QAAQ,IAAI,KAAK,KAAK,EAAE;AAAA,UAC1E;AAAA,QACH;AAEA,cAAM,WAAW,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC/C;AAAA,UACA;AAAA,UACA;AAAA,YACG;AAAA,YACA,kBAAkB;AAAA,YAClB;AAAA,YACA;AAAA,UACH;AAAA,QACH;AAEA,YAAI,CAAC,SAAS,IAAI;AACf,gBAAM,OAAO,MAAM,SAAS,KAAK;AACjC,kBAAQ,MAAM,gBAAgB,SAAS,MAAM,IAAI,IAAI,EAAE;AACvD,kBAAQ,KAAK,CAAC;AAAA,QACjB;AAEA,cAAM,cAAc,UAAU,CAAC,KAAK;AAAA,MACvC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,aAAa;AAAA,MACb,MAAM;AAAA,QACH,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK;AAAA,QACtE,EAAE,MAAM,SAAS,aAAa,qBAAqB;AAAA,MACtD;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,MAAM,UAAU,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,QAAQ,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI;AACtD,cAAM,OAAO,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC3C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,mBAAW,MAAM,KAAKA,YAAW;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,OAAO;AAAA,MACtB,aAAa;AAAA,MACb,MAAM;AAAA,QACH,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK;AAAA,QACtE,EAAE,MAAM,UAAU,aAAa,UAAU,UAAU,KAAK;AAAA,MAC3D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,MAAM,UAAU,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,QAAQ,KAAK,QAAQ;AAC3B,YAAI,CAAC,MAAO,OAAM,IAAI,MAAM,qCAAqC;AACjE,cAAM,QAAQ,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC5C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,mBAAW,OAAO,KAAK,YAAY;AAAA,MACtC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,QAAQ;AAAA,MACvB,aAAa;AAAA,MACb,MAAM,CAAC,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MAC9E,SAAS,OAAO,EAAE,KAAK,MAAM,UAAU,MAAM;AAC1C,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,gBAAQ,IAAI,KAAK,UAAU,QAAQ,MAAM,CAAC,CAAC;AAAA,MAC9C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,QAAQ,eAAe;AAAA,MAC9B,aAAa;AAAA,MACb,MAAM,CAAC,EAAE,MAAM,iBAAiB,aAAa,iBAAiB,UAAU,KAAK,CAAC;AAAA,MAC9E,SAAS;AAAA,MACT,UAAU;AAAA,QACP;AAAA,QACA;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,MAAM,WAAW,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,eAAe,cAAc,MAAM,eAAe;AACxD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,EACH;AACH;;;AC9OA,IAAMC,YAAU;AAAA,EACb,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,QAAQ,UAAU,CAAC,SAAc,KAAK,QAAQ,GAAG;AAAA,EAC3D,IAAI,OAAO;AACd;AAEO,IAAM,uBAAkC;AAAA,EAC5C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,mBAAmB,WAAW;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,4BAA4B,SAAS;AACrF,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,MAAM;AAAA,MAChC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,SAAS;AAC5E,mBAAW,QAAQ,KAAKA,SAAO;AAAA,MAClC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,QAAQ;AAAA,MAClC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,qBAAqB,UAAU,KAAK,CAAC;AAAA,MACvE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,WAAW;AAAA,UAC1E,UAAU,cAAc,MAAM,IAAI;AAAA,QACrC,CAAQ;AACR,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,KAAK;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,qBAAqB,UAAU,KAAK,CAAC;AAAA,MACvE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,QAAQ;AAAA,MAClC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,qBAAqB,UAAU,KAAK,CAAC;AAAA,MACvE,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,KAAKA,SAAO;AAAA,MACpC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,QAAQ;AAAA,MAClC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,qBAAqB,UAAU,KAAK,CAAC;AAAA,MACvE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,WAAW,EAAE;AAChE,gBAAQ,OAAO,MAAM,0BAA0B,EAAE;AAAA,CAAI;AAAA,MACxD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,aAAa;AAAA,MACvC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,2BAA2B,UAAU,KAAK,CAAC;AAAA,MAC7E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,mBAAmB,oBAAoB;AAAA,MAC9C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,2BAA2B,UAAU,KAAK,CAAC;AAAA,MAC7E,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,EACH;AACH;;;AC9GO,IAAM,mBAA8B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,oBAAoB,SAAS;AAC7E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,WAAW;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,WAAW;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,qBAAqB,SAAS;AAC9E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,YAAY;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,qBAAqB,SAAS;AAC9E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,SAAS;AAC1E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,SAAS;AAAA,MAC9B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,SAAS;AAC3E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,SAAS;AAC3D,gBAAQ,OAAO,MAAM,iCAAiC;AAAA,MACzD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,qBAAqB,SAAS;AAC9E,mBAAW,OAAO,SAAS,GAAG;AAAA,MACjC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,OAAO;AAAA,MAC5B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,YAAY,aAAa,uBAAuB,UAAU,KAAK,CAAC;AAAA,MAC/E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,UAAU,KAAK,UAAU;AAC/B,YAAI,CAAC,WAAW,OAAO,YAAY;AAChC,gBAAM,IAAI,SAAS,wBAAwB;AAC9C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,oBAAoB,WAAW,OAAO;AACtF,mBAAW,OAAO,SAAS,GAAG;AAAA,MACjC;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,aAAa;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,QAAQ,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,SAAS;AAC3E,cAAM,OAAO,MAAM,KAAK,CAAC,MAAW,EAAE,mBAAmB,uBAAuB;AAChF,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,gCAAgC;AAC9D,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,KAAK;AAAA,QACR;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,oBAAoB;AAAA,MACzC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,QAAQ,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,SAAS;AAC3E,cAAM,OAAO,MAAM,KAAK,CAAC,MAAW,EAAE,mBAAmB,uBAAuB;AAChF,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,gCAAgC;AAC9D,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,KAAK;AAAA,UACL;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,EACH;AACH;;;ACrIA,IAAMC,YAAU,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC;AAE5C,IAAM,oBAA+B;AAAA,EACzC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,cAAc;AAAA,MACvB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,gBAAgB,mBAAmB;AAAA,MAC1C,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,kBAAkB,UAAU,KAAK,CAAC;AAAA,MACpE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,gBAAgB,SAAS;AAAA,MAChC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,kBAAkB,UAAU,KAAK,CAAC;AAAA,MACpE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,gBAAgB,QAAQ;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,kBAAkB,UAAU,KAAK,CAAC;AAAA,MACpE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,gBAAgB,UAAU;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,kBAAkB,UAAU,KAAK,CAAC;AAAA,MACpE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,EACH;AACH;;;ACtEA,IAAMC,YAAkC;AAAA,EACrC,IAAI,GAAG;AAAA,EACP,IAAI,KAAK;AAAA,EACT,EAAE,QAAQ,OAAO,UAAU,CAAC,SAAc,KAAK,YAAY,GAAG;AAAA,EAC9D,IAAI,OAAO;AACd;AAEO,IAAM,wBAAmC;AAAA,EAC7C,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,kBAAkB;AAAA,MAC3B,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,WAAW;AAAA,MACX,cAAc;AAAA,MACd,cAAc;AAAA,MACd,cAAc;AAAA,MACd,SAASA;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,oBAAoB,MAAM;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,sBAAsB,UAAU,KAAK,CAAC;AAAA,MACxE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,EACH;AACH;;;AC/BO,IAAM,gBAA2B;AAAA,EACrC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,WAAW,QAAQ;AAAA,MAC1B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,SAAS;AAC1E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,WAAW;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,WAAW;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,SAAS;AAC3E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,YAAY;AAAA,MAC9B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,SAAS;AAC3E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,QAAQ;AAAA,MAC1B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,cAAc,SAAS;AACvE,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,SAAS;AAAA,MAC3B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,eAAe,SAAS;AACxE,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,QAAQ;AAAA,MAC1B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,YAAY,GAAG,EAAE,UAAU,cAAc,SAAS;AACxD,gBAAQ,OAAO,MAAM,8BAA8B;AAAA,MACtD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,aAAa;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AAEpC,cAAM,QAAQ,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,SAAS;AAC3E,cAAM,OAAO,MAAM,KAAK,CAAC,MAAW,EAAE,mBAAmB,oBAAoB;AAC7E,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,6BAA6B;AAC3D,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,KAAK;AAAA,QACR;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,oBAAoB;AAAA,MACtC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,QAAQ,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,SAAS;AAC3E,cAAM,OAAO,MAAM,KAAK,CAAC,MAAW,EAAE,mBAAmB,oBAAoB;AAC7E,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,6BAA6B;AAC3D,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,KAAK;AAAA,UACL;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,gBAAgB;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,UAAU,aAAa,oBAAoB;AAAA,QACnD,EAAE,MAAM,SAAS,aAAa,cAAc;AAAA,MAC/C;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,CAAC,IAAI;AACzD,cAAM,QAAQ,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI;AACtD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,YACG;AAAA,YACA;AAAA,UACH;AAAA,QACH;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,gBAAgB;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,MACN,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,MAAM,oBAAoB,IAAI;AACpC,YAAI,IAAI,KAAK;AACV,gBAAM,WAAW,MAAM;AAAA,YAAc,CAAC,EAAE,MAAM,SAAS,MACpD,YAAY,GAAG,EAAE,UAAU,wBAAwB,WAAW,EAAE,MAAM,SAAS,CAAC;AAAA,UACnF;AACA,qBAAW,UAAU,GAAG;AACxB;AAAA,QACH;AACA,cAAM,UAAgD,CAAC;AACvD,YAAI,IAAI,KAAM,SAAQ,OAAO,IAAI;AACjC,YAAI,IAAI,SAAU,SAAQ,WAAW,IAAI;AACzC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,mBAAW,WAAW,QAAQ,IAAI,GAAG,GAAG;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,aAAa;AAAA,MAC/B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK;AAAA,QAC9D,EAAE,MAAM,cAAc,aAAa,sBAAsB,UAAU,KAAK;AAAA,MAC3E;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,oBAAoB,WAAW;AAAA,UAC5E,UAAU,cAAc,MAAM,WAAW;AAAA,UACzC,iBAAiB,cAAc,MAAM,YAAY;AAAA,QACpD,CAAC;AACD,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,eAAe;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,WAAW;AAAA,QAClC;AACA,gBAAQ,OAAO,MAAM,gCAAgC;AAAA,MACxD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,oBAAoB;AAAA,MACtC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,4BAA4B,SAAS;AACrF,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,eAAe;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,uBAAuB,SAAS;AAChF,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,WAAW,mBAAmB;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,2BAA2B,SAAS;AACpF,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,EACH;AACH;;;ACvNO,IAAM,eAA0B;AAAA,EACpC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,UAAU,QAAQ;AAAA,MACzB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,0BAA0B,SAAS;AACnF,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,WAAW;AAAA,MAC5B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,0BAA0B,SAAS;AACnF,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,WAAW;AAAA,MAC5B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,YAAY;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,2BAA2B,SAAS;AACpF,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,QAAQ;AAAA,MACzB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,uBAAuB,SAAS;AAChF,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,SAAS;AAAA,MAC1B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,wBAAwB,SAAS;AACjF,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,QAAQ;AAAA,MACzB,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,YAAY,GAAG,EAAE,UAAU,uBAAuB,SAAS;AACjE,gBAAQ,OAAO,MAAM,iCAAiC;AAAA,MACzD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,aAAa;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,oBAAoB,SAAS;AAC7E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,oBAAoB;AAAA,MACrC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAI7E,cAAM,aAAc,KAAa,cAAc;AAC/C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,gBAAgB;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,UAAU,aAAa,oBAAoB;AAAA,QACnD,EAAE,MAAM,SAAS,aAAa,cAAc;AAAA,MAC/C;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,CAAC,IAAI;AACzD,cAAM,QAAQ,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI;AACtD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,YACG;AAAA,YACA;AAAA,UACH;AAAA,QACH;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,gBAAgB;AAAA,MACjC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,YAAY,aAAa,WAAW,GAAG,GAAG,oBAAoB;AAAA,MAC7E,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,UAAW,KAAK,UAAU,KAAgB;AAChD,cAAM,MAAM,oBAAoB,IAAI;AACpC,YAAI,IAAI,KAAK;AACV,gBAAM,WAAW,MAAM;AAAA,YAAc,CAAC,EAAE,MAAM,SAAS,MACpD,YAAY,GAAG,EAAE,UAAU,uBAAuB,WAAW;AAAA,cAC1D,UAAU;AAAA,cACV;AAAA,cACA;AAAA,YACH,CAAC;AAAA,UACJ;AACA,qBAAW,UAAU,GAAG;AACxB;AAAA,QACH;AACA,cAAM,UAAmE,CAAC;AAC1E,YAAI,QAAS,SAAQ,WAAW;AAChC,YAAI,IAAI,KAAM,SAAQ,OAAO,IAAI;AACjC,YAAI,IAAI,SAAU,SAAQ,WAAW,IAAI;AACzC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,mBAAW,WAAW,QAAQ,IAAI,GAAG,GAAG;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,aAAa;AAAA,MAC9B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK;AAAA,QAC9D,EAAE,MAAM,WAAW,aAAa,kBAAkB,UAAU,KAAK;AAAA,QACjE,EAAE,MAAM,YAAY,aAAa,mBAAmB,UAAU,KAAK;AAAA,MACtE;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,mBAAmB,WAAW;AAAA,UAC3E,UAAU,cAAc,MAAM,WAAW;AAAA,UACzC,cAAc,cAAc,MAAM,SAAS;AAAA,UAC3C,SAAS,cAAc,MAAM,UAAU;AAAA,QAC1C,CAAC;AACD,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,eAAe;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK;AAAA,QAC9D,EAAE,MAAM,YAAY,aAAa,mBAAmB,UAAU,KAAK;AAAA,MACtE;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,WAAW;AAAA,UAC/B,cAAc,MAAM,UAAU;AAAA,QACjC;AACA,gBAAQ,OAAO,MAAM,mCAAmC;AAAA,MAC3D;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,QAAQ;AAAA,MACzB,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,gBAAgB,SAAS;AACzE,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,eAAe;AAAA,MAChC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,YAAY,aAAa,YAAY,UAAU,KAAK,CAAC;AAAA,MACpE,SAAS,OAAO,EAAE,KAAK,MAAM,UAAU,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,UAAU;AAAA,QACjC;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,cAAc;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,YAAY,aAAa,YAAY,UAAU,KAAK,CAAC;AAAA,MACpE,SAAS,OAAO,EAAE,KAAK,MAAM,UAAU,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,UAAU;AAAA,QACjC;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,aAAa;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,YAAY,aAAa,YAAY,UAAU,KAAK;AAAA,QAC5D,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK;AAAA,MAC3D;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,MAAM,UAAU,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,UAAU;AAAA,UAC9B,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,gBAAgB;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,MAAM,UAAU,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,gBAAgB;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,cAAc,UAAU,KAAK,CAAC;AAAA,MAChE,SAAS,OAAO,EAAE,KAAK,MAAM,UAAU,MAAM;AAC1C,cAAM,KAAK,cAAc,MAAM,IAAI;AACnC,cAAM,YAAY,GAAG,EAAE,UAAU,oBAAoB,WAAW,EAAE;AAClE,gBAAQ,OAAO,MAAM,0BAA0B,EAAE;AAAA,CAAI;AAAA,MACxD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,UAAU,WAAW;AAAA,MAC5B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,yBAAyB,SAAS;AAClF,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,EACH;AACH;;;ACtRO,IAAM,mBAA8B;AAAA,EACxC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA,IACP;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,oBAAoB,SAAS;AAC7E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,WAAW;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,WAAW;AAAA,MAChC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,qBAAqB,SAAS;AAC9E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,YAAY;AAAA,MACjC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,qBAAqB,SAAS;AAC9E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,SAAS;AAC1E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,SAAS;AAAA,MAC9B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,kBAAkB,SAAS;AAC3E,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,YAAY,GAAG,EAAE,UAAU,iBAAiB,SAAS;AAC3D,gBAAQ,OAAO,MAAM,iCAAiC;AAAA,MACzD;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,aAAa;AAAA,MAClC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,UAAU,MAAM;AACpC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,wBAAwB,SAAS;AACjF,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,oBAAoB;AAAA,MACzC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,gBAAgB;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,UAAU,aAAa,oBAAoB;AAAA,QACnD,EAAE,MAAM,SAAS,aAAa,cAAc;AAAA,MAC/C;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,KAAK,QAAQ,IAAI,OAAO,KAAK,QAAQ,CAAC,IAAI;AACzD,cAAM,QAAQ,KAAK,OAAO,IAAI,OAAO,KAAK,OAAO,CAAC,IAAI;AACtD,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,YACG;AAAA,YACA;AAAA,UACH;AAAA,QACH;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,gBAAgB;AAAA,MACrC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,MACN,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,MAAM,oBAAoB,IAAI;AACpC,YAAI,IAAI,KAAK;AACV,gBAAM,WAAW,MAAM;AAAA,YAAc,CAAC,EAAE,MAAM,SAAS,MACpD,YAAY,GAAG,EAAE,UAAU,2BAA2B,WAAW;AAAA,cAC9D;AAAA,cACA;AAAA,YACH,CAAC;AAAA,UACJ;AACA,qBAAW,UAAU,GAAG;AACxB;AAAA,QACH;AACA,cAAM,UAAgD,CAAC;AACvD,YAAI,IAAI,KAAM,SAAQ,OAAO,IAAI;AACjC,YAAI,IAAI,SAAU,SAAQ,WAAW,IAAI;AACzC,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA;AAAA,QACH;AACA,mBAAW,WAAW,QAAQ,IAAI,GAAG,GAAG;AAAA,MAC3C;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,aAAa;AAAA,MAClC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK;AAAA,QAC9D,EAAE,MAAM,aAAa,aAAa,wBAAwB,UAAU,KAAK;AAAA,MAC5E;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,uBAAuB,WAAW;AAAA,UAC/E,UAAU,cAAc,MAAM,WAAW;AAAA,UACzC,oBAAoB,cAAc,MAAM,WAAW;AAAA,QACtD,CAAC;AACD,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,eAAe;AAAA,MACpC,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,aAAa,aAAa,aAAa,UAAU,KAAK,CAAC;AAAA,MACtE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC9B;AAAA,UACA,cAAc,MAAM,WAAW;AAAA,QAClC;AACA,gBAAQ,OAAO,MAAM,mCAAmC;AAAA,MAC3D;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,UAAU;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH;AAAA,UACG,MAAM;AAAA,UACN,aAAa;AAAA,UACb,UAAU;AAAA,QACb;AAAA,MACH;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,aAAa;AAAA,QACpC;AACA,qBAAa,QAAQ,GAAG;AAAA,MAC3B;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM;AAAA,QACH,EAAE,MAAM,SAAS,aAAa,gBAAgB,UAAU,KAAK;AAAA,QAC7D,EAAE,MAAM,eAAe,aAAa,yBAAyB;AAAA,MAChE;AAAA,MACA,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,wBAAwB,WAAW;AAAA,UAChF,OAAO,cAAc,MAAM,OAAO;AAAA,UAClC,YAAa,KAAK,aAAa,KAAgB;AAAA,QAClD,CAAQ;AACR,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,EACH;AACH;;;AC5NA,IAAMC,YAAU,CAAC,IAAI,GAAG,GAAG,IAAI,KAAK,GAAG,IAAI,OAAO,CAAC;AAGnD,SAAS,aACN,MACA,QACA,eACwB;AACxB,QAAM,OAAO,GAAG,MAAM,aAAa,aAAa;AAChD,SAAO;AAAA,IACJ,GAAG;AAAA,IACH,OAAO;AAAA,MACJ,gBAAgB,GAAG,IAAI;AAAA,MACvB,kBAAkB,GAAG,IAAI;AAAA,MACzB,mBAAmB,GAAG,IAAI;AAAA,MAC1B,cAAc,GAAG,IAAI,2BAA2B,KAAK,QAAQ,EAAE;AAAA,IAClE;AAAA,EACH;AACH;AAEO,IAAM,kBAA6B;AAAA,EACvC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,UAAU;AAAA;AAAA,IAEP,GAAG,aAAa;AAAA,MACb,QAAQ,CAAC,YAAY;AAAA,MACrB,YAAY;AAAA,MACZ,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,SAASA;AAAA,MACT,mBAAmB;AAAA,IACtB,CAAC;AAAA,IACD;AAAA,MACG,MAAM,CAAC,cAAc,KAAK;AAAA,MAC1B,aAAa;AAAA,MACb,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,gBAAgB,UAAU,KAAK,CAAC;AAAA,MAClE,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,qBAAa,aAAa,QAAe,IAAI,UAAU,QAAQ,SAAS,GAAG,GAAG;AAAA,MACjF;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU,eAAe,WAAW,IAAW;AACrF,qBAAa,aAAa,QAAe,IAAI,UAAU,QAAQ,SAAS,GAAG,GAAG;AAAA,MACjF;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,QAAQ;AAAA,MAC7B,aAAa;AAAA,MACb,SAAS;AAAA,MACT,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,gBAAgB,UAAU,KAAK,CAAC;AAAA,MAClE,mBAAmB;AAAA,MACnB,SAAS,OAAO,EAAE,KAAK,WAAW,MAAM,KAAK,MAAM;AAChD,YAAI,CAAC,KAAM,OAAM,IAAI,SAAS,+CAA+C;AAC7E,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,UACxB;AAAA,QACH;AACA,qBAAa,aAAa,QAAe,IAAI,UAAU,QAAQ,SAAS,GAAG,GAAG;AAAA,MACjF;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,SAAS;AAAA,MAC9B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,gBAAgB,UAAU,KAAK,CAAC;AAAA,MAClE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,eAAe;AAAA,MACpC,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,gBAAgB,UAAU,KAAK,CAAC;AAAA,MAClE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,IACA;AAAA,MACG,MAAM,CAAC,cAAc,UAAU;AAAA,MAC/B,aAAa;AAAA,MACb,mBAAmB;AAAA,MACnB,MAAM,CAAC,EAAE,MAAM,MAAM,aAAa,gBAAgB,UAAU,KAAK,CAAC;AAAA,MAClE,SAAS,OAAO,EAAE,KAAK,WAAW,KAAK,MAAM;AAC1C,cAAM,SAAS,MAAM,YAAY,GAAG,EAAE,UAAU;AAAA,UAC7C;AAAA,UACA,cAAc,MAAM,IAAI;AAAA,QAC3B;AACA,mBAAW,QAAQ,GAAG;AAAA,MACzB;AAAA,IACH;AAAA,EACH;AACH;;;ACpDO,SAAS,sBAAsB,UAAiC;AAEpE,WAAS,SAAS,WAAW;AAC7B,WAAS,SAAS,WAAW;AAC7B,WAAS,SAAS,aAAa;AAC/B,WAAS,SAAS,gBAAgB;AAClC,WAAS,SAAS,eAAe;AACjC,WAAS,SAAS,sBAAsB;AACxC,WAAS,SAAS,YAAY;AAC9B,WAAS,SAAS,gBAAgB;AAClC,WAAS,SAAS,iBAAiB;AACnC,WAAS,SAAS,eAAe;AACjC,WAAS,SAAS,WAAW;AAC7B,WAAS,SAAS,WAAW;AAC7B,WAAS,SAAS,YAAY;AAC9B,WAAS,SAAS,eAAe;AACjC,WAAS,SAAS,oBAAoB;AACtC,WAAS,SAAS,cAAc;AAChC,WAAS,SAAS,cAAc;AAGhC,WAAS,SAAS,kBAAkB;AACpC,WAAS,SAAS,aAAa;AAC/B,WAAS,SAAS,oBAAoB;AACtC,WAAS,SAAS,kBAAkB;AACpC,WAAS,SAAS,uBAAuB;AACzC,WAAS,SAAS,iBAAiB;AACnC,WAAS,SAAS,aAAa;AAC/B,WAAS,SAAS,gBAAgB;AAClC,WAAS,SAAS,oBAAoB;AACtC,WAAS,SAAS,gBAAgB;AAClC,WAAS,SAAS,aAAa;AAC/B,WAAS,SAAS,mBAAmB;AACrC,WAAS,SAAS,aAAa;AAC/B,WAAS,SAAS,cAAc;AAChC,WAAS,SAAS,cAAc;AAChC,WAAS,SAAS,oBAAoB;AACtC,WAAS,SAAS,SAAS;AAC3B,WAAS,SAAS,qBAAqB;AACvC,WAAS,SAAS,gBAAgB;AAClC,WAAS,SAAS,UAAU;AAC5B,WAAS,SAAS,WAAW;AAC7B,WAAS,SAAS,eAAe;AACjC,WAAS,SAAS,oBAAoB;AACtC,WAAS,SAAS,UAAU;AAG5B,WAAS,SAAS,gBAAgB;AAClC,WAAS,SAAS,iBAAiB;AACnC,WAAS,SAAS,eAAe;AACjC,WAAS,SAAS,qBAAqB;AACvC,WAAS,SAAS,oBAAoB;AACtC,WAAS,SAAS,aAAa;AAC/B,WAAS,SAAS,YAAY;AAC9B,WAAS,SAAS,gBAAgB;AAGlC,WAAS,SAAS,mBAAmB;AACxC;;;AC7HA,SAAS,gBAAgB;AAYzB,eAAsB,mBACnB,KACA,MACc;AACd,QAAM,SAAS,QAAQ,KAAK,SAAS,CAAC;AAGtC,QAAM,UAAU,MAAM,IAAI,UAAU,eAAe;AACnD,MAAI,CAAC,QAAQ,OAAO;AACjB,YAAQ,OAAO,MAAM,mDAAmD;AACxE,YAAQ,KAAK,CAAC;AAAA,EACjB;AAGA,QAAM,WAAW,MAAM,IAAI,UAAU,iBAAiB,QAAQ,KAAK;AAEnE,MAAI,CAAC,SAAS,WAAW,CAAC,SAAS,cAAc;AAC9C,YAAQ,OAAO,MAAM,sCAAsC;AAC3D,YAAQ,KAAK,CAAC;AAAA,EACjB;AAEA,QAAM,MAAM,SAAS;AAErB,MAAI,QAAQ;AAET,YAAQ,OAAO,MAAM,MAAM,IAAI;AAC/B;AAAA,EACH;AAGA,SAAO,uBAAuB,QAAQ,KAAK,KAAK,IAAI,GAAG,MAAM;AAC7D,UAAQ,GAAG;AACX,SAAO,6CAA6C;AACvD;AAGA,SAAS,QAAQ,KAAmB;AACjC,QAAM,WAAW,QAAQ;AAEzB,MAAI;AACJ,MAAI;AAEJ,MAAI,aAAa,UAAU;AACxB,cAAU;AACV,WAAO,CAAC,GAAG;AAAA,EACd,WAAW,aAAa,SAAS;AAC9B,cAAU;AACV,WAAO,CAAC,MAAM,SAAS,IAAI,GAAG;AAAA,EACjC,OAAO;AACJ,cAAU;AACV,WAAO,CAAC,GAAG;AAAA,EACd;AAEA,WAAS,SAAS,MAAM,CAAC,QAAQ;AAC9B,QAAI,KAAK;AAEN,cAAQ,OAAO,MAAM,iDAAiD;AAAA,IACzE;AAAA,EACH,CAAC;AACJ;;;ACxDA,YAAYC,eAAc;;;ACL1B,SAAS,oBAAoB;AA4CtB,IAAM,iBAAN,cAA6B,aAAa;AAAA,EACtC,KAAuB;AAAA,EACvB,YAAY;AAAA,EACZ;AAAA,EAER,YAAY,SAAgC;AACzC,UAAM;AACN,SAAK,UAAU;AAAA,MACZ,SAAS;AAAA,MACT,OAAO;AAAA,MACP,GAAG;AAAA,IACN;AAAA,EACH;AAAA;AAAA,EAGA,UAAyB;AACtB,QAAI,OAAO,WAAW,cAAc,aAAa;AAC9C,aAAO,QAAQ;AAAA,QACZ,IAAI,MAAM,qEAAqE;AAAA,MAClF;AAAA,IACH;AAEA,WAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACrC,YAAM,SAAS,IAAI,gBAAgB;AACnC,UAAI,KAAK,QAAQ,SAAS;AACvB,eAAO,OAAO,OAAO,KAAK,QAAQ,OAAO;AAAA,MAC5C;AACA,YAAM,MAAM,OAAO,SAAS,IACvB,GAAG,KAAK,QAAQ,GAAG,IAAI,OAAO,SAAS,CAAC,KACxC,KAAK,QAAQ;AAElB,UAAI,KAAK,QAAQ,OAAO;AACrB,gBAAQ,OAAO,MAAM,yBAAyB,GAAG;AAAA,CAAI;AAAA,MACxD;AAEA,WAAK,KAAK,IAAI,UAAU,GAAG;AAE3B,WAAK,GAAG,UAAU,CAAC,UAAiB;AACjC,cAAM,MAAM,iBAAiB,aAAa,MAAM,UAAU;AAC1D,YAAI,CAAC,KAAK,WAAW;AAClB,iBAAO,IAAI,MAAM,GAAG,CAAC;AAAA,QACxB,OAAO;AACJ,eAAK,KAAK,SAAS,IAAI,MAAM,GAAG,CAAC;AAAA,QACpC;AAAA,MACH;AAEA,WAAK,GAAG,UAAU,CAAC,UAAsB;AACtC,cAAM,SAAS,MAAM,SAAS,OAAO,oBAAoB,MAAM,UAAU;AACzE,aAAK,YAAY;AACjB,aAAK,KAAK,UAAU,EAAE,QAAQ,MAAM,MAAM,KAAK,CAAC;AAAA,MACnD;AAEA,WAAK,GAAG,YAAY,CAAC,UAAwB;AAC1C,YAAI;AACD,gBAAM,OAAO,OAAO,MAAM,SAAS,WAAW,MAAM,OAAO,MAAM,KAAK,SAAS;AAC/E,gBAAM,SAA6B,KAAK,MAAM,IAAI;AAClD,eAAK,KAAK,WAAW,MAAM;AAC3B,eAAK,YAAY,MAAM;AAAA,QAC1B,QAAQ;AACL,cAAI,KAAK,QAAQ,OAAO;AACrB,oBAAQ,OAAO,MAAM;AAAA,CAAmC;AAAA,UAC3D;AAAA,QACH;AAAA,MACH;AAEA,WAAK,GAAG,SAAS,MAAM;AACpB,YAAI,KAAK,QAAQ,OAAO;AACrB,kBAAQ,OAAO,MAAM,8CAA8C;AAAA,QACtE;AACA,aAAK,WAAW,eAAe;AAAA,UAC5B,OAAO,KAAK,QAAQ;AAAA,UACpB,SAAS,KAAK,QAAQ;AAAA,UACtB,KAAK,KAAK,QAAQ;AAAA,QACrB,CAAC;AAAA,MACJ;AAGA,YAAM,UAAU,WAAW,MAAM;AAC9B,YAAI,CAAC,KAAK,WAAW;AAClB,eAAK,MAAM;AACX,iBAAO,IAAI,MAAM,mDAAmD,CAAC;AAAA,QACxE;AAAA,MACH,GAAG,GAAK;AAER,WAAK,KAAK,aAAa,MAAM;AAC1B,qBAAa,OAAO;AACpB,gBAAQ;AAAA,MACX,CAAC;AAED,WAAK,KAAK,SAAS,MAAM;AACtB,qBAAa,OAAO;AAAA,MACvB,CAAC;AAAA,IACJ,CAAC;AAAA,EACJ;AAAA,EAEQ,YAAY,OAAiC;AAClD,YAAQ,MAAM,MAAM;AAAA,MACjB,KAAK;AACF,aAAK,kBAAkB,MAAM,QAAQ,IAAI,MAAM,KAAK;AACpD;AAAA,MAEH,KAAK;AACF,aAAK,KAAK,cAAc,EAAE,WAAW,MAAM,aAAa,GAAG,CAAC;AAC5D;AAAA,MACH,KAAK;AACF,aAAK,KAAK,cAAc;AAAA,UACrB,WAAW,MAAM,aAAa;AAAA,UAC9B,OAAO,MAAM,SAAS;AAAA,QACzB,CAAC;AACD;AAAA,MACH,KAAK;AACF,aAAK,KAAK,YAAY,EAAE,WAAW,MAAM,aAAa,GAAG,CAAC;AAC1D;AAAA,MAEH,KAAK;AACF,aAAK,KAAK,mBAAmB;AAAA,UAC1B,YAAY,MAAM,cAAc;AAAA,UAChC,cAAc,MAAM,gBAAgB;AAAA,QACvC,CAAC;AACD;AAAA,MACH,KAAK;AACF,aAAK,KAAK,kBAAkB;AAAA,UACzB,YAAY,MAAM,cAAc;AAAA,UAChC,OAAO,MAAM,SAAS;AAAA,QACzB,CAAC;AACD;AAAA,MACH,KAAK;AACF,aAAK,KAAK,iBAAiB,EAAE,YAAY,MAAM,cAAc,GAAG,CAAC;AACjE;AAAA,MACH,KAAK;AACF,aAAK,KAAK,oBAAoB;AAAA,UAC3B,YAAY,MAAM,cAAc;AAAA,UAChC,QAAQ,MAAM;AAAA,QACjB,CAAC;AACD;AAAA,MAEH,KAAK;AACF,aAAK,KAAK,eAAe,EAAE,OAAO,MAAM,MAAM,CAAC;AAC/C;AAAA,MACH,KAAK;AACF,aAAK,KAAK,gBAAgB,EAAE,OAAO,MAAM,MAAM,CAAC;AAChD;AAAA,MACH,KAAK;AACF,aAAK,KAAK,aAAa;AAAA,UACpB,SAAS,MAAM,WAAW;AAAA,UAC1B,MAAM,MAAM;AAAA,QACf,CAAC;AACD;AAAA,MAEH;AACG,YAAI,KAAK,QAAQ,OAAO;AACrB,kBAAQ,OAAO,MAAM,+BAA+B,MAAM,IAAI;AAAA,CAAI;AAAA,QACrE;AAAA,IACN;AAAA,EACH;AAAA,EAEQ,kBAAkB,MAAc,OAAkB;AACvD,YAAQ,MAAM;AAAA,MACX,KAAK;AACF,aAAK,YAAY;AACjB,aAAK,KAAK,aAAa;AAAA,UACpB,QAAQ,OAAO;AAAA,UACf,UAAU,OAAO;AAAA,UACjB,aAAa,OAAO;AAAA,QACvB,CAAC;AACD;AAAA,MAEH,KAAK;AACF,YAAI,OAAO,MAAM;AACd,gBAAM,QAAQ,OAAO,KAAK,MAAM,MAAM,QAAQ;AAC9C,eAAK,KAAK,SAAS,EAAE,OAAO,WAAW,MAAM,WAAW,CAAC;AAAA,QAC5D;AACA;AAAA,MAEH,KAAK;AACF,aAAK,KAAK,eAAe,EAAE,WAAW,OAAO,WAAW,CAAC;AACzD;AAAA,MACH,KAAK;AACF,aAAK,KAAK,aAAa,EAAE,WAAW,OAAO,WAAW,CAAC;AACvD;AAAA,MAEH,KAAK;AACF,aAAK,KAAK,aAAa,EAAE,WAAW,OAAO,WAAW,CAAC;AACvD;AAAA,MAEH,KAAK;AACF,YAAI,OAAO;AACR,eAAK,KAAK,oBAAoB,KAAK;AAAA,QACtC;AACA;AAAA,MAEH,KAAK;AACF,YAAI,OAAO;AACR,eAAK,KAAK,iBAAiB,EAAE,MAAM,MAAM,MAAM,MAAM,MAAM,KAAK,CAAC;AAAA,QACpE;AACA;AAAA,MAEH,KAAK;AACF,YAAI,OAAO;AACR,eAAK,KAAK,YAAY;AAAA,YACnB,WAAW,MAAM;AAAA,YACjB,SAAS,MAAM;AAAA,YACf,iBAAiB,MAAM;AAAA,YACvB,kBAAkB,MAAM,qBAAqB;AAAA,YAC7C,eAAe,MAAM;AAAA,UACxB,CAAC;AAAA,QACJ;AACA;AAAA,MAEH,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACF;AAAA,MAEH;AACG,YAAI,KAAK,QAAQ,OAAO;AACrB,kBAAQ,OAAO,MAAM,iCAAiC,IAAI;AAAA,CAAI;AAAA,QACjE;AAAA,IACN;AAAA,EACH;AAAA,EAEQ,WAAW,MAAc,OAAmB;AACjD,QAAI,CAAC,KAAK,MAAM,KAAK,GAAG,eAAe,UAAU,MAAM;AACpD;AAAA,IACH;AACA,UAAM,QAA4B,EAAE,MAAM,UAAU,KAAK;AACzD,QAAI,UAAU,QAAW;AACtB,YAAM,QAAQ;AAAA,IACjB;AACA,SAAK,KAAK,WAAW,KAAK;AAC1B,SAAK,GAAG,KAAK,KAAK,UAAU,KAAK,CAAC;AAAA,EACrC;AAAA;AAAA,EAGA,UAAU,OAAqB;AAC5B,SAAK,WAAW,eAAe;AAAA,MAC5B,MAAM,MAAM,SAAS,QAAQ;AAAA,MAC7B,QAAQ;AAAA,MACR,aAAa;AAAA,IAChB,CAAC;AAAA,EACJ;AAAA;AAAA,EAGA,eAAe,WAAyB;AACrC,SAAK,WAAW,qBAAqB,EAAE,YAAY,UAAU,CAAC;AAAA,EACjE;AAAA;AAAA,EAGA,eAAqB;AAClB,SAAK,WAAW,iBAAiB;AAAA,EACpC;AAAA;AAAA,EAGA,gBAAgB,SAAuB;AACpC,SAAK,WAAW,sBAAsB;AAAA,MACnC,SAAS,EAAE,MAAM,QAAQ,QAAQ;AAAA,IACpC,CAAC;AAAA,EACJ;AAAA;AAAA,EAGA,cAAc,YAAoB,WAA0B;AACzD,SAAK,WAAW,mBAAmB;AAAA,MAChC,cAAc;AAAA,MACd,YAAY;AAAA,IACf,CAAC;AAAA,EACJ;AAAA;AAAA,EAGA,cAAuB;AACpB,WAAO,KAAK,aAAa,KAAK,IAAI,eAAe,UAAU;AAAA,EAC9D;AAAA;AAAA,EAGA,QAAc;AACX,SAAK,YAAY;AACjB,QAAI,KAAK,IAAI;AACV,WAAK,GAAG,MAAM;AACd,WAAK,KAAK;AAAA,IACb;AAAA,EACH;AACH;;;ACjTA,SAAS,yBAA2C;AA6CpD,SAAS,WAAW,MAAsC;AACvD,SAAO,UAAU,QAAS,KAAsB,SAAS;AAC5D;AAEA,SAAS,aAAa,MAAwC;AAC3D,SAAO,UAAU,QAAS,KAAwB,SAAS;AAC9D;AAGA,SAAS,mBAAmB,QAAgB,eAAgC;AACzE,QAAM,UAAU,gBAAgB,QAAQ,gBAAgB,KAAM,QAAQ,CAAC,CAAC,MAAM;AAC9E,UAAQ,QAAQ;AAAA,IACb,KAAK;AACF,aAAO,0BAA0B,OAAO;AAAA,IAC3C,KAAK;AACF,aAAO,cAAc,OAAO;AAAA,IAC/B,KAAK;AACF,aAAO,oBAAoB,OAAO;AAAA,IACrC,KAAK;AACF,aAAO,QAAQ,OAAO;AAAA,IACzB;AACG,aAAO,cAAc,OAAO;AAAA,EAClC;AACH;AAGA,SAAS,gBACN,SACA,iBACc;AACd,MAAI,CAAC,WAAW,CAAC,gBAAiB,QAAO;AACzC,QAAM,WAAW,QAAQ,QAAQ,iBAAiB,EAAE;AACpD,MAAI,gBAAgB,WAAW,QAAQ,GAAG;AACvC,UAAM,QAAQ,gBAAgB,MAAM,SAAS,MAAM;AACnD,WAAO,MAAM,SAAS,IAAI,QAAQ;AAAA,EACrC;AACA,SAAO,oBAAoB,UAAU,kBAAkB;AAC1D;AAaA,IAAM,MAAM;AACZ,IAAM,cAAc,GAAG,GAAG;AAC1B,IAAM,cAAc,GAAG,GAAG;AAC1B,IAAM,gBAAgB,GAAG,GAAG;AAC5B,IAAM,iBAAiB,GAAG,GAAG;AAC7B,IAAM,YAAY,GAAG,GAAG;AACxB,IAAM,QAAQ,GAAG,GAAG;AACpB,IAAM,WAAW,GAAG,GAAG,SAAS,GAAG;AACnC,IAAM,YAAY,GAAG,GAAG,SAAS,GAAG;AAEpC,IAAM,OAAO,GAAG,GAAG;AACnB,IAAM,QAAQ,GAAG,GAAG;AACpB,IAAM,OAAO,GAAG,GAAG;AACnB,IAAM,SAAS,GAAG,GAAG;AACrB,IAAM,SAAS,GAAG,GAAG;AACrB,IAAM,aAAa,GAAG,GAAG;AACzB,IAAM,MAAM,GAAG,GAAG;AAClB,IAAM,kBAAkB,GAAG,GAAG;AAE9B,SAAS,OAAO,KAAa,KAAqB;AAC/C,SAAO,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG;AAC7B;AAIO,IAAM,UAAN,MAAc;AAAA,EACV,QAAoB,CAAC;AAAA,EACrB,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,eAAe;AAAA,EACf,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,OAAO;AAAA,EACP,UAAU;AAAA,EACV,cAAoD;AAAA,EACpD,oBAAqC;AAAA,EACrC,kBAAmC;AAAA,EACnC;AAAA;AAAA,EAGA,eAA6B,CAAC;AAAA,EAC9B,oBAAoB;AAAA,EACpB,iBAAqC;AAAA;AAAA,EAGrC,SAAS;AAAA,EACT,WAAiD;AAAA,EAEzD,YAAY,SAAyB;AAClC,SAAK,UAAU;AACf,SAAK,oBAAoB,CAAC,CAAC,QAAQ;AAAA,EACtC;AAAA;AAAA,EAGA,IAAY,eAAwB;AACjC,WAAO,KAAK;AAAA,EACf;AAAA;AAAA,EAIA,QAAc;AACX,SAAK,iBAAiB;AACtB,YAAQ,OAAO,MAAM,gBAAgB,QAAQ;AAC7C,YAAQ,OAAO,MAAM,GAAG,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,CAAC,GAAG;AAG7D,YAAQ,MAAM,YAAY,MAAM;AAChC,QAAI,QAAQ,MAAM,MAAO,SAAQ,MAAM,WAAW,IAAI;AACtD,YAAQ,MAAM,GAAG,QAAQ,KAAK,MAAM;AACpC,YAAQ,MAAM,OAAO;AAErB,YAAQ,OAAO,GAAG,UAAU,KAAK,QAAQ;AACzC,YAAQ,GAAG,QAAQ,KAAK,eAAe;AAGvC,QAAI,KAAK,QAAQ,SAAS,KAAK,QAAQ,QAAQ,QAAQ;AACpD,WAAK,iBAAiB,kBAAkB,6BAA6B,EAAE,OAAO,IAAI,CAAC;AACnF,WAAK,eAAe,MAAM;AAAA,eAAiB,oBAAI,KAAK,GAAE,YAAY,CAAC;AAAA,CAAQ;AAAA,IAC9E;AAEA,SAAK,UAAU;AACf,SAAK,OAAO;AAAA,EACf;AAAA,EAEA,OAAa;AACV,QAAI,CAAC,KAAK,QAAS;AACnB,SAAK,UAAU;AACf,QAAI,KAAK,aAAa;AACnB,mBAAa,KAAK,WAAW;AAC7B,WAAK,cAAc;AAAA,IACtB;AACA,SAAK,SAAS;AACd,QAAI,KAAK,gBAAgB;AACtB,WAAK,eAAe,IAAI;AACxB,WAAK,iBAAiB;AAAA,IACzB;AACA,SAAK,gBAAgB;AACrB,YAAQ,OAAO,eAAe,UAAU,KAAK,QAAQ;AACrD,YAAQ,MAAM,eAAe,QAAQ,KAAK,MAAM;AAChD,QAAI,QAAQ,MAAM,MAAO,SAAQ,MAAM,WAAW,KAAK;AACvD,YAAQ,MAAM,MAAM;AACpB,YAAQ,eAAe,QAAQ,KAAK,eAAe;AAAA,EACtD;AAAA;AAAA,EAIA,YAAY,OAAyB;AAClC,SAAK,QAAQ,MAAM,OAAO,CAAC,SAAU,WAAW,IAAI,IAAI,OAAO,KAAK,SAAS,KAAK,CAAE;AACpF,SAAK,MAAM;AAAA,EACd;AAAA,EAEA,cAAoB;AACjB,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,eAAe;AACpB,SAAK,MAAM;AAAA,EACd;AAAA,EAEA,YAAY,OAAqB;AAC9B,SAAK,iBAAiB;AACtB,SAAK,MAAM;AAAA,EACd;AAAA,EAEA,YAAkB;AACf,QAAI,KAAK,cAAc,KAAK,GAAG;AAC5B,WAAK,MAAM,KAAK,EAAE,MAAM,aAAa,SAAS,KAAK,cAAc,CAAC;AAAA,IACrE;AACA,SAAK,cAAc;AACnB,SAAK,gBAAgB;AACrB,SAAK,MAAM;AAAA,EACd;AAAA,EAEA,cAAc,IAAY,MAAoB;AAC3C,SAAK,MAAM,KAAK,EAAE,MAAM,aAAa,IAAI,MAAM,MAAM,IAAI,MAAM,MAAM,CAAC;AACtE,SAAK,MAAM;AAAA,EACd;AAAA,EAEA,aAAa,IAAY,OAAqB;AAC3C,UAAM,KAAK,KAAK,aAAa,EAAE;AAC/B,QAAI,IAAI;AACL,SAAG,QAAQ;AACX,WAAK,MAAM;AAAA,IACd;AAAA,EACH;AAAA,EAEA,YAAY,IAAkB;AAC3B,UAAM,KAAK,KAAK,aAAa,EAAE;AAC/B,QAAI,IAAI;AACL,SAAG,OAAO;AACV,WAAK,MAAM;AAAA,IACd;AAAA,EACH;AAAA;AAAA,EAGA,iBAAiB,MAAoB;AAClC,SAAK,MAAM,KAAK,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAC/C,SAAK,eAAe;AACpB,SAAK,MAAM;AAAA,EACd;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,kBACG,SACA,iBACA,QACA,eACK;AAEL,QAAI,KAAK,aAAa;AACnB,WAAK,cAAc;AACnB,WAAK,gBAAgB;AAAA,IACxB;AAGA,aAAS,IAAI,KAAK,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC9C,YAAM,OAAO,KAAK,MAAM,CAAC;AACzB,UAAI,UAAU,QAAQ,KAAK,SAAS,aAAa;AAC9C,aAAK,UAAU;AACf,aAAK,mBAAmB;AACxB,aAAK,gBAAgB;AACrB,aAAK,kBAAkB;AACvB,aAAK,MAAM;AACX;AAAA,MACH;AAAA,IACH;AAGA,SAAK,MAAM,KAAK;AAAA,MACb,MAAM;AAAA,MACN;AAAA,MACA,kBAAkB;AAAA,MAClB;AAAA,MACA;AAAA,IACH,CAAC;AACD,SAAK,MAAM;AAAA,EACd;AAAA,EAEA,eAAe,YAAoB,UAAkB,SAAuB;AACzE,SAAK,MAAM,KAAK,EAAE,MAAM,eAAe,YAAY,UAAU,QAAQ,CAAC;AACtE,SAAK,MAAM;AAAA,EACd;AAAA;AAAA,EAGA,iBAAiB,YAA4B;AAC1C,aAAS,IAAI,KAAK,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC9C,YAAM,OAAO,KAAK,MAAM,CAAC;AACzB,UAAI,WAAW,IAAI,KAAK,KAAK,OAAO,WAAY,QAAO,KAAK;AAAA,IAC/D;AACA,WAAO;AAAA,EACV;AAAA,EAEA,UAAU,KAAmB;AAC1B,SAAK,MAAM,KAAK,EAAE,MAAM,UAAU,SAAS,UAAU,GAAG,GAAG,CAAC;AAC5D,SAAK,MAAM;AAAA,EACd;AAAA;AAAA;AAAA,EAKA,SAAS,WAAyB,KAAgB;AAC/C,UAAM,WAAW,YAAY,GAAG;AAChC,UAAM,MAAM,oBAAI,KAAK;AACrB,UAAM,KAAK,GAAG,KAAK,IAAI,SAAS,CAAC,CAAC,IAAI,KAAK,IAAI,WAAW,CAAC,CAAC,IAAI,KAAK,IAAI,WAAW,CAAC,CAAC;AAGtF,QAAI,KAAK,gBAAgB;AACtB,YAAM,UAAU,KAAK,UAAU,EAAE,IAAI,IAAI,YAAY,GAAG,KAAK,WAAW,GAAG,SAAS,CAAC;AACrF,WAAK,eAAe,MAAM,UAAU,IAAI;AAAA,IAC3C;AAGA,UAAM,UAAU,kBAAkB,WAAW,QAAQ;AACrD,QAAI;AACJ,QAAI;AACD,eAAS,KAAK,UAAU,UAAU,MAAM,CAAC;AAAA,IAC5C,QAAQ;AACL,eAAS,OAAO,QAAQ;AAAA,IAC3B;AACA,SAAK,aAAa,KAAK,EAAE,WAAW,SAAS,QAAQ,GAAG,CAAC;AAEzD,QAAI,KAAK,aAAa,SAAS,KAAK;AACjC,WAAK,eAAe,KAAK,aAAa,MAAM,IAAI;AAAA,IACnD;AACA,SAAK,kBAAkB;AACvB,SAAK,MAAM;AAAA,EACd;AAAA;AAAA,EAIQ,aAAa,IAAsC;AACxD,aAAS,IAAI,KAAK,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC9C,YAAM,OAAO,KAAK,MAAM,CAAC;AACzB,UAAI,WAAW,IAAI,KAAK,KAAK,OAAO,GAAI,QAAO;AAAA,IAClD;AACA,WAAO;AAAA,EACV;AAAA,EAEQ,QAAc;AACnB,SAAK,oBAAoB;AACzB,SAAK,kBAAkB;AACvB,SAAK,eAAe;AAAA,EACvB;AAAA,EAEQ,kBAAkB,MAAY;AACnC,YAAQ,OAAO,MAAM,GAAG,SAAS,GAAG,GAAG,IAAI,cAAc,GAAG,WAAW,EAAE;AAAA,EAC5E;AAAA,EAEQ,mBAAyB;AAC9B,SAAK,OAAO,QAAQ,OAAO,QAAQ;AACnC,SAAK,OAAO,QAAQ,OAAO,WAAW;AAAA,EACzC;AAAA;AAAA,EAGQ,YAAoB;AACzB,QAAI,CAAC,KAAK,aAAc,QAAO,KAAK;AAEpC,WAAO,KAAK,IAAI,IAAI,KAAK,MAAM,KAAK,OAAO,GAAG,IAAI,CAAC;AAAA,EACtD;AAAA;AAAA,EAGQ,aAAqB;AAC1B,QAAI,CAAC,KAAK,aAAc,QAAO;AAC/B,WAAO,KAAK,OAAO,KAAK,UAAU,IAAI;AAAA,EACzC;AAAA,EAEQ,eAAuB;AAC5B,WAAO,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC;AAAA,EACnC;AAAA,EAEQ,WAAmB;AACxB,WAAO,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC;AAAA,EACnC;AAAA;AAAA,EAIQ,SAAS,OAAqB;AACnC,UAAM,QAAQ,KAAK,gBAAgB,EAAE;AACrC,UAAM,MAAM,KAAK,IAAI,GAAG,QAAQ,KAAK,aAAa,CAAC;AACnD,SAAK,eAAe,KAAK,IAAI,KAAK,KAAK,eAAe,KAAK;AAC3D,SAAK,OAAO;AAAA,EACf;AAAA,EAEQ,WAAW,OAAqB;AACrC,SAAK,eAAe,KAAK,IAAI,GAAG,KAAK,eAAe,KAAK;AACzD,SAAK,OAAO;AAAA,EACf;AAAA,EAEQ,cAAoB;AACzB,UAAM,QAAQ,KAAK,gBAAgB,EAAE;AACrC,SAAK,eAAe,KAAK,IAAI,GAAG,QAAQ,KAAK,aAAa,CAAC;AAC3D,SAAK,OAAO;AAAA,EACf;AAAA,EAEQ,iBAAuB;AAC5B,SAAK,eAAe;AACpB,SAAK,OAAO;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,SAAS,CAAC,SAAuB;AACtC,aAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACnC,YAAM,KAAK,KAAK,CAAC;AAGjB,UAAI,KAAK,QAAQ;AACd,aAAK,UAAU;AAEf,YAAI,KAAK,OAAO,WAAW,GAAG;AAC3B,cAAI,OAAO,KAAK;AAEb,iBAAK,SAAS;AAAA,UACjB;AACA;AAAA,QACH;AAGA,YAAI,YAAY,KAAK,EAAE,GAAG;AACvB,eAAK,UAAU,KAAK,OAAO,MAAM,GAAG,EAAE,GAAG,EAAE;AAC3C,eAAK,SAAS;AAAA,QACjB,WAAW,KAAK,OAAO,SAAS,IAAI;AACjC,eAAK,SAAS;AAAA,QACjB;AACA;AAAA,MACH;AAGA,UAAI,OAAO,QAAQ;AAChB,aAAK,SAAS;AACd,aAAK,WAAW,WAAW,MAAM;AAE9B,eAAK,SAAS;AACd,eAAK,WAAW;AAAA,QACnB,GAAG,GAAG;AACN;AAAA,MACH;AAGA,WAAK,WAAW,EAAE;AAAA,IACrB;AAAA,EACH;AAAA,EAEQ,WAAiB;AACtB,SAAK,SAAS;AACd,QAAI,KAAK,UAAU;AAChB,mBAAa,KAAK,QAAQ;AAC1B,WAAK,WAAW;AAAA,IACnB;AAAA,EACH;AAAA;AAAA,EAGQ,UAAU,QAAgB,MAAoB;AAEnD,QAAI,OAAO,WAAW,GAAG,MAAM,SAAS,OAAO,SAAS,MAAM;AAC3D,UAAI,SAAS,IAAK;AAClB,YAAM,QAAQ,OAAO,MAAM,CAAC,EAAE,MAAM,GAAG;AACvC,UAAI,MAAM,UAAU,GAAG;AACpB,cAAM,SAAS,SAAS,MAAM,CAAC,GAAI,EAAE;AACrC,YAAI,WAAW,GAAI,MAAK,SAAS,CAAC;AAAA,iBACzB,WAAW,GAAI,MAAK,WAAW,CAAC;AAAA,MAC5C;AACA;AAAA,IACH;AAGA,QAAI,CAAC,QAAQ;AACV,UAAI,SAAS,KAAK;AACf,aAAK,SAAS,CAAC;AACf;AAAA,MACH;AACA,UAAI,SAAS,KAAK;AACf,aAAK,WAAW,CAAC;AACjB;AAAA,MACH;AAEA,UAAI,SAAS,KAAK;AACf,aAAK,YAAY;AACjB;AAAA,MACH;AACA,UAAI,SAAS,KAAK;AACf,aAAK,eAAe;AACpB;AAAA,MACH;AAAA,IACH;AAGA,QAAI,SAAS,KAAK;AACf,UAAI,WAAW,KAAK;AACjB,aAAK,SAAS,KAAK,SAAS,CAAC;AAC7B;AAAA,MACH;AACA,UAAI,WAAW,KAAK;AACjB,aAAK,WAAW,KAAK,SAAS,CAAC;AAC/B;AAAA,MACH;AACA,UAAI,WAAW,KAAK;AACjB,aAAK,YAAY;AACjB;AAAA,MACH;AACA,UAAI,WAAW,KAAK;AACjB,aAAK,eAAe;AACpB;AAAA,MACH;AAAA,IACH;AAAA,EACH;AAAA;AAAA,EAGQ,WAAW,IAAkB;AAClC,UAAM,OAAO,GAAG,WAAW,CAAC;AAG5B,QAAI,SAAS,GAAM;AAChB,WAAK,KAAK;AACV,WAAK,QAAQ,OAAO;AACpB;AAAA,IACH;AAGA,QAAI,SAAS,GAAM;AAChB,WAAK,SAAS,KAAK,SAAS,CAAC;AAC7B;AAAA,IACH;AAGA,QAAI,SAAS,GAAM;AAChB,WAAK,WAAW,KAAK,SAAS,CAAC;AAC/B;AAAA,IACH;AAGA,QAAI,SAAS,GAAM;AAChB,WAAK,oBAAoB,CAAC,KAAK;AAC/B,WAAK,oBAAoB;AACzB,WAAK,kBAAkB;AACvB,WAAK,OAAO;AACZ;AAAA,IACH;AAGA,QAAI,SAAS,IAAM;AAChB,WAAK,gBAAgB,CAAC,KAAK;AAC3B,WAAK,oBAAoB;AACzB,WAAK,kBAAkB;AACvB,WAAK,OAAO;AACZ;AAAA,IACH;AAGA,QAAI,SAAS,IAAM;AAChB,WAAK,YAAY;AACjB;AAAA,IACH;AAGA,QAAI,SAAS,OAAQ,SAAS,GAAM;AACjC,UAAI,KAAK,YAAY,SAAS,GAAG;AAC9B,aAAK,cAAc,KAAK,YAAY,MAAM,GAAG,EAAE;AAC/C,aAAK,gBAAgB;AAAA,MACxB;AACA;AAAA,IACH;AAGA,QAAI,OAAO,GAAM;AAGjB,SAAK,eAAe;AACpB,SAAK,gBAAgB;AAAA,EACxB;AAAA,EAEQ,cAAoB;AACzB,UAAM,OAAO,KAAK,YAAY,KAAK;AACnC,SAAK,cAAc;AACnB,QAAI,CAAC,MAAM;AACR,WAAK,gBAAgB;AACrB;AAAA,IACH;AACA,QAAI,KAAK,YAAY,MAAM,UAAU,KAAK,YAAY,MAAM,QAAQ;AACjE,WAAK,KAAK;AACV,WAAK,QAAQ,OAAO;AACpB;AAAA,IACH;AACA,SAAK,MAAM,KAAK,EAAE,MAAM,QAAQ,SAAS,KAAK,CAAC;AAC/C,SAAK,eAAe;AACpB,SAAK,oBAAoB;AACzB,SAAK,OAAO;AACZ,SAAK,QAAQ,OAAO,IAAI;AAAA,EAC3B;AAAA;AAAA,EAIQ,WAAW,MAAY;AAC5B,SAAK,iBAAiB;AACtB,YAAQ,OAAO,MAAM,GAAG,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,OAAO,CAAC,CAAC,GAAG;AAC7D,SAAK,oBAAoB;AACzB,SAAK,kBAAkB;AACvB,SAAK,OAAO;AAAA,EACf;AAAA;AAAA,EAIQ,iBAAuB;AAC5B,QAAI,CAAC,KAAK,WAAW,KAAK,YAAa;AACvC,SAAK,cAAc,WAAW,MAAM;AACjC,WAAK,cAAc;AACnB,WAAK,OAAO;AAAA,IACf,GAAG,EAAE;AAAA,EACR;AAAA,EAEQ,kBAA4B;AACjC,QAAI,CAAC,KAAK,mBAAmB;AAC1B,WAAK,oBAAoB,KAAK,kBAAkB;AAAA,IACnD;AACA,WAAO,KAAK;AAAA,EACf;AAAA,EAEQ,gBAA0B;AAC/B,QAAI,CAAC,KAAK,iBAAiB;AACxB,WAAK,kBAAkB,KAAK,gBAAgB;AAAA,IAC/C;AACA,WAAO,KAAK;AAAA,EACf;AAAA,EAEQ,SAAe;AACpB,QAAI,CAAC,KAAK,QAAS;AACnB,SAAK,iBAAiB;AAEtB,UAAM,KAAK,KAAK,aAAa;AAC7B,UAAM,eAAe,KAAK,gBAAgB;AAC1C,UAAM,QAAQ,aAAa;AAG3B,UAAM,SAAS,KAAK,IAAI,GAAG,QAAQ,EAAE;AACrC,QAAI,KAAK,eAAe,OAAQ,MAAK,eAAe;AAGpD,QAAI;AACJ,QAAI,SAAS,IAAI;AACd,gBAAU,CAAC,GAAG,IAAI,MAAc,KAAK,KAAK,EAAE,KAAK,EAAE,GAAG,GAAG,YAAY;AAAA,IACxE,OAAO;AACJ,YAAM,MAAM,QAAQ,KAAK;AACzB,YAAM,QAAQ,MAAM;AACpB,gBAAU,aAAa,MAAM,OAAO,GAAG;AAAA,IAC1C;AAEA,UAAM,MAAgB,CAAC,WAAW;AAElC,QAAI,KAAK,cAAc;AACpB,WAAK,kBAAkB,KAAK,SAAS,EAAE;AAAA,IAC1C,OAAO;AACJ,eAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC1B,YAAI,KAAK,OAAO,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,IAAI,SAAS;AAAA,MACzD;AAAA,IACH;AAGA,QAAI,KAAK,OAAO,KAAK,OAAO,GAAG,CAAC,GAAG,KAAK,eAAe,GAAG,SAAS;AAGnE,QAAI,KAAK,OAAO,KAAK,MAAM,CAAC,GAAG,GAAG,IAAI,OAAO,KAAK,IAAI,KAAK,WAAW,GAAG,SAAS,EAAE;AAEpF,QAAI,KAAK,WAAW;AACpB,YAAQ,OAAO,MAAM,IAAI,KAAK,EAAE,CAAC;AAAA,EACpC;AAAA,EAEQ,kBAAkB,KAAe,aAAuB,IAAkB;AAC/E,UAAM,KAAK,KAAK,UAAU;AAC1B,UAAM,KAAK,KAAK,WAAW;AAC3B,UAAM,SAAS,KAAK;AAGpB,UAAM,aAAa,KAAK,cAAc;AACtC,UAAM,aAAa,WAAW;AAC9B,QAAI;AACJ,QAAI,cAAc,IAAI;AACnB,qBAAe,CAAC,GAAG,IAAI,MAAc,KAAK,UAAU,EAAE,KAAK,EAAE,GAAG,GAAG,UAAU;AAAA,IAChF,OAAO;AACJ,qBAAe,WAAW,MAAM,aAAa,EAAE;AAAA,IAClD;AAEA,aAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC1B,YAAM,WAAW,aAAa,YAAY,CAAC,KAAK,IAAI,EAAE;AACtD,YAAM,YAAY,aAAa,aAAa,CAAC,KAAK,IAAI,EAAE;AACxD,UAAI;AAAA,QACD,OAAO,IAAI,GAAG,CAAC;AAAA,QACf;AAAA,QACA;AAAA;AAAA,QACA,OAAO,IAAI,GAAG,MAAM;AAAA,QACpB,GAAG,GAAG,SAAS,KAAK;AAAA,QACpB;AAAA,MACH;AAEA,UAAI,KAAK,SAAS;AAAA,IACrB;AAAA,EACH;AAAA,EAEQ,kBAAwB;AAC7B,YAAQ,OAAO;AAAA,MACZ,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,GAAG,IAAI,OAAO,KAAK,IAAI,KAAK,WAAW,GAAG,SAAS;AAAA,IAC7E;AAAA,EACH;AAAA;AAAA,EAIQ,iBAAyB;AAC9B,UAAM,QAAkB,CAAC;AAEzB,QAAI,KAAK,eAAe,GAAG;AACxB,YAAM,KAAK,SAAS,KAAK,YAAY,EAAE;AAAA,IAC1C;AAEA,UAAM,aACH,KAAK,MAAM,KAAK,CAAC,MAAM,WAAW,CAAC,KAAK,aAAa,CAAC,CAAC,KAAK,KAAK,QAAQ;AAC5E,QAAI,YAAY;AACb,YAAM,KAAK,MAAM,KAAK,gBAAgB,aAAa,SAAS,EAAE;AAAA,IACjE;AAEA,QAAI,KAAK,QAAQ,OAAO;AACrB,YAAM,KAAK,MAAM,KAAK,oBAAoB,SAAS,MAAM,QAAQ;AAAA,IACpE;AAEA,UAAM,YAAY,KAAK,IAAI,KAAK,MAAM,EAAE;AAExC,QAAI,CAAC,MAAM,QAAQ;AAChB,aAAO,GAAG,IAAI,GAAG,SAAS,OAAO,SAAS,CAAC,GAAG,KAAK;AAAA,IACtD;AAEA,UAAM,UAAU,IAAI,MAAM,KAAK,IAAI,CAAC;AACpC,UAAM,SAAS,KAAK,IAAI,GAAG,YAAY,QAAQ,MAAM;AACrD,UAAM,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,SAAS,CAAC,CAAC;AAC/C,UAAM,QAAQ,KAAK,IAAI,GAAG,SAAS,IAAI;AACvC,WAAO,GAAG,IAAI,GAAG,SAAS,OAAO,IAAI,CAAC,GAAG,OAAO,GAAG,SAAS,OAAO,KAAK,CAAC,GAAG,KAAK;AAAA,EACpF;AAAA;AAAA,EAIQ,oBAA8B;AACnC,UAAM,QAAkB,CAAC;AACzB,UAAM,IAAI,KAAK,UAAU;AAEzB,eAAW,QAAQ,KAAK,OAAO;AAC5B,UAAI,WAAW,IAAI,GAAG;AACnB,aAAK,oBAAoB,OAAO,MAAM,CAAC;AAAA,MAC1C,WAAW,aAAa,IAAI,GAAG;AAC5B,aAAK,sBAAsB,OAAO,MAAM,CAAC;AAAA,MAC5C,OAAO;AACJ,aAAK,mBAAmB,OAAO,MAAM,CAAC;AAAA,MACzC;AACA,YAAM,KAAK,EAAE;AAAA,IAChB;AAEA,QAAI,KAAK,aAAa;AACnB,WAAK,kBAAkB,OAAO,CAAC;AAAA,IAClC;AAEA,WAAO;AAAA,EACV;AAAA,EAEQ,oBAAoB,OAAiB,IAAkB,OAAqB;AACjF,UAAM,SAAS,GAAG,OAAO,WAAW;AACpC,UAAM,UAAU,KAAK,IAAI,GAAG,MAAM,IAAI,GAAG,IAAI,GAAG,GAAG,OAAO,KAAK,KAAK,GAAG,KAAK;AAE5E,QAAI,CAAC,KAAK,eAAe;AACtB,YAAM,KAAK,OAAO;AAClB;AAAA,IACH;AAEA,UAAM,KAAK,OAAO;AAClB,QAAI,GAAG,MAAM;AACV,UAAI,YAAY,GAAG;AACnB,UAAI;AACD,oBAAY,KAAK,UAAU,KAAK,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC;AAAA,MAC1D,QAAQ;AAAA,MAER;AACA,YAAM,SAAS;AACf,iBAAW,WAAW,UAAU,MAAM,IAAI,GAAG;AAC1C,mBAAW,MAAM,KAAK,SAAS,SAAS,QAAQ,OAAO,MAAM,GAAG;AAC7D,gBAAM,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE;AAAA,QAC7C;AAAA,MACH;AAAA,IACH;AAAA,EACH;AAAA,EAEQ,sBAAsB,OAAiB,IAAoB,OAAqB;AACrF,QAAI,CAAC,KAAK,eAAe;AAEtB,YAAM,SAAS,QAAQ;AACvB,YAAM,UAAU,GAAG,QAAQ,QAAQ,OAAO,GAAG,EAAE,MAAM,GAAG,MAAM;AAC9D,YAAM,YAAY,QAAQ,SAAS,GAAG,QAAQ,SAAS,QAAQ;AAC/D,YAAM,KAAK,OAAO,IAAI,UAAU,GAAG,QAAQ,KAAK,OAAO,GAAG,SAAS,GAAG,KAAK,EAAE;AAC7E;AAAA,IACH;AAEA,UAAM,KAAK,OAAO,IAAI,UAAU,GAAG,QAAQ,WAAW,KAAK,EAAE;AAC7D,QAAI,YAAY,GAAG;AACnB,QAAI;AACD,kBAAY,KAAK,UAAU,KAAK,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAAA,IAC7D,QAAQ;AAAA,IAER;AACA,UAAM,SAAS;AACf,eAAW,cAAc,UAAU,MAAM,IAAI,GAAG;AAC7C,iBAAW,MAAM,KAAK,SAAS,YAAY,QAAQ,OAAO,MAAM,GAAG;AAChE,cAAM,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE;AAAA,MAC7C;AAAA,IACH;AAAA,EACH;AAAA,EAEQ,mBAAmB,OAAiB,KAAkB,OAAqB;AAChF,QAAI,IAAI,SAAS,UAAU;AACxB,iBAAW,QAAQ,IAAI,QAAQ,MAAM,IAAI,GAAG;AACzC,mBAAW,MAAM,KAAK,SAAS,MAAM,QAAQ,CAAC,GAAG;AAC9C,gBAAM,KAAK,KAAK,IAAI,GAAG,EAAE,GAAG,KAAK,EAAE;AAAA,QACtC;AAAA,MACH;AACA;AAAA,IACH;AAEA,UAAM,SAAS,IAAI,SAAS;AAC5B,UAAM,QAAQ,SAAS,GAAG,IAAI,OAAO,KAAK,MAAM,GAAG,KAAK,aAAa,KAAK;AAC1E,UAAM,aAAa,SAAS,IAAI;AAChC,UAAM,SAAS,IAAI,OAAO,UAAU;AACpC,QAAI,QAAQ;AAGZ,UAAM,iBAAiB,IAAI,mBACtB,IAAI,QAAQ,QAAQ,iBAAiB,EAAE,IACvC,IAAI;AAET,eAAW,QAAQ,eAAe,MAAM,IAAI,GAAG;AAC5C,iBAAW,MAAM,KAAK,SAAS,MAAM,QAAQ,UAAU,GAAG;AACvD,cAAM,KAAK,QAAQ,QAAQ,KAAK,SAAS,EAAE;AAC3C,gBAAQ;AAAA,MACX;AAAA,IACH;AAGA,QAAI,IAAI,kBAAkB;AACvB,YAAM,cAAc,mBAAmB,IAAI,kBAAkB,IAAI,aAAa;AAC9E,YAAM,KAAK,GAAG,MAAM,GAAG,MAAM,IAAI,WAAW,IAAI,KAAK,EAAE;AAGvD,YAAM,QAAQ,gBAAgB,IAAI,SAAS,IAAI,eAAe;AAC9D,UAAI,OAAO;AACR,mBAAW,QAAQ,MAAM,MAAM,IAAI,GAAG;AACnC,qBAAW,MAAM,KAAK,SAAS,MAAM,QAAQ,UAAU,GAAG;AACvD,kBAAM,KAAK,GAAG,MAAM,GAAG,eAAe,GAAG,EAAE,GAAG,KAAK,EAAE;AAAA,UACxD;AAAA,QACH;AAAA,MACH;AAAA,IACH;AAAA,EACH;AAAA,EAEQ,kBAAkB,OAAiB,OAAqB;AAC7D,UAAM,QAAQ,GAAG,KAAK,aAAa,KAAK;AACxC,UAAM,aAAa;AACnB,UAAM,SAAS,IAAI,OAAO,UAAU;AAEpC,QAAI,CAAC,KAAK,eAAe;AACtB,YAAM,KAAK,KAAK;AAChB;AAAA,IACH;AAEA,QAAI,QAAQ;AACZ,eAAW,QAAQ,KAAK,cAAc,MAAM,IAAI,GAAG;AAChD,iBAAW,MAAM,KAAK,SAAS,MAAM,QAAQ,UAAU,GAAG;AACvD,cAAM,KAAK,QAAQ,QAAQ,KAAK,SAAS,EAAE;AAC3C,gBAAQ;AAAA,MACX;AAAA,IACH;AAAA,EACH;AAAA;AAAA,EAIQ,kBAA4B;AACjC,UAAM,QAAkB,CAAC;AACzB,UAAM,KAAK,KAAK,WAAW;AAC3B,QAAI,MAAM,EAAG,QAAO;AAEpB,eAAW,SAAS,KAAK,cAAc;AACpC,YAAM,QAAQ,MAAM,cAAc,OAAO,SAAS;AAClD,YAAM,QAAQ,MAAM,cAAc,OAAO,WAAW;AACpD,YAAM,SAAS,GAAG,GAAG,GAAG,MAAM,EAAE,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,GAAG,KAAK;AACjE,YAAM,cAAc,MAAM,GAAG,SAAS;AAEtC,UAAI,CAAC,KAAK,eAAe;AAEtB,cAAM,aAAa,KAAK;AACxB,cAAM,cAAc,MAAM,QAAQ,MAAM,GAAG,UAAU;AACrD,cAAM,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,KAAK,EAAE;AAAA,MACvD,OAAO;AAEJ,cAAM,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,OAAO,GAAG,KAAK,EAAE;AACtD,cAAM,SAAS,IAAI,OAAO,WAAW;AACrC,mBAAW,cAAc,MAAM,OAAO,MAAM,IAAI,GAAG;AAChD,qBAAW,MAAM,KAAK,SAAS,YAAY,KAAK,WAAW,GAAG;AAC3D,kBAAM,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,GAAG,GAAG,EAAE,GAAG,KAAK,EAAE;AAAA,UACpD;AAAA,QACH;AACA,cAAM,KAAK,EAAE;AAAA,MAChB;AAAA,IACH;AAEA,WAAO;AAAA,EACV;AAAA;AAAA,EAIQ,SAAS,MAAc,UAA4B;AACxD,QAAI,YAAY,EAAG,YAAW;AAC9B,QAAI,CAAC,KAAM,QAAO,CAAC,EAAE;AACrB,QAAI,KAAK,UAAU,SAAU,QAAO,CAAC,IAAI;AAEzC,UAAM,QAAQ,KAAK,MAAM,GAAG;AAC5B,UAAM,SAAmB,CAAC;AAC1B,QAAI,UAAU;AAEd,eAAW,QAAQ,OAAO;AACvB,UAAI,CAAC,SAAS;AACX,kBAAU;AAAA,MACb,WAAW,QAAQ,SAAS,IAAI,KAAK,UAAU,UAAU;AACtD,mBAAW,MAAM;AAAA,MACpB,OAAO;AACJ,eAAO,KAAK,OAAO;AACnB,kBAAU;AAAA,MACb;AAAA,IACH;AACA,QAAI,QAAS,QAAO,KAAK,OAAO;AAEhC,WAAO,OAAO,SAAS,SAAS,CAAC,EAAE;AAAA,EACtC;AACH;AAIA,SAAS,KAAK,GAAmB;AAC9B,SAAO,IAAI,KAAK,IAAI,CAAC,KAAK,OAAO,CAAC;AACrC;AAGA,SAAS,aAAa,GAAW,SAAyB;AACvD,MAAI,WAAW,EAAG,QAAO;AACzB,MAAI,UAAU;AACd,MAAI,IAAI;AACR,SAAO,IAAI,EAAE,UAAU,UAAU,SAAS;AACvC,QAAI,EAAE,CAAC,MAAM,QAAQ;AAElB,YAAM,MAAM,EAAE,QAAQ,KAAK,CAAC;AAC5B,UAAI,QAAQ,IAAI;AACb,YAAI,MAAM;AAAA,MACb,OAAO;AACJ;AAAA,MACH;AAAA,IACH,OAAO;AACJ;AACA;AAAA,IACH;AAAA,EACH;AAEA,SAAO,EAAE,MAAM,GAAG,CAAC,IAAI;AAC1B;AAGA,SAAS,YAAY,KAAe;AACjC,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO;AAC5C,QAAM,QAAQ,EAAE,GAAG,IAAI;AAEvB,MAAI,MAAM,SAAS,YAAY,MAAM,SAAS,OAAO,MAAM,UAAU,UAAU;AAC5E,UAAM,OAAO,MAAM,QAAQ;AAC3B,QAAI,SAAS,iBAAiB,MAAM,MAAM,MAAM;AAC7C,YAAM,QAAQ,EAAE,GAAG,MAAM,OAAO,MAAM,UAAU;AAAA,IACnD;AAAA,EACH;AACA,SAAO;AACV;AAGA,SAAS,kBAAkB,YAA0B,KAAkB;AACpE,MAAI,CAAC,OAAO,OAAO,QAAQ,SAAU,QAAO,OAAO,GAAG;AAEtD,MAAI,IAAI,SAAS,UAAU;AACxB,UAAM,OAAO,IAAI,QAAQ;AAEzB,QAAI,SAAS,cAAe,QAAO;AAEnC,QAAI,IAAI,SAAS,OAAO,IAAI,UAAU,UAAU;AAC7C,YAAM,OAAO,OAAO,KAAK,IAAI,KAAK;AAClC,UAAI,KAAK,UAAU,GAAG;AACnB,eAAO,GAAG,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC;AAAA,MACrC;AACA,aAAO,GAAG,IAAI,KAAK,KAAK,MAAM;AAAA,IACjC;AACA,WAAO;AAAA,EACV;AAGA,QAAM,OAAO,IAAI,QAAQ;AACzB,MAAI,IAAI,OAAO;AACZ,UAAM,UAAU,IAAI,MAAM,SAAS,KAAK,IAAI,MAAM,MAAM,GAAG,EAAE,IAAI,QAAQ,IAAI;AAC7E,WAAO,GAAG,IAAI,KAAK,OAAO;AAAA,EAC7B;AACA,MAAI,IAAI,cAAc;AACnB,WAAO,GAAG,IAAI,IAAI,IAAI,YAAY;AAAA,EACrC;AACA,SAAO;AACV;;;ACxhCA,SAAS,OAAO,YAAAC,WAAU,iBAAoC;AAC9D,SAAS,gBAAAC,qBAAoB;AAC7B,YAAY,cAAc;AAE1B,IAAM,cAAc;AAEpB,IAAM,kBAAkB;AASjB,SAAS,oBAA6B;AAC1C,MAAI;AACD,IAAAD,UAAS,aAAa,EAAE,OAAO,OAAO,CAAC;AACvC,WAAO;AAAA,EACV,QAAQ;AACL,WAAO;AAAA,EACV;AACH;AAGA,eAAsB,mBAA2C;AAC9D,SAAO,YAAY,KAAK;AAC3B;AAGA,eAAsB,oBAA4C;AAC/D,SAAO,YAAY,MAAM;AAC5B;AAEA,SAAS,YAAY,SAAyC;AAC3D,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC7B,QAAI;AAED,YAAM,OAAO,UAAU,SAAS,CAAC,gBAAgB,GAAG;AAAA,QACjD,UAAU;AAAA,QACV,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,QAChC,SAAS;AAAA,MACZ,CAAC;AAED,YAAM,UAAU,KAAK,UAAU,OAAO,KAAK,UAAU;AAErD,YAAM,UAAyB,CAAC;AAChC,YAAM,QAAQ,OAAO,MAAM,IAAI;AAC/B,iBAAW,QAAQ,OAAO;AAGvB,cAAM,QAAQ,KAAK,MAAM,+CAA+C;AACxE,YAAI,SAAS,MAAM,CAAC,KAAK,MAAM,CAAC,GAAG;AAChC,kBAAQ,KAAK;AAAA,YACV,IAAI,MAAM,CAAC;AAAA,YACX,MAAM,MAAM,CAAC,EAAE,KAAK;AAAA,YACpB,WAAW,QAAQ,WAAW;AAAA;AAAA,UACjC,CAAC;AAAA,QACJ;AAAA,MACH;AAGA,UAAI,QAAQ,WAAW,GAAG;AACvB,gBAAQ,KAAK,EAAE,IAAI,WAAW,MAAM,kBAAkB,WAAW,KAAK,CAAC;AAAA,MAC1E;AAEA,cAAQ,OAAO;AAAA,IAClB,QAAQ;AAEL,cAAQ,CAAC,EAAE,IAAI,WAAW,MAAM,kBAAkB,WAAW,KAAK,CAAC,CAAC;AAAA,IACvE;AAAA,EACH,CAAC;AACJ;AAGA,eAAsB,aAAa,SAAwB,OAAqC;AAC7F,MAAI,QAAQ,UAAU,GAAG;AACtB,WAAO,QAAQ,CAAC;AAAA,EACnB;AAEA,QAAM,KAAc,yBAAgB;AAAA,IACjC,OAAO,QAAQ;AAAA,IACf,QAAQ,QAAQ;AAAA,IAChB,UAAU;AAAA,EACb,CAAC;AAED,UAAQ,OAAO,MAAM;AAAA,IAAO,KAAK;AAAA,CAAK;AACtC,WAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACtC,UAAM,MAAM,QAAQ,CAAC;AACrB,UAAM,SAAS,IAAI,YAAY,eAAe;AAC9C,YAAQ,OAAO,MAAM,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,GAAG,MAAM;AAAA,CAAI;AAAA,EAC9D;AAEA,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC7B,UAAM,aAAa,QAAQ,UAAU,CAAC,MAAM,EAAE,SAAS;AACvD,UAAM,aAAa,cAAc,IAAI,aAAa,IAAI;AAEtD,OAAG,SAAS,aAAa,UAAU,OAAO,CAAC,WAAW;AACnD,SAAG,MAAM;AACT,YAAM,MAAM,OAAO,KAAK,IAAI,SAAS,OAAO,KAAK,GAAG,EAAE,IAAI;AAC1D,YAAM,MAAM,KAAK,IAAI,GAAG,KAAK,IAAI,QAAQ,SAAS,GAAG,MAAM,CAAC,CAAC;AAC7D,cAAQ,QAAQ,GAAG,CAAE;AAAA,IACxB,CAAC;AAAA,EACJ,CAAC;AACJ;AAMO,IAAM,aAAN,MAAiB;AAAA,EACb,UAA+B;AAAA,EAC/B;AAAA,EACA,SAAS,OAAO,MAAM,CAAC;AAAA,EAE/B,YAAY,QAAiC;AAC1C,SAAK,SAAS;AAAA,EACjB;AAAA;AAAA,EAGA,MAAM,UAAyB;AAC5B,UAAM,OAAO;AAAA,MACV;AAAA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA,OAAO,WAAW;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,IACH;AAEA,UAAM,MAAM,EAAE,GAAG,QAAQ,IAAI;AAC7B,QAAI,YAAY,aAAa,WAAW;AACrC,UAAI,WAAW;AAAA,IAClB;AAEA,SAAK,UAAU,MAAM,OAAO,MAAM;AAAA,MAC/B;AAAA,MACA,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,IACnC,CAAC;AAED,SAAK,QAAQ,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AAE/C,WAAK,SAAS,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC;AAC/C,aAAO,KAAK,OAAO,UAAU,iBAAiB;AAC3C,cAAM,QAAQ,KAAK,OAAO,SAAS,GAAG,eAAe;AACrD,aAAK,SAAS,KAAK,OAAO,SAAS,eAAe;AAClD,aAAK,OAAO,OAAO,KAAK,KAAK,CAAC;AAAA,MACjC;AAAA,IACH,CAAC;AAED,SAAK,QAAQ,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AAE/C,YAAM,MAAM,KAAK,SAAS,EAAE,KAAK;AACjC,UAAI,OAAO,CAAC,IAAI,SAAS,MAAM,GAAG;AAC/B,gBAAQ,OAAO,MAAM,SAAS,GAAG;AAAA,CAAI;AAAA,MACxC;AAAA,IACH,CAAC;AAED,SAAK,QAAQ,GAAG,SAAS,CAAC,QAAQ;AAC/B,cAAQ,OAAO,MAAM,wBAAwB,IAAI,OAAO;AAAA,CAAI;AAAA,IAC/D,CAAC;AAAA,EACJ;AAAA;AAAA,EAGA,OAAa;AACV,QAAI,KAAK,SAAS;AACf,WAAK,QAAQ,KAAK,SAAS;AAC3B,WAAK,UAAU;AAAA,IAClB;AACA,SAAK,SAAS,OAAO,MAAM,CAAC;AAAA,EAC/B;AACH;AAcO,IAAM,cAAN,cAA0BC,cAAa;AAAA,EACnC,UAA+B;AAAA,EAC/B;AAAA;AAAA;AAAA,EAIA,YAAY;AAAA;AAAA,EAGZ,gBAA0B,CAAC;AAAA,EAC3B,eAAe;AAAA;AAAA,EAGf,QAAiD,CAAC;AAAA;AAAA,EAGlD;AAAA,EACA,oBAAoB;AAAA;AAAA,EACpB,eAAe;AAAA;AAAA,EAEvB,YAAY,UAAmB;AAC5B,UAAM;AACN,SAAK,WAAW;AAAA,EACnB;AAAA;AAAA,EAGA,IAAI,YAAqB;AACtB,WAAO,KAAK,YAAY,QAAQ,KAAK,MAAM,SAAS;AAAA,EACvD;AAAA;AAAA,EAGA,IAAI,mBAAuC;AACxC,WAAO,KAAK;AAAA,EACf;AAAA;AAAA,EAGA,IAAY,oBAA4B;AAErC,WAAQ,KAAK,gBAAgB,cAAc,KAAM;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAAmC;AAChC,QAAI,CAAC,KAAK,WAAW,KAAK,sBAAsB,EAAG,QAAO;AAC1D,UAAM,UAAU,KAAK,IAAI,IAAI,KAAK;AAClC,WAAO,KAAK,IAAI,SAAS,KAAK,iBAAiB;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAAqB;AACxB,QAAI,KAAK,WAAW,CAAC,KAAK,WAAW;AAElC,WAAK,cAAc,KAAK,KAAK;AAC7B,WAAK,gBAAgB,MAAM;AAC3B;AAAA,IACH;AAEA,QAAI,CAAC,KAAK,SAAS;AAChB,WAAK,gBAAgB;AAAA,IACxB;AAEA,SAAK,QAAS,MAAO,MAAM,KAAK;AAChC,SAAK,gBAAgB,MAAM;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,YAAY,WAA0B;AACnC,QAAI,KAAK,aAAa,KAAK,SAAS;AACjC,WAAK,mBAAmB;AACxB,WAAK,YAAY;AACjB,WAAK,QAAQ,MAAO,IAAI;AAAA,IAC3B,WAAW,KAAK,cAAc,SAAS,GAAG;AACvC,YAAM,QAAQ,OAAO,OAAO,KAAK,aAAa;AAC9C,WAAK,gBAAgB,CAAC;AACtB,WAAK,eAAe;AACpB,WAAK,MAAM,KAAK,EAAE,OAAO,UAAU,CAAC;AAAA,IACvC;AAAA,EACH;AAAA;AAAA,EAGA,OAAa;AACV,SAAK,gBAAgB,CAAC;AACtB,SAAK,eAAe;AACpB,SAAK,QAAQ,CAAC;AACd,SAAK,YAAY;AAEjB,UAAM,aAAa,KAAK,YAAY;AACpC,QAAI,KAAK,SAAS;AACf,UAAI;AACD,aAAK,QAAQ,OAAO,QAAQ;AAC5B,aAAK,QAAQ,KAAK,SAAS;AAAA,MAC9B,QAAQ;AAAA,MAER;AACA,WAAK,UAAU;AAAA,IAClB;AACA,SAAK,mBAAmB;AACxB,SAAK,oBAAoB;AACzB,SAAK,eAAe;AACpB,QAAI,YAAY;AACb,WAAK,KAAK,MAAM;AAAA,IACnB;AAAA,EACH;AAAA;AAAA,EAGQ,kBAAwB;AAC7B,SAAK,eAAe;AACpB,SAAK,mBAAmB;AAExB,UAAM,OAAO;AAAA,MACV;AAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,WAAW;AAAA,MAClB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA;AAAA,MACA;AAAA;AAAA,IACH;AAEA,UAAM,MAAM,EAAE,GAAG,QAAQ,IAAI;AAC7B,QAAI,KAAK,YAAY,KAAK,aAAa,WAAW;AAC/C,UAAI,WAAW,KAAK;AAAA,IACvB;AAEA,UAAM,OAAO,MAAM,QAAQ,MAAM;AAAA,MAC9B;AAAA,MACA,OAAO,CAAC,QAAQ,QAAQ,MAAM;AAAA,IACjC,CAAC;AAED,SAAK,GAAG,SAAS,CAAC,QAAQ;AACvB,cAAQ,OAAO,MAAM,2BAA2B,IAAI,OAAO;AAAA,CAAI;AAAA,IAClE,CAAC;AAED,SAAK,GAAG,QAAQ,CAAC,MAAM,YAAY;AAEhC,UAAI,SAAS,QAAQ,SAAS,KAAK,SAAS,KAAK;AAC9C,gBAAQ,OAAO,MAAM,iCAAiC,IAAI;AAAA,CAAI;AAAA,MACjE;AACA,UAAI,KAAK,YAAY,MAAM;AACxB,aAAK,UAAU;AACf,aAAK,YAAY;AACjB,YAAI,KAAK,MAAM,SAAS,GAAG;AACxB,gBAAM,OAAO,KAAK,MAAM,MAAM;AAC9B,eAAK,WAAW,KAAK,OAAO,KAAK,SAAS;AAAA,QAC7C,OAAO;AACJ,eAAK,KAAK,MAAM;AAAA,QACnB;AAAA,MACH;AAAA,IACH,CAAC;AAED,SAAK,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AACvC,YAAM,MAAM,KAAK,SAAS,EAAE,KAAK;AACjC,UAAI,KAAK;AACN,gBAAQ,OAAO,MAAM,gBAAgB,GAAG;AAAA,CAAI;AAAA,MAC/C;AAAA,IACH,CAAC;AAED,SAAK,QAAQ,OAAO;AAEpB,SAAK,UAAU;AACf,SAAK,YAAY;AACjB,SAAK,oBAAoB,KAAK,IAAI;AAClC,SAAK,KAAK,SAAS;AAAA,EACtB;AAAA;AAAA,EAGQ,WAAW,OAAe,WAA0B;AACzD,SAAK,gBAAgB;AACrB,SAAK,mBAAmB;AACxB,SAAK,QAAS,MAAO,MAAM,KAAK;AAChC,SAAK,eAAe,MAAM;AAC1B,SAAK,QAAS,MAAO,IAAI;AACzB,SAAK,YAAY;AAAA,EACpB;AACH;;;AHxVA,eAAsB,eACnB,SACA,MACc;AACd,QAAM,QAAQ,CAAC,CAAC,KAAK;AACrB,QAAM,UAAU,CAAC,CAAC,KAAK;AACvB,QAAM,aAAa,CAAC,CAAC,KAAK,YAAY;AACtC,QAAM,UAAU,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAClE,QAAM,cAAc,CAAC,CAAC,KAAK,cAAc;AAEzC,MAAI,KAAK,cAAc,GAAG;AACvB,UAAM,iBAAiB;AACvB;AAAA,EACH;AAEA,MAAI,CAAC,WAAW,CAAC,QAAQ,MAAM,OAAO;AACnC,UAAM,IAAI;AAAA,MACP;AAAA,IACH;AAAA,EACH;AAEA,MAAI,SAAS;AACV,UAAM,sBAAsB,SAAS,SAAS,OAAO,WAAW;AAAA,EACnE,WAAW,SAAS;AACjB,UAAM,iBAAiB,SAAS,QAAQ,IAAI,GAAG,MAAM,KAAK;AAAA,EAC7D,WAAW,YAAY;AACpB,UAAM,oBAAoB,SAAS,QAAQ,IAAI,GAAG,KAAK;AAAA,EAC1D,OAAO;AACJ,UAAM,uBAAuB,SAAS,KAAK;AAAA,EAC9C;AACH;AAEO,SAAS,QAAQ,MAAgD;AACrE,SAAQ,OAAO,KAAK,QAAQ,WAAW,KAAK,MAAM;AACrD;AAIA,eAAe,sBACZ,SACA,SACA,OACA,cAAuB,OACT;AACd,QAAM,aAAa,IAAI,WAAW;AAAA,IAC/B,SAAS,QAAQ,IAAI,UAAU;AAAA,IAC/B,aAAa,QAAQ;AAAA,IACrB,aAAa,QAAQ,IAAI;AAAA,IACzB;AAAA,IACA,OAAO,QAAQ;AAAA,EAClB,CAAC;AAMD,MAAI,aAAa;AACjB,MAAI,eAAe;AACnB,MAAI,aAAa;AAGjB,QAAM,UAAU,QAAQ,IAAI;AAC5B,QAAM,KAAK,UAAU,MAAM,OAAO,IAAI,IAAI;AAC1C,QAAM,YAAY,WAAW,KAAK,GAAG,kBAAkB,SAAS,EAAE,OAAO,IAAI,CAAC,IAAI;AAElF,QAAM,WAAW;AAAA,IACd,CAAC,EAAE,MAAM,QAAQ,SAAS,QAAQ,CAAC;AAAA,IACnC,CAAC,UAAU;AACR;AACA,UAAI,UAAW,WAAU,MAAM,KAAK,UAAU,KAAK,IAAI,IAAI;AAE3D,YAAM,QAAQ,aAAa,KAAK;AAChC,UAAI,MAAO,eAAc;AAEzB,YAAM,OAAO,MAAM,MAAM,YAAY,KAAK;AAC1C,UAAI,SAAS,mBAAmB;AAC7B,uBAAe;AACf,cAAM,OAAQ,MAA8B,QAAQ;AACpD,gBAAQ,OAAO,MAAM,MAAM,IAAI;AAAA,CAAK;AAAA,MACvC;AAEA,YAAM,WAAW,gBAAgB,KAAK;AACtC,UAAI,SAAU,SAAQ,OAAO,MAAM,kBAAkB,QAAQ;AAAA,CAAW;AAAA,IAC3E;AAAA,IACA,EAAE,YAAY;AAAA,EACjB;AAEA,MAAI,UAAW,WAAU,IAAI;AAC7B,MAAI,MAAO,SAAQ,OAAO,MAAM,MAAM,UAAU;AAAA,CAAgB;AAGhE,MAAI,YAAY;AACb,YAAQ,OAAO,MAAM,6BAA6B,UAAU;AAAA,CAAI;AAChE;AAAA,EACH;AAGA,MAAI,cAAc;AACf,YAAQ,OAAO,MAAM,iCAAiC;AACtD,UAAM,YAAY;AAClB,UAAM,iBAAiB;AACvB,UAAM,YAAY,KAAK,IAAI;AAC3B,QAAI,YAAY;AAEhB,WAAO,KAAK,IAAI,IAAI,YAAY,WAAW;AACxC,YAAM,IAAI,QAAQ,CAAC,MAAM,WAAW,GAAG,cAAc,CAAC;AACtD,UAAI;AACD,cAAM,OAAO,MAAM,QAAQ,aAAa;AAExC,iBAAS,IAAI,KAAK,SAAS,GAAG,KAAK,GAAG,KAAK;AACxC,gBAAM,IAAI,KAAK,CAAC;AAChB,cAAI,EAAE,SAAS,eAAe,EAAE,WAAW,CAAC,EAAE,YAAY,QAAQ;AAC/D,wBAAY,EAAE;AACd;AAAA,UACH;AAAA,QACH;AACA,YAAI,UAAW;AAAA,MAClB,QAAQ;AAAA,MAER;AAAA,IACH;AAEA,YAAQ,OAAO,MAAM,6BAA6B,aAAa,oBAAoB;AAAA,CAAI;AAAA,EAC1F,OAAO;AACJ,YAAQ,OAAO,MAAM;AAAA,CAA2C;AAAA,EACnE;AACH;AAIA,eAAe,uBAAuB,SAAsB,OAA+B;AACxF,QAAM,aAAa,IAAI,WAAW;AAAA,IAC/B,SAAS,QAAQ,IAAI,UAAU;AAAA,IAC/B,aAAa,QAAQ;AAAA,IACrB,aAAa,QAAQ,IAAI;AAAA,IACzB;AAAA,IACA,OAAO,QAAQ;AAAA,EAClB,CAAC;AAED,cAAY;AACZ,UAAQ,IAAI,IAAI,OAAO,EAAE,CAAC;AAC1B,UAAQ,IAAI,QAAQ,KAAK;AACzB,UAAQ,IAAI,IAAI,OAAO,EAAE,CAAC;AAC1B,UAAQ,IAAI,SAAS,QAAQ,SAAS,EAAE;AACxC,UAAQ,IAAI,mEAAmE;AAC/E,UAAQ,IAAI,IAAI,OAAO,EAAE,CAAC;AAC1B,UAAQ,IAAI,EAAE;AAEd,QAAM,mBAAmB,MAAM,QAAQ,aAAa;AACpD,MAAI,iBAAiB,SAAS,GAAG;AAC9B,YAAQ,IAAI,4CAA4C;AACxD,eAAW,OAAO,iBAAiB,MAAM,GAAG,GAAG;AAC5C,YAAM,OAAO,OAAO,IAAI,YAAY,WAAW,IAAI,UAAU;AAC7D,UAAI,QAAQ,KAAK,KAAK,GAAG;AACtB,qBAAa,MAAM,IAAI,IAAuC;AAAA,MACjE;AAAA,IACH;AACA,YAAQ,IAAI,yCAAyC;AAAA,EACxD;AAEA,QAAM,uBAA0C,CAAC;AACjD,aAAW,OAAO,iBAAiB,MAAM,GAAG,GAAG;AAC5C,UAAM,OAAO,OAAO,IAAI,YAAY,WAAW,IAAI,UAAU;AAC7D,QAAI,QAAQ,KAAK,KAAK,MAAM,IAAI,SAAS,UAAU,IAAI,SAAS,cAAc;AAC3E,2BAAqB,KAAK,EAAE,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC;AAAA,IAC9D;AAAA,EACH;AAEA,QAAM,KAAc,0BAAgB,EAAE,OAAO,QAAQ,OAAO,QAAQ,QAAQ,OAAO,CAAC;AAEpF,SAAO,IAAI,QAAc,CAAC,YAAY;AACnC,UAAM,SAAS,MAAY;AACxB,SAAG,SAAS,wBAAwB,OAAO,UAAU;AAClD,cAAM,UAAU,MAAM,KAAK;AAC3B,YAAI,CAAC,SAAS;AACX,iBAAO;AACP;AAAA,QACH;AACA,YAAI,QAAQ,YAAY,MAAM,UAAU,QAAQ,YAAY,MAAM,QAAQ;AACvE,kBAAQ,IAAI,YAAY;AACxB,aAAG,MAAM;AACT;AAAA,QACH;AAEA,6BAAqB,KAAK,EAAE,MAAM,QAAQ,SAAS,QAAQ,CAAC;AAC5D,gBAAQ,OAAO,MAAM,8BAA8B;AACnD,YAAI,mBAAmB;AAEvB,YAAI;AACD,gBAAM,WAAW,YAAY,sBAAsB,CAAC,UAAU;AAC3D,kBAAM,QAAQ,aAAa,KAAK;AAChC,gBAAI,OAAO;AACR,sBAAQ,OAAO,MAAM,KAAK;AAC1B,kCAAoB;AAAA,YACvB;AACA,kBAAM,WAAW,gBAAgB,KAAK;AACtC,gBAAI,SAAU,SAAQ,IAAI;AAAA,iBAAoB,QAAQ,SAAS;AAAA,UAClE,CAAC;AACD,cAAI;AACD,iCAAqB,KAAK,EAAE,MAAM,aAAa,SAAS,iBAAiB,CAAC;AAC7E,kBAAQ,IAAI,IAAI;AAAA,QACnB,SAAS,OAAO;AACb,kBAAQ;AAAA,YACL;AAAA,iBAAoB,iBAAiB,QAAQ,MAAM,UAAU,KAAK;AAAA;AAAA,UACrE;AAAA,QACH;AAEA,eAAO;AAAA,MACV,CAAC;AAAA,IACJ;AAEA,OAAG,GAAG,SAAS,MAAM;AAClB,cAAQ,IAAI,YAAY;AACxB,cAAQ;AAAA,IACX,CAAC;AACD,WAAO;AAAA,EACV,CAAC;AACJ;AAIO,SAAS,aAAa,UAA6B;AACvD,QAAM,UAAsB,CAAC;AAC7B,aAAW,OAAO,SAAS,MAAM,GAAG,GAAG;AACpC,UAAM,OAAO,OAAO,IAAI,YAAY,WAAW,IAAI,UAAU;AAC7D,QAAI,IAAI,SAAS,UAAU,IAAI,SAAS,aAAa;AAClD,UAAI,KAAK,KAAK,GAAG;AACd,gBAAQ,KAAK,EAAE,MAAM,IAAI,MAAM,SAAS,KAAK,CAAC;AAAA,MACjD;AACA,UAAI,IAAI,SAAS,eAAe,IAAI,YAAY;AAC7C,mBAAW,MAAM,IAAI,YAAY;AAC9B,kBAAQ,KAAK;AAAA,YACV,MAAM;AAAA,YACN,IAAI,GAAG;AAAA,YACP,MAAM,GAAG,SAAS;AAAA,YAClB,MAAM,GAAG,SAAS,aAAa;AAAA,YAC/B,MAAM;AAAA,UACT,CAAC;AAAA,QACJ;AAAA,MACH;AAAA,IACH,WAAW,IAAI,SAAS,QAAQ;AAC7B,YAAM,WAAY,IAAY,QAAQ;AACtC,cAAQ,KAAK;AAAA,QACV,MAAM;AAAA,QACN,YAAa,IAAY,gBAAgB;AAAA,QACzC;AAAA,QACA,SAAS;AAAA,MACZ,CAAC;AAAA,IACJ;AAAA,EACH;AACA,SAAO;AACV;AAEO,SAAS,mBAAmB,QAAwB,KAAoB;AAC5E,SAAO,GAAG,cAAc,MAAM,IAAI,YAAY,CAAC;AAC/C,SAAO,GAAG,cAAc,CAAC,SAAc,IAAI,YAAY,KAAK,KAAK,CAAC;AAClE,SAAO,GAAG,YAAY,MAAM,IAAI,UAAU,CAAC;AAE3C,SAAO,GAAG,mBAAmB,CAAC,SAAc;AACzC,QAAI,cAAc,KAAK,YAAY,KAAK,YAAY;AAAA,EACvD,CAAC;AACD,SAAO,GAAG,kBAAkB,CAAC,SAAc;AACxC,QAAI,aAAa,KAAK,YAAY,KAAK,KAAK;AAAA,EAC/C,CAAC;AACD,SAAO,GAAG,iBAAiB,CAAC,SAAc;AACvC,QAAI,YAAY,KAAK,UAAU;AAAA,EAClC,CAAC;AACD,SAAO,GAAG,oBAAoB,CAAC,SAAc;AAC1C,UAAM,WAAW,IAAI,iBAAiB,KAAK,UAAU;AACrD,UAAM,UAAU,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS,KAAK,UAAU,KAAK,MAAM;AAC1F,QAAI,eAAe,KAAK,YAAY,UAAU,OAAO;AAAA,EACxD,CAAC;AAED,SAAO,GAAG,aAAa,CAAC,SAAc;AACnC,QAAI,UAAU,KAAK,OAAO;AAAA,EAC7B,CAAC;AAED,SAAO,GAAG,SAAS,CAAC,QAAe;AAChC,QAAI,UAAU,eAAe,IAAI,OAAO,EAAE;AAAA,EAC7C,CAAC;AAED,SAAO,GAAG,WAAW,CAAC,QAAa,IAAI,SAAS,MAAM,GAAG,CAAC;AAC1D,SAAO,GAAG,WAAW,CAAC,QAAa,IAAI,SAAS,OAAO,GAAG,CAAC;AAC9D;AAIA,eAAe,oBACZ,SACA,KACA,OACc;AACd,QAAM,SAAS,IAAI,eAAe;AAAA,IAC/B,KAAK,QAAQ;AAAA,IACb,OAAO,QAAQ,IAAI;AAAA,IACnB,QAAQ,QAAQ;AAAA,IAChB,SAAS;AAAA,IACT;AAAA,EACH,CAAC;AAED,UAAQ,OAAO,MAAM,iBAAiB,QAAQ,MAAM,YAAY,CAAC;AAAA,CAAO;AAExE,MAAI;AACD,UAAM,OAAO,QAAQ;AAAA,EACxB,SAAS,KAAK;AACX,UAAM,IAAI,SAAS,sBAAsB,eAAe,QAAQ,IAAI,UAAU,GAAG,EAAE;AAAA,EACtF;AAEA,QAAM,mBAAmB,MAAM,QAAQ,aAAa;AACpD,QAAM,UAAU,aAAa,gBAAgB;AAE7C,QAAM,MAAM,IAAI,QAAQ;AAAA,IACrB,QAAQ,CAAC,SAAS;AACf,aAAO,gBAAgB,IAAI;AAAA,IAC9B;AAAA,IACA,QAAQ,MAAM;AACX,aAAO,MAAM;AAAA,IAChB;AAAA,IACA;AAAA,IACA,KAAK,QAAQ,IAAI;AAAA,EACpB,CAAC;AAED,qBAAmB,QAAQ,GAAG;AAE9B,SAAO,GAAG,UAAU,MAAM;AACvB,QAAI,KAAK;AACT,YAAQ,IAAI,eAAe;AAAA,EAC9B,CAAC;AAED,MAAI,YAAY,OAAO;AACvB,MAAI,MAAM;AAEV,QAAM,IAAI,QAAc,CAAC,YAAY;AAClC,WAAO,KAAK,UAAU,OAAO;AAAA,EAChC,CAAC;AACJ;AAIA,eAAe,iBACZ,SACA,KACA,MACA,OACc;AACd,MAAI,CAAC,kBAAkB,GAAG;AACvB,UAAM,IAAI;AAAA,MACP;AAAA,IAIH;AAAA,EACH;AAEA,QAAM,kBACH,OAAO,KAAK,cAAc,MAAM,WAAW,KAAK,cAAc,IAAI;AACrE,QAAM,mBACH,OAAO,KAAK,eAAe,MAAM,WAAW,KAAK,eAAe,IAAI;AAEvE,MAAI;AACJ,MAAI;AAEJ,MAAI,CAAC,mBAAmB,CAAC,kBAAkB;AACxC,YAAQ,OAAO,MAAM,qBAAqB;AAAA,EAC7C;AAEA,MAAI,iBAAiB;AAClB,oBAAgB;AAAA,EACnB,OAAO;AACJ,UAAM,eAAe,MAAM,iBAAiB;AAC5C,UAAM,WAAW,MAAM,aAAa,cAAc,oBAAoB;AACtE,oBAAgB,SAAS;AAAA,EAC5B;AAEA,MAAI,kBAAkB;AACnB,qBAAiB;AAAA,EACpB,OAAO;AACJ,UAAM,gBAAgB,MAAM,kBAAkB;AAC9C,UAAM,WAAW,MAAM,aAAa,eAAe,kBAAkB;AACrE,qBAAiB,SAAS;AAAA,EAC7B;AAEA,QAAM,SAAS,IAAI,eAAe;AAAA,IAC/B,KAAK,QAAQ;AAAA,IACb,OAAO,QAAQ,IAAI;AAAA,IACnB,QAAQ,QAAQ;AAAA,IAChB,SAAS;AAAA,IACT;AAAA,EACH,CAAC;AAED,UAAQ,OAAO,MAAM;AAAA,gBAAmB,QAAQ,MAAM,YAAY,CAAC;AAAA,CAAO;AAE1E,MAAI;AACD,UAAM,OAAO,QAAQ;AAAA,EACxB,SAAS,KAAK;AACX,UAAM,IAAI,SAAS,sBAAsB,eAAe,QAAQ,IAAI,UAAU,GAAG,EAAE;AAAA,EACtF;AAEA,QAAM,mBAAmB,MAAM,QAAQ,aAAa;AACpD,QAAM,UAAU,aAAa,gBAAgB;AAE7C,QAAM,MAAM,IAAI,WAAW,CAAC,UAAU;AACnC,QAAI,CAAC,OAAO,YAAY,EAAG;AAC3B,WAAO,UAAU,KAAK;AAAA,EACzB,CAAC;AACD,QAAM,SAAS,IAAI,YAAY,cAAc;AAE7C,WAAS,UAAgB;AACtB,QAAI,KAAK;AACT,WAAO,KAAK;AACZ,WAAO,MAAM;AAAA,EAChB;AAEA,QAAM,MAAM,IAAI,QAAQ;AAAA,IACrB,QAAQ,CAAC,SAAS;AACf,aAAO,gBAAgB,IAAI;AAAA,IAC9B;AAAA,IACA,QAAQ,MAAM;AACX,cAAQ;AAAA,IACX;AAAA,IACA;AAAA,IACA,KAAK,QAAQ,IAAI;AAAA,EACpB,CAAC;AAED,qBAAmB,QAAQ,GAAG;AAE9B,SAAO,GAAG,SAAS,CAAC,SAAc;AAC/B,WAAO,MAAM,KAAK,KAAK;AAAA,EAC1B,CAAC;AAED,SAAO,GAAG,aAAa,CAAC,SAAc;AACnC,WAAO,YAAY,MAAM,SAAS;AAAA,EACrC,CAAC;AAED,SAAO,GAAG,aAAa,MAAM;AAC1B,UAAM,aAAa,OAAO,kBAAkB;AAC5C,UAAM,YAAY,OAAO;AAEzB,QAAI,eAAe,QAAQ,aAAa,KAAK,OAAO,WAAW;AAC5D,aAAO,cAAc,YAAY,SAAS;AAC1C,aAAO,KAAK;AAEZ,UAAI,OAAO;AACR,YAAI,SAAS,MAAM;AAAA,UAChB,MAAM;AAAA,UACN,MAAM;AAAA,UACN,OAAO,EAAE,QAAQ,UAAU,YAAY,YAAY,UAAU;AAAA,QAChE,CAAC;AAAA,MACJ;AAAA,IACH,WAAW,OAAO;AACf,UAAI,SAAS,MAAM;AAAA,QAChB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO,EAAE,QAAQ,WAAW,YAAY,OAAO,UAAU;AAAA,MAC5D,CAAC;AAAA,IACJ;AAAA,EACH,CAAC;AAED,SAAO,GAAG,YAAY,CAAC,SAAc;AAClC,WAAO,KAAK;AACZ,QAAI;AAAA,MACD,KAAK,WAAW;AAAA,MAChB,KAAK;AAAA,MACL,KAAK,oBAAoB;AAAA,MACzB,KAAK;AAAA,IACR;AAAA,EACH,CAAC;AAED,SAAO,GAAG,oBAAoB,CAAC,SAAc;AAC1C,QAAI,KAAK,SAAS,UAAU,KAAK,SAAS;AACvC,UAAI,iBAAiB,KAAK,OAAO;AAAA,IACpC;AAAA,EACH,CAAC;AAED,SAAO,GAAG,UAAU,MAAM;AACvB,QAAI,KAAK;AACT,YAAQ;AACR,YAAQ,IAAI,eAAe;AAAA,EAC9B,CAAC;AAED,MAAI,YAAY,OAAO;AACvB,MAAI,MAAM;AAEV,MAAI,MAAM,aAAa;AAEvB,QAAM,IAAI,QAAc,CAAC,YAAY;AAClC,WAAO,KAAK,UAAU,OAAO;AAAA,EAChC,CAAC;AACJ;AAIA,eAAsB,mBAAkC;AACrD,MAAI,CAAC,kBAAkB,GAAG;AACvB,UAAM,IAAI;AAAA,MACP;AAAA,IAIH;AAAA,EACH;AAEA,QAAM,SAAS,MAAM,iBAAiB;AACtC,QAAM,UAAU,MAAM,kBAAkB;AAExC,UAAQ,IAAI,6BAA6B;AACzC,aAAW,OAAO,QAAQ;AACvB,UAAM,SAAS,IAAI,YAAY,eAAe;AAC9C,YAAQ,IAAI,KAAK,IAAI,EAAE,KAAK,IAAI,IAAI,GAAG,MAAM,EAAE;AAAA,EAClD;AAEA,UAAQ,IAAI,6BAA6B;AACzC,aAAW,OAAO,SAAS;AACxB,UAAM,SAAS,IAAI,YAAY,eAAe;AAC9C,YAAQ,IAAI,KAAK,IAAI,EAAE,KAAK,IAAI,IAAI,GAAG,MAAM,EAAE;AAAA,EAClD;AACH;;;AIhiBA,eAAsB,iBAAiB,MAA4C;AAChF,QAAM,MAAM,YAAY,KAAK,GAAG;AAChC,QAAM,EAAE,KAAK,IAAI;AACjB,QAAM,YAAY,OAAO,KAAK,SAAS,MAAM,WAAW,KAAK,SAAS,IAAI;AAC1E,QAAM,UAAU,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAElE,QAAM,OAAO,MAAM,yBAAyB,KAAK,WAAW,CAAC,CAAC,OAAO;AACrE,QAAM,UAAU,sBAAsB,KAAK,IAAI;AAC/C,QAAM,eAAe,SAAS,IAAI;AACrC;AAEA,SAAS,sBAAsB,KAA2B,MAAkC;AACzF,QAAM,SAAS,IAAI,UAAU,OAAO,QAAQ,WAAW,MAAM,EAAE,QAAQ,UAAU,KAAK;AACtF,SAAO;AAAA,IACJ;AAAA,IACA,QAAQ,KAAK;AAAA,IACb,UAAU,KAAK;AAAA,IACf,WAAW,KAAK,SAAS,KAAK;AAAA,IAC9B,iBAAiB,GAAG,IAAI,UAAU,MAAM,2BAA2B,KAAK,EAAE;AAAA,IAC1E,OAAO,GAAG,MAAM;AAAA,IAChB,cAAc,MAAM,yBAAyB,KAAK,KAAK,EAAE,EAAE,MAAM,MAAM,CAAC,CAAC;AAAA,IACzE,OAAO;AAAA,IACP,OAAO;AAAA;AAAA,EACV;AACH;AAEA,eAAe,yBACZ,KACA,WACA,eACuB;AACvB,MAAI,WAAW;AACZ,UAAM,KAAK,OAAO,SAAS;AAC3B,QAAI,MAAM,EAAE,EAAG,OAAM,IAAI,SAAS,4BAA4B;AAC9D,WAAO,iBAAiB,KAAK,EAAE;AAAA,EAClC;AAEA,MAAI,eAAe;AAChB,UAAM,OAAO,MAAM,oBAAoB,GAAG;AAC1C,YAAQ,OAAO,MAAM,2BAA2B,KAAK,EAAE;AAAA,CAAI;AAC3D,WAAO;AAAA,EACV;AAEA,QAAM,QAAQ,MAAM,mBAAmB,GAAG;AAE1C,QAAM,EAAE,MAAM,cAAc,MAAM,IAAI,MAAM,eAAe,OAAO;AAAA,IAC/D,OAAO;AAAA,IACP,SAAS,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,KAAK,MAAM,GAAG,CAAC,CAAC;AAAA,IACrD,UAAU,CAAC,MAAM,gBAAgB,EAAE,SAAS;AAAA,IAC5C,cAAc;AAAA,IACd,UAAU;AAAA,IACV,UAAU;AAAA,EACb,CAAC;AAED,MAAI,CAAC,gBAAgB,CAAC,OAAO;AAC1B,UAAM,IAAI,SAAS,mBAAmB;AAAA,EACzC;AAEA,MAAI,OAAO;AACR,UAAM,OAAO,MAAM,oBAAoB,GAAG;AAC1C,YAAQ,OAAO,MAAM,2BAA2B,KAAK,EAAE;AAAA,CAAI;AAC3D,WAAO;AAAA,EACV;AACA,SAAO;AACV;;;ACpFA,SAAS,cAAAC,aAAY,aAAAC,YAAW,iBAAAC,gBAAe,gBAAAC,qBAAoB;AACnE,SAAS,YAAAC,iBAAgB;AACzB,SAAS,QAAAC,aAAY;AAKrB,eAAsB,sBACnB,KACA,WACc;AACd,SAAO,uBAAuB,SAAS,KAAK;AAC5C,QAAM,aAAa,MAAM,IAAI,UAAU,gBAAgB,SAAS;AAEhE,SAAO,oBAAoB;AAC3B,SAAO,iBAAiB,WAAW,aAAa,CAAC,GAAG,MAAM,EAAE;AAC5D,SAAO,aAAa,WAAW,SAAS,CAAC,GAAG,MAAM,EAAE;AACpD,SAAO,kBAAkB,WAAW,aAAa,CAAC,GAAG,MAAM,EAAE;AAC7D,SAAO,aAAa,WAAW,SAAS,CAAC,GAAG,MAAM,EAAE;AAEpD,QAAM,OAAO,UAAU,MAAM,GAAG,CAAC;AACjC,QAAM,iBAAiBC,MAAK,IAAI,mBAAmB,YAAY,GAAG,SAAS;AAC3E,MAAI,CAACC,YAAW,cAAc,GAAG;AAC9B,IAAAC,WAAU,gBAAgB,EAAE,WAAW,KAAK,CAAC;AAAA,EAChD;AACA,QAAM,WAAW,MAAM,IAAI,IAAI,SAAS;AACxC,QAAM,WAAWF,MAAK,gBAAgB,QAAQ;AAC9C,EAAAG,eAAc,UAAU,KAAK,UAAU,YAAY,MAAM,CAAC,CAAC;AAC3D,SAAO,aAAa,QAAQ,EAAE;AAE9B,SAAO,wBAAwB;AAC/B,QAAM,UAAU,gBAAgB;AAChC,QAAM,eAAe,SAAS,QAAQ,UAAU,KAAK,EAAE;AAEvD,MAAI;AACD,UAAM,SAASC,UAAS,oBAAoB,YAAY,IAAI;AAAA,MACzD,KAAK;AAAA,MACL,OAAO;AAAA,MACP,UAAU;AAAA,IACb,CAAC;AACD,YAAQ,OAAO,MAAM,MAAM;AAE3B,UAAM,SACF,OAAO,SAAS,kBAAkB,KAAK,CAAC,OAAO,SAAS,mBAAmB,KAC5E,OAAO,SAAS,0BAA0B;AAE7C,QAAI,OAAQ,OAAM,IAAI,SAAS,eAAe;AAAA,EACjD,SAAS,OAAgB;AACtB,QAAI,iBAAiB,SAAU,OAAM;AACrC,UAAM,YAAY;AAClB,QAAI,UAAU,OAAQ,SAAQ,OAAO,MAAM,UAAU,MAAM;AAC3D,QAAI,UAAU,OAAQ,SAAQ,OAAO,MAAM,UAAU,MAAM;AAC3D,UAAM,IAAI,SAAS,oBAAoB;AAAA,EAC1C;AAEA,SAAO,oBAAoB,SAAS,EAAE;AACzC;AAEA,SAAS,kBAA0B;AAChC,MAAI,MAAM,QAAQ,IAAI;AACtB,SAAO,QAAQ,KAAK;AACjB,UAAM,UAAUJ,MAAK,KAAK,cAAc;AACxC,QAAIC,YAAW,OAAO,GAAG;AACtB,UAAI;AACD,cAAM,MAAM,KAAK,MAAMI,cAAa,SAAS,OAAO,CAAC;AACrD,YAAI,IAAI,WAAY,QAAO;AAAA,MAC9B,QAAQ;AAAA,MAER;AAAA,IACH;AACA,UAAML,MAAK,KAAK,IAAI;AAAA,EACvB;AACA,SAAO,QAAQ,IAAI;AACtB;;;ACzEA,SAAS,qBAAAM,0BAAyB;AAKlC,eAAsB,aAAa,KAAoC;AACpE,QAAM,EAAE,YAAY,IAAI,MAAM,iBAAiB;AAAA,IAC5C,KAAK,IAAI;AAAA,IACT,WAAW,IAAI;AAAA,IACf,oBAAoB,IAAI;AAAA,EAC3B,CAAC;AAED,QAAM,YAAY,IAAIC,mBAAkB,aAAa,IAAI,UAAU,MAAM;AACzE,QAAM,UAAU,MAAM,UAAU,eAAe;AAC/C,SAAO,gBAAgB,QAAQ,IAAI,KAAK,QAAQ,KAAK,GAAG;AAC3D;AAEA,eAAsB,cAAc,KAAoC;AACrE,MAAI,mBAAmB,MAAM,IAAI,GAAG;AACpC,SAAO,2BAA2B,IAAI,GAAG,EAAE;AAC9C;;;ACXA,eAAsB,cAAc,MAA4C;AAC7E,QAAM,MAAM,YAAY,KAAK,GAAG;AAChC,QAAM,EAAE,WAAW,KAAK,IAAI;AAC5B,QAAM,WAAW,OAAO,KAAK,WAAW,MAAM,WAAW,KAAK,WAAW,IAAI;AAC7E,QAAM,YAAY,OAAO,KAAK,SAAS,MAAM,WAAW,KAAK,SAAS,IAAI;AAC1E,QAAM,UAAU,OAAO,KAAK,YAAY,WAAW,KAAK,UAAU;AAElE,QAAM,OAAO,MAAM,gBAAgB,KAAK,WAAW,WAAW,UAAU,WAAW,CAAC,CAAC,OAAO;AAC5F,QAAM,UAAU,sBAAsB,KAAK,WAAW,MAAM,mBAAmB;AAC/E,QAAM,eAAe,SAAS,IAAI;AACrC;AAEA,eAAsB,YAAY,MAA4C;AAC3E,QAAM,MAAM,YAAY,KAAK,GAAG;AAChC,QAAM,EAAE,WAAW,KAAK,IAAI;AAC5B,QAAM,YAAY,OAAO,KAAK,SAAS,MAAM,WAAW,KAAK,SAAS,IAAI;AAC1E,QAAM,aAAa,OAAO,KAAK,aAAa,WAAW,KAAK,WAAW;AACvE,QAAM,WAAW,OAAO,KAAK,WAAW,WAAW,KAAK,SAAS;AAEjE,MAAI;AACJ,MAAI,WAAW;AACZ,UAAM,KAAK,OAAO,SAAS;AAC3B,QAAI,MAAM,EAAE,EAAG,OAAM,IAAI,SAAS,4BAA4B;AAC9D,WAAO,MAAM,IAAI,UAAU,QAAQ,WAAW,EAAE;AAAA,EACnD,WAAW,YAAY;AACpB,WAAO,MAAM,qBAAqB,IAAI,WAAW,WAAW,OAAO,UAAU,GAAG,QAAQ;AAAA,EAC3F,WAAW,UAAU;AAClB,WAAO,MAAM,iBAAiB,IAAI,WAAW,WAAW,QAAQ;AAAA,EACnE,OAAO;AACJ,UAAM,IAAI;AAAA,MACP;AAAA,IAEH;AAAA,EACH;AAEA,QAAM,UAAU,sBAAsB,KAAK,WAAW,MAAM,MAAM;AAClE,QAAM,eAAe,SAAS,IAAI;AACrC;AAIA,SAAS,sBACN,KACA,WACA,MACA,OACY;AACZ,QAAM,SAAS,IAAI,UAAU,OAAO,QAAQ,WAAW,MAAM,EAAE,QAAQ,UAAU,KAAK;AACtF,SAAO;AAAA,IACJ;AAAA,IACA,QAAQ,KAAK;AAAA,IACb,UAAU,KAAK;AAAA,IACf,WAAW,KAAK,SAAS,KAAK;AAAA,IAC9B,iBAAiB,GAAG,IAAI,UAAU,MAAM,aAAa,SAAS,aAAa,KAAK,EAAE;AAAA,IAClF,OAAO,GAAG,MAAM,aAAa,SAAS;AAAA,IACtC,cAAc,MAAM,IAAI,UAAU,gBAAgB,WAAW,KAAK,IAAI,EAAE,EAAE,MAAM,MAAM,CAAC,CAAC;AAAA,IACxF;AAAA,IACA,OAAO;AAAA,EACV;AACH;AAIA,eAAe,gBACZ,KACA,WACA,WACA,YACA,UACA,gBAAyB,OACX;AACd,MAAI,WAAW;AACZ,UAAM,SAAS,OAAO,SAAS;AAC/B,QAAI,MAAM,MAAM,EAAG,OAAM,IAAI,SAAS,4BAA4B;AAClE,WAAO,IAAI,UAAU,QAAQ,WAAW,MAAM;AAAA,EACjD;AAEA,MAAI,eAAe;AAChB,WAAO,kBAAkB,IAAI,WAAW,WAAW,UAAU;AAAA,EAChE;AAEA,QAAM,gBAAgB,MAAM,IAAI,UAAU,SAAS,WAAW;AAAA,IAC3D;AAAA,IACA,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,UAAU;AAAA,EACb,CAAC;AACD,QAAM,QAAQ,cAAc,SAAS,CAAC;AAEtC,QAAM,EAAE,MAAM,cAAc,MAAM,IAAI,MAAM,eAAe,OAAO;AAAA,IAC/D,OAAO;AAAA,IACP,SAAS,CAAC,SAAS,KAAK,SAAS,QAAQ,KAAK,KAAK,MAAM,GAAG,CAAC,CAAC;AAAA,IAC9D,UAAU,CAAC,SAAS;AACjB,YAAM,OAAO,gBAAgB,KAAK,SAAS;AAC3C,YAAM,WAAW,KAAK,gBAAgB;AACtC,aAAO,GAAG,QAAQ,OAAO,aAAa,IAAI,MAAM,EAAE,MAAM,IAAI;AAAA,IAC/D;AAAA,IACA,cAAc;AAAA,IACd,UAAU;AAAA,IACV,UAAU;AAAA,EACb,CAAC;AAED,MAAI,CAAC,gBAAgB,CAAC,OAAO;AAC1B,UAAM,IAAI,SAAS,mBAAmB;AAAA,EACzC;AAEA,MAAI,OAAO;AACR,WAAO,kBAAkB,IAAI,WAAW,WAAW,UAAU;AAAA,EAChE;AACA,SAAO;AACV;AAEA,eAAe,kBACZ,WACA,WACA,YACc;AACd,QAAM,OAA4B;AAAA,IAC/B,UAAU;AAAA,IACV,SAAS;AAAA,EACZ;AACA,MAAI,YAAY;AACb,SAAK,WAAW,OAAO,UAAU;AAAA,EACpC;AACA,QAAM,OAAO,MAAM,UAAU,WAAW,WAAW,IAAW;AAC9D,UAAQ,OAAO,MAAM,iBAAiB,KAAK,EAAE;AAAA,CAAI;AACjD,SAAO;AACV;AAEA,eAAe,qBACZ,WACA,WACA,YACA,YACc;AACd,MAAI,MAAM,UAAU,EAAG,OAAM,IAAI,SAAS,6BAA6B;AACvE,QAAM,OAA4B;AAAA,IAC/B,UAAU;AAAA,IACV,SAAS;AAAA,IACT;AAAA,EACH;AACA,MAAI,YAAY;AACb,SAAK,WAAW,OAAO,UAAU;AAAA,EACpC;AACA,QAAM,OAAO,MAAM,UAAU,WAAW,WAAW,IAAW;AAC9D,UAAQ,OAAO,MAAM,4BAA4B,KAAK,EAAE,cAAc,UAAU;AAAA,CAAK;AACrF,SAAO;AACV;AAEA,eAAe,iBACZ,WACA,WACA,UACc;AACd,QAAM,KAAK,OAAO,QAAQ;AAC1B,MAAI,MAAM,EAAE,EAAG,OAAM,IAAI,SAAS,2BAA2B;AAC7D,QAAM,OAA4B;AAAA,IAC/B,UAAU;AAAA,IACV,SAAS;AAAA,IACT,UAAU;AAAA,EACb;AACA,QAAM,OAAO,MAAM,UAAU,WAAW,WAAW,IAAW;AAC9D,UAAQ,OAAO,MAAM,oBAAoB,KAAK,EAAE,YAAY,QAAQ;AAAA,CAAK;AACzE,SAAO;AACV;;;AClKA,IAAMC,YAAwC;AAAA,EAC3C,EAAE,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,oBAAoB,IAAI,UAAU,GAAG;AAAA,EAC1E,EAAE,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,oBAAoB,IAAI,UAAU,GAAG;AAAA,EAC1E,EAAE,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,iBAAiB;AAAA,EACtD,EAAE,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,QAAQ,GAAG;AACnD;AAEA,eAAsB,yBAAyB,KAA0C;AACtF,QAAM,gBAAgB,MAAM,IAAI,UAAU,mBAAmB;AAC7D,aAAW,eAAe,KAAKA,SAAO;AACzC;;;ACjBA,IAAMC,YAAkC;AAAA,EACrC,EAAE,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,QAAQ,IAAI,UAAU,GAAG;AAAA,EAC9D,EAAE,QAAQ,SAAS,UAAU,CAAC,MAAM,EAAE,SAAS,IAAI,UAAU,GAAG;AAAA,EAChE,EAAE,QAAQ,QAAQ,UAAU,CAAC,MAAM,EAAE,KAAK;AAAA,EAC1C,EAAE,QAAQ,aAAa,UAAU,CAAC,MAAO,EAAE,cAAc,QAAQ,KAAM;AAC1E;AAEA,eAAsB,cAAc,KAA0C;AAC3E,QAAM,UAAU,MAAM,IAAI,UAAU,eAAe;AACnD,eAAa,SAAS,KAAKA,SAAO;AACrC;","names":["baseUrl","readFileSync","readFileSync","COLUMNS","MESSAGE_COLUMNS","truncate","COLUMNS","LABEL_COLUMNS","FILTER_COLUMNS","COLUMNS","COLUMNS","COLUMNS","COLUMNS","MESSAGE_COLUMNS","COLUMNS","MESSAGE_COLUMNS","COLUMNS","COLUMNS","EVENT_COLUMNS","COLUMNS","LABEL_COLUMNS","NOTE_COLUMNS","COLUMNS","COLUMNS","COLUMNS","COLUMNS","COLUMNS","baseUrl","MESSAGE_COLUMNS","COLUMNS","TOOL_COLUMNS","COLUMNS","COLUMNS","COLUMNS","COLUMNS","COLUMNS","COLUMNS","COLUMNS","commands","COLUMNS","COLUMNS","COLUMNS","COLUMNS","RUN_COLUMNS","COLUMNS","COLUMNS","COLUMNS","COLUMNS","readline","execSync","EventEmitter","existsSync","mkdirSync","writeFileSync","readFileSync","execSync","join","join","existsSync","mkdirSync","writeFileSync","execSync","readFileSync","GravityRailClient","GravityRailClient","COLUMNS","COLUMNS"]}