@cas-parser/connect 1.1.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.
- package/LICENSE +21 -0
- package/README.md +263 -0
- package/dist/PortfolioConnect.d.ts +5 -0
- package/dist/components/CDSLFetchMode.d.ts +13 -0
- package/dist/components/FetchMode.d.ts +12 -0
- package/dist/components/Modal.d.ts +12 -0
- package/dist/components/PortfolioConnectWidget.d.ts +14 -0
- package/dist/components/ShortcutLinks.d.ts +8 -0
- package/dist/components/UploadZone.d.ts +8 -0
- package/dist/imperative.d.ts +87 -0
- package/dist/index.cjs.js +1766 -0
- package/dist/index.cjs.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.esm.js +1755 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/portfolio-connect.standalone.min.js +2 -0
- package/dist/portfolio-connect.standalone.min.js.map +1 -0
- package/dist/portfolio-connect.umd.js +1769 -0
- package/dist/portfolio-connect.umd.js.map +1 -0
- package/dist/portfolio-connect.umd.min.js +2 -0
- package/dist/portfolio-connect.umd.min.js.map +1 -0
- package/dist/types/index.d.ts +86 -0
- package/dist/utils/api.d.ts +57 -0
- package/package.json +84 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portfolio-connect.umd.js","sources":["../src/components/Modal.tsx","../src/components/ShortcutLinks.tsx","../src/components/UploadZone.tsx","../src/components/FetchMode.tsx","../src/components/CDSLFetchMode.tsx","../src/utils/api.ts","../src/components/PortfolioConnectWidget.tsx","../src/PortfolioConnect.tsx","../src/imperative.tsx","../src/index.ts"],"sourcesContent":["import React, { useEffect, useRef } from 'react';\n\ninterface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n onBack?: () => void; // Optional back handler\n showBackButton?: boolean; // Show back arrow instead of X\n children: React.ReactNode;\n width?: number;\n isSandbox?: boolean; // Show sandbox indicator\n}\n\nexport const Modal: React.FC<ModalProps> = ({ \n isOpen, \n onClose, \n onBack,\n showBackButton = false,\n children, \n width = 400,\n isSandbox = false,\n}) => {\n const overlayRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (isOpen) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => {\n document.body.style.overflow = '';\n };\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const handleOverlayClick = (e: React.MouseEvent) => {\n if (e.target === overlayRef.current) {\n onClose();\n }\n };\n\n const handleHeaderButtonClick = () => {\n if (showBackButton && onBack) {\n onBack();\n } else {\n onClose();\n }\n };\n\n return (\n <div\n ref={overlayRef}\n onClick={handleOverlayClick}\n style={{\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n padding: 16,\n }}\n >\n <div\n style={{\n backgroundColor: '#fff',\n borderRadius: 16,\n width: '100%',\n maxWidth: width,\n maxHeight: '90vh',\n overflow: 'auto',\n position: 'relative',\n boxShadow: '0 25px 80px rgba(0, 0, 0, 0.25)',\n }}\n >\n {/* Sandbox Banner */}\n {isSandbox && (\n <div style={{\n backgroundColor: '#fef3c7',\n borderBottom: '1px solid #fcd34d',\n padding: '6px 16px',\n fontSize: 12,\n fontWeight: 600,\n color: '#92400e',\n textAlign: 'center',\n borderTopLeftRadius: 16,\n borderTopRightRadius: 16,\n }}>\n 🧪 Sandbox Mode — Test data only\n </div>\n )}\n \n {/* Header button (Back or Close) */}\n <button\n onClick={handleHeaderButtonClick}\n style={{\n position: 'absolute',\n top: isSandbox ? 40 : 12,\n left: showBackButton ? 12 : 'auto',\n right: showBackButton ? 'auto' : 12,\n background: 'none',\n border: 'none',\n fontSize: showBackButton ? 20 : 28,\n cursor: 'pointer',\n color: '#6b7280',\n lineHeight: 1,\n padding: 8,\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 8,\n transition: 'background-color 0.15s',\n }}\n onMouseOver={(e) => e.currentTarget.style.backgroundColor = '#f3f4f6'}\n onMouseOut={(e) => e.currentTarget.style.backgroundColor = 'transparent'}\n aria-label={showBackButton ? 'Back' : 'Close'}\n >\n {showBackButton ? '←' : '×'}\n </button>\n {children}\n </div>\n </div>\n );\n};\n","import React from 'react';\nimport type { CASType } from '../types';\n\n// Search by sender emails - official CAS statement sources\nconst CAS_SENDERS = {\n 'CAMS_KFINTECH': ['donotreply@camsonline.com', 'samfs@kfintech.com'],\n 'CDSL': ['ecas@cdslstatement.com'],\n 'NSDL': ['nsdl-cas@nsdl.co.in'],\n};\n\n// Build search query for sender emails\nconst buildSearchQuery = (type?: CASType) => {\n const senders = type ? CAS_SENDERS[type] : Object.values(CAS_SENDERS).flat();\n const fromQuery = senders.map(s => `from:${s}`).join(' OR ');\n return `(${fromQuery}) has:attachment`;\n};\n\n// Official brand logos as inline SVG\nconst GmailLogo = () => (\n <svg width=\"20\" height=\"16\" viewBox=\"0 0 24 18\" fill=\"none\">\n <path d=\"M1.636 18H5.455V8.682L0 4.91V16.364C0 17.267.733 18 1.636 18z\" fill=\"#4285F4\"/>\n <path d=\"M18.545 18h3.819c.904 0 1.636-.732 1.636-1.636V4.91l-5.455 3.772V18z\" fill=\"#34A853\"/>\n <path d=\"M18.545 1.636V8.682L24 4.91v-1.91c0-2.022-2.309-3.175-3.927-1.963l-1.528 1.109z\" fill=\"#FBBC04\"/>\n <path d=\"M5.455 8.682V1.636l6.545 4.91 6.545-4.91v7.046L12 13.592 5.455 8.682z\" fill=\"#EA4335\"/>\n <path d=\"M0 2.999v1.91l5.455 3.773V1.636L3.927.527C2.31-.685 0 .468 0 2.999z\" fill=\"#C5221F\"/>\n </svg>\n);\n\nconst OutlookLogo = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path d=\"M19.484 7.937v5.477l1.916 1.205a.489.489 0 00.21.063.489.489 0 00.229-.063l8.088-5.234a1.455 1.455 0 00-.741-1.448H19.484z\" fill=\"#0072C6\"/>\n <path d=\"M19.484 15.457l1.747 1.2a.522.522 0 00.543 0c-.3.181 8.073-5.378 8.073-5.378v10.795a1.474 1.474 0 01-1.474 1.474h-8.889V15.457z\" fill=\"#0072C6\"/>\n <path d=\"M10.44 12.932a1.927 1.927 0 00-1.384-.543 1.9 1.9 0 00-1.387.543 1.927 1.927 0 00-.543 1.384v3.086a1.927 1.927 0 00.543 1.384 1.864 1.864 0 001.384.543 1.927 1.927 0 001.387-.543 1.9 1.9 0 00.543-1.384v-3.086a1.927 1.927 0 00-.543-1.384z\" fill=\"#0072C6\"/>\n <path d=\"M18.044 5.116H8.044a1.474 1.474 0 00-1.474 1.474v1.209l6.3 4.5 5.174-3.15V6.59a1.474 1.474 0 00-1.474-1.474H8.044z\" fill=\"#0072C6\"/>\n <path d=\"M1.474 9.789h16.842v14.737H1.474A1.474 1.474 0 010 23.053V11.263a1.474 1.474 0 011.474-1.474z\" fill=\"#0072C6\"/>\n <ellipse cx=\"9.263\" cy=\"16.842\" rx=\"3.789\" ry=\"4.421\" stroke=\"#fff\" strokeWidth=\"1.5\" fill=\"none\"/>\n </svg>\n);\n\nconst YahooLogo = () => (\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 32 32\" fill=\"none\">\n <path d=\"M16 2C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14S23.732 2 16 2z\" fill=\"#5C0DAC\"/>\n <path d=\"M22.287 10.5h-2.844l-3.118 6.066L13.178 10.5h-2.89l4.622 8.37v4.63h2.666v-4.63l4.711-8.37z\" fill=\"#fff\"/>\n </svg>\n);\n\n// Generate provider URLs based on selected CAS type\nconst getProviders = (selectedType?: CASType) => {\n const query = buildSearchQuery(selectedType);\n const encodedQuery = encodeURIComponent(query);\n \n return [\n {\n name: 'Gmail',\n Logo: GmailLogo,\n url: `https://mail.google.com/mail/u/0/#search/${encodedQuery}`\n },\n {\n name: 'Outlook',\n Logo: OutlookLogo,\n url: `https://outlook.live.com/mail/0/deeplink?version=20200615005&search=${encodedQuery}`\n },\n {\n name: 'Yahoo',\n Logo: YahooLogo,\n url: `https://mail.yahoo.com/d/search/keyword=${encodedQuery}`\n }\n ];\n};\n\ninterface ShortcutLinksProps {\n selectedType?: CASType;\n onSearchClick?: (provider: string) => void;\n}\n\nexport const ShortcutLinks: React.FC<ShortcutLinksProps> = ({ selectedType, onSearchClick }) => {\n const providers = getProviders(selectedType);\n \n return (\n <div style={{ marginBottom: 16 }}>\n <div style={{ \n fontSize: 12, \n color: '#6b7280', \n marginBottom: 10,\n fontWeight: 500 \n }}>\n Find statement in your inbox\n </div>\n <div style={{ \n display: 'grid', \n gridTemplateColumns: 'repeat(3, 1fr)', \n gap: 10 \n }}>\n {providers.map((provider) => (\n <a\n key={provider.name}\n href={provider.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => onSearchClick?.(provider.name)}\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: 10,\n backgroundColor: '#f9fafb',\n borderRadius: 8,\n textDecoration: 'none',\n border: '1px solid #e5e7eb',\n transition: 'all 0.15s',\n cursor: 'pointer',\n }}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#eff6ff';\n e.currentTarget.style.borderColor = '#2563eb';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = '#f9fafb';\n e.currentTarget.style.borderColor = '#e5e7eb';\n }}\n >\n <provider.Logo />\n <span style={{ fontSize: 11, color: '#374151', fontWeight: 500, marginTop: 4 }}>\n {provider.name}\n </span>\n </a>\n ))}\n </div>\n </div>\n );\n};\n","import React, { useState, useRef, useCallback } from 'react';\n\ninterface UploadZoneProps {\n onFileSelect: (file: File, password: string) => void;\n isProcessing: boolean;\n progress: number;\n}\n\nexport const UploadZone: React.FC<UploadZoneProps> = ({ \n onFileSelect, \n isProcessing, \n progress \n}) => {\n const [file, setFile] = useState<File | null>(null);\n const [password, setPassword] = useState('');\n const [isDragOver, setIsDragOver] = useState(false);\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleDrop = useCallback((e: React.DragEvent) => {\n e.preventDefault();\n setIsDragOver(false);\n const droppedFile = e.dataTransfer.files[0];\n if (droppedFile?.type === 'application/pdf') {\n setFile(droppedFile);\n }\n }, []);\n\n const handleFileChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const selectedFile = e.target.files?.[0];\n if (selectedFile) {\n setFile(selectedFile);\n }\n };\n\n const handleSubmit = () => {\n if (file) {\n onFileSelect(file, password);\n }\n };\n\n if (isProcessing) {\n return (\n <div style={{ textAlign: 'center', padding: '50px 20px' }}>\n <div style={{ \n width: 56, \n height: 56, \n backgroundColor: '#eff6ff', \n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 20px',\n }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#2563eb\" strokeWidth=\"2\">\n <path d=\"M21 12V7H5a2 2 0 0 1 0-4h14v4\"/>\n <path d=\"M3 5v14a2 2 0 0 0 2 2h16v-5\"/>\n <path d=\"M18 12a2 2 0 0 0 0 4h4v-4Z\"/>\n </svg>\n </div>\n <h3 style={{ margin: '0 0 8px', fontSize: 18, fontWeight: 600, color: '#1f2937' }}>\n Reading Your Investments\n </h3>\n <p style={{ color: '#6b7280', marginBottom: 24, fontSize: 14 }}>\n Extracting holdings, transactions & values...\n </p>\n <div style={{\n height: 6,\n backgroundColor: '#e5e7eb',\n borderRadius: 3,\n overflow: 'hidden',\n maxWidth: 240,\n margin: '0 auto',\n }}>\n <div style={{\n height: '100%',\n width: `${progress}%`,\n backgroundColor: '#2563eb',\n transition: 'width 0.3s ease',\n }} />\n </div>\n <div style={{ fontSize: 12, color: '#9ca3af', marginTop: 10 }}>\n {progress < 50 ? 'Uploading...' : progress < 90 ? 'Processing...' : 'Almost done!'}\n </div>\n </div>\n );\n }\n\n if (!file) {\n return (\n <div>\n <h3 style={{ fontSize: 18, fontWeight: 600, margin: '0 0 16px', color: '#1f2937' }}>\n Upload Your Statement\n </h3>\n <div\n onDragOver={(e) => { e.preventDefault(); setIsDragOver(true); }}\n onDragLeave={() => setIsDragOver(false)}\n onDrop={handleDrop}\n onClick={() => inputRef.current?.click()}\n style={{\n border: `2px dashed ${isDragOver ? '#2563eb' : '#d1d5db'}`,\n borderRadius: 12,\n padding: '36px 20px',\n textAlign: 'center',\n cursor: 'pointer',\n backgroundColor: isDragOver ? '#eff6ff' : '#f9fafb',\n transition: 'all 0.2s',\n }}\n >\n <input\n ref={inputRef}\n type=\"file\"\n accept=\".pdf\"\n onChange={handleFileChange}\n style={{ display: 'none' }}\n />\n <div style={{ marginBottom: 12 }}>\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#9ca3af\" strokeWidth=\"1.5\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/>\n <polyline points=\"14 2 14 8 20 8\"/>\n <line x1=\"16\" y1=\"13\" x2=\"8\" y2=\"13\"/>\n <line x1=\"16\" y1=\"17\" x2=\"8\" y2=\"17\"/>\n <polyline points=\"10 9 9 9 8 9\"/>\n </svg>\n </div>\n <p style={{ margin: 0, fontSize: 15, color: '#374151', fontWeight: 500 }}>\n Drop your CAS PDF here\n </p>\n <p style={{ margin: '6px 0 0', fontSize: 13, color: '#9ca3af' }}>\n or click to browse\n </p>\n </div>\n <div style={{ \n marginTop: 12, \n fontSize: 11, \n color: '#9ca3af', \n textAlign: 'center' \n }}>\n Supported: CAMS, KFintech, CDSL, NSDL statements\n </div>\n </div>\n );\n }\n\n return (\n <div>\n <h3 style={{ fontSize: 18, fontWeight: 600, margin: '0 0 16px', color: '#1f2937' }}>\n Enter Password\n </h3>\n \n {/* File preview */}\n <div style={{\n display: 'flex',\n alignItems: 'center',\n padding: 14,\n border: '1px solid #e5e7eb',\n borderRadius: 10,\n backgroundColor: '#f9fafb',\n marginBottom: 20,\n }}>\n <div style={{ \n width: 40, \n height: 40, \n backgroundColor: '#dbeafe', \n borderRadius: 8,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 12,\n }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#2563eb\" strokeWidth=\"2\">\n <path d=\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\"/>\n <polyline points=\"14 2 14 8 20 8\"/>\n </svg>\n </div>\n <div style={{ flex: 1, overflow: 'hidden' }}>\n <div style={{ \n fontWeight: 500, \n whiteSpace: 'nowrap', \n overflow: 'hidden', \n textOverflow: 'ellipsis',\n fontSize: 14,\n color: '#1f2937',\n }}>\n {file.name}\n </div>\n <div style={{ fontSize: 12, color: '#9ca3af' }}>\n {(file.size / 1024 / 1024).toFixed(2)} MB\n </div>\n </div>\n <button\n onClick={() => setFile(null)}\n style={{\n background: 'none',\n border: 'none',\n color: '#6b7280',\n cursor: 'pointer',\n fontSize: 13,\n textDecoration: 'underline',\n }}\n >\n Change\n </button>\n </div>\n\n {/* Password input */}\n <div style={{ marginBottom: 20 }}>\n <label style={{ \n display: 'block', \n marginBottom: 6, \n fontWeight: 500, \n fontSize: 13,\n color: '#374151',\n }}>\n PDF Password\n </label>\n <input\n type=\"password\"\n placeholder=\"Usually your PAN (e.g. ABCDE1234F)\"\n value={password}\n onChange={(e) => setPassword(e.target.value)}\n style={{\n width: '100%',\n padding: '12px 14px',\n fontSize: 16,\n border: '1px solid #d1d5db',\n borderRadius: 8,\n boxSizing: 'border-box',\n }}\n />\n <div style={{ \n fontSize: 11, \n color: '#9ca3af', \n marginTop: 6,\n display: 'flex',\n gap: 16,\n }}>\n <span>Common passwords:</span>\n <span>PAN in CAPS</span>\n <span>DOB (DDMMYYYY)</span>\n </div>\n </div>\n\n <button\n onClick={handleSubmit}\n style={{\n width: '100%',\n padding: '16px 24px',\n fontSize: 16,\n fontWeight: 600,\n backgroundColor: '#2563eb',\n color: '#fff',\n border: 'none',\n borderRadius: 8,\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n }}\n >\n Import Investments\n </button>\n </div>\n );\n};\n","import React, { useState, useEffect } from 'react';\n\ninterface FetchModeProps {\n prefill?: { pan?: string; email?: string };\n onSubmit: (pan: string, email: string) => Promise<void>;\n onBack: () => void;\n isLoading: boolean;\n}\n\nexport const FetchMode: React.FC<FetchModeProps> = ({ \n prefill, \n onSubmit, \n onBack,\n isLoading \n}) => {\n const [pan, setPan] = useState(prefill?.pan || '');\n const [email, setEmail] = useState(prefill?.email || '');\n const [error, setError] = useState('');\n\n useEffect(() => {\n if (prefill) {\n if (prefill.pan) setPan(prefill.pan);\n if (prefill.email) setEmail(prefill.email);\n }\n }, [prefill]);\n\n const validatePan = (value: string) => /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/.test(value);\n const validateEmail = (value: string) => /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(value);\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault();\n setError('');\n\n const upperPan = pan.toUpperCase();\n if (!validatePan(upperPan)) {\n setError('Invalid PAN format (e.g. ABCDE1234F)');\n return;\n }\n if (!validateEmail(email)) {\n setError('Invalid email format');\n return;\n }\n\n try {\n await onSubmit(upperPan, email);\n } catch (err: any) {\n setError(err.message || 'Failed to submit request');\n }\n };\n\n if (isLoading) {\n return (\n <div style={{ \n textAlign: 'center', \n padding: '60px 20px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}>\n <div style={{ \n width: 48, \n height: 48, \n border: '3px solid #e5e7eb',\n borderTopColor: '#2563eb',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n marginBottom: 24,\n }} />\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n <h3 style={{ margin: 0, fontSize: 18, fontWeight: 600, color: '#1f2937' }}>\n Sending Request...\n </h3>\n <p style={{ color: '#6b7280', marginTop: 8, fontSize: 14 }}>\n You'll receive your statement via email shortly\n </p>\n </div>\n );\n }\n\n return (\n <div>\n <h2 style={{ fontSize: 20, fontWeight: 700, margin: '0 0 6px', color: '#1f2937' }}>\n Request CAS via Email\n </h2>\n <p style={{ fontSize: 14, color: '#6b7280', margin: '0 0 20px', lineHeight: 1.5 }}>\n KFintech will send your statement in 2-5 minutes\n </p>\n \n {/* Info box */}\n <div style={{\n backgroundColor: '#f9fafb',\n border: '1px solid #e5e7eb',\n borderRadius: 8,\n padding: 12,\n marginBottom: 20,\n fontSize: 12,\n color: '#6b7280',\n }}>\n <strong style={{ color: '#374151' }}>Note:</strong> Use the email registered with your mutual fund investments\n </div>\n\n <form onSubmit={handleSubmit}>\n <div style={{ marginBottom: 16 }}>\n <label style={{ \n display: 'block', \n fontSize: 13, \n fontWeight: 500, \n color: '#374151',\n marginBottom: 6,\n }}>\n PAN Number\n </label>\n <input\n type=\"text\"\n value={pan}\n onChange={(e) => setPan(e.target.value.toUpperCase())}\n placeholder=\"ABCDE1234F\"\n maxLength={10}\n style={{\n width: '100%',\n height: 46,\n padding: '0 14px',\n fontSize: 16,\n border: '1px solid #d1d5db',\n borderRadius: 8,\n boxSizing: 'border-box',\n textTransform: 'uppercase',\n }}\n />\n </div>\n\n <div style={{ marginBottom: 20 }}>\n <label style={{ \n display: 'block', \n fontSize: 13, \n fontWeight: 500, \n color: '#374151',\n marginBottom: 6,\n }}>\n Email Address\n </label>\n <input\n type=\"email\"\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n placeholder=\"you@example.com\"\n style={{\n width: '100%',\n height: 46,\n padding: '0 14px',\n fontSize: 16,\n border: '1px solid #d1d5db',\n borderRadius: 8,\n boxSizing: 'border-box',\n }}\n />\n <div style={{ fontSize: 11, color: '#9ca3af', marginTop: 4 }}>\n Statement will be sent to this email\n </div>\n </div>\n\n {error && (\n <div style={{ \n color: '#dc2626', \n fontSize: 13, \n marginBottom: 16,\n padding: '10px 12px',\n backgroundColor: '#fef2f2',\n border: '1px solid #fecaca',\n borderRadius: 8,\n }}>\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n style={{\n width: '100%',\n height: 50,\n fontSize: 16,\n fontWeight: 600,\n backgroundColor: '#2563eb',\n color: '#fff',\n border: 'none',\n borderRadius: 8,\n cursor: 'pointer',\n transition: 'background-color 0.2s',\n }}\n >\n Request Statement\n </button>\n\n <div style={{ textAlign: 'center', marginTop: 16 }}>\n <button\n type=\"button\"\n onClick={onBack}\n style={{\n background: 'none',\n border: 'none',\n color: '#6b7280',\n fontSize: 13,\n cursor: 'pointer',\n textDecoration: 'underline',\n }}\n >\n ← I already have my file\n </button>\n </div>\n </form>\n </div>\n );\n};\n","import React, { useState, useEffect } from 'react';\n\ntype Step = 'INPUT' | 'OTP' | 'LOADING' | 'SUCCESS' | 'ERROR';\n\ninterface CDSLFetchModeProps {\n prefill?: { pan?: string; boId?: string; dob?: string };\n onRequestOtp: (pan: string, boId: string, dob: string) => Promise<string>; // Returns session_id\n onVerifyOtp: (sessionId: string, otp: string, pan: string) => Promise<void>; // pan passed for statement password\n onBack: () => void;\n}\n\nexport const CDSLFetchMode: React.FC<CDSLFetchModeProps> = ({\n prefill,\n onRequestOtp,\n onVerifyOtp,\n onBack,\n}) => {\n const [step, setStep] = useState<Step>('INPUT');\n const [pan, setPan] = useState(prefill?.pan || '');\n const [boId, setBoId] = useState(prefill?.boId || '');\n const [dob, setDob] = useState(prefill?.dob || '');\n const [otp, setOtp] = useState('');\n const [sessionId, setSessionId] = useState('');\n const [error, setError] = useState('');\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (prefill) {\n if (prefill.pan) setPan(prefill.pan);\n if (prefill.boId) setBoId(prefill.boId);\n if (prefill.dob) setDob(prefill.dob);\n }\n }, [prefill]);\n\n const validatePan = (value: string) => /^[A-Z]{5}[0-9]{4}[A-Z]{1}$/.test(value);\n const validateBoId = (value: string) => /^\\d{16}$/.test(value);\n const validateDob = (value: string) => /^\\d{4}-\\d{2}-\\d{2}$/.test(value);\n\n const handleRequestOtp = async (e: React.FormEvent) => {\n e.preventDefault();\n setError('');\n\n const upperPan = pan.toUpperCase();\n if (!validatePan(upperPan)) {\n setError('Invalid PAN format (e.g. ABCDE1234F)');\n return;\n }\n if (!validateBoId(boId)) {\n setError('BO ID must be 16 digits');\n return;\n }\n if (!validateDob(dob)) {\n setError('Date of birth must be YYYY-MM-DD');\n return;\n }\n\n setIsLoading(true);\n try {\n const sid = await onRequestOtp(upperPan, boId, dob);\n setSessionId(sid);\n setStep('OTP');\n } catch (err: any) {\n setError(err.message || 'Failed to request OTP');\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleVerifyOtp = async (e: React.FormEvent) => {\n e.preventDefault();\n setError('');\n\n if (otp.length !== 4) {\n setError('Please enter the 4-digit OTP');\n return;\n }\n\n setIsLoading(true);\n setStep('LOADING');\n try {\n await onVerifyOtp(sessionId, otp, pan.toUpperCase()); // Pass PAN as password for parsing\n setStep('SUCCESS');\n } catch (err: any) {\n setError(err.message || 'Something went wrong. Please try again.');\n setStep('ERROR');\n setIsLoading(false);\n }\n };\n\n // Error state with retry\n if (step === 'ERROR') {\n return (\n <div style={{\n textAlign: 'center',\n padding: '40px 20px',\n }}>\n <div style={{\n width: 56,\n height: 56,\n backgroundColor: '#fef2f2',\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 20px',\n }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#dc2626\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\n </svg>\n </div>\n <h3 style={{ margin: '0 0 8px', fontSize: 18, fontWeight: 600, color: '#1f2937' }}>\n Import Failed\n </h3>\n <p style={{ color: '#6b7280', fontSize: 14, margin: '0 0 24px', lineHeight: 1.5 }}>\n {error || 'Something went wrong while fetching your portfolio.'}\n </p>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <button\n onClick={() => { setStep('OTP'); setError(''); setOtp(''); }}\n style={{\n width: '100%',\n height: 46,\n fontSize: 15,\n fontWeight: 600,\n backgroundColor: '#2563eb',\n color: '#fff',\n border: 'none',\n borderRadius: 8,\n cursor: 'pointer',\n }}\n >\n Try Again\n </button>\n <button\n onClick={() => { setStep('INPUT'); setError(''); setOtp(''); }}\n style={{\n width: '100%',\n height: 46,\n fontSize: 15,\n fontWeight: 500,\n backgroundColor: '#fff',\n color: '#6b7280',\n border: '1px solid #e5e7eb',\n borderRadius: 8,\n cursor: 'pointer',\n }}\n >\n Start Over\n </button>\n </div>\n </div>\n );\n }\n\n // Loading state\n if (step === 'LOADING') {\n return (\n <div style={{\n textAlign: 'center',\n padding: '60px 20px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}>\n <div style={{\n width: 48,\n height: 48,\n border: '3px solid #e5e7eb',\n borderTopColor: '#2563eb',\n borderRadius: '50%',\n animation: 'spin 1s linear infinite',\n marginBottom: 24,\n }} />\n <style>{`@keyframes spin { to { transform: rotate(360deg); } }`}</style>\n <h3 style={{ margin: 0, fontSize: 18, fontWeight: 600, color: '#1f2937' }}>\n Importing Your Portfolio\n </h3>\n <p style={{ color: '#6b7280', marginTop: 8, fontSize: 14 }}>\n Securely fetching your holdings...\n </p>\n </div>\n );\n }\n\n // Success state\n if (step === 'SUCCESS') {\n return (\n <div style={{\n textAlign: 'center',\n padding: '40px 20px',\n }}>\n <div style={{\n width: 56,\n height: 56,\n backgroundColor: '#dcfce7',\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n margin: '0 auto 20px',\n }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#16a34a\" strokeWidth=\"2.5\">\n <polyline points=\"20 6 9 17 4 12\"/>\n </svg>\n </div>\n <h3 style={{ margin: '0 0 8px', fontSize: 20, fontWeight: 600, color: '#1f2937' }}>\n Portfolio Imported!\n </h3>\n <p style={{ color: '#6b7280', fontSize: 14, margin: 0 }}>\n Your demat holdings are now available\n </p>\n </div>\n );\n }\n\n // OTP input step\n if (step === 'OTP') {\n return (\n <div>\n <h2 style={{ fontSize: 20, fontWeight: 700, margin: '0 0 6px', color: '#1f2937' }}>\n Verify OTP\n </h2>\n <p style={{ fontSize: 14, color: '#6b7280', margin: '0 0 20px', lineHeight: 1.5 }}>\n CDSL has sent an OTP to your registered mobile\n </p>\n\n <form onSubmit={handleVerifyOtp}>\n <div style={{ marginBottom: 20 }}>\n <label style={{\n display: 'block',\n fontSize: 13,\n fontWeight: 500,\n color: '#374151',\n marginBottom: 6,\n }}>\n OTP Code\n </label>\n <input\n type=\"text\"\n value={otp}\n onChange={(e) => setOtp(e.target.value.replace(/\\D/g, '').slice(0, 4))}\n placeholder=\"••••\"\n maxLength={4}\n autoFocus\n style={{\n width: '100%',\n height: 50,\n padding: '0 14px',\n fontSize: 20,\n fontWeight: 600,\n letterSpacing: 8,\n textAlign: 'center',\n border: '1px solid #d1d5db',\n borderRadius: 8,\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {error && (\n <div style={{\n color: '#dc2626',\n fontSize: 13,\n marginBottom: 16,\n padding: '10px 12px',\n backgroundColor: '#fef2f2',\n border: '1px solid #fecaca',\n borderRadius: 8,\n }}>\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n style={{\n width: '100%',\n height: 50,\n fontSize: 16,\n fontWeight: 600,\n backgroundColor: isLoading ? '#93c5fd' : '#2563eb',\n color: '#fff',\n border: 'none',\n borderRadius: 8,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n }}\n >\n {isLoading ? 'Verifying...' : 'Import Portfolio'}\n </button>\n\n <div style={{ textAlign: 'center', marginTop: 16 }}>\n <button\n type=\"button\"\n onClick={() => { setStep('INPUT'); setError(''); }}\n style={{\n background: 'none',\n border: 'none',\n color: '#6b7280',\n fontSize: 13,\n cursor: 'pointer',\n textDecoration: 'underline',\n }}\n >\n ← Go back\n </button>\n </div>\n </form>\n </div>\n );\n }\n\n // Input step (default)\n return (\n <div>\n <h2 style={{ fontSize: 20, fontWeight: 700, margin: '0 0 6px', color: '#1f2937' }}>\n Import from CDSL\n </h2>\n <p style={{ fontSize: 14, color: '#6b7280', margin: '0 0 20px', lineHeight: 1.5 }}>\n Securely fetch your demat holdings\n </p>\n\n <div style={{\n backgroundColor: '#f9fafb',\n border: '1px solid #e5e7eb',\n borderRadius: 8,\n padding: 12,\n marginBottom: 20,\n fontSize: 12,\n color: '#6b7280',\n }}>\n <strong style={{ color: '#374151' }}>Where to find BO ID:</strong> Check your broker app under Demat Details, or any CDSL statement\n </div>\n\n <form onSubmit={handleRequestOtp}>\n <div style={{ marginBottom: 16 }}>\n <label style={{\n display: 'block',\n fontSize: 13,\n fontWeight: 500,\n color: '#374151',\n marginBottom: 6,\n }}>\n PAN Number\n </label>\n <input\n type=\"text\"\n value={pan}\n onChange={(e) => setPan(e.target.value.toUpperCase())}\n placeholder=\"ABCDE1234F\"\n maxLength={10}\n style={{\n width: '100%',\n height: 46,\n padding: '0 14px',\n fontSize: 16,\n border: '1px solid #d1d5db',\n borderRadius: 8,\n boxSizing: 'border-box',\n textTransform: 'uppercase',\n }}\n />\n </div>\n\n <div style={{ marginBottom: 16 }}>\n <label style={{\n display: 'block',\n fontSize: 13,\n fontWeight: 500,\n color: '#374151',\n marginBottom: 6,\n }}>\n BO ID (16 digits)\n </label>\n <input\n type=\"text\"\n value={boId}\n onChange={(e) => setBoId(e.target.value.replace(/\\D/g, '').slice(0, 16))}\n placeholder=\"1234567890123456\"\n maxLength={16}\n style={{\n width: '100%',\n height: 46,\n padding: '0 14px',\n fontSize: 16,\n border: '1px solid #d1d5db',\n borderRadius: 8,\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n <div style={{ marginBottom: 20 }}>\n <label style={{\n display: 'block',\n fontSize: 13,\n fontWeight: 500,\n color: '#374151',\n marginBottom: 6,\n }}>\n Date of Birth\n </label>\n <input\n type=\"date\"\n value={dob}\n onChange={(e) => setDob(e.target.value)}\n style={{\n width: '100%',\n height: 46,\n padding: '0 14px',\n fontSize: 16,\n border: '1px solid #d1d5db',\n borderRadius: 8,\n boxSizing: 'border-box',\n }}\n />\n </div>\n\n {error && (\n <div style={{\n color: '#dc2626',\n fontSize: 13,\n marginBottom: 16,\n padding: '10px 12px',\n backgroundColor: '#fef2f2',\n border: '1px solid #fecaca',\n borderRadius: 8,\n }}>\n {error}\n </div>\n )}\n\n <button\n type=\"submit\"\n disabled={isLoading}\n style={{\n width: '100%',\n height: 50,\n fontSize: 16,\n fontWeight: 600,\n backgroundColor: isLoading ? '#93c5fd' : '#2563eb',\n color: '#fff',\n border: 'none',\n borderRadius: 8,\n cursor: isLoading ? 'not-allowed' : 'pointer',\n }}\n >\n {isLoading ? 'Requesting OTP...' : 'Request OTP'}\n </button>\n\n <div style={{ textAlign: 'center', marginTop: 16 }}>\n <button\n type=\"button\"\n onClick={onBack}\n style={{\n background: 'none',\n border: 'none',\n color: '#6b7280',\n fontSize: 13,\n cursor: 'pointer',\n textDecoration: 'underline',\n }}\n >\n ← I already have my file\n </button>\n </div>\n </form>\n </div>\n );\n};\n","const DEFAULT_API_URL = 'https://portfolio-parser.api.casparser.in';\nconst DEFAULT_AUTH_URL = 'https://client-apis.casparser.in';\n\nexport interface ApiClient {\n baseUrl: string;\n apiKey: string;\n}\n\n/**\n * Creates an API client for making requests to CASParser API.\n * \n * @param accessToken - Your access token (get one at docs.casparser.in)\n * @param baseUrl - Optional custom API base URL\n * @returns API client instance\n */\nexport function createApiClient(accessToken: string, baseUrl?: string): ApiClient {\n return {\n baseUrl: baseUrl || DEFAULT_API_URL,\n apiKey: accessToken,\n };\n}\n\nexport interface AccessTokenResponse {\n access_token: string;\n token_type: 'api_key'; // Drop-in replacement for x-api-key header\n expires_in: number;\n}\n\n/**\n * Request a short-lived access token from the API key.\n * Use this on your backend to generate tokens for frontend use.\n * \n * @param apiKey - Your API key (do NOT expose this on frontend)\n * @param expiryMinutes - Token validity in minutes (max 60, default 60)\n * @param authUrl - Optional custom auth URL\n * @returns Access token response with SK_ prefixed token\n */\nexport async function requestAccessToken(\n apiKey: string,\n expiryMinutes: number = 60,\n authUrl?: string\n): Promise<AccessTokenResponse> {\n const url = authUrl || DEFAULT_AUTH_URL;\n \n const response = await fetch(`${url}/v1/access-token`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': apiKey,\n },\n body: JSON.stringify({\n expiry_minutes: Math.min(expiryMinutes, 60),\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw new Error(errorData.detail || errorData.message || 'Failed to get access token');\n }\n\n return response.json();\n}\n\n/**\n * Check if a token is an access token (SK_ prefix)\n */\nexport function isAccessToken(token: string): boolean {\n return token?.startsWith('SK_') || false;\n}\n\nexport async function parseStatement(\n client: ApiClient,\n file: File,\n password?: string,\n onProgress?: (percent: number) => void\n): Promise<any> {\n const formData = new FormData();\n formData.append('pdf_file', file);\n if (password) {\n formData.append('password', password);\n }\n\n // Simulate progress since fetch doesn't support upload progress natively\n if (onProgress) {\n onProgress(30);\n }\n\n const response = await fetch(`${client.baseUrl}/v4/smart/parse`, {\n method: 'POST',\n headers: {\n 'x-api-key': client.apiKey,\n 'Authorization': `Token ${client.apiKey}`,\n },\n body: formData,\n });\n\n if (onProgress) {\n onProgress(80);\n }\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw { response: { data: errorData }, message: errorData.msg || 'Request failed' };\n }\n\n return response.json();\n}\n\n/**\n * Parse a statement from a URL (used for CDSL fetch results)\n */\nexport async function parseStatementFromUrl(\n client: ApiClient,\n pdfUrl: string,\n password?: string,\n onProgress?: (percent: number) => void\n): Promise<any> {\n if (onProgress) {\n onProgress(30);\n }\n\n const body: Record<string, string> = { pdf_url: pdfUrl };\n if (password) {\n body.password = password;\n }\n\n const response = await fetch(`${client.baseUrl}/v4/smart/parse`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': client.apiKey,\n 'Authorization': `Token ${client.apiKey}`,\n },\n body: JSON.stringify(body),\n });\n\n if (onProgress) {\n onProgress(80);\n }\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw { response: { data: errorData }, message: errorData.msg || 'Request failed' };\n }\n\n return response.json();\n}\n\nexport interface GeneratorOptions {\n fromDate?: string;\n toDate?: string;\n password?: string;\n}\n\nexport async function generateCAS(\n client: ApiClient,\n email: string,\n pan: string,\n options?: GeneratorOptions\n): Promise<any> {\n // Format dates as YYYY-MM-DD per API spec\n const today = new Date();\n const toDate = options?.toDate || today.toISOString().split('T')[0];\n const fromDate = options?.fromDate || '2000-01-01';\n const password = options?.password || 'Abcdefghi12$';\n \n // Using the /v4/generate endpoint from portfolio-tracking\n const response = await fetch(`${client.baseUrl}/v4/generate`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': client.apiKey,\n 'Authorization': `Token ${client.apiKey}`,\n },\n body: JSON.stringify({\n email,\n pan_no: pan,\n from_date: fromDate,\n to_date: toDate,\n password,\n cas_authority: 'kfintech',\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw { response: { data: errorData }, message: errorData.msg || errorData.message || 'Request failed' };\n }\n\n return response.json();\n}\n\n// ============================================\n// CDSL Fetch API (2-step OTP flow)\n// ============================================\n\nexport interface CdslFetchResponse {\n status: string;\n session_id: string;\n msg: string;\n}\n\nexport interface CdslVerifyResponse {\n status: string;\n msg: string;\n files: Array<{ filename: string; url: string }>;\n}\n\nexport async function cdslFetchRequestOtp(\n client: ApiClient,\n pan: string,\n boId: string,\n dob: string\n): Promise<CdslFetchResponse> {\n const response = await fetch(`${client.baseUrl}/v4/cdsl/fetch`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': client.apiKey,\n 'Authorization': `Token ${client.apiKey}`,\n },\n body: JSON.stringify({\n pan: pan.toUpperCase(),\n bo_id: boId,\n dob,\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw { response: { data: errorData }, message: errorData.msg || 'Failed to request OTP' };\n }\n\n return response.json();\n}\n\nexport async function cdslFetchVerifyOtp(\n client: ApiClient,\n sessionId: string,\n otp: string,\n numPeriods: number = 6\n): Promise<CdslVerifyResponse> {\n const response = await fetch(`${client.baseUrl}/v4/cdsl/fetch/${sessionId}/verify`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-api-key': client.apiKey,\n 'Authorization': `Token ${client.apiKey}`,\n },\n body: JSON.stringify({\n otp,\n num_periods: numPeriods,\n }),\n });\n\n if (!response.ok) {\n const errorData = await response.json().catch(() => ({}));\n throw { response: { data: errorData }, message: errorData.msg || 'Failed to verify OTP' };\n }\n\n return response.json();\n}\n","import React, { useState, useEffect, useRef } from 'react';\nimport { Modal } from './Modal';\nimport { ShortcutLinks } from './ShortcutLinks';\nimport { UploadZone } from './UploadZone';\nimport { FetchMode } from './FetchMode';\nimport { CDSLFetchMode } from './CDSLFetchMode';\nimport { createApiClient, parseStatement, parseStatementFromUrl, generateCAS, cdslFetchRequestOtp, cdslFetchVerifyOtp } from '../utils/api';\nimport type { \n PortfolioConnectConfig, \n PortfolioType,\n ParsedData, \n PortfolioConnectEvent, \n PortfolioConnectError,\n BrokerInfo,\n // Backward compatible aliases used internally\n CASType,\n CASConnectEvent,\n CASConnectError,\n} from '../types';\n\nconst DEFAULT_LOGO_URL = 'https://casparser.in/assets/images/section-navigation01-image01.png';\nconst BROKER_LOGO_BASE = 'https://assets.smallcase.com/smallcase/assets/brokerLogo/small';\n\nconst CAS_PORTALS: Record<CASType, { name: string; url: string }> = {\n 'CAMS_KFINTECH': { name: 'KFintech', url: 'https://mfs.kfintech.com/investor/General/ConsolidatedAccountStatement' },\n 'CDSL': { name: 'CDSL', url: 'https://www.cdslindia.com/cas/logincas.aspx' },\n 'NSDL': { name: 'NSDL', url: 'https://nsdlcas.nsdl.com/' },\n};\n\n// Default broker list with logos (can be overridden via config.brokers)\nconst DEFAULT_BROKERS: BrokerInfo[] = ([\n { name: 'Zerodha', depository: 'CDSL' as const, logo: `${BROKER_LOGO_BASE}/kite.svg` },\n { name: 'Groww', depository: 'CDSL' as const, logo: `${BROKER_LOGO_BASE}/groww.svg` },\n { name: 'Angel One', depository: 'CDSL' as const, logo: `${BROKER_LOGO_BASE}/angelbroking.svg` },\n { name: 'Upstox', depository: 'CDSL' as const, logo: `${BROKER_LOGO_BASE}/upstox.svg` },\n { name: '5paisa', depository: 'CDSL' as const, logo: `${BROKER_LOGO_BASE}/fivepaisa.svg` },\n { name: 'Dhan', depository: 'CDSL' as const, logo: `${BROKER_LOGO_BASE}/dhan.svg` },\n { name: 'Alice Blue', depository: 'CDSL' as const, logo: `${BROKER_LOGO_BASE}/aliceblue.svg` },\n { name: 'Fisdom', depository: 'CDSL' as const, logo: `${BROKER_LOGO_BASE}/fisdom.svg` },\n { name: 'FundzBazar', depository: 'CDSL' as const, logo: `${BROKER_LOGO_BASE}/fundzbazar.svg` },\n { name: 'HDFC SKY', depository: 'CDSL' as const, logo: `${BROKER_LOGO_BASE}/hdfcsky.svg` },\n { name: 'ICICI Direct', depository: 'NSDL' as const, logo: `${BROKER_LOGO_BASE}/icici.svg` },\n { name: 'HDFC Securities', depository: 'NSDL' as const, logo: `${BROKER_LOGO_BASE}/hdfc.svg` },\n { name: 'Kotak Securities', depository: 'NSDL' as const, logo: `${BROKER_LOGO_BASE}/kotak.svg` },\n { name: 'SBI Securities', depository: 'NSDL' as const, logo: `${BROKER_LOGO_BASE}/sbi.svg` },\n { name: 'Motilal Oswal', depository: 'NSDL' as const, logo: `${BROKER_LOGO_BASE}/motilal.svg` },\n { name: 'IIFL Capital', depository: 'NSDL' as const, logo: `${BROKER_LOGO_BASE}/iifl.svg` },\n { name: 'Nuvama Wealth', depository: 'NSDL' as const, logo: `${BROKER_LOGO_BASE}/edelweiss.svg` },\n { name: 'Trustline', depository: 'NSDL' as const, logo: `${BROKER_LOGO_BASE}/trustline.svg` },\n { name: 'AxisDirect', depository: 'NSDL' as const, logo: `${BROKER_LOGO_BASE}/axis.svg` },\n]).sort((a, b) => a.name.localeCompare(b.name));\n\ninterface PortfolioConnectWidgetProps {\n isOpen: boolean;\n onClose: () => void;\n apiKey: string;\n apiBaseUrl?: string;\n config?: PortfolioConnectConfig;\n onSuccess: (data: ParsedData, metadata: any) => void;\n onError?: (error: PortfolioConnectError) => void;\n onEvent?: (event: PortfolioConnectEvent, metadata: any) => void;\n}\n\ntype WidgetMode = 'LOCATE' | 'MF_OPTIONS' | 'SELECT_BROKER' | 'DEMAT_OPTIONS' | 'UPLOAD' | 'FETCH' | 'CDSL_FETCH';\n\nexport const PortfolioConnectWidget: React.FC<PortfolioConnectWidgetProps> = ({\n isOpen,\n onClose,\n apiKey,\n apiBaseUrl,\n config = {},\n onSuccess,\n onError,\n onEvent,\n}) => {\n const [mode, setMode] = useState<WidgetMode>('LOCATE');\n const [selectedType, setSelectedType] = useState<CASType>('CAMS_KFINTECH');\n const [isProcessing, setIsProcessing] = useState(false);\n const [progress, setProgress] = useState(0);\n const [fetchLoading, setFetchLoading] = useState(false);\n const [lastError, setLastError] = useState<CASConnectError | null>(null);\n const [selectedBroker, setSelectedBroker] = useState<string | null>(null);\n \n // Use ref to avoid stale closure issues and prevent infinite loops\n const onEventRef = useRef(onEvent);\n onEventRef.current = onEvent;\n \n // Track progress interval for cleanup on unmount\n const progressIntervalRef = useRef<NodeJS.Timeout | null>(null);\n \n // Cleanup interval on unmount to prevent memory leaks\n useEffect(() => {\n return () => {\n if (progressIntervalRef.current) {\n clearInterval(progressIntervalRef.current);\n progressIntervalRef.current = null;\n }\n };\n }, []);\n\n const apiClient = createApiClient(apiKey, apiBaseUrl);\n\n const emitEvent = (event: CASConnectEvent, metadata: any = {}) => {\n onEventRef.current?.(event, { timestamp: Date.now(), ...metadata });\n };\n\n // Determine allowed types from config, default to all\n const allowedTypes = config.allowedTypes || ['CAMS_KFINTECH', 'CDSL', 'NSDL'];\n const showGenerator = config.enableGenerator && selectedType === 'CAMS_KFINTECH';\n const showCdslFetch = config.enableCdslFetch && selectedType === 'CDSL';\n const showShortcuts = config.showShortcuts !== false; // Default true\n const showPortalLinks = config.showPortalLinks !== false; // Default true\n\n useEffect(() => {\n if (isOpen) {\n // Always start at home (LOCATE) screen\n const firstType = allowedTypes[0] || 'CAMS_KFINTECH';\n setSelectedType(firstType);\n setMode('LOCATE');\n setIsProcessing(false);\n setProgress(0);\n setLastError(null); // Clear any previous errors\n emitEvent('WIDGET_OPENED');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isOpen]);\n\n const handleClose = () => {\n emitEvent('WIDGET_CLOSED');\n onClose();\n };\n\n const handleModeSwitch = (newMode: WidgetMode) => {\n setMode(newMode);\n emitEvent('MODE_SWITCHED', { from: mode, to: newMode });\n };\n\n const handleBrokerSelect = (broker: BrokerInfo | null) => {\n if (broker) {\n setSelectedBroker(broker.name);\n setSelectedType(broker.depository);\n emitEvent('BROKER_SELECTED', { broker: broker.name, depository: broker.depository });\n // If CDSL and CDSL fetch is enabled, show options\n if (broker.depository === 'CDSL' && config.enableCdslFetch) {\n setMode('DEMAT_OPTIONS');\n } else {\n setMode('UPLOAD');\n }\n } else {\n // \"Other\" selected - let user choose depository manually\n setSelectedBroker('Other');\n }\n };\n\n const handleManualDepositorySelect = (depository: 'CDSL' | 'NSDL') => {\n setSelectedType(depository);\n emitEvent('BROKER_SELECTED', { broker: 'Other', depository });\n // If CDSL and CDSL fetch is enabled, show options\n if (depository === 'CDSL' && config.enableCdslFetch) {\n setMode('DEMAT_OPTIONS');\n } else {\n setMode('UPLOAD');\n }\n };\n\n const handleFileProcess = async (file: File, password: string) => {\n setIsProcessing(true);\n setProgress(10);\n emitEvent('UPLOAD_STARTED', { filename: file.name, size: file.size });\n\n progressIntervalRef.current = setInterval(() => {\n setProgress(prev => Math.min(prev + Math.random() * 10, 90));\n }, 500);\n\n try {\n const startTime = Date.now();\n const response = await parseStatement(\n apiClient,\n file,\n password,\n (percent) => setProgress(percent)\n );\n\n if (progressIntervalRef.current) {\n clearInterval(progressIntervalRef.current);\n progressIntervalRef.current = null;\n }\n setProgress(100);\n\n const metadata = {\n filename: file.name,\n parser_type: response.cas_author || 'AUTO',\n parse_duration_ms: Date.now() - startTime,\n };\n\n emitEvent('PARSE_SUCCESS', metadata);\n\n setTimeout(() => {\n onSuccess(response, metadata);\n handleClose();\n }, 500);\n\n } catch (error: any) {\n if (progressIntervalRef.current) {\n clearInterval(progressIntervalRef.current);\n progressIntervalRef.current = null;\n }\n setIsProcessing(false);\n setProgress(0);\n\n const casError: CASConnectError = {\n code: 'PARSE_ERROR',\n message: error.response?.data?.msg || error.message || 'Failed to parse statement',\n details: error.response?.data,\n };\n\n emitEvent('PARSE_ERROR', { error: casError });\n setLastError(casError); // Show error in widget, let user retry\n onError?.(casError);\n }\n };\n\n const handleRetry = () => {\n setLastError(null);\n setMode('UPLOAD');\n };\n\n const handleFetchSubmit = async (pan: string, email: string) => {\n setFetchLoading(true);\n emitEvent('GENERATOR_STARTED', { pan: pan.slice(0, 4) + '***' });\n\n try {\n // Pass generator config options (dateRange, password) if provided\n await generateCAS(apiClient, email, pan, config.generator);\n emitEvent('GENERATOR_SUCCESS');\n setFetchLoading(false);\n handleModeSwitch('LOCATE');\n } catch (error: any) {\n setFetchLoading(false);\n const casError: CASConnectError = {\n code: 'GENERATOR_ERROR',\n message: error.response?.data?.message || error.message || 'Failed to request statement',\n details: error.response?.data,\n };\n emitEvent('GENERATOR_ERROR', { error: casError });\n throw new Error(casError.message);\n }\n };\n\n // CDSL Fetch handlers\n const handleCdslRequestOtp = async (pan: string, boId: string, dob: string): Promise<string> => {\n emitEvent('CDSL_FETCH_STARTED', { pan: pan.slice(0, 4) + '***' });\n \n try {\n const response = await cdslFetchRequestOtp(apiClient, pan, boId, dob);\n emitEvent('CDSL_OTP_SENT', { session_id: response.session_id });\n return response.session_id;\n } catch (error: any) {\n const casError: CASConnectError = {\n code: 'CDSL_FETCH_ERROR',\n message: error.message || 'Failed to request OTP',\n details: error.response?.data,\n };\n emitEvent('CDSL_FETCH_ERROR', { error: casError });\n throw new Error(casError.message);\n }\n };\n\n const handleCdslVerifyOtp = async (sessionId: string, otp: string, pan: string): Promise<void> => {\n try {\n const response = await cdslFetchVerifyOtp(apiClient, sessionId, otp);\n emitEvent('CDSL_OTP_VERIFIED');\n \n // Files are ready - emit event with all file URLs for developer interception\n emitEvent('CDSL_FETCH_SUCCESS', { \n files: response.files,\n count: response.files.length,\n });\n \n // Auto-parse the most recent file (first in list) - PAN is the password\n await handleCdslAutoParse(response.files, pan);\n } catch (error: any) {\n const casError: CASConnectError = {\n code: 'CDSL_FETCH_ERROR',\n message: error.message || 'Failed to verify OTP',\n details: error.response?.data,\n };\n emitEvent('CDSL_FETCH_ERROR', { error: casError });\n throw new Error(casError.message);\n }\n };\n\n const handleCdslAutoParse = async (files: Array<{ filename: string; url: string }>, pan: string) => {\n if (!files || files.length === 0) {\n const casError: CASConnectError = {\n code: 'CDSL_FETCH_ERROR',\n message: 'No files returned from CDSL',\n };\n emitEvent('CDSL_FETCH_ERROR', { error: casError });\n onError?.(casError);\n return;\n }\n\n // Use the first (most recent) file\n const targetFile = files[0];\n setIsProcessing(true);\n setProgress(10);\n emitEvent('PARSE_STARTED', { filename: targetFile.filename, source: 'CDSL_FETCH' });\n\n try {\n const startTime = Date.now();\n \n // Parse via URL - smart parse API accepts pdf_url, PAN is the password\n const response = await parseStatementFromUrl(\n apiClient,\n targetFile.url,\n pan, // CDSL files are password protected with PAN\n (percent) => setProgress(percent)\n );\n\n setProgress(100);\n\n const metadata = {\n filename: targetFile.filename,\n parser_type: response.cas_author || 'CDSL',\n parse_duration_ms: Date.now() - startTime,\n source: 'CDSL_FETCH',\n all_files: files, // Include all file URLs for developer reference\n };\n\n emitEvent('PARSE_SUCCESS', metadata);\n\n setTimeout(() => {\n onSuccess(response, metadata);\n handleClose();\n }, 500);\n\n } catch (error: any) {\n setIsProcessing(false);\n setProgress(0);\n\n const casError: CASConnectError = {\n code: 'PARSE_ERROR',\n message: error.response?.data?.msg || error.message || 'Failed to parse CDSL statement',\n details: { ...error.response?.data, files },\n };\n\n emitEvent('PARSE_ERROR', { error: casError });\n onError?.(casError);\n }\n };\n\n const renderContent = () => {\n // Show error with retry option - don't crash the widget\n if (lastError) {\n return (\n <div style={{ textAlign: 'center', padding: '20px 0' }}>\n <div style={{ \n width: 56, \n height: 56, \n backgroundColor: '#fef2f2', \n borderRadius: '50%', \n display: 'flex', \n alignItems: 'center', \n justifyContent: 'center',\n margin: '0 auto 16px',\n }}>\n <svg width=\"28\" height=\"28\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"#dc2626\" strokeWidth=\"2\">\n <circle cx=\"12\" cy=\"12\" r=\"10\"/>\n <line x1=\"12\" y1=\"8\" x2=\"12\" y2=\"12\"/>\n <line x1=\"12\" y1=\"16\" x2=\"12.01\" y2=\"16\"/>\n </svg>\n </div>\n <h3 style={{ fontSize: 18, fontWeight: 600, color: '#111827', margin: '0 0 8px' }}>\n Something went wrong\n </h3>\n <p style={{ fontSize: 14, color: '#6b7280', margin: '0 0 20px', lineHeight: 1.5 }}>\n {lastError.message}\n </p>\n <div style={{ display: 'flex', gap: 12, justifyContent: 'center' }}>\n <button\n onClick={handleRetry}\n style={{\n padding: '12px 24px',\n fontSize: 14,\n fontWeight: 600,\n backgroundColor: '#2563eb',\n color: '#fff',\n border: 'none',\n borderRadius: 8,\n cursor: 'pointer',\n }}\n >\n Try Again\n </button>\n <button\n onClick={handleClose}\n style={{\n padding: '12px 24px',\n fontSize: 14,\n fontWeight: 500,\n backgroundColor: '#f3f4f6',\n color: '#374151',\n border: 'none',\n borderRadius: 8,\n cursor: 'pointer',\n }}\n >\n Close\n </button>\n </div>\n </div>\n );\n }\n\n if (mode === 'FETCH' && config.enableGenerator) {\n return (\n <FetchMode\n prefill={config.prefill}\n onSubmit={handleFetchSubmit}\n onBack={() => handleModeSwitch('LOCATE')}\n isLoading={fetchLoading}\n />\n );\n }\n\n if (mode === 'CDSL_FETCH' && config.enableCdslFetch) {\n return (\n <CDSLFetchMode\n prefill={config.prefill}\n onRequestOtp={handleCdslRequestOtp}\n onVerifyOtp={handleCdslVerifyOtp}\n onBack={() => handleModeSwitch('LOCATE')}\n />\n );\n }\n\n if (mode === 'UPLOAD') {\n const currentPortal = CAS_PORTALS[selectedType];\n return (\n <div>\n <UploadZone\n onFileSelect={handleFileProcess}\n isProcessing={isProcessing}\n progress={progress}\n />\n \n {/* Show shortcuts only on upload screen when relevant */}\n {showShortcuts && (\n <div style={{ marginTop: 16 }}>\n <ShortcutLinks \n selectedType={selectedType}\n onSearchClick={(provider) => emitEvent('SEARCH_CLICKED', { provider })} \n />\n </div>\n )}\n \n {/* Portal link */}\n {showPortalLinks && (\n <div style={{ marginTop: 16, textAlign: 'center' }}>\n <a\n href={currentPortal.url}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n onClick={() => emitEvent('PORTAL_CLICKED', { portal: selectedType })}\n style={{ textDecoration: 'none', color: '#6b7280', fontSize: 13 }}\n >\n Don't have your statement? <span style={{ color: '#2563eb' }}>Download from {currentPortal.name}</span>\n </a>\n </div>\n )}\n </div>\n );\n }\n\n // MF_OPTIONS mode - show upload or KFintech eCAS options\n if (mode === 'MF_OPTIONS') {\n return (\n <div>\n <div style={{ textAlign: 'center', marginBottom: 20 }}>\n <h3 style={{ fontSize: 18, fontWeight: 600, color: '#111827', margin: '0 0 8px' }}>\n Mutual Funds\n </h3>\n <p style={{ fontSize: 14, color: '#6b7280', margin: 0 }}>\n CAMS & KFintech consolidated statement\n </p>\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <button\n onClick={() => handleModeSwitch('UPLOAD')}\n style={{\n width: '100%',\n padding: '16px 20px',\n fontSize: 15,\n fontWeight: 600,\n backgroundColor: '#2563eb',\n color: '#fff',\n border: 'none',\n borderRadius: 12,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <span style={{ display: 'block' }}>Upload Statement</span>\n <span style={{ fontSize: 12, fontWeight: 400, opacity: 0.85 }}>\n I have my CAS PDF file\n </span>\n </button>\n \n {config.enableGenerator && (\n <button\n onClick={() => handleModeSwitch('FETCH')}\n style={{\n width: '100%',\n padding: '16px 20px',\n fontSize: 15,\n fontWeight: 600,\n backgroundColor: '#fff',\n color: '#166534',\n border: '2px solid #bbf7d0',\n borderRadius: 12,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <span style={{ display: 'block' }}>Request via Email</span>\n <span style={{ fontSize: 12, fontWeight: 400, color: '#6b7280' }}>\n Get CAS from KFintech\n </span>\n </button>\n )}\n </div>\n </div>\n );\n }\n\n // DEMAT_OPTIONS mode - show upload or CDSL fetch options (for CDSL only)\n if (mode === 'DEMAT_OPTIONS') {\n return (\n <div>\n <div style={{ textAlign: 'center', marginBottom: 20 }}>\n <h3 style={{ fontSize: 18, fontWeight: 600, color: '#111827', margin: '0 0 8px' }}>\n {selectedBroker ? `${selectedBroker} (CDSL)` : 'CDSL Demat'}\n </h3>\n <p style={{ fontSize: 14, color: '#6b7280', margin: 0 }}>\n How would you like to import?\n </p>\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <button\n onClick={() => handleModeSwitch('UPLOAD')}\n style={{\n width: '100%',\n padding: '16px 20px',\n fontSize: 15,\n fontWeight: 600,\n backgroundColor: '#2563eb',\n color: '#fff',\n border: 'none',\n borderRadius: 12,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <span style={{ display: 'block' }}>Upload Statement</span>\n <span style={{ fontSize: 12, fontWeight: 400, opacity: 0.85 }}>\n I have my CDSL CAS PDF file\n </span>\n </button>\n \n <button\n onClick={() => handleModeSwitch('CDSL_FETCH')}\n style={{\n width: '100%',\n padding: '16px 20px',\n fontSize: 15,\n fontWeight: 600,\n backgroundColor: '#fff',\n color: '#1e40af',\n border: '2px solid #bfdbfe',\n borderRadius: 12,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <span style={{ display: 'block' }}>Fetch from CDSL</span>\n <span style={{ fontSize: 12, fontWeight: 400, color: '#6b7280' }}>\n OTP verification required\n </span>\n </button>\n </div>\n </div>\n );\n }\n\n // SELECT_BROKER mode - for Stocks/Bonds/ETFs\n if (mode === 'SELECT_BROKER') {\n const showManualSelection = selectedBroker === 'Other';\n \n if (showManualSelection) {\n // Show CDSL/NSDL manual selection\n return (\n <div>\n <div style={{ textAlign: 'center', marginBottom: 20 }}>\n <h3 style={{ fontSize: 18, fontWeight: 600, color: '#111827', margin: '0 0 8px' }}>\n Select Your Depository\n </h3>\n <p style={{ fontSize: 14, color: '#6b7280', margin: 0 }}>\n Check your demat account statement to find your depository\n </p>\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n <button\n onClick={() => handleManualDepositorySelect('CDSL')}\n style={{\n padding: '16px 20px',\n fontSize: 15,\n fontWeight: 600,\n backgroundColor: '#fff',\n color: '#111827',\n border: '2px solid #e5e7eb',\n borderRadius: 12,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <span style={{ display: 'block' }}>CDSL</span>\n <span style={{ fontSize: 12, fontWeight: 400, color: '#6b7280' }}>\n Central Depository Services Limited\n </span>\n </button>\n <button\n onClick={() => handleManualDepositorySelect('NSDL')}\n style={{\n padding: '16px 20px',\n fontSize: 15,\n fontWeight: 600,\n backgroundColor: '#fff',\n color: '#111827',\n border: '2px solid #e5e7eb',\n borderRadius: 12,\n cursor: 'pointer',\n textAlign: 'left',\n }}\n >\n <span style={{ display: 'block' }}>NSDL</span>\n <span style={{ fontSize: 12, fontWeight: 400, color: '#6b7280' }}>\n National Securities Depository Limited\n </span>\n </button>\n </div>\n </div>\n );\n }\n \n // Show broker list - use config.brokers if provided, otherwise default\n const brokerList = config.brokers || DEFAULT_BROKERS;\n \n return (\n <div>\n <div style={{ textAlign: 'center', marginBottom: 20 }}>\n <h3 style={{ fontSize: 18, fontWeight: 600, color: '#111827', margin: '0 0 8px' }}>\n Select Your Broker\n </h3>\n <p style={{ fontSize: 14, color: '#6b7280', margin: 0 }}>\n We'll automatically detect your depository\n </p>\n </div>\n <div style={{ \n display: 'grid', \n gridTemplateColumns: 'repeat(2, 1fr)', \n gap: 10,\n maxHeight: 320,\n overflowY: 'auto',\n paddingRight: 4,\n }}>\n {brokerList.map((broker) => (\n <button\n key={broker.name}\n onClick={() => handleBrokerSelect(broker)}\n style={{\n padding: '10px 12px',\n fontSize: 13,\n fontWeight: 500,\n backgroundColor: '#fff',\n color: '#111827',\n border: '1.5px solid #e5e7eb',\n borderRadius: 10,\n cursor: 'pointer',\n textAlign: 'left',\n transition: 'all 0.15s',\n display: 'flex',\n alignItems: 'center',\n gap: 10,\n }}\n onMouseOver={(e) => {\n e.currentTarget.style.borderColor = '#2563eb';\n e.currentTarget.style.backgroundColor = '#f0f7ff';\n }}\n onMouseOut={(e) => {\n e.currentTarget.style.borderColor = '#e5e7eb';\n e.currentTarget.style.backgroundColor = '#fff';\n }}\n >\n {broker.logo && (\n <img \n src={broker.logo} \n alt={broker.name}\n style={{ width: 24, height: 24, objectFit: 'contain', flexShrink: 0 }}\n />\n )}\n <div style={{ minWidth: 0 }}>\n <span style={{ display: 'block', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>{broker.name}</span>\n <span style={{ fontSize: 10, color: '#9ca3af' }}>{broker.depository}</span>\n </div>\n </button>\n ))}\n </div>\n <button\n onClick={() => {\n setSelectedBroker('Other');\n }}\n style={{\n width: '100%',\n marginTop: 12,\n padding: '12px',\n fontSize: 14,\n fontWeight: 500,\n backgroundColor: '#f9fafb',\n color: '#6b7280',\n border: '1.5px dashed #d1d5db',\n borderRadius: 10,\n cursor: 'pointer',\n }}\n >\n Other broker / I don't know\n </button>\n </div>\n );\n }\n\n // LOCATE mode (default)\n const logoUrl = config.logoUrl || DEFAULT_LOGO_URL;\n const currentPortal = CAS_PORTALS[selectedType];\n const title = config.title || 'Import Your Investments';\n const subtitle = config.subtitle || 'Mutual Funds, Stocks, Bonds — all in one place';\n\n // Check if MF and/or Demat are allowed\n const allowMutualFunds = allowedTypes.includes('CAMS_KFINTECH');\n const allowDemat = allowedTypes.includes('CDSL') || allowedTypes.includes('NSDL');\n \n return (\n <div>\n {/* Header with branding */}\n <div style={{ textAlign: 'center', marginBottom: 24 }}>\n <img \n src={logoUrl} \n alt=\"Logo\" \n style={{ width: 56, height: 56, marginBottom: 16, objectFit: 'contain' }}\n />\n <h2 style={{ fontSize: 22, fontWeight: 700, margin: 0, color: '#111827', letterSpacing: '-0.02em' }}>\n {title}\n </h2>\n <p style={{ color: '#6b7280', marginTop: 8, fontSize: 14, lineHeight: 1.5 }}>\n {subtitle}\n </p>\n </div>\n\n {/* Primary Options - Mutual Funds & Stocks */}\n <div style={{ display: 'flex', flexDirection: 'column', gap: 12 }}>\n {/* Mutual Funds Option */}\n {allowMutualFunds && (\n <button\n onClick={() => {\n setSelectedType('CAMS_KFINTECH');\n setSelectedBroker(null);\n // If generator is enabled, show options; otherwise go directly to upload\n if (config.enableGenerator) {\n handleModeSwitch('MF_OPTIONS');\n } else {\n handleModeSwitch('UPLOAD');\n }\n }}\n style={{\n width: '100%',\n padding: '18px 20px',\n fontSize: 16,\n fontWeight: 600,\n backgroundColor: '#2563eb',\n color: '#fff',\n border: 'none',\n borderRadius: 12,\n cursor: 'pointer',\n textAlign: 'left',\n transition: 'all 0.2s',\n boxShadow: '0 4px 14px rgba(37, 99, 235, 0.25)',\n }}\n onMouseOver={(e) => { \n e.currentTarget.style.backgroundColor = '#1d4ed8';\n e.currentTarget.style.transform = 'translateY(-1px)';\n }}\n onMouseOut={(e) => { \n e.currentTarget.style.backgroundColor = '#2563eb';\n e.currentTarget.style.transform = 'translateY(0)';\n }}\n >\n <span style={{ display: 'block' }}>Mutual Funds</span>\n <span style={{ fontSize: 12, fontWeight: 400, opacity: 0.85 }}>\n CAMS & KFintech CAS\n </span>\n </button>\n )}\n\n {/* Stocks, Bonds, ETFs Option */}\n {allowDemat && (\n <button\n onClick={() => {\n setSelectedBroker(null);\n handleModeSwitch('SELECT_BROKER');\n }}\n style={{\n width: '100%',\n padding: '18px 20px',\n fontSize: 16,\n fontWeight: 600,\n backgroundColor: '#fff',\n color: '#111827',\n border: '2px solid #e5e7eb',\n borderRadius: 12,\n cursor: 'pointer',\n textAlign: 'left',\n transition: 'all 0.2s',\n }}\n onMouseOver={(e) => { \n e.currentTarget.style.borderColor = '#2563eb';\n e.currentTarget.style.backgroundColor = '#f0f7ff';\n }}\n onMouseOut={(e) => { \n e.currentTarget.style.borderColor = '#e5e7eb';\n e.currentTarget.style.backgroundColor = '#fff';\n }}\n >\n <span style={{ display: 'block' }}>Stocks, Bonds, ETFs</span>\n <span style={{ fontSize: 12, fontWeight: 400, color: '#6b7280' }}>\n Demat — CDSL & NSDL\n </span>\n </button>\n )}\n </div>\n </div>\n );\n };\n\n // Determine if we're in a sub-screen that should show back button\n const isSubScreen = mode !== 'LOCATE';\n const isSandbox = apiKey === 'sandbox-with-json-responses';\n\n const handleBack = () => {\n // Smart back navigation\n if (mode === 'UPLOAD') {\n if (selectedType === 'CAMS_KFINTECH' && config.enableGenerator) {\n setMode('MF_OPTIONS');\n } else if (selectedType === 'CDSL' && config.enableCdslFetch) {\n setMode('DEMAT_OPTIONS');\n } else if (selectedType === 'CDSL' || selectedType === 'NSDL') {\n setMode('SELECT_BROKER');\n } else {\n setMode('LOCATE');\n }\n } else if (mode === 'FETCH') {\n setMode('MF_OPTIONS');\n } else if (mode === 'CDSL_FETCH') {\n setMode('DEMAT_OPTIONS');\n } else if (mode === 'MF_OPTIONS' || mode === 'DEMAT_OPTIONS') {\n if (selectedType === 'CDSL' || selectedType === 'NSDL') {\n setMode('SELECT_BROKER');\n } else {\n setMode('LOCATE');\n }\n } else if (mode === 'SELECT_BROKER') {\n setMode('LOCATE');\n } else {\n setMode('LOCATE');\n }\n emitEvent('MODE_SWITCHED', { from: mode, to: 'LOCATE' });\n };\n\n return (\n <Modal \n isOpen={isOpen} \n onClose={handleClose} \n onBack={handleBack}\n showBackButton={isSubScreen}\n isSandbox={isSandbox}\n width={420}\n >\n <div style={{ padding: '28px 24px 20px' }}>\n {renderContent()}\n \n {/* Footer */}\n <div style={{ \n marginTop: 24, \n paddingTop: 16,\n borderTop: '1px solid #f3f4f6',\n textAlign: 'center',\n }}>\n <div style={{ fontSize: 11, color: '#9ca3af' }}>\n Encrypted • India-hosted\n </div>\n </div>\n </div>\n </Modal>\n );\n};\n","import React, { useState, useCallback } from 'react';\nimport { PortfolioConnectWidget } from './components/PortfolioConnectWidget';\nimport type { PortfolioConnectProps, RenderProps } from './types';\n\nexport const PortfolioConnect: React.FC<PortfolioConnectProps> = ({\n accessToken,\n apiKey, // deprecated, use accessToken\n apiBaseUrl,\n config,\n onSuccess,\n onError,\n onExit,\n onEvent,\n children,\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n \n // Support both accessToken (new) and apiKey (deprecated) - both work with x-api-key header\n const token = accessToken || apiKey;\n\n const open = useCallback(() => {\n setIsOpen(true);\n }, []);\n\n const handleClose = useCallback(() => {\n setIsOpen(false);\n onExit?.();\n }, [onExit]);\n\n const renderProps: RenderProps = {\n open,\n isReady: !!token,\n isOpen,\n };\n\n return (\n <>\n {children(renderProps)}\n <PortfolioConnectWidget\n isOpen={isOpen}\n onClose={handleClose}\n apiKey={token || ''}\n apiBaseUrl={apiBaseUrl}\n config={config}\n onSuccess={onSuccess}\n onError={onError}\n onEvent={onEvent}\n />\n </>\n );\n};\n\n// Backward compatibility alias\nexport const CASConnect = PortfolioConnect;\nexport default PortfolioConnect;\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport { PortfolioConnectWidget } from './components/PortfolioConnectWidget';\nimport type { PortfolioConnectConfig, ParsedData, ParseMetadata, PortfolioConnectError } from './types';\n\n/**\n * Configuration for the imperative open() API.\n * Used for non-React environments (Vanilla JS, Angular, Vue, etc.)\n */\nexport interface ImperativeConfig {\n /** Access token for authentication. Get yours at docs.casparser.in */\n accessToken?: string;\n /** @deprecated Use accessToken instead */\n apiKey?: string;\n /** Widget configuration options */\n config?: PortfolioConnectConfig;\n /** Called when widget is opened */\n onOpen?: () => void;\n /** Called for all widget events (useful for analytics) */\n onEvent?: (event: string, metadata: Record<string, any>) => void;\n}\n\n/**\n * Result returned from the open() promise\n */\nexport interface OpenResult {\n /** Parsed portfolio data */\n data: ParsedData;\n /** Parsing metadata (source, duration, etc.) */\n metadata: ParseMetadata;\n}\n\n/**\n * Handle returned from create() for manual control\n */\nexport interface WidgetHandle {\n /** Open the widget modal */\n open: () => void;\n /** Close the widget and cleanup */\n destroy: () => void;\n}\n\n// Track active widget instance for cleanup\nlet activeContainer: HTMLDivElement | null = null;\nlet activeRoot: ReactDOM.Root | null = null;\n\n/**\n * Cleanup any existing widget instance\n */\nfunction cleanup(): void {\n if (activeRoot) {\n activeRoot.unmount();\n activeRoot = null;\n }\n if (activeContainer && activeContainer.parentNode) {\n activeContainer.parentNode.removeChild(activeContainer);\n activeContainer = null;\n }\n}\n\n/**\n * Opens the Portfolio Connect widget and returns a promise that resolves with parsed data.\n * \n * This is the recommended API for non-React applications (Vanilla JS, Angular, Vue, etc.)\n * \n * @example\n * ```javascript\n * // Vanilla JS\n * document.getElementById('btn').onclick = async () => {\n * try {\n * const { data, metadata } = await PortfolioConnect.open({\n * apiKey: 'your_api_key',\n * config: { enableCdslFetch: true }\n * });\n * console.log('Portfolio data:', data);\n * } catch (error) {\n * if (error.message === 'Widget closed by user') {\n * console.log('User cancelled');\n * } else {\n * console.error('Error:', error);\n * }\n * }\n * };\n * ```\n * \n * @param config - Configuration options\n * @returns Promise that resolves with { data, metadata } on success, rejects on error/close\n */\nexport function open(config: ImperativeConfig): Promise<OpenResult> {\n return new Promise((resolve, reject) => {\n // Cleanup any existing instance\n cleanup();\n\n // Create container\n activeContainer = document.createElement('div');\n activeContainer.id = 'portfolio-connect-root';\n activeContainer.setAttribute('data-portfolio-connect', 'true');\n document.body.appendChild(activeContainer);\n\n // Create React root\n activeRoot = ReactDOM.createRoot(activeContainer);\n\n // Notify open\n config.onOpen?.();\n\n // Render widget\n activeRoot.render(\n React.createElement(PortfolioConnectWidget, {\n isOpen: true,\n apiKey: config.accessToken || config.apiKey || '',\n config: config.config,\n onSuccess: (data: ParsedData, metadata: ParseMetadata) => {\n cleanup();\n resolve({ data, metadata });\n },\n onClose: () => {\n cleanup();\n reject(new Error('Widget closed by user'));\n },\n onError: (error: PortfolioConnectError) => {\n cleanup();\n reject(error);\n },\n onEvent: config.onEvent,\n })\n );\n });\n}\n\n/**\n * Creates a widget handle for manual control.\n * Useful when you need to open/close the widget multiple times.\n * \n * @example\n * ```javascript\n * const widget = PortfolioConnect.create({\n * apiKey: 'your_api_key',\n * onSuccess: (data) => console.log(data),\n * });\n * \n * document.getElementById('open-btn').onclick = () => widget.open();\n * document.getElementById('close-btn').onclick = () => widget.destroy();\n * ```\n * \n * @param config - Configuration options including callbacks\n * @returns Handle with open() and destroy() methods\n */\nexport function create(config: ImperativeConfig & {\n onSuccess: (data: ParsedData, metadata: ParseMetadata) => void;\n onError?: (error: PortfolioConnectError) => void;\n onClose?: () => void;\n}): WidgetHandle {\n let container: HTMLDivElement | null = null;\n let root: ReactDOM.Root | null = null;\n let isOpen = false;\n\n function render(open: boolean): void {\n if (!container) {\n container = document.createElement('div');\n container.id = 'portfolio-connect-root';\n container.setAttribute('data-portfolio-connect', 'true');\n document.body.appendChild(container);\n root = ReactDOM.createRoot(container);\n }\n\n isOpen = open;\n\n root!.render(\n React.createElement(PortfolioConnectWidget, {\n isOpen: open,\n apiKey: config.accessToken || config.apiKey || '',\n config: config.config,\n onSuccess: (data: ParsedData, metadata: ParseMetadata) => {\n render(false);\n config.onSuccess(data, metadata);\n },\n onClose: () => {\n render(false);\n config.onClose?.();\n },\n onError: (error: PortfolioConnectError) => {\n render(false);\n config.onError?.(error);\n },\n onEvent: config.onEvent,\n })\n );\n }\n\n return {\n open: () => {\n config.onOpen?.();\n render(true);\n },\n destroy: () => {\n if (root) {\n root.unmount();\n root = null;\n }\n if (container && container.parentNode) {\n container.parentNode.removeChild(container);\n container = null;\n }\n isOpen = false;\n },\n };\n}\n","// Main exports - React components\nexport { PortfolioConnect, CASConnect } from './PortfolioConnect';\nexport { PortfolioConnectWidget } from './components/PortfolioConnectWidget';\nexport { requestAccessToken, isAccessToken } from './utils/api';\n\n// Imperative API for non-React users (Vanilla JS, Angular, Vue, etc.)\nexport { open, create } from './imperative';\nexport type { ImperativeConfig, OpenResult, WidgetHandle } from './imperative';\n\n// Backward compatibility alias\nexport { PortfolioConnectWidget as CASConnectWidget } from './components/PortfolioConnectWidget';\n\n// SDK Version\nexport const VERSION = '1.1.0';\nexport const SDK_NAME = 'Portfolio Connect';\n\n// Type exports (new names)\nexport type {\n PortfolioConnectProps,\n PortfolioConnectConfig,\n PortfolioType,\n PortfolioConnectError,\n PortfolioConnectEvent,\n ParsedData,\n InvestorInfo,\n ParseMetadata,\n EventMetadata,\n RenderProps,\n BrokerInfo,\n} from './types';\n\n// Backward compatibility type aliases\nexport type {\n CASConnectProps,\n CASConnectConfig,\n CASType,\n CASConnectError,\n CASConnectEvent,\n} from './types';\n"],"names":["useRef","useEffect","useState","useCallback"],"mappings":";;;;;;IAYO,MAAM,KAAK,GAAyB,CAAC,EAC1C,MAAM,EACN,OAAO,EACP,MAAM,EACN,cAAc,GAAG,KAAK,EACtB,QAAQ,EACR,KAAK,GAAG,GAAG,EACX,SAAS,GAAG,KAAK,GAClB,KAAI;IACH,IAAA,MAAM,UAAU,GAAGA,YAAM,CAAiB,IAAI,CAAC;QAE/CC,eAAS,CAAC,MAAK;YACb,IAAI,MAAM,EAAE;gBACV,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ;YACzC;iBAAO;gBACL,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;YACnC;IACA,QAAA,OAAO,MAAK;gBACV,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;IACnC,QAAA,CAAC;IACH,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEZ,IAAA,IAAI,CAAC,MAAM;IAAE,QAAA,OAAO,IAAI;IAExB,IAAA,MAAM,kBAAkB,GAAG,CAAC,CAAmB,KAAI;YACjD,IAAI,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,OAAO,EAAE;IACnC,YAAA,OAAO,EAAE;YACX;IACF,IAAA,CAAC;QAED,MAAM,uBAAuB,GAAG,MAAK;IACnC,QAAA,IAAI,cAAc,IAAI,MAAM,EAAE;IAC5B,YAAA,MAAM,EAAE;YACV;iBAAO;IACL,YAAA,OAAO,EAAE;YACX;IACF,IAAA,CAAC;QAED,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,UAAU,EACf,OAAO,EAAE,kBAAkB,EAC3B,KAAK,EAAE;IACL,YAAA,QAAQ,EAAE,OAAO;IACjB,YAAA,GAAG,EAAE,CAAC;IACN,YAAA,IAAI,EAAE,CAAC;IACP,YAAA,KAAK,EAAE,CAAC;IACR,YAAA,MAAM,EAAE,CAAC;IACT,YAAA,eAAe,EAAE,oBAAoB;IACrC,YAAA,OAAO,EAAE,MAAM;IACf,YAAA,UAAU,EAAE,QAAQ;IACpB,YAAA,cAAc,EAAE,QAAQ;IACxB,YAAA,MAAM,EAAE,KAAK;IACb,YAAA,OAAO,EAAE,EAAE;IACZ,SAAA,EAAA;IAED,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,KAAK,EAAE;IACL,gBAAA,eAAe,EAAE,MAAM;IACvB,gBAAA,YAAY,EAAE,EAAE;IAChB,gBAAA,KAAK,EAAE,MAAM;IACb,gBAAA,QAAQ,EAAE,KAAK;IACf,gBAAA,SAAS,EAAE,MAAM;IACjB,gBAAA,QAAQ,EAAE,MAAM;IAChB,gBAAA,QAAQ,EAAE,UAAU;IACpB,gBAAA,SAAS,EAAE,iCAAiC;IAC7C,aAAA,EAAA;IAGA,YAAA,SAAS,KACR,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,eAAe,EAAE,SAAS;IAC1B,oBAAA,YAAY,EAAE,mBAAmB;IACjC,oBAAA,OAAO,EAAE,UAAU;IACnB,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,UAAU,EAAE,GAAG;IACf,oBAAA,KAAK,EAAE,SAAS;IAChB,oBAAA,SAAS,EAAE,QAAQ;IACnB,oBAAA,mBAAmB,EAAE,EAAE;IACvB,oBAAA,oBAAoB,EAAE,EAAE;IACzB,iBAAA,EAAA,EAAA,iDAAA,CAEK,CACP;IAGD,YAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,uBAAuB,EAChC,KAAK,EAAE;IACL,oBAAA,QAAQ,EAAE,UAAU;wBACpB,GAAG,EAAE,SAAS,GAAG,EAAE,GAAG,EAAE;wBACxB,IAAI,EAAE,cAAc,GAAG,EAAE,GAAG,MAAM;wBAClC,KAAK,EAAE,cAAc,GAAG,MAAM,GAAG,EAAE;IACnC,oBAAA,UAAU,EAAE,MAAM;IAClB,oBAAA,MAAM,EAAE,MAAM;wBACd,QAAQ,EAAE,cAAc,GAAG,EAAE,GAAG,EAAE;IAClC,oBAAA,MAAM,EAAE,SAAS;IACjB,oBAAA,KAAK,EAAE,SAAS;IAChB,oBAAA,UAAU,EAAE,CAAC;IACb,oBAAA,OAAO,EAAE,CAAC;IACV,oBAAA,MAAM,EAAE,CAAC;IACT,oBAAA,OAAO,EAAE,MAAM;IACf,oBAAA,UAAU,EAAE,QAAQ;IACpB,oBAAA,cAAc,EAAE,QAAQ;IACxB,oBAAA,YAAY,EAAE,CAAC;IACf,oBAAA,UAAU,EAAE,wBAAwB;qBACrC,EACD,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS,EACrE,UAAU,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,aAAa,gBAC5D,cAAc,GAAG,MAAM,GAAG,OAAO,EAAA,EAE5C,cAAc,GAAG,GAAG,GAAG,GAAG,CACpB;gBACR,QAAQ,CACL,CACF;IAEV,CAAC;;IC9HD;IACA,MAAM,WAAW,GAAG;IAClB,IAAA,eAAe,EAAE,CAAC,2BAA2B,EAAE,oBAAoB,CAAC;QACpE,MAAM,EAAE,CAAC,wBAAwB,CAAC;QAClC,MAAM,EAAE,CAAC,qBAAqB,CAAC;KAChC;IAED;IACA,MAAM,gBAAgB,GAAG,CAAC,IAAc,KAAI;QAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE;IAC5E,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAA,KAAA,EAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC5D,OAAO,CAAA,CAAA,EAAI,SAAS,CAAA,gBAAA,CAAkB;IACxC,CAAC;IAED;IACA,MAAM,SAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAA;IACzD,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,+DAA+D,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE;IACxF,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,sEAAsE,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE;IAC/F,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,iFAAiF,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE;IAC1G,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,uEAAuE,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE;QAChG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,qEAAqE,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE,CAC1F,CACP;IAED,MAAM,WAAW,GAAG,OAClB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAA;IACzD,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,4HAA4H,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE;IACrJ,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,iIAAiI,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE;IAC1J,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,+OAA+O,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE;IACxQ,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,oHAAoH,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE;IAC7I,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,+FAA+F,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE;IACxH,IAAA,KAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAS,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,QAAQ,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,OAAO,EAAC,MAAM,EAAC,MAAM,EAAC,WAAW,EAAC,KAAK,EAAC,IAAI,EAAC,MAAM,EAAA,CAAE,CAC/F,CACP;IAED,MAAM,SAAS,GAAG,OAChB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAA;IACzD,IAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,yEAAyE,EAAC,IAAI,EAAC,SAAS,EAAA,CAAE;QAClG,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,4FAA4F,EAAC,IAAI,EAAC,MAAM,EAAA,CAAE,CAC9G,CACP;IAED;IACA,MAAM,YAAY,GAAG,CAAC,YAAsB,KAAI;IAC9C,IAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,YAAY,CAAC;IAC5C,IAAA,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC;QAE9C,OAAO;IACL,QAAA;IACE,YAAA,IAAI,EAAE,OAAO;IACb,YAAA,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,CAAA,yCAAA,EAA4C,YAAY,CAAA;IAC9D,SAAA;IACD,QAAA;IACE,YAAA,IAAI,EAAE,SAAS;IACf,YAAA,IAAI,EAAE,WAAW;gBACjB,GAAG,EAAE,CAAA,oEAAA,EAAuE,YAAY,CAAA;IACzF,SAAA;IACD,QAAA;IACE,YAAA,IAAI,EAAE,OAAO;IACb,YAAA,IAAI,EAAE,SAAS;gBACf,GAAG,EAAE,CAAA,wCAAA,EAA2C,YAAY,CAAA;IAC7D;SACF;IACH,CAAC;IAOM,MAAM,aAAa,GAAiC,CAAC,EAAE,YAAY,EAAE,aAAa,EAAE,KAAI;IAC7F,IAAA,MAAM,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC;QAE5C,QACE,6BAAK,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IAC9B,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,gBAAA,QAAQ,EAAE,EAAE;IACZ,gBAAA,KAAK,EAAE,SAAS;IAChB,gBAAA,YAAY,EAAE,EAAE;IAChB,gBAAA,UAAU,EAAE;iBACb,EAAA,EAAA,8BAAA,CAEK;IACN,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,gBAAA,OAAO,EAAE,MAAM;IACf,gBAAA,mBAAmB,EAAE,gBAAgB;IACrC,gBAAA,GAAG,EAAE;iBACN,EAAA,EACE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,MACtB,2BACE,GAAG,EAAE,QAAQ,CAAC,IAAI,EAClB,IAAI,EAAE,QAAQ,CAAC,GAAG,EAClB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,OAAO,EAAE,MAAM,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,EAC7C,KAAK,EAAE;IACL,gBAAA,OAAO,EAAE,MAAM;IACf,gBAAA,aAAa,EAAE,QAAQ;IACvB,gBAAA,UAAU,EAAE,QAAQ;IACpB,gBAAA,cAAc,EAAE,QAAQ;IACxB,gBAAA,OAAO,EAAE,EAAE;IACX,gBAAA,eAAe,EAAE,SAAS;IAC1B,gBAAA,YAAY,EAAE,CAAC;IACf,gBAAA,cAAc,EAAE,MAAM;IACtB,gBAAA,MAAM,EAAE,mBAAmB;IAC3B,gBAAA,UAAU,EAAE,WAAW;IACvB,gBAAA,MAAM,EAAE,SAAS;IAClB,aAAA,EACD,YAAY,EAAE,CAAC,CAAC,KAAI;oBAClB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS;oBACjD,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS;IAC/C,YAAA,CAAC,EACD,YAAY,EAAE,CAAC,CAAC,KAAI;oBAClB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS;oBACjD,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS;gBAC/C,CAAC,EAAA;gBAED,KAAA,CAAA,aAAA,CAAC,QAAQ,CAAC,IAAI,EAAA,IAAA,CAAG;IACjB,YAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,EAAE,EAAA,EAC3E,QAAQ,CAAC,IAAI,CACT,CACL,CACL,CAAC,CACE,CACF;IAEV,CAAC;;IC3HM,MAAM,UAAU,GAA8B,CAAC,EACpD,YAAY,EACZ,YAAY,EACZ,QAAQ,EACT,KAAI;QACH,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGC,cAAQ,CAAc,IAAI,CAAC;QACnD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,cAAQ,CAAC,EAAE,CAAC;QAC5C,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;IACnD,IAAA,MAAM,QAAQ,GAAGF,YAAM,CAAmB,IAAI,CAAC;IAE/C,IAAA,MAAM,UAAU,GAAGG,iBAAW,CAAC,CAAC,CAAkB,KAAI;YACpD,CAAC,CAAC,cAAc,EAAE;YAClB,aAAa,CAAC,KAAK,CAAC;YACpB,MAAM,WAAW,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,QAAA,IAAI,WAAW,EAAE,IAAI,KAAK,iBAAiB,EAAE;gBAC3C,OAAO,CAAC,WAAW,CAAC;YACtB;QACF,CAAC,EAAE,EAAE,CAAC;IAEN,IAAA,MAAM,gBAAgB,GAAG,CAAC,CAAsC,KAAI;YAClE,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;YACxC,IAAI,YAAY,EAAE;gBAChB,OAAO,CAAC,YAAY,CAAC;YACvB;IACF,IAAA,CAAC;QAED,MAAM,YAAY,GAAG,MAAK;YACxB,IAAI,IAAI,EAAE;IACR,YAAA,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC9B;IACF,IAAA,CAAC;QAED,IAAI,YAAY,EAAE;IAChB,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,EAAA;IACvD,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,KAAK,EAAE,EAAE;IACT,oBAAA,MAAM,EAAE,EAAE;IACV,oBAAA,eAAe,EAAE,SAAS;IAC1B,oBAAA,YAAY,EAAE,KAAK;IACnB,oBAAA,OAAO,EAAE,MAAM;IACf,oBAAA,UAAU,EAAE,QAAQ;IACpB,oBAAA,cAAc,EAAE,QAAQ;IACxB,oBAAA,MAAM,EAAE,aAAa;IACtB,iBAAA,EAAA;oBACC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,GAAG,EAAA;wBAC1F,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,+BAA+B,EAAA,CAAE;wBACzC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,6BAA6B,EAAA,CAAE;IACvC,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,4BAA4B,EAAA,CAAE,CAClC,CACF;IACN,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,0BAAA,CAE5E;IACL,YAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAA,EAAA,+CAAA,CAE1D;IACJ,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,MAAM,EAAE,CAAC;IACT,oBAAA,eAAe,EAAE,SAAS;IAC1B,oBAAA,YAAY,EAAE,CAAC;IACf,oBAAA,QAAQ,EAAE,QAAQ;IAClB,oBAAA,QAAQ,EAAE,GAAG;IACb,oBAAA,MAAM,EAAE,QAAQ;IACjB,iBAAA,EAAA;IACC,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,wBAAA,MAAM,EAAE,MAAM;4BACd,KAAK,EAAE,CAAA,EAAG,QAAQ,CAAA,CAAA,CAAG;IACrB,wBAAA,eAAe,EAAE,SAAS;IAC1B,wBAAA,UAAU,EAAE,iBAAiB;IAC9B,qBAAA,EAAA,CAAI,CACD;IACN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,EAAA,EAC1D,QAAQ,GAAG,EAAE,GAAG,cAAc,GAAG,QAAQ,GAAG,EAAE,GAAG,eAAe,GAAG,cAAc,CAC9E,CACF;QAEV;QAEA,IAAI,CAAC,IAAI,EAAE;IACT,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;IACE,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,uBAAA,CAE7E;gBACL,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,UAAU,EAAE,CAAC,CAAC,KAAI,EAAG,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAC/D,WAAW,EAAE,MAAM,aAAa,CAAC,KAAK,CAAC,EACvC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,EACxC,KAAK,EAAE;wBACL,MAAM,EAAE,CAAA,WAAA,EAAc,UAAU,GAAG,SAAS,GAAG,SAAS,CAAA,CAAE;IAC1D,oBAAA,YAAY,EAAE,EAAE;IAChB,oBAAA,OAAO,EAAE,WAAW;IACpB,oBAAA,SAAS,EAAE,QAAQ;IACnB,oBAAA,MAAM,EAAE,SAAS;wBACjB,eAAe,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS;IACnD,oBAAA,UAAU,EAAE,UAAU;IACvB,iBAAA,EAAA;oBAED,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,QAAQ,EACb,IAAI,EAAC,MAAM,EACX,MAAM,EAAC,MAAM,EACb,QAAQ,EAAE,gBAAgB,EAC1B,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAA,CAC1B;IACF,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;wBAC9B,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,KAAK,EAAA;4BAC5F,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,4DAA4D,EAAA,CAAE;4BACtE,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,gBAAgB,EAAA,CAAE;IACnC,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAA,CAAE;IACtC,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAA,CAAE;IACtC,wBAAA,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,cAAc,EAAA,CAAE,CAC7B,CACF;IACN,gBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,EAAA,EAAA,wBAAA,CAEpE;IACJ,gBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,yBAE3D,CACA;IACN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,SAAS,EAAE,EAAE;IACb,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,KAAK,EAAE,SAAS;IAChB,oBAAA,SAAS,EAAE;qBACZ,EAAA,EAAA,kDAAA,CAEK,CACF;QAEV;IAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;IACE,QAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,gBAAA,CAE7E;IAGL,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,gBAAA,OAAO,EAAE,MAAM;IACf,gBAAA,UAAU,EAAE,QAAQ;IACpB,gBAAA,OAAO,EAAE,EAAE;IACX,gBAAA,MAAM,EAAE,mBAAmB;IAC3B,gBAAA,YAAY,EAAE,EAAE;IAChB,gBAAA,eAAe,EAAE,SAAS;IAC1B,gBAAA,YAAY,EAAE,EAAE;IACjB,aAAA,EAAA;IACC,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,KAAK,EAAE,EAAE;IACT,oBAAA,MAAM,EAAE,EAAE;IACV,oBAAA,eAAe,EAAE,SAAS;IAC1B,oBAAA,YAAY,EAAE,CAAC;IACf,oBAAA,OAAO,EAAE,MAAM;IACf,oBAAA,UAAU,EAAE,QAAQ;IACpB,oBAAA,cAAc,EAAE,QAAQ;IACxB,oBAAA,WAAW,EAAE,EAAE;IAChB,iBAAA,EAAA;oBACC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,GAAG,EAAA;wBAC1F,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,CAAC,EAAC,4DAA4D,EAAA,CAAE;IACtE,oBAAA,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,gBAAgB,EAAA,CAAE,CAC/B,CACF;gBACN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAA;IACzC,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,UAAU,EAAE,QAAQ;IACpB,wBAAA,QAAQ,EAAE,QAAQ;IAClB,wBAAA,YAAY,EAAE,UAAU;IACxB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,KAAK,EAAE,SAAS;yBACjB,EAAA,EACE,IAAI,CAAC,IAAI,CACN;oBACN,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA;IAC3C,oBAAA,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;8BACjC,CACF;gBACN,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,EAC5B,KAAK,EAAE;IACL,oBAAA,UAAU,EAAE,MAAM;IAClB,oBAAA,MAAM,EAAE,MAAM;IACd,oBAAA,KAAK,EAAE,SAAS;IAChB,oBAAA,MAAM,EAAE,SAAS;IACjB,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,cAAc,EAAE,WAAW;IAC5B,iBAAA,EAAA,EAAA,QAAA,CAGM,CACL;IAGN,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IAC9B,YAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,KAAK,EAAE;IACZ,oBAAA,OAAO,EAAE,OAAO;IAChB,oBAAA,YAAY,EAAE,CAAC;IACf,oBAAA,UAAU,EAAE,GAAG;IACf,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,KAAK,EAAE,SAAS;qBACjB,EAAA,EAAA,cAAA,CAEO;IACR,YAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,UAAU,EACf,WAAW,EAAC,oCAAoC,EAChD,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAC5C,KAAK,EAAE;IACL,oBAAA,KAAK,EAAE,MAAM;IACb,oBAAA,OAAO,EAAE,WAAW;IACpB,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,MAAM,EAAE,mBAAmB;IAC3B,oBAAA,YAAY,EAAE,CAAC;IACf,oBAAA,SAAS,EAAE,YAAY;qBACxB,EAAA,CACD;IACF,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,KAAK,EAAE,SAAS;IAChB,oBAAA,SAAS,EAAE,CAAC;IACZ,oBAAA,OAAO,EAAE,MAAM;IACf,oBAAA,GAAG,EAAE,EAAE;IACR,iBAAA,EAAA;oBACC,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,mBAAA,CAA8B;oBAC9B,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,aAAA,CAAwB;IACxB,gBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,IAAA,EAAA,gBAAA,CAA2B,CACvB,CACF;IAEN,QAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,YAAY,EACrB,KAAK,EAAE;IACL,gBAAA,KAAK,EAAE,MAAM;IACb,gBAAA,OAAO,EAAE,WAAW;IACpB,gBAAA,QAAQ,EAAE,EAAE;IACZ,gBAAA,UAAU,EAAE,GAAG;IACf,gBAAA,eAAe,EAAE,SAAS;IAC1B,gBAAA,KAAK,EAAE,MAAM;IACb,gBAAA,MAAM,EAAE,MAAM;IACd,gBAAA,YAAY,EAAE,CAAC;IACf,gBAAA,MAAM,EAAE,SAAS;IACjB,gBAAA,UAAU,EAAE,uBAAuB;iBACpC,EAAA,EAAA,oBAAA,CAGM,CACL;IAEV,CAAC;;IC5PM,MAAM,SAAS,GAA6B,CAAC,EAClD,OAAO,EACP,QAAQ,EACR,MAAM,EACN,SAAS,EACV,KAAI;IACH,IAAA,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAGD,cAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IAClD,IAAA,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC;QACxD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAC,EAAE,CAAC;QAEtCD,eAAS,CAAC,MAAK;YACb,IAAI,OAAO,EAAE;gBACX,IAAI,OAAO,CAAC,GAAG;IAAE,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;gBACpC,IAAI,OAAO,CAAC,KAAK;IAAE,gBAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC;YAC5C;IACF,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAEb,IAAA,MAAM,WAAW,GAAG,CAAC,KAAa,KAAK,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/E,IAAA,MAAM,aAAa,GAAG,CAAC,KAAa,KAAK,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;IAEjF,IAAA,MAAM,YAAY,GAAG,OAAO,CAAkB,KAAI;YAChD,CAAC,CAAC,cAAc,EAAE;YAClB,QAAQ,CAAC,EAAE,CAAC;IAEZ,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE;IAClC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;gBAC1B,QAAQ,CAAC,sCAAsC,CAAC;gBAChD;YACF;IACA,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE;gBACzB,QAAQ,CAAC,sBAAsB,CAAC;gBAChC;YACF;IAEA,QAAA,IAAI;IACF,YAAA,MAAM,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC;YACjC;YAAE,OAAO,GAAQ,EAAE;IACjB,YAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,0BAA0B,CAAC;YACrD;IACF,IAAA,CAAC;QAED,IAAI,SAAS,EAAE;YACb,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,gBAAA,SAAS,EAAE,QAAQ;IACnB,gBAAA,OAAO,EAAE,WAAW;IACpB,gBAAA,OAAO,EAAE,MAAM;IACf,gBAAA,aAAa,EAAE,QAAQ;IACvB,gBAAA,UAAU,EAAE,QAAQ;IACrB,aAAA,EAAA;IACC,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,KAAK,EAAE,EAAE;IACT,oBAAA,MAAM,EAAE,EAAE;IACV,oBAAA,MAAM,EAAE,mBAAmB;IAC3B,oBAAA,cAAc,EAAE,SAAS;IACzB,oBAAA,YAAY,EAAE,KAAK;IACnB,oBAAA,SAAS,EAAE,yBAAyB;IACpC,oBAAA,YAAY,EAAE,EAAE;qBACjB,EAAA,CAAI;IACL,YAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ,uDAAuD,CAAS;IACxE,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,oBAAA,CAEpE;IACL,YAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAA,EAAA,iDAAA,CAEtD,CACA;QAEV;IAEA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;IACE,QAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,uBAAA,CAE5E;IACL,QAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,EAAA,EAAA,kDAAA,CAE7E;IAGJ,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,gBAAA,eAAe,EAAE,SAAS;IAC1B,gBAAA,MAAM,EAAE,mBAAmB;IAC3B,gBAAA,YAAY,EAAE,CAAC;IACf,gBAAA,OAAO,EAAE,EAAE;IACX,gBAAA,YAAY,EAAE,EAAE;IAChB,gBAAA,QAAQ,EAAE,EAAE;IACZ,gBAAA,KAAK,EAAE,SAAS;IACjB,aAAA,EAAA;IACC,YAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,OAAA,CAAgB;IAC/C,YAAA,6DAAA,CAAA;YAEN,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAE,YAAY,EAAA;IAC1B,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IAC9B,gBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,KAAK,EAAE;IACZ,wBAAA,OAAO,EAAE,OAAO;IAChB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,YAAY,EAAE,CAAC;yBAChB,EAAA,EAAA,YAAA,CAEO;IACR,gBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EACrD,WAAW,EAAC,YAAY,EACxB,SAAS,EAAE,EAAE,EACb,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,EAAE;IACV,wBAAA,OAAO,EAAE,QAAQ;IACjB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,MAAM,EAAE,mBAAmB;IAC3B,wBAAA,YAAY,EAAE,CAAC;IACf,wBAAA,SAAS,EAAE,YAAY;IACvB,wBAAA,aAAa,EAAE,WAAW;IAC3B,qBAAA,EAAA,CACD,CACE;IAEN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IAC9B,gBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,KAAK,EAAE;IACZ,wBAAA,OAAO,EAAE,OAAO;IAChB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,YAAY,EAAE,CAAC;yBAChB,EAAA,EAAA,eAAA,CAEO;IACR,gBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,OAAO,EACZ,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,WAAW,EAAC,iBAAiB,EAC7B,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,EAAE;IACV,wBAAA,OAAO,EAAE,QAAQ;IACjB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,MAAM,EAAE,mBAAmB;IAC3B,wBAAA,YAAY,EAAE,CAAC;IACf,wBAAA,SAAS,EAAE,YAAY;yBACxB,EAAA,CACD;IACF,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,2CAEtD,CACF;IAEL,YAAA,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,KAAK,EAAE,SAAS;IAChB,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,YAAY,EAAE,EAAE;IAChB,oBAAA,OAAO,EAAE,WAAW;IACpB,oBAAA,eAAe,EAAE,SAAS;IAC1B,oBAAA,MAAM,EAAE,mBAAmB;IAC3B,oBAAA,YAAY,EAAE,CAAC;qBAChB,EAAA,EACE,KAAK,CACF,CACP;IAED,YAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE;IACL,oBAAA,KAAK,EAAE,MAAM;IACb,oBAAA,MAAM,EAAE,EAAE;IACV,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,UAAU,EAAE,GAAG;IACf,oBAAA,eAAe,EAAE,SAAS;IAC1B,oBAAA,KAAK,EAAE,MAAM;IACb,oBAAA,MAAM,EAAE,MAAM;IACd,oBAAA,YAAY,EAAE,CAAC;IACf,oBAAA,MAAM,EAAE,SAAS;IACjB,oBAAA,UAAU,EAAE,uBAAuB;qBACpC,EAAA,EAAA,mBAAA,CAGM;gBAET,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAAA;oBAChD,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;IACL,wBAAA,UAAU,EAAE,MAAM;IAClB,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,MAAM,EAAE,SAAS;IACjB,wBAAA,cAAc,EAAE,WAAW;IAC5B,qBAAA,EAAA,EAAA,+BAAA,CAGM,CACL,CACD,CACH;IAEV,CAAC;;ICzMM,MAAM,aAAa,GAAiC,CAAC,EAC1D,OAAO,EACP,YAAY,EACZ,WAAW,EACX,MAAM,GACP,KAAI;QACH,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGC,cAAQ,CAAO,OAAO,CAAC;IAC/C,IAAA,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAGA,cAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;IAClD,IAAA,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGA,cAAQ,CAAC,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC;IACrD,IAAA,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAGA,cAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,EAAE,CAAC;QAClD,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAGA,cAAQ,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGA,cAAQ,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;QAEjDD,eAAS,CAAC,MAAK;YACb,IAAI,OAAO,EAAE;gBACX,IAAI,OAAO,CAAC,GAAG;IAAE,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;gBACpC,IAAI,OAAO,CAAC,IAAI;IAAE,gBAAA,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;gBACvC,IAAI,OAAO,CAAC,GAAG;IAAE,gBAAA,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;YACtC;IACF,IAAA,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;IAEb,IAAA,MAAM,WAAW,GAAG,CAAC,KAAa,KAAK,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/E,IAAA,MAAM,YAAY,GAAG,CAAC,KAAa,KAAK,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC9D,IAAA,MAAM,WAAW,GAAG,CAAC,KAAa,KAAK,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC;IAExE,IAAA,MAAM,gBAAgB,GAAG,OAAO,CAAkB,KAAI;YACpD,CAAC,CAAC,cAAc,EAAE;YAClB,QAAQ,CAAC,EAAE,CAAC;IAEZ,QAAA,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE;IAClC,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE;gBAC1B,QAAQ,CAAC,sCAAsC,CAAC;gBAChD;YACF;IACA,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE;gBACvB,QAAQ,CAAC,yBAAyB,CAAC;gBACnC;YACF;IACA,QAAA,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;gBACrB,QAAQ,CAAC,kCAAkC,CAAC;gBAC5C;YACF;YAEA,YAAY,CAAC,IAAI,CAAC;IAClB,QAAA,IAAI;gBACF,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC;gBACnD,YAAY,CAAC,GAAG,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC;YAChB;YAAE,OAAO,GAAQ,EAAE;IACjB,YAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,uBAAuB,CAAC;YAClD;oBAAU;gBACR,YAAY,CAAC,KAAK,CAAC;YACrB;IACF,IAAA,CAAC;IAED,IAAA,MAAM,eAAe,GAAG,OAAO,CAAkB,KAAI;YACnD,CAAC,CAAC,cAAc,EAAE;YAClB,QAAQ,CAAC,EAAE,CAAC;IAEZ,QAAA,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE;gBACpB,QAAQ,CAAC,8BAA8B,CAAC;gBACxC;YACF;YAEA,YAAY,CAAC,IAAI,CAAC;YAClB,OAAO,CAAC,SAAS,CAAC;IAClB,QAAA,IAAI;IACF,YAAA,MAAM,WAAW,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;gBACrD,OAAO,CAAC,SAAS,CAAC;YACpB;YAAE,OAAO,GAAQ,EAAE;IACjB,YAAA,QAAQ,CAAC,GAAG,CAAC,OAAO,IAAI,yCAAyC,CAAC;gBAClE,OAAO,CAAC,OAAO,CAAC;gBAChB,YAAY,CAAC,KAAK,CAAC;YACrB;IACF,IAAA,CAAC;;IAGD,IAAA,IAAI,IAAI,KAAK,OAAO,EAAE;YACpB,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,gBAAA,SAAS,EAAE,QAAQ;IACnB,gBAAA,OAAO,EAAE,WAAW;IACrB,aAAA,EAAA;IACC,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,KAAK,EAAE,EAAE;IACT,oBAAA,MAAM,EAAE,EAAE;IACV,oBAAA,eAAe,EAAE,SAAS;IAC1B,oBAAA,YAAY,EAAE,KAAK;IACnB,oBAAA,OAAO,EAAE,MAAM;IACf,oBAAA,UAAU,EAAE,QAAQ;IACpB,oBAAA,cAAc,EAAE,QAAQ;IACxB,oBAAA,MAAM,EAAE,aAAa;IACtB,iBAAA,EAAA;oBACC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,GAAG,EAAA;wBAC1F,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAA,CAAE;IAChC,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAA,CAAE;IACtC,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,IAAI,EAAA,CAAE,CACtC,CACF;IACN,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,eAAA,CAE5E;gBACL,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,EAAA,EAC9E,KAAK,IAAI,qDAAqD,CAC7D;IACJ,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAA;oBAC/D,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAK,EAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC5D,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,EAAE;IACV,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,eAAe,EAAE,SAAS;IAC1B,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,YAAY,EAAE,CAAC;IACf,wBAAA,MAAM,EAAE,SAAS;yBAClB,EAAA,EAAA,WAAA,CAGM;oBACT,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAK,EAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAC9D,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,EAAE;IACV,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,eAAe,EAAE,MAAM;IACvB,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,MAAM,EAAE,mBAAmB;IAC3B,wBAAA,YAAY,EAAE,CAAC;IACf,wBAAA,MAAM,EAAE,SAAS;yBAClB,EAAA,EAAA,YAAA,CAGM,CACL,CACF;QAEV;;IAGA,IAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,gBAAA,SAAS,EAAE,QAAQ;IACnB,gBAAA,OAAO,EAAE,WAAW;IACpB,gBAAA,OAAO,EAAE,MAAM;IACf,gBAAA,aAAa,EAAE,QAAQ;IACvB,gBAAA,UAAU,EAAE,QAAQ;IACrB,aAAA,EAAA;IACC,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,KAAK,EAAE,EAAE;IACT,oBAAA,MAAM,EAAE,EAAE;IACV,oBAAA,MAAM,EAAE,mBAAmB;IAC3B,oBAAA,cAAc,EAAE,SAAS;IACzB,oBAAA,YAAY,EAAE,KAAK;IACnB,oBAAA,SAAS,EAAE,yBAAyB;IACpC,oBAAA,YAAY,EAAE,EAAE;qBACjB,EAAA,CAAI;IACL,YAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,EAAQ,uDAAuD,CAAS;IACxE,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,0BAAA,CAEpE;IACL,YAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAA,EAAA,oCAAA,CAEtD,CACA;QAEV;;IAGA,IAAA,IAAI,IAAI,KAAK,SAAS,EAAE;YACtB,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,gBAAA,SAAS,EAAE,QAAQ;IACnB,gBAAA,OAAO,EAAE,WAAW;IACrB,aAAA,EAAA;IACC,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,KAAK,EAAE,EAAE;IACT,oBAAA,MAAM,EAAE,EAAE;IACV,oBAAA,eAAe,EAAE,SAAS;IAC1B,oBAAA,YAAY,EAAE,KAAK;IACnB,oBAAA,OAAO,EAAE,MAAM;IACf,oBAAA,UAAU,EAAE,QAAQ;IACpB,oBAAA,cAAc,EAAE,QAAQ;IACxB,oBAAA,MAAM,EAAE,aAAa;IACtB,iBAAA,EAAA;oBACC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,KAAK,EAAA;IAC5F,oBAAA,KAAA,CAAA,aAAA,CAAA,UAAA,EAAA,EAAU,MAAM,EAAC,gBAAgB,EAAA,CAAE,CAC/B,CACF;IACN,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,qBAAA,CAE5E;IACL,YAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAA,EAAA,uCAAA,CAEnD,CACA;QAEV;;IAGA,IAAA,IAAI,IAAI,KAAK,KAAK,EAAE;IAClB,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;IACE,YAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,YAAA,CAE5E;IACL,YAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,EAAA,EAAA,gDAAA,CAE7E;gBAEJ,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAE,eAAe,EAAA;IAC7B,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IAC9B,oBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,KAAK,EAAE;IACZ,4BAAA,OAAO,EAAE,OAAO;IAChB,4BAAA,QAAQ,EAAE,EAAE;IACZ,4BAAA,UAAU,EAAE,GAAG;IACf,4BAAA,KAAK,EAAE,SAAS;IAChB,4BAAA,YAAY,EAAE,CAAC;6BAChB,EAAA,EAAA,UAAA,CAEO;wBACR,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EACtE,WAAW,EAAC,0BAAM,EAClB,SAAS,EAAE,CAAC,EACZ,SAAS,EAAA,IAAA,EACT,KAAK,EAAE;IACL,4BAAA,KAAK,EAAE,MAAM;IACb,4BAAA,MAAM,EAAE,EAAE;IACV,4BAAA,OAAO,EAAE,QAAQ;IACjB,4BAAA,QAAQ,EAAE,EAAE;IACZ,4BAAA,UAAU,EAAE,GAAG;IACf,4BAAA,aAAa,EAAE,CAAC;IAChB,4BAAA,SAAS,EAAE,QAAQ;IACnB,4BAAA,MAAM,EAAE,mBAAmB;IAC3B,4BAAA,YAAY,EAAE,CAAC;IACf,4BAAA,SAAS,EAAE,YAAY;IACxB,yBAAA,EAAA,CACD,CACE;IAEL,gBAAA,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,YAAY,EAAE,EAAE;IAChB,wBAAA,OAAO,EAAE,WAAW;IACpB,wBAAA,eAAe,EAAE,SAAS;IAC1B,wBAAA,MAAM,EAAE,mBAAmB;IAC3B,wBAAA,YAAY,EAAE,CAAC;yBAChB,EAAA,EACE,KAAK,CACF,CACP;oBAED,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,EAAE;IACV,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;4BACf,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS;IAClD,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,YAAY,EAAE,CAAC;4BACf,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS;yBAC9C,EAAA,EAEA,SAAS,GAAG,cAAc,GAAG,kBAAkB,CACzC;oBAET,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAAA;wBAChD,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAK,EAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAClD,KAAK,EAAE;IACL,4BAAA,UAAU,EAAE,MAAM;IAClB,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,KAAK,EAAE,SAAS;IAChB,4BAAA,QAAQ,EAAE,EAAE;IACZ,4BAAA,MAAM,EAAE,SAAS;IACjB,4BAAA,cAAc,EAAE,WAAW;IAC5B,yBAAA,EAAA,EAAA,gBAAA,CAGM,CACL,CACD,CACH;QAEV;;IAGA,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;IACE,QAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,kBAAA,CAE5E;IACL,QAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,EAAA,EAAA,oCAAA,CAE7E;IAEJ,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,gBAAA,eAAe,EAAE,SAAS;IAC1B,gBAAA,MAAM,EAAE,mBAAmB;IAC3B,gBAAA,YAAY,EAAE,CAAC;IACf,gBAAA,OAAO,EAAE,EAAE;IACX,gBAAA,YAAY,EAAE,EAAE;IAChB,gBAAA,QAAQ,EAAE,EAAE;IACZ,gBAAA,KAAK,EAAE,SAAS;IACjB,aAAA,EAAA;IACC,YAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,sBAAA,CAA+B;IAC9D,YAAA,mEAAA,CAAA;YAEN,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,QAAQ,EAAE,gBAAgB,EAAA;IAC9B,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IAC9B,gBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,KAAK,EAAE;IACZ,wBAAA,OAAO,EAAE,OAAO;IAChB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,YAAY,EAAE,CAAC;yBAChB,EAAA,EAAA,YAAA,CAEO;IACR,gBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,EACrD,WAAW,EAAC,YAAY,EACxB,SAAS,EAAE,EAAE,EACb,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,EAAE;IACV,wBAAA,OAAO,EAAE,QAAQ;IACjB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,MAAM,EAAE,mBAAmB;IAC3B,wBAAA,YAAY,EAAE,CAAC;IACf,wBAAA,SAAS,EAAE,YAAY;IACvB,wBAAA,aAAa,EAAE,WAAW;IAC3B,qBAAA,EAAA,CACD,CACE;IAEN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IAC9B,gBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,KAAK,EAAE;IACZ,wBAAA,OAAO,EAAE,OAAO;IAChB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,YAAY,EAAE,CAAC;yBAChB,EAAA,EAAA,mBAAA,CAEO;oBACR,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,IAAI,EACX,QAAQ,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EACxE,WAAW,EAAC,kBAAkB,EAC9B,SAAS,EAAE,EAAE,EACb,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,EAAE;IACV,wBAAA,OAAO,EAAE,QAAQ;IACjB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,MAAM,EAAE,mBAAmB;IAC3B,wBAAA,YAAY,EAAE,CAAC;IACf,wBAAA,SAAS,EAAE,YAAY;IACxB,qBAAA,EAAA,CACD,CACE;IAEN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IAC9B,gBAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAO,KAAK,EAAE;IACZ,wBAAA,OAAO,EAAE,OAAO;IAChB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,YAAY,EAAE,CAAC;yBAChB,EAAA,EAAA,eAAA,CAEO;oBACR,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,GAAG,EACV,QAAQ,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACvC,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,EAAE;IACV,wBAAA,OAAO,EAAE,QAAQ;IACjB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,MAAM,EAAE,mBAAmB;IAC3B,wBAAA,YAAY,EAAE,CAAC;IACf,wBAAA,SAAS,EAAE,YAAY;IACxB,qBAAA,EAAA,CACD,CACE;IAEL,YAAA,KAAK,KACJ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,KAAK,EAAE,SAAS;IAChB,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,YAAY,EAAE,EAAE;IAChB,oBAAA,OAAO,EAAE,WAAW;IACpB,oBAAA,eAAe,EAAE,SAAS;IAC1B,oBAAA,MAAM,EAAE,mBAAmB;IAC3B,oBAAA,YAAY,EAAE,CAAC;qBAChB,EAAA,EACE,KAAK,CACF,CACP;gBAED,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,SAAS,EACnB,KAAK,EAAE;IACL,oBAAA,KAAK,EAAE,MAAM;IACb,oBAAA,MAAM,EAAE,EAAE;IACV,oBAAA,QAAQ,EAAE,EAAE;IACZ,oBAAA,UAAU,EAAE,GAAG;wBACf,eAAe,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS;IAClD,oBAAA,KAAK,EAAE,MAAM;IACb,oBAAA,MAAM,EAAE,MAAM;IACd,oBAAA,YAAY,EAAE,CAAC;wBACf,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,SAAS;qBAC9C,EAAA,EAEA,SAAS,GAAG,mBAAmB,GAAG,aAAa,CACzC;gBAET,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,EAAA;oBAChD,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE;IACL,wBAAA,UAAU,EAAE,MAAM;IAClB,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,MAAM,EAAE,SAAS;IACjB,wBAAA,cAAc,EAAE,WAAW;IAC5B,qBAAA,EAAA,EAAA,+BAAA,CAGM,CACL,CACD,CACH;IAEV,CAAC;;ICvdD,MAAM,eAAe,GAAG,2CAA2C;IACnE,MAAM,gBAAgB,GAAG,kCAAkC;IAO3D;;;;;;IAMG;IACG,SAAU,eAAe,CAAC,WAAmB,EAAE,OAAgB,EAAA;QACnE,OAAO;YACL,OAAO,EAAE,OAAO,IAAI,eAAe;IACnC,QAAA,MAAM,EAAE,WAAW;SACpB;IACH;IAQA;;;;;;;;IAQG;IACI,eAAe,kBAAkB,CACtC,MAAc,EACd,aAAA,GAAwB,EAAE,EAC1B,OAAgB,EAAA;IAEhB,IAAA,MAAM,GAAG,GAAG,OAAO,IAAI,gBAAgB;QAEvC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,CAAA,EAAG,GAAG,kBAAkB,EAAE;IACrD,QAAA,MAAM,EAAE,MAAM;IACd,QAAA,OAAO,EAAE;IACP,YAAA,cAAc,EAAE,kBAAkB;IAClC,YAAA,WAAW,EAAE,MAAM;IACpB,SAAA;IACD,QAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC;aAC5C,CAAC;IACH,KAAA,CAAC;IAEF,IAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAChB,QAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,QAAA,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,OAAO,IAAI,4BAA4B,CAAC;QACxF;IAEA,IAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;IACxB;IAEA;;IAEG;IACG,SAAU,aAAa,CAAC,KAAa,EAAA;QACzC,OAAO,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,IAAI,KAAK;IAC1C;IAEO,eAAe,cAAc,CAClC,MAAiB,EACjB,IAAU,EACV,QAAiB,EACjB,UAAsC,EAAA;IAEtC,IAAA,MAAM,QAAQ,GAAG,IAAI,QAAQ,EAAE;IAC/B,IAAA,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC;QACjC,IAAI,QAAQ,EAAE;IACZ,QAAA,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC;QACvC;;QAGA,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,EAAE,CAAC;QAChB;QAEA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAA,eAAA,CAAiB,EAAE;IAC/D,QAAA,MAAM,EAAE,MAAM;IACd,QAAA,OAAO,EAAE;gBACP,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,YAAA,eAAe,EAAE,CAAA,MAAA,EAAS,MAAM,CAAC,MAAM,CAAA,CAAE;IAC1C,SAAA;IACD,QAAA,IAAI,EAAE,QAAQ;IACf,KAAA,CAAC;QAEF,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,EAAE,CAAC;QAChB;IAEA,IAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAChB,QAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,QAAA,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI,gBAAgB,EAAE;QACrF;IAEA,IAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;IACxB;IAEA;;IAEG;IACI,eAAe,qBAAqB,CACzC,MAAiB,EACjB,MAAc,EACd,QAAiB,EACjB,UAAsC,EAAA;QAEtC,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,EAAE,CAAC;QAChB;IAEA,IAAA,MAAM,IAAI,GAA2B,EAAE,OAAO,EAAE,MAAM,EAAE;QACxD,IAAI,QAAQ,EAAE;IACZ,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QAC1B;QAEA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAA,eAAA,CAAiB,EAAE;IAC/D,QAAA,MAAM,EAAE,MAAM;IACd,QAAA,OAAO,EAAE;IACP,YAAA,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,YAAA,eAAe,EAAE,CAAA,MAAA,EAAS,MAAM,CAAC,MAAM,CAAA,CAAE;IAC1C,SAAA;IACD,QAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC3B,KAAA,CAAC;QAEF,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,EAAE,CAAC;QAChB;IAEA,IAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAChB,QAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,QAAA,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI,gBAAgB,EAAE;QACrF;IAEA,IAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;IACxB;IAQO,eAAe,WAAW,CAC/B,MAAiB,EACjB,KAAa,EACb,GAAW,EACX,OAA0B,EAAA;;IAG1B,IAAA,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE;IACxB,IAAA,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE,IAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,YAAY;IAClD,IAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,cAAc;;QAGpD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAA,YAAA,CAAc,EAAE;IAC5D,QAAA,MAAM,EAAE,MAAM;IACd,QAAA,OAAO,EAAE;IACP,YAAA,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,YAAA,eAAe,EAAE,CAAA,MAAA,EAAS,MAAM,CAAC,MAAM,CAAA,CAAE;IAC1C,SAAA;IACD,QAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK;IACL,YAAA,MAAM,EAAE,GAAG;IACX,YAAA,SAAS,EAAE,QAAQ;IACnB,YAAA,OAAO,EAAE,MAAM;gBACf,QAAQ;IACR,YAAA,aAAa,EAAE,UAAU;aAC1B,CAAC;IACH,KAAA,CAAC;IAEF,IAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAChB,QAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzD,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,OAAO,IAAI,gBAAgB,EAAE;QAC1G;IAEA,IAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;IACxB;IAkBO,eAAe,mBAAmB,CACvC,MAAiB,EACjB,GAAW,EACX,IAAY,EACZ,GAAW,EAAA;QAEX,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,MAAM,CAAC,OAAO,CAAA,cAAA,CAAgB,EAAE;IAC9D,QAAA,MAAM,EAAE,MAAM;IACd,QAAA,OAAO,EAAE;IACP,YAAA,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,YAAA,eAAe,EAAE,CAAA,MAAA,EAAS,MAAM,CAAC,MAAM,CAAA,CAAE;IAC1C,SAAA;IACD,QAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;IACnB,YAAA,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE;IACtB,YAAA,KAAK,EAAE,IAAI;gBACX,GAAG;aACJ,CAAC;IACH,KAAA,CAAC;IAEF,IAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAChB,QAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,QAAA,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI,uBAAuB,EAAE;QAC5F;IAEA,IAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;IACxB;IAEO,eAAe,kBAAkB,CACtC,MAAiB,EACjB,SAAiB,EACjB,GAAW,EACX,UAAA,GAAqB,CAAC,EAAA;IAEtB,IAAA,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,CAAA,EAAG,MAAM,CAAC,OAAO,CAAA,eAAA,EAAkB,SAAS,CAAA,OAAA,CAAS,EAAE;IAClF,QAAA,MAAM,EAAE,MAAM;IACd,QAAA,OAAO,EAAE;IACP,YAAA,cAAc,EAAE,kBAAkB;gBAClC,WAAW,EAAE,MAAM,CAAC,MAAM;IAC1B,YAAA,eAAe,EAAE,CAAA,MAAA,EAAS,MAAM,CAAC,MAAM,CAAA,CAAE;IAC1C,SAAA;IACD,QAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,GAAG;IACH,YAAA,WAAW,EAAE,UAAU;aACxB,CAAC;IACH,KAAA,CAAC;IAEF,IAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;IAChB,QAAA,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACzD,QAAA,MAAM,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,GAAG,IAAI,sBAAsB,EAAE;QAC3F;IAEA,IAAA,OAAO,QAAQ,CAAC,IAAI,EAAE;IACxB;;ICjPA,MAAM,gBAAgB,GAAG,qEAAqE;IAC9F,MAAM,gBAAgB,GAAG,gEAAgE;IAEzF,MAAM,WAAW,GAAmD;QAClE,eAAe,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,wEAAwE,EAAE;QACpH,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,6CAA6C,EAAE;QAC5E,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,2BAA2B,EAAE;KAC3D;IAED;IACA,MAAM,eAAe,GAAiB,CAAC;IACrC,IAAA,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,WAAW,EAAE;IACtF,IAAA,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,YAAY,EAAE;IACrF,IAAA,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,mBAAmB,EAAE;IAChG,IAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,aAAa,EAAE;IACvF,IAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,gBAAgB,EAAE;IAC1F,IAAA,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,WAAW,EAAE;IACnF,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,gBAAgB,EAAE;IAC9F,IAAA,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,aAAa,EAAE;IACvF,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,iBAAiB,EAAE;IAC/F,IAAA,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,cAAc,EAAE;IAC1F,IAAA,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,YAAY,EAAE;IAC5F,IAAA,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,WAAW,EAAE;IAC9F,IAAA,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,YAAY,EAAE;IAChG,IAAA,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,UAAU,EAAE;IAC5F,IAAA,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,cAAc,EAAE;IAC/F,IAAA,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,WAAW,EAAE;IAC3F,IAAA,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,gBAAgB,EAAE;IACjG,IAAA,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,gBAAgB,EAAE;IAC7F,IAAA,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAe,EAAE,IAAI,EAAE,CAAA,EAAG,gBAAgB,WAAW,EAAE;KAC1F,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAexC,UAAM,sBAAsB,GAA0C,CAAC,EAC5E,MAAM,EACN,OAAO,EACP,MAAM,EACN,UAAU,EACV,MAAM,GAAG,EAAE,EACX,SAAS,EACT,OAAO,EACP,OAAO,GACR,KAAI;QACH,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGC,cAAQ,CAAa,QAAQ,CAAC;QACtD,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAGA,cAAQ,CAAU,eAAe,CAAC;QAC1E,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;QACvD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAGA,cAAQ,CAAC,CAAC,CAAC;QAC3C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC;QACvD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAGA,cAAQ,CAAyB,IAAI,CAAC;QACxE,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAGA,cAAQ,CAAgB,IAAI,CAAC;;IAGzE,IAAA,MAAM,UAAU,GAAGF,YAAM,CAAC,OAAO,CAAC;IAClC,IAAA,UAAU,CAAC,OAAO,GAAG,OAAO;;IAG5B,IAAA,MAAM,mBAAmB,GAAGA,YAAM,CAAwB,IAAI,CAAC;;QAG/DC,eAAS,CAAC,MAAK;IACb,QAAA,OAAO,MAAK;IACV,YAAA,IAAI,mBAAmB,CAAC,OAAO,EAAE;IAC/B,gBAAA,aAAa,CAAC,mBAAmB,CAAC,OAAO,CAAC;IAC1C,gBAAA,mBAAmB,CAAC,OAAO,GAAG,IAAI;gBACpC;IACF,QAAA,CAAC;QACH,CAAC,EAAE,EAAE,CAAC;QAEN,MAAM,SAAS,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC;QAErD,MAAM,SAAS,GAAG,CAAC,KAAsB,EAAE,QAAA,GAAgB,EAAE,KAAI;IAC/D,QAAA,UAAU,CAAC,OAAO,GAAG,KAAK,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrE,IAAA,CAAC;;IAGD,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,eAAe,EAAE,MAAM,EAAE,MAAM,CAAC;QACvD,MAAM,CAAC,eAAe,IAAI,YAAY,KAAK;QAC3C,MAAM,CAAC,eAAe,IAAI,YAAY,KAAK;QACjE,MAAM,aAAa,GAAG,MAAM,CAAC,aAAa,KAAK,KAAK,CAAC;QACrD,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,KAAK,KAAK,CAAC;QAEzDA,eAAS,CAAC,MAAK;YACb,IAAI,MAAM,EAAE;;gBAEV,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,eAAe;gBACpD,eAAe,CAAC,SAAS,CAAC;gBAC1B,OAAO,CAAC,QAAQ,CAAC;gBACjB,eAAe,CAAC,KAAK,CAAC;gBACtB,WAAW,CAAC,CAAC,CAAC;IACd,YAAA,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,SAAS,CAAC,eAAe,CAAC;YAC5B;;IAEF,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAEZ,MAAM,WAAW,GAAG,MAAK;YACvB,SAAS,CAAC,eAAe,CAAC;IAC1B,QAAA,OAAO,EAAE;IACX,IAAA,CAAC;IAED,IAAA,MAAM,gBAAgB,GAAG,CAAC,OAAmB,KAAI;YAC/C,OAAO,CAAC,OAAO,CAAC;IAChB,QAAA,SAAS,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC;IACzD,IAAA,CAAC;IAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,MAAyB,KAAI;YACvD,IAAI,MAAM,EAAE;IACV,YAAA,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC;IAC9B,YAAA,eAAe,CAAC,MAAM,CAAC,UAAU,CAAC;IAClC,YAAA,SAAS,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC;;gBAEpF,IAAI,MAAM,CAAC,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE;oBAC1D,OAAO,CAAC,eAAe,CAAC;gBAC1B;qBAAO;oBACL,OAAO,CAAC,QAAQ,CAAC;gBACnB;YACF;iBAAO;;gBAEL,iBAAiB,CAAC,OAAO,CAAC;YAC5B;IACF,IAAA,CAAC;IAED,IAAA,MAAM,4BAA4B,GAAG,CAAC,UAA2B,KAAI;YACnE,eAAe,CAAC,UAAU,CAAC;YAC3B,SAAS,CAAC,iBAAiB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;;YAE7D,IAAI,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE;gBACnD,OAAO,CAAC,eAAe,CAAC;YAC1B;iBAAO;gBACL,OAAO,CAAC,QAAQ,CAAC;YACnB;IACF,IAAA,CAAC;QAED,MAAM,iBAAiB,GAAG,OAAO,IAAU,EAAE,QAAgB,KAAI;YAC/D,eAAe,CAAC,IAAI,CAAC;YACrB,WAAW,CAAC,EAAE,CAAC;IACf,QAAA,SAAS,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;IAErE,QAAA,mBAAmB,CAAC,OAAO,GAAG,WAAW,CAAC,MAAK;gBAC7C,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9D,CAAC,EAAE,GAAG,CAAC;IAEP,QAAA,IAAI;IACF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;gBAC5B,MAAM,QAAQ,GAAG,MAAM,cAAc,CACnC,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,CAAC,OAAO,KAAK,WAAW,CAAC,OAAO,CAAC,CAClC;IAED,YAAA,IAAI,mBAAmB,CAAC,OAAO,EAAE;IAC/B,gBAAA,aAAa,CAAC,mBAAmB,CAAC,OAAO,CAAC;IAC1C,gBAAA,mBAAmB,CAAC,OAAO,GAAG,IAAI;gBACpC;gBACA,WAAW,CAAC,GAAG,CAAC;IAEhB,YAAA,MAAM,QAAQ,GAAG;oBACf,QAAQ,EAAE,IAAI,CAAC,IAAI;IACnB,gBAAA,WAAW,EAAE,QAAQ,CAAC,UAAU,IAAI,MAAM;IAC1C,gBAAA,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;iBAC1C;IAED,YAAA,SAAS,CAAC,eAAe,EAAE,QAAQ,CAAC;gBAEpC,UAAU,CAAC,MAAK;IACd,gBAAA,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,gBAAA,WAAW,EAAE;gBACf,CAAC,EAAE,GAAG,CAAC;YAET;YAAE,OAAO,KAAU,EAAE;IACnB,YAAA,IAAI,mBAAmB,CAAC,OAAO,EAAE;IAC/B,gBAAA,aAAa,CAAC,mBAAmB,CAAC,OAAO,CAAC;IAC1C,gBAAA,mBAAmB,CAAC,OAAO,GAAG,IAAI;gBACpC;gBACA,eAAe,CAAC,KAAK,CAAC;gBACtB,WAAW,CAAC,CAAC,CAAC;IAEd,YAAA,MAAM,QAAQ,GAAoB;IAChC,gBAAA,IAAI,EAAE,aAAa;IACnB,gBAAA,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,2BAA2B;IAClF,gBAAA,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI;iBAC9B;gBAED,SAAS,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7C,YAAA,YAAY,CAAC,QAAQ,CAAC,CAAC;IACvB,YAAA,OAAO,GAAG,QAAQ,CAAC;YACrB;IACF,IAAA,CAAC;QAED,MAAM,WAAW,GAAG,MAAK;YACvB,YAAY,CAAC,IAAI,CAAC;YAClB,OAAO,CAAC,QAAQ,CAAC;IACnB,IAAA,CAAC;QAED,MAAM,iBAAiB,GAAG,OAAO,GAAW,EAAE,KAAa,KAAI;YAC7D,eAAe,CAAC,IAAI,CAAC;IACrB,QAAA,SAAS,CAAC,mBAAmB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;IAEhE,QAAA,IAAI;;IAEF,YAAA,MAAM,WAAW,CAAC,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;gBAC1D,SAAS,CAAC,mBAAmB,CAAC;gBAC9B,eAAe,CAAC,KAAK,CAAC;gBACtB,gBAAgB,CAAC,QAAQ,CAAC;YAC5B;YAAE,OAAO,KAAU,EAAE;gBACnB,eAAe,CAAC,KAAK,CAAC;IACtB,YAAA,MAAM,QAAQ,GAAoB;IAChC,gBAAA,IAAI,EAAE,iBAAiB;IACvB,gBAAA,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,IAAI,6BAA6B;IACxF,gBAAA,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI;iBAC9B;gBACD,SAAS,CAAC,iBAAiB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IACjD,YAAA,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YACnC;IACF,IAAA,CAAC;;QAGD,MAAM,oBAAoB,GAAG,OAAO,GAAW,EAAE,IAAY,EAAE,GAAW,KAAqB;IAC7F,QAAA,SAAS,CAAC,oBAAoB,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;IAEjE,QAAA,IAAI;IACF,YAAA,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC;gBACrE,SAAS,CAAC,eAAe,EAAE,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,CAAC;gBAC/D,OAAO,QAAQ,CAAC,UAAU;YAC5B;YAAE,OAAO,KAAU,EAAE;IACnB,YAAA,MAAM,QAAQ,GAAoB;IAChC,gBAAA,IAAI,EAAE,kBAAkB;IACxB,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,uBAAuB;IACjD,gBAAA,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI;iBAC9B;gBACD,SAAS,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClD,YAAA,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YACnC;IACF,IAAA,CAAC;QAED,MAAM,mBAAmB,GAAG,OAAO,SAAiB,EAAE,GAAW,EAAE,GAAW,KAAmB;IAC/F,QAAA,IAAI;gBACF,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,CAAC;gBACpE,SAAS,CAAC,mBAAmB,CAAC;;gBAG9B,SAAS,CAAC,oBAAoB,EAAE;oBAC9B,KAAK,EAAE,QAAQ,CAAC,KAAK;IACrB,gBAAA,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,MAAM;IAC7B,aAAA,CAAC;;gBAGF,MAAM,mBAAmB,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,CAAC;YAChD;YAAE,OAAO,KAAU,EAAE;IACnB,YAAA,MAAM,QAAQ,GAAoB;IAChC,gBAAA,IAAI,EAAE,kBAAkB;IACxB,gBAAA,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,sBAAsB;IAChD,gBAAA,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI;iBAC9B;gBACD,SAAS,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClD,YAAA,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC;YACnC;IACF,IAAA,CAAC;QAED,MAAM,mBAAmB,GAAG,OAAO,KAA+C,EAAE,GAAW,KAAI;YACjG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;IAChC,YAAA,MAAM,QAAQ,GAAoB;IAChC,gBAAA,IAAI,EAAE,kBAAkB;IACxB,gBAAA,OAAO,EAAE,6BAA6B;iBACvC;gBACD,SAAS,CAAC,kBAAkB,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClD,YAAA,OAAO,GAAG,QAAQ,CAAC;gBACnB;YACF;;IAGA,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC;YAC3B,eAAe,CAAC,IAAI,CAAC;YACrB,WAAW,CAAC,EAAE,CAAC;IACf,QAAA,SAAS,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAEnF,QAAA,IAAI;IACF,YAAA,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE;;IAG5B,YAAA,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAC1C,SAAS,EACT,UAAU,CAAC,GAAG,EACd,GAAG;gBACH,CAAC,OAAO,KAAK,WAAW,CAAC,OAAO,CAAC,CAClC;gBAED,WAAW,CAAC,GAAG,CAAC;IAEhB,YAAA,MAAM,QAAQ,GAAG;oBACf,QAAQ,EAAE,UAAU,CAAC,QAAQ;IAC7B,gBAAA,WAAW,EAAE,QAAQ,CAAC,UAAU,IAAI,MAAM;IAC1C,gBAAA,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;IACzC,gBAAA,MAAM,EAAE,YAAY;oBACpB,SAAS,EAAE,KAAK;iBACjB;IAED,YAAA,SAAS,CAAC,eAAe,EAAE,QAAQ,CAAC;gBAEpC,UAAU,CAAC,MAAK;IACd,gBAAA,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,gBAAA,WAAW,EAAE;gBACf,CAAC,EAAE,GAAG,CAAC;YAET;YAAE,OAAO,KAAU,EAAE;gBACnB,eAAe,CAAC,KAAK,CAAC;gBACtB,WAAW,CAAC,CAAC,CAAC;IAEd,YAAA,MAAM,QAAQ,GAAoB;IAChC,gBAAA,IAAI,EAAE,aAAa;IACnB,gBAAA,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,gCAAgC;oBACvF,OAAO,EAAE,EAAE,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;iBAC5C;gBAED,SAAS,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7C,YAAA,OAAO,GAAG,QAAQ,CAAC;YACrB;IACF,IAAA,CAAC;QAED,MAAM,aAAa,GAAG,MAAK;;YAEzB,IAAI,SAAS,EAAE;IACb,YAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAA;IACpD,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,wBAAA,KAAK,EAAE,EAAE;IACT,wBAAA,MAAM,EAAE,EAAE;IACV,wBAAA,eAAe,EAAE,SAAS;IAC1B,wBAAA,YAAY,EAAE,KAAK;IACnB,wBAAA,OAAO,EAAE,MAAM;IACf,wBAAA,UAAU,EAAE,QAAQ;IACpB,wBAAA,cAAc,EAAE,QAAQ;IACxB,wBAAA,MAAM,EAAE,aAAa;IACtB,qBAAA,EAAA;wBACC,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,SAAS,EAAC,WAAW,EAAC,GAAG,EAAA;4BAC1F,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAA,CAAE;IAChC,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,GAAG,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAA,CAAE;IACtC,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,OAAO,EAAC,EAAE,EAAC,IAAI,EAAA,CAAE,CACtC,CACF;IACN,gBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAA,EAAA,sBAAA,CAE5E;oBACL,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,EAAA,EAC9E,SAAS,CAAC,OAAO,CAChB;IACJ,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAA;IAChE,oBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE;IACL,4BAAA,OAAO,EAAE,WAAW;IACpB,4BAAA,QAAQ,EAAE,EAAE;IACZ,4BAAA,UAAU,EAAE,GAAG;IACf,4BAAA,eAAe,EAAE,SAAS;IAC1B,4BAAA,KAAK,EAAE,MAAM;IACb,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,YAAY,EAAE,CAAC;IACf,4BAAA,MAAM,EAAE,SAAS;6BAClB,EAAA,EAAA,WAAA,CAGM;IACT,oBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE;IACL,4BAAA,OAAO,EAAE,WAAW;IACpB,4BAAA,QAAQ,EAAE,EAAE;IACZ,4BAAA,UAAU,EAAE,GAAG;IACf,4BAAA,eAAe,EAAE,SAAS;IAC1B,4BAAA,KAAK,EAAE,SAAS;IAChB,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,YAAY,EAAE,CAAC;IACf,4BAAA,MAAM,EAAE,SAAS;6BAClB,EAAA,EAAA,OAAA,CAGM,CACL,CACF;YAEV;YAEA,IAAI,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,eAAe,EAAE;IAC9C,YAAA,QACE,KAAA,CAAA,aAAA,CAAC,SAAS,EAAA,EACR,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,QAAQ,EAAE,iBAAiB,EAC3B,MAAM,EAAE,MAAM,gBAAgB,CAAC,QAAQ,CAAC,EACxC,SAAS,EAAE,YAAY,EAAA,CACvB;YAEN;YAEA,IAAI,IAAI,KAAK,YAAY,IAAI,MAAM,CAAC,eAAe,EAAE;IACnD,YAAA,QACE,KAAA,CAAA,aAAA,CAAC,aAAa,EAAA,EACZ,OAAO,EAAE,MAAM,CAAC,OAAO,EACvB,YAAY,EAAE,oBAAoB,EAClC,WAAW,EAAE,mBAAmB,EAChC,MAAM,EAAE,MAAM,gBAAgB,CAAC,QAAQ,CAAC,EAAA,CACxC;YAEN;IAEA,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;IACrB,YAAA,MAAM,aAAa,GAAG,WAAW,CAAC,YAAY,CAAC;IAC/C,YAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;IACE,gBAAA,KAAA,CAAA,aAAA,CAAC,UAAU,EAAA,EACT,YAAY,EAAE,iBAAiB,EAC/B,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,QAAQ,EAAA,CAClB;oBAGD,aAAa,KACZ,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,EAAA;wBAC3B,KAAA,CAAA,aAAA,CAAC,aAAa,IACZ,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,CAAC,QAAQ,KAAK,SAAS,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAA,CACtE,CACE,CACP;IAGA,gBAAA,eAAe,KACd,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAA;wBAChD,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EACE,IAAI,EAAE,aAAa,CAAC,GAAG,EACvB,MAAM,EAAC,QAAQ,EACf,GAAG,EAAC,qBAAqB,EACzB,OAAO,EAAE,MAAM,SAAS,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,EACpE,KAAK,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAA;;IAEtC,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA;;gCAAiB,aAAa,CAAC,IAAI,CAAQ,CACrG,CACA,CACP,CACG;YAEV;;IAGA,QAAA,IAAI,IAAI,KAAK,YAAY,EAAE;IACzB,YAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;oBACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IACnD,oBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAA,EAAA,cAAA,CAE5E;IACL,oBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,6CAEnD,CACA;IACN,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAA;wBAC/D,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,gBAAgB,CAAC,QAAQ,CAAC,EACzC,KAAK,EAAE;IACL,4BAAA,KAAK,EAAE,MAAM;IACb,4BAAA,OAAO,EAAE,WAAW;IACpB,4BAAA,QAAQ,EAAE,EAAE;IACZ,4BAAA,UAAU,EAAE,GAAG;IACf,4BAAA,eAAe,EAAE,SAAS;IAC1B,4BAAA,KAAK,EAAE,MAAM;IACb,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,YAAY,EAAE,EAAE;IAChB,4BAAA,MAAM,EAAE,SAAS;IACjB,4BAAA,SAAS,EAAE,MAAM;IAClB,yBAAA,EAAA;IAED,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAA,EAAA,kBAAA,CAAyB;IAC1D,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,6BAEtD,CACA;IAER,oBAAA,MAAM,CAAC,eAAe,KACrB,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,CAAC,EACxC,KAAK,EAAE;IACL,4BAAA,KAAK,EAAE,MAAM;IACb,4BAAA,OAAO,EAAE,WAAW;IACpB,4BAAA,QAAQ,EAAE,EAAE;IACZ,4BAAA,UAAU,EAAE,GAAG;IACf,4BAAA,eAAe,EAAE,MAAM;IACvB,4BAAA,KAAK,EAAE,SAAS;IAChB,4BAAA,MAAM,EAAE,mBAAmB;IAC3B,4BAAA,YAAY,EAAE,EAAE;IAChB,4BAAA,MAAM,EAAE,SAAS;IACjB,4BAAA,SAAS,EAAE,MAAM;IAClB,yBAAA,EAAA;IAED,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAA,EAAA,mBAAA,CAA0B;4BAC3D,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,uBAAA,CAEzD,CACA,CACV,CACG,CACF;YAEV;;IAGA,QAAA,IAAI,IAAI,KAAK,eAAe,EAAE;IAC5B,YAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;oBACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IACnD,oBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAA,EAC9E,cAAc,GAAG,CAAA,EAAG,cAAc,CAAA,OAAA,CAAS,GAAG,YAAY,CACxD;IACL,oBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,oCAEnD,CACA;IACN,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAA;wBAC/D,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,gBAAgB,CAAC,QAAQ,CAAC,EACzC,KAAK,EAAE;IACL,4BAAA,KAAK,EAAE,MAAM;IACb,4BAAA,OAAO,EAAE,WAAW;IACpB,4BAAA,QAAQ,EAAE,EAAE;IACZ,4BAAA,UAAU,EAAE,GAAG;IACf,4BAAA,eAAe,EAAE,SAAS;IAC1B,4BAAA,KAAK,EAAE,MAAM;IACb,4BAAA,MAAM,EAAE,MAAM;IACd,4BAAA,YAAY,EAAE,EAAE;IAChB,4BAAA,MAAM,EAAE,SAAS;IACjB,4BAAA,SAAS,EAAE,MAAM;IAClB,yBAAA,EAAA;IAED,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAA,EAAA,kBAAA,CAAyB;IAC1D,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,kCAEtD,CACA;wBAET,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,gBAAgB,CAAC,YAAY,CAAC,EAC7C,KAAK,EAAE;IACL,4BAAA,KAAK,EAAE,MAAM;IACb,4BAAA,OAAO,EAAE,WAAW;IACpB,4BAAA,QAAQ,EAAE,EAAE;IACZ,4BAAA,UAAU,EAAE,GAAG;IACf,4BAAA,eAAe,EAAE,MAAM;IACvB,4BAAA,KAAK,EAAE,SAAS;IAChB,4BAAA,MAAM,EAAE,mBAAmB;IAC3B,4BAAA,YAAY,EAAE,EAAE;IAChB,4BAAA,MAAM,EAAE,SAAS;IACjB,4BAAA,SAAS,EAAE,MAAM;IAClB,yBAAA,EAAA;IAED,wBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAA,EAAA,iBAAA,CAAwB;4BACzD,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,2BAAA,CAEzD,CACA,CACL,CACF;YAEV;;IAGA,QAAA,IAAI,IAAI,KAAK,eAAe,EAAE;IAC5B,YAAA,MAAM,mBAAmB,GAAG,cAAc,KAAK,OAAO;gBAEtD,IAAI,mBAAmB,EAAE;;IAEvB,gBAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;wBACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IACnD,wBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAA,EAAA,wBAAA,CAE5E;IACL,wBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,iEAEnD,CACA;IACN,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAA;4BAC/D,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,4BAA4B,CAAC,MAAM,CAAC,EACnD,KAAK,EAAE;IACL,gCAAA,OAAO,EAAE,WAAW;IACpB,gCAAA,QAAQ,EAAE,EAAE;IACZ,gCAAA,UAAU,EAAE,GAAG;IACf,gCAAA,eAAe,EAAE,MAAM;IACvB,gCAAA,KAAK,EAAE,SAAS;IAChB,gCAAA,MAAM,EAAE,mBAAmB;IAC3B,gCAAA,YAAY,EAAE,EAAE;IAChB,gCAAA,MAAM,EAAE,SAAS;IACjB,gCAAA,SAAS,EAAE,MAAM;IAClB,6BAAA,EAAA;IAED,4BAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAA,EAAA,MAAA,CAAa;IAC9C,4BAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,0CAEzD,CACA;4BACT,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAM,4BAA4B,CAAC,MAAM,CAAC,EACnD,KAAK,EAAE;IACL,gCAAA,OAAO,EAAE,WAAW;IACpB,gCAAA,QAAQ,EAAE,EAAE;IACZ,gCAAA,UAAU,EAAE,GAAG;IACf,gCAAA,eAAe,EAAE,MAAM;IACvB,gCAAA,KAAK,EAAE,SAAS;IAChB,gCAAA,MAAM,EAAE,mBAAmB;IAC3B,gCAAA,YAAY,EAAE,EAAE;IAChB,gCAAA,MAAM,EAAE,SAAS;IACjB,gCAAA,SAAS,EAAE,MAAM;IAClB,6BAAA,EAAA;IAED,4BAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAA,EAAA,MAAA,CAAa;gCAC9C,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,wCAAA,CAEzD,CACA,CACL,CACF;gBAEV;;IAGA,YAAA,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe;IAEpD,YAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;oBACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;IACnD,oBAAA,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAA,EAAA,oBAAA,CAE5E;IACL,oBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,iDAEnD,CACA;IACN,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,wBAAA,OAAO,EAAE,MAAM;IACf,wBAAA,mBAAmB,EAAE,gBAAgB;IACrC,wBAAA,GAAG,EAAE,EAAE;IACP,wBAAA,SAAS,EAAE,GAAG;IACd,wBAAA,SAAS,EAAE,MAAM;IACjB,wBAAA,YAAY,EAAE,CAAC;IAChB,qBAAA,EAAA,EACE,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,MACrB,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,GAAG,EAAE,MAAM,CAAC,IAAI,EAChB,OAAO,EAAE,MAAM,kBAAkB,CAAC,MAAM,CAAC,EACzC,KAAK,EAAE;IACL,wBAAA,OAAO,EAAE,WAAW;IACpB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,eAAe,EAAE,MAAM;IACvB,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,MAAM,EAAE,qBAAqB;IAC7B,wBAAA,YAAY,EAAE,EAAE;IAChB,wBAAA,MAAM,EAAE,SAAS;IACjB,wBAAA,SAAS,EAAE,MAAM;IACjB,wBAAA,UAAU,EAAE,WAAW;IACvB,wBAAA,OAAO,EAAE,MAAM;IACf,wBAAA,UAAU,EAAE,QAAQ;IACpB,wBAAA,GAAG,EAAE,EAAE;IACR,qBAAA,EACD,WAAW,EAAE,CAAC,CAAC,KAAI;4BACjB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS;4BAC7C,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS;IACnD,oBAAA,CAAC,EACD,UAAU,EAAE,CAAC,CAAC,KAAI;4BAChB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS;4BAC7C,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM;wBAChD,CAAC,EAAA;IAEA,oBAAA,MAAM,CAAC,IAAI,KACV,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,MAAM,CAAC,IAAI,EAChB,GAAG,EAAE,MAAM,CAAC,IAAI,EAChB,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,EAAE,GACrE,CACH;IACD,oBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAA;4BACzB,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAY,EAAE,UAAU,EAAE,EAAA,EAAG,MAAM,CAAC,IAAI,CAAQ;4BAC3H,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAG,MAAM,CAAC,UAAU,CAAQ,CACvE,CACC,CACV,CAAC,CACE;oBACN,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAK;4BACZ,iBAAiB,CAAC,OAAO,CAAC;wBAC5B,CAAC,EACD,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,SAAS,EAAE,EAAE;IACb,wBAAA,OAAO,EAAE,MAAM;IACf,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,eAAe,EAAE,SAAS;IAC1B,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,MAAM,EAAE,sBAAsB;IAC9B,wBAAA,YAAY,EAAE,EAAE;IAChB,wBAAA,MAAM,EAAE,SAAS;yBAClB,EAAA,EAAA,6BAAA,CAGM,CACL;YAEV;;IAGA,QAAA,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB;IAElD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,yBAAyB;IACvD,QAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,gDAAgD;;YAGpF,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC;IAC/D,QAAA,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;IAEjF,QAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;gBAEE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,EAAA;oBACnD,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,OAAO,EACZ,GAAG,EAAC,MAAM,EACV,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,EAAA,CACxE;oBACF,KAAA,CAAA,aAAA,CAAA,IAAA,EAAA,EAAI,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,EAAA,EAChG,KAAK,CACH;oBACL,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,EAAG,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,EAAA,EACxE,QAAQ,CACP,CACA;IAGN,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAA;IAE9D,gBAAA,gBAAgB,KACf,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAK;4BACZ,eAAe,CAAC,eAAe,CAAC;4BAChC,iBAAiB,CAAC,IAAI,CAAC;;IAEvB,wBAAA,IAAI,MAAM,CAAC,eAAe,EAAE;gCAC1B,gBAAgB,CAAC,YAAY,CAAC;4BAChC;iCAAO;gCACL,gBAAgB,CAAC,QAAQ,CAAC;4BAC5B;wBACF,CAAC,EACD,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,OAAO,EAAE,WAAW;IACpB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,eAAe,EAAE,SAAS;IAC1B,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,MAAM,EAAE,MAAM;IACd,wBAAA,YAAY,EAAE,EAAE;IAChB,wBAAA,MAAM,EAAE,SAAS;IACjB,wBAAA,SAAS,EAAE,MAAM;IACjB,wBAAA,UAAU,EAAE,UAAU;IACtB,wBAAA,SAAS,EAAE,oCAAoC;IAChD,qBAAA,EACD,WAAW,EAAE,CAAC,CAAC,KAAI;4BACjB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS;4BACjD,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,kBAAkB;IACtD,oBAAA,CAAC,EACD,UAAU,EAAE,CAAC,CAAC,KAAI;4BAChB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS;4BACjD,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,SAAS,GAAG,eAAe;wBACnD,CAAC,EAAA;IAED,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAA,EAAA,cAAA,CAAqB;IACtD,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,EAAA,EAAA,qBAAA,CAEtD,CACA,CACV;IAGA,gBAAA,UAAU,KACT,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,MAAK;4BACZ,iBAAiB,CAAC,IAAI,CAAC;4BACvB,gBAAgB,CAAC,eAAe,CAAC;wBACnC,CAAC,EACD,KAAK,EAAE;IACL,wBAAA,KAAK,EAAE,MAAM;IACb,wBAAA,OAAO,EAAE,WAAW;IACpB,wBAAA,QAAQ,EAAE,EAAE;IACZ,wBAAA,UAAU,EAAE,GAAG;IACf,wBAAA,eAAe,EAAE,MAAM;IACvB,wBAAA,KAAK,EAAE,SAAS;IAChB,wBAAA,MAAM,EAAE,mBAAmB;IAC3B,wBAAA,YAAY,EAAE,EAAE;IAChB,wBAAA,MAAM,EAAE,SAAS;IACjB,wBAAA,SAAS,EAAE,MAAM;IACjB,wBAAA,UAAU,EAAE,UAAU;IACvB,qBAAA,EACD,WAAW,EAAE,CAAC,CAAC,KAAI;4BACjB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS;4BAC7C,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,SAAS;IACnD,oBAAA,CAAC,EACD,UAAU,EAAE,CAAC,CAAC,KAAI;4BAChB,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,WAAW,GAAG,SAAS;4BAC7C,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM;wBAChD,CAAC,EAAA;IAED,oBAAA,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,EAAA,EAAA,qBAAA,CAA4B;wBAC7D,KAAA,CAAA,aAAA,CAAA,MAAA,EAAA,EAAM,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,0BAAA,CAEzD,CACA,CACV,CACG,CACF;IAEV,IAAA,CAAC;;IAGD,IAAA,MAAM,WAAW,GAAG,IAAI,KAAK,QAAQ;IACrC,IAAA,MAAM,SAAS,GAAG,MAAM,KAAK,6BAA6B;QAE1D,MAAM,UAAU,GAAG,MAAK;;IAEtB,QAAA,IAAI,IAAI,KAAK,QAAQ,EAAE;gBACrB,IAAI,YAAY,KAAK,eAAe,IAAI,MAAM,CAAC,eAAe,EAAE;oBAC9D,OAAO,CAAC,YAAY,CAAC;gBACvB;qBAAO,IAAI,YAAY,KAAK,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE;oBAC5D,OAAO,CAAC,eAAe,CAAC;gBAC1B;qBAAO,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,MAAM,EAAE;oBAC7D,OAAO,CAAC,eAAe,CAAC;gBAC1B;qBAAO;oBACL,OAAO,CAAC,QAAQ,CAAC;gBACnB;YACF;IAAO,aAAA,IAAI,IAAI,KAAK,OAAO,EAAE;gBAC3B,OAAO,CAAC,YAAY,CAAC;YACvB;IAAO,aAAA,IAAI,IAAI,KAAK,YAAY,EAAE;gBAChC,OAAO,CAAC,eAAe,CAAC;YAC1B;iBAAO,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,eAAe,EAAE;gBAC5D,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,MAAM,EAAE;oBACtD,OAAO,CAAC,eAAe,CAAC;gBAC1B;qBAAO;oBACL,OAAO,CAAC,QAAQ,CAAC;gBACnB;YACF;IAAO,aAAA,IAAI,IAAI,KAAK,eAAe,EAAE;gBACnC,OAAO,CAAC,QAAQ,CAAC;YACnB;iBAAO;gBACL,OAAO,CAAC,QAAQ,CAAC;YACnB;IACA,QAAA,SAAS,CAAC,eAAe,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;IAC1D,IAAA,CAAC;QAED,QACE,KAAA,CAAA,aAAA,CAAC,KAAK,EAAA,EACJ,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,UAAU,EAClB,cAAc,EAAE,WAAW,EAC3B,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,GAAG,EAAA;IAEV,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAA;IACtC,YAAA,aAAa,EAAE;IAGhB,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE;IACV,oBAAA,SAAS,EAAE,EAAE;IACb,oBAAA,UAAU,EAAE,EAAE;IACd,oBAAA,SAAS,EAAE,mBAAmB;IAC9B,oBAAA,SAAS,EAAE,QAAQ;IACpB,iBAAA,EAAA;IACC,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAA,EAAA,+BAAA,CAExC,CACF,CACF,CACA;IAEZ;;AC74BO,UAAM,gBAAgB,GAAoC,CAAC,EAChE,WAAW,EACX,MAAM;IACN,UAAU,EACV,MAAM,EACN,SAAS,EACT,OAAO,EACP,MAAM,EACN,OAAO,EACP,QAAQ,GACT,KAAI;QACH,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC;;IAG3C,IAAA,MAAM,KAAK,GAAG,WAAW,IAAI,MAAM;IAEnC,IAAA,MAAM,IAAI,GAAGC,iBAAW,CAAC,MAAK;YAC5B,SAAS,CAAC,IAAI,CAAC;QACjB,CAAC,EAAE,EAAE,CAAC;IAEN,IAAA,MAAM,WAAW,GAAGA,iBAAW,CAAC,MAAK;YACnC,SAAS,CAAC,KAAK,CAAC;YAChB,MAAM,IAAI;IACZ,IAAA,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAEZ,IAAA,MAAM,WAAW,GAAgB;YAC/B,IAAI;YACJ,OAAO,EAAE,CAAC,CAAC,KAAK;YAChB,MAAM;SACP;IAED,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;YACG,QAAQ,CAAC,WAAW,CAAC;IACtB,QAAA,KAAA,CAAA,aAAA,CAAC,sBAAsB,EAAA,EACrB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,KAAK,IAAI,EAAE,EACnB,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,EAAA,CAChB,CACD;IAEP;IAEA;AACO,UAAM,UAAU,GAAG;;ICX1B;IACA,IAAI,eAAe,GAA0B,IAAI;IACjD,IAAI,UAAU,GAAyB,IAAI;IAE3C;;IAEG;IACH,SAAS,OAAO,GAAA;QACd,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,OAAO,EAAE;YACpB,UAAU,GAAG,IAAI;QACnB;IACA,IAAA,IAAI,eAAe,IAAI,eAAe,CAAC,UAAU,EAAE;IACjD,QAAA,eAAe,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC;YACvD,eAAe,GAAG,IAAI;QACxB;IACF;IAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BG;IACG,SAAU,IAAI,CAAC,MAAwB,EAAA;QAC3C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;;IAErC,QAAA,OAAO,EAAE;;IAGT,QAAA,eAAe,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IAC/C,QAAA,eAAe,CAAC,EAAE,GAAG,wBAAwB;IAC7C,QAAA,eAAe,CAAC,YAAY,CAAC,wBAAwB,EAAE,MAAM,CAAC;IAC9D,QAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;;IAG1C,QAAA,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC;;IAGjD,QAAA,MAAM,CAAC,MAAM,IAAI;;YAGjB,UAAU,CAAC,MAAM,CACf,KAAK,CAAC,aAAa,CAAC,sBAAsB,EAAE;IAC1C,YAAA,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE;gBACjD,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,YAAA,SAAS,EAAE,CAAC,IAAgB,EAAE,QAAuB,KAAI;IACvD,gBAAA,OAAO,EAAE;IACT,gBAAA,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;gBAC7B,CAAC;gBACD,OAAO,EAAE,MAAK;IACZ,gBAAA,OAAO,EAAE;IACT,gBAAA,MAAM,CAAC,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;gBAC5C,CAAC;IACD,YAAA,OAAO,EAAE,CAAC,KAA4B,KAAI;IACxC,gBAAA,OAAO,EAAE;oBACT,MAAM,CAAC,KAAK,CAAC;gBACf,CAAC;gBACD,OAAO,EAAE,MAAM,CAAC,OAAO;IACxB,SAAA,CAAC,CACH;IACH,IAAA,CAAC,CAAC;IACJ;IAEA;;;;;;;;;;;;;;;;;IAiBG;IACG,SAAU,MAAM,CAAC,MAItB,EAAA;QACC,IAAI,SAAS,GAA0B,IAAI;QAC3C,IAAI,IAAI,GAAyB,IAAI;QAGrC,SAAS,MAAM,CAAC,IAAa,EAAA;YAC3B,IAAI,CAAC,SAAS,EAAE;IACd,YAAA,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;IACzC,YAAA,SAAS,CAAC,EAAE,GAAG,wBAAwB;IACvC,YAAA,SAAS,CAAC,YAAY,CAAC,wBAAwB,EAAE,MAAM,CAAC;IACxD,YAAA,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC;IACpC,YAAA,IAAI,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC;YACvC;YAIA,IAAK,CAAC,MAAM,CACV,KAAK,CAAC,aAAa,CAAC,sBAAsB,EAAE;IAC1C,YAAA,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,MAAM,CAAC,WAAW,IAAI,MAAM,CAAC,MAAM,IAAI,EAAE;gBACjD,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,YAAA,SAAS,EAAE,CAAC,IAAgB,EAAE,QAAuB,KAAI;oBACvD,MAAM,CAAC,KAAK,CAAC;IACb,gBAAA,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;gBAClC,CAAC;gBACD,OAAO,EAAE,MAAK;oBACZ,MAAM,CAAC,KAAK,CAAC;IACb,gBAAA,MAAM,CAAC,OAAO,IAAI;gBACpB,CAAC;IACD,YAAA,OAAO,EAAE,CAAC,KAA4B,KAAI;oBACxC,MAAM,CAAC,KAAK,CAAC;IACb,gBAAA,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;gBACzB,CAAC;gBACD,OAAO,EAAE,MAAM,CAAC,OAAO;IACxB,SAAA,CAAC,CACH;QACH;QAEA,OAAO;YACL,IAAI,EAAE,MAAK;IACT,YAAA,MAAM,CAAC,MAAM,IAAI;gBACjB,MAAM,CAAC,IAAI,CAAC;YACd,CAAC;YACD,OAAO,EAAE,MAAK;gBACZ,IAAI,IAAI,EAAE;oBACR,IAAI,CAAC,OAAO,EAAE;oBACd,IAAI,GAAG,IAAI;gBACb;IACA,YAAA,IAAI,SAAS,IAAI,SAAS,CAAC,UAAU,EAAE;IACrC,gBAAA,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC;oBAC3C,SAAS,GAAG,IAAI;gBAClB;YAEF,CAAC;SACF;IACH;;IC9MA;IAYA;AACO,UAAM,OAAO,GAAG;AAChB,UAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("react-dom/client")):"function"==typeof define&&define.amd?define(["exports","react","react-dom/client"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).PortfolioConnect={},e.React,e.ReactDOM)}(this,function(e,t,o){"use strict";const n=({isOpen:e,onClose:o,onBack:n,showBackButton:r=!1,children:a,width:l=400,isSandbox:i=!1})=>{const s=t.useRef(null);if(t.useEffect(()=>(document.body.style.overflow=e?"hidden":"",()=>{document.body.style.overflow=""}),[e]),!e)return null;return t.createElement("div",{ref:s,onClick:e=>{e.target===s.current&&o()},style:{position:"fixed",top:0,left:0,right:0,bottom:0,backgroundColor:"rgba(0, 0, 0, 0.5)",display:"flex",alignItems:"center",justifyContent:"center",zIndex:1e4,padding:16}},t.createElement("div",{style:{backgroundColor:"#fff",borderRadius:16,width:"100%",maxWidth:l,maxHeight:"90vh",overflow:"auto",position:"relative",boxShadow:"0 25px 80px rgba(0, 0, 0, 0.25)"}},i&&t.createElement("div",{style:{backgroundColor:"#fef3c7",borderBottom:"1px solid #fcd34d",padding:"6px 16px",fontSize:12,fontWeight:600,color:"#92400e",textAlign:"center",borderTopLeftRadius:16,borderTopRightRadius:16}},"🧪 Sandbox Mode — Test data only"),t.createElement("button",{onClick:()=>{r&&n?n():o()},style:{position:"absolute",top:i?40:12,left:r?12:"auto",right:r?"auto":12,background:"none",border:"none",fontSize:r?20:28,cursor:"pointer",color:"#6b7280",lineHeight:1,padding:8,zIndex:1,display:"flex",alignItems:"center",justifyContent:"center",borderRadius:8,transition:"background-color 0.15s"},onMouseOver:e=>e.currentTarget.style.backgroundColor="#f3f4f6",onMouseOut:e=>e.currentTarget.style.backgroundColor="transparent","aria-label":r?"Back":"Close"},r?"←":"×"),a))},r={CAMS_KFINTECH:["donotreply@camsonline.com","samfs@kfintech.com"],CDSL:["ecas@cdslstatement.com"],NSDL:["nsdl-cas@nsdl.co.in"]},a=()=>t.createElement("svg",{width:"20",height:"16",viewBox:"0 0 24 18",fill:"none"},t.createElement("path",{d:"M1.636 18H5.455V8.682L0 4.91V16.364C0 17.267.733 18 1.636 18z",fill:"#4285F4"}),t.createElement("path",{d:"M18.545 18h3.819c.904 0 1.636-.732 1.636-1.636V4.91l-5.455 3.772V18z",fill:"#34A853"}),t.createElement("path",{d:"M18.545 1.636V8.682L24 4.91v-1.91c0-2.022-2.309-3.175-3.927-1.963l-1.528 1.109z",fill:"#FBBC04"}),t.createElement("path",{d:"M5.455 8.682V1.636l6.545 4.91 6.545-4.91v7.046L12 13.592 5.455 8.682z",fill:"#EA4335"}),t.createElement("path",{d:"M0 2.999v1.91l5.455 3.773V1.636L3.927.527C2.31-.685 0 .468 0 2.999z",fill:"#C5221F"})),l=()=>t.createElement("svg",{width:"20",height:"20",viewBox:"0 0 32 32",fill:"none"},t.createElement("path",{d:"M19.484 7.937v5.477l1.916 1.205a.489.489 0 00.21.063.489.489 0 00.229-.063l8.088-5.234a1.455 1.455 0 00-.741-1.448H19.484z",fill:"#0072C6"}),t.createElement("path",{d:"M19.484 15.457l1.747 1.2a.522.522 0 00.543 0c-.3.181 8.073-5.378 8.073-5.378v10.795a1.474 1.474 0 01-1.474 1.474h-8.889V15.457z",fill:"#0072C6"}),t.createElement("path",{d:"M10.44 12.932a1.927 1.927 0 00-1.384-.543 1.9 1.9 0 00-1.387.543 1.927 1.927 0 00-.543 1.384v3.086a1.927 1.927 0 00.543 1.384 1.864 1.864 0 001.384.543 1.927 1.927 0 001.387-.543 1.9 1.9 0 00.543-1.384v-3.086a1.927 1.927 0 00-.543-1.384z",fill:"#0072C6"}),t.createElement("path",{d:"M18.044 5.116H8.044a1.474 1.474 0 00-1.474 1.474v1.209l6.3 4.5 5.174-3.15V6.59a1.474 1.474 0 00-1.474-1.474H8.044z",fill:"#0072C6"}),t.createElement("path",{d:"M1.474 9.789h16.842v14.737H1.474A1.474 1.474 0 010 23.053V11.263a1.474 1.474 0 011.474-1.474z",fill:"#0072C6"}),t.createElement("ellipse",{cx:"9.263",cy:"16.842",rx:"3.789",ry:"4.421",stroke:"#fff",strokeWidth:"1.5",fill:"none"})),i=()=>t.createElement("svg",{width:"20",height:"20",viewBox:"0 0 32 32",fill:"none"},t.createElement("path",{d:"M16 2C8.268 2 2 8.268 2 16s6.268 14 14 14 14-6.268 14-14S23.732 2 16 2z",fill:"#5C0DAC"}),t.createElement("path",{d:"M22.287 10.5h-2.844l-3.118 6.066L13.178 10.5h-2.89l4.622 8.37v4.63h2.666v-4.63l4.711-8.37z",fill:"#fff"})),s=e=>{const t=`(${((o=e)?r[o]:Object.values(r).flat()).map(e=>`from:${e}`).join(" OR ")}) has:attachment`;var o;const n=encodeURIComponent(t);return[{name:"Gmail",Logo:a,url:`https://mail.google.com/mail/u/0/#search/${n}`},{name:"Outlook",Logo:l,url:`https://outlook.live.com/mail/0/deeplink?version=20200615005&search=${n}`},{name:"Yahoo",Logo:i,url:`https://mail.yahoo.com/d/search/keyword=${n}`}]},c=({selectedType:e,onSearchClick:o})=>{const n=s(e);return t.createElement("div",{style:{marginBottom:16}},t.createElement("div",{style:{fontSize:12,color:"#6b7280",marginBottom:10,fontWeight:500}},"Find statement in your inbox"),t.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:10}},n.map(e=>t.createElement("a",{key:e.name,href:e.url,target:"_blank",rel:"noopener noreferrer",onClick:()=>o?.(e.name),style:{display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",padding:10,backgroundColor:"#f9fafb",borderRadius:8,textDecoration:"none",border:"1px solid #e5e7eb",transition:"all 0.15s",cursor:"pointer"},onMouseEnter:e=>{e.currentTarget.style.backgroundColor="#eff6ff",e.currentTarget.style.borderColor="#2563eb"},onMouseLeave:e=>{e.currentTarget.style.backgroundColor="#f9fafb",e.currentTarget.style.borderColor="#e5e7eb"}},t.createElement(e.Logo,null),t.createElement("span",{style:{fontSize:11,color:"#374151",fontWeight:500,marginTop:4}},e.name)))))},d=({onFileSelect:e,isProcessing:o,progress:n})=>{const[r,a]=t.useState(null),[l,i]=t.useState(""),[s,c]=t.useState(!1),d=t.useRef(null),m=t.useCallback(e=>{e.preventDefault(),c(!1);const t=e.dataTransfer.files[0];"application/pdf"===t?.type&&a(t)},[]),p=e=>{const t=e.target.files?.[0];t&&a(t)};return o?t.createElement("div",{style:{textAlign:"center",padding:"50px 20px"}},t.createElement("div",{style:{width:56,height:56,backgroundColor:"#eff6ff",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 20px"}},t.createElement("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"#2563eb",strokeWidth:"2"},t.createElement("path",{d:"M21 12V7H5a2 2 0 0 1 0-4h14v4"}),t.createElement("path",{d:"M3 5v14a2 2 0 0 0 2 2h16v-5"}),t.createElement("path",{d:"M18 12a2 2 0 0 0 0 4h4v-4Z"}))),t.createElement("h3",{style:{margin:"0 0 8px",fontSize:18,fontWeight:600,color:"#1f2937"}},"Reading Your Investments"),t.createElement("p",{style:{color:"#6b7280",marginBottom:24,fontSize:14}},"Extracting holdings, transactions & values..."),t.createElement("div",{style:{height:6,backgroundColor:"#e5e7eb",borderRadius:3,overflow:"hidden",maxWidth:240,margin:"0 auto"}},t.createElement("div",{style:{height:"100%",width:`${n}%`,backgroundColor:"#2563eb",transition:"width 0.3s ease"}})),t.createElement("div",{style:{fontSize:12,color:"#9ca3af",marginTop:10}},n<50?"Uploading...":n<90?"Processing...":"Almost done!")):r?t.createElement("div",null,t.createElement("h3",{style:{fontSize:18,fontWeight:600,margin:"0 0 16px",color:"#1f2937"}},"Enter Password"),t.createElement("div",{style:{display:"flex",alignItems:"center",padding:14,border:"1px solid #e5e7eb",borderRadius:10,backgroundColor:"#f9fafb",marginBottom:20}},t.createElement("div",{style:{width:40,height:40,backgroundColor:"#dbeafe",borderRadius:8,display:"flex",alignItems:"center",justifyContent:"center",marginRight:12}},t.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"#2563eb",strokeWidth:"2"},t.createElement("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),t.createElement("polyline",{points:"14 2 14 8 20 8"}))),t.createElement("div",{style:{flex:1,overflow:"hidden"}},t.createElement("div",{style:{fontWeight:500,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",fontSize:14,color:"#1f2937"}},r.name),t.createElement("div",{style:{fontSize:12,color:"#9ca3af"}},(r.size/1024/1024).toFixed(2)," MB")),t.createElement("button",{onClick:()=>a(null),style:{background:"none",border:"none",color:"#6b7280",cursor:"pointer",fontSize:13,textDecoration:"underline"}},"Change")),t.createElement("div",{style:{marginBottom:20}},t.createElement("label",{style:{display:"block",marginBottom:6,fontWeight:500,fontSize:13,color:"#374151"}},"PDF Password"),t.createElement("input",{type:"password",placeholder:"Usually your PAN (e.g. ABCDE1234F)",value:l,onChange:e=>i(e.target.value),style:{width:"100%",padding:"12px 14px",fontSize:16,border:"1px solid #d1d5db",borderRadius:8,boxSizing:"border-box"}}),t.createElement("div",{style:{fontSize:11,color:"#9ca3af",marginTop:6,display:"flex",gap:16}},t.createElement("span",null,"Common passwords:"),t.createElement("span",null,"PAN in CAPS"),t.createElement("span",null,"DOB (DDMMYYYY)"))),t.createElement("button",{onClick:()=>{r&&e(r,l)},style:{width:"100%",padding:"16px 24px",fontSize:16,fontWeight:600,backgroundColor:"#2563eb",color:"#fff",border:"none",borderRadius:8,cursor:"pointer",transition:"background-color 0.2s"}},"Import Investments")):t.createElement("div",null,t.createElement("h3",{style:{fontSize:18,fontWeight:600,margin:"0 0 16px",color:"#1f2937"}},"Upload Your Statement"),t.createElement("div",{onDragOver:e=>{e.preventDefault(),c(!0)},onDragLeave:()=>c(!1),onDrop:m,onClick:()=>d.current?.click(),style:{border:"2px dashed "+(s?"#2563eb":"#d1d5db"),borderRadius:12,padding:"36px 20px",textAlign:"center",cursor:"pointer",backgroundColor:s?"#eff6ff":"#f9fafb",transition:"all 0.2s"}},t.createElement("input",{ref:d,type:"file",accept:".pdf",onChange:p,style:{display:"none"}}),t.createElement("div",{style:{marginBottom:12}},t.createElement("svg",{width:"40",height:"40",viewBox:"0 0 24 24",fill:"none",stroke:"#9ca3af",strokeWidth:"1.5"},t.createElement("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),t.createElement("polyline",{points:"14 2 14 8 20 8"}),t.createElement("line",{x1:"16",y1:"13",x2:"8",y2:"13"}),t.createElement("line",{x1:"16",y1:"17",x2:"8",y2:"17"}),t.createElement("polyline",{points:"10 9 9 9 8 9"}))),t.createElement("p",{style:{margin:0,fontSize:15,color:"#374151",fontWeight:500}},"Drop your CAS PDF here"),t.createElement("p",{style:{margin:"6px 0 0",fontSize:13,color:"#9ca3af"}},"or click to browse")),t.createElement("div",{style:{marginTop:12,fontSize:11,color:"#9ca3af",textAlign:"center"}},"Supported: CAMS, KFintech, CDSL, NSDL statements"))},m=({prefill:e,onSubmit:o,onBack:n,isLoading:r})=>{const[a,l]=t.useState(e?.pan||""),[i,s]=t.useState(e?.email||""),[c,d]=t.useState("");t.useEffect(()=>{e&&(e.pan&&l(e.pan),e.email&&s(e.email))},[e]);return r?t.createElement("div",{style:{textAlign:"center",padding:"60px 20px",display:"flex",flexDirection:"column",alignItems:"center"}},t.createElement("div",{style:{width:48,height:48,border:"3px solid #e5e7eb",borderTopColor:"#2563eb",borderRadius:"50%",animation:"spin 1s linear infinite",marginBottom:24}}),t.createElement("style",null,"@keyframes spin { to { transform: rotate(360deg); } }"),t.createElement("h3",{style:{margin:0,fontSize:18,fontWeight:600,color:"#1f2937"}},"Sending Request..."),t.createElement("p",{style:{color:"#6b7280",marginTop:8,fontSize:14}},"You'll receive your statement via email shortly")):t.createElement("div",null,t.createElement("h2",{style:{fontSize:20,fontWeight:700,margin:"0 0 6px",color:"#1f2937"}},"Request CAS via Email"),t.createElement("p",{style:{fontSize:14,color:"#6b7280",margin:"0 0 20px",lineHeight:1.5}},"KFintech will send your statement in 2-5 minutes"),t.createElement("div",{style:{backgroundColor:"#f9fafb",border:"1px solid #e5e7eb",borderRadius:8,padding:12,marginBottom:20,fontSize:12,color:"#6b7280"}},t.createElement("strong",{style:{color:"#374151"}},"Note:")," Use the email registered with your mutual fund investments"),t.createElement("form",{onSubmit:async e=>{e.preventDefault(),d("");const t=a.toUpperCase();if(/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/.test(t))if((e=>/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(e))(i))try{await o(t,i)}catch(e){d(e.message||"Failed to submit request")}else d("Invalid email format");else d("Invalid PAN format (e.g. ABCDE1234F)")}},t.createElement("div",{style:{marginBottom:16}},t.createElement("label",{style:{display:"block",fontSize:13,fontWeight:500,color:"#374151",marginBottom:6}},"PAN Number"),t.createElement("input",{type:"text",value:a,onChange:e=>l(e.target.value.toUpperCase()),placeholder:"ABCDE1234F",maxLength:10,style:{width:"100%",height:46,padding:"0 14px",fontSize:16,border:"1px solid #d1d5db",borderRadius:8,boxSizing:"border-box",textTransform:"uppercase"}})),t.createElement("div",{style:{marginBottom:20}},t.createElement("label",{style:{display:"block",fontSize:13,fontWeight:500,color:"#374151",marginBottom:6}},"Email Address"),t.createElement("input",{type:"email",value:i,onChange:e=>s(e.target.value),placeholder:"you@example.com",style:{width:"100%",height:46,padding:"0 14px",fontSize:16,border:"1px solid #d1d5db",borderRadius:8,boxSizing:"border-box"}}),t.createElement("div",{style:{fontSize:11,color:"#9ca3af",marginTop:4}},"Statement will be sent to this email")),c&&t.createElement("div",{style:{color:"#dc2626",fontSize:13,marginBottom:16,padding:"10px 12px",backgroundColor:"#fef2f2",border:"1px solid #fecaca",borderRadius:8}},c),t.createElement("button",{type:"submit",style:{width:"100%",height:50,fontSize:16,fontWeight:600,backgroundColor:"#2563eb",color:"#fff",border:"none",borderRadius:8,cursor:"pointer",transition:"background-color 0.2s"}},"Request Statement"),t.createElement("div",{style:{textAlign:"center",marginTop:16}},t.createElement("button",{type:"button",onClick:n,style:{background:"none",border:"none",color:"#6b7280",fontSize:13,cursor:"pointer",textDecoration:"underline"}},"← I already have my file"))))},p=({prefill:e,onRequestOtp:o,onVerifyOtp:n,onBack:r})=>{const[a,l]=t.useState("INPUT"),[i,s]=t.useState(e?.pan||""),[c,d]=t.useState(e?.boId||""),[m,p]=t.useState(e?.dob||""),[f,g]=t.useState(""),[u,y]=t.useState(""),[h,b]=t.useState(""),[E,S]=t.useState(!1);t.useEffect(()=>{e&&(e.pan&&s(e.pan),e.boId&&d(e.boId),e.dob&&p(e.dob))},[e]);const C=async e=>{if(e.preventDefault(),b(""),4===f.length){S(!0),l("LOADING");try{await n(u,f,i.toUpperCase()),l("SUCCESS")}catch(e){b(e.message||"Something went wrong. Please try again."),l("ERROR"),S(!1)}}else b("Please enter the 4-digit OTP")};return"ERROR"===a?t.createElement("div",{style:{textAlign:"center",padding:"40px 20px"}},t.createElement("div",{style:{width:56,height:56,backgroundColor:"#fef2f2",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 20px"}},t.createElement("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"#dc2626",strokeWidth:"2"},t.createElement("circle",{cx:"12",cy:"12",r:"10"}),t.createElement("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),t.createElement("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"}))),t.createElement("h3",{style:{margin:"0 0 8px",fontSize:18,fontWeight:600,color:"#1f2937"}},"Import Failed"),t.createElement("p",{style:{color:"#6b7280",fontSize:14,margin:"0 0 24px",lineHeight:1.5}},h||"Something went wrong while fetching your portfolio."),t.createElement("div",{style:{display:"flex",flexDirection:"column",gap:12}},t.createElement("button",{onClick:()=>{l("OTP"),b(""),g("")},style:{width:"100%",height:46,fontSize:15,fontWeight:600,backgroundColor:"#2563eb",color:"#fff",border:"none",borderRadius:8,cursor:"pointer"}},"Try Again"),t.createElement("button",{onClick:()=>{l("INPUT"),b(""),g("")},style:{width:"100%",height:46,fontSize:15,fontWeight:500,backgroundColor:"#fff",color:"#6b7280",border:"1px solid #e5e7eb",borderRadius:8,cursor:"pointer"}},"Start Over"))):"LOADING"===a?t.createElement("div",{style:{textAlign:"center",padding:"60px 20px",display:"flex",flexDirection:"column",alignItems:"center"}},t.createElement("div",{style:{width:48,height:48,border:"3px solid #e5e7eb",borderTopColor:"#2563eb",borderRadius:"50%",animation:"spin 1s linear infinite",marginBottom:24}}),t.createElement("style",null,"@keyframes spin { to { transform: rotate(360deg); } }"),t.createElement("h3",{style:{margin:0,fontSize:18,fontWeight:600,color:"#1f2937"}},"Importing Your Portfolio"),t.createElement("p",{style:{color:"#6b7280",marginTop:8,fontSize:14}},"Securely fetching your holdings...")):"SUCCESS"===a?t.createElement("div",{style:{textAlign:"center",padding:"40px 20px"}},t.createElement("div",{style:{width:56,height:56,backgroundColor:"#dcfce7",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 20px"}},t.createElement("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"#16a34a",strokeWidth:"2.5"},t.createElement("polyline",{points:"20 6 9 17 4 12"}))),t.createElement("h3",{style:{margin:"0 0 8px",fontSize:20,fontWeight:600,color:"#1f2937"}},"Portfolio Imported!"),t.createElement("p",{style:{color:"#6b7280",fontSize:14,margin:0}},"Your demat holdings are now available")):"OTP"===a?t.createElement("div",null,t.createElement("h2",{style:{fontSize:20,fontWeight:700,margin:"0 0 6px",color:"#1f2937"}},"Verify OTP"),t.createElement("p",{style:{fontSize:14,color:"#6b7280",margin:"0 0 20px",lineHeight:1.5}},"CDSL has sent an OTP to your registered mobile"),t.createElement("form",{onSubmit:C},t.createElement("div",{style:{marginBottom:20}},t.createElement("label",{style:{display:"block",fontSize:13,fontWeight:500,color:"#374151",marginBottom:6}},"OTP Code"),t.createElement("input",{type:"text",value:f,onChange:e=>g(e.target.value.replace(/\D/g,"").slice(0,4)),placeholder:"••••",maxLength:4,autoFocus:!0,style:{width:"100%",height:50,padding:"0 14px",fontSize:20,fontWeight:600,letterSpacing:8,textAlign:"center",border:"1px solid #d1d5db",borderRadius:8,boxSizing:"border-box"}})),h&&t.createElement("div",{style:{color:"#dc2626",fontSize:13,marginBottom:16,padding:"10px 12px",backgroundColor:"#fef2f2",border:"1px solid #fecaca",borderRadius:8}},h),t.createElement("button",{type:"submit",disabled:E,style:{width:"100%",height:50,fontSize:16,fontWeight:600,backgroundColor:E?"#93c5fd":"#2563eb",color:"#fff",border:"none",borderRadius:8,cursor:E?"not-allowed":"pointer"}},E?"Verifying...":"Import Portfolio"),t.createElement("div",{style:{textAlign:"center",marginTop:16}},t.createElement("button",{type:"button",onClick:()=>{l("INPUT"),b("")},style:{background:"none",border:"none",color:"#6b7280",fontSize:13,cursor:"pointer",textDecoration:"underline"}},"← Go back")))):t.createElement("div",null,t.createElement("h2",{style:{fontSize:20,fontWeight:700,margin:"0 0 6px",color:"#1f2937"}},"Import from CDSL"),t.createElement("p",{style:{fontSize:14,color:"#6b7280",margin:"0 0 20px",lineHeight:1.5}},"Securely fetch your demat holdings"),t.createElement("div",{style:{backgroundColor:"#f9fafb",border:"1px solid #e5e7eb",borderRadius:8,padding:12,marginBottom:20,fontSize:12,color:"#6b7280"}},t.createElement("strong",{style:{color:"#374151"}},"Where to find BO ID:")," Check your broker app under Demat Details, or any CDSL statement"),t.createElement("form",{onSubmit:async e=>{e.preventDefault(),b("");const t=i.toUpperCase();if(/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/.test(t))if((e=>/^\d{16}$/.test(e))(c))if((e=>/^\d{4}-\d{2}-\d{2}$/.test(e))(m)){S(!0);try{const e=await o(t,c,m);y(e),l("OTP")}catch(e){b(e.message||"Failed to request OTP")}finally{S(!1)}}else b("Date of birth must be YYYY-MM-DD");else b("BO ID must be 16 digits");else b("Invalid PAN format (e.g. ABCDE1234F)")}},t.createElement("div",{style:{marginBottom:16}},t.createElement("label",{style:{display:"block",fontSize:13,fontWeight:500,color:"#374151",marginBottom:6}},"PAN Number"),t.createElement("input",{type:"text",value:i,onChange:e=>s(e.target.value.toUpperCase()),placeholder:"ABCDE1234F",maxLength:10,style:{width:"100%",height:46,padding:"0 14px",fontSize:16,border:"1px solid #d1d5db",borderRadius:8,boxSizing:"border-box",textTransform:"uppercase"}})),t.createElement("div",{style:{marginBottom:16}},t.createElement("label",{style:{display:"block",fontSize:13,fontWeight:500,color:"#374151",marginBottom:6}},"BO ID (16 digits)"),t.createElement("input",{type:"text",value:c,onChange:e=>d(e.target.value.replace(/\D/g,"").slice(0,16)),placeholder:"1234567890123456",maxLength:16,style:{width:"100%",height:46,padding:"0 14px",fontSize:16,border:"1px solid #d1d5db",borderRadius:8,boxSizing:"border-box"}})),t.createElement("div",{style:{marginBottom:20}},t.createElement("label",{style:{display:"block",fontSize:13,fontWeight:500,color:"#374151",marginBottom:6}},"Date of Birth"),t.createElement("input",{type:"date",value:m,onChange:e=>p(e.target.value),style:{width:"100%",height:46,padding:"0 14px",fontSize:16,border:"1px solid #d1d5db",borderRadius:8,boxSizing:"border-box"}})),h&&t.createElement("div",{style:{color:"#dc2626",fontSize:13,marginBottom:16,padding:"10px 12px",backgroundColor:"#fef2f2",border:"1px solid #fecaca",borderRadius:8}},h),t.createElement("button",{type:"submit",disabled:E,style:{width:"100%",height:50,fontSize:16,fontWeight:600,backgroundColor:E?"#93c5fd":"#2563eb",color:"#fff",border:"none",borderRadius:8,cursor:E?"not-allowed":"pointer"}},E?"Requesting OTP...":"Request OTP"),t.createElement("div",{style:{textAlign:"center",marginTop:16}},t.createElement("button",{type:"button",onClick:r,style:{background:"none",border:"none",color:"#6b7280",fontSize:13,cursor:"pointer",textDecoration:"underline"}},"← I already have my file"))))};const f="https://assets.smallcase.com/smallcase/assets/brokerLogo/small",g={CAMS_KFINTECH:{name:"KFintech",url:"https://mfs.kfintech.com/investor/General/ConsolidatedAccountStatement"},CDSL:{name:"CDSL",url:"https://www.cdslindia.com/cas/logincas.aspx"},NSDL:{name:"NSDL",url:"https://nsdlcas.nsdl.com/"}},u=[{name:"Zerodha",depository:"CDSL",logo:`${f}/kite.svg`},{name:"Groww",depository:"CDSL",logo:`${f}/groww.svg`},{name:"Angel One",depository:"CDSL",logo:`${f}/angelbroking.svg`},{name:"Upstox",depository:"CDSL",logo:`${f}/upstox.svg`},{name:"5paisa",depository:"CDSL",logo:`${f}/fivepaisa.svg`},{name:"Dhan",depository:"CDSL",logo:`${f}/dhan.svg`},{name:"Alice Blue",depository:"CDSL",logo:`${f}/aliceblue.svg`},{name:"Fisdom",depository:"CDSL",logo:`${f}/fisdom.svg`},{name:"FundzBazar",depository:"CDSL",logo:`${f}/fundzbazar.svg`},{name:"HDFC SKY",depository:"CDSL",logo:`${f}/hdfcsky.svg`},{name:"ICICI Direct",depository:"NSDL",logo:`${f}/icici.svg`},{name:"HDFC Securities",depository:"NSDL",logo:`${f}/hdfc.svg`},{name:"Kotak Securities",depository:"NSDL",logo:`${f}/kotak.svg`},{name:"SBI Securities",depository:"NSDL",logo:`${f}/sbi.svg`},{name:"Motilal Oswal",depository:"NSDL",logo:`${f}/motilal.svg`},{name:"IIFL Capital",depository:"NSDL",logo:`${f}/iifl.svg`},{name:"Nuvama Wealth",depository:"NSDL",logo:`${f}/edelweiss.svg`},{name:"Trustline",depository:"NSDL",logo:`${f}/trustline.svg`},{name:"AxisDirect",depository:"NSDL",logo:`${f}/axis.svg`}].sort((e,t)=>e.name.localeCompare(t.name)),y=({isOpen:e,onClose:o,apiKey:r,apiBaseUrl:a,config:l={},onSuccess:i,onError:s,onEvent:f})=>{const[y,h]=t.useState("LOCATE"),[b,E]=t.useState("CAMS_KFINTECH"),[S,C]=t.useState(!1),[x,v]=t.useState(0),[k,D]=t.useState(!1),[T,w]=t.useState(null),[R,O]=t.useState(null),A=t.useRef(f);A.current=f;const z=t.useRef(null);t.useEffect(()=>()=>{z.current&&(clearInterval(z.current),z.current=null)},[]);const L={baseUrl:a||"https://portfolio-parser.api.casparser.in",apiKey:r};const _=(e,t={})=>{A.current?.(e,{timestamp:Date.now(),...t})},I=l.allowedTypes||["CAMS_KFINTECH","CDSL","NSDL"];l.enableGenerator,l.enableCdslFetch;const F=!1!==l.showShortcuts,P=!1!==l.showPortalLinks;t.useEffect(()=>{if(e){const e=I[0]||"CAMS_KFINTECH";E(e),h("LOCATE"),C(!1),v(0),w(null),_("WIDGET_OPENED")}},[e]);const B=()=>{_("WIDGET_CLOSED"),o()},W=e=>{h(e),_("MODE_SWITCHED",{from:y,to:e})},N=e=>{E(e),_("BROKER_SELECTED",{broker:"Other",depository:e}),"CDSL"===e&&l.enableCdslFetch?h("DEMAT_OPTIONS"):h("UPLOAD")},M=async(e,t)=>{C(!0),v(10),_("UPLOAD_STARTED",{filename:e.name,size:e.size}),z.current=setInterval(()=>{v(e=>Math.min(e+10*Math.random(),90))},500);try{const o=Date.now(),n=await async function(e,t,o,n){const r=new FormData;r.append("pdf_file",t),o&&r.append("password",o),n&&n(30);const a=await fetch(`${e.baseUrl}/v4/smart/parse`,{method:"POST",headers:{"x-api-key":e.apiKey,Authorization:`Token ${e.apiKey}`},body:r});if(n&&n(80),!a.ok){const e=await a.json().catch(()=>({}));throw{response:{data:e},message:e.msg||"Request failed"}}return a.json()}(L,e,t,e=>v(e));z.current&&(clearInterval(z.current),z.current=null),v(100);const r={filename:e.name,parser_type:n.cas_author||"AUTO",parse_duration_ms:Date.now()-o};_("PARSE_SUCCESS",r),setTimeout(()=>{i(n,r),B()},500)}catch(e){z.current&&(clearInterval(z.current),z.current=null),C(!1),v(0);const t={code:"PARSE_ERROR",message:e.response?.data?.msg||e.message||"Failed to parse statement",details:e.response?.data};_("PARSE_ERROR",{error:t}),w(t),s?.(t)}},H=()=>{w(null),h("UPLOAD")},K=async(e,t)=>{D(!0),_("GENERATOR_STARTED",{pan:e.slice(0,4)+"***"});try{await async function(e,t,o,n){const r=new Date,a=n?.toDate||r.toISOString().split("T")[0],l=n?.fromDate||"2000-01-01",i=n?.password||"Abcdefghi12$",s=await fetch(`${e.baseUrl}/v4/generate`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e.apiKey,Authorization:`Token ${e.apiKey}`},body:JSON.stringify({email:t,pan_no:o,from_date:l,to_date:a,password:i,cas_authority:"kfintech"})});if(!s.ok){const e=await s.json().catch(()=>({}));throw{response:{data:e},message:e.msg||e.message||"Request failed"}}return s.json()}(L,t,e,l.generator),_("GENERATOR_SUCCESS"),D(!1),W("LOCATE")}catch(e){D(!1);const t={code:"GENERATOR_ERROR",message:e.response?.data?.message||e.message||"Failed to request statement",details:e.response?.data};throw _("GENERATOR_ERROR",{error:t}),new Error(t.message)}},$=async(e,t,o)=>{_("CDSL_FETCH_STARTED",{pan:e.slice(0,4)+"***"});try{const n=await async function(e,t,o,n){const r=await fetch(`${e.baseUrl}/v4/cdsl/fetch`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e.apiKey,Authorization:`Token ${e.apiKey}`},body:JSON.stringify({pan:t.toUpperCase(),bo_id:o,dob:n})});if(!r.ok){const e=await r.json().catch(()=>({}));throw{response:{data:e},message:e.msg||"Failed to request OTP"}}return r.json()}(L,e,t,o);return _("CDSL_OTP_SENT",{session_id:n.session_id}),n.session_id}catch(e){const t={code:"CDSL_FETCH_ERROR",message:e.message||"Failed to request OTP",details:e.response?.data};throw _("CDSL_FETCH_ERROR",{error:t}),new Error(t.message)}},U=async(e,t,o)=>{try{const n=await async function(e,t,o,n=6){const r=await fetch(`${e.baseUrl}/v4/cdsl/fetch/${t}/verify`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e.apiKey,Authorization:`Token ${e.apiKey}`},body:JSON.stringify({otp:o,num_periods:n})});if(!r.ok){const e=await r.json().catch(()=>({}));throw{response:{data:e},message:e.msg||"Failed to verify OTP"}}return r.json()}(L,e,t);_("CDSL_OTP_VERIFIED"),_("CDSL_FETCH_SUCCESS",{files:n.files,count:n.files.length}),await j(n.files,o)}catch(e){const t={code:"CDSL_FETCH_ERROR",message:e.message||"Failed to verify OTP",details:e.response?.data};throw _("CDSL_FETCH_ERROR",{error:t}),new Error(t.message)}},j=async(e,t)=>{if(!e||0===e.length){const e={code:"CDSL_FETCH_ERROR",message:"No files returned from CDSL"};return _("CDSL_FETCH_ERROR",{error:e}),void s?.(e)}const o=e[0];C(!0),v(10),_("PARSE_STARTED",{filename:o.filename,source:"CDSL_FETCH"});try{const n=Date.now(),r=await async function(e,t,o,n){n&&n(30);const r={pdf_url:t};o&&(r.password=o);const a=await fetch(`${e.baseUrl}/v4/smart/parse`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e.apiKey,Authorization:`Token ${e.apiKey}`},body:JSON.stringify(r)});if(n&&n(80),!a.ok){const e=await a.json().catch(()=>({}));throw{response:{data:e},message:e.msg||"Request failed"}}return a.json()}(L,o.url,t,e=>v(e));v(100);const a={filename:o.filename,parser_type:r.cas_author||"CDSL",parse_duration_ms:Date.now()-n,source:"CDSL_FETCH",all_files:e};_("PARSE_SUCCESS",a),setTimeout(()=>{i(r,a),B()},500)}catch(t){C(!1),v(0);const o={code:"PARSE_ERROR",message:t.response?.data?.msg||t.message||"Failed to parse CDSL statement",details:{...t.response?.data,files:e}};_("PARSE_ERROR",{error:o}),s?.(o)}},Y="LOCATE"!==y,q="sandbox-with-json-responses"===r;return t.createElement(n,{isOpen:e,onClose:B,onBack:()=>{"UPLOAD"===y?"CAMS_KFINTECH"===b&&l.enableGenerator?h("MF_OPTIONS"):"CDSL"===b&&l.enableCdslFetch?h("DEMAT_OPTIONS"):h("CDSL"===b||"NSDL"===b?"SELECT_BROKER":"LOCATE"):h("FETCH"===y?"MF_OPTIONS":"CDSL_FETCH"===y?"DEMAT_OPTIONS":!("MF_OPTIONS"!==y&&"DEMAT_OPTIONS"!==y||"CDSL"!==b&&"NSDL"!==b)?"SELECT_BROKER":"LOCATE"),_("MODE_SWITCHED",{from:y,to:"LOCATE"})},showBackButton:Y,isSandbox:q,width:420},t.createElement("div",{style:{padding:"28px 24px 20px"}},(()=>{if(T)return t.createElement("div",{style:{textAlign:"center",padding:"20px 0"}},t.createElement("div",{style:{width:56,height:56,backgroundColor:"#fef2f2",borderRadius:"50%",display:"flex",alignItems:"center",justifyContent:"center",margin:"0 auto 16px"}},t.createElement("svg",{width:"28",height:"28",viewBox:"0 0 24 24",fill:"none",stroke:"#dc2626",strokeWidth:"2"},t.createElement("circle",{cx:"12",cy:"12",r:"10"}),t.createElement("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),t.createElement("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"}))),t.createElement("h3",{style:{fontSize:18,fontWeight:600,color:"#111827",margin:"0 0 8px"}},"Something went wrong"),t.createElement("p",{style:{fontSize:14,color:"#6b7280",margin:"0 0 20px",lineHeight:1.5}},T.message),t.createElement("div",{style:{display:"flex",gap:12,justifyContent:"center"}},t.createElement("button",{onClick:H,style:{padding:"12px 24px",fontSize:14,fontWeight:600,backgroundColor:"#2563eb",color:"#fff",border:"none",borderRadius:8,cursor:"pointer"}},"Try Again"),t.createElement("button",{onClick:B,style:{padding:"12px 24px",fontSize:14,fontWeight:500,backgroundColor:"#f3f4f6",color:"#374151",border:"none",borderRadius:8,cursor:"pointer"}},"Close")));if("FETCH"===y&&l.enableGenerator)return t.createElement(m,{prefill:l.prefill,onSubmit:K,onBack:()=>W("LOCATE"),isLoading:k});if("CDSL_FETCH"===y&&l.enableCdslFetch)return t.createElement(p,{prefill:l.prefill,onRequestOtp:$,onVerifyOtp:U,onBack:()=>W("LOCATE")});if("UPLOAD"===y){const e=g[b];return t.createElement("div",null,t.createElement(d,{onFileSelect:M,isProcessing:S,progress:x}),F&&t.createElement("div",{style:{marginTop:16}},t.createElement(c,{selectedType:b,onSearchClick:e=>_("SEARCH_CLICKED",{provider:e})})),P&&t.createElement("div",{style:{marginTop:16,textAlign:"center"}},t.createElement("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",onClick:()=>_("PORTAL_CLICKED",{portal:b}),style:{textDecoration:"none",color:"#6b7280",fontSize:13}},"Don't have your statement? ",t.createElement("span",{style:{color:"#2563eb"}},"Download from ",e.name))))}if("MF_OPTIONS"===y)return t.createElement("div",null,t.createElement("div",{style:{textAlign:"center",marginBottom:20}},t.createElement("h3",{style:{fontSize:18,fontWeight:600,color:"#111827",margin:"0 0 8px"}},"Mutual Funds"),t.createElement("p",{style:{fontSize:14,color:"#6b7280",margin:0}},"CAMS & KFintech consolidated statement")),t.createElement("div",{style:{display:"flex",flexDirection:"column",gap:12}},t.createElement("button",{onClick:()=>W("UPLOAD"),style:{width:"100%",padding:"16px 20px",fontSize:15,fontWeight:600,backgroundColor:"#2563eb",color:"#fff",border:"none",borderRadius:12,cursor:"pointer",textAlign:"left"}},t.createElement("span",{style:{display:"block"}},"Upload Statement"),t.createElement("span",{style:{fontSize:12,fontWeight:400,opacity:.85}},"I have my CAS PDF file")),l.enableGenerator&&t.createElement("button",{onClick:()=>W("FETCH"),style:{width:"100%",padding:"16px 20px",fontSize:15,fontWeight:600,backgroundColor:"#fff",color:"#166534",border:"2px solid #bbf7d0",borderRadius:12,cursor:"pointer",textAlign:"left"}},t.createElement("span",{style:{display:"block"}},"Request via Email"),t.createElement("span",{style:{fontSize:12,fontWeight:400,color:"#6b7280"}},"Get CAS from KFintech"))));if("DEMAT_OPTIONS"===y)return t.createElement("div",null,t.createElement("div",{style:{textAlign:"center",marginBottom:20}},t.createElement("h3",{style:{fontSize:18,fontWeight:600,color:"#111827",margin:"0 0 8px"}},R?`${R} (CDSL)`:"CDSL Demat"),t.createElement("p",{style:{fontSize:14,color:"#6b7280",margin:0}},"How would you like to import?")),t.createElement("div",{style:{display:"flex",flexDirection:"column",gap:12}},t.createElement("button",{onClick:()=>W("UPLOAD"),style:{width:"100%",padding:"16px 20px",fontSize:15,fontWeight:600,backgroundColor:"#2563eb",color:"#fff",border:"none",borderRadius:12,cursor:"pointer",textAlign:"left"}},t.createElement("span",{style:{display:"block"}},"Upload Statement"),t.createElement("span",{style:{fontSize:12,fontWeight:400,opacity:.85}},"I have my CDSL CAS PDF file")),t.createElement("button",{onClick:()=>W("CDSL_FETCH"),style:{width:"100%",padding:"16px 20px",fontSize:15,fontWeight:600,backgroundColor:"#fff",color:"#1e40af",border:"2px solid #bfdbfe",borderRadius:12,cursor:"pointer",textAlign:"left"}},t.createElement("span",{style:{display:"block"}},"Fetch from CDSL"),t.createElement("span",{style:{fontSize:12,fontWeight:400,color:"#6b7280"}},"OTP verification required"))));if("SELECT_BROKER"===y){if("Other"===R)return t.createElement("div",null,t.createElement("div",{style:{textAlign:"center",marginBottom:20}},t.createElement("h3",{style:{fontSize:18,fontWeight:600,color:"#111827",margin:"0 0 8px"}},"Select Your Depository"),t.createElement("p",{style:{fontSize:14,color:"#6b7280",margin:0}},"Check your demat account statement to find your depository")),t.createElement("div",{style:{display:"flex",flexDirection:"column",gap:12}},t.createElement("button",{onClick:()=>N("CDSL"),style:{padding:"16px 20px",fontSize:15,fontWeight:600,backgroundColor:"#fff",color:"#111827",border:"2px solid #e5e7eb",borderRadius:12,cursor:"pointer",textAlign:"left"}},t.createElement("span",{style:{display:"block"}},"CDSL"),t.createElement("span",{style:{fontSize:12,fontWeight:400,color:"#6b7280"}},"Central Depository Services Limited")),t.createElement("button",{onClick:()=>N("NSDL"),style:{padding:"16px 20px",fontSize:15,fontWeight:600,backgroundColor:"#fff",color:"#111827",border:"2px solid #e5e7eb",borderRadius:12,cursor:"pointer",textAlign:"left"}},t.createElement("span",{style:{display:"block"}},"NSDL"),t.createElement("span",{style:{fontSize:12,fontWeight:400,color:"#6b7280"}},"National Securities Depository Limited"))));const e=l.brokers||u;return t.createElement("div",null,t.createElement("div",{style:{textAlign:"center",marginBottom:20}},t.createElement("h3",{style:{fontSize:18,fontWeight:600,color:"#111827",margin:"0 0 8px"}},"Select Your Broker"),t.createElement("p",{style:{fontSize:14,color:"#6b7280",margin:0}},"We'll automatically detect your depository")),t.createElement("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:10,maxHeight:320,overflowY:"auto",paddingRight:4}},e.map(e=>t.createElement("button",{key:e.name,onClick:()=>(e=>{e?(O(e.name),E(e.depository),_("BROKER_SELECTED",{broker:e.name,depository:e.depository}),"CDSL"===e.depository&&l.enableCdslFetch?h("DEMAT_OPTIONS"):h("UPLOAD")):O("Other")})(e),style:{padding:"10px 12px",fontSize:13,fontWeight:500,backgroundColor:"#fff",color:"#111827",border:"1.5px solid #e5e7eb",borderRadius:10,cursor:"pointer",textAlign:"left",transition:"all 0.15s",display:"flex",alignItems:"center",gap:10},onMouseOver:e=>{e.currentTarget.style.borderColor="#2563eb",e.currentTarget.style.backgroundColor="#f0f7ff"},onMouseOut:e=>{e.currentTarget.style.borderColor="#e5e7eb",e.currentTarget.style.backgroundColor="#fff"}},e.logo&&t.createElement("img",{src:e.logo,alt:e.name,style:{width:24,height:24,objectFit:"contain",flexShrink:0}}),t.createElement("div",{style:{minWidth:0}},t.createElement("span",{style:{display:"block",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"}},e.name),t.createElement("span",{style:{fontSize:10,color:"#9ca3af"}},e.depository))))),t.createElement("button",{onClick:()=>{O("Other")},style:{width:"100%",marginTop:12,padding:"12px",fontSize:14,fontWeight:500,backgroundColor:"#f9fafb",color:"#6b7280",border:"1.5px dashed #d1d5db",borderRadius:10,cursor:"pointer"}},"Other broker / I don't know"))}const e=l.logoUrl||"https://casparser.in/assets/images/section-navigation01-image01.png",o=l.title||"Import Your Investments",n=l.subtitle||"Mutual Funds, Stocks, Bonds — all in one place",r=I.includes("CAMS_KFINTECH"),a=I.includes("CDSL")||I.includes("NSDL");return t.createElement("div",null,t.createElement("div",{style:{textAlign:"center",marginBottom:24}},t.createElement("img",{src:e,alt:"Logo",style:{width:56,height:56,marginBottom:16,objectFit:"contain"}}),t.createElement("h2",{style:{fontSize:22,fontWeight:700,margin:0,color:"#111827",letterSpacing:"-0.02em"}},o),t.createElement("p",{style:{color:"#6b7280",marginTop:8,fontSize:14,lineHeight:1.5}},n)),t.createElement("div",{style:{display:"flex",flexDirection:"column",gap:12}},r&&t.createElement("button",{onClick:()=>{E("CAMS_KFINTECH"),O(null),l.enableGenerator?W("MF_OPTIONS"):W("UPLOAD")},style:{width:"100%",padding:"18px 20px",fontSize:16,fontWeight:600,backgroundColor:"#2563eb",color:"#fff",border:"none",borderRadius:12,cursor:"pointer",textAlign:"left",transition:"all 0.2s",boxShadow:"0 4px 14px rgba(37, 99, 235, 0.25)"},onMouseOver:e=>{e.currentTarget.style.backgroundColor="#1d4ed8",e.currentTarget.style.transform="translateY(-1px)"},onMouseOut:e=>{e.currentTarget.style.backgroundColor="#2563eb",e.currentTarget.style.transform="translateY(0)"}},t.createElement("span",{style:{display:"block"}},"Mutual Funds"),t.createElement("span",{style:{fontSize:12,fontWeight:400,opacity:.85}},"CAMS & KFintech CAS")),a&&t.createElement("button",{onClick:()=>{O(null),W("SELECT_BROKER")},style:{width:"100%",padding:"18px 20px",fontSize:16,fontWeight:600,backgroundColor:"#fff",color:"#111827",border:"2px solid #e5e7eb",borderRadius:12,cursor:"pointer",textAlign:"left",transition:"all 0.2s"},onMouseOver:e=>{e.currentTarget.style.borderColor="#2563eb",e.currentTarget.style.backgroundColor="#f0f7ff"},onMouseOut:e=>{e.currentTarget.style.borderColor="#e5e7eb",e.currentTarget.style.backgroundColor="#fff"}},t.createElement("span",{style:{display:"block"}},"Stocks, Bonds, ETFs"),t.createElement("span",{style:{fontSize:12,fontWeight:400,color:"#6b7280"}},"Demat — CDSL & NSDL"))))})(),t.createElement("div",{style:{marginTop:24,paddingTop:16,borderTop:"1px solid #f3f4f6",textAlign:"center"}},t.createElement("div",{style:{fontSize:11,color:"#9ca3af"}},"Encrypted • India-hosted"))))},h=({accessToken:e,apiKey:o,apiBaseUrl:n,config:r,onSuccess:a,onError:l,onExit:i,onEvent:s,children:c})=>{const[d,m]=t.useState(!1),p=e||o,f=t.useCallback(()=>{m(!0)},[]),g=t.useCallback(()=>{m(!1),i?.()},[i]),u={open:f,isReady:!!p,isOpen:d};return t.createElement(t.Fragment,null,c(u),t.createElement(y,{isOpen:d,onClose:g,apiKey:p||"",apiBaseUrl:n,config:r,onSuccess:a,onError:l,onEvent:s}))},b=h;let E=null,S=null;function C(){S&&(S.unmount(),S=null),E&&E.parentNode&&(E.parentNode.removeChild(E),E=null)}e.CASConnect=b,e.CASConnectWidget=y,e.PortfolioConnect=h,e.PortfolioConnectWidget=y,e.SDK_NAME="Portfolio Connect",e.VERSION="1.1.0",e.create=function(e){let n=null,r=null;function a(l){n||(n=document.createElement("div"),n.id="portfolio-connect-root",n.setAttribute("data-portfolio-connect","true"),document.body.appendChild(n),r=o.createRoot(n)),r.render(t.createElement(y,{isOpen:l,apiKey:e.accessToken||e.apiKey||"",config:e.config,onSuccess:(t,o)=>{a(!1),e.onSuccess(t,o)},onClose:()=>{a(!1),e.onClose?.()},onError:t=>{a(!1),e.onError?.(t)},onEvent:e.onEvent}))}return{open:()=>{e.onOpen?.(),a(!0)},destroy:()=>{r&&(r.unmount(),r=null),n&&n.parentNode&&(n.parentNode.removeChild(n),n=null)}}},e.isAccessToken=function(e){return e?.startsWith("SK_")||!1},e.open=function(e){return new Promise((n,r)=>{C(),E=document.createElement("div"),E.id="portfolio-connect-root",E.setAttribute("data-portfolio-connect","true"),document.body.appendChild(E),S=o.createRoot(E),e.onOpen?.(),S.render(t.createElement(y,{isOpen:!0,apiKey:e.accessToken||e.apiKey||"",config:e.config,onSuccess:(e,t)=>{C(),n({data:e,metadata:t})},onClose:()=>{C(),r(new Error("Widget closed by user"))},onError:e=>{C(),r(e)},onEvent:e.onEvent}))})},e.requestAccessToken=async function(e,t=60,o){const n=o||"https://client-apis.casparser.in",r=await fetch(`${n}/v1/access-token`,{method:"POST",headers:{"Content-Type":"application/json","x-api-key":e},body:JSON.stringify({expiry_minutes:Math.min(t,60)})});if(!r.ok){const e=await r.json().catch(()=>({}));throw new Error(e.detail||e.message||"Failed to get access token")}return r.json()}});
|
|
2
|
+
//# sourceMappingURL=portfolio-connect.umd.min.js.map
|