jivamai 0.1.4 → 0.2.0-dev.40f638d
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/dist/assets/index-CzmffZ2H.js +31 -0
- package/dist/index.html +1 -1
- package/dist/manifest.json +1 -0
- package/dist-server/index.js +1 -294
- package/dist-server/manifest.json +1 -0
- package/package.json +4 -2
- package/public/manifest.json +1 -0
- package/dist/assets/index-DftBqc_W.js +0 -510
- package/dist-electron/main.js +0 -131
- package/dist-electron/main.js.map +0 -1
- package/dist-electron/preload.js +0 -2
- package/dist-electron/preload.js.map +0 -1
- package/dist-server/index.js.map +0 -1
- package/docs/README.md +0 -55
- package/docs/architecture/cloud-mode.md +0 -204
- package/docs/architecture/code-agent-integration.md +0 -276
- package/docs/architecture/ipc-contract.md +0 -162
- package/docs/architecture/jiva-core-integration.md +0 -147
- package/docs/architecture/overview.md +0 -87
- package/docs/architecture/startup-flow.md +0 -108
- package/docs/architecture/state-management.md +0 -153
- package/docs/guides/adding-features.md +0 -196
- package/docs/guides/design-guide.md +0 -308
- package/docs/release_notes/.gitkeep +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sources":["../electron/config-manager.ts","../electron/directive-manager.ts","../electron/persona-manager.ts","../electron/cloud-auth.ts","../electron/cloud-runner.ts","../electron/file-converter.ts","../electron/ipc-handlers.ts","../electron/harness.ts","../electron/code-runner.ts","../electron/jiva-runner.ts","../node_modules/electron-updater/node_modules/universalify/index.js","../node_modules/graceful-fs/polyfills.js","../node_modules/graceful-fs/legacy-streams.js","../node_modules/graceful-fs/clone.js","../node_modules/graceful-fs/graceful-fs.js","../node_modules/electron-updater/node_modules/fs-extra/lib/fs/index.js","../node_modules/electron-updater/node_modules/fs-extra/lib/mkdirs/utils.js","../node_modules/electron-updater/node_modules/fs-extra/lib/mkdirs/make-dir.js","../node_modules/electron-updater/node_modules/fs-extra/lib/mkdirs/index.js","../node_modules/electron-updater/node_modules/fs-extra/lib/path-exists/index.js","../node_modules/electron-updater/node_modules/fs-extra/lib/util/utimes.js","../node_modules/electron-updater/node_modules/fs-extra/lib/util/stat.js","../node_modules/electron-updater/node_modules/fs-extra/lib/copy/copy.js","../node_modules/electron-updater/node_modules/fs-extra/lib/copy/copy-sync.js","../node_modules/electron-updater/node_modules/fs-extra/lib/copy/index.js","../node_modules/electron-updater/node_modules/fs-extra/lib/remove/rimraf.js","../node_modules/electron-updater/node_modules/fs-extra/lib/remove/index.js","../node_modules/electron-updater/node_modules/fs-extra/lib/empty/index.js","../node_modules/electron-updater/node_modules/fs-extra/lib/ensure/file.js","../node_modules/electron-updater/node_modules/fs-extra/lib/ensure/link.js","../node_modules/electron-updater/node_modules/fs-extra/lib/ensure/symlink-paths.js","../node_modules/electron-updater/node_modules/fs-extra/lib/ensure/symlink-type.js","../node_modules/electron-updater/node_modules/fs-extra/lib/ensure/symlink.js","../node_modules/electron-updater/node_modules/fs-extra/lib/ensure/index.js","../node_modules/electron-updater/node_modules/jsonfile/utils.js","../node_modules/electron-updater/node_modules/jsonfile/index.js","../node_modules/electron-updater/node_modules/fs-extra/lib/json/jsonfile.js","../node_modules/electron-updater/node_modules/fs-extra/lib/output-file/index.js","../node_modules/electron-updater/node_modules/fs-extra/lib/json/output-json.js","../node_modules/electron-updater/node_modules/fs-extra/lib/json/output-json-sync.js","../node_modules/electron-updater/node_modules/fs-extra/lib/json/index.js","../node_modules/electron-updater/node_modules/fs-extra/lib/move/move.js","../node_modules/electron-updater/node_modules/fs-extra/lib/move/move-sync.js","../node_modules/electron-updater/node_modules/fs-extra/lib/move/index.js","../node_modules/electron-updater/node_modules/fs-extra/lib/index.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/CancellationToken.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/error.js","../node_modules/ms/index.js","../node_modules/debug/src/common.js","../node_modules/debug/src/browser.js","../node_modules/has-flag/index.js","../node_modules/supports-color/index.js","../node_modules/debug/src/node.js","../node_modules/debug/src/index.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/ProgressCallbackTransform.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/httpExecutor.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/MemoLazy.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/publishOptions.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/retry.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/rfc2253Parser.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/uuid.js","../node_modules/sax/lib/sax.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/xml.js","../node_modules/electron-updater/node_modules/builder-util-runtime/out/index.js","../node_modules/js-yaml/lib/common.js","../node_modules/js-yaml/lib/exception.js","../node_modules/js-yaml/lib/snippet.js","../node_modules/js-yaml/lib/type.js","../node_modules/js-yaml/lib/schema.js","../node_modules/js-yaml/lib/type/str.js","../node_modules/js-yaml/lib/type/seq.js","../node_modules/js-yaml/lib/type/map.js","../node_modules/js-yaml/lib/schema/failsafe.js","../node_modules/js-yaml/lib/type/null.js","../node_modules/js-yaml/lib/type/bool.js","../node_modules/js-yaml/lib/type/int.js","../node_modules/js-yaml/lib/type/float.js","../node_modules/js-yaml/lib/schema/json.js","../node_modules/js-yaml/lib/schema/core.js","../node_modules/js-yaml/lib/type/timestamp.js","../node_modules/js-yaml/lib/type/merge.js","../node_modules/js-yaml/lib/type/binary.js","../node_modules/js-yaml/lib/type/omap.js","../node_modules/js-yaml/lib/type/pairs.js","../node_modules/js-yaml/lib/type/set.js","../node_modules/js-yaml/lib/schema/default.js","../node_modules/js-yaml/lib/loader.js","../node_modules/js-yaml/lib/dumper.js","../node_modules/js-yaml/index.js","../node_modules/lazy-val/out/main.js","../node_modules/electron-updater/node_modules/semver/internal/constants.js","../node_modules/electron-updater/node_modules/semver/internal/debug.js","../node_modules/electron-updater/node_modules/semver/internal/re.js","../node_modules/electron-updater/node_modules/semver/internal/parse-options.js","../node_modules/electron-updater/node_modules/semver/internal/identifiers.js","../node_modules/electron-updater/node_modules/semver/classes/semver.js","../node_modules/electron-updater/node_modules/semver/functions/parse.js","../node_modules/electron-updater/node_modules/semver/functions/valid.js","../node_modules/electron-updater/node_modules/semver/functions/clean.js","../node_modules/electron-updater/node_modules/semver/functions/inc.js","../node_modules/electron-updater/node_modules/semver/functions/diff.js","../node_modules/electron-updater/node_modules/semver/functions/major.js","../node_modules/electron-updater/node_modules/semver/functions/minor.js","../node_modules/electron-updater/node_modules/semver/functions/patch.js","../node_modules/electron-updater/node_modules/semver/functions/prerelease.js","../node_modules/electron-updater/node_modules/semver/functions/compare.js","../node_modules/electron-updater/node_modules/semver/functions/rcompare.js","../node_modules/electron-updater/node_modules/semver/functions/compare-loose.js","../node_modules/electron-updater/node_modules/semver/functions/compare-build.js","../node_modules/electron-updater/node_modules/semver/functions/sort.js","../node_modules/electron-updater/node_modules/semver/functions/rsort.js","../node_modules/electron-updater/node_modules/semver/functions/gt.js","../node_modules/electron-updater/node_modules/semver/functions/lt.js","../node_modules/electron-updater/node_modules/semver/functions/eq.js","../node_modules/electron-updater/node_modules/semver/functions/neq.js","../node_modules/electron-updater/node_modules/semver/functions/gte.js","../node_modules/electron-updater/node_modules/semver/functions/lte.js","../node_modules/electron-updater/node_modules/semver/functions/cmp.js","../node_modules/electron-updater/node_modules/semver/functions/coerce.js","../node_modules/electron-updater/node_modules/semver/internal/lrucache.js","../node_modules/electron-updater/node_modules/semver/classes/range.js","../node_modules/electron-updater/node_modules/semver/classes/comparator.js","../node_modules/electron-updater/node_modules/semver/functions/satisfies.js","../node_modules/electron-updater/node_modules/semver/ranges/to-comparators.js","../node_modules/electron-updater/node_modules/semver/ranges/max-satisfying.js","../node_modules/electron-updater/node_modules/semver/ranges/min-satisfying.js","../node_modules/electron-updater/node_modules/semver/ranges/min-version.js","../node_modules/electron-updater/node_modules/semver/ranges/valid.js","../node_modules/electron-updater/node_modules/semver/ranges/outside.js","../node_modules/electron-updater/node_modules/semver/ranges/gtr.js","../node_modules/electron-updater/node_modules/semver/ranges/ltr.js","../node_modules/electron-updater/node_modules/semver/ranges/intersects.js","../node_modules/electron-updater/node_modules/semver/ranges/simplify.js","../node_modules/electron-updater/node_modules/semver/ranges/subset.js","../node_modules/electron-updater/node_modules/semver/index.js","../node_modules/lodash.isequal/index.js","../node_modules/electron-updater/out/DownloadedUpdateHelper.js","../node_modules/electron-updater/out/AppAdapter.js","../node_modules/electron-updater/out/ElectronAppAdapter.js","../node_modules/electron-updater/out/electronHttpExecutor.js","../node_modules/electron-updater/out/util.js","../node_modules/lodash.escaperegexp/index.js","../node_modules/electron-updater/out/providers/Provider.js","../node_modules/electron-updater/out/providers/GenericProvider.js","../node_modules/electron-updater/out/providers/BitbucketProvider.js","../node_modules/electron-updater/out/providers/GitHubProvider.js","../node_modules/electron-updater/out/providers/GitLabProvider.js","../node_modules/electron-updater/out/providers/KeygenProvider.js","../node_modules/electron-updater/out/providers/PrivateGitHubProvider.js","../node_modules/electron-updater/out/providerFactory.js","../node_modules/electron-updater/out/differentialDownloader/downloadPlanBuilder.js","../node_modules/electron-updater/out/differentialDownloader/DataSplitter.js","../node_modules/electron-updater/out/differentialDownloader/multipleRangeDownloader.js","../node_modules/electron-updater/out/differentialDownloader/ProgressDifferentialDownloadCallbackTransform.js","../node_modules/electron-updater/out/differentialDownloader/DifferentialDownloader.js","../node_modules/electron-updater/out/differentialDownloader/GenericDifferentialDownloader.js","../node_modules/electron-updater/out/types.js","../node_modules/electron-updater/out/AppUpdater.js","../node_modules/electron-updater/out/BaseUpdater.js","../node_modules/electron-updater/out/differentialDownloader/FileWithEmbeddedBlockMapDifferentialDownloader.js","../node_modules/electron-updater/out/AppImageUpdater.js","../node_modules/electron-updater/out/LinuxUpdater.js","../node_modules/electron-updater/out/DebUpdater.js","../node_modules/electron-updater/out/PacmanUpdater.js","../node_modules/electron-updater/out/RpmUpdater.js","../node_modules/electron-updater/out/MacUpdater.js","../node_modules/electron-updater/out/windowsExecutableCodeSignatureVerifier.js","../node_modules/electron-updater/out/NsisUpdater.js","../node_modules/electron-updater/out/main.js","../electron/updater.ts","../electron/main.ts"],"sourcesContent":["import fs from 'fs'\nimport path from 'path'\nimport os from 'os'\n\n/** Returns the platform-appropriate path where jiva-core stores its config.json */\nexport function getJivaConfigPath(): string {\n switch (process.platform) {\n case 'win32': {\n const appData = process.env.APPDATA ?? path.join(os.homedir(), 'AppData', 'Roaming')\n return path.join(appData, 'jiva-nodejs', 'Config', 'config.json')\n }\n case 'darwin':\n return path.join(os.homedir(), 'Library', 'Preferences', 'jiva-nodejs', 'config.json')\n default: // Linux and other unix (XDG-aware)\n return path.join(\n process.env.XDG_CONFIG_HOME ?? path.join(os.homedir(), '.config'),\n 'jiva-nodejs', 'config.json'\n )\n }\n}\n\nconst JIVA_CONFIG_PATH = getJivaConfigPath()\n\nexport interface JivaConfig {\n models: {\n reasoning: {\n provider?: string\n apiKey?: string\n endpoint?: string\n model?: string\n useHarmonyFormat?: boolean\n } | null\n multimodal?: unknown\n }\n mcpServers?: Record<string, {\n command?: string // stdio servers: present; http servers: absent\n args?: string[]\n env?: Record<string, string>\n url?: string // http servers\n enabled: boolean\n }>\n workspaceDir?: string // configurable workspace directory for the Files browser\n userDirective?: string // user-authored directive prefix, prepended before dynamic context\n debug?: boolean\n autoSave?: boolean\n}\n\nexport function readConfig(): JivaConfig | null {\n try {\n if (fs.existsSync(JIVA_CONFIG_PATH)) {\n const raw = fs.readFileSync(JIVA_CONFIG_PATH, 'utf-8')\n return JSON.parse(raw) as JivaConfig\n }\n return null\n } catch (err) {\n console.error('[ConfigManager] Failed to read config:', err)\n return null\n }\n}\n\nexport function writeConfig(config: JivaConfig): boolean {\n try {\n const dir = path.dirname(JIVA_CONFIG_PATH)\n if (!fs.existsSync(dir)) {\n fs.mkdirSync(dir, { recursive: true })\n }\n fs.writeFileSync(JIVA_CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8')\n return true\n } catch (err) {\n console.error('[ConfigManager] Failed to write config:', err)\n return false\n }\n}\n","import fs from 'fs'\nimport path from 'path'\nimport os from 'os'\n\nconst JIVA_DIR = path.join(os.homedir(), '.jiva')\nconst DIRECTIVE_PATH = path.join(JIVA_DIR, 'jiva-directive.md')\nconst CONVERSATIONS_DIR = path.join(JIVA_DIR, 'conversations')\n\ninterface ConversationMeta {\n date: string\n title: string\n messageCount: number\n}\n\n/**\n * Read the last N conversation files (sorted by modified time, newest first)\n * and extract metadata for the activity table.\n */\nfunction readRecentConversations(limit = 5): ConversationMeta[] {\n try {\n if (!fs.existsSync(CONVERSATIONS_DIR)) return []\n\n const files = fs\n .readdirSync(CONVERSATIONS_DIR)\n .filter((f) => f.endsWith('.json'))\n .map((f) => {\n const filePath = path.join(CONVERSATIONS_DIR, f)\n try {\n const stat = fs.statSync(filePath)\n const raw = JSON.parse(fs.readFileSync(filePath, 'utf-8'))\n const messageCount: number = Array.isArray(raw.messages) ? raw.messages.length : 0\n // Use summary or title from the file, fallback to first user message content\n let title: string = raw.summary ?? raw.title ?? ''\n if (!title && Array.isArray(raw.messages)) {\n const firstUser = raw.messages.find(\n (m: { role?: string; content?: string }) => m.role === 'user'\n )\n if (firstUser?.content) {\n title = String(firstUser.content).slice(0, 60).replace(/\\n/g, ' ')\n if (String(firstUser.content).length > 60) title += '...'\n }\n }\n title = title || 'Untitled conversation'\n return { stat, title, messageCount }\n } catch {\n return null\n }\n })\n .filter(Boolean)\n .sort((a, b) => b!.stat.mtimeMs - a!.stat.mtimeMs)\n .slice(0, limit)\n\n return (files as NonNullable<(typeof files)[number]>[]).map(({ stat, title, messageCount }) => {\n const d = new Date(stat.mtimeMs)\n const date = `${d.getFullYear()}-${String(d.getMonth() + 1).padStart(2, '0')}-${String(d.getDate()).padStart(2, '0')} ${String(d.getHours()).padStart(2, '0')}:${String(d.getMinutes()).padStart(2, '0')}`\n return { date, title, messageCount }\n })\n } catch {\n return []\n }\n}\n\n/**\n * Build the content of the date-aware jiva-directive.md.\n * @param userDirective Optional user-authored instructions prepended before the dynamic context block.\n */\nexport function buildDirectiveContent(userDirective?: string): string {\n const now = new Date()\n\n const weekdays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']\n const months = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December',\n ]\n\n const weekday = weekdays[now.getDay()]\n const month = months[now.getMonth()]\n const day = now.getDate()\n const year = now.getFullYear()\n const hours = String(now.getHours()).padStart(2, '0')\n const minutes = String(now.getMinutes()).padStart(2, '0')\n const time = `${hours}:${minutes}`\n\n // Get timezone abbreviation (e.g. \"IST\", \"UTC\", \"EST\")\n let timezone = 'UTC'\n try {\n timezone = Intl.DateTimeFormat('en', { timeZoneName: 'short' })\n .formatToParts(now)\n .find((p) => p.type === 'timeZoneName')?.value ?? 'UTC'\n } catch {\n // Fallback to UTC offset\n const offset = -now.getTimezoneOffset()\n const sign = offset >= 0 ? '+' : '-'\n const absH = String(Math.floor(Math.abs(offset) / 60)).padStart(2, '0')\n const absM = String(Math.abs(offset) % 60).padStart(2, '0')\n timezone = `UTC${sign}${absH}:${absM}`\n }\n\n const iso = now.toISOString()\n\n // Build recent activity table\n const recent = readRecentConversations(5)\n let recentActivity: string\n if (recent.length === 0) {\n recentActivity = '_No previous sessions found._'\n } else {\n const rows = recent\n .map((c) => `| ${c.date} | \"${c.title}\" | ${c.messageCount} |`)\n .join('\\n')\n recentActivity = `| Date | Title | Messages |\\n|------|-------|----------|\\n${rows}`\n }\n\n const dynamicContext = `# Jiva Operating Context\n\n## Current Date & Time\n- Date: ${weekday}, ${month} ${day}, ${year}\n- Time: ${time} ${timezone}\n- ISO: ${iso}\n\n## Important\n- Always use the date above when referencing \"today\", \"current year\", or \"recent\" events\n- Do NOT rely on training data for the current date — use only what is stated above\n- When performing web searches, always use the year ${year} for current events\n\n## Recent Session Activity\n${recentActivity}\n`\n\n if (userDirective?.trim()) {\n return userDirective.trim() + '\\n\\n---\\n\\n' + dynamicContext\n }\n return dynamicContext\n}\n\n/**\n * Write the date-aware directive to ~/.jiva/jiva-directive.md and return the path.\n * This is called before WorkspaceManager.initialize() so the directive is picked up\n * as a system-level instruction for the agent.\n */\nexport function writeDirective(userDirective?: string): { path: string; content: string } {\n const content = buildDirectiveContent(userDirective)\n try {\n if (!fs.existsSync(JIVA_DIR)) {\n fs.mkdirSync(JIVA_DIR, { recursive: true })\n }\n fs.writeFileSync(DIRECTIVE_PATH, content, 'utf-8')\n console.log(`[DirectiveManager] Wrote directive to ${DIRECTIVE_PATH}`)\n } catch (err) {\n console.warn('[DirectiveManager] Failed to write directive:', err)\n }\n return { path: DIRECTIVE_PATH, content }\n}\n","import fs from 'fs'\nimport path from 'path'\nimport os from 'os'\nimport { getJivaConfigPath } from './config-manager'\n\nconst PERSONAS_DIR = path.join(os.homedir(), '.jiva', 'personas')\n\nexport interface PersonaInfo {\n name: string\n displayName: string\n description: string\n tags: string[]\n icon: string\n isBuiltIn: boolean\n dirPath: string\n}\n\n/**\n * Returns a lucide-react icon name string for this persona.\n * The renderer resolves the name to a component via a lookup map in PersonaCard.tsx.\n */\nfunction getPersonaIcon(name: string, tags: string[]): string {\n if (name === 'chat' || tags.includes('chat')) return 'MessageSquare'\n if (name === 'research' || tags.includes('research')) return 'Search'\n if (name === 'developer' || name === 'code-reviewer' || tags.includes('code')) return 'Code2'\n if (name === 'engineering-manager' || tags.includes('management')) return 'Layers'\n if (name === 'tester' || tags.includes('testing')) return 'FlaskConical'\n if (name === 'data-analyst' || tags.includes('data')) return 'BarChart3'\n return 'Bot'\n}\n\nexport function listPersonas(): PersonaInfo[] {\n const personas: PersonaInfo[] = []\n\n if (!fs.existsSync(PERSONAS_DIR)) {\n return personas\n }\n\n try {\n const entries = fs.readdirSync(PERSONAS_DIR, { withFileTypes: true })\n\n for (const entry of entries) {\n if (!entry.isDirectory()) continue\n if (entry.name === 'skills') continue // skip skills subdirectory\n\n const personaDir = path.join(PERSONAS_DIR, entry.name)\n const pluginJsonPath = path.join(personaDir, '.jiva-plugin', 'plugin.json')\n\n let manifest: { name?: string; description?: string; tags?: string[] } = {}\n\n if (fs.existsSync(pluginJsonPath)) {\n try {\n const raw = fs.readFileSync(pluginJsonPath, 'utf-8')\n manifest = JSON.parse(raw)\n } catch {\n // Use defaults\n }\n }\n\n const name = entry.name\n const tags = manifest.tags ?? []\n const builtInNames = ['chat', 'research']\n\n personas.push({\n name,\n displayName: (manifest.name ?? name).replace(/-/g, ' ').replace(/\\b\\w/g, l => l.toUpperCase()),\n description: manifest.description ?? `${name} persona`,\n tags,\n icon: getPersonaIcon(name, tags),\n isBuiltIn: builtInNames.includes(name),\n dirPath: personaDir,\n })\n }\n } catch (err) {\n console.error('[PersonaManager] Failed to list personas:', err)\n }\n\n // Sort: built-ins first, then alphabetical\n return personas.sort((a, b) => {\n if (a.isBuiltIn && !b.isBuiltIn) return -1\n if (!a.isBuiltIn && b.isBuiltIn) return 1\n return a.name.localeCompare(b.name)\n })\n}\n\nexport function activatePersona(name: string): boolean {\n const { execSync } = require('child_process') as typeof import('child_process')\n try {\n execSync(`jiva persona activate ${name}`, { timeout: 10000, stdio: 'ignore' })\n return true\n } catch {\n // Try writing to active persona file directly\n const activeFile = path.join(os.homedir(), '.jiva', 'active-persona.txt')\n try {\n fs.writeFileSync(activeFile, name, 'utf-8')\n return true\n } catch {\n return false\n }\n }\n}\n\nexport function getActivePersona(): string | null {\n try {\n const jivaConfigPath = getJivaConfigPath()\n if (fs.existsSync(jivaConfigPath)) {\n const config = JSON.parse(fs.readFileSync(jivaConfigPath, 'utf-8'))\n if (config.activePersona) return config.activePersona\n }\n const activeFile = path.join(os.homedir(), '.jiva', 'active-persona.txt')\n if (fs.existsSync(activeFile)) {\n return fs.readFileSync(activeFile, 'utf-8').trim()\n }\n } catch {}\n return null\n}\n","/**\n * Supabase Auth — fetch-based, no SDK.\n * Project: hcomegrnonxmjupvvyus\n */\n\nconst SUPABASE_URL = 'https://hcomegrnonxmjupvvyus.supabase.co'\nconst SUPABASE_ANON_KEY =\n 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Imhjb21lZ3Jub254bWp1cHZ2eXVzIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzgxNTQwMjcsImV4cCI6MjA5MzczMDAyN30.sBBOTrPsdCZk75HDEzJaIv5Mz-bE3HTuJQ-1LcJ45nk'\n\nconst CLOUD_RUN_URL = 'https://jiva-hdjcuspt2a-uc.a.run.app'\n\nexport interface CloudUser {\n userId: string\n email: string\n accessToken: string\n refreshToken: string\n}\n\nasync function supabaseFetch(path: string, body: Record<string, unknown>): Promise<Record<string, unknown>> {\n const res = await fetch(`${SUPABASE_URL}${path}`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'apikey': SUPABASE_ANON_KEY,\n },\n body: JSON.stringify(body),\n })\n const data = await res.json() as Record<string, unknown>\n if (!res.ok) {\n const msg = (data.error_description ?? data.error ?? data.message ?? 'Auth failed') as string\n throw new Error(msg)\n }\n return data\n}\n\nexport async function cloudSignIn(email: string, password: string): Promise<CloudUser> {\n const data = await supabaseFetch('/auth/v1/token?grant_type=password', { email, password })\n return {\n userId: (data.user as Record<string, unknown>).id as string,\n email: (data.user as Record<string, unknown>).email as string,\n accessToken: data.access_token as string,\n refreshToken: data.refresh_token as string,\n }\n}\n\nexport async function cloudSignUp(email: string, password: string): Promise<CloudUser> {\n const data = await supabaseFetch('/auth/v1/signup', { email, password })\n // Supabase signup response varies by project config:\n // - Auto-confirm ON: { access_token, refresh_token, user: { id, email, ... } }\n // - Email confirmation required: user object at top level, no access_token\n const userObj = ((data.user ?? data) as Record<string, unknown>)\n return {\n userId: userObj.id as string,\n email: userObj.email as string,\n accessToken: (data.access_token ?? '') as string,\n refreshToken: (data.refresh_token ?? '') as string,\n }\n}\n\nexport async function cloudSignOut(accessToken: string): Promise<void> {\n await fetch(`${SUPABASE_URL}/auth/v1/logout`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'apikey': SUPABASE_ANON_KEY,\n 'Authorization': `Bearer ${accessToken}`,\n },\n })\n}\n\n/**\n * Create or restore a Cloud Run session for the given user.\n * Returns the sessionId to use for subsequent API calls.\n */\nexport async function initCloudSession(userId: string, sessionId: string): Promise<void> {\n const res = await fetch(`${CLOUD_RUN_URL}/api/session`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'x-tenant-id': userId,\n 'x-session-id': sessionId,\n },\n body: JSON.stringify({}),\n })\n if (!res.ok) {\n const text = await res.text()\n throw new Error(`Cloud session init failed: ${text}`)\n }\n}\n","/**\n * CloudRunner — HTTP/SSE client to the deployed Jiva Cloud Run instance.\n * Implements the same public interface as JivaRunner so ipc-handlers.ts\n * can route transparently between local and cloud modes.\n */\n\nimport type { CodeLogEvent } from './code-runner'\n\nconst CLOUD_RUN_URL = 'https://jiva-hdjcuspt2a-uc.a.run.app'\n\nexport type PhaseUpdate = 'initializing' | 'planning' | 'executing' | 'synthesizing' | 'done'\n\nexport interface CloudRunResult {\n content: string\n iterations: number\n toolsUsed: string[]\n plan: { subtasks: string[]; reasoning?: string } | null\n durationMs: number\n conversationId?: string\n}\n\n\nexport class CloudRunner {\n private userId: string | null = null\n private sessionId: string | null = null\n private _active = false\n private _abortController: AbortController | null = null\n private _readyPromise: Promise<void> | null = null\n private _readyResolve: (() => void) | null = null\n private _readyReject: ((err: Error) => void) | null = null\n\n /** Call this as soon as cloud:init starts — before the async session HTTP call. */\n startInit(): void {\n if (this._active) return\n if (!this._readyPromise) {\n this._readyPromise = new Promise<void>((resolve, reject) => {\n this._readyResolve = resolve\n this._readyReject = reject\n })\n }\n }\n\n configure(userId: string, sessionId: string): void {\n this.userId = userId\n this.sessionId = sessionId\n this._active = true\n this._readyResolve?.()\n this._readyResolve = null\n this._readyReject = null\n }\n\n /**\n * Wait until the runner is configured, up to timeoutMs.\n * Resolves immediately if already active.\n * Rejects if init was never started or times out.\n */\n waitUntilReady(timeoutMs: number): Promise<void> {\n if (this._active) return Promise.resolve()\n if (!this._readyPromise) return Promise.reject(new Error('Cloud runner init not started'))\n return Promise.race([\n this._readyPromise,\n new Promise<void>((_, reject) =>\n setTimeout(() => reject(new Error(`Cloud runner not ready after ${timeoutMs}ms`)), timeoutMs)\n ),\n ])\n }\n\n isActive(): boolean {\n return this._active\n }\n\n isInitializing(): boolean {\n return !this._active && this._readyPromise !== null\n }\n\n deactivate(): void {\n this._active = false\n this.userId = null\n this.sessionId = null\n // Reject any pending waitUntilReady callers\n this._readyReject?.(new Error('Cloud session deactivated'))\n this._readyPromise = null\n this._readyResolve = null\n this._readyReject = null\n }\n\n stop(): void {\n this._abortController?.abort()\n }\n\n private get headers(): Record<string, string> {\n return {\n 'Content-Type': 'application/json',\n 'x-tenant-id': this.userId ?? 'dev-tenant',\n 'x-session-id': this.sessionId ?? 'default-session',\n }\n }\n\n async chat(\n prompt: string,\n onPhase: (phase: PhaseUpdate) => void,\n _opts?: { deepRun?: boolean },\n onLog?: (event: CodeLogEvent) => void\n ): Promise<CloudRunResult> {\n if (!this._active) throw new Error('CloudRunner not configured')\n\n const startTime = Date.now()\n onPhase('planning')\n\n this._abortController = new AbortController()\n const { signal } = this._abortController\n\n try {\n const result = await this._streamChat(prompt, onPhase, onLog, signal)\n return { ...result, durationMs: Date.now() - startTime }\n } catch (err) {\n if ((err as Error).name === 'AbortError') {\n return {\n content: '',\n iterations: 0,\n toolsUsed: [],\n plan: null,\n durationMs: Date.now() - startTime,\n }\n }\n // SSE failed — fall back to non-streaming\n console.warn('[CloudRunner] SSE failed, falling back to non-streaming:', err)\n const result = await this._nonStreamChat(prompt, onPhase, signal)\n return { ...result, durationMs: Date.now() - startTime }\n } finally {\n this._abortController = null\n onPhase('done')\n }\n }\n\n private async _streamChat(\n prompt: string,\n onPhase: (phase: PhaseUpdate) => void,\n onLog: ((event: CodeLogEvent) => void) | undefined,\n signal: AbortSignal\n ): Promise<Omit<CloudRunResult, 'durationMs'>> {\n const res = await fetch(`${CLOUD_RUN_URL}/api/chat/stream`, {\n method: 'POST',\n headers: { ...this.headers, 'Accept': 'text/event-stream' },\n body: JSON.stringify({ message: prompt }),\n signal,\n })\n\n if (!res.ok || !res.body) {\n throw new Error(`SSE request failed: ${res.status}`)\n }\n\n const reader = res.body.getReader()\n const decoder = new TextDecoder()\n let buffer = ''\n let content = ''\n let iterations = 0\n const toolsUsed: string[] = []\n let plan: CloudRunResult['plan'] = null\n // Track the current SSE event type from `event:` lines (per SSE spec)\n let currentEventType: string | null = null\n\n outer: while (true) {\n const { done, value } = await reader.read()\n if (done) break\n\n buffer += decoder.decode(value, { stream: true })\n const lines = buffer.split('\\n')\n buffer = lines.pop() ?? ''\n\n for (const line of lines) {\n if (line.startsWith('event: ')) {\n currentEventType = line.slice(7).trim()\n continue\n }\n if (!line.startsWith('data: ')) continue\n const raw = line.slice(6).trim()\n if (!raw || raw === '[DONE]') continue\n\n let d: Record<string, unknown>\n try {\n d = JSON.parse(raw) as Record<string, unknown>\n } catch {\n continue\n }\n\n // Use the SSE `event:` type; fall back to a `type` field in the payload\n const evtType = currentEventType ?? (d.type as string | undefined)\n currentEventType = null\n\n if (evtType === 'status') {\n const msg = d.message as string | undefined\n if (msg) {\n onPhase('executing')\n onLog?.({\n timestamp: new Date().toISOString(),\n level: 'info',\n tag: 'cloud',\n message: `Tool: ${msg}`,\n })\n }\n } else if (evtType === 'response') {\n content = (d.content ?? d.response ?? '') as string\n iterations = (d.iterations ?? 0) as number\n if (Array.isArray(d.toolsUsed)) toolsUsed.push(...(d.toolsUsed as string[]))\n if (d.plan) plan = d.plan as CloudRunResult['plan']\n } else if (evtType === 'error') {\n throw new Error(d.message as string ?? 'Stream error')\n } else if (evtType === 'done') {\n break outer\n }\n }\n }\n\n return { content, iterations, toolsUsed, plan }\n }\n\n private async _nonStreamChat(\n prompt: string,\n onPhase: (phase: PhaseUpdate) => void,\n signal: AbortSignal\n ): Promise<Omit<CloudRunResult, 'durationMs'>> {\n onPhase('executing')\n const res = await fetch(`${CLOUD_RUN_URL}/api/chat`, {\n method: 'POST',\n headers: this.headers,\n body: JSON.stringify({ message: prompt }),\n signal,\n })\n if (!res.ok) {\n const text = await res.text()\n throw new Error(`Cloud chat failed (${res.status}): ${text}`)\n }\n const d = await res.json() as Record<string, unknown>\n return {\n content: (d.response ?? '') as string,\n iterations: (d.iterations ?? 0) as number,\n toolsUsed: Array.isArray(d.toolsUsed) ? (d.toolsUsed as string[]) : [],\n plan: (d.plan ?? null) as CloudRunResult['plan'],\n }\n }\n\n async resetConversation(): Promise<void> {\n if (!this._active) return\n try {\n await fetch(`${CLOUD_RUN_URL}/api/chat/history`, {\n method: 'DELETE',\n headers: this.headers,\n })\n } catch (e) {\n console.error('[CloudRunner] resetConversation failed:', e)\n }\n }\n\n async stopMessage(): Promise<void> {\n try {\n await fetch(`${CLOUD_RUN_URL}/api/chat/stop`, {\n method: 'POST',\n headers: this.headers,\n })\n } catch {}\n this.stop()\n }\n}\n","import fs from 'fs'\nimport path from 'path'\nimport zlib from 'zlib'\n\nexport type FileCategory = 'text' | 'pdf' | 'docx' | 'image' | 'unsupported'\n\nexport interface ConvertedFile {\n name: string\n category: FileCategory\n markdown: string // text/pdf/docx → markdown content; image → base64 data URI\n mimeType?: string // images only\n error?: string\n}\n\nconst TEXT_EXTENSIONS = new Set([\n 'txt', 'md', 'markdown', 'rst', 'log',\n 'js', 'jsx', 'ts', 'tsx', 'mjs', 'cjs',\n 'py', 'rb', 'go', 'rs', 'java', 'kt', 'swift',\n 'c', 'cpp', 'cc', 'h', 'hpp', 'cs',\n 'css', 'scss', 'sass', 'less',\n 'html', 'htm', 'xml', 'svg', 'xhtml',\n 'json', 'jsonc', 'yaml', 'yml', 'toml', 'ini', 'cfg', 'conf',\n 'sh', 'bash', 'zsh', 'fish', 'ps1', 'bat', 'cmd',\n 'sql', 'graphql', 'gql', 'proto',\n 'env', 'editorconfig', 'gitignore', 'gitattributes',\n 'dockerfile', 'makefile', 'cmake', 'gradle',\n 'r', 'jl', 'scala', 'clj', 'ex', 'exs', 'erl', 'hs', 'lua', 'pl',\n 'vue', 'svelte', 'astro',\n 'lock', 'mod', 'sum',\n])\n\nconst IMAGE_EXTENSIONS: Record<string, string> = {\n png: 'image/png',\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n gif: 'image/gif',\n webp: 'image/webp',\n bmp: 'image/bmp',\n}\n\nconst LANG_MAP: Record<string, string> = {\n js: 'javascript', jsx: 'jsx', ts: 'typescript', tsx: 'tsx',\n py: 'python', rb: 'ruby', go: 'go', rs: 'rust',\n java: 'java', kt: 'kotlin', swift: 'swift', cs: 'csharp',\n c: 'c', cpp: 'cpp', h: 'c', hpp: 'cpp',\n css: 'css', scss: 'scss', sass: 'sass', less: 'less',\n html: 'html', htm: 'html', xml: 'xml', svg: 'xml',\n json: 'json', jsonc: 'json', yaml: 'yaml', yml: 'yaml', toml: 'toml',\n sh: 'bash', bash: 'bash', zsh: 'bash', fish: 'fish', ps1: 'powershell',\n sql: 'sql', graphql: 'graphql', gql: 'graphql', proto: 'protobuf',\n md: 'markdown', markdown: 'markdown', rst: 'rst',\n r: 'r', jl: 'julia', scala: 'scala', lua: 'lua',\n vue: 'vue', svelte: 'svelte',\n}\n\nexport function getFileCategory(ext: string): FileCategory {\n const lower = ext.toLowerCase().replace(/^\\./, '')\n if (TEXT_EXTENSIONS.has(lower)) return 'text'\n if (lower in IMAGE_EXTENSIONS) return 'image'\n if (lower === 'pdf') return 'pdf'\n if (lower === 'docx') return 'docx'\n return 'unsupported'\n}\n\nexport function convertFile(filePath: string): ConvertedFile {\n const name = path.basename(filePath)\n const ext = path.extname(filePath).toLowerCase().replace(/^\\./, '')\n const category = getFileCategory(ext)\n\n try {\n switch (category) {\n case 'text': return convertTextFile(filePath, name, ext)\n case 'pdf': return convertPdf(filePath, name)\n case 'docx': return convertDocx(filePath, name)\n case 'image': return convertImage(filePath, name, ext)\n default: return { name, category: 'unsupported', markdown: '', error: `File type .${ext} is not supported` }\n }\n } catch (err) {\n return {\n name,\n category,\n markdown: '',\n error: err instanceof Error ? err.message : 'Failed to read file',\n }\n }\n}\n\nfunction convertTextFile(filePath: string, name: string, ext: string): ConvertedFile {\n const stat = fs.statSync(filePath)\n if (stat.size > 2 * 1024 * 1024) {\n return { name, category: 'text', markdown: '', error: 'File is too large (max 2 MB for text files)' }\n }\n const content = fs.readFileSync(filePath, 'utf-8')\n const lang = LANG_MAP[ext] ?? ext\n const markdown = `\\`\\`\\`${lang}\\n${content}\\n\\`\\`\\``\n return { name, category: 'text', markdown }\n}\n\n// ---------------------------------------------------------------------------\n// PDF: extract text from PDF content streams using BT/ET markers\n// ---------------------------------------------------------------------------\nfunction convertPdf(filePath: string, name: string): ConvertedFile {\n const stat = fs.statSync(filePath)\n if (stat.size > 10 * 1024 * 1024) {\n return { name, category: 'pdf', markdown: '', error: 'PDF is too large (max 10 MB)' }\n }\n\n const buffer = fs.readFileSync(filePath)\n const text = extractPdfText(buffer)\n\n if (!text.trim()) {\n return { name, category: 'pdf', markdown: '', error: 'Could not extract text from PDF (may be a scanned/image-only PDF)' }\n }\n\n const markdown = `**[PDF: ${name}]**\\n\\n${text}`\n return { name, category: 'pdf', markdown }\n}\n\nfunction extractPdfText(buffer: Buffer): string {\n // Work on a latin1 string so byte values map 1:1\n const raw = buffer.toString('latin1')\n const parts: string[] = []\n\n // Find compressed object streams (FlateDecode) and decompress them\n const compressedStreamRe = /<<[^>]*\\/Filter\\s*\\/FlateDecode[^>]*>>\\s*stream\\r?\\n([\\s\\S]*?)\\r?\\nendstream/g\n let m: RegExpExecArray | null\n while ((m = compressedStreamRe.exec(raw)) !== null) {\n try {\n const buf = Buffer.from(m[1], 'latin1')\n const decompressed = zlib.inflateSync(buf).toString('latin1')\n parts.push(...extractTextFromStream(decompressed))\n } catch { /* skip undecompressable streams */ }\n }\n\n // Also scan uncompressed text streams\n const btEtRe = /BT([\\s\\S]*?)ET/g\n while ((m = btEtRe.exec(raw)) !== null) {\n parts.push(...extractTextFromStream(m[1]))\n }\n\n // Deduplicate and join\n return [...new Set(parts)].join(' ').replace(/\\s+/g, ' ').trim()\n}\n\nfunction extractTextFromStream(stream: string): string[] {\n const results: string[] = []\n\n // Collect BT..ET blocks\n const btEtRe = /BT([\\s\\S]*?)ET/g\n let m: RegExpExecArray | null\n while ((m = btEtRe.exec(stream)) !== null) {\n const block = m[1]\n // Literal strings: (text)\n const litRe = /\\(([^)\\\\]*(?:\\\\.[^)\\\\]*)*)\\)/g\n let s: RegExpExecArray | null\n while ((s = litRe.exec(block)) !== null) {\n const decoded = s[1]\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\\\(/g, '(')\n .replace(/\\\\\\)/g, ')')\n .replace(/\\\\\\\\/g, '\\\\')\n const clean = decoded.replace(/[^\\x20-\\x7E\\n\\r\\t]/g, '').trim()\n if (clean.length > 0) results.push(clean)\n }\n\n // Hex strings: <4865...>\n const hexRe = /<([0-9A-Fa-f\\s]+)>/g\n while ((s = hexRe.exec(block)) !== null) {\n const hex = s[1].replace(/\\s/g, '')\n if (hex.length % 2 !== 0) continue\n let str = ''\n for (let i = 0; i < hex.length; i += 2) {\n const code = parseInt(hex.slice(i, i + 2), 16)\n if (code >= 0x20 && code <= 0x7E) str += String.fromCharCode(code)\n }\n if (str.trim().length > 0) results.push(str.trim())\n }\n }\n\n return results\n}\n\n// ---------------------------------------------------------------------------\n// DOCX: parse ZIP, extract word/document.xml, strip XML tags\n// ---------------------------------------------------------------------------\nfunction convertDocx(filePath: string, name: string): ConvertedFile {\n const stat = fs.statSync(filePath)\n if (stat.size > 10 * 1024 * 1024) {\n return { name, category: 'docx', markdown: '', error: 'DOCX is too large (max 10 MB)' }\n }\n\n const buffer = fs.readFileSync(filePath)\n const xml = extractFromZip(buffer, 'word/document.xml')\n\n if (!xml) {\n return { name, category: 'docx', markdown: '', error: 'Could not extract content from DOCX file' }\n }\n\n const text = parseDocumentXml(xml.toString('utf-8'))\n\n if (!text.trim()) {\n return { name, category: 'docx', markdown: '', error: 'DOCX appears to be empty' }\n }\n\n const markdown = `**[DOCX: ${name}]**\\n\\n${text}`\n return { name, category: 'docx', markdown }\n}\n\nfunction extractFromZip(buffer: Buffer, targetPath: string): Buffer | null {\n let offset = 0\n\n while (offset < buffer.length - 30) {\n // Local file header signature: PK\\x03\\x04\n if (buffer.readUInt32LE(offset) !== 0x04034b50) {\n offset++\n continue\n }\n\n const compressionMethod = buffer.readUInt16LE(offset + 8)\n const compressedSize = buffer.readUInt32LE(offset + 18)\n const uncompressedSize = buffer.readUInt32LE(offset + 22)\n const filenameLen = buffer.readUInt16LE(offset + 26)\n const extraLen = buffer.readUInt16LE(offset + 28)\n\n const filename = buffer.slice(offset + 30, offset + 30 + filenameLen).toString('utf-8')\n const dataStart = offset + 30 + filenameLen + extraLen\n const dataEnd = dataStart + compressedSize\n\n if (filename === targetPath) {\n const compressed = buffer.slice(dataStart, dataEnd)\n if (compressionMethod === 0) {\n // Stored (no compression)\n return compressed\n } else if (compressionMethod === 8) {\n // Deflated — use inflateRawSync (raw deflate, no zlib header)\n try {\n return zlib.inflateRawSync(compressed)\n } catch {\n // Some DOCX use standard deflate with zlib header\n try {\n return zlib.inflateSync(compressed)\n } catch {\n return null\n }\n }\n }\n return null\n }\n\n // Skip to next local file header\n if (compressedSize === 0 && uncompressedSize === 0) {\n offset = dataStart\n } else {\n offset = dataEnd\n }\n }\n\n return null\n}\n\nfunction parseDocumentXml(xml: string): string {\n // Extract paragraph text, preserving paragraph breaks\n const paragraphs: string[] = []\n const paraRe = /<w:p[ >]([\\s\\S]*?)<\\/w:p>/g\n let m: RegExpExecArray | null\n\n while ((m = paraRe.exec(xml)) !== null) {\n // Extract text runs within the paragraph\n const runs: string[] = []\n const runRe = /<w:t[^>]*>([^<]*)<\\/w:t>/g\n let r: RegExpExecArray | null\n while ((r = runRe.exec(m[1])) !== null) {\n runs.push(r[1])\n }\n const text = runs.join('').trim()\n if (text) paragraphs.push(text)\n }\n\n return paragraphs.join('\\n\\n')\n}\n\n// ---------------------------------------------------------------------------\n// Image: base64 encode for multimodal model consumption\n// ---------------------------------------------------------------------------\nfunction convertImage(filePath: string, name: string, ext: string): ConvertedFile {\n const stat = fs.statSync(filePath)\n if (stat.size > 20 * 1024 * 1024) {\n return { name, category: 'image', markdown: '', error: 'Image is too large (max 20 MB)' }\n }\n\n const mimeType = IMAGE_EXTENSIONS[ext.toLowerCase()] ?? 'image/png'\n // Return the original path — the IPC handler will copy it to the workspace uploads dir\n return { name, category: 'image', markdown: filePath, mimeType }\n}\n","import { ipcMain, BrowserWindow, dialog, shell } from 'electron'\nimport { execSync, execFileSync } from 'child_process'\nimport { JivaRunner } from './jiva-runner'\nimport type { CodeRunner } from './code-runner'\nimport { readConfig, writeConfig, getJivaConfigPath } from './config-manager'\nimport { writeDirective } from './directive-manager'\nimport { listPersonas, activatePersona, getActivePersona } from './persona-manager'\nimport { cloudSignIn, cloudSignUp, cloudSignOut, initCloudSession } from './cloud-auth'\nimport { CloudRunner } from './cloud-runner'\nimport { convertFile } from './file-converter'\nimport fs from 'fs'\nimport path from 'path'\nimport os from 'os'\n\n// Singleton CloudRunner — configured when user signs into cloud mode\nconst cloudRunner = new CloudRunner()\n\nexport function setupIpcHandlers(\n jivaRunner: JivaRunner,\n codeRunner: CodeRunner,\n getWindow: () => BrowserWindow | null\n) {\n // --- Pre-flight setup check (fast, no agent needed) ---\n ipcMain.handle('setup:check', () => {\n // 1. Node.js — verify npm exists for the ok flag; separately get node version for display\n let nodejsOk = false\n let nodejsVersion: string | undefined\n try {\n execSync('npm --version', { timeout: 3000 })\n nodejsOk = true\n try {\n nodejsVersion = execSync('node --version', { timeout: 3000 })\n .toString().trim().replace(/^v/, '') // \"v20.11.0\" → \"20.11.0\"\n } catch {}\n } catch {}\n\n // 2. jiva-core\n let jivaCoreOk = false\n let jivaCoreVersion: string | undefined\n if (nodejsOk) {\n try {\n const npmRoot = execSync('npm root -g', { timeout: 5000 }).toString().trim()\n const pkgJson = path.join(npmRoot, 'jiva-core', 'package.json')\n if (fs.existsSync(pkgJson)) {\n const pkg = JSON.parse(fs.readFileSync(pkgJson, 'utf-8')) as { version?: string }\n jivaCoreVersion = pkg.version\n jivaCoreOk = true\n }\n } catch {}\n // Known macOS/Linux fallback\n if (!jivaCoreOk) {\n const known = path.join(os.homedir(), '.npm-global', 'lib', 'node_modules', 'jiva-core', 'package.json')\n if (fs.existsSync(known)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(known, 'utf-8')) as { version?: string }\n jivaCoreVersion = pkg.version\n jivaCoreOk = true\n } catch {}\n }\n }\n // Windows fallback paths\n if (!jivaCoreOk && process.platform === 'win32') {\n const windowsPaths = [\n path.join(process.env.APPDATA ?? '', 'npm', 'node_modules', 'jiva-core', 'package.json'),\n path.join(process.env.LOCALAPPDATA ?? '', 'npm', 'node_modules', 'jiva-core', 'package.json'),\n ]\n for (const wp of windowsPaths) {\n if (fs.existsSync(wp)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(wp, 'utf-8')) as { version?: string }\n jivaCoreVersion = pkg.version\n jivaCoreOk = true\n break\n } catch {}\n }\n }\n }\n }\n\n // 3. Configuration — check correct platform path first, fall back to legacy ~/.jiva\n const configCandidates = [\n getJivaConfigPath(), // correct OS-specific path\n path.join(os.homedir(), '.jiva', 'config.json'), // legacy fallback\n ]\n\n let configOk = false\n let foundConfigPath = ''\n for (const candidate of configCandidates) {\n if (!fs.existsSync(candidate)) continue\n try {\n const cfg = JSON.parse(fs.readFileSync(candidate, 'utf-8')) as Record<string, unknown>\n const reasoning = ((cfg?.models as Record<string, unknown>)?.reasoning ?? {}) as Record<string, unknown>\n const apiKey = ((reasoning?.apiKey ?? cfg?.apiKey) ?? '') as string\n if (apiKey.length > 0) {\n configOk = true\n foundConfigPath = candidate\n break\n }\n } catch {}\n }\n\n // 4. jiva-core version compatibility\n let jivaVersionMismatch = false\n let requiredJivaVersion: string | undefined\n try {\n // Read jivaCompatibleVersion from the bundled package.json\n const appPkgPath = path.join(__dirname, '..', 'package.json')\n const appPkg = JSON.parse(fs.readFileSync(appPkgPath, 'utf-8')) as Record<string, unknown>\n requiredJivaVersion = appPkg.jivaCompatibleVersion as string | undefined\n if (requiredJivaVersion && jivaCoreVersion) {\n // Compare major.minor — patch differences are fine\n const [reqMaj, reqMin] = requiredJivaVersion.split('.').map(Number)\n const [instMaj, instMin] = jivaCoreVersion.split('.').map(Number)\n if (reqMaj !== instMaj || reqMin !== instMin) {\n jivaVersionMismatch = true\n }\n }\n } catch {}\n\n return {\n nodejs: { ok: nodejsOk, version: nodejsVersion },\n jivaCore: { ok: jivaCoreOk, version: jivaCoreVersion },\n config: { ok: configOk, path: foundConfigPath || configCandidates[0] },\n platform: process.platform,\n jivaVersionMismatch,\n requiredJivaVersion,\n }\n })\n\n // Forward runner status changes to renderer\n jivaRunner.on('status-changed', (status, data) => {\n const win = getWindow()\n // Map runner status to the renderer-facing ServerStatus shape\n const serverStatus = status === 'ready' || status === 'busy' ? 'running' : status\n win?.webContents.send('jiva:server:status-changed', serverStatus, data)\n })\n\n // --- Jiva Lifecycle ---\n ipcMain.handle('jiva:server:start', async () => {\n try {\n if (jivaRunner.getStatus() === 'stopped' || jivaRunner.getStatus() === 'error') {\n await jivaRunner.initialize()\n }\n return { success: true, status: jivaRunner.getStatus() }\n } catch (err) {\n const errorMsg = err instanceof Error ? err.message : String(err)\n console.error('[IPC] jiva:server:start failed:', errorMsg)\n return { success: false, error: errorMsg }\n }\n })\n\n ipcMain.handle('jiva:server:stop', async () => {\n try {\n await jivaRunner.cleanup()\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n ipcMain.handle('jiva:server:restart', async () => {\n try {\n await jivaRunner.cleanup()\n await jivaRunner.initialize()\n return { success: true, status: jivaRunner.getStatus() }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n ipcMain.handle('jiva:server:status', () => {\n const status = jivaRunner.getStatus()\n return {\n status: status === 'ready' || status === 'busy' ? 'running' : status,\n port: 0,\n }\n })\n\n // --- Send Message (SDK-based, direct) ---\n // NOTE: Persona switching is intentionally NOT done here on every message.\n // The `persona` parameter is accepted but ignored to avoid destroying conversation history.\n // Persona switches happen only via the explicit `personas:activate` IPC call.\n ipcMain.handle('jiva:send-message', async (event, prompt: string, _persona?: string, opts?: { deepRun?: boolean }) => {\n // Send phase and log events back to whichever window invoked this handler\n // (works for both the main local window and the separate cloud window)\n const sender = event.sender\n\n // Detect cloud window by URL param so we can wait for runner init\n const senderUrl = sender.getURL()\n const isCloudSender = senderUrl.includes('mode=cloud')\n\n try {\n // Cloud window path: wait for runner if init is in flight, then route to cloud\n if (isCloudSender) {\n if (!cloudRunner.isActive()) {\n await cloudRunner.waitUntilReady(30_000)\n }\n const result = await cloudRunner.chat(prompt, (phase) => {\n sender.send('jiva:phase-update', phase)\n }, opts, (logEvent) => {\n sender.send('jiva:jiva-log', logEvent)\n })\n return { success: true, result, conversationId: result.conversationId }\n }\n\n // Initialize local runner if not ready\n if (jivaRunner.getStatus() === 'stopped' || jivaRunner.getStatus() === 'error') {\n await jivaRunner.initialize()\n }\n\n const result = await jivaRunner.chat(prompt, (phase) => {\n sender.send('jiva:phase-update', phase)\n }, opts, (logEvent) => {\n sender.send('jiva:jiva-log', logEvent)\n })\n\n return { success: true, result, conversationId: result.conversationId }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n // --- Stop active Jiva agent (cooperative: finishes current tool, then exits) ---\n ipcMain.handle('jiva:stop-message', () => {\n jivaRunner.stop()\n return { success: true }\n })\n\n // --- Reset conversation ---\n ipcMain.handle('jiva:reset-conversation', () => {\n jivaRunner.resetConversation()\n return { success: true }\n })\n\n // --- Load a past conversation into the agent ---\n ipcMain.handle('jiva:load-conversation', async (_event, id: string) => {\n try {\n if (jivaRunner.getStatus() === 'stopped' || jivaRunner.getStatus() === 'error') {\n await jivaRunner.initialize()\n }\n await jivaRunner.loadConversation(id)\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n // --- Config ---\n ipcMain.handle('config:read', () => {\n return readConfig()\n })\n\n ipcMain.handle('config:write', (_event, config: unknown) => {\n return writeConfig(config as Parameters<typeof writeConfig>[0])\n })\n\n // --- Personas ---\n ipcMain.handle('personas:list', () => {\n return listPersonas()\n })\n\n ipcMain.handle('personas:activate', async (_event, name: string) => {\n const success = activatePersona(name)\n if (success) {\n // Switch agent to new persona\n try {\n await jivaRunner.switchPersona(name)\n } catch (err) {\n console.error('[IPC] Failed to switch persona:', err)\n }\n }\n return { success }\n })\n\n ipcMain.handle('personas:active', () => {\n return getActivePersona()\n })\n\n // --- Conversations ---\n ipcMain.handle('conversations:list', () => {\n const convsDir = path.join(os.homedir(), '.jiva', 'conversations')\n try {\n if (!fs.existsSync(convsDir)) return []\n const files = fs.readdirSync(convsDir)\n .filter(f => f.endsWith('.json'))\n .map(f => {\n const filePath = path.join(convsDir, f)\n const stat = fs.statSync(filePath)\n try {\n const raw = JSON.parse(fs.readFileSync(filePath, 'utf-8'))\n\n // Try metadata.title first (jiva-core nests title in metadata object),\n // then fall back to top-level summary/title, then extract from first user message\n let summary: string = raw.metadata?.title ?? raw.summary ?? raw.title ?? ''\n if (!summary && Array.isArray(raw.messages)) {\n const firstUser = raw.messages.find(\n (m: { role?: string; content?: unknown }) => m.role === 'user'\n )\n if (firstUser?.content) {\n const text =\n typeof firstUser.content === 'string'\n ? firstUser.content\n : Array.isArray(firstUser.content)\n ? firstUser.content\n .filter((p: { type: string }) => p.type === 'text')\n .map((p: { text?: string }) => p.text ?? '')\n .join('')\n : ''\n summary = text.slice(0, 60).replace(/\\n/g, ' ')\n if (text.length > 60) summary += '...'\n }\n }\n summary = summary || 'Untitled'\n\n return {\n id: f.replace('.json', ''),\n summary,\n messageCount: raw.messages?.length ?? 0,\n lastModified: stat.mtimeMs,\n type: (raw.metadata?.type ?? 'chat') as 'chat' | 'code',\n }\n } catch {\n return null\n }\n })\n .filter(Boolean)\n .sort((a, b) => (b!.lastModified - a!.lastModified))\n return files\n } catch {\n return []\n }\n })\n\n ipcMain.handle('conversations:load', (_event, id: string) => {\n const filePath = path.join(os.homedir(), '.jiva', 'conversations', `${id}.json`)\n try {\n if (!fs.existsSync(filePath)) return null\n return JSON.parse(fs.readFileSync(filePath, 'utf-8'))\n } catch {\n return null\n }\n })\n\n // --- MCP Server Management ---\n\n ipcMain.handle('mcp:list-status', () => {\n try {\n const runtimeStatus = jivaRunner.getMCPServerStatus()\n const config = readConfig()\n const configServers = config?.mcpServers ?? {}\n const statusMap = new Map(runtimeStatus.map((s) => [s.name, s]))\n\n const allServers = Object.entries(configServers).map(([name, serverCfg]) => {\n const rt = statusMap.get(name)\n return {\n name,\n enabled: serverCfg.enabled ?? true,\n connected: rt?.connected ?? false,\n toolCount: rt?.toolCount ?? 0,\n command: serverCfg.command ?? '',\n args: serverCfg.args ?? [],\n env: serverCfg.env ?? {},\n url: (serverCfg as Record<string, unknown>).url as string | undefined,\n type: serverCfg.command ? 'stdio' : 'http',\n error: rt?.error,\n }\n })\n\n for (const rt of runtimeStatus) {\n if (!configServers[rt.name]) {\n allServers.push({\n name: rt.name,\n enabled: rt.enabled,\n connected: rt.connected,\n toolCount: rt.toolCount,\n command: '',\n args: [],\n env: {},\n url: undefined,\n type: 'stdio',\n })\n }\n }\n\n return allServers\n } catch {\n return []\n }\n })\n\n ipcMain.handle('mcp:get-tools', () => {\n try {\n return jivaRunner.getMCPTools()\n } catch {\n return {}\n }\n })\n\n ipcMain.handle('mcp:add-server', async (_event, name: string, serverConfig: {\n command?: string\n args?: string[]\n env?: Record<string, string>\n url?: string\n type: 'stdio' | 'http'\n enabled?: boolean\n }) => {\n try {\n const config = readConfig()\n if (!config) return { success: false, error: 'Config not found' }\n\n const mcpEntry: Record<string, unknown> = { enabled: serverConfig.enabled ?? true }\n if (serverConfig.type === 'stdio') {\n mcpEntry.command = serverConfig.command ?? ''\n mcpEntry.args = serverConfig.args ?? []\n if (serverConfig.env && Object.keys(serverConfig.env).length > 0) {\n mcpEntry.env = serverConfig.env\n }\n } else {\n mcpEntry.url = serverConfig.url ?? ''\n if (serverConfig.env && Object.keys(serverConfig.env).length > 0) {\n mcpEntry.env = serverConfig.env\n }\n }\n\n config.mcpServers = { ...(config.mcpServers ?? {}), [name]: mcpEntry as Parameters<typeof writeConfig>[0]['mcpServers'][string] }\n writeConfig(config)\n\n if (jivaRunner.getStatus() === 'ready' || jivaRunner.getStatus() === 'busy') {\n await jivaRunner.addMCPServer(name, mcpEntry)\n }\n\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n ipcMain.handle('mcp:remove-server', async (_event, name: string) => {\n try {\n const config = readConfig()\n if (config?.mcpServers) {\n delete config.mcpServers[name]\n writeConfig(config)\n }\n if (jivaRunner.getStatus() === 'ready' || jivaRunner.getStatus() === 'busy') {\n await jivaRunner.removeMCPServer(name)\n }\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n ipcMain.handle('mcp:toggle-server', async (_event, name: string, enabled: boolean) => {\n try {\n const config = readConfig()\n if (config?.mcpServers?.[name]) {\n config.mcpServers[name].enabled = enabled\n writeConfig(config)\n }\n if (jivaRunner.getStatus() === 'ready' || jivaRunner.getStatus() === 'busy') {\n await jivaRunner.toggleMCPServer(name, enabled)\n }\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n ipcMain.handle('mcp:reconnect-server', async (_event, name: string) => {\n try {\n await jivaRunner.reconnectMCPServer(name)\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n // --- Workspace / File Browser ---\n\n ipcMain.handle('workspace:get-dir', () => {\n const config = readConfig()\n return config?.workspaceDir ?? os.homedir()\n })\n\n ipcMain.handle('workspace:set-dir', (_event, dir: string) => {\n try {\n const config = readConfig() ?? { models: { reasoning: null } }\n writeConfig({ ...config, workspaceDir: dir })\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n ipcMain.handle('workspace:pick-dir', async () => {\n const win = getWindow()\n const result = await dialog.showOpenDialog(win!, {\n properties: ['openDirectory'],\n title: 'Select Workspace Directory',\n })\n if (result.canceled || result.filePaths.length === 0) return null\n return result.filePaths[0]\n })\n\n ipcMain.handle('workspace:list-files', (_event, dirPath: string) => {\n try {\n // Security: must be within home dir\n const homeDir = os.homedir()\n const resolvedDir = path.resolve(dirPath)\n const resolvedHome = path.resolve(homeDir)\n if (!resolvedDir.startsWith(resolvedHome) && resolvedDir !== resolvedHome) {\n return []\n }\n if (!fs.existsSync(resolvedDir)) return []\n const entries = fs.readdirSync(resolvedDir, { withFileTypes: true })\n return entries\n .filter(e => !e.name.startsWith('.')) // hide hidden files\n .map(e => {\n const fullPath = path.join(resolvedDir, e.name)\n const stat = fs.statSync(fullPath)\n return {\n name: e.name,\n path: fullPath,\n isDirectory: e.isDirectory(),\n size: stat.size,\n modified: stat.mtimeMs,\n }\n })\n } catch {\n return []\n }\n })\n\n ipcMain.handle('workspace:read-file', (_event, filePath: string) => {\n try {\n // Security: must be within home dir\n const homeDir = os.homedir()\n const resolvedFile = path.resolve(filePath)\n const resolvedHome = path.resolve(homeDir)\n if (!resolvedFile.startsWith(resolvedHome)) return null\n\n if (!fs.existsSync(resolvedFile)) return null\n const stat = fs.statSync(resolvedFile)\n // Max 500KB — larger files shown as \"too large\"\n if (stat.size > 512 * 1024) return '[File too large to preview — open in an external editor]'\n return fs.readFileSync(resolvedFile, 'utf-8')\n } catch {\n return null\n }\n })\n\n ipcMain.handle('workspace:open-external', (_event, filePath: string) => {\n shell.showItemInFolder(filePath)\n })\n\n // --- File Attachment Handlers ---\n\n ipcMain.handle('file:pick-attachments', async (_event, includeImages: boolean) => {\n const win = getWindow()\n const imageExts = ['png', 'jpg', 'jpeg', 'gif', 'webp', 'bmp']\n const docExts = ['pdf', 'docx']\n const textExts = [\n 'txt', 'md', 'markdown', 'rst', 'log',\n 'js', 'jsx', 'ts', 'tsx', 'mjs', 'cjs',\n 'py', 'rb', 'go', 'rs', 'java', 'kt', 'swift',\n 'c', 'cpp', 'cc', 'h', 'hpp', 'cs',\n 'css', 'scss', 'sass', 'less',\n 'html', 'htm', 'xml', 'svg',\n 'json', 'jsonc', 'yaml', 'yml', 'toml', 'ini', 'cfg', 'conf',\n 'sh', 'bash', 'zsh', 'ps1', 'bat',\n 'sql', 'graphql', 'proto',\n 'env', 'dockerfile', 'makefile',\n 'vue', 'svelte', 'astro', 'r', 'lua', 'scala',\n ]\n\n // Put a combined filter FIRST — on macOS the dialog defaults to the first entry,\n // so without this only the first category's extensions are visible.\n const allSupportedExts = includeImages\n ? [...imageExts, ...docExts, ...textExts]\n : [...docExts, ...textExts]\n\n const filters: Electron.FileFilter[] = [\n { name: 'All Supported Files', extensions: allSupportedExts },\n { name: 'Documents', extensions: docExts },\n { name: 'Text & Code', extensions: textExts },\n ]\n if (includeImages) {\n filters.push({ name: 'Images', extensions: imageExts })\n }\n\n const result = await dialog.showOpenDialog(win!, {\n title: 'Attach Files',\n properties: ['openFile', 'multiSelections'],\n filters,\n })\n\n if (result.canceled || result.filePaths.length === 0) return []\n return result.filePaths\n })\n\n ipcMain.handle('file:convert-attachment', (_event, filePath: string) => {\n // Security: must be within home dir\n const homeDir = os.homedir()\n const resolved = path.resolve(filePath)\n if (!resolved.startsWith(path.resolve(homeDir))) {\n return { name: path.basename(filePath), category: 'unsupported', markdown: '', error: 'Access denied: file is outside home directory' }\n }\n\n const result = convertFile(filePath)\n\n if (result.category === 'image' && !result.error) {\n // Copy image into <workspaceDir>/.jiva/uploads/ so the agent can reference it by path\n try {\n const config = readConfig()\n const workspaceDir = config?.workspaceDir ?? homeDir\n const uploadsDir = path.join(workspaceDir, '.jiva', 'uploads')\n fs.mkdirSync(uploadsDir, { recursive: true })\n const destPath = path.join(uploadsDir, path.basename(filePath))\n fs.copyFileSync(filePath, destPath)\n result.markdown = destPath\n } catch (err) {\n result.error = `Failed to save image to workspace: ${err instanceof Error ? err.message : String(err)}`\n }\n }\n\n return result\n })\n\n ipcMain.handle('file:describe-image', async (_event, filePath: string) => {\n try {\n const ext = path.extname(filePath).toLowerCase().replace(/^\\./, '')\n const mimeMap: Record<string, string> = {\n png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg',\n gif: 'image/gif', webp: 'image/webp', bmp: 'image/bmp',\n }\n const mimeType = mimeMap[ext] ?? 'image/png'\n const base64 = fs.readFileSync(filePath).toString('base64')\n const dataUri = `data:${mimeType};base64,${base64}`\n const description = await jivaRunner.describeImage(dataUri)\n return { success: true, description }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n // --- Window Controls ---\n ipcMain.handle('window:minimize', () => {\n getWindow()?.minimize()\n })\n\n ipcMain.handle('window:maximize', () => {\n const win = getWindow()\n if (win?.isMaximized()) {\n win.unmaximize()\n } else {\n win?.maximize()\n }\n })\n\n ipcMain.handle('window:close', () => {\n getWindow()?.close()\n })\n\n ipcMain.handle('window:isMaximized', () => {\n return getWindow()?.isMaximized() ?? false\n })\n\n // --- Code Mode: send message via CodeAgent ---\n ipcMain.handle('code:send-message', async (_event, prompt: string, opts?: { deepRun?: boolean }) => {\n const win = getWindow()\n try {\n if (!codeRunner.isReady()) {\n const config = readConfig()\n const workspaceDir = (config as Record<string, unknown>)?.workspaceDir as string | undefined\n ?? os.homedir()\n await codeRunner.initialize(workspaceDir)\n }\n\n const result = await codeRunner.chat(prompt, (event) => {\n win?.webContents.send('jiva:code-log', event)\n }, opts)\n\n return { success: true, ...result }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n // --- Stop active Code agent (cooperative: finishes current tool, then exits) ---\n ipcMain.handle('code:stop-message', () => {\n codeRunner.stop()\n return { success: true }\n })\n\n // --- Reset / tear down CodeRunner so next code:init starts fresh ---\n ipcMain.handle('code:reset-session', async () => {\n try {\n await codeRunner.cleanup()\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n // --- Git: check if directory is a git repo ---\n ipcMain.handle('git:is-repo', (_event, dir: string) => {\n try {\n execFileSync('git', ['rev-parse', '--is-inside-work-tree'], { cwd: dir, timeout: 3000 })\n return true\n } catch {\n return false\n }\n })\n\n // --- Git: get changed files (git status --porcelain) ---\n ipcMain.handle('git:status', (_event, dir: string) => {\n try {\n const output = execFileSync('git', ['status', '--porcelain'], { cwd: dir, timeout: 5000 }).toString()\n return output\n .split('\\n')\n .filter(Boolean)\n .map(line => ({\n status: line.slice(0, 2).trim(),\n file: line.slice(3).trim(),\n }))\n } catch {\n return []\n }\n })\n\n // --- Git: get unified diff for a specific file ---\n // status param: '??' = untracked, 'A' = staged new, others = modified/deleted/renamed\n ipcMain.handle('git:diff-file', (_event, dir: string, file: string, status?: string) => {\n try {\n // Untracked file — synthesise a diff showing all lines as additions\n if (status === '??') {\n const fullPath = path.join(dir, file)\n try {\n const content = fs.readFileSync(fullPath, 'utf-8')\n const lines = content.split('\\n')\n if (lines[lines.length - 1] === '') lines.pop()\n const body = lines.map(l => `+${l}`).join('\\n')\n return `--- /dev/null\\n+++ b/${file}\\n@@ -0,0 +1,${lines.length} @@\\n${body}`\n } catch {\n return null\n }\n }\n\n // Staged new file — show what was added to the index\n if (status === 'A') {\n try {\n const diff = execFileSync('git', ['diff', '--cached', '--', file], { cwd: dir, timeout: 5000 }).toString()\n if (diff.trim()) return diff\n } catch {}\n }\n\n // Modified / deleted / renamed — diff HEAD covers staged + unstaged vs last commit\n try {\n const diff = execFileSync('git', ['diff', 'HEAD', '--', file], { cwd: dir, timeout: 5000 }).toString()\n if (diff.trim()) return diff\n } catch {}\n\n // Fallback: staged-only diff (e.g. AM — added to index, modified in worktree)\n try {\n const diff = execFileSync('git', ['diff', '--cached', '--', file], { cwd: dir, timeout: 5000 }).toString()\n if (diff.trim()) return diff\n } catch {}\n\n // Last resort: plain unstaged diff\n try {\n const diff = execFileSync('git', ['diff', '--', file], { cwd: dir, timeout: 5000 }).toString()\n if (diff.trim()) return diff\n } catch {}\n\n return null\n } catch {\n return null\n }\n })\n\n // --- Git: initialise a new repository in a directory ---\n ipcMain.handle('git:init-repo', (_event, dir: string) => {\n try {\n execFileSync('git', ['init'], { cwd: dir, timeout: 10000 })\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n // --- Git: get current branch name + ahead/behind vs upstream ---\n ipcMain.handle('git:branch-info', (_event, dir: string) => {\n try {\n const branch = execFileSync('git', ['rev-parse', '--abbrev-ref', 'HEAD'],\n { cwd: dir, timeout: 3000 }).toString().trim()\n\n let ahead = 0, behind = 0\n try {\n const tracking = execFileSync(\n 'git', ['rev-parse', '--abbrev-ref', '--symbolic-full-name', '@{u}'],\n { cwd: dir, timeout: 3000 }\n ).toString().trim()\n if (tracking) {\n const ab = execFileSync(\n 'git', ['rev-list', '--left-right', '--count', `${tracking}...HEAD`],\n { cwd: dir, timeout: 3000 }\n ).toString().trim().split('\\t')\n behind = parseInt(ab[0]) || 0\n ahead = parseInt(ab[1]) || 0\n }\n } catch { /* no upstream configured — leave 0/0 */ }\n\n return { branch, ahead, behind }\n } catch {\n return null\n }\n })\n\n // --- Code Mode: explicitly initialise CodeRunner with a chosen directory ---\n ipcMain.handle('code:init', async (_event, dir: string, mcpServers?: string[], opts?: { deepRun?: boolean; maxIterations?: number }) => {\n try {\n await codeRunner.initialize(dir, mcpServers, opts)\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n // --- Code Mode: list all configured MCP servers available for code mode ---\n ipcMain.handle('code:list-mcp-for-code', () => {\n try {\n const config = readConfig()\n const servers = (config as Record<string, unknown>)?.mcpServers as Record<string, Record<string, unknown>> ?? {}\n return Object.entries(servers).map(([name, cfg]) => ({\n name,\n enabled: (cfg.enabled ?? true) as boolean,\n codeMode: cfg.codeMode === true,\n command: (cfg.command ?? '') as string,\n url: cfg.url as string | undefined,\n }))\n } catch {\n return []\n }\n })\n\n // --- Code Mode: get the active conversation ID from the runner ---\n ipcMain.handle('code:get-conversation-id', () => {\n return codeRunner.getConversationId()\n })\n\n // --- Code Mode: read/write per-conversation MCP selections (sidecar store) ---\n const MCP_SELECTIONS_PATH = path.join(os.homedir(), '.jiva', 'jivam-mcp-selections.json')\n\n function readMcpSelections(): Record<string, string[]> {\n try {\n if (fs.existsSync(MCP_SELECTIONS_PATH)) {\n return JSON.parse(fs.readFileSync(MCP_SELECTIONS_PATH, 'utf-8')) as Record<string, string[]>\n }\n } catch {}\n return {}\n }\n\n ipcMain.handle('code:get-mcp-selection', (_event, convId: string) => {\n return readMcpSelections()[convId] ?? []\n })\n\n ipcMain.handle('code:set-mcp-selection', (_event, convId: string, servers: string[]) => {\n try {\n const data = readMcpSelections()\n data[convId] = servers\n fs.mkdirSync(path.dirname(MCP_SELECTIONS_PATH), { recursive: true })\n fs.writeFileSync(MCP_SELECTIONS_PATH, JSON.stringify(data, null, 2))\n return { success: true }\n } catch (err) {\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n // --- Directive: read user-editable directive prefix from config ---\n ipcMain.handle('directive:get', () => {\n const config = readConfig()\n return (config as Record<string, unknown>)?.userDirective as string ?? ''\n })\n\n // --- Directive: save user-editable directive prefix to config and immediately\n // rewrite ~/.jiva/jiva-directive.md so the change is visible right away ---\n ipcMain.handle('directive:set', (_event, content: string) => {\n const config = readConfig() ?? { models: { reasoning: null } }\n writeConfig({ ...config, userDirective: content } as Parameters<typeof writeConfig>[0])\n // Rewrite the directive file immediately so it is up-to-date for the next agent session\n writeDirective(content || undefined)\n return { success: true }\n })\n\n // --- Cloud Mode: auth + session routing ---\n\n ipcMain.handle('cloud:sign-in', async (_event, email: string, password: string) => {\n try {\n const user = await cloudSignIn(email, password)\n return { userId: user.userId, email: user.email }\n } catch (err) {\n return { error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n ipcMain.handle('cloud:sign-up', async (_event, email: string, password: string) => {\n try {\n const user = await cloudSignUp(email, password)\n return { userId: user.userId, email: user.email }\n } catch (err) {\n return { error: err instanceof Error ? err.message : String(err) }\n }\n })\n\n ipcMain.handle('cloud:sign-out', async () => {\n cloudRunner.deactivate()\n })\n\n ipcMain.handle('cloud:init', async (_event, userId: string, sessionId: string) => {\n cloudRunner.startInit()\n try {\n await initCloudSession(userId, sessionId)\n cloudRunner.configure(userId, sessionId)\n return { success: true }\n } catch (err) {\n cloudRunner.deactivate()\n return { success: false, error: err instanceof Error ? err.message : String(err) }\n }\n })\n}\n","import fs from 'fs'\nimport os from 'os'\nimport path from 'path'\n\nexport interface Skill {\n name: string\n description: string\n dir: string\n}\n\n// Provided by the runner so harness can call the model without knowing jiva-core internals.\n// Returns the model's text response, or null on failure.\nexport type Completer = (systemPrompt: string, userPrompt: string) => Promise<string | null>\n\nlet skillCache: Skill[] | null = null\n\nfunction parseFrontmatter(content: string): Record<string, string> {\n const match = /^---\\s*\\n([\\s\\S]*?)\\n---/.exec(content)\n if (!match) return {}\n const result: Record<string, string> = {}\n for (const line of match[1].split('\\n')) {\n const colon = line.indexOf(':')\n if (colon === -1) continue\n const key = line.slice(0, colon).trim()\n const value = line.slice(colon + 1).trim().replace(/^[\"']|[\"']$/g, '')\n if (key) result[key] = value\n }\n return result\n}\n\nexport async function discoverSkills(): Promise<Skill[]> {\n if (skillCache !== null) return skillCache\n\n const searchDirs = [\n path.join(os.homedir(), '.claude', 'skills'),\n path.join(os.homedir(), '.jiva', 'skills'),\n ]\n\n const skills: Skill[] = []\n\n for (const dir of searchDirs) {\n if (!fs.existsSync(dir)) continue\n let entries: fs.Dirent[]\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true })\n } catch {\n continue\n }\n for (const entry of entries) {\n if (!entry.isDirectory()) continue\n const skillDir = path.join(dir, entry.name)\n const skillMdPath = path.join(skillDir, 'SKILL.md')\n if (!fs.existsSync(skillMdPath)) continue\n try {\n const content = fs.readFileSync(skillMdPath, 'utf-8')\n const fm = parseFrontmatter(content)\n const name = fm.name ?? entry.name\n const description = fm.description ?? ''\n skills.push({ name, description, dir: skillDir })\n } catch {\n // skip unreadable skill\n }\n }\n }\n\n skillCache = skills\n return skills\n}\n\nexport async function structurePrompt(\n userPrompt: string,\n skills: Skill[],\n completer: Completer\n): Promise<string> {\n const systemPrompt = 'You are a task coordinator. Structure the following request for a coding agent. Respond only with valid JSON, no markdown fences.'\n\n const skillList = skills.length > 0\n ? skills.map(s => `- ${s.name} (${s.dir}): ${s.description}`).join('\\n')\n : '(none available)'\n\n const userMsg = `Task:\\n${userPrompt}\\n\\nAvailable skills:\\n${skillList}\\n\\nRespond with JSON:\\n{\"structured_prompt\":\"clear restatement of the task\",\"relevant_skills\":[\"skill_name_if_applicable\"],\"notes\":\"optional clarifications\"}`\n\n let structured = userPrompt\n const relevantSkills: string[] = []\n\n try {\n const raw = await completer(systemPrompt, userMsg)\n if (raw) {\n const cleaned = raw.trim().replace(/^```json\\s*|\\s*```$/g, '')\n const parsed = JSON.parse(cleaned) as {\n structured_prompt?: string\n relevant_skills?: string[]\n notes?: string\n }\n if (typeof parsed.structured_prompt === 'string' && parsed.structured_prompt) {\n structured = parsed.structured_prompt\n }\n if (Array.isArray(parsed.relevant_skills)) {\n relevantSkills.push(...parsed.relevant_skills.filter((s): s is string => typeof s === 'string'))\n }\n }\n } catch {\n // fall back to original prompt\n }\n\n if (relevantSkills.length > 0) {\n const matched = relevantSkills\n .map(name => skills.find(s => s.name === name))\n .filter((s): s is Skill => s !== undefined)\n\n if (matched.length > 0) {\n const skillLines = matched\n .map(s => `- ${s.name}: ${s.dir}\\n Read SKILL.md in that directory for full usage instructions.`)\n .join('\\n')\n structured = `${structured}\\n\\nRelevant skill(s) available:\\n${skillLines}`\n }\n }\n\n return structured\n}\n\nexport async function evaluate(\n originalPrompt: string,\n agentResponse: string,\n completer: Completer\n): Promise<{ satisfied: boolean; refinement: string }> {\n const systemPrompt = 'You are evaluating whether an AI agent fully completed a task. Respond only with valid JSON, no markdown fences.'\n const userMsg = `Original request:\\n${originalPrompt}\\n\\nAgent response summary:\\n${agentResponse.slice(0, 1500)}\\n\\nRespond with JSON:\\n{\"satisfied\":true,\"refinement\":\"what to try differently, empty string if satisfied\"}`\n\n try {\n const raw = await completer(systemPrompt, userMsg)\n if (raw) {\n const cleaned = raw.trim().replace(/^```json\\s*|\\s*```$/g, '')\n const parsed = JSON.parse(cleaned) as { satisfied?: boolean; refinement?: string }\n return {\n satisfied: parsed.satisfied === true,\n refinement: typeof parsed.refinement === 'string' ? parsed.refinement : '',\n }\n }\n } catch {\n // fall through to satisfied=true\n }\n\n return { satisfied: true, refinement: '' }\n}\n\nconst MAX_ATTEMPTS = 3\n\nexport async function run<T extends { content: string }>(\n userPrompt: string,\n completer: Completer,\n execute: (prompt: string) => Promise<T>\n): Promise<T> {\n const skills = await discoverSkills()\n const enrichedPrompt = await structurePrompt(userPrompt, skills, completer)\n\n let currentPrompt = enrichedPrompt\n let lastResult: T | null = null\n\n for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {\n lastResult = await execute(currentPrompt)\n\n if (attempt === MAX_ATTEMPTS) break\n\n const evaluation = await evaluate(userPrompt, lastResult.content, completer)\n if (evaluation.satisfied) break\n\n const prevSummary = lastResult.content.slice(0, 500)\n currentPrompt = `${enrichedPrompt}\\n\\n[Previous attempt summary: ${prevSummary}]\\n\\n[Try a different approach: ${evaluation.refinement}]`\n }\n\n return lastResult!\n}\n","import { EventEmitter } from 'events'\nimport { execSync } from 'child_process'\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\nimport { pathToFileURL } from 'url'\nimport { writeDirective } from './directive-manager'\nimport { readConfig } from './config-manager'\nimport * as harness from './harness'\nimport type { Completer } from './harness'\n\nexport interface CodeLogEvent {\n timestamp: string\n level: 'info' | 'warn' | 'error'\n tag: string\n message: string\n}\n\nexport interface CodeRunResult {\n content: string\n toolsUsed: string[]\n iterations: number\n}\n\nfunction resolveJivaCoreEntryPath(): string {\n try {\n const npmRoot = execSync('npm root -g', { timeout: 5000 }).toString().trim()\n const pkgJson = path.join(npmRoot, 'jiva-core', 'package.json')\n if (fs.existsSync(pkgJson)) {\n const pkg = JSON.parse(fs.readFileSync(pkgJson, 'utf-8'))\n const main = pkg.main ?? 'dist/index.js'\n return path.join(npmRoot, 'jiva-core', main)\n }\n } catch {}\n\n const known = path.join(os.homedir(), '.npm-global', 'lib', 'node_modules', 'jiva-core', 'dist', 'index.js')\n if (fs.existsSync(known)) return known\n\n throw new Error('Could not find jiva-core. Please run: npm install -g jiva-core')\n}\n\n// Parses a jiva-core log line into a structured event\n// Format: \"2026-03-13T10:28:32.695Z [INFO] [CodeAgent] Tool: glob\"\nconst LOG_RE = /^(\\d{4}-\\d{2}-\\d{2}T[\\d:.Z]+)\\s+\\[(INFO|WARN|ERROR)\\]\\s+\\[(\\w+)\\]\\s+(.+)$/\n\nexport function parseLogLine(line: string): CodeLogEvent | null {\n const m = LOG_RE.exec(line.trim())\n if (!m) return null\n return {\n timestamp: m[1],\n level: m[2].toLowerCase() as CodeLogEvent['level'],\n tag: m[3],\n message: m[4],\n }\n}\n\nexport class CodeRunner extends EventEmitter {\n private agent: unknown = null\n private orchestrator: unknown = null\n private workspace: unknown = null\n private conversationManager: unknown = null\n private mcpManager: unknown = null\n private ready = false\n private deepRun = false\n private maxIterations = 50\n\n isReady(): boolean {\n return this.ready\n }\n\n getConversationId(): string | null {\n if (!this.conversationManager) return null\n return (this.conversationManager as Record<string, unknown>).currentConversationId as string ?? null\n }\n\n async initialize(workspaceDir: string, mcpServerNames?: string[], opts?: { deepRun?: boolean; maxIterations?: number }): Promise<void> {\n this.deepRun = opts?.deepRun ?? false\n this.maxIterations = opts?.maxIterations ?? 50\n\n const entry = resolveJivaCoreEntryPath()\n console.log(`[CodeRunner] Loading jiva-core from: ${entry}`)\n\n const jiva = await import(pathToFileURL(entry).href)\n\n const {\n configManager,\n ModelOrchestrator,\n WorkspaceManager,\n ConversationManager,\n CodeAgent,\n MCPServerManager,\n createKrutrimModel,\n createLocalProvider,\n } = jiva as Record<string, unknown>\n\n // 1. Validate config\n ;(configManager as { validateConfig(): void }).validateConfig()\n\n const reasoningConfig = (configManager as {\n getReasoningModel(): { endpoint: string; apiKey: string; defaultModel: string; useHarmonyFormat?: boolean }\n }).getReasoningModel()\n\n // 2. Create model + orchestrator\n const createModel = createKrutrimModel as (config: unknown) => unknown\n const reasoningModel = createModel({\n endpoint: reasoningConfig.endpoint,\n apiKey: reasoningConfig.apiKey,\n model: reasoningConfig.defaultModel,\n type: 'reasoning',\n useHarmonyFormat: reasoningConfig.useHarmonyFormat,\n })\n\n const OrchestratorClass = ModelOrchestrator as new (config: unknown) => unknown\n this.orchestrator = new OrchestratorClass({ reasoningModel })\n\n // 3. Write directive + workspace\n const { path: directivePath } = writeDirective(\n (readConfig() as Record<string, unknown>)?.userDirective as string | undefined\n )\n const WsClass = WorkspaceManager as new (config: unknown) => { initialize(): Promise<void> }\n this.workspace = new WsClass({ workspaceDir, directivePath })\n await (this.workspace as { initialize(): Promise<void> }).initialize()\n\n // 4. Conversation manager (auto-saves to ~/.jiva/conversations/)\n const createProvider = createLocalProvider as () => Promise<unknown>\n const storageProvider = await createProvider()\n const ConvManagerClass = ConversationManager as new (provider: unknown, orchestrator?: unknown) => unknown\n this.conversationManager = new ConvManagerClass(storageProvider, this.orchestrator)\n\n // 5. Optionally create MCPServerManager for requested code-mode servers\n this.mcpManager = null\n const activeMcpNames = mcpServerNames && mcpServerNames.length > 0 ? mcpServerNames : null\n if (activeMcpNames && MCPServerManager) {\n const MgrClass = MCPServerManager as new () => { initialize(servers: Record<string, unknown>): Promise<void> }\n const mgr = new MgrClass()\n const allServers = (readConfig() as Record<string, unknown>)?.mcpServers as Record<string, unknown> ?? {}\n const selectedServers: Record<string, unknown> = {}\n for (const name of activeMcpNames) {\n if (allServers[name]) selectedServers[name] = allServers[name]\n }\n await mgr.initialize(selectedServers)\n this.mcpManager = mgr\n console.log(`[CodeRunner] MCP servers loaded: ${activeMcpNames.join(', ')}`)\n }\n\n // 6. Create CodeAgent\n const AgentClass = CodeAgent as new (config: unknown) => {\n chat(prompt: string, onChunk?: (text: string) => void): Promise<{ content: string; toolsUsed: string[]; iterations: number }>\n cleanup(): Promise<void>\n resetConversation(): void\n }\n\n this.agent = new AgentClass({\n orchestrator: this.orchestrator,\n workspace: this.workspace,\n conversationManager: this.conversationManager,\n maxIterations: this.maxIterations,\n ...(this.mcpManager && activeMcpNames ? { mcpManager: this.mcpManager, mcpServerNames: activeMcpNames } : {}),\n })\n\n this.ready = true\n console.log(`[CodeRunner] Initialized (maxIterations=${this.maxIterations}, deepRun=${this.deepRun})`)\n }\n\n private makeCompleter(): Completer {\n const orch = this.orchestrator as Record<string, unknown>\n return async (systemPrompt: string, userPrompt: string): Promise<string | null> => {\n for (const method of ['complete', 'generateResponse', 'generate', 'chat', 'invoke']) {\n if (typeof orch[method] !== 'function') continue\n try {\n const fn = (orch[method] as (msgs: Array<{ role: string; content: string }>) => Promise<{ content: string }>).bind(orch)\n const result = await fn([\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt },\n ])\n return result.content ?? null\n } catch {\n // try next method\n }\n }\n return null\n }\n }\n\n async chat(\n prompt: string,\n onLog: (event: CodeLogEvent) => void,\n opts?: { deepRun?: boolean }\n ): Promise<CodeRunResult> {\n const useDeepRun = opts?.deepRun ?? this.deepRun\n if (useDeepRun) {\n return harness.run(prompt, this.makeCompleter(), p => this.runChat(p, onLog))\n }\n return this.runChat(prompt, onLog)\n }\n\n private async runChat(\n prompt: string,\n onLog: (event: CodeLogEvent) => void\n ): Promise<CodeRunResult> {\n if (!this.agent) {\n throw new Error('CodeRunner not initialized')\n }\n\n const agent = this.agent as {\n chat(prompt: string, onChunk?: (text: string) => void): Promise<{ content: string; toolsUsed: string[]; iterations: number }>\n }\n\n // Intercept stdout/stderr to capture structured log lines from jiva-core's logger\n const origStdoutWrite = process.stdout.write.bind(process.stdout)\n const origStderrWrite = process.stderr.write.bind(process.stderr)\n\n const intercept = (data: string | Uint8Array) => {\n const text = typeof data === 'string' ? data : Buffer.from(data).toString()\n for (const line of text.split('\\n')) {\n const evt = parseLogLine(line)\n if (evt) onLog(evt)\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.stdout.write = (data: string | Uint8Array, ...args: any[]) => {\n intercept(data)\n return origStdoutWrite(data, ...args)\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.stderr.write = (data: string | Uint8Array, ...args: any[]) => {\n intercept(data)\n return origStderrWrite(data, ...args)\n }\n\n try {\n const result = await agent.chat(prompt)\n return {\n content: result.content,\n toolsUsed: result.toolsUsed ?? [],\n iterations: result.iterations ?? 0,\n }\n } finally {\n process.stdout.write = origStdoutWrite\n process.stderr.write = origStderrWrite\n }\n }\n\n stop(): void {\n if (this.agent) {\n (this.agent as { stop(): void }).stop()\n }\n }\n\n async cleanup(): Promise<void> {\n if (this.agent) {\n try {\n await (this.agent as { cleanup(): Promise<void> }).cleanup()\n } catch (err) {\n console.warn('[CodeRunner] Cleanup error:', err)\n }\n }\n if (this.mcpManager) {\n try {\n await (this.mcpManager as { cleanup(): Promise<void> }).cleanup()\n } catch {}\n }\n this.agent = null\n this.orchestrator = null\n this.workspace = null\n this.conversationManager = null\n this.mcpManager = null\n this.ready = false\n }\n}\n","import { EventEmitter } from 'events'\nimport { execSync } from 'child_process'\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\nimport { pathToFileURL } from 'url'\nimport { writeDirective } from './directive-manager'\nimport { readConfig } from './config-manager'\nimport * as harness from './harness'\nimport type { Completer } from './harness'\nimport { parseLogLine } from './code-runner'\nimport type { CodeLogEvent } from './code-runner'\n\n/**\n * Resolve the absolute path to jiva-core's main entry point.\n * jiva-core is installed globally (npm install -g jiva-core), so we can't\n * use a bare `import('jiva-core')` from within dist-electron/ — Node.js\n * resolves bare specifiers relative to the file's directory, not the project root.\n * We detect the global npm root at runtime and build the absolute path.\n */\nfunction resolveJivaCoreEntryPath(): string {\n // Try npm root -g\n try {\n const npmRoot = execSync('npm root -g', { timeout: 5000 }).toString().trim()\n const pkgJson = path.join(npmRoot, 'jiva-core', 'package.json')\n if (fs.existsSync(pkgJson)) {\n const pkg = JSON.parse(fs.readFileSync(pkgJson, 'utf-8'))\n const main = pkg.main ?? 'dist/index.js'\n return path.join(npmRoot, 'jiva-core', main)\n }\n } catch {}\n\n // Try to find in common Windows locations\n if (process.platform === 'win32') {\n const possiblePaths = [\n path.join(process.env.APPDATA ?? '', 'npm', 'node_modules', 'jiva-core', 'dist', 'index.js'),\n path.join(process.env.LOCALAPPDATA ?? '', 'npm', 'node_modules', 'jiva-core', 'dist', 'index.js'),\n 'C:\\\\Program Files\\\\nodejs\\\\node_modules\\\\jiva-core\\\\dist\\\\index.js',\n ]\n for (const known of possiblePaths) {\n if (fs.existsSync(known)) return known\n }\n }\n\n // Known macOS/Linux fallback path\n const known = '/Users/abidev/.npm-global/lib/node_modules/jiva-core/dist/index.js'\n if (fs.existsSync(known)) return known\n\n throw new Error(\n 'Could not find jiva-core. Please ensure it is installed globally: npm install -g jiva-core'\n )\n}\n\nexport type RunnerStatus = 'stopped' | 'initializing' | 'ready' | 'busy' | 'error'\n\nexport interface JivaRunResult {\n content: string\n iterations: number\n toolsUsed: string[]\n plan: {\n subtasks: string[]\n reasoning?: string\n } | null\n durationMs: number\n conversationId?: string\n}\n\nexport type PhaseUpdate = 'initializing' | 'planning' | 'executing' | 'synthesizing' | 'done'\n\n/**\n * JivaRunner — integrates jiva-core SDK directly in the Electron main process.\n *\n * Uses dynamic import() for ESM compatibility: jiva-core is \"type\": \"module\",\n * while our Electron main is compiled as CJS. The standard interop is\n * `await import('jiva-core')` which works in Node.js >= 12.\n *\n * Architecture:\n * Renderer ─ IPC invoke ─▶ Main (JivaRunner) ─▶ DualAgent SDK\n * │\n * IPC send (phase events)\n * │\n * Renderer ◀────────────────────────┘\n */\nexport class JivaRunner extends EventEmitter {\n private status: RunnerStatus = 'stopped'\n private agent: unknown = null // DualAgent instance (typed as unknown for CJS→ESM)\n private orchestrator: unknown = null // ModelOrchestrator\n private mcpManager: unknown = null // MCPServerManager\n private workspace: unknown = null // WorkspaceManager\n private conversationManager: unknown = null\n private personaManager: unknown = null\n private jivaLogger: unknown = null // jiva-core logger singleton (for direct hook)\n private currentPersona: string | null = null\n private currentConversationId: string | null = null\n\n getStatus(): RunnerStatus {\n return this.status\n }\n\n getCurrentConversationId(): string | null {\n return this.currentConversationId\n }\n\n /**\n * Initialize the Jiva agent with current config.\n * Call once on app startup, and re-call when persona changes.\n */\n async initialize(persona?: string): Promise<void> {\n this.setStatus('initializing')\n\n try {\n // Resolve the absolute path to jiva-core's entry point.\n // We can't use bare `import('jiva-core')` from dist-electron/ because Node.js\n // resolves relative to the compiled file location, not the project root.\n const jivaCoreEntry = resolveJivaCoreEntryPath()\n console.log(`[JivaRunner] Loading jiva-core from: ${jivaCoreEntry}`)\n\n // Dynamic ESM import — the only way to load \"type\":\"module\" packages from CJS\n // Must use file:// URL on Windows for ESM compatibility\n const jiva = await import(pathToFileURL(jivaCoreEntry).href)\n\n const {\n configManager,\n MCPServerManager,\n WorkspaceManager,\n ConversationManager,\n ModelOrchestrator,\n DualAgent,\n createKrutrimModel,\n LogLevel,\n logger,\n createLocalProvider,\n } = jiva as Record<string, unknown> & {\n configManager: {\n isConfigured(): boolean\n validateConfig(): void\n getReasoningModel(): unknown\n getMultimodalModel(): unknown\n getMCPServers(): Record<string, unknown>\n getActivePersona(): string | null\n }\n }\n\n // --- 1. Load config ---\n if (!(configManager as typeof configManager).isConfigured()) {\n throw new Error('Jiva is not configured. Please run: jiva setup')\n }\n ;(configManager as typeof configManager).validateConfig()\n\n const reasoningConfig = (configManager as typeof configManager).getReasoningModel() as {\n endpoint: string; apiKey: string; defaultModel: string; useHarmonyFormat?: boolean\n }\n const multimodalConfig = (configManager as typeof configManager).getMultimodalModel() as {\n endpoint: string; apiKey: string; defaultModel: string\n } | undefined\n\n // --- 2. Create models ---\n const createModel = createKrutrimModel as (config: unknown) => unknown\n const reasoningModel = createModel({\n endpoint: reasoningConfig.endpoint,\n apiKey: reasoningConfig.apiKey,\n model: reasoningConfig.defaultModel,\n type: 'reasoning',\n useHarmonyFormat: reasoningConfig.useHarmonyFormat,\n })\n\n let multimodalModel: unknown\n if (multimodalConfig) {\n try {\n multimodalModel = createModel({\n endpoint: multimodalConfig.endpoint,\n apiKey: multimodalConfig.apiKey,\n model: multimodalConfig.defaultModel,\n type: 'multimodal',\n })\n } catch {\n console.warn('[JivaRunner] Failed to create multimodal model, continuing without vision')\n }\n }\n\n // --- 3. Create orchestrator ---\n const OrchestratorClass = ModelOrchestrator as new (config: unknown) => unknown\n this.orchestrator = new OrchestratorClass({ reasoningModel, multimodalModel })\n\n // --- 4. Initialize MCP servers ---\n const mcpServers = (configManager as typeof configManager).getMCPServers()\n const allowedPath = os.platform() === 'win32' ? 'C:\\\\Users' : '/Users'\n\n // Ensure filesystem MCP server always exists\n if (!(mcpServers as Record<string, unknown>)['filesystem']) {\n (mcpServers as Record<string, unknown>)['filesystem'] = {\n command: 'npx',\n args: ['-y', '@modelcontextprotocol/server-filesystem', allowedPath],\n enabled: true,\n }\n }\n\n const McpManagerClass = MCPServerManager as new () => {\n initialize(servers: unknown): Promise<void>\n addServer(name: string, config: unknown): Promise<void>\n cleanup(): Promise<void>\n }\n this.mcpManager = new McpManagerClass()\n await (this.mcpManager as ReturnType<typeof McpManagerClass['prototype']['constructor']> & {\n initialize(servers: unknown): Promise<void>\n }).initialize(mcpServers)\n\n // --- 5. Write date-aware directive + Initialize workspace ---\n // The directive injects current date/time + recent activity so the LLM always\n // knows the correct date without relying on its training data.\n const { path: directivePath } = writeDirective(\n (readConfig() as Record<string, unknown>)?.userDirective as string | undefined\n )\n\n const workspaceDir = process.cwd()\n const WsClass = WorkspaceManager as new (config: unknown) => { initialize(): Promise<void> }\n this.workspace = new WsClass({ workspaceDir, directivePath })\n await (this.workspace as { initialize(): Promise<void> }).initialize()\n\n // --- 6. Initialize conversation manager ---\n const createProvider = createLocalProvider as () => Promise<unknown>\n const storageProvider = await createProvider()\n const ConvManagerClass = ConversationManager as new (provider: unknown, orchestrator?: unknown) => unknown\n this.conversationManager = new ConvManagerClass(storageProvider, this.orchestrator)\n\n // --- 7. Initialize persona manager ---\n // PersonaManager is not exported from the main index — use dynamic path import\n const jivaCoreDir = path.dirname(jivaCoreEntry) // dist/\n const jivaCoreRoot = path.dirname(jivaCoreDir) // jiva-core root\n const personaManagerPath = path.join(jivaCoreRoot, 'dist', 'personas', 'persona-manager.js')\n const { PersonaManager } = await import(\n pathToFileURL(personaManagerPath).href\n ) as { PersonaManager: new () => {\n initialize(persona?: string): Promise<void>\n getPersonaMCPServers(): Record<string, unknown>\n setActivePersona(name: string | null): void\n }}\n this.personaManager = new PersonaManager()\n await (this.personaManager as { initialize(p?: string): Promise<void> }).initialize(\n persona ?? (configManager as typeof configManager).getActivePersona() ?? undefined\n )\n\n // Merge persona-specific MCP servers\n const personaMCPServers = (this.personaManager as {\n getPersonaMCPServers(): Record<string, unknown>\n }).getPersonaMCPServers()\n\n for (const [name, config] of Object.entries(personaMCPServers)) {\n try {\n await (this.mcpManager as {\n addServer(name: string, config: unknown): Promise<void>\n }).addServer(name, config)\n } catch (err) {\n console.warn(`[JivaRunner] Failed to add persona MCP server '${name}':`, err)\n }\n }\n\n // --- 8. Create DualAgent ---\n const AgentClass = DualAgent as new (config: unknown) => {\n chat(prompt: string): Promise<{\n content: string\n iterations: number\n toolsUsed: string[]\n plan?: { subtasks: string[]; reasoning: string }\n }>\n cleanup(): Promise<void>\n resetConversation(): void\n saveConversation(): Promise<string | null>\n loadConversation(id: string): Promise<void>\n listConversations(): Promise<unknown[]>\n }\n\n this.agent = new AgentClass({\n orchestrator: this.orchestrator,\n mcpManager: this.mcpManager,\n workspace: this.workspace,\n conversationManager: this.conversationManager,\n personaManager: this.personaManager,\n maxSubtasks: 20,\n maxIterations: 10,\n autoSave: true,\n condensingThreshold: 30,\n })\n\n // Store the jiva-core logger so runChat() can hook into it per call\n this.jivaLogger = logger\n\n this.currentPersona = persona ?? null\n this.setStatus('ready')\n console.log('[JivaRunner] Initialized successfully')\n\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n console.error('[JivaRunner] Initialization failed:', msg)\n this.setStatus('error', msg)\n throw err\n }\n }\n\n private makeCompleter(): Completer {\n const orch = this.orchestrator as Record<string, unknown>\n return async (systemPrompt: string, userPrompt: string): Promise<string | null> => {\n for (const method of ['complete', 'generateResponse', 'generate', 'chat', 'invoke']) {\n if (typeof orch[method] !== 'function') continue\n try {\n const fn = (orch[method] as (msgs: Array<{ role: string; content: string }>) => Promise<{ content: string }>).bind(orch)\n const result = await fn([\n { role: 'system', content: systemPrompt },\n { role: 'user', content: userPrompt },\n ])\n return result.content ?? null\n } catch {\n // try next method\n }\n }\n return null\n }\n }\n\n /**\n * Send a message to the Jiva agent and return the result.\n * Emits 'phase-update' events as execution progresses.\n *\n * Since DualAgent.chat() is synchronous end-to-end (no event emitter),\n * we emit a simulated phase timeline based on typical durations.\n */\n /**\n * Attach a per-call handler to the jiva-core logger.\n * Tries multiple hook patterns since we can't guarantee the logger's exact API.\n * Returns a cleanup function that removes the handler.\n */\n private hookLogger(onLog: (event: CodeLogEvent) => void): () => void {\n const log = this.jivaLogger as Record<string, unknown> | null\n if (!log) return () => {}\n\n const emit = (level: string, tag: string, message: string) => {\n const lvl = level.toLowerCase()\n onLog({\n timestamp: new Date().toISOString(),\n level: (lvl === 'warn' || lvl === 'error' ? lvl : 'info') as CodeLogEvent['level'],\n tag,\n message,\n })\n }\n\n // Pattern 1: EventEmitter 'log' event — common for custom loggers\n // Signature variants: (level, tag, msg) or ({ level, tag, message }) or (level, msg)\n if (typeof log.on === 'function') {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handler = (...args: any[]) => {\n if (args.length >= 3 && typeof args[0] === 'string') {\n emit(args[0], args[1] ?? 'jiva', args[2])\n } else if (args.length >= 2 && typeof args[0] === 'string') {\n emit('info', 'jiva', args[1])\n } else if (args.length >= 1 && typeof args[0] === 'object') {\n const e = args[0] as Record<string, unknown>\n emit(String(e.level ?? 'info'), String(e.tag ?? e.name ?? 'jiva'), String(e.message ?? e.msg ?? ''))\n }\n }\n try {\n ;(log.on as (e: string, fn: unknown) => void)('log', handler)\n return () => {\n if (typeof log.off === 'function') (log.off as (e: string, fn: unknown) => void)('log', handler)\n else if (typeof log.removeListener === 'function') (log.removeListener as (e: string, fn: unknown) => void)('log', handler)\n }\n } catch {}\n }\n\n // Pattern 2: addTransport / addHandler\n for (const addMethod of ['addTransport', 'addHandler', 'addSink']) {\n if (typeof log[addMethod] !== 'function') continue\n const removeMethod = addMethod.replace('add', 'remove')\n const transport = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n write: (entry: Record<string, unknown>) => {\n emit(String(entry.level ?? 'info'), String(entry.tag ?? entry.name ?? 'jiva'), String(entry.message ?? entry.msg ?? ''))\n },\n // Some loggers call log() instead of write()\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n log: (entry: Record<string, unknown>) => {\n emit(String(entry.level ?? 'info'), String(entry.tag ?? entry.name ?? 'jiva'), String(entry.message ?? entry.msg ?? ''))\n },\n }\n try {\n ;(log[addMethod] as (t: unknown) => void)(transport)\n return () => {\n if (typeof log[removeMethod] === 'function') {\n try { (log[removeMethod] as (t: unknown) => void)(transport) } catch {}\n }\n }\n } catch {}\n }\n\n // Pattern 3: stdout interception — last resort for loggers that only write to stdout\n const origWrite = process.stdout.write.bind(process.stdout)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.stdout.write = (data: string | Uint8Array, ...args: any[]) => {\n const text = typeof data === 'string' ? data : Buffer.from(data).toString()\n for (const line of text.split('\\n')) {\n // Try strict structured format first\n const structured = parseLogLine(line)\n if (structured) { onLog(structured); continue }\n // Lenient fallback: any line mentioning a tool call\n const toolMatch = /(?:tool(?:\\s+call)?|calling|executing)[:\\s]+([^\\s(]+)/i.exec(line.trim())\n if (toolMatch) {\n onLog({ timestamp: new Date().toISOString(), level: 'info', tag: 'jiva', message: `Tool: ${toolMatch[1]}` })\n }\n }\n return origWrite(data, ...args)\n }\n return () => { process.stdout.write = origWrite }\n }\n\n private async runChat(\n prompt: string,\n startTime: number,\n onLog?: (event: CodeLogEvent) => void\n ): Promise<JivaRunResult> {\n const unhook = onLog ? this.hookLogger(onLog) : null\n\n const agent = this.agent as {\n chat(prompt: string): Promise<{\n content: string\n iterations: number\n toolsUsed: string[]\n plan?: { subtasks: string[]; reasoning: string }\n }>\n }\n\n let response: { content: string; iterations: number; toolsUsed: string[]; plan?: { subtasks: string[]; reasoning: string } }\n try {\n response = await agent.chat(prompt)\n } finally {\n unhook?.()\n }\n\n // Synthesise tool events from toolsUsed if none were emitted during execution\n // (covers the case where DualAgent doesn't log intermediately)\n if (onLog && response.toolsUsed?.length) {\n for (const tool of response.toolsUsed) {\n onLog({ timestamp: new Date().toISOString(), level: 'info', tag: 'jiva', message: `Tool: ${tool}` })\n }\n }\n\n // Capture conversation ID (auto-saved by DualAgent).\n let convId: string | null = null\n try {\n convId = (this.conversationManager as {\n getCurrentConversationId?(): string | null\n }).getCurrentConversationId?.() ?? null\n } catch {}\n\n if (!convId) {\n try {\n convId = await (this.agent as {\n saveConversation(): Promise<string | null>\n }).saveConversation()\n } catch {}\n }\n\n if (convId) this.currentConversationId = convId\n\n return {\n content: response.content,\n iterations: response.iterations,\n toolsUsed: response.toolsUsed ?? [],\n plan: response.plan\n ? { subtasks: response.plan.subtasks ?? [], reasoning: response.plan.reasoning }\n : null,\n durationMs: Date.now() - startTime,\n conversationId: this.currentConversationId ?? undefined,\n }\n }\n\n /**\n * Send a message to the Jiva agent and return the result.\n * Emits 'phase-update' events as execution progresses.\n *\n * Since DualAgent.chat() is synchronous end-to-end (no event emitter),\n * we emit a simulated phase timeline based on typical durations.\n */\n async chat(\n prompt: string,\n onPhase: (phase: PhaseUpdate) => void,\n opts?: { deepRun?: boolean },\n onLog?: (event: CodeLogEvent) => void\n ): Promise<JivaRunResult> {\n if (!this.agent) {\n throw new Error('JivaRunner not initialized. Call initialize() first.')\n }\n if (this.status === 'busy') {\n throw new Error('Agent is already processing a request.')\n }\n\n this.setStatus('busy')\n const startTime = Date.now()\n\n onPhase('planning')\n const executingTimer = setTimeout(() => onPhase('executing'), 5000)\n const synthesizingTimer = setTimeout(() => onPhase('synthesizing'), 20000)\n\n try {\n let result: JivaRunResult\n\n if (opts?.deepRun) {\n result = await harness.run(prompt, this.makeCompleter(), p => this.runChat(p, startTime, onLog))\n } else {\n result = await this.runChat(prompt, startTime, onLog)\n }\n\n clearTimeout(executingTimer)\n clearTimeout(synthesizingTimer)\n onPhase('done')\n this.setStatus('ready')\n return result\n } catch (err) {\n clearTimeout(executingTimer)\n clearTimeout(synthesizingTimer)\n this.setStatus('ready')\n throw err\n }\n }\n\n /**\n * Load a past conversation into the agent by ID.\n * This restores the full conversation history so subsequent chat() calls continue in context.\n */\n async loadConversation(id: string): Promise<void> {\n if (!this.agent) {\n throw new Error('JivaRunner not initialized. Call initialize() first.')\n }\n await (this.agent as { loadConversation(id: string): Promise<void> }).loadConversation(id)\n this.currentConversationId = id\n console.log(`[JivaRunner] Loaded conversation: ${id}`)\n }\n\n /**\n * Switch to a different persona. Re-initializes the agent with new persona config.\n */\n async switchPersona(persona: string): Promise<void> {\n if (this.agent) {\n await this.cleanup()\n }\n await this.initialize(persona)\n }\n\n /**\n * Reset conversation history without re-initializing.\n */\n resetConversation(): void {\n if (this.agent) {\n ;(this.agent as { resetConversation(): void }).resetConversation()\n }\n this.currentConversationId = null\n }\n\n // ─── MCP Server Management ────────────────────────────────────────────────\n\n /**\n * Get all tools grouped by server name.\n */\n getMCPTools(): Record<string, Array<{ name: string; description: string }>> {\n if (!this.mcpManager) return {}\n try {\n const allTools = (this.mcpManager as {\n getAllTools?(): Array<{ name: string; description?: string }>\n }).getAllTools?.() ?? []\n\n const grouped: Record<string, Array<{ name: string; description: string }>> = {}\n for (const tool of allTools) {\n // Tool names are prefixed as \"serverName__toolName\"\n const parts = tool.name.split('__')\n const serverName = parts.length > 1 ? parts[0] : 'unknown'\n const toolName = parts.length > 1 ? parts.slice(1).join('__') : tool.name\n if (!grouped[serverName]) grouped[serverName] = []\n grouped[serverName].push({ name: toolName, description: tool.description ?? '' })\n }\n return grouped\n } catch {\n return {}\n }\n }\n\n /**\n * Add a new MCP server to the running manager.\n * The caller is responsible for persisting to config.\n */\n async addMCPServer(name: string, config: unknown): Promise<void> {\n if (!this.mcpManager) throw new Error('MCP manager not initialized')\n await (this.mcpManager as {\n addServer(name: string, config: unknown): Promise<void>\n }).addServer(name, config)\n }\n\n /**\n * Remove an MCP server from the running manager.\n * The caller is responsible for updating config.\n */\n async removeMCPServer(name: string): Promise<void> {\n if (!this.mcpManager) throw new Error('MCP manager not initialized')\n const manager = this.mcpManager as {\n removeServer?(name: string): Promise<void>\n disableServer?(name: string): Promise<void>\n }\n if (manager.removeServer) {\n await manager.removeServer(name)\n } else if (manager.disableServer) {\n await manager.disableServer(name)\n }\n }\n\n /**\n * Get status of all connected MCP servers, including any error info.\n */\n getMCPServerStatus(): Array<{ name: string; enabled: boolean; connected: boolean; toolCount: number; error?: string }> {\n if (!this.mcpManager) return []\n try {\n const statuses = (this.mcpManager as {\n getServerStatus?(): Array<{ name: string; enabled: boolean; connected: boolean; toolCount: number }>\n }).getServerStatus?.() ?? []\n return statuses.map(s => ({\n ...s,\n error: (s as Record<string, unknown>).error as string | undefined\n ?? (s as Record<string, unknown>).lastError as string | undefined,\n }))\n } catch {\n return []\n }\n }\n\n /**\n * Reconnect an MCP server without touching config.\n * Tries native reconnect first, falls back to remove + re-add.\n */\n async reconnectMCPServer(name: string): Promise<void> {\n if (!this.mcpManager) throw new Error('MCP manager not initialized')\n const manager = this.mcpManager as Record<string, unknown>\n\n // Try native reconnect if available\n if (typeof manager.reconnectServer === 'function') {\n await (manager.reconnectServer as (n: string) => Promise<void>)(name)\n return\n }\n\n // Fallback: get current status, remove from manager, re-add\n const statuses = this.getMCPServerStatus()\n const srv = statuses.find(s => s.name === name)\n if (!srv) throw new Error(`MCP server \"${name}\" not found`)\n\n const fullStatus = (this.mcpManager as {\n getServerStatus?(): Array<Record<string, unknown>>\n }).getServerStatus?.()?.find((s) => s.name === name) ?? {}\n\n await this.removeMCPServer(name)\n const config = (fullStatus.url != null)\n ? { type: 'http' as const, url: fullStatus.url as string, env: fullStatus.env as Record<string, string> | undefined, enabled: true }\n : { type: 'stdio' as const, command: fullStatus.command as string, args: fullStatus.args as string[] | undefined, env: fullStatus.env as Record<string, string> | undefined, enabled: true }\n await this.addMCPServer(name, config)\n }\n\n /**\n * Enable or disable an MCP server at runtime.\n * The caller is responsible for updating config.\n */\n async toggleMCPServer(name: string, enabled: boolean): Promise<void> {\n if (!this.mcpManager) throw new Error('MCP manager not initialized')\n const manager = this.mcpManager as {\n enableServer?(name: string): Promise<void>\n disableServer?(name: string): Promise<void>\n }\n if (enabled && manager.enableServer) {\n await manager.enableServer(name)\n } else if (!enabled && manager.disableServer) {\n await manager.disableServer(name)\n }\n }\n\n /**\n * Describe an image using the configured multimodal model.\n * Returns a text description suitable for injection into a text prompt.\n * Throws if no multimodal model is configured or runner is not initialized.\n */\n async describeImage(base64DataUri: string): Promise<string> {\n if (!this.orchestrator) {\n throw new Error('JivaRunner not initialized. Call initialize() first.')\n }\n\n const config = readConfig()\n if (!config?.models?.multimodal) {\n throw new Error('No multimodal (vision) model is configured. Enable it in Settings → Models.')\n }\n\n const orchestrator = this.orchestrator as {\n chat(options: unknown): Promise<{ content: string }>\n }\n\n const response = await orchestrator.chat({\n messages: [{\n role: 'user',\n content: [\n { type: 'image_url', image_url: { url: base64DataUri } },\n { type: 'text', text: 'Describe this image in detail, including all visible content, text, charts, diagrams, and any notable elements.' },\n ],\n }],\n })\n\n return response.content\n }\n\n /**\n * Clean up all resources (MCP servers, agent).\n */\n async cleanup(): Promise<void> {\n try {\n if (this.agent) {\n await (this.agent as { cleanup(): Promise<void> }).cleanup()\n this.agent = null\n }\n if (this.mcpManager) {\n await (this.mcpManager as { cleanup(): Promise<void> }).cleanup()\n this.mcpManager = null\n }\n } catch (err) {\n console.warn('[JivaRunner] Cleanup error:', err)\n }\n this.orchestrator = null\n this.workspace = null\n this.conversationManager = null\n this.personaManager = null\n this.currentConversationId = null\n this.setStatus('stopped')\n }\n\n stop(): void {\n if (this.agent) {\n (this.agent as { stop(): void }).stop()\n }\n }\n\n private setStatus(status: RunnerStatus, error?: string) {\n this.status = status\n this.emit('status-changed', status, { error })\n }\n}\n","'use strict'\n\nexports.fromCallback = function (fn) {\n return Object.defineProperty(function (...args) {\n if (typeof args[args.length - 1] === 'function') fn.apply(this, args)\n else {\n return new Promise((resolve, reject) => {\n args.push((err, res) => (err != null) ? reject(err) : resolve(res))\n fn.apply(this, args)\n })\n }\n }, 'name', { value: fn.name })\n}\n\nexports.fromPromise = function (fn) {\n return Object.defineProperty(function (...args) {\n const cb = args[args.length - 1]\n if (typeof cb !== 'function') return fn.apply(this, args)\n else {\n args.pop()\n fn.apply(this, args).then(r => cb(null, r), cb)\n }\n }, 'name', { value: fn.name })\n}\n","var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n","var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n","'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n","var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n","'use strict'\n// This is adapted from https://github.com/normalize/mz\n// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors\nconst u = require('universalify').fromCallback\nconst fs = require('graceful-fs')\n\nconst api = [\n 'access',\n 'appendFile',\n 'chmod',\n 'chown',\n 'close',\n 'copyFile',\n 'fchmod',\n 'fchown',\n 'fdatasync',\n 'fstat',\n 'fsync',\n 'ftruncate',\n 'futimes',\n 'lchmod',\n 'lchown',\n 'link',\n 'lstat',\n 'mkdir',\n 'mkdtemp',\n 'open',\n 'opendir',\n 'readdir',\n 'readFile',\n 'readlink',\n 'realpath',\n 'rename',\n 'rm',\n 'rmdir',\n 'stat',\n 'symlink',\n 'truncate',\n 'unlink',\n 'utimes',\n 'writeFile'\n].filter(key => {\n // Some commands are not available on some systems. Ex:\n // fs.opendir was added in Node.js v12.12.0\n // fs.rm was added in Node.js v14.14.0\n // fs.lchown is not available on at least some Linux\n return typeof fs[key] === 'function'\n})\n\n// Export cloned fs:\nObject.assign(exports, fs)\n\n// Universalify async methods:\napi.forEach(method => {\n exports[method] = u(fs[method])\n})\n\n// We differ from mz/fs in that we still ship the old, broken, fs.exists()\n// since we are a drop-in replacement for the native module\nexports.exists = function (filename, callback) {\n if (typeof callback === 'function') {\n return fs.exists(filename, callback)\n }\n return new Promise(resolve => {\n return fs.exists(filename, resolve)\n })\n}\n\n// fs.read(), fs.write(), & fs.writev() need special treatment due to multiple callback args\n\nexports.read = function (fd, buffer, offset, length, position, callback) {\n if (typeof callback === 'function') {\n return fs.read(fd, buffer, offset, length, position, callback)\n }\n return new Promise((resolve, reject) => {\n fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {\n if (err) return reject(err)\n resolve({ bytesRead, buffer })\n })\n })\n}\n\n// Function signature can be\n// fs.write(fd, buffer[, offset[, length[, position]]], callback)\n// OR\n// fs.write(fd, string[, position[, encoding]], callback)\n// We need to handle both cases, so we use ...args\nexports.write = function (fd, buffer, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.write(fd, buffer, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffer })\n })\n })\n}\n\n// fs.writev only available in Node v12.9.0+\nif (typeof fs.writev === 'function') {\n // Function signature is\n // s.writev(fd, buffers[, position], callback)\n // We need to handle the optional arg, so we use ...args\n exports.writev = function (fd, buffers, ...args) {\n if (typeof args[args.length - 1] === 'function') {\n return fs.writev(fd, buffers, ...args)\n }\n\n return new Promise((resolve, reject) => {\n fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {\n if (err) return reject(err)\n resolve({ bytesWritten, buffers })\n })\n })\n }\n}\n\n// fs.realpath.native sometimes not available if fs is monkey-patched\nif (typeof fs.realpath.native === 'function') {\n exports.realpath.native = u(fs.realpath.native)\n} else {\n process.emitWarning(\n 'fs.realpath.native is not a function. Is fs being monkey-patched?',\n 'Warning', 'fs-extra-WARN0003'\n )\n}\n","// Adapted from https://github.com/sindresorhus/make-dir\n// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict'\nconst path = require('path')\n\n// https://github.com/nodejs/node/issues/8987\n// https://github.com/libuv/libuv/pull/1088\nmodule.exports.checkPath = function checkPath (pth) {\n if (process.platform === 'win32') {\n const pathHasInvalidWinCharacters = /[<>:\"|?*]/.test(pth.replace(path.parse(pth).root, ''))\n\n if (pathHasInvalidWinCharacters) {\n const error = new Error(`Path contains invalid characters: ${pth}`)\n error.code = 'EINVAL'\n throw error\n }\n }\n}\n","'use strict'\nconst fs = require('../fs')\nconst { checkPath } = require('./utils')\n\nconst getMode = options => {\n const defaults = { mode: 0o777 }\n if (typeof options === 'number') return options\n return ({ ...defaults, ...options }).mode\n}\n\nmodule.exports.makeDir = async (dir, options) => {\n checkPath(dir)\n\n return fs.mkdir(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n\nmodule.exports.makeDirSync = (dir, options) => {\n checkPath(dir)\n\n return fs.mkdirSync(dir, {\n mode: getMode(options),\n recursive: true\n })\n}\n","'use strict'\nconst u = require('universalify').fromPromise\nconst { makeDir: _makeDir, makeDirSync } = require('./make-dir')\nconst makeDir = u(_makeDir)\n\nmodule.exports = {\n mkdirs: makeDir,\n mkdirsSync: makeDirSync,\n // alias\n mkdirp: makeDir,\n mkdirpSync: makeDirSync,\n ensureDir: makeDir,\n ensureDirSync: makeDirSync\n}\n","'use strict'\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\n\nfunction pathExists (path) {\n return fs.access(path).then(() => true).catch(() => false)\n}\n\nmodule.exports = {\n pathExists: u(pathExists),\n pathExistsSync: fs.existsSync\n}\n","'use strict'\n\nconst fs = require('graceful-fs')\n\nfunction utimesMillis (path, atime, mtime, callback) {\n // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)\n fs.open(path, 'r+', (err, fd) => {\n if (err) return callback(err)\n fs.futimes(fd, atime, mtime, futimesErr => {\n fs.close(fd, closeErr => {\n if (callback) callback(futimesErr || closeErr)\n })\n })\n })\n}\n\nfunction utimesMillisSync (path, atime, mtime) {\n const fd = fs.openSync(path, 'r+')\n fs.futimesSync(fd, atime, mtime)\n return fs.closeSync(fd)\n}\n\nmodule.exports = {\n utimesMillis,\n utimesMillisSync\n}\n","'use strict'\n\nconst fs = require('../fs')\nconst path = require('path')\nconst util = require('util')\n\nfunction getStats (src, dest, opts) {\n const statFunc = opts.dereference\n ? (file) => fs.stat(file, { bigint: true })\n : (file) => fs.lstat(file, { bigint: true })\n return Promise.all([\n statFunc(src),\n statFunc(dest).catch(err => {\n if (err.code === 'ENOENT') return null\n throw err\n })\n ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))\n}\n\nfunction getStatsSync (src, dest, opts) {\n let destStat\n const statFunc = opts.dereference\n ? (file) => fs.statSync(file, { bigint: true })\n : (file) => fs.lstatSync(file, { bigint: true })\n const srcStat = statFunc(src)\n try {\n destStat = statFunc(dest)\n } catch (err) {\n if (err.code === 'ENOENT') return { srcStat, destStat: null }\n throw err\n }\n return { srcStat, destStat }\n}\n\nfunction checkPaths (src, dest, funcName, opts, cb) {\n util.callbackify(getStats)(src, dest, opts, (err, stats) => {\n if (err) return cb(err)\n const { srcStat, destStat } = stats\n\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return cb(null, { srcStat, destStat, isChangingCase: true })\n }\n return cb(new Error('Source and destination must not be the same.'))\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`))\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n return cb(new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`))\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n return cb(new Error(errMsg(src, dest, funcName)))\n }\n return cb(null, { srcStat, destStat })\n })\n}\n\nfunction checkPathsSync (src, dest, funcName, opts) {\n const { srcStat, destStat } = getStatsSync(src, dest, opts)\n\n if (destStat) {\n if (areIdentical(srcStat, destStat)) {\n const srcBaseName = path.basename(src)\n const destBaseName = path.basename(dest)\n if (funcName === 'move' &&\n srcBaseName !== destBaseName &&\n srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {\n return { srcStat, destStat, isChangingCase: true }\n }\n throw new Error('Source and destination must not be the same.')\n }\n if (srcStat.isDirectory() && !destStat.isDirectory()) {\n throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)\n }\n if (!srcStat.isDirectory() && destStat.isDirectory()) {\n throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)\n }\n }\n\n if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return { srcStat, destStat }\n}\n\n// recursively check if dest parent is a subdirectory of src.\n// It works for all file types including symlinks since it\n// checks the src and dest inodes. It starts from the deepest\n// parent and stops once it reaches the src parent or the root path.\nfunction checkParentPaths (src, srcStat, dest, funcName, cb) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return cb()\n fs.stat(destParent, { bigint: true }, (err, destStat) => {\n if (err) {\n if (err.code === 'ENOENT') return cb()\n return cb(err)\n }\n if (areIdentical(srcStat, destStat)) {\n return cb(new Error(errMsg(src, dest, funcName)))\n }\n return checkParentPaths(src, srcStat, destParent, funcName, cb)\n })\n}\n\nfunction checkParentPathsSync (src, srcStat, dest, funcName) {\n const srcParent = path.resolve(path.dirname(src))\n const destParent = path.resolve(path.dirname(dest))\n if (destParent === srcParent || destParent === path.parse(destParent).root) return\n let destStat\n try {\n destStat = fs.statSync(destParent, { bigint: true })\n } catch (err) {\n if (err.code === 'ENOENT') return\n throw err\n }\n if (areIdentical(srcStat, destStat)) {\n throw new Error(errMsg(src, dest, funcName))\n }\n return checkParentPathsSync(src, srcStat, destParent, funcName)\n}\n\nfunction areIdentical (srcStat, destStat) {\n return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev\n}\n\n// return true if dest is a subdir of src, otherwise false.\n// It only checks the path strings.\nfunction isSrcSubdir (src, dest) {\n const srcArr = path.resolve(src).split(path.sep).filter(i => i)\n const destArr = path.resolve(dest).split(path.sep).filter(i => i)\n return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true)\n}\n\nfunction errMsg (src, dest, funcName) {\n return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`\n}\n\nmodule.exports = {\n checkPaths,\n checkPathsSync,\n checkParentPaths,\n checkParentPathsSync,\n isSrcSubdir,\n areIdentical\n}\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdirs = require('../mkdirs').mkdirs\nconst pathExists = require('../path-exists').pathExists\nconst utimesMillis = require('../util/utimes').utimesMillis\nconst stat = require('../util/stat')\n\nfunction copy (src, dest, opts, cb) {\n if (typeof opts === 'function' && !cb) {\n cb = opts\n opts = {}\n } else if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n cb = cb || function () {}\n opts = opts || {}\n\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n process.emitWarning(\n 'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n 'Warning', 'fs-extra-WARN0001'\n )\n }\n\n stat.checkPaths(src, dest, 'copy', opts, (err, stats) => {\n if (err) return cb(err)\n const { srcStat, destStat } = stats\n stat.checkParentPaths(src, srcStat, dest, 'copy', err => {\n if (err) return cb(err)\n if (opts.filter) return handleFilter(checkParentDir, destStat, src, dest, opts, cb)\n return checkParentDir(destStat, src, dest, opts, cb)\n })\n })\n}\n\nfunction checkParentDir (destStat, src, dest, opts, cb) {\n const destParent = path.dirname(dest)\n pathExists(destParent, (err, dirExists) => {\n if (err) return cb(err)\n if (dirExists) return getStats(destStat, src, dest, opts, cb)\n mkdirs(destParent, err => {\n if (err) return cb(err)\n return getStats(destStat, src, dest, opts, cb)\n })\n })\n}\n\nfunction handleFilter (onInclude, destStat, src, dest, opts, cb) {\n Promise.resolve(opts.filter(src, dest)).then(include => {\n if (include) return onInclude(destStat, src, dest, opts, cb)\n return cb()\n }, error => cb(error))\n}\n\nfunction startCopy (destStat, src, dest, opts, cb) {\n if (opts.filter) return handleFilter(getStats, destStat, src, dest, opts, cb)\n return getStats(destStat, src, dest, opts, cb)\n}\n\nfunction getStats (destStat, src, dest, opts, cb) {\n const stat = opts.dereference ? fs.stat : fs.lstat\n stat(src, (err, srcStat) => {\n if (err) return cb(err)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts, cb)\n else if (srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts, cb)\n else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts, cb)\n else if (srcStat.isSocket()) return cb(new Error(`Cannot copy a socket file: ${src}`))\n else if (srcStat.isFIFO()) return cb(new Error(`Cannot copy a FIFO pipe: ${src}`))\n return cb(new Error(`Unknown file: ${src}`))\n })\n}\n\nfunction onFile (srcStat, destStat, src, dest, opts, cb) {\n if (!destStat) return copyFile(srcStat, src, dest, opts, cb)\n return mayCopyFile(srcStat, src, dest, opts, cb)\n}\n\nfunction mayCopyFile (srcStat, src, dest, opts, cb) {\n if (opts.overwrite) {\n fs.unlink(dest, err => {\n if (err) return cb(err)\n return copyFile(srcStat, src, dest, opts, cb)\n })\n } else if (opts.errorOnExist) {\n return cb(new Error(`'${dest}' already exists`))\n } else return cb()\n}\n\nfunction copyFile (srcStat, src, dest, opts, cb) {\n fs.copyFile(src, dest, err => {\n if (err) return cb(err)\n if (opts.preserveTimestamps) return handleTimestampsAndMode(srcStat.mode, src, dest, cb)\n return setDestMode(dest, srcStat.mode, cb)\n })\n}\n\nfunction handleTimestampsAndMode (srcMode, src, dest, cb) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcMode)) {\n return makeFileWritable(dest, srcMode, err => {\n if (err) return cb(err)\n return setDestTimestampsAndMode(srcMode, src, dest, cb)\n })\n }\n return setDestTimestampsAndMode(srcMode, src, dest, cb)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode, cb) {\n return setDestMode(dest, srcMode | 0o200, cb)\n}\n\nfunction setDestTimestampsAndMode (srcMode, src, dest, cb) {\n setDestTimestamps(src, dest, err => {\n if (err) return cb(err)\n return setDestMode(dest, srcMode, cb)\n })\n}\n\nfunction setDestMode (dest, srcMode, cb) {\n return fs.chmod(dest, srcMode, cb)\n}\n\nfunction setDestTimestamps (src, dest, cb) {\n // The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n fs.stat(src, (err, updatedSrcStat) => {\n if (err) return cb(err)\n return utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime, cb)\n })\n}\n\nfunction onDir (srcStat, destStat, src, dest, opts, cb) {\n if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts, cb)\n return copyDir(src, dest, opts, cb)\n}\n\nfunction mkDirAndCopy (srcMode, src, dest, opts, cb) {\n fs.mkdir(dest, err => {\n if (err) return cb(err)\n copyDir(src, dest, opts, err => {\n if (err) return cb(err)\n return setDestMode(dest, srcMode, cb)\n })\n })\n}\n\nfunction copyDir (src, dest, opts, cb) {\n fs.readdir(src, (err, items) => {\n if (err) return cb(err)\n return copyDirItems(items, src, dest, opts, cb)\n })\n}\n\nfunction copyDirItems (items, src, dest, opts, cb) {\n const item = items.pop()\n if (!item) return cb()\n return copyDirItem(items, item, src, dest, opts, cb)\n}\n\nfunction copyDirItem (items, item, src, dest, opts, cb) {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n stat.checkPaths(srcItem, destItem, 'copy', opts, (err, stats) => {\n if (err) return cb(err)\n const { destStat } = stats\n startCopy(destStat, srcItem, destItem, opts, err => {\n if (err) return cb(err)\n return copyDirItems(items, src, dest, opts, cb)\n })\n })\n}\n\nfunction onLink (destStat, src, dest, opts, cb) {\n fs.readlink(src, (err, resolvedSrc) => {\n if (err) return cb(err)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n\n if (!destStat) {\n return fs.symlink(resolvedSrc, dest, cb)\n } else {\n fs.readlink(dest, (err, resolvedDest) => {\n if (err) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest, cb)\n return cb(err)\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n return cb(new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`))\n }\n\n // do not copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (destStat.isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))\n }\n return copyLink(resolvedSrc, dest, cb)\n })\n }\n })\n}\n\nfunction copyLink (resolvedSrc, dest, cb) {\n fs.unlink(dest, err => {\n if (err) return cb(err)\n return fs.symlink(resolvedSrc, dest, cb)\n })\n}\n\nmodule.exports = copy\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdirsSync = require('../mkdirs').mkdirsSync\nconst utimesMillisSync = require('../util/utimes').utimesMillisSync\nconst stat = require('../util/stat')\n\nfunction copySync (src, dest, opts) {\n if (typeof opts === 'function') {\n opts = { filter: opts }\n }\n\n opts = opts || {}\n opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now\n opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber\n\n // Warn about using preserveTimestamps on 32-bit node\n if (opts.preserveTimestamps && process.arch === 'ia32') {\n process.emitWarning(\n 'Using the preserveTimestamps option in 32-bit node is not recommended;\\n\\n' +\n '\\tsee https://github.com/jprichardson/node-fs-extra/issues/269',\n 'Warning', 'fs-extra-WARN0002'\n )\n }\n\n const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'copy')\n return handleFilterAndCopy(destStat, src, dest, opts)\n}\n\nfunction handleFilterAndCopy (destStat, src, dest, opts) {\n if (opts.filter && !opts.filter(src, dest)) return\n const destParent = path.dirname(dest)\n if (!fs.existsSync(destParent)) mkdirsSync(destParent)\n return getStats(destStat, src, dest, opts)\n}\n\nfunction startCopy (destStat, src, dest, opts) {\n if (opts.filter && !opts.filter(src, dest)) return\n return getStats(destStat, src, dest, opts)\n}\n\nfunction getStats (destStat, src, dest, opts) {\n const statSync = opts.dereference ? fs.statSync : fs.lstatSync\n const srcStat = statSync(src)\n\n if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)\n else if (srcStat.isFile() ||\n srcStat.isCharacterDevice() ||\n srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)\n else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)\n else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)\n else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)\n throw new Error(`Unknown file: ${src}`)\n}\n\nfunction onFile (srcStat, destStat, src, dest, opts) {\n if (!destStat) return copyFile(srcStat, src, dest, opts)\n return mayCopyFile(srcStat, src, dest, opts)\n}\n\nfunction mayCopyFile (srcStat, src, dest, opts) {\n if (opts.overwrite) {\n fs.unlinkSync(dest)\n return copyFile(srcStat, src, dest, opts)\n } else if (opts.errorOnExist) {\n throw new Error(`'${dest}' already exists`)\n }\n}\n\nfunction copyFile (srcStat, src, dest, opts) {\n fs.copyFileSync(src, dest)\n if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)\n return setDestMode(dest, srcStat.mode)\n}\n\nfunction handleTimestamps (srcMode, src, dest) {\n // Make sure the file is writable before setting the timestamp\n // otherwise open fails with EPERM when invoked with 'r+'\n // (through utimes call)\n if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)\n return setDestTimestamps(src, dest)\n}\n\nfunction fileIsNotWritable (srcMode) {\n return (srcMode & 0o200) === 0\n}\n\nfunction makeFileWritable (dest, srcMode) {\n return setDestMode(dest, srcMode | 0o200)\n}\n\nfunction setDestMode (dest, srcMode) {\n return fs.chmodSync(dest, srcMode)\n}\n\nfunction setDestTimestamps (src, dest) {\n // The initial srcStat.atime cannot be trusted\n // because it is modified by the read(2) system call\n // (See https://nodejs.org/api/fs.html#fs_stat_time_values)\n const updatedSrcStat = fs.statSync(src)\n return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)\n}\n\nfunction onDir (srcStat, destStat, src, dest, opts) {\n if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)\n return copyDir(src, dest, opts)\n}\n\nfunction mkDirAndCopy (srcMode, src, dest, opts) {\n fs.mkdirSync(dest)\n copyDir(src, dest, opts)\n return setDestMode(dest, srcMode)\n}\n\nfunction copyDir (src, dest, opts) {\n fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))\n}\n\nfunction copyDirItem (item, src, dest, opts) {\n const srcItem = path.join(src, item)\n const destItem = path.join(dest, item)\n const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)\n return startCopy(destStat, srcItem, destItem, opts)\n}\n\nfunction onLink (destStat, src, dest, opts) {\n let resolvedSrc = fs.readlinkSync(src)\n if (opts.dereference) {\n resolvedSrc = path.resolve(process.cwd(), resolvedSrc)\n }\n\n if (!destStat) {\n return fs.symlinkSync(resolvedSrc, dest)\n } else {\n let resolvedDest\n try {\n resolvedDest = fs.readlinkSync(dest)\n } catch (err) {\n // dest exists and is a regular file or directory,\n // Windows may throw UNKNOWN error. If dest already exists,\n // fs throws error anyway, so no need to guard against it here.\n if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)\n throw err\n }\n if (opts.dereference) {\n resolvedDest = path.resolve(process.cwd(), resolvedDest)\n }\n if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {\n throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)\n }\n\n // prevent copy if src is a subdir of dest since unlinking\n // dest in this case would result in removing src contents\n // and therefore a broken symlink would be created.\n if (fs.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {\n throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)\n }\n return copyLink(resolvedSrc, dest)\n }\n}\n\nfunction copyLink (resolvedSrc, dest) {\n fs.unlinkSync(dest)\n return fs.symlinkSync(resolvedSrc, dest)\n}\n\nmodule.exports = copySync\n","'use strict'\n\nconst u = require('universalify').fromCallback\nmodule.exports = {\n copy: u(require('./copy')),\n copySync: require('./copy-sync')\n}\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst assert = require('assert')\n\nconst isWindows = (process.platform === 'win32')\n\nfunction defaults (options) {\n const methods = [\n 'unlink',\n 'chmod',\n 'stat',\n 'lstat',\n 'rmdir',\n 'readdir'\n ]\n methods.forEach(m => {\n options[m] = options[m] || fs[m]\n m = m + 'Sync'\n options[m] = options[m] || fs[m]\n })\n\n options.maxBusyTries = options.maxBusyTries || 3\n}\n\nfunction rimraf (p, options, cb) {\n let busyTries = 0\n\n if (typeof options === 'function') {\n cb = options\n options = {}\n }\n\n assert(p, 'rimraf: missing path')\n assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')\n assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')\n assert(options, 'rimraf: invalid options argument provided')\n assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')\n\n defaults(options)\n\n rimraf_(p, options, function CB (er) {\n if (er) {\n if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&\n busyTries < options.maxBusyTries) {\n busyTries++\n const time = busyTries * 100\n // try again, with the same exact callback as this one.\n return setTimeout(() => rimraf_(p, options, CB), time)\n }\n\n // already gone\n if (er.code === 'ENOENT') er = null\n }\n\n cb(er)\n })\n}\n\n// Two possible strategies.\n// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR\n// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR\n//\n// Both result in an extra syscall when you guess wrong. However, there\n// are likely far more normal files in the world than directories. This\n// is based on the assumption that a the average number of files per\n// directory is >= 1.\n//\n// If anyone ever complains about this, then I guess the strategy could\n// be made configurable somehow. But until then, YAGNI.\nfunction rimraf_ (p, options, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n // sunos lets the root user unlink directories, which is... weird.\n // so we have to lstat here and make sure it's not a dir.\n options.lstat(p, (er, st) => {\n if (er && er.code === 'ENOENT') {\n return cb(null)\n }\n\n // Windows can EPERM on stat. Life is suffering.\n if (er && er.code === 'EPERM' && isWindows) {\n return fixWinEPERM(p, options, er, cb)\n }\n\n if (st && st.isDirectory()) {\n return rmdir(p, options, er, cb)\n }\n\n options.unlink(p, er => {\n if (er) {\n if (er.code === 'ENOENT') {\n return cb(null)\n }\n if (er.code === 'EPERM') {\n return (isWindows)\n ? fixWinEPERM(p, options, er, cb)\n : rmdir(p, options, er, cb)\n }\n if (er.code === 'EISDIR') {\n return rmdir(p, options, er, cb)\n }\n }\n return cb(er)\n })\n })\n}\n\nfunction fixWinEPERM (p, options, er, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n options.chmod(p, 0o666, er2 => {\n if (er2) {\n cb(er2.code === 'ENOENT' ? null : er)\n } else {\n options.stat(p, (er3, stats) => {\n if (er3) {\n cb(er3.code === 'ENOENT' ? null : er)\n } else if (stats.isDirectory()) {\n rmdir(p, options, er, cb)\n } else {\n options.unlink(p, cb)\n }\n })\n }\n })\n}\n\nfunction fixWinEPERMSync (p, options, er) {\n let stats\n\n assert(p)\n assert(options)\n\n try {\n options.chmodSync(p, 0o666)\n } catch (er2) {\n if (er2.code === 'ENOENT') {\n return\n } else {\n throw er\n }\n }\n\n try {\n stats = options.statSync(p)\n } catch (er3) {\n if (er3.code === 'ENOENT') {\n return\n } else {\n throw er\n }\n }\n\n if (stats.isDirectory()) {\n rmdirSync(p, options, er)\n } else {\n options.unlinkSync(p)\n }\n}\n\nfunction rmdir (p, options, originalEr, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)\n // if we guessed wrong, and it's not a directory, then\n // raise the original error.\n options.rmdir(p, er => {\n if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {\n rmkids(p, options, cb)\n } else if (er && er.code === 'ENOTDIR') {\n cb(originalEr)\n } else {\n cb(er)\n }\n })\n}\n\nfunction rmkids (p, options, cb) {\n assert(p)\n assert(options)\n assert(typeof cb === 'function')\n\n options.readdir(p, (er, files) => {\n if (er) return cb(er)\n\n let n = files.length\n let errState\n\n if (n === 0) return options.rmdir(p, cb)\n\n files.forEach(f => {\n rimraf(path.join(p, f), options, er => {\n if (errState) {\n return\n }\n if (er) return cb(errState = er)\n if (--n === 0) {\n options.rmdir(p, cb)\n }\n })\n })\n })\n}\n\n// this looks simpler, and is strictly *faster*, but will\n// tie up the JavaScript thread and fail on excessively\n// deep directory trees.\nfunction rimrafSync (p, options) {\n let st\n\n options = options || {}\n defaults(options)\n\n assert(p, 'rimraf: missing path')\n assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')\n assert(options, 'rimraf: missing options')\n assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')\n\n try {\n st = options.lstatSync(p)\n } catch (er) {\n if (er.code === 'ENOENT') {\n return\n }\n\n // Windows can EPERM on stat. Life is suffering.\n if (er.code === 'EPERM' && isWindows) {\n fixWinEPERMSync(p, options, er)\n }\n }\n\n try {\n // sunos lets the root user unlink directories, which is... weird.\n if (st && st.isDirectory()) {\n rmdirSync(p, options, null)\n } else {\n options.unlinkSync(p)\n }\n } catch (er) {\n if (er.code === 'ENOENT') {\n return\n } else if (er.code === 'EPERM') {\n return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)\n } else if (er.code !== 'EISDIR') {\n throw er\n }\n rmdirSync(p, options, er)\n }\n}\n\nfunction rmdirSync (p, options, originalEr) {\n assert(p)\n assert(options)\n\n try {\n options.rmdirSync(p)\n } catch (er) {\n if (er.code === 'ENOTDIR') {\n throw originalEr\n } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {\n rmkidsSync(p, options)\n } else if (er.code !== 'ENOENT') {\n throw er\n }\n }\n}\n\nfunction rmkidsSync (p, options) {\n assert(p)\n assert(options)\n options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))\n\n if (isWindows) {\n // We only end up here once we got ENOTEMPTY at least once, and\n // at this point, we are guaranteed to have removed all the kids.\n // So, we know that it won't be ENOENT or ENOTDIR or anything else.\n // try really hard to delete stuff on windows, because it has a\n // PROFOUNDLY annoying habit of not closing handles promptly when\n // files are deleted, resulting in spurious ENOTEMPTY errors.\n const startTime = Date.now()\n do {\n try {\n const ret = options.rmdirSync(p, options)\n return ret\n } catch {}\n } while (Date.now() - startTime < 500) // give up after 500ms\n } else {\n const ret = options.rmdirSync(p, options)\n return ret\n }\n}\n\nmodule.exports = rimraf\nrimraf.sync = rimrafSync\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst u = require('universalify').fromCallback\nconst rimraf = require('./rimraf')\n\nfunction remove (path, callback) {\n // Node 14.14.0+\n if (fs.rm) return fs.rm(path, { recursive: true, force: true }, callback)\n rimraf(path, callback)\n}\n\nfunction removeSync (path) {\n // Node 14.14.0+\n if (fs.rmSync) return fs.rmSync(path, { recursive: true, force: true })\n rimraf.sync(path)\n}\n\nmodule.exports = {\n remove: u(remove),\n removeSync\n}\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst fs = require('../fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst remove = require('../remove')\n\nconst emptyDir = u(async function emptyDir (dir) {\n let items\n try {\n items = await fs.readdir(dir)\n } catch {\n return mkdir.mkdirs(dir)\n }\n\n return Promise.all(items.map(item => remove.remove(path.join(dir, item))))\n})\n\nfunction emptyDirSync (dir) {\n let items\n try {\n items = fs.readdirSync(dir)\n } catch {\n return mkdir.mkdirsSync(dir)\n }\n\n items.forEach(item => {\n item = path.join(dir, item)\n remove.removeSync(item)\n })\n}\n\nmodule.exports = {\n emptyDirSync,\n emptydirSync: emptyDirSync,\n emptyDir,\n emptydir: emptyDir\n}\n","'use strict'\n\nconst u = require('universalify').fromCallback\nconst path = require('path')\nconst fs = require('graceful-fs')\nconst mkdir = require('../mkdirs')\n\nfunction createFile (file, callback) {\n function makeFile () {\n fs.writeFile(file, '', err => {\n if (err) return callback(err)\n callback()\n })\n }\n\n fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err\n if (!err && stats.isFile()) return callback()\n const dir = path.dirname(file)\n fs.stat(dir, (err, stats) => {\n if (err) {\n // if the directory doesn't exist, make it\n if (err.code === 'ENOENT') {\n return mkdir.mkdirs(dir, err => {\n if (err) return callback(err)\n makeFile()\n })\n }\n return callback(err)\n }\n\n if (stats.isDirectory()) makeFile()\n else {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n fs.readdir(dir, err => {\n if (err) return callback(err)\n })\n }\n })\n })\n}\n\nfunction createFileSync (file) {\n let stats\n try {\n stats = fs.statSync(file)\n } catch {}\n if (stats && stats.isFile()) return\n\n const dir = path.dirname(file)\n try {\n if (!fs.statSync(dir).isDirectory()) {\n // parent is not a directory\n // This is just to cause an internal ENOTDIR error to be thrown\n fs.readdirSync(dir)\n }\n } catch (err) {\n // If the stat call above failed because the directory doesn't exist, create it\n if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)\n else throw err\n }\n\n fs.writeFileSync(file, '')\n}\n\nmodule.exports = {\n createFile: u(createFile),\n createFileSync\n}\n","'use strict'\n\nconst u = require('universalify').fromCallback\nconst path = require('path')\nconst fs = require('graceful-fs')\nconst mkdir = require('../mkdirs')\nconst pathExists = require('../path-exists').pathExists\nconst { areIdentical } = require('../util/stat')\n\nfunction createLink (srcpath, dstpath, callback) {\n function makeLink (srcpath, dstpath) {\n fs.link(srcpath, dstpath, err => {\n if (err) return callback(err)\n callback(null)\n })\n }\n\n fs.lstat(dstpath, (_, dstStat) => {\n fs.lstat(srcpath, (err, srcStat) => {\n if (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n return callback(err)\n }\n if (dstStat && areIdentical(srcStat, dstStat)) return callback(null)\n\n const dir = path.dirname(dstpath)\n pathExists(dir, (err, dirExists) => {\n if (err) return callback(err)\n if (dirExists) return makeLink(srcpath, dstpath)\n mkdir.mkdirs(dir, err => {\n if (err) return callback(err)\n makeLink(srcpath, dstpath)\n })\n })\n })\n })\n}\n\nfunction createLinkSync (srcpath, dstpath) {\n let dstStat\n try {\n dstStat = fs.lstatSync(dstpath)\n } catch {}\n\n try {\n const srcStat = fs.lstatSync(srcpath)\n if (dstStat && areIdentical(srcStat, dstStat)) return\n } catch (err) {\n err.message = err.message.replace('lstat', 'ensureLink')\n throw err\n }\n\n const dir = path.dirname(dstpath)\n const dirExists = fs.existsSync(dir)\n if (dirExists) return fs.linkSync(srcpath, dstpath)\n mkdir.mkdirsSync(dir)\n\n return fs.linkSync(srcpath, dstpath)\n}\n\nmodule.exports = {\n createLink: u(createLink),\n createLinkSync\n}\n","'use strict'\n\nconst path = require('path')\nconst fs = require('graceful-fs')\nconst pathExists = require('../path-exists').pathExists\n\n/**\n * Function that returns two types of paths, one relative to symlink, and one\n * relative to the current working directory. Checks if path is absolute or\n * relative. If the path is relative, this function checks if the path is\n * relative to symlink or relative to current working directory. This is an\n * initiative to find a smarter `srcpath` to supply when building symlinks.\n * This allows you to determine which path to use out of one of three possible\n * types of source paths. The first is an absolute path. This is detected by\n * `path.isAbsolute()`. When an absolute path is provided, it is checked to\n * see if it exists. If it does it's used, if not an error is returned\n * (callback)/ thrown (sync). The other two options for `srcpath` are a\n * relative url. By default Node's `fs.symlink` works by creating a symlink\n * using `dstpath` and expects the `srcpath` to be relative to the newly\n * created symlink. If you provide a `srcpath` that does not exist on the file\n * system it results in a broken symlink. To minimize this, the function\n * checks to see if the 'relative to symlink' source file exists, and if it\n * does it will use it. If it does not, it checks if there's a file that\n * exists that is relative to the current working directory, if does its used.\n * This preserves the expectations of the original fs.symlink spec and adds\n * the ability to pass in `relative to current working direcotry` paths.\n */\n\nfunction symlinkPaths (srcpath, dstpath, callback) {\n if (path.isAbsolute(srcpath)) {\n return fs.lstat(srcpath, (err) => {\n if (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n return callback(err)\n }\n return callback(null, {\n toCwd: srcpath,\n toDst: srcpath\n })\n })\n } else {\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n return pathExists(relativeToDst, (err, exists) => {\n if (err) return callback(err)\n if (exists) {\n return callback(null, {\n toCwd: relativeToDst,\n toDst: srcpath\n })\n } else {\n return fs.lstat(srcpath, (err) => {\n if (err) {\n err.message = err.message.replace('lstat', 'ensureSymlink')\n return callback(err)\n }\n return callback(null, {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n })\n })\n }\n })\n }\n}\n\nfunction symlinkPathsSync (srcpath, dstpath) {\n let exists\n if (path.isAbsolute(srcpath)) {\n exists = fs.existsSync(srcpath)\n if (!exists) throw new Error('absolute srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: srcpath\n }\n } else {\n const dstdir = path.dirname(dstpath)\n const relativeToDst = path.join(dstdir, srcpath)\n exists = fs.existsSync(relativeToDst)\n if (exists) {\n return {\n toCwd: relativeToDst,\n toDst: srcpath\n }\n } else {\n exists = fs.existsSync(srcpath)\n if (!exists) throw new Error('relative srcpath does not exist')\n return {\n toCwd: srcpath,\n toDst: path.relative(dstdir, srcpath)\n }\n }\n }\n}\n\nmodule.exports = {\n symlinkPaths,\n symlinkPathsSync\n}\n","'use strict'\n\nconst fs = require('graceful-fs')\n\nfunction symlinkType (srcpath, type, callback) {\n callback = (typeof type === 'function') ? type : callback\n type = (typeof type === 'function') ? false : type\n if (type) return callback(null, type)\n fs.lstat(srcpath, (err, stats) => {\n if (err) return callback(null, 'file')\n type = (stats && stats.isDirectory()) ? 'dir' : 'file'\n callback(null, type)\n })\n}\n\nfunction symlinkTypeSync (srcpath, type) {\n let stats\n\n if (type) return type\n try {\n stats = fs.lstatSync(srcpath)\n } catch {\n return 'file'\n }\n return (stats && stats.isDirectory()) ? 'dir' : 'file'\n}\n\nmodule.exports = {\n symlinkType,\n symlinkTypeSync\n}\n","'use strict'\n\nconst u = require('universalify').fromCallback\nconst path = require('path')\nconst fs = require('../fs')\nconst _mkdirs = require('../mkdirs')\nconst mkdirs = _mkdirs.mkdirs\nconst mkdirsSync = _mkdirs.mkdirsSync\n\nconst _symlinkPaths = require('./symlink-paths')\nconst symlinkPaths = _symlinkPaths.symlinkPaths\nconst symlinkPathsSync = _symlinkPaths.symlinkPathsSync\n\nconst _symlinkType = require('./symlink-type')\nconst symlinkType = _symlinkType.symlinkType\nconst symlinkTypeSync = _symlinkType.symlinkTypeSync\n\nconst pathExists = require('../path-exists').pathExists\n\nconst { areIdentical } = require('../util/stat')\n\nfunction createSymlink (srcpath, dstpath, type, callback) {\n callback = (typeof type === 'function') ? type : callback\n type = (typeof type === 'function') ? false : type\n\n fs.lstat(dstpath, (err, stats) => {\n if (!err && stats.isSymbolicLink()) {\n Promise.all([\n fs.stat(srcpath),\n fs.stat(dstpath)\n ]).then(([srcStat, dstStat]) => {\n if (areIdentical(srcStat, dstStat)) return callback(null)\n _createSymlink(srcpath, dstpath, type, callback)\n })\n } else _createSymlink(srcpath, dstpath, type, callback)\n })\n}\n\nfunction _createSymlink (srcpath, dstpath, type, callback) {\n symlinkPaths(srcpath, dstpath, (err, relative) => {\n if (err) return callback(err)\n srcpath = relative.toDst\n symlinkType(relative.toCwd, type, (err, type) => {\n if (err) return callback(err)\n const dir = path.dirname(dstpath)\n pathExists(dir, (err, dirExists) => {\n if (err) return callback(err)\n if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)\n mkdirs(dir, err => {\n if (err) return callback(err)\n fs.symlink(srcpath, dstpath, type, callback)\n })\n })\n })\n })\n}\n\nfunction createSymlinkSync (srcpath, dstpath, type) {\n let stats\n try {\n stats = fs.lstatSync(dstpath)\n } catch {}\n if (stats && stats.isSymbolicLink()) {\n const srcStat = fs.statSync(srcpath)\n const dstStat = fs.statSync(dstpath)\n if (areIdentical(srcStat, dstStat)) return\n }\n\n const relative = symlinkPathsSync(srcpath, dstpath)\n srcpath = relative.toDst\n type = symlinkTypeSync(relative.toCwd, type)\n const dir = path.dirname(dstpath)\n const exists = fs.existsSync(dir)\n if (exists) return fs.symlinkSync(srcpath, dstpath, type)\n mkdirsSync(dir)\n return fs.symlinkSync(srcpath, dstpath, type)\n}\n\nmodule.exports = {\n createSymlink: u(createSymlink),\n createSymlinkSync\n}\n","'use strict'\n\nconst { createFile, createFileSync } = require('./file')\nconst { createLink, createLinkSync } = require('./link')\nconst { createSymlink, createSymlinkSync } = require('./symlink')\n\nmodule.exports = {\n // file\n createFile,\n createFileSync,\n ensureFile: createFile,\n ensureFileSync: createFileSync,\n // link\n createLink,\n createLinkSync,\n ensureLink: createLink,\n ensureLinkSync: createLinkSync,\n // symlink\n createSymlink,\n createSymlinkSync,\n ensureSymlink: createSymlink,\n ensureSymlinkSync: createSymlinkSync\n}\n","function stringify (obj, { EOL = '\\n', finalEOL = true, replacer = null, spaces } = {}) {\n const EOF = finalEOL ? EOL : ''\n const str = JSON.stringify(obj, replacer, spaces)\n\n if (str === undefined) {\n throw new TypeError(`Converting ${typeof obj} value to JSON is not supported`)\n }\n\n return str.replace(/\\n/g, EOL) + EOF\n}\n\nfunction stripBom (content) {\n // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified\n if (Buffer.isBuffer(content)) content = content.toString('utf8')\n return content.replace(/^\\uFEFF/, '')\n}\n\nmodule.exports = { stringify, stripBom }\n","let _fs\ntry {\n _fs = require('graceful-fs')\n} catch (_) {\n _fs = require('fs')\n}\nconst universalify = require('universalify')\nconst { stringify, stripBom } = require('./utils')\n\nasync function _readFile (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n let data = await universalify.fromCallback(fs.readFile)(file, options)\n\n data = stripBom(data)\n\n let obj\n try {\n obj = JSON.parse(data, options ? options.reviver : null)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n\n return obj\n}\n\nconst readFile = universalify.fromPromise(_readFile)\n\nfunction readFileSync (file, options = {}) {\n if (typeof options === 'string') {\n options = { encoding: options }\n }\n\n const fs = options.fs || _fs\n\n const shouldThrow = 'throws' in options ? options.throws : true\n\n try {\n let content = fs.readFileSync(file, options)\n content = stripBom(content)\n return JSON.parse(content, options.reviver)\n } catch (err) {\n if (shouldThrow) {\n err.message = `${file}: ${err.message}`\n throw err\n } else {\n return null\n }\n }\n}\n\nasync function _writeFile (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n\n await universalify.fromCallback(fs.writeFile)(file, str, options)\n}\n\nconst writeFile = universalify.fromPromise(_writeFile)\n\nfunction writeFileSync (file, obj, options = {}) {\n const fs = options.fs || _fs\n\n const str = stringify(obj, options)\n // not sure if fs.writeFileSync returns anything, but just in case\n return fs.writeFileSync(file, str, options)\n}\n\n// NOTE: do not change this export format; required for ESM compat\n// see https://github.com/jprichardson/node-jsonfile/pull/162 for details\nmodule.exports = {\n readFile,\n readFileSync,\n writeFile,\n writeFileSync\n}\n","'use strict'\n\nconst jsonFile = require('jsonfile')\n\nmodule.exports = {\n // jsonfile exports\n readJson: jsonFile.readFile,\n readJsonSync: jsonFile.readFileSync,\n writeJson: jsonFile.writeFile,\n writeJsonSync: jsonFile.writeFileSync\n}\n","'use strict'\n\nconst u = require('universalify').fromCallback\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst mkdir = require('../mkdirs')\nconst pathExists = require('../path-exists').pathExists\n\nfunction outputFile (file, data, encoding, callback) {\n if (typeof encoding === 'function') {\n callback = encoding\n encoding = 'utf8'\n }\n\n const dir = path.dirname(file)\n pathExists(dir, (err, itDoes) => {\n if (err) return callback(err)\n if (itDoes) return fs.writeFile(file, data, encoding, callback)\n\n mkdir.mkdirs(dir, err => {\n if (err) return callback(err)\n\n fs.writeFile(file, data, encoding, callback)\n })\n })\n}\n\nfunction outputFileSync (file, ...args) {\n const dir = path.dirname(file)\n if (fs.existsSync(dir)) {\n return fs.writeFileSync(file, ...args)\n }\n mkdir.mkdirsSync(dir)\n fs.writeFileSync(file, ...args)\n}\n\nmodule.exports = {\n outputFile: u(outputFile),\n outputFileSync\n}\n","'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFile } = require('../output-file')\n\nasync function outputJson (file, data, options = {}) {\n const str = stringify(data, options)\n\n await outputFile(file, str, options)\n}\n\nmodule.exports = outputJson\n","'use strict'\n\nconst { stringify } = require('jsonfile/utils')\nconst { outputFileSync } = require('../output-file')\n\nfunction outputJsonSync (file, data, options) {\n const str = stringify(data, options)\n\n outputFileSync(file, str, options)\n}\n\nmodule.exports = outputJsonSync\n","'use strict'\n\nconst u = require('universalify').fromPromise\nconst jsonFile = require('./jsonfile')\n\njsonFile.outputJson = u(require('./output-json'))\njsonFile.outputJsonSync = require('./output-json-sync')\n// aliases\njsonFile.outputJSON = jsonFile.outputJson\njsonFile.outputJSONSync = jsonFile.outputJsonSync\njsonFile.writeJSON = jsonFile.writeJson\njsonFile.writeJSONSync = jsonFile.writeJsonSync\njsonFile.readJSON = jsonFile.readJson\njsonFile.readJSONSync = jsonFile.readJsonSync\n\nmodule.exports = jsonFile\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst copy = require('../copy').copy\nconst remove = require('../remove').remove\nconst mkdirp = require('../mkdirs').mkdirp\nconst pathExists = require('../path-exists').pathExists\nconst stat = require('../util/stat')\n\nfunction move (src, dest, opts, cb) {\n if (typeof opts === 'function') {\n cb = opts\n opts = {}\n }\n\n opts = opts || {}\n\n const overwrite = opts.overwrite || opts.clobber || false\n\n stat.checkPaths(src, dest, 'move', opts, (err, stats) => {\n if (err) return cb(err)\n const { srcStat, isChangingCase = false } = stats\n stat.checkParentPaths(src, srcStat, dest, 'move', err => {\n if (err) return cb(err)\n if (isParentRoot(dest)) return doRename(src, dest, overwrite, isChangingCase, cb)\n mkdirp(path.dirname(dest), err => {\n if (err) return cb(err)\n return doRename(src, dest, overwrite, isChangingCase, cb)\n })\n })\n })\n}\n\nfunction isParentRoot (dest) {\n const parent = path.dirname(dest)\n const parsedPath = path.parse(parent)\n return parsedPath.root === parent\n}\n\nfunction doRename (src, dest, overwrite, isChangingCase, cb) {\n if (isChangingCase) return rename(src, dest, overwrite, cb)\n if (overwrite) {\n return remove(dest, err => {\n if (err) return cb(err)\n return rename(src, dest, overwrite, cb)\n })\n }\n pathExists(dest, (err, destExists) => {\n if (err) return cb(err)\n if (destExists) return cb(new Error('dest already exists.'))\n return rename(src, dest, overwrite, cb)\n })\n}\n\nfunction rename (src, dest, overwrite, cb) {\n fs.rename(src, dest, err => {\n if (!err) return cb()\n if (err.code !== 'EXDEV') return cb(err)\n return moveAcrossDevice(src, dest, overwrite, cb)\n })\n}\n\nfunction moveAcrossDevice (src, dest, overwrite, cb) {\n const opts = {\n overwrite,\n errorOnExist: true\n }\n copy(src, dest, opts, err => {\n if (err) return cb(err)\n return remove(src, cb)\n })\n}\n\nmodule.exports = move\n","'use strict'\n\nconst fs = require('graceful-fs')\nconst path = require('path')\nconst copySync = require('../copy').copySync\nconst removeSync = require('../remove').removeSync\nconst mkdirpSync = require('../mkdirs').mkdirpSync\nconst stat = require('../util/stat')\n\nfunction moveSync (src, dest, opts) {\n opts = opts || {}\n const overwrite = opts.overwrite || opts.clobber || false\n\n const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)\n stat.checkParentPathsSync(src, srcStat, dest, 'move')\n if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))\n return doRename(src, dest, overwrite, isChangingCase)\n}\n\nfunction isParentRoot (dest) {\n const parent = path.dirname(dest)\n const parsedPath = path.parse(parent)\n return parsedPath.root === parent\n}\n\nfunction doRename (src, dest, overwrite, isChangingCase) {\n if (isChangingCase) return rename(src, dest, overwrite)\n if (overwrite) {\n removeSync(dest)\n return rename(src, dest, overwrite)\n }\n if (fs.existsSync(dest)) throw new Error('dest already exists.')\n return rename(src, dest, overwrite)\n}\n\nfunction rename (src, dest, overwrite) {\n try {\n fs.renameSync(src, dest)\n } catch (err) {\n if (err.code !== 'EXDEV') throw err\n return moveAcrossDevice(src, dest, overwrite)\n }\n}\n\nfunction moveAcrossDevice (src, dest, overwrite) {\n const opts = {\n overwrite,\n errorOnExist: true\n }\n copySync(src, dest, opts)\n return removeSync(src)\n}\n\nmodule.exports = moveSync\n","'use strict'\n\nconst u = require('universalify').fromCallback\nmodule.exports = {\n move: u(require('./move')),\n moveSync: require('./move-sync')\n}\n","'use strict'\n\nmodule.exports = {\n // Export promiseified graceful-fs:\n ...require('./fs'),\n // Export extra methods:\n ...require('./copy'),\n ...require('./empty'),\n ...require('./ensure'),\n ...require('./json'),\n ...require('./mkdirs'),\n ...require('./move'),\n ...require('./output-file'),\n ...require('./path-exists'),\n ...require('./remove')\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CancellationError = exports.CancellationToken = void 0;\nconst events_1 = require(\"events\");\nclass CancellationToken extends events_1.EventEmitter {\n get cancelled() {\n return this._cancelled || (this._parent != null && this._parent.cancelled);\n }\n set parent(value) {\n this.removeParentCancelHandler();\n this._parent = value;\n this.parentCancelHandler = () => this.cancel();\n this._parent.onCancel(this.parentCancelHandler);\n }\n // babel cannot compile ... correctly for super calls\n constructor(parent) {\n super();\n this.parentCancelHandler = null;\n this._parent = null;\n this._cancelled = false;\n if (parent != null) {\n this.parent = parent;\n }\n }\n cancel() {\n this._cancelled = true;\n this.emit(\"cancel\");\n }\n onCancel(handler) {\n if (this.cancelled) {\n handler();\n }\n else {\n this.once(\"cancel\", handler);\n }\n }\n createPromise(callback) {\n if (this.cancelled) {\n return Promise.reject(new CancellationError());\n }\n const finallyHandler = () => {\n if (cancelHandler != null) {\n try {\n this.removeListener(\"cancel\", cancelHandler);\n cancelHandler = null;\n }\n catch (_ignore) {\n // ignore\n }\n }\n };\n let cancelHandler = null;\n return new Promise((resolve, reject) => {\n let addedCancelHandler = null;\n cancelHandler = () => {\n try {\n if (addedCancelHandler != null) {\n addedCancelHandler();\n addedCancelHandler = null;\n }\n }\n finally {\n reject(new CancellationError());\n }\n };\n if (this.cancelled) {\n cancelHandler();\n return;\n }\n this.onCancel(cancelHandler);\n callback(resolve, reject, (callback) => {\n addedCancelHandler = callback;\n });\n })\n .then(it => {\n finallyHandler();\n return it;\n })\n .catch((e) => {\n finallyHandler();\n throw e;\n });\n }\n removeParentCancelHandler() {\n const parent = this._parent;\n if (parent != null && this.parentCancelHandler != null) {\n parent.removeListener(\"cancel\", this.parentCancelHandler);\n this.parentCancelHandler = null;\n }\n }\n dispose() {\n try {\n this.removeParentCancelHandler();\n }\n finally {\n this.removeAllListeners();\n this._parent = null;\n }\n }\n}\nexports.CancellationToken = CancellationToken;\nclass CancellationError extends Error {\n constructor() {\n super(\"cancelled\");\n }\n}\nexports.CancellationError = CancellationError;\n//# sourceMappingURL=CancellationToken.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.newError = newError;\nfunction newError(message, code) {\n const error = new Error(message);\n error.code = code;\n return error;\n}\n//# sourceMappingURL=error.js.map","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n * - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function (val, options) {\n options = options || {};\n var type = typeof val;\n if (type === 'string' && val.length > 0) {\n return parse(val);\n } else if (type === 'number' && isFinite(val)) {\n return options.long ? fmtLong(val) : fmtShort(val);\n }\n throw new Error(\n 'val is not a non-empty string or a valid number. val=' +\n JSON.stringify(val)\n );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n str = String(str);\n if (str.length > 100) {\n return;\n }\n var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n str\n );\n if (!match) {\n return;\n }\n var n = parseFloat(match[1]);\n var type = (match[2] || 'ms').toLowerCase();\n switch (type) {\n case 'years':\n case 'year':\n case 'yrs':\n case 'yr':\n case 'y':\n return n * y;\n case 'weeks':\n case 'week':\n case 'w':\n return n * w;\n case 'days':\n case 'day':\n case 'd':\n return n * d;\n case 'hours':\n case 'hour':\n case 'hrs':\n case 'hr':\n case 'h':\n return n * h;\n case 'minutes':\n case 'minute':\n case 'mins':\n case 'min':\n case 'm':\n return n * m;\n case 'seconds':\n case 'second':\n case 'secs':\n case 'sec':\n case 's':\n return n * s;\n case 'milliseconds':\n case 'millisecond':\n case 'msecs':\n case 'msec':\n case 'ms':\n return n;\n default:\n return undefined;\n }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return Math.round(ms / d) + 'd';\n }\n if (msAbs >= h) {\n return Math.round(ms / h) + 'h';\n }\n if (msAbs >= m) {\n return Math.round(ms / m) + 'm';\n }\n if (msAbs >= s) {\n return Math.round(ms / s) + 's';\n }\n return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n var msAbs = Math.abs(ms);\n if (msAbs >= d) {\n return plural(ms, msAbs, d, 'day');\n }\n if (msAbs >= h) {\n return plural(ms, msAbs, h, 'hour');\n }\n if (msAbs >= m) {\n return plural(ms, msAbs, m, 'minute');\n }\n if (msAbs >= s) {\n return plural(ms, msAbs, s, 'second');\n }\n return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n var isPlural = msAbs >= n * 1.5;\n return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '')\n\t\t\t.trim()\n\t\t\t.replace(/\\s+/g, ',')\n\t\t\t.split(',')\n\t\t\t.filter(Boolean);\n\n\t\tfor (const ns of split) {\n\t\t\tif (ns[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(ns.slice(1));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(ns);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Checks if the given string matches a namespace template, honoring\n\t * asterisks as wildcards.\n\t *\n\t * @param {String} search\n\t * @param {String} template\n\t * @return {Boolean}\n\t */\n\tfunction matchesTemplate(search, template) {\n\t\tlet searchIndex = 0;\n\t\tlet templateIndex = 0;\n\t\tlet starIndex = -1;\n\t\tlet matchIndex = 0;\n\n\t\twhile (searchIndex < search.length) {\n\t\t\tif (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === '*')) {\n\t\t\t\t// Match character or proceed with wildcard\n\t\t\t\tif (template[templateIndex] === '*') {\n\t\t\t\t\tstarIndex = templateIndex;\n\t\t\t\t\tmatchIndex = searchIndex;\n\t\t\t\t\ttemplateIndex++; // Skip the '*'\n\t\t\t\t} else {\n\t\t\t\t\tsearchIndex++;\n\t\t\t\t\ttemplateIndex++;\n\t\t\t\t}\n\t\t\t} else if (starIndex !== -1) { // eslint-disable-line no-negated-condition\n\t\t\t\t// Backtrack to the last '*' and try to match more characters\n\t\t\t\ttemplateIndex = starIndex + 1;\n\t\t\t\tmatchIndex++;\n\t\t\t\tsearchIndex = matchIndex;\n\t\t\t} else {\n\t\t\t\treturn false; // No match\n\t\t\t}\n\t\t}\n\n\t\t// Handle trailing '*' in template\n\t\twhile (templateIndex < template.length && template[templateIndex] === '*') {\n\t\t\ttemplateIndex++;\n\t\t}\n\n\t\treturn templateIndex === template.length;\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names,\n\t\t\t...createDebug.skips.map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tfor (const skip of createDebug.skips) {\n\t\t\tif (matchesTemplate(name, skip)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (const ns of createDebug.names) {\n\t\t\tif (matchesTemplate(name, ns)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\tlet m;\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\t// eslint-disable-next-line no-return-assign\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)) && parseInt(m[1], 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug') || exports.storage.getItem('DEBUG') ;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = ` ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.formatWithOptions()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.formatWithOptions(exports.inspectOpts, ...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProgressCallbackTransform = void 0;\nconst stream_1 = require(\"stream\");\nclass ProgressCallbackTransform extends stream_1.Transform {\n constructor(total, cancellationToken, onProgress) {\n super();\n this.total = total;\n this.cancellationToken = cancellationToken;\n this.onProgress = onProgress;\n this.start = Date.now();\n this.transferred = 0;\n this.delta = 0;\n this.nextUpdate = this.start + 1000;\n }\n _transform(chunk, encoding, callback) {\n if (this.cancellationToken.cancelled) {\n callback(new Error(\"cancelled\"), null);\n return;\n }\n this.transferred += chunk.length;\n this.delta += chunk.length;\n const now = Date.now();\n if (now >= this.nextUpdate && this.transferred !== this.total /* will be emitted on _flush */) {\n this.nextUpdate = now + 1000;\n this.onProgress({\n total: this.total,\n delta: this.delta,\n transferred: this.transferred,\n percent: (this.transferred / this.total) * 100,\n bytesPerSecond: Math.round(this.transferred / ((now - this.start) / 1000)),\n });\n this.delta = 0;\n }\n callback(null, chunk);\n }\n _flush(callback) {\n if (this.cancellationToken.cancelled) {\n callback(new Error(\"cancelled\"));\n return;\n }\n this.onProgress({\n total: this.total,\n delta: this.delta,\n transferred: this.total,\n percent: 100,\n bytesPerSecond: Math.round(this.transferred / ((Date.now() - this.start) / 1000)),\n });\n this.delta = 0;\n callback(null);\n }\n}\nexports.ProgressCallbackTransform = ProgressCallbackTransform;\n//# sourceMappingURL=ProgressCallbackTransform.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DigestTransform = exports.HttpExecutor = exports.HttpError = void 0;\nexports.createHttpError = createHttpError;\nexports.parseJson = parseJson;\nexports.configureRequestOptionsFromUrl = configureRequestOptionsFromUrl;\nexports.configureRequestUrl = configureRequestUrl;\nexports.safeGetHeader = safeGetHeader;\nexports.configureRequestOptions = configureRequestOptions;\nexports.safeStringifyJson = safeStringifyJson;\nconst crypto_1 = require(\"crypto\");\nconst debug_1 = require(\"debug\");\nconst fs_1 = require(\"fs\");\nconst stream_1 = require(\"stream\");\nconst url_1 = require(\"url\");\nconst CancellationToken_1 = require(\"./CancellationToken\");\nconst error_1 = require(\"./error\");\nconst ProgressCallbackTransform_1 = require(\"./ProgressCallbackTransform\");\nconst debug = (0, debug_1.default)(\"electron-builder\");\nfunction createHttpError(response, description = null) {\n return new HttpError(response.statusCode || -1, `${response.statusCode} ${response.statusMessage}` +\n (description == null ? \"\" : \"\\n\" + JSON.stringify(description, null, \" \")) +\n \"\\nHeaders: \" +\n safeStringifyJson(response.headers), description);\n}\nconst HTTP_STATUS_CODES = new Map([\n [429, \"Too many requests\"],\n [400, \"Bad request\"],\n [403, \"Forbidden\"],\n [404, \"Not found\"],\n [405, \"Method not allowed\"],\n [406, \"Not acceptable\"],\n [408, \"Request timeout\"],\n [413, \"Request entity too large\"],\n [500, \"Internal server error\"],\n [502, \"Bad gateway\"],\n [503, \"Service unavailable\"],\n [504, \"Gateway timeout\"],\n [505, \"HTTP version not supported\"],\n]);\nclass HttpError extends Error {\n constructor(statusCode, message = `HTTP error: ${HTTP_STATUS_CODES.get(statusCode) || statusCode}`, description = null) {\n super(message);\n this.statusCode = statusCode;\n this.description = description;\n this.name = \"HttpError\";\n this.code = `HTTP_ERROR_${statusCode}`;\n }\n isServerError() {\n return this.statusCode >= 500 && this.statusCode <= 599;\n }\n}\nexports.HttpError = HttpError;\nfunction parseJson(result) {\n return result.then(it => (it == null || it.length === 0 ? null : JSON.parse(it)));\n}\nclass HttpExecutor {\n constructor() {\n this.maxRedirects = 10;\n }\n request(options, cancellationToken = new CancellationToken_1.CancellationToken(), data) {\n configureRequestOptions(options);\n const json = data == null ? undefined : JSON.stringify(data);\n const encodedData = json ? Buffer.from(json) : undefined;\n if (encodedData != null) {\n debug(json);\n const { headers, ...opts } = options;\n options = {\n method: \"post\",\n headers: {\n \"Content-Type\": \"application/json\",\n \"Content-Length\": encodedData.length,\n ...headers,\n },\n ...opts,\n };\n }\n return this.doApiRequest(options, cancellationToken, it => it.end(encodedData));\n }\n doApiRequest(options, cancellationToken, requestProcessor, redirectCount = 0) {\n if (debug.enabled) {\n debug(`Request: ${safeStringifyJson(options)}`);\n }\n return cancellationToken.createPromise((resolve, reject, onCancel) => {\n const request = this.createRequest(options, (response) => {\n try {\n this.handleResponse(response, options, cancellationToken, resolve, reject, redirectCount, requestProcessor);\n }\n catch (e) {\n reject(e);\n }\n });\n this.addErrorAndTimeoutHandlers(request, reject, options.timeout);\n this.addRedirectHandlers(request, options, reject, redirectCount, options => {\n this.doApiRequest(options, cancellationToken, requestProcessor, redirectCount).then(resolve).catch(reject);\n });\n requestProcessor(request, reject);\n onCancel(() => request.abort());\n });\n }\n // noinspection JSUnusedLocalSymbols\n // eslint-disable-next-line\n addRedirectHandlers(request, options, reject, redirectCount, handler) {\n // not required for NodeJS\n }\n addErrorAndTimeoutHandlers(request, reject, timeout = 60 * 1000) {\n this.addTimeOutHandler(request, reject, timeout);\n request.on(\"error\", reject);\n request.on(\"aborted\", () => {\n reject(new Error(\"Request has been aborted by the server\"));\n });\n }\n handleResponse(response, options, cancellationToken, resolve, reject, redirectCount, requestProcessor) {\n var _a;\n if (debug.enabled) {\n debug(`Response: ${response.statusCode} ${response.statusMessage}, request options: ${safeStringifyJson(options)}`);\n }\n // we handle any other >= 400 error on request end (read detailed message in the response body)\n if (response.statusCode === 404) {\n // error is clear, we don't need to read detailed error description\n reject(createHttpError(response, `method: ${options.method || \"GET\"} url: ${options.protocol || \"https:\"}//${options.hostname}${options.port ? `:${options.port}` : \"\"}${options.path}\n\nPlease double check that your authentication token is correct. Due to security reasons, actual status maybe not reported, but 404.\n`));\n return;\n }\n else if (response.statusCode === 204) {\n // on DELETE request\n resolve();\n return;\n }\n const code = (_a = response.statusCode) !== null && _a !== void 0 ? _a : 0;\n const shouldRedirect = code >= 300 && code < 400;\n const redirectUrl = safeGetHeader(response, \"location\");\n if (shouldRedirect && redirectUrl != null) {\n if (redirectCount > this.maxRedirects) {\n reject(this.createMaxRedirectError());\n return;\n }\n this.doApiRequest(HttpExecutor.prepareRedirectUrlOptions(redirectUrl, options), cancellationToken, requestProcessor, redirectCount).then(resolve).catch(reject);\n return;\n }\n response.setEncoding(\"utf8\");\n let data = \"\";\n response.on(\"error\", reject);\n response.on(\"data\", (chunk) => (data += chunk));\n response.on(\"end\", () => {\n try {\n if (response.statusCode != null && response.statusCode >= 400) {\n const contentType = safeGetHeader(response, \"content-type\");\n const isJson = contentType != null && (Array.isArray(contentType) ? contentType.find(it => it.includes(\"json\")) != null : contentType.includes(\"json\"));\n reject(createHttpError(response, `method: ${options.method || \"GET\"} url: ${options.protocol || \"https:\"}//${options.hostname}${options.port ? `:${options.port}` : \"\"}${options.path}\n\n Data:\n ${isJson ? JSON.stringify(JSON.parse(data)) : data}\n `));\n }\n else {\n resolve(data.length === 0 ? null : data);\n }\n }\n catch (e) {\n reject(e);\n }\n });\n }\n async downloadToBuffer(url, options) {\n return await options.cancellationToken.createPromise((resolve, reject, onCancel) => {\n const responseChunks = [];\n const requestOptions = {\n headers: options.headers || undefined,\n // because PrivateGitHubProvider requires HttpExecutor.prepareRedirectUrlOptions logic, so, we need to redirect manually\n redirect: \"manual\",\n };\n configureRequestUrl(url, requestOptions);\n configureRequestOptions(requestOptions);\n this.doDownload(requestOptions, {\n destination: null,\n options,\n onCancel,\n callback: error => {\n if (error == null) {\n resolve(Buffer.concat(responseChunks));\n }\n else {\n reject(error);\n }\n },\n responseHandler: (response, callback) => {\n let receivedLength = 0;\n response.on(\"data\", (chunk) => {\n receivedLength += chunk.length;\n if (receivedLength > 524288000) {\n callback(new Error(\"Maximum allowed size is 500 MB\"));\n return;\n }\n responseChunks.push(chunk);\n });\n response.on(\"end\", () => {\n callback(null);\n });\n },\n }, 0);\n });\n }\n doDownload(requestOptions, options, redirectCount) {\n const request = this.createRequest(requestOptions, (response) => {\n if (response.statusCode >= 400) {\n options.callback(new Error(`Cannot download \"${requestOptions.protocol || \"https:\"}//${requestOptions.hostname}${requestOptions.path}\", status ${response.statusCode}: ${response.statusMessage}`));\n return;\n }\n // It is possible for the response stream to fail, e.g. when a network is lost while\n // response stream is in progress. Stop waiting and reject so consumer can catch the error.\n response.on(\"error\", options.callback);\n // this code not relevant for Electron (redirect event instead handled)\n const redirectUrl = safeGetHeader(response, \"location\");\n if (redirectUrl != null) {\n if (redirectCount < this.maxRedirects) {\n this.doDownload(HttpExecutor.prepareRedirectUrlOptions(redirectUrl, requestOptions), options, redirectCount++);\n }\n else {\n options.callback(this.createMaxRedirectError());\n }\n return;\n }\n if (options.responseHandler == null) {\n configurePipes(options, response);\n }\n else {\n options.responseHandler(response, options.callback);\n }\n });\n this.addErrorAndTimeoutHandlers(request, options.callback, requestOptions.timeout);\n this.addRedirectHandlers(request, requestOptions, options.callback, redirectCount, requestOptions => {\n this.doDownload(requestOptions, options, redirectCount++);\n });\n request.end();\n }\n createMaxRedirectError() {\n return new Error(`Too many redirects (> ${this.maxRedirects})`);\n }\n addTimeOutHandler(request, callback, timeout) {\n request.on(\"socket\", (socket) => {\n socket.setTimeout(timeout, () => {\n request.abort();\n callback(new Error(\"Request timed out\"));\n });\n });\n }\n static prepareRedirectUrlOptions(redirectUrl, options) {\n const newOptions = configureRequestOptionsFromUrl(redirectUrl, { ...options });\n const headers = newOptions.headers;\n if (headers === null || headers === void 0 ? void 0 : headers.authorization) {\n // Parse original and redirect URLs to compare origins\n const originalUrl = HttpExecutor.reconstructOriginalUrl(options);\n const parsedRedirectUrl = parseUrl(redirectUrl, options);\n // Strip authorization header on cross-origin redirects (different protocol, hostname, or port)\n if (HttpExecutor.isCrossOriginRedirect(originalUrl, parsedRedirectUrl)) {\n if (debug.enabled) {\n debug(`Given the cross-origin redirect (from ${originalUrl.host} to ${parsedRedirectUrl.host}), the Authorization header will be stripped out.`);\n }\n delete headers.authorization;\n }\n }\n return newOptions;\n }\n static reconstructOriginalUrl(options) {\n const protocol = options.protocol || \"https:\";\n if (!options.hostname) {\n throw new Error(\"Missing hostname in request options\");\n }\n const hostname = options.hostname;\n const port = options.port ? `:${options.port}` : \"\";\n const path = options.path || \"/\";\n return new url_1.URL(`${protocol}//${hostname}${port}${path}`);\n }\n static isCrossOriginRedirect(originalUrl, redirectUrl) {\n // Case-insensitive hostname comparison\n if (originalUrl.hostname.toLowerCase() !== redirectUrl.hostname.toLowerCase()) {\n return true;\n }\n // Special case: allow http -> https redirect on same host with standard ports\n // This matches the behavior of Python requests library for backward compatibility\n // url.port returns an empty string if the port is omitted\n // or explicitly set to the default port for a given protocol.\n if (originalUrl.protocol === \"http:\" &&\n // This can be replaced with `!originalUrl.port`, but for the sake of clarity.\n [\"80\", \"\"].includes(originalUrl.port) &&\n redirectUrl.protocol === \"https:\" &&\n // This can be replaced with `!redirectUrl.port`, but for the sake of clarity.\n [\"443\", \"\"].includes(redirectUrl.port)) {\n return false;\n }\n // According to RFC 7235, a change in protocol or port constitutes a cross-origin request.\n // Forwarding authentication headers to a different origin can be a security risk.\n // For example, https://example.com:443 and http://example.com:80 are different origins.\n // We only make an exception for HTTP -> HTTPS upgrades on standard ports for backward compatibility.\n // Strip auth on any other protocol change\n if (originalUrl.protocol !== redirectUrl.protocol) {\n return true;\n }\n // Strip auth on port change (accounting for default ports)\n const originalPort = originalUrl.port;\n const redirectPort = redirectUrl.port;\n return originalPort !== redirectPort;\n }\n static retryOnServerError(task, maxRetries = 3) {\n for (let attemptNumber = 0;; attemptNumber++) {\n try {\n return task();\n }\n catch (e) {\n if (attemptNumber < maxRetries && ((e instanceof HttpError && e.isServerError()) || e.code === \"EPIPE\")) {\n continue;\n }\n throw e;\n }\n }\n }\n}\nexports.HttpExecutor = HttpExecutor;\nfunction parseUrl(url, options) {\n try {\n // Would throw exception if url is not absolute\n return new url_1.URL(url);\n }\n catch {\n // Relative URL - construct base URL from original options\n const hostname = options.hostname;\n const protocol = options.protocol || \"https:\";\n const port = options.port ? `:${options.port}` : \"\";\n const baseUrl = `${protocol}//${hostname}${port}`;\n return new url_1.URL(url, baseUrl);\n }\n}\nfunction configureRequestOptionsFromUrl(url, options) {\n const result = configureRequestOptions(options);\n const parsedUrl = parseUrl(url, options);\n configureRequestUrl(parsedUrl, result);\n return result;\n}\nfunction configureRequestUrl(url, options) {\n options.protocol = url.protocol;\n options.hostname = url.hostname;\n if (url.port) {\n options.port = url.port;\n }\n else if (options.port) {\n delete options.port;\n }\n options.path = url.pathname + url.search;\n}\nclass DigestTransform extends stream_1.Transform {\n // noinspection JSUnusedGlobalSymbols\n get actual() {\n return this._actual;\n }\n constructor(expected, algorithm = \"sha512\", encoding = \"base64\") {\n super();\n this.expected = expected;\n this.algorithm = algorithm;\n this.encoding = encoding;\n this._actual = null;\n this.isValidateOnEnd = true;\n this.digester = (0, crypto_1.createHash)(algorithm);\n }\n // noinspection JSUnusedGlobalSymbols\n _transform(chunk, encoding, callback) {\n this.digester.update(chunk);\n callback(null, chunk);\n }\n // noinspection JSUnusedGlobalSymbols\n _flush(callback) {\n this._actual = this.digester.digest(this.encoding);\n if (this.isValidateOnEnd) {\n try {\n this.validate();\n }\n catch (e) {\n callback(e);\n return;\n }\n }\n callback(null);\n }\n validate() {\n if (this._actual == null) {\n throw (0, error_1.newError)(\"Not finished yet\", \"ERR_STREAM_NOT_FINISHED\");\n }\n if (this._actual !== this.expected) {\n throw (0, error_1.newError)(`${this.algorithm} checksum mismatch, expected ${this.expected}, got ${this._actual}`, \"ERR_CHECKSUM_MISMATCH\");\n }\n return null;\n }\n}\nexports.DigestTransform = DigestTransform;\nfunction checkSha2(sha2Header, sha2, callback) {\n if (sha2Header != null && sha2 != null && sha2Header !== sha2) {\n callback(new Error(`checksum mismatch: expected ${sha2} but got ${sha2Header} (X-Checksum-Sha2 header)`));\n return false;\n }\n return true;\n}\nfunction safeGetHeader(response, headerKey) {\n const value = response.headers[headerKey];\n if (value == null) {\n return null;\n }\n else if (Array.isArray(value)) {\n // electron API\n return value.length === 0 ? null : value[value.length - 1];\n }\n else {\n return value;\n }\n}\nfunction configurePipes(options, response) {\n if (!checkSha2(safeGetHeader(response, \"X-Checksum-Sha2\"), options.options.sha2, options.callback)) {\n return;\n }\n const streams = [];\n if (options.options.onProgress != null) {\n const contentLength = safeGetHeader(response, \"content-length\");\n if (contentLength != null) {\n streams.push(new ProgressCallbackTransform_1.ProgressCallbackTransform(parseInt(contentLength, 10), options.options.cancellationToken, options.options.onProgress));\n }\n }\n const sha512 = options.options.sha512;\n if (sha512 != null) {\n streams.push(new DigestTransform(sha512, \"sha512\", sha512.length === 128 && !sha512.includes(\"+\") && !sha512.includes(\"Z\") && !sha512.includes(\"=\") ? \"hex\" : \"base64\"));\n }\n else if (options.options.sha2 != null) {\n streams.push(new DigestTransform(options.options.sha2, \"sha256\", \"hex\"));\n }\n const fileOut = (0, fs_1.createWriteStream)(options.destination);\n streams.push(fileOut);\n let lastStream = response;\n for (const stream of streams) {\n stream.on(\"error\", (error) => {\n fileOut.close();\n if (!options.options.cancellationToken.cancelled) {\n options.callback(error);\n }\n });\n lastStream = lastStream.pipe(stream);\n }\n fileOut.on(\"finish\", () => {\n ;\n fileOut.close(options.callback);\n });\n}\nfunction configureRequestOptions(options, token, method) {\n if (method != null) {\n options.method = method;\n }\n options.headers = { ...options.headers };\n const headers = options.headers;\n if (token != null) {\n ;\n headers.authorization = token.startsWith(\"Basic\") || token.startsWith(\"Bearer\") ? token : `token ${token}`;\n }\n if (headers[\"User-Agent\"] == null) {\n headers[\"User-Agent\"] = \"electron-builder\";\n }\n if (method == null || method === \"GET\" || headers[\"Cache-Control\"] == null) {\n headers[\"Cache-Control\"] = \"no-cache\";\n }\n // do not specify for node (in any case we use https module)\n if (options.protocol == null && process.versions.electron != null) {\n options.protocol = \"https:\";\n }\n return options;\n}\nfunction safeStringifyJson(data, skippedNames) {\n return JSON.stringify(data, (name, value) => {\n if (name.endsWith(\"Authorization\") ||\n name.endsWith(\"authorization\") ||\n name.endsWith(\"Password\") ||\n name.endsWith(\"PASSWORD\") ||\n name.endsWith(\"Token\") ||\n name.includes(\"password\") ||\n name.includes(\"token\") ||\n (skippedNames != null && skippedNames.has(name))) {\n return \"<stripped sensitive data>\";\n }\n return value;\n }, 2);\n}\n//# sourceMappingURL=httpExecutor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MemoLazy = void 0;\nclass MemoLazy {\n constructor(selector, creator) {\n this.selector = selector;\n this.creator = creator;\n this.selected = undefined;\n this._value = undefined;\n }\n get hasValue() {\n return this._value !== undefined;\n }\n get value() {\n const selected = this.selector();\n if (this._value !== undefined && equals(this.selected, selected)) {\n // value exists and selected hasn't changed, so return the cached value\n return this._value;\n }\n this.selected = selected;\n const result = this.creator(selected);\n this.value = result;\n return result;\n }\n set value(value) {\n this._value = value;\n }\n}\nexports.MemoLazy = MemoLazy;\nfunction equals(firstValue, secondValue) {\n const isFirstObject = typeof firstValue === \"object\" && firstValue !== null;\n const isSecondObject = typeof secondValue === \"object\" && secondValue !== null;\n // do a shallow comparison of objects, arrays etc.\n if (isFirstObject && isSecondObject) {\n const keys1 = Object.keys(firstValue);\n const keys2 = Object.keys(secondValue);\n return keys1.length === keys2.length && keys1.every((key) => equals(firstValue[key], secondValue[key]));\n }\n // otherwise just compare the values directly\n return firstValue === secondValue;\n}\n//# sourceMappingURL=MemoLazy.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.githubUrl = githubUrl;\nexports.githubTagPrefix = githubTagPrefix;\nexports.getS3LikeProviderBaseUrl = getS3LikeProviderBaseUrl;\n/** @private */\nfunction githubUrl(options, defaultHost = \"github.com\") {\n return `${options.protocol || \"https\"}://${options.host || defaultHost}`;\n}\nfunction githubTagPrefix(options) {\n var _a;\n if (options.tagNamePrefix) {\n return options.tagNamePrefix;\n }\n if ((_a = options.vPrefixedTagName) !== null && _a !== void 0 ? _a : true) {\n return \"v\";\n }\n return \"\";\n}\nfunction getS3LikeProviderBaseUrl(configuration) {\n const provider = configuration.provider;\n if (provider === \"s3\") {\n return s3Url(configuration);\n }\n if (provider === \"spaces\") {\n return spacesUrl(configuration);\n }\n throw new Error(`Not supported provider: ${provider}`);\n}\nfunction s3Url(options) {\n let url;\n if (options.accelerate == true) {\n url = `https://${options.bucket}.s3-accelerate.amazonaws.com`;\n }\n else if (options.endpoint != null) {\n url = `${options.endpoint}/${options.bucket}`;\n }\n else if (options.bucket.includes(\".\")) {\n if (options.region == null) {\n throw new Error(`Bucket name \"${options.bucket}\" includes a dot, but S3 region is missing`);\n }\n // special case, see http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingBucket.html#access-bucket-intro\n if (options.region === \"us-east-1\") {\n url = `https://s3.amazonaws.com/${options.bucket}`;\n }\n else {\n url = `https://s3-${options.region}.amazonaws.com/${options.bucket}`;\n }\n }\n else if (options.region === \"cn-north-1\") {\n url = `https://${options.bucket}.s3.${options.region}.amazonaws.com.cn`;\n }\n else {\n url = `https://${options.bucket}.s3.amazonaws.com`;\n }\n return appendPath(url, options.path);\n}\nfunction appendPath(url, p) {\n if (p != null && p.length > 0) {\n if (!p.startsWith(\"/\")) {\n url += \"/\";\n }\n url += p;\n }\n return url;\n}\nfunction spacesUrl(options) {\n if (options.name == null) {\n throw new Error(`name is missing`);\n }\n if (options.region == null) {\n throw new Error(`region is missing`);\n }\n return appendPath(`https://${options.name}.${options.region}.digitaloceanspaces.com`, options.path);\n}\n//# sourceMappingURL=publishOptions.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.retry = retry;\nconst CancellationToken_1 = require(\"./CancellationToken\");\nasync function retry(task, options) {\n var _a;\n const { retries: retryCount, interval, backoff = 0, attempt = 0, shouldRetry, cancellationToken = new CancellationToken_1.CancellationToken() } = options;\n try {\n return await task();\n }\n catch (error) {\n if ((await Promise.resolve((_a = shouldRetry === null || shouldRetry === void 0 ? void 0 : shouldRetry(error)) !== null && _a !== void 0 ? _a : true)) && retryCount > 0 && !cancellationToken.cancelled) {\n await new Promise(resolve => setTimeout(resolve, interval + backoff * attempt));\n return await retry(task, { ...options, retries: retryCount - 1, attempt: attempt + 1 });\n }\n else {\n throw error;\n }\n }\n}\n//# sourceMappingURL=retry.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseDn = parseDn;\nfunction parseDn(seq) {\n let quoted = false;\n let key = null;\n let token = \"\";\n let nextNonSpace = 0;\n seq = seq.trim();\n const result = new Map();\n for (let i = 0; i <= seq.length; i++) {\n if (i === seq.length) {\n if (key !== null) {\n result.set(key, token);\n }\n break;\n }\n const ch = seq[i];\n if (quoted) {\n if (ch === '\"') {\n quoted = false;\n continue;\n }\n }\n else {\n if (ch === '\"') {\n quoted = true;\n continue;\n }\n if (ch === \"\\\\\") {\n i++;\n const ord = parseInt(seq.slice(i, i + 2), 16);\n if (Number.isNaN(ord)) {\n token += seq[i];\n }\n else {\n i++;\n token += String.fromCharCode(ord);\n }\n continue;\n }\n if (key === null && ch === \"=\") {\n key = token;\n token = \"\";\n continue;\n }\n if (ch === \",\" || ch === \";\" || ch === \"+\") {\n if (key !== null) {\n result.set(key, token);\n }\n key = null;\n token = \"\";\n continue;\n }\n }\n if (ch === \" \" && !quoted) {\n if (token.length === 0) {\n continue;\n }\n if (i > nextNonSpace) {\n let j = i;\n while (seq[j] === \" \") {\n j++;\n }\n nextNonSpace = j;\n }\n if (nextNonSpace >= seq.length ||\n seq[nextNonSpace] === \",\" ||\n seq[nextNonSpace] === \";\" ||\n (key === null && seq[nextNonSpace] === \"=\") ||\n (key !== null && seq[nextNonSpace] === \"+\")) {\n i = nextNonSpace - 1;\n continue;\n }\n }\n token += ch;\n }\n return result;\n}\n//# sourceMappingURL=rfc2253Parser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.nil = exports.UUID = void 0;\nconst crypto_1 = require(\"crypto\");\nconst error_1 = require(\"./error\");\nconst invalidName = \"options.name must be either a string or a Buffer\";\n// Node ID according to rfc4122#section-4.5\nconst randomHost = (0, crypto_1.randomBytes)(16);\nrandomHost[0] = randomHost[0] | 0x01;\n// lookup table hex to byte\nconst hex2byte = {};\n// lookup table byte to hex\nconst byte2hex = [];\n// populate lookup tables\nfor (let i = 0; i < 256; i++) {\n const hex = (i + 0x100).toString(16).substr(1);\n hex2byte[hex] = i;\n byte2hex[i] = hex;\n}\n// UUID class\nclass UUID {\n constructor(uuid) {\n this.ascii = null;\n this.binary = null;\n const check = UUID.check(uuid);\n if (!check) {\n throw new Error(\"not a UUID\");\n }\n this.version = check.version;\n if (check.format === \"ascii\") {\n this.ascii = uuid;\n }\n else {\n this.binary = uuid;\n }\n }\n static v5(name, namespace) {\n return uuidNamed(name, \"sha1\", 0x50, namespace);\n }\n toString() {\n if (this.ascii == null) {\n this.ascii = stringify(this.binary);\n }\n return this.ascii;\n }\n inspect() {\n return `UUID v${this.version} ${this.toString()}`;\n }\n static check(uuid, offset = 0) {\n if (typeof uuid === \"string\") {\n uuid = uuid.toLowerCase();\n if (!/^[a-f0-9]{8}(-[a-f0-9]{4}){3}-([a-f0-9]{12})$/.test(uuid)) {\n return false;\n }\n if (uuid === \"00000000-0000-0000-0000-000000000000\") {\n return { version: undefined, variant: \"nil\", format: \"ascii\" };\n }\n return {\n version: (hex2byte[uuid[14] + uuid[15]] & 0xf0) >> 4,\n variant: getVariant((hex2byte[uuid[19] + uuid[20]] & 0xe0) >> 5),\n format: \"ascii\",\n };\n }\n if (Buffer.isBuffer(uuid)) {\n if (uuid.length < offset + 16) {\n return false;\n }\n let i = 0;\n for (; i < 16; i++) {\n if (uuid[offset + i] !== 0) {\n break;\n }\n }\n if (i === 16) {\n return { version: undefined, variant: \"nil\", format: \"binary\" };\n }\n return {\n version: (uuid[offset + 6] & 0xf0) >> 4,\n variant: getVariant((uuid[offset + 8] & 0xe0) >> 5),\n format: \"binary\",\n };\n }\n throw (0, error_1.newError)(\"Unknown type of uuid\", \"ERR_UNKNOWN_UUID_TYPE\");\n }\n // read stringified uuid into a Buffer\n static parse(input) {\n const buffer = Buffer.allocUnsafe(16);\n let j = 0;\n for (let i = 0; i < 16; i++) {\n buffer[i] = hex2byte[input[j++] + input[j++]];\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n j += 1;\n }\n }\n return buffer;\n }\n}\nexports.UUID = UUID;\n// from rfc4122#appendix-C\nUUID.OID = UUID.parse(\"6ba7b812-9dad-11d1-80b4-00c04fd430c8\");\n// according to rfc4122#section-4.1.1\nfunction getVariant(bits) {\n switch (bits) {\n case 0:\n case 1:\n case 3:\n return \"ncs\";\n case 4:\n case 5:\n return \"rfc4122\";\n case 6:\n return \"microsoft\";\n default:\n return \"future\";\n }\n}\nvar UuidEncoding;\n(function (UuidEncoding) {\n UuidEncoding[UuidEncoding[\"ASCII\"] = 0] = \"ASCII\";\n UuidEncoding[UuidEncoding[\"BINARY\"] = 1] = \"BINARY\";\n UuidEncoding[UuidEncoding[\"OBJECT\"] = 2] = \"OBJECT\";\n})(UuidEncoding || (UuidEncoding = {}));\n// v3 + v5\nfunction uuidNamed(name, hashMethod, version, namespace, encoding = UuidEncoding.ASCII) {\n const hash = (0, crypto_1.createHash)(hashMethod);\n const nameIsNotAString = typeof name !== \"string\";\n if (nameIsNotAString && !Buffer.isBuffer(name)) {\n throw (0, error_1.newError)(invalidName, \"ERR_INVALID_UUID_NAME\");\n }\n hash.update(namespace);\n hash.update(name);\n const buffer = hash.digest();\n let result;\n switch (encoding) {\n case UuidEncoding.BINARY:\n buffer[6] = (buffer[6] & 0x0f) | version;\n buffer[8] = (buffer[8] & 0x3f) | 0x80;\n result = buffer;\n break;\n case UuidEncoding.OBJECT:\n buffer[6] = (buffer[6] & 0x0f) | version;\n buffer[8] = (buffer[8] & 0x3f) | 0x80;\n result = new UUID(buffer);\n break;\n default:\n result =\n byte2hex[buffer[0]] +\n byte2hex[buffer[1]] +\n byte2hex[buffer[2]] +\n byte2hex[buffer[3]] +\n \"-\" +\n byte2hex[buffer[4]] +\n byte2hex[buffer[5]] +\n \"-\" +\n byte2hex[(buffer[6] & 0x0f) | version] +\n byte2hex[buffer[7]] +\n \"-\" +\n byte2hex[(buffer[8] & 0x3f) | 0x80] +\n byte2hex[buffer[9]] +\n \"-\" +\n byte2hex[buffer[10]] +\n byte2hex[buffer[11]] +\n byte2hex[buffer[12]] +\n byte2hex[buffer[13]] +\n byte2hex[buffer[14]] +\n byte2hex[buffer[15]];\n break;\n }\n return result;\n}\nfunction stringify(buffer) {\n return (byte2hex[buffer[0]] +\n byte2hex[buffer[1]] +\n byte2hex[buffer[2]] +\n byte2hex[buffer[3]] +\n \"-\" +\n byte2hex[buffer[4]] +\n byte2hex[buffer[5]] +\n \"-\" +\n byte2hex[buffer[6]] +\n byte2hex[buffer[7]] +\n \"-\" +\n byte2hex[buffer[8]] +\n byte2hex[buffer[9]] +\n \"-\" +\n byte2hex[buffer[10]] +\n byte2hex[buffer[11]] +\n byte2hex[buffer[12]] +\n byte2hex[buffer[13]] +\n byte2hex[buffer[14]] +\n byte2hex[buffer[15]]);\n}\n// according to rfc4122#section-4.1.7\nexports.nil = new UUID(\"00000000-0000-0000-0000-000000000000\");\n// UUID.v4 = uuidRandom\n// UUID.v4fast = uuidRandomFast\n// UUID.v3 = function(options, callback) {\n// return uuidNamed(\"md5\", 0x30, options, callback)\n// }\n//# sourceMappingURL=uuid.js.map",";(function (sax) {\n // wrapper for non-node envs\n sax.parser = function (strict, opt) {\n return new SAXParser(strict, opt)\n }\n sax.SAXParser = SAXParser\n sax.SAXStream = SAXStream\n sax.createStream = createStream\n\n // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n // since that's the earliest that a buffer overrun could occur. This way, checks are\n // as rare as required, but as often as necessary to ensure never crossing this bound.\n // Furthermore, buffers are only tested at most once per write(), so passing a very\n // large string into write() might have undesirable effects, but this is manageable by\n // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme\n // edge case, result in creating at most one complete copy of the string passed in.\n // Set to Infinity to have unlimited buffers.\n sax.MAX_BUFFER_LENGTH = 64 * 1024\n\n var buffers = [\n 'comment',\n 'sgmlDecl',\n 'textNode',\n 'tagName',\n 'doctype',\n 'procInstName',\n 'procInstBody',\n 'entity',\n 'attribName',\n 'attribValue',\n 'cdata',\n 'script',\n ]\n\n sax.EVENTS = [\n 'text',\n 'processinginstruction',\n 'sgmldeclaration',\n 'doctype',\n 'comment',\n 'opentagstart',\n 'attribute',\n 'opentag',\n 'closetag',\n 'opencdata',\n 'cdata',\n 'closecdata',\n 'error',\n 'end',\n 'ready',\n 'script',\n 'opennamespace',\n 'closenamespace',\n ]\n\n function SAXParser(strict, opt) {\n if (!(this instanceof SAXParser)) {\n return new SAXParser(strict, opt)\n }\n\n var parser = this\n clearBuffers(parser)\n parser.q = parser.c = ''\n parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH\n parser.opt = opt || {}\n parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags\n parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase'\n parser.tags = []\n parser.closed = parser.closedRoot = parser.sawRoot = false\n parser.tag = parser.error = null\n parser.strict = !!strict\n parser.noscript = !!(strict || parser.opt.noscript)\n parser.state = S.BEGIN\n parser.strictEntities = parser.opt.strictEntities\n parser.ENTITIES =\n parser.strictEntities ?\n Object.create(sax.XML_ENTITIES)\n : Object.create(sax.ENTITIES)\n parser.attribList = []\n\n // namespaces form a prototype chain.\n // it always points at the current tag,\n // which protos to its parent tag.\n if (parser.opt.xmlns) {\n parser.ns = Object.create(rootNS)\n }\n\n // disallow unquoted attribute values if not otherwise configured\n // and strict mode is true\n if (parser.opt.unquotedAttributeValues === undefined) {\n parser.opt.unquotedAttributeValues = !strict\n }\n\n // mostly just for error reporting\n parser.trackPosition = parser.opt.position !== false\n if (parser.trackPosition) {\n parser.position = parser.line = parser.column = 0\n }\n emit(parser, 'onready')\n }\n\n if (!Object.create) {\n Object.create = function (o) {\n function F() {}\n F.prototype = o\n var newf = new F()\n return newf\n }\n }\n\n if (!Object.keys) {\n Object.keys = function (o) {\n var a = []\n for (var i in o) if (o.hasOwnProperty(i)) a.push(i)\n return a\n }\n }\n\n function checkBufferLength(parser) {\n var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10)\n var maxActual = 0\n for (var i = 0, l = buffers.length; i < l; i++) {\n var len = parser[buffers[i]].length\n if (len > maxAllowed) {\n // Text/cdata nodes can get big, and since they're buffered,\n // we can get here under normal conditions.\n // Avoid issues by emitting the text node now,\n // so at least it won't get any bigger.\n switch (buffers[i]) {\n case 'textNode':\n closeText(parser)\n break\n\n case 'cdata':\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n break\n\n case 'script':\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n break\n\n default:\n error(parser, 'Max buffer length exceeded: ' + buffers[i])\n }\n }\n maxActual = Math.max(maxActual, len)\n }\n // schedule the next check for the earliest possible buffer overrun.\n var m = sax.MAX_BUFFER_LENGTH - maxActual\n parser.bufferCheckPosition = m + parser.position\n }\n\n function clearBuffers(parser) {\n for (var i = 0, l = buffers.length; i < l; i++) {\n parser[buffers[i]] = ''\n }\n }\n\n function flushBuffers(parser) {\n closeText(parser)\n if (parser.cdata !== '') {\n emitNode(parser, 'oncdata', parser.cdata)\n parser.cdata = ''\n }\n if (parser.script !== '') {\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n }\n\n SAXParser.prototype = {\n end: function () {\n end(this)\n },\n write: write,\n resume: function () {\n this.error = null\n return this\n },\n close: function () {\n return this.write(null)\n },\n flush: function () {\n flushBuffers(this)\n },\n }\n\n var Stream\n try {\n Stream = require('stream').Stream\n } catch (ex) {\n Stream = function () {}\n }\n if (!Stream) Stream = function () {}\n\n var streamWraps = sax.EVENTS.filter(function (ev) {\n return ev !== 'error' && ev !== 'end'\n })\n\n function createStream(strict, opt) {\n return new SAXStream(strict, opt)\n }\n\n function SAXStream(strict, opt) {\n if (!(this instanceof SAXStream)) {\n return new SAXStream(strict, opt)\n }\n\n Stream.apply(this)\n\n this._parser = new SAXParser(strict, opt)\n this.writable = true\n this.readable = true\n\n var me = this\n\n this._parser.onend = function () {\n me.emit('end')\n }\n\n this._parser.onerror = function (er) {\n me.emit('error', er)\n\n // if didn't throw, then means error was handled.\n // go ahead and clear error, so we can write again.\n me._parser.error = null\n }\n\n this._decoder = null\n\n streamWraps.forEach(function (ev) {\n Object.defineProperty(me, 'on' + ev, {\n get: function () {\n return me._parser['on' + ev]\n },\n set: function (h) {\n if (!h) {\n me.removeAllListeners(ev)\n me._parser['on' + ev] = h\n return h\n }\n me.on(ev, h)\n },\n enumerable: true,\n configurable: false,\n })\n })\n }\n\n SAXStream.prototype = Object.create(Stream.prototype, {\n constructor: {\n value: SAXStream,\n },\n })\n\n SAXStream.prototype.write = function (data) {\n if (\n typeof Buffer === 'function' &&\n typeof Buffer.isBuffer === 'function' &&\n Buffer.isBuffer(data)\n ) {\n if (!this._decoder) {\n this._decoder = new TextDecoder('utf8')\n }\n data = this._decoder.decode(data, { stream: true })\n }\n\n this._parser.write(data.toString())\n this.emit('data', data)\n return true\n }\n\n SAXStream.prototype.end = function (chunk) {\n if (chunk && chunk.length) {\n this.write(chunk)\n }\n // Flush any remaining decoded data from the TextDecoder\n if (this._decoder) {\n var remaining = this._decoder.decode()\n if (remaining) {\n this._parser.write(remaining)\n this.emit('data', remaining)\n }\n }\n this._parser.end()\n return true\n }\n\n SAXStream.prototype.on = function (ev, handler) {\n var me = this\n if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n me._parser['on' + ev] = function () {\n var args =\n arguments.length === 1 ?\n [arguments[0]]\n : Array.apply(null, arguments)\n args.splice(0, 0, ev)\n me.emit.apply(me, args)\n }\n }\n\n return Stream.prototype.on.call(me, ev, handler)\n }\n\n // this really needs to be replaced with character classes.\n // XML allows all manner of ridiculous numbers and digits.\n var CDATA = '[CDATA['\n var DOCTYPE = 'DOCTYPE'\n var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace'\n var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/'\n var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE }\n\n // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n // This implementation works on strings, a single character at a time\n // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n // without a significant breaking change to either this parser, or the\n // JavaScript language. Implementation of an emoji-capable xml parser\n // is left as an exercise for the reader.\n var nameStart =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n\n var nameBody =\n /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n var entityStart =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/\n var entityBody =\n /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/\n\n function isWhitespace(c) {\n return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t'\n }\n\n function isQuote(c) {\n return c === '\"' || c === \"'\"\n }\n\n function isAttribEnd(c) {\n return c === '>' || isWhitespace(c)\n }\n\n function isMatch(regex, c) {\n return regex.test(c)\n }\n\n function notMatch(regex, c) {\n return !isMatch(regex, c)\n }\n\n var S = 0\n sax.STATE = {\n BEGIN: S++, // leading byte order mark or whitespace\n BEGIN_WHITESPACE: S++, // leading whitespace\n TEXT: S++, // general stuff\n TEXT_ENTITY: S++, // & and such.\n OPEN_WAKA: S++, // <\n SGML_DECL: S++, // <!BLARG\n SGML_DECL_QUOTED: S++, // <!BLARG foo \"bar\n DOCTYPE: S++, // <!DOCTYPE\n DOCTYPE_QUOTED: S++, // <!DOCTYPE \"//blah\n DOCTYPE_DTD: S++, // <!DOCTYPE \"//blah\" [ ...\n DOCTYPE_DTD_QUOTED: S++, // <!DOCTYPE \"//blah\" [ \"foo\n COMMENT_STARTING: S++, // <!-\n COMMENT: S++, // <!--\n COMMENT_ENDING: S++, // <!-- blah -\n COMMENT_ENDED: S++, // <!-- blah --\n CDATA: S++, // <![CDATA[ something\n CDATA_ENDING: S++, // ]\n CDATA_ENDING_2: S++, // ]]\n PROC_INST: S++, // <?hi\n PROC_INST_BODY: S++, // <?hi there\n PROC_INST_ENDING: S++, // <?hi \"there\" ?\n OPEN_TAG: S++, // <strong\n OPEN_TAG_SLASH: S++, // <strong /\n ATTRIB: S++, // <a\n ATTRIB_NAME: S++, // <a foo\n ATTRIB_NAME_SAW_WHITE: S++, // <a foo _\n ATTRIB_VALUE: S++, // <a foo=\n ATTRIB_VALUE_QUOTED: S++, // <a foo=\"bar\n ATTRIB_VALUE_CLOSED: S++, // <a foo=\"bar\"\n ATTRIB_VALUE_UNQUOTED: S++, // <a foo=bar\n ATTRIB_VALUE_ENTITY_Q: S++, // <foo bar=\""\"\n ATTRIB_VALUE_ENTITY_U: S++, // <foo bar="\n CLOSE_TAG: S++, // </a\n CLOSE_TAG_SAW_WHITE: S++, // </a >\n SCRIPT: S++, // <script> ...\n SCRIPT_ENDING: S++, // <script> ... <\n }\n\n sax.XML_ENTITIES = {\n amp: '&',\n gt: '>',\n lt: '<',\n quot: '\"',\n apos: \"'\",\n }\n\n sax.ENTITIES = {\n amp: '&',\n gt: '>',\n lt: '<',\n quot: '\"',\n apos: \"'\",\n AElig: 198,\n Aacute: 193,\n Acirc: 194,\n Agrave: 192,\n Aring: 197,\n Atilde: 195,\n Auml: 196,\n Ccedil: 199,\n ETH: 208,\n Eacute: 201,\n Ecirc: 202,\n Egrave: 200,\n Euml: 203,\n Iacute: 205,\n Icirc: 206,\n Igrave: 204,\n Iuml: 207,\n Ntilde: 209,\n Oacute: 211,\n Ocirc: 212,\n Ograve: 210,\n Oslash: 216,\n Otilde: 213,\n Ouml: 214,\n THORN: 222,\n Uacute: 218,\n Ucirc: 219,\n Ugrave: 217,\n Uuml: 220,\n Yacute: 221,\n aacute: 225,\n acirc: 226,\n aelig: 230,\n agrave: 224,\n aring: 229,\n atilde: 227,\n auml: 228,\n ccedil: 231,\n eacute: 233,\n ecirc: 234,\n egrave: 232,\n eth: 240,\n euml: 235,\n iacute: 237,\n icirc: 238,\n igrave: 236,\n iuml: 239,\n ntilde: 241,\n oacute: 243,\n ocirc: 244,\n ograve: 242,\n oslash: 248,\n otilde: 245,\n ouml: 246,\n szlig: 223,\n thorn: 254,\n uacute: 250,\n ucirc: 251,\n ugrave: 249,\n uuml: 252,\n yacute: 253,\n yuml: 255,\n copy: 169,\n reg: 174,\n nbsp: 160,\n iexcl: 161,\n cent: 162,\n pound: 163,\n curren: 164,\n yen: 165,\n brvbar: 166,\n sect: 167,\n uml: 168,\n ordf: 170,\n laquo: 171,\n not: 172,\n shy: 173,\n macr: 175,\n deg: 176,\n plusmn: 177,\n sup1: 185,\n sup2: 178,\n sup3: 179,\n acute: 180,\n micro: 181,\n para: 182,\n middot: 183,\n cedil: 184,\n ordm: 186,\n raquo: 187,\n frac14: 188,\n frac12: 189,\n frac34: 190,\n iquest: 191,\n times: 215,\n divide: 247,\n OElig: 338,\n oelig: 339,\n Scaron: 352,\n scaron: 353,\n Yuml: 376,\n fnof: 402,\n circ: 710,\n tilde: 732,\n Alpha: 913,\n Beta: 914,\n Gamma: 915,\n Delta: 916,\n Epsilon: 917,\n Zeta: 918,\n Eta: 919,\n Theta: 920,\n Iota: 921,\n Kappa: 922,\n Lambda: 923,\n Mu: 924,\n Nu: 925,\n Xi: 926,\n Omicron: 927,\n Pi: 928,\n Rho: 929,\n Sigma: 931,\n Tau: 932,\n Upsilon: 933,\n Phi: 934,\n Chi: 935,\n Psi: 936,\n Omega: 937,\n alpha: 945,\n beta: 946,\n gamma: 947,\n delta: 948,\n epsilon: 949,\n zeta: 950,\n eta: 951,\n theta: 952,\n iota: 953,\n kappa: 954,\n lambda: 955,\n mu: 956,\n nu: 957,\n xi: 958,\n omicron: 959,\n pi: 960,\n rho: 961,\n sigmaf: 962,\n sigma: 963,\n tau: 964,\n upsilon: 965,\n phi: 966,\n chi: 967,\n psi: 968,\n omega: 969,\n thetasym: 977,\n upsih: 978,\n piv: 982,\n ensp: 8194,\n emsp: 8195,\n thinsp: 8201,\n zwnj: 8204,\n zwj: 8205,\n lrm: 8206,\n rlm: 8207,\n ndash: 8211,\n mdash: 8212,\n lsquo: 8216,\n rsquo: 8217,\n sbquo: 8218,\n ldquo: 8220,\n rdquo: 8221,\n bdquo: 8222,\n dagger: 8224,\n Dagger: 8225,\n bull: 8226,\n hellip: 8230,\n permil: 8240,\n prime: 8242,\n Prime: 8243,\n lsaquo: 8249,\n rsaquo: 8250,\n oline: 8254,\n frasl: 8260,\n euro: 8364,\n image: 8465,\n weierp: 8472,\n real: 8476,\n trade: 8482,\n alefsym: 8501,\n larr: 8592,\n uarr: 8593,\n rarr: 8594,\n darr: 8595,\n harr: 8596,\n crarr: 8629,\n lArr: 8656,\n uArr: 8657,\n rArr: 8658,\n dArr: 8659,\n hArr: 8660,\n forall: 8704,\n part: 8706,\n exist: 8707,\n empty: 8709,\n nabla: 8711,\n isin: 8712,\n notin: 8713,\n ni: 8715,\n prod: 8719,\n sum: 8721,\n minus: 8722,\n lowast: 8727,\n radic: 8730,\n prop: 8733,\n infin: 8734,\n ang: 8736,\n and: 8743,\n or: 8744,\n cap: 8745,\n cup: 8746,\n int: 8747,\n there4: 8756,\n sim: 8764,\n cong: 8773,\n asymp: 8776,\n ne: 8800,\n equiv: 8801,\n le: 8804,\n ge: 8805,\n sub: 8834,\n sup: 8835,\n nsub: 8836,\n sube: 8838,\n supe: 8839,\n oplus: 8853,\n otimes: 8855,\n perp: 8869,\n sdot: 8901,\n lceil: 8968,\n rceil: 8969,\n lfloor: 8970,\n rfloor: 8971,\n lang: 9001,\n rang: 9002,\n loz: 9674,\n spades: 9824,\n clubs: 9827,\n hearts: 9829,\n diams: 9830,\n }\n\n Object.keys(sax.ENTITIES).forEach(function (key) {\n var e = sax.ENTITIES[key]\n var s = typeof e === 'number' ? String.fromCharCode(e) : e\n sax.ENTITIES[key] = s\n })\n\n for (var s in sax.STATE) {\n sax.STATE[sax.STATE[s]] = s\n }\n\n // shorthand\n S = sax.STATE\n\n function emit(parser, event, data) {\n parser[event] && parser[event](data)\n }\n\n function emitNode(parser, nodeType, data) {\n if (parser.textNode) closeText(parser)\n emit(parser, nodeType, data)\n }\n\n function closeText(parser) {\n parser.textNode = textopts(parser.opt, parser.textNode)\n if (parser.textNode) emit(parser, 'ontext', parser.textNode)\n parser.textNode = ''\n }\n\n function textopts(opt, text) {\n if (opt.trim) text = text.trim()\n if (opt.normalize) text = text.replace(/\\s+/g, ' ')\n return text\n }\n\n function error(parser, er) {\n closeText(parser)\n if (parser.trackPosition) {\n er +=\n '\\nLine: ' +\n parser.line +\n '\\nColumn: ' +\n parser.column +\n '\\nChar: ' +\n parser.c\n }\n er = new Error(er)\n parser.error = er\n emit(parser, 'onerror', er)\n return parser\n }\n\n function end(parser) {\n if (parser.sawRoot && !parser.closedRoot)\n strictFail(parser, 'Unclosed root tag')\n if (\n parser.state !== S.BEGIN &&\n parser.state !== S.BEGIN_WHITESPACE &&\n parser.state !== S.TEXT\n ) {\n error(parser, 'Unexpected end')\n }\n closeText(parser)\n parser.c = ''\n parser.closed = true\n emit(parser, 'onend')\n SAXParser.call(parser, parser.strict, parser.opt)\n return parser\n }\n\n function strictFail(parser, message) {\n if (typeof parser !== 'object' || !(parser instanceof SAXParser)) {\n throw new Error('bad call to strictFail')\n }\n if (parser.strict) {\n error(parser, message)\n }\n }\n\n function newTag(parser) {\n if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]()\n var parent = parser.tags[parser.tags.length - 1] || parser\n var tag = (parser.tag = { name: parser.tagName, attributes: {} })\n\n // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n if (parser.opt.xmlns) {\n tag.ns = parent.ns\n }\n parser.attribList.length = 0\n emitNode(parser, 'onopentagstart', tag)\n }\n\n function qname(name, attribute) {\n var i = name.indexOf(':')\n var qualName = i < 0 ? ['', name] : name.split(':')\n var prefix = qualName[0]\n var local = qualName[1]\n\n // <x \"xmlns\"=\"http://foo\">\n if (attribute && name === 'xmlns') {\n prefix = 'xmlns'\n local = ''\n }\n\n return { prefix: prefix, local: local }\n }\n\n function attrib(parser) {\n if (!parser.strict) {\n parser.attribName = parser.attribName[parser.looseCase]()\n }\n\n if (\n parser.attribList.indexOf(parser.attribName) !== -1 ||\n parser.tag.attributes.hasOwnProperty(parser.attribName)\n ) {\n parser.attribName = parser.attribValue = ''\n return\n }\n\n if (parser.opt.xmlns) {\n var qn = qname(parser.attribName, true)\n var prefix = qn.prefix\n var local = qn.local\n\n if (prefix === 'xmlns') {\n // namespace binding attribute. push the binding into scope\n if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n strictFail(\n parser,\n 'xml: prefix must be bound to ' +\n XML_NAMESPACE +\n '\\n' +\n 'Actual: ' +\n parser.attribValue\n )\n } else if (\n local === 'xmlns' &&\n parser.attribValue !== XMLNS_NAMESPACE\n ) {\n strictFail(\n parser,\n 'xmlns: prefix must be bound to ' +\n XMLNS_NAMESPACE +\n '\\n' +\n 'Actual: ' +\n parser.attribValue\n )\n } else {\n var tag = parser.tag\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns === parent.ns) {\n tag.ns = Object.create(parent.ns)\n }\n tag.ns[local] = parser.attribValue\n }\n }\n\n // defer onattribute events until all attributes have been seen\n // so any new bindings can take effect. preserve attribute order\n // so deferred events can be emitted in document order\n parser.attribList.push([parser.attribName, parser.attribValue])\n } else {\n // in non-xmlns mode, we can emit the event right away\n parser.tag.attributes[parser.attribName] = parser.attribValue\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: parser.attribValue,\n })\n }\n\n parser.attribName = parser.attribValue = ''\n }\n\n function openTag(parser, selfClosing) {\n if (parser.opt.xmlns) {\n // emit namespace binding events\n var tag = parser.tag\n\n // add namespace info to tag\n var qn = qname(parser.tagName)\n tag.prefix = qn.prefix\n tag.local = qn.local\n tag.uri = tag.ns[qn.prefix] || ''\n\n if (tag.prefix && !tag.uri) {\n strictFail(\n parser,\n 'Unbound namespace prefix: ' + JSON.stringify(parser.tagName)\n )\n tag.uri = qn.prefix\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (tag.ns && parent.ns !== tag.ns) {\n Object.keys(tag.ns).forEach(function (p) {\n emitNode(parser, 'onopennamespace', {\n prefix: p,\n uri: tag.ns[p],\n })\n })\n }\n\n // handle deferred onattribute events\n // Note: do not apply default ns to attributes:\n // http://www.w3.org/TR/REC-xml-names/#defaulting\n for (var i = 0, l = parser.attribList.length; i < l; i++) {\n var nv = parser.attribList[i]\n var name = nv[0]\n var value = nv[1]\n var qualName = qname(name, true)\n var prefix = qualName.prefix\n var local = qualName.local\n var uri = prefix === '' ? '' : tag.ns[prefix] || ''\n var a = {\n name: name,\n value: value,\n prefix: prefix,\n local: local,\n uri: uri,\n }\n\n // if there's any attributes with an undefined namespace,\n // then fail on them now.\n if (prefix && prefix !== 'xmlns' && !uri) {\n strictFail(\n parser,\n 'Unbound namespace prefix: ' + JSON.stringify(prefix)\n )\n a.uri = prefix\n }\n parser.tag.attributes[name] = a\n emitNode(parser, 'onattribute', a)\n }\n parser.attribList.length = 0\n }\n\n parser.tag.isSelfClosing = !!selfClosing\n\n // process the tag\n parser.sawRoot = true\n parser.tags.push(parser.tag)\n emitNode(parser, 'onopentag', parser.tag)\n if (!selfClosing) {\n // special case for <script> in non-strict mode.\n if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n parser.state = S.SCRIPT\n } else {\n parser.state = S.TEXT\n }\n parser.tag = null\n parser.tagName = ''\n }\n parser.attribName = parser.attribValue = ''\n parser.attribList.length = 0\n }\n\n function closeTag(parser) {\n if (!parser.tagName) {\n strictFail(parser, 'Weird empty close tag.')\n parser.textNode += '</>'\n parser.state = S.TEXT\n return\n }\n\n if (parser.script) {\n if (parser.tagName !== 'script') {\n parser.script += '</' + parser.tagName + '>'\n parser.tagName = ''\n parser.state = S.SCRIPT\n return\n }\n emitNode(parser, 'onscript', parser.script)\n parser.script = ''\n }\n\n // first make sure that the closing tag actually exists.\n // <a><b></c></b></a> will close everything, otherwise.\n var t = parser.tags.length\n var tagName = parser.tagName\n if (!parser.strict) {\n tagName = tagName[parser.looseCase]()\n }\n var closeTo = tagName\n while (t--) {\n var close = parser.tags[t]\n if (close.name !== closeTo) {\n // fail the first time in strict mode\n strictFail(parser, 'Unexpected close tag')\n } else {\n break\n }\n }\n\n // didn't find it. we already failed for strict, so just abort.\n if (t < 0) {\n strictFail(parser, 'Unmatched closing tag: ' + parser.tagName)\n parser.textNode += '</' + parser.tagName + '>'\n parser.state = S.TEXT\n return\n }\n parser.tagName = tagName\n var s = parser.tags.length\n while (s-- > t) {\n var tag = (parser.tag = parser.tags.pop())\n parser.tagName = parser.tag.name\n emitNode(parser, 'onclosetag', parser.tagName)\n\n var x = {}\n for (var i in tag.ns) {\n x[i] = tag.ns[i]\n }\n\n var parent = parser.tags[parser.tags.length - 1] || parser\n if (parser.opt.xmlns && tag.ns !== parent.ns) {\n // remove namespace bindings introduced by tag\n Object.keys(tag.ns).forEach(function (p) {\n var n = tag.ns[p]\n emitNode(parser, 'onclosenamespace', { prefix: p, uri: n })\n })\n }\n }\n if (t === 0) parser.closedRoot = true\n parser.tagName = parser.attribValue = parser.attribName = ''\n parser.attribList.length = 0\n parser.state = S.TEXT\n }\n\n function parseEntity(parser) {\n var entity = parser.entity\n var entityLC = entity.toLowerCase()\n var num\n var numStr = ''\n\n if (parser.ENTITIES[entity]) {\n return parser.ENTITIES[entity]\n }\n if (parser.ENTITIES[entityLC]) {\n return parser.ENTITIES[entityLC]\n }\n entity = entityLC\n if (entity.charAt(0) === '#') {\n if (entity.charAt(1) === 'x') {\n entity = entity.slice(2)\n num = parseInt(entity, 16)\n numStr = num.toString(16)\n } else {\n entity = entity.slice(1)\n num = parseInt(entity, 10)\n numStr = num.toString(10)\n }\n }\n entity = entity.replace(/^0+/, '')\n if (\n isNaN(num) ||\n numStr.toLowerCase() !== entity ||\n num < 0 ||\n num > 0x10ffff\n ) {\n strictFail(parser, 'Invalid character entity')\n return '&' + parser.entity + ';'\n }\n\n return String.fromCodePoint(num)\n }\n\n function beginWhiteSpace(parser, c) {\n if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (!isWhitespace(c)) {\n // have to process this as a text node.\n // weird, but happens.\n strictFail(parser, 'Non-whitespace before first tag.')\n parser.textNode = c\n parser.state = S.TEXT\n }\n }\n\n function charAt(chunk, i) {\n var result = ''\n if (i < chunk.length) {\n result = chunk.charAt(i)\n }\n return result\n }\n\n function write(chunk) {\n var parser = this\n if (this.error) {\n throw this.error\n }\n if (parser.closed) {\n return error(\n parser,\n 'Cannot write after close. Assign an onready handler.'\n )\n }\n if (chunk === null) {\n return end(parser)\n }\n if (typeof chunk === 'object') {\n chunk = chunk.toString()\n }\n var i = 0\n var c = ''\n while (true) {\n c = charAt(chunk, i++)\n parser.c = c\n\n if (!c) {\n break\n }\n\n if (parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n\n switch (parser.state) {\n case S.BEGIN:\n parser.state = S.BEGIN_WHITESPACE\n if (c === '\\uFEFF') {\n continue\n }\n beginWhiteSpace(parser, c)\n continue\n\n case S.BEGIN_WHITESPACE:\n beginWhiteSpace(parser, c)\n continue\n\n case S.TEXT:\n if (parser.sawRoot && !parser.closedRoot) {\n var starti = i - 1\n while (c && c !== '<' && c !== '&') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.textNode += chunk.substring(starti, i - 1)\n }\n if (\n c === '<' &&\n !(parser.sawRoot && parser.closedRoot && !parser.strict)\n ) {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else {\n if (\n !isWhitespace(c) &&\n (!parser.sawRoot || parser.closedRoot)\n ) {\n strictFail(parser, 'Text data outside of root node.')\n }\n if (c === '&') {\n parser.state = S.TEXT_ENTITY\n } else {\n parser.textNode += c\n }\n }\n continue\n\n case S.SCRIPT:\n // only non-strict\n if (c === '<') {\n parser.state = S.SCRIPT_ENDING\n } else {\n parser.script += c\n }\n continue\n\n case S.SCRIPT_ENDING:\n if (c === '/') {\n parser.state = S.CLOSE_TAG\n } else {\n parser.script += '<' + c\n parser.state = S.SCRIPT\n }\n continue\n\n case S.OPEN_WAKA:\n // either a /, ?, !, or text is coming next.\n if (c === '!') {\n parser.state = S.SGML_DECL\n parser.sgmlDecl = ''\n } else if (isWhitespace(c)) {\n // wait for it...\n } else if (isMatch(nameStart, c)) {\n parser.state = S.OPEN_TAG\n parser.tagName = c\n } else if (c === '/') {\n parser.state = S.CLOSE_TAG\n parser.tagName = ''\n } else if (c === '?') {\n parser.state = S.PROC_INST\n parser.procInstName = parser.procInstBody = ''\n } else {\n strictFail(parser, 'Unencoded <')\n // if there was some whitespace, then add that in.\n if (parser.startTagPosition + 1 < parser.position) {\n var pad = parser.position - parser.startTagPosition\n c = new Array(pad).join(' ') + c\n }\n parser.textNode += '<' + c\n parser.state = S.TEXT\n }\n continue\n\n case S.SGML_DECL:\n if (parser.sgmlDecl + c === '--') {\n parser.state = S.COMMENT\n parser.comment = ''\n parser.sgmlDecl = ''\n continue\n }\n\n if (\n parser.doctype &&\n parser.doctype !== true &&\n parser.sgmlDecl\n ) {\n parser.state = S.DOCTYPE_DTD\n parser.doctype += '<!' + parser.sgmlDecl + c\n parser.sgmlDecl = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n emitNode(parser, 'onopencdata')\n parser.state = S.CDATA\n parser.sgmlDecl = ''\n parser.cdata = ''\n } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n parser.state = S.DOCTYPE\n if (parser.doctype || parser.sawRoot) {\n strictFail(\n parser,\n 'Inappropriately located doctype declaration'\n )\n }\n parser.doctype = ''\n parser.sgmlDecl = ''\n } else if (c === '>') {\n emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl)\n parser.sgmlDecl = ''\n parser.state = S.TEXT\n } else if (isQuote(c)) {\n parser.state = S.SGML_DECL_QUOTED\n parser.sgmlDecl += c\n } else {\n parser.sgmlDecl += c\n }\n continue\n\n case S.SGML_DECL_QUOTED:\n if (c === parser.q) {\n parser.state = S.SGML_DECL\n parser.q = ''\n }\n parser.sgmlDecl += c\n continue\n\n case S.DOCTYPE:\n if (c === '>') {\n parser.state = S.TEXT\n emitNode(parser, 'ondoctype', parser.doctype)\n parser.doctype = true // just remember that we saw it.\n } else {\n parser.doctype += c\n if (c === '[') {\n parser.state = S.DOCTYPE_DTD\n } else if (isQuote(c)) {\n parser.state = S.DOCTYPE_QUOTED\n parser.q = c\n }\n }\n continue\n\n case S.DOCTYPE_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.q = ''\n parser.state = S.DOCTYPE\n }\n continue\n\n case S.DOCTYPE_DTD:\n if (c === ']') {\n parser.doctype += c\n parser.state = S.DOCTYPE\n } else if (c === '<') {\n parser.state = S.OPEN_WAKA\n parser.startTagPosition = parser.position\n } else if (isQuote(c)) {\n parser.doctype += c\n parser.state = S.DOCTYPE_DTD_QUOTED\n parser.q = c\n } else {\n parser.doctype += c\n }\n continue\n\n case S.DOCTYPE_DTD_QUOTED:\n parser.doctype += c\n if (c === parser.q) {\n parser.state = S.DOCTYPE_DTD\n parser.q = ''\n }\n continue\n\n case S.COMMENT:\n if (c === '-') {\n parser.state = S.COMMENT_ENDING\n } else {\n parser.comment += c\n }\n continue\n\n case S.COMMENT_ENDING:\n if (c === '-') {\n parser.state = S.COMMENT_ENDED\n parser.comment = textopts(parser.opt, parser.comment)\n if (parser.comment) {\n emitNode(parser, 'oncomment', parser.comment)\n }\n parser.comment = ''\n } else {\n parser.comment += '-' + c\n parser.state = S.COMMENT\n }\n continue\n\n case S.COMMENT_ENDED:\n if (c !== '>') {\n strictFail(parser, 'Malformed comment')\n // allow <!-- blah -- bloo --> in non-strict mode,\n // which is a comment of \" blah -- bloo \"\n parser.comment += '--' + c\n parser.state = S.COMMENT\n } else if (parser.doctype && parser.doctype !== true) {\n parser.state = S.DOCTYPE_DTD\n } else {\n parser.state = S.TEXT\n }\n continue\n\n case S.CDATA:\n var starti = i - 1\n while (c && c !== ']') {\n c = charAt(chunk, i++)\n if (c && parser.trackPosition) {\n parser.position++\n if (c === '\\n') {\n parser.line++\n parser.column = 0\n } else {\n parser.column++\n }\n }\n }\n parser.cdata += chunk.substring(starti, i - 1)\n if (c === ']') {\n parser.state = S.CDATA_ENDING\n }\n continue\n\n case S.CDATA_ENDING:\n if (c === ']') {\n parser.state = S.CDATA_ENDING_2\n } else {\n parser.cdata += ']' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.CDATA_ENDING_2:\n if (c === '>') {\n if (parser.cdata) {\n emitNode(parser, 'oncdata', parser.cdata)\n }\n emitNode(parser, 'onclosecdata')\n parser.cdata = ''\n parser.state = S.TEXT\n } else if (c === ']') {\n parser.cdata += ']'\n } else {\n parser.cdata += ']]' + c\n parser.state = S.CDATA\n }\n continue\n\n case S.PROC_INST:\n if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else if (isWhitespace(c)) {\n parser.state = S.PROC_INST_BODY\n } else {\n parser.procInstName += c\n }\n continue\n\n case S.PROC_INST_BODY:\n if (!parser.procInstBody && isWhitespace(c)) {\n continue\n } else if (c === '?') {\n parser.state = S.PROC_INST_ENDING\n } else {\n parser.procInstBody += c\n }\n continue\n\n case S.PROC_INST_ENDING:\n if (c === '>') {\n emitNode(parser, 'onprocessinginstruction', {\n name: parser.procInstName,\n body: parser.procInstBody,\n })\n parser.procInstName = parser.procInstBody = ''\n parser.state = S.TEXT\n } else {\n parser.procInstBody += '?' + c\n parser.state = S.PROC_INST_BODY\n }\n continue\n\n case S.OPEN_TAG:\n if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else {\n newTag(parser)\n if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid character in tag name')\n }\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.OPEN_TAG_SLASH:\n if (c === '>') {\n openTag(parser, true)\n closeTag(parser)\n } else {\n strictFail(\n parser,\n 'Forward-slash in opening tag not followed by >'\n )\n parser.state = S.ATTRIB\n }\n continue\n\n case S.ATTRIB:\n // haven't read the attribute name yet.\n if (isWhitespace(c)) {\n continue\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (c === '>') {\n strictFail(parser, 'Attribute without value')\n parser.attribValue = parser.attribName\n attrib(parser)\n openTag(parser)\n } else if (isWhitespace(c)) {\n parser.state = S.ATTRIB_NAME_SAW_WHITE\n } else if (isMatch(nameBody, c)) {\n parser.attribName += c\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_NAME_SAW_WHITE:\n if (c === '=') {\n parser.state = S.ATTRIB_VALUE\n } else if (isWhitespace(c)) {\n continue\n } else {\n strictFail(parser, 'Attribute without value')\n parser.tag.attributes[parser.attribName] = ''\n parser.attribValue = ''\n emitNode(parser, 'onattribute', {\n name: parser.attribName,\n value: '',\n })\n parser.attribName = ''\n if (c === '>') {\n openTag(parser)\n } else if (isMatch(nameStart, c)) {\n parser.attribName = c\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n parser.state = S.ATTRIB\n }\n }\n continue\n\n case S.ATTRIB_VALUE:\n if (isWhitespace(c)) {\n continue\n } else if (isQuote(c)) {\n parser.q = c\n parser.state = S.ATTRIB_VALUE_QUOTED\n } else {\n if (!parser.opt.unquotedAttributeValues) {\n error(parser, 'Unquoted attribute value')\n }\n parser.state = S.ATTRIB_VALUE_UNQUOTED\n parser.attribValue = c\n }\n continue\n\n case S.ATTRIB_VALUE_QUOTED:\n if (c !== parser.q) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_Q\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n parser.q = ''\n parser.state = S.ATTRIB_VALUE_CLOSED\n continue\n\n case S.ATTRIB_VALUE_CLOSED:\n if (isWhitespace(c)) {\n parser.state = S.ATTRIB\n } else if (c === '>') {\n openTag(parser)\n } else if (c === '/') {\n parser.state = S.OPEN_TAG_SLASH\n } else if (isMatch(nameStart, c)) {\n strictFail(parser, 'No whitespace between attributes')\n parser.attribName = c\n parser.attribValue = ''\n parser.state = S.ATTRIB_NAME\n } else {\n strictFail(parser, 'Invalid attribute name')\n }\n continue\n\n case S.ATTRIB_VALUE_UNQUOTED:\n if (!isAttribEnd(c)) {\n if (c === '&') {\n parser.state = S.ATTRIB_VALUE_ENTITY_U\n } else {\n parser.attribValue += c\n }\n continue\n }\n attrib(parser)\n if (c === '>') {\n openTag(parser)\n } else {\n parser.state = S.ATTRIB\n }\n continue\n\n case S.CLOSE_TAG:\n if (!parser.tagName) {\n if (isWhitespace(c)) {\n continue\n } else if (notMatch(nameStart, c)) {\n if (parser.script) {\n parser.script += '</' + c\n parser.state = S.SCRIPT\n } else {\n strictFail(parser, 'Invalid tagname in closing tag.')\n }\n } else {\n parser.tagName = c\n }\n } else if (c === '>') {\n closeTag(parser)\n } else if (isMatch(nameBody, c)) {\n parser.tagName += c\n } else if (parser.script) {\n parser.script += '</' + parser.tagName + c\n parser.tagName = ''\n parser.state = S.SCRIPT\n } else {\n if (!isWhitespace(c)) {\n strictFail(parser, 'Invalid tagname in closing tag')\n }\n parser.state = S.CLOSE_TAG_SAW_WHITE\n }\n continue\n\n case S.CLOSE_TAG_SAW_WHITE:\n if (isWhitespace(c)) {\n continue\n }\n if (c === '>') {\n closeTag(parser)\n } else {\n strictFail(parser, 'Invalid characters in closing tag')\n }\n continue\n\n case S.TEXT_ENTITY:\n case S.ATTRIB_VALUE_ENTITY_Q:\n case S.ATTRIB_VALUE_ENTITY_U:\n var returnState\n var buffer\n switch (parser.state) {\n case S.TEXT_ENTITY:\n returnState = S.TEXT\n buffer = 'textNode'\n break\n\n case S.ATTRIB_VALUE_ENTITY_Q:\n returnState = S.ATTRIB_VALUE_QUOTED\n buffer = 'attribValue'\n break\n\n case S.ATTRIB_VALUE_ENTITY_U:\n returnState = S.ATTRIB_VALUE_UNQUOTED\n buffer = 'attribValue'\n break\n }\n\n if (c === ';') {\n var parsedEntity = parseEntity(parser)\n if (\n parser.opt.unparsedEntities &&\n !Object.values(sax.XML_ENTITIES).includes(parsedEntity)\n ) {\n parser.entity = ''\n parser.state = returnState\n parser.write(parsedEntity)\n } else {\n parser[buffer] += parsedEntity\n parser.entity = ''\n parser.state = returnState\n }\n } else if (\n isMatch(parser.entity.length ? entityBody : entityStart, c)\n ) {\n parser.entity += c\n } else {\n strictFail(parser, 'Invalid character in entity name')\n parser[buffer] += '&' + parser.entity + c\n parser.entity = ''\n parser.state = returnState\n }\n\n continue\n\n default: /* istanbul ignore next */ {\n throw new Error(parser, 'Unknown state: ' + parser.state)\n }\n }\n } // while\n\n if (parser.position >= parser.bufferCheckPosition) {\n checkBufferLength(parser)\n }\n return parser\n }\n\n /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n /* istanbul ignore next */\n if (!String.fromCodePoint) {\n ;(function () {\n var stringFromCharCode = String.fromCharCode\n var floor = Math.floor\n var fromCodePoint = function () {\n var MAX_SIZE = 0x4000\n var codeUnits = []\n var highSurrogate\n var lowSurrogate\n var index = -1\n var length = arguments.length\n if (!length) {\n return ''\n }\n var result = ''\n while (++index < length) {\n var codePoint = Number(arguments[index])\n if (\n !isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n codePoint < 0 || // not a valid Unicode code point\n codePoint > 0x10ffff || // not a valid Unicode code point\n floor(codePoint) !== codePoint // not an integer\n ) {\n throw RangeError('Invalid code point: ' + codePoint)\n }\n if (codePoint <= 0xffff) {\n // BMP code point\n codeUnits.push(codePoint)\n } else {\n // Astral code point; split in surrogate halves\n // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n codePoint -= 0x10000\n highSurrogate = (codePoint >> 10) + 0xd800\n lowSurrogate = (codePoint % 0x400) + 0xdc00\n codeUnits.push(highSurrogate, lowSurrogate)\n }\n if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n result += stringFromCharCode.apply(null, codeUnits)\n codeUnits.length = 0\n }\n }\n return result\n }\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(String, 'fromCodePoint', {\n value: fromCodePoint,\n configurable: true,\n writable: true,\n })\n } else {\n String.fromCodePoint = fromCodePoint\n }\n })()\n }\n})(typeof exports === 'undefined' ? (this.sax = {}) : exports)\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.XElement = void 0;\nexports.parseXml = parseXml;\nconst sax = require(\"sax\");\nconst error_1 = require(\"./error\");\nclass XElement {\n constructor(name) {\n this.name = name;\n this.value = \"\";\n this.attributes = null;\n this.isCData = false;\n this.elements = null;\n if (!name) {\n throw (0, error_1.newError)(\"Element name cannot be empty\", \"ERR_XML_ELEMENT_NAME_EMPTY\");\n }\n if (!isValidName(name)) {\n throw (0, error_1.newError)(`Invalid element name: ${name}`, \"ERR_XML_ELEMENT_INVALID_NAME\");\n }\n }\n attribute(name) {\n const result = this.attributes === null ? null : this.attributes[name];\n if (result == null) {\n throw (0, error_1.newError)(`No attribute \"${name}\"`, \"ERR_XML_MISSED_ATTRIBUTE\");\n }\n return result;\n }\n removeAttribute(name) {\n if (this.attributes !== null) {\n delete this.attributes[name];\n }\n }\n element(name, ignoreCase = false, errorIfMissed = null) {\n const result = this.elementOrNull(name, ignoreCase);\n if (result === null) {\n throw (0, error_1.newError)(errorIfMissed || `No element \"${name}\"`, \"ERR_XML_MISSED_ELEMENT\");\n }\n return result;\n }\n elementOrNull(name, ignoreCase = false) {\n if (this.elements === null) {\n return null;\n }\n for (const element of this.elements) {\n if (isNameEquals(element, name, ignoreCase)) {\n return element;\n }\n }\n return null;\n }\n getElements(name, ignoreCase = false) {\n if (this.elements === null) {\n return [];\n }\n return this.elements.filter(it => isNameEquals(it, name, ignoreCase));\n }\n elementValueOrEmpty(name, ignoreCase = false) {\n const element = this.elementOrNull(name, ignoreCase);\n return element === null ? \"\" : element.value;\n }\n}\nexports.XElement = XElement;\nconst NAME_REG_EXP = new RegExp(/^[A-Za-z_][:A-Za-z0-9_-]*$/i);\nfunction isValidName(name) {\n return NAME_REG_EXP.test(name);\n}\nfunction isNameEquals(element, name, ignoreCase) {\n const elementName = element.name;\n return elementName === name || (ignoreCase === true && elementName.length === name.length && elementName.toLowerCase() === name.toLowerCase());\n}\nfunction parseXml(data) {\n let rootElement = null;\n const parser = sax.parser(true, {});\n const elements = [];\n parser.onopentag = saxElement => {\n const element = new XElement(saxElement.name);\n element.attributes = saxElement.attributes;\n if (rootElement === null) {\n rootElement = element;\n }\n else {\n const parent = elements[elements.length - 1];\n if (parent.elements == null) {\n parent.elements = [];\n }\n parent.elements.push(element);\n }\n elements.push(element);\n };\n parser.onclosetag = () => {\n elements.pop();\n };\n parser.ontext = text => {\n if (elements.length > 0) {\n elements[elements.length - 1].value = text;\n }\n };\n parser.oncdata = cdata => {\n const element = elements[elements.length - 1];\n element.value = cdata;\n element.isCData = true;\n };\n parser.onerror = err => {\n throw err;\n };\n parser.write(data);\n return rootElement;\n}\n//# sourceMappingURL=xml.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.CURRENT_APP_PACKAGE_FILE_NAME = exports.CURRENT_APP_INSTALLER_FILE_NAME = exports.XElement = exports.parseXml = exports.UUID = exports.parseDn = exports.retry = exports.githubTagPrefix = exports.githubUrl = exports.getS3LikeProviderBaseUrl = exports.ProgressCallbackTransform = exports.MemoLazy = exports.safeStringifyJson = exports.safeGetHeader = exports.parseJson = exports.HttpExecutor = exports.HttpError = exports.DigestTransform = exports.createHttpError = exports.configureRequestUrl = exports.configureRequestOptionsFromUrl = exports.configureRequestOptions = exports.newError = exports.CancellationToken = exports.CancellationError = void 0;\nexports.asArray = asArray;\nvar CancellationToken_1 = require(\"./CancellationToken\");\nObject.defineProperty(exports, \"CancellationError\", { enumerable: true, get: function () { return CancellationToken_1.CancellationError; } });\nObject.defineProperty(exports, \"CancellationToken\", { enumerable: true, get: function () { return CancellationToken_1.CancellationToken; } });\nvar error_1 = require(\"./error\");\nObject.defineProperty(exports, \"newError\", { enumerable: true, get: function () { return error_1.newError; } });\nvar httpExecutor_1 = require(\"./httpExecutor\");\nObject.defineProperty(exports, \"configureRequestOptions\", { enumerable: true, get: function () { return httpExecutor_1.configureRequestOptions; } });\nObject.defineProperty(exports, \"configureRequestOptionsFromUrl\", { enumerable: true, get: function () { return httpExecutor_1.configureRequestOptionsFromUrl; } });\nObject.defineProperty(exports, \"configureRequestUrl\", { enumerable: true, get: function () { return httpExecutor_1.configureRequestUrl; } });\nObject.defineProperty(exports, \"createHttpError\", { enumerable: true, get: function () { return httpExecutor_1.createHttpError; } });\nObject.defineProperty(exports, \"DigestTransform\", { enumerable: true, get: function () { return httpExecutor_1.DigestTransform; } });\nObject.defineProperty(exports, \"HttpError\", { enumerable: true, get: function () { return httpExecutor_1.HttpError; } });\nObject.defineProperty(exports, \"HttpExecutor\", { enumerable: true, get: function () { return httpExecutor_1.HttpExecutor; } });\nObject.defineProperty(exports, \"parseJson\", { enumerable: true, get: function () { return httpExecutor_1.parseJson; } });\nObject.defineProperty(exports, \"safeGetHeader\", { enumerable: true, get: function () { return httpExecutor_1.safeGetHeader; } });\nObject.defineProperty(exports, \"safeStringifyJson\", { enumerable: true, get: function () { return httpExecutor_1.safeStringifyJson; } });\nvar MemoLazy_1 = require(\"./MemoLazy\");\nObject.defineProperty(exports, \"MemoLazy\", { enumerable: true, get: function () { return MemoLazy_1.MemoLazy; } });\nvar ProgressCallbackTransform_1 = require(\"./ProgressCallbackTransform\");\nObject.defineProperty(exports, \"ProgressCallbackTransform\", { enumerable: true, get: function () { return ProgressCallbackTransform_1.ProgressCallbackTransform; } });\nvar publishOptions_1 = require(\"./publishOptions\");\nObject.defineProperty(exports, \"getS3LikeProviderBaseUrl\", { enumerable: true, get: function () { return publishOptions_1.getS3LikeProviderBaseUrl; } });\nObject.defineProperty(exports, \"githubUrl\", { enumerable: true, get: function () { return publishOptions_1.githubUrl; } });\nObject.defineProperty(exports, \"githubTagPrefix\", { enumerable: true, get: function () { return publishOptions_1.githubTagPrefix; } });\nvar retry_1 = require(\"./retry\");\nObject.defineProperty(exports, \"retry\", { enumerable: true, get: function () { return retry_1.retry; } });\nvar rfc2253Parser_1 = require(\"./rfc2253Parser\");\nObject.defineProperty(exports, \"parseDn\", { enumerable: true, get: function () { return rfc2253Parser_1.parseDn; } });\nvar uuid_1 = require(\"./uuid\");\nObject.defineProperty(exports, \"UUID\", { enumerable: true, get: function () { return uuid_1.UUID; } });\nvar xml_1 = require(\"./xml\");\nObject.defineProperty(exports, \"parseXml\", { enumerable: true, get: function () { return xml_1.parseXml; } });\nObject.defineProperty(exports, \"XElement\", { enumerable: true, get: function () { return xml_1.XElement; } });\n// nsis\nexports.CURRENT_APP_INSTALLER_FILE_NAME = \"installer.exe\";\n// nsis-web\nexports.CURRENT_APP_PACKAGE_FILE_NAME = \"package.7z\";\nfunction asArray(v) {\n if (v == null) {\n return [];\n }\n else if (Array.isArray(v)) {\n return v;\n }\n else {\n return [v];\n }\n}\n//# sourceMappingURL=index.js.map","'use strict';\n\n\nfunction isNothing(subject) {\n return (typeof subject === 'undefined') || (subject === null);\n}\n\n\nfunction isObject(subject) {\n return (typeof subject === 'object') && (subject !== null);\n}\n\n\nfunction toArray(sequence) {\n if (Array.isArray(sequence)) return sequence;\n else if (isNothing(sequence)) return [];\n\n return [ sequence ];\n}\n\n\nfunction extend(target, source) {\n var index, length, key, sourceKeys;\n\n if (source) {\n sourceKeys = Object.keys(source);\n\n for (index = 0, length = sourceKeys.length; index < length; index += 1) {\n key = sourceKeys[index];\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\n\nfunction repeat(string, count) {\n var result = '', cycle;\n\n for (cycle = 0; cycle < count; cycle += 1) {\n result += string;\n }\n\n return result;\n}\n\n\nfunction isNegativeZero(number) {\n return (number === 0) && (Number.NEGATIVE_INFINITY === 1 / number);\n}\n\n\nmodule.exports.isNothing = isNothing;\nmodule.exports.isObject = isObject;\nmodule.exports.toArray = toArray;\nmodule.exports.repeat = repeat;\nmodule.exports.isNegativeZero = isNegativeZero;\nmodule.exports.extend = extend;\n","// YAML error class. http://stackoverflow.com/questions/8458984\n//\n'use strict';\n\n\nfunction formatError(exception, compact) {\n var where = '', message = exception.reason || '(unknown reason)';\n\n if (!exception.mark) return message;\n\n if (exception.mark.name) {\n where += 'in \"' + exception.mark.name + '\" ';\n }\n\n where += '(' + (exception.mark.line + 1) + ':' + (exception.mark.column + 1) + ')';\n\n if (!compact && exception.mark.snippet) {\n where += '\\n\\n' + exception.mark.snippet;\n }\n\n return message + ' ' + where;\n}\n\n\nfunction YAMLException(reason, mark) {\n // Super constructor\n Error.call(this);\n\n this.name = 'YAMLException';\n this.reason = reason;\n this.mark = mark;\n this.message = formatError(this, false);\n\n // Include stack trace in error object\n if (Error.captureStackTrace) {\n // Chrome and NodeJS\n Error.captureStackTrace(this, this.constructor);\n } else {\n // FF, IE 10+ and Safari 6+. Fallback for others\n this.stack = (new Error()).stack || '';\n }\n}\n\n\n// Inherit from Error\nYAMLException.prototype = Object.create(Error.prototype);\nYAMLException.prototype.constructor = YAMLException;\n\n\nYAMLException.prototype.toString = function toString(compact) {\n return this.name + ': ' + formatError(this, compact);\n};\n\n\nmodule.exports = YAMLException;\n","'use strict';\n\n\nvar common = require('./common');\n\n\n// get snippet for a single line, respecting maxLength\nfunction getLine(buffer, lineStart, lineEnd, position, maxLineLength) {\n var head = '';\n var tail = '';\n var maxHalfLength = Math.floor(maxLineLength / 2) - 1;\n\n if (position - lineStart > maxHalfLength) {\n head = ' ... ';\n lineStart = position - maxHalfLength + head.length;\n }\n\n if (lineEnd - position > maxHalfLength) {\n tail = ' ...';\n lineEnd = position + maxHalfLength - tail.length;\n }\n\n return {\n str: head + buffer.slice(lineStart, lineEnd).replace(/\\t/g, '→') + tail,\n pos: position - lineStart + head.length // relative position\n };\n}\n\n\nfunction padStart(string, max) {\n return common.repeat(' ', max - string.length) + string;\n}\n\n\nfunction makeSnippet(mark, options) {\n options = Object.create(options || null);\n\n if (!mark.buffer) return null;\n\n if (!options.maxLength) options.maxLength = 79;\n if (typeof options.indent !== 'number') options.indent = 1;\n if (typeof options.linesBefore !== 'number') options.linesBefore = 3;\n if (typeof options.linesAfter !== 'number') options.linesAfter = 2;\n\n var re = /\\r?\\n|\\r|\\0/g;\n var lineStarts = [ 0 ];\n var lineEnds = [];\n var match;\n var foundLineNo = -1;\n\n while ((match = re.exec(mark.buffer))) {\n lineEnds.push(match.index);\n lineStarts.push(match.index + match[0].length);\n\n if (mark.position <= match.index && foundLineNo < 0) {\n foundLineNo = lineStarts.length - 2;\n }\n }\n\n if (foundLineNo < 0) foundLineNo = lineStarts.length - 1;\n\n var result = '', i, line;\n var lineNoLength = Math.min(mark.line + options.linesAfter, lineEnds.length).toString().length;\n var maxLineLength = options.maxLength - (options.indent + lineNoLength + 3);\n\n for (i = 1; i <= options.linesBefore; i++) {\n if (foundLineNo - i < 0) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo - i],\n lineEnds[foundLineNo - i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),\n maxLineLength\n );\n result = common.repeat(' ', options.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n' + result;\n }\n\n line = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);\n result += common.repeat(' ', options.indent) + padStart((mark.line + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n result += common.repeat('-', options.indent + lineNoLength + 3 + line.pos) + '^' + '\\n';\n\n for (i = 1; i <= options.linesAfter; i++) {\n if (foundLineNo + i >= lineEnds.length) break;\n line = getLine(\n mark.buffer,\n lineStarts[foundLineNo + i],\n lineEnds[foundLineNo + i],\n mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),\n maxLineLength\n );\n result += common.repeat(' ', options.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) +\n ' | ' + line.str + '\\n';\n }\n\n return result.replace(/\\n$/, '');\n}\n\n\nmodule.exports = makeSnippet;\n","'use strict';\n\nvar YAMLException = require('./exception');\n\nvar TYPE_CONSTRUCTOR_OPTIONS = [\n 'kind',\n 'multi',\n 'resolve',\n 'construct',\n 'instanceOf',\n 'predicate',\n 'represent',\n 'representName',\n 'defaultStyle',\n 'styleAliases'\n];\n\nvar YAML_NODE_KINDS = [\n 'scalar',\n 'sequence',\n 'mapping'\n];\n\nfunction compileStyleAliases(map) {\n var result = {};\n\n if (map !== null) {\n Object.keys(map).forEach(function (style) {\n map[style].forEach(function (alias) {\n result[String(alias)] = style;\n });\n });\n }\n\n return result;\n}\n\nfunction Type(tag, options) {\n options = options || {};\n\n Object.keys(options).forEach(function (name) {\n if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {\n throw new YAMLException('Unknown option \"' + name + '\" is met in definition of \"' + tag + '\" YAML type.');\n }\n });\n\n // TODO: Add tag format check.\n this.options = options; // keep original options in case user wants to extend this type later\n this.tag = tag;\n this.kind = options['kind'] || null;\n this.resolve = options['resolve'] || function () { return true; };\n this.construct = options['construct'] || function (data) { return data; };\n this.instanceOf = options['instanceOf'] || null;\n this.predicate = options['predicate'] || null;\n this.represent = options['represent'] || null;\n this.representName = options['representName'] || null;\n this.defaultStyle = options['defaultStyle'] || null;\n this.multi = options['multi'] || false;\n this.styleAliases = compileStyleAliases(options['styleAliases'] || null);\n\n if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {\n throw new YAMLException('Unknown kind \"' + this.kind + '\" is specified for \"' + tag + '\" YAML type.');\n }\n}\n\nmodule.exports = Type;\n","'use strict';\n\n/*eslint-disable max-len*/\n\nvar YAMLException = require('./exception');\nvar Type = require('./type');\n\n\nfunction compileList(schema, name) {\n var result = [];\n\n schema[name].forEach(function (currentType) {\n var newIndex = result.length;\n\n result.forEach(function (previousType, previousIndex) {\n if (previousType.tag === currentType.tag &&\n previousType.kind === currentType.kind &&\n previousType.multi === currentType.multi) {\n\n newIndex = previousIndex;\n }\n });\n\n result[newIndex] = currentType;\n });\n\n return result;\n}\n\n\nfunction compileMap(/* lists... */) {\n var result = {\n scalar: {},\n sequence: {},\n mapping: {},\n fallback: {},\n multi: {\n scalar: [],\n sequence: [],\n mapping: [],\n fallback: []\n }\n }, index, length;\n\n function collectType(type) {\n if (type.multi) {\n result.multi[type.kind].push(type);\n result.multi['fallback'].push(type);\n } else {\n result[type.kind][type.tag] = result['fallback'][type.tag] = type;\n }\n }\n\n for (index = 0, length = arguments.length; index < length; index += 1) {\n arguments[index].forEach(collectType);\n }\n return result;\n}\n\n\nfunction Schema(definition) {\n return this.extend(definition);\n}\n\n\nSchema.prototype.extend = function extend(definition) {\n var implicit = [];\n var explicit = [];\n\n if (definition instanceof Type) {\n // Schema.extend(type)\n explicit.push(definition);\n\n } else if (Array.isArray(definition)) {\n // Schema.extend([ type1, type2, ... ])\n explicit = explicit.concat(definition);\n\n } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {\n // Schema.extend({ explicit: [ type1, type2, ... ], implicit: [ type1, type2, ... ] })\n if (definition.implicit) implicit = implicit.concat(definition.implicit);\n if (definition.explicit) explicit = explicit.concat(definition.explicit);\n\n } else {\n throw new YAMLException('Schema.extend argument should be a Type, [ Type ], ' +\n 'or a schema definition ({ implicit: [...], explicit: [...] })');\n }\n\n implicit.forEach(function (type) {\n if (!(type instanceof Type)) {\n throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n\n if (type.loadKind && type.loadKind !== 'scalar') {\n throw new YAMLException('There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.');\n }\n\n if (type.multi) {\n throw new YAMLException('There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.');\n }\n });\n\n explicit.forEach(function (type) {\n if (!(type instanceof Type)) {\n throw new YAMLException('Specified list of YAML types (or a single Type object) contains a non-Type object.');\n }\n });\n\n var result = Object.create(Schema.prototype);\n\n result.implicit = (this.implicit || []).concat(implicit);\n result.explicit = (this.explicit || []).concat(explicit);\n\n result.compiledImplicit = compileList(result, 'implicit');\n result.compiledExplicit = compileList(result, 'explicit');\n result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);\n\n return result;\n};\n\n\nmodule.exports = Schema;\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:str', {\n kind: 'scalar',\n construct: function (data) { return data !== null ? data : ''; }\n});\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:seq', {\n kind: 'sequence',\n construct: function (data) { return data !== null ? data : []; }\n});\n","'use strict';\n\nvar Type = require('../type');\n\nmodule.exports = new Type('tag:yaml.org,2002:map', {\n kind: 'mapping',\n construct: function (data) { return data !== null ? data : {}; }\n});\n","// Standard YAML's Failsafe schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2802346\n\n\n'use strict';\n\n\nvar Schema = require('../schema');\n\n\nmodule.exports = new Schema({\n explicit: [\n require('../type/str'),\n require('../type/seq'),\n require('../type/map')\n ]\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlNull(data) {\n if (data === null) return true;\n\n var max = data.length;\n\n return (max === 1 && data === '~') ||\n (max === 4 && (data === 'null' || data === 'Null' || data === 'NULL'));\n}\n\nfunction constructYamlNull() {\n return null;\n}\n\nfunction isNull(object) {\n return object === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:null', {\n kind: 'scalar',\n resolve: resolveYamlNull,\n construct: constructYamlNull,\n predicate: isNull,\n represent: {\n canonical: function () { return '~'; },\n lowercase: function () { return 'null'; },\n uppercase: function () { return 'NULL'; },\n camelcase: function () { return 'Null'; },\n empty: function () { return ''; }\n },\n defaultStyle: 'lowercase'\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlBoolean(data) {\n if (data === null) return false;\n\n var max = data.length;\n\n return (max === 4 && (data === 'true' || data === 'True' || data === 'TRUE')) ||\n (max === 5 && (data === 'false' || data === 'False' || data === 'FALSE'));\n}\n\nfunction constructYamlBoolean(data) {\n return data === 'true' ||\n data === 'True' ||\n data === 'TRUE';\n}\n\nfunction isBoolean(object) {\n return Object.prototype.toString.call(object) === '[object Boolean]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:bool', {\n kind: 'scalar',\n resolve: resolveYamlBoolean,\n construct: constructYamlBoolean,\n predicate: isBoolean,\n represent: {\n lowercase: function (object) { return object ? 'true' : 'false'; },\n uppercase: function (object) { return object ? 'TRUE' : 'FALSE'; },\n camelcase: function (object) { return object ? 'True' : 'False'; }\n },\n defaultStyle: 'lowercase'\n});\n","'use strict';\n\nvar common = require('../common');\nvar Type = require('../type');\n\nfunction isHexCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) ||\n ((0x41/* A */ <= c) && (c <= 0x46/* F */)) ||\n ((0x61/* a */ <= c) && (c <= 0x66/* f */));\n}\n\nfunction isOctCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x37/* 7 */));\n}\n\nfunction isDecCode(c) {\n return ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */));\n}\n\nfunction resolveYamlInteger(data) {\n if (data === null) return false;\n\n var max = data.length,\n index = 0,\n hasDigits = false,\n ch;\n\n if (!max) return false;\n\n ch = data[index];\n\n // sign\n if (ch === '-' || ch === '+') {\n ch = data[++index];\n }\n\n if (ch === '0') {\n // 0\n if (index + 1 === max) return true;\n ch = data[++index];\n\n // base 2, base 8, base 16\n\n if (ch === 'b') {\n // base 2\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (ch !== '0' && ch !== '1') return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'x') {\n // base 16\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isHexCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n\n\n if (ch === 'o') {\n // base 8\n index++;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isOctCode(data.charCodeAt(index))) return false;\n hasDigits = true;\n }\n return hasDigits && ch !== '_';\n }\n }\n\n // base 10 (except 0)\n\n // value should not start with `_`;\n if (ch === '_') return false;\n\n for (; index < max; index++) {\n ch = data[index];\n if (ch === '_') continue;\n if (!isDecCode(data.charCodeAt(index))) {\n return false;\n }\n hasDigits = true;\n }\n\n // Should have digits and should not end with `_`\n if (!hasDigits || ch === '_') return false;\n\n return true;\n}\n\nfunction constructYamlInteger(data) {\n var value = data, sign = 1, ch;\n\n if (value.indexOf('_') !== -1) {\n value = value.replace(/_/g, '');\n }\n\n ch = value[0];\n\n if (ch === '-' || ch === '+') {\n if (ch === '-') sign = -1;\n value = value.slice(1);\n ch = value[0];\n }\n\n if (value === '0') return 0;\n\n if (ch === '0') {\n if (value[1] === 'b') return sign * parseInt(value.slice(2), 2);\n if (value[1] === 'x') return sign * parseInt(value.slice(2), 16);\n if (value[1] === 'o') return sign * parseInt(value.slice(2), 8);\n }\n\n return sign * parseInt(value, 10);\n}\n\nfunction isInteger(object) {\n return (Object.prototype.toString.call(object)) === '[object Number]' &&\n (object % 1 === 0 && !common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:int', {\n kind: 'scalar',\n resolve: resolveYamlInteger,\n construct: constructYamlInteger,\n predicate: isInteger,\n represent: {\n binary: function (obj) { return obj >= 0 ? '0b' + obj.toString(2) : '-0b' + obj.toString(2).slice(1); },\n octal: function (obj) { return obj >= 0 ? '0o' + obj.toString(8) : '-0o' + obj.toString(8).slice(1); },\n decimal: function (obj) { return obj.toString(10); },\n /* eslint-disable max-len */\n hexadecimal: function (obj) { return obj >= 0 ? '0x' + obj.toString(16).toUpperCase() : '-0x' + obj.toString(16).toUpperCase().slice(1); }\n },\n defaultStyle: 'decimal',\n styleAliases: {\n binary: [ 2, 'bin' ],\n octal: [ 8, 'oct' ],\n decimal: [ 10, 'dec' ],\n hexadecimal: [ 16, 'hex' ]\n }\n});\n","'use strict';\n\nvar common = require('../common');\nvar Type = require('../type');\n\nvar YAML_FLOAT_PATTERN = new RegExp(\n // 2.5e4, 2.5 and integers\n '^(?:[-+]?(?:[0-9][0-9_]*)(?:\\\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?' +\n // .2e4, .2\n // special case, seems not from spec\n '|\\\\.[0-9_]+(?:[eE][-+]?[0-9]+)?' +\n // .inf\n '|[-+]?\\\\.(?:inf|Inf|INF)' +\n // .nan\n '|\\\\.(?:nan|NaN|NAN))$');\n\nfunction resolveYamlFloat(data) {\n if (data === null) return false;\n\n if (!YAML_FLOAT_PATTERN.test(data) ||\n // Quick hack to not allow integers end with `_`\n // Probably should update regexp & check speed\n data[data.length - 1] === '_') {\n return false;\n }\n\n return true;\n}\n\nfunction constructYamlFloat(data) {\n var value, sign;\n\n value = data.replace(/_/g, '').toLowerCase();\n sign = value[0] === '-' ? -1 : 1;\n\n if ('+-'.indexOf(value[0]) >= 0) {\n value = value.slice(1);\n }\n\n if (value === '.inf') {\n return (sign === 1) ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;\n\n } else if (value === '.nan') {\n return NaN;\n }\n return sign * parseFloat(value, 10);\n}\n\n\nvar SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;\n\nfunction representYamlFloat(object, style) {\n var res;\n\n if (isNaN(object)) {\n switch (style) {\n case 'lowercase': return '.nan';\n case 'uppercase': return '.NAN';\n case 'camelcase': return '.NaN';\n }\n } else if (Number.POSITIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '.inf';\n case 'uppercase': return '.INF';\n case 'camelcase': return '.Inf';\n }\n } else if (Number.NEGATIVE_INFINITY === object) {\n switch (style) {\n case 'lowercase': return '-.inf';\n case 'uppercase': return '-.INF';\n case 'camelcase': return '-.Inf';\n }\n } else if (common.isNegativeZero(object)) {\n return '-0.0';\n }\n\n res = object.toString(10);\n\n // JS stringifier can build scientific format without dots: 5e-100,\n // while YAML requres dot: 5.e-100. Fix it with simple hack\n\n return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace('e', '.e') : res;\n}\n\nfunction isFloat(object) {\n return (Object.prototype.toString.call(object) === '[object Number]') &&\n (object % 1 !== 0 || common.isNegativeZero(object));\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:float', {\n kind: 'scalar',\n resolve: resolveYamlFloat,\n construct: constructYamlFloat,\n predicate: isFloat,\n represent: representYamlFloat,\n defaultStyle: 'lowercase'\n});\n","// Standard YAML's JSON schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2803231\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, this schema is not such strict as defined in the YAML specification.\n// It allows numbers in binary notaion, use `Null` and `NULL` as `null`, etc.\n\n\n'use strict';\n\n\nmodule.exports = require('./failsafe').extend({\n implicit: [\n require('../type/null'),\n require('../type/bool'),\n require('../type/int'),\n require('../type/float')\n ]\n});\n","// Standard YAML's Core schema.\n// http://www.yaml.org/spec/1.2/spec.html#id2804923\n//\n// NOTE: JS-YAML does not support schema-specific tag resolution restrictions.\n// So, Core schema has no distinctions from JSON schema is JS-YAML.\n\n\n'use strict';\n\n\nmodule.exports = require('./json');\n","'use strict';\n\nvar Type = require('../type');\n\nvar YAML_DATE_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9])' + // [2] month\n '-([0-9][0-9])$'); // [3] day\n\nvar YAML_TIMESTAMP_REGEXP = new RegExp(\n '^([0-9][0-9][0-9][0-9])' + // [1] year\n '-([0-9][0-9]?)' + // [2] month\n '-([0-9][0-9]?)' + // [3] day\n '(?:[Tt]|[ \\\\t]+)' + // ...\n '([0-9][0-9]?)' + // [4] hour\n ':([0-9][0-9])' + // [5] minute\n ':([0-9][0-9])' + // [6] second\n '(?:\\\\.([0-9]*))?' + // [7] fraction\n '(?:[ \\\\t]*(Z|([-+])([0-9][0-9]?)' + // [8] tz [9] tz_sign [10] tz_hour\n '(?::([0-9][0-9]))?))?$'); // [11] tz_minute\n\nfunction resolveYamlTimestamp(data) {\n if (data === null) return false;\n if (YAML_DATE_REGEXP.exec(data) !== null) return true;\n if (YAML_TIMESTAMP_REGEXP.exec(data) !== null) return true;\n return false;\n}\n\nfunction constructYamlTimestamp(data) {\n var match, year, month, day, hour, minute, second, fraction = 0,\n delta = null, tz_hour, tz_minute, date;\n\n match = YAML_DATE_REGEXP.exec(data);\n if (match === null) match = YAML_TIMESTAMP_REGEXP.exec(data);\n\n if (match === null) throw new Error('Date resolve error');\n\n // match: [1] year [2] month [3] day\n\n year = +(match[1]);\n month = +(match[2]) - 1; // JS month starts with 0\n day = +(match[3]);\n\n if (!match[4]) { // no hour\n return new Date(Date.UTC(year, month, day));\n }\n\n // match: [4] hour [5] minute [6] second [7] fraction\n\n hour = +(match[4]);\n minute = +(match[5]);\n second = +(match[6]);\n\n if (match[7]) {\n fraction = match[7].slice(0, 3);\n while (fraction.length < 3) { // milli-seconds\n fraction += '0';\n }\n fraction = +fraction;\n }\n\n // match: [8] tz [9] tz_sign [10] tz_hour [11] tz_minute\n\n if (match[9]) {\n tz_hour = +(match[10]);\n tz_minute = +(match[11] || 0);\n delta = (tz_hour * 60 + tz_minute) * 60000; // delta in mili-seconds\n if (match[9] === '-') delta = -delta;\n }\n\n date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));\n\n if (delta) date.setTime(date.getTime() - delta);\n\n return date;\n}\n\nfunction representYamlTimestamp(object /*, style*/) {\n return object.toISOString();\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:timestamp', {\n kind: 'scalar',\n resolve: resolveYamlTimestamp,\n construct: constructYamlTimestamp,\n instanceOf: Date,\n represent: representYamlTimestamp\n});\n","'use strict';\n\nvar Type = require('../type');\n\nfunction resolveYamlMerge(data) {\n return data === '<<' || data === null;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:merge', {\n kind: 'scalar',\n resolve: resolveYamlMerge\n});\n","'use strict';\n\n/*eslint-disable no-bitwise*/\n\n\nvar Type = require('../type');\n\n\n// [ 64, 65, 66 ] -> [ padding, CR, LF ]\nvar BASE64_MAP = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\\n\\r';\n\n\nfunction resolveYamlBinary(data) {\n if (data === null) return false;\n\n var code, idx, bitlen = 0, max = data.length, map = BASE64_MAP;\n\n // Convert one by one.\n for (idx = 0; idx < max; idx++) {\n code = map.indexOf(data.charAt(idx));\n\n // Skip CR/LF\n if (code > 64) continue;\n\n // Fail on illegal characters\n if (code < 0) return false;\n\n bitlen += 6;\n }\n\n // If there are any bits left, source was corrupted\n return (bitlen % 8) === 0;\n}\n\nfunction constructYamlBinary(data) {\n var idx, tailbits,\n input = data.replace(/[\\r\\n=]/g, ''), // remove CR/LF & padding to simplify scan\n max = input.length,\n map = BASE64_MAP,\n bits = 0,\n result = [];\n\n // Collect by 6*4 bits (3 bytes)\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 4 === 0) && idx) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n }\n\n bits = (bits << 6) | map.indexOf(input.charAt(idx));\n }\n\n // Dump tail\n\n tailbits = (max % 4) * 6;\n\n if (tailbits === 0) {\n result.push((bits >> 16) & 0xFF);\n result.push((bits >> 8) & 0xFF);\n result.push(bits & 0xFF);\n } else if (tailbits === 18) {\n result.push((bits >> 10) & 0xFF);\n result.push((bits >> 2) & 0xFF);\n } else if (tailbits === 12) {\n result.push((bits >> 4) & 0xFF);\n }\n\n return new Uint8Array(result);\n}\n\nfunction representYamlBinary(object /*, style*/) {\n var result = '', bits = 0, idx, tail,\n max = object.length,\n map = BASE64_MAP;\n\n // Convert every three bytes to 4 ASCII characters.\n\n for (idx = 0; idx < max; idx++) {\n if ((idx % 3 === 0) && idx) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n }\n\n bits = (bits << 8) + object[idx];\n }\n\n // Dump tail\n\n tail = max % 3;\n\n if (tail === 0) {\n result += map[(bits >> 18) & 0x3F];\n result += map[(bits >> 12) & 0x3F];\n result += map[(bits >> 6) & 0x3F];\n result += map[bits & 0x3F];\n } else if (tail === 2) {\n result += map[(bits >> 10) & 0x3F];\n result += map[(bits >> 4) & 0x3F];\n result += map[(bits << 2) & 0x3F];\n result += map[64];\n } else if (tail === 1) {\n result += map[(bits >> 2) & 0x3F];\n result += map[(bits << 4) & 0x3F];\n result += map[64];\n result += map[64];\n }\n\n return result;\n}\n\nfunction isBinary(obj) {\n return Object.prototype.toString.call(obj) === '[object Uint8Array]';\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:binary', {\n kind: 'scalar',\n resolve: resolveYamlBinary,\n construct: constructYamlBinary,\n predicate: isBinary,\n represent: representYamlBinary\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlOmap(data) {\n if (data === null) return true;\n\n var objectKeys = [], index, length, pair, pairKey, pairHasKey,\n object = data;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n pairHasKey = false;\n\n if (_toString.call(pair) !== '[object Object]') return false;\n\n for (pairKey in pair) {\n if (_hasOwnProperty.call(pair, pairKey)) {\n if (!pairHasKey) pairHasKey = true;\n else return false;\n }\n }\n\n if (!pairHasKey) return false;\n\n if (objectKeys.indexOf(pairKey) === -1) objectKeys.push(pairKey);\n else return false;\n }\n\n return true;\n}\n\nfunction constructYamlOmap(data) {\n return data !== null ? data : [];\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:omap', {\n kind: 'sequence',\n resolve: resolveYamlOmap,\n construct: constructYamlOmap\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _toString = Object.prototype.toString;\n\nfunction resolveYamlPairs(data) {\n if (data === null) return true;\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n if (_toString.call(pair) !== '[object Object]') return false;\n\n keys = Object.keys(pair);\n\n if (keys.length !== 1) return false;\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return true;\n}\n\nfunction constructYamlPairs(data) {\n if (data === null) return [];\n\n var index, length, pair, keys, result,\n object = data;\n\n result = new Array(object.length);\n\n for (index = 0, length = object.length; index < length; index += 1) {\n pair = object[index];\n\n keys = Object.keys(pair);\n\n result[index] = [ keys[0], pair[keys[0]] ];\n }\n\n return result;\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:pairs', {\n kind: 'sequence',\n resolve: resolveYamlPairs,\n construct: constructYamlPairs\n});\n","'use strict';\n\nvar Type = require('../type');\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction resolveYamlSet(data) {\n if (data === null) return true;\n\n var key, object = data;\n\n for (key in object) {\n if (_hasOwnProperty.call(object, key)) {\n if (object[key] !== null) return false;\n }\n }\n\n return true;\n}\n\nfunction constructYamlSet(data) {\n return data !== null ? data : {};\n}\n\nmodule.exports = new Type('tag:yaml.org,2002:set', {\n kind: 'mapping',\n resolve: resolveYamlSet,\n construct: constructYamlSet\n});\n","// JS-YAML's default schema for `safeLoad` function.\n// It is not described in the YAML specification.\n//\n// This schema is based on standard YAML's Core schema and includes most of\n// extra types described at YAML tag repository. (http://yaml.org/type/)\n\n\n'use strict';\n\n\nmodule.exports = require('./core').extend({\n implicit: [\n require('../type/timestamp'),\n require('../type/merge')\n ],\n explicit: [\n require('../type/binary'),\n require('../type/omap'),\n require('../type/pairs'),\n require('../type/set')\n ]\n});\n","'use strict';\n\n/*eslint-disable max-len,no-use-before-define*/\n\nvar common = require('./common');\nvar YAMLException = require('./exception');\nvar makeSnippet = require('./snippet');\nvar DEFAULT_SCHEMA = require('./schema/default');\n\n\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\n\nvar CONTEXT_FLOW_IN = 1;\nvar CONTEXT_FLOW_OUT = 2;\nvar CONTEXT_BLOCK_IN = 3;\nvar CONTEXT_BLOCK_OUT = 4;\n\n\nvar CHOMPING_CLIP = 1;\nvar CHOMPING_STRIP = 2;\nvar CHOMPING_KEEP = 3;\n\n\nvar PATTERN_NON_PRINTABLE = /[\\x00-\\x08\\x0B\\x0C\\x0E-\\x1F\\x7F-\\x84\\x86-\\x9F\\uFFFE\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]/;\nvar PATTERN_NON_ASCII_LINE_BREAKS = /[\\x85\\u2028\\u2029]/;\nvar PATTERN_FLOW_INDICATORS = /[,\\[\\]\\{\\}]/;\nvar PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\\-]+!)$/i;\nvar PATTERN_TAG_URI = /^(?:!|[^,\\[\\]\\{\\}])(?:%[0-9a-f]{2}|[0-9a-z\\-#;\\/\\?:@&=\\+\\$,_\\.!~\\*'\\(\\)\\[\\]])*$/i;\n\n\nfunction _class(obj) { return Object.prototype.toString.call(obj); }\n\nfunction is_EOL(c) {\n return (c === 0x0A/* LF */) || (c === 0x0D/* CR */);\n}\n\nfunction is_WHITE_SPACE(c) {\n return (c === 0x09/* Tab */) || (c === 0x20/* Space */);\n}\n\nfunction is_WS_OR_EOL(c) {\n return (c === 0x09/* Tab */) ||\n (c === 0x20/* Space */) ||\n (c === 0x0A/* LF */) ||\n (c === 0x0D/* CR */);\n}\n\nfunction is_FLOW_INDICATOR(c) {\n return c === 0x2C/* , */ ||\n c === 0x5B/* [ */ ||\n c === 0x5D/* ] */ ||\n c === 0x7B/* { */ ||\n c === 0x7D/* } */;\n}\n\nfunction fromHexCode(c) {\n var lc;\n\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n /*eslint-disable no-bitwise*/\n lc = c | 0x20;\n\n if ((0x61/* a */ <= lc) && (lc <= 0x66/* f */)) {\n return lc - 0x61 + 10;\n }\n\n return -1;\n}\n\nfunction escapedHexLen(c) {\n if (c === 0x78/* x */) { return 2; }\n if (c === 0x75/* u */) { return 4; }\n if (c === 0x55/* U */) { return 8; }\n return 0;\n}\n\nfunction fromDecimalCode(c) {\n if ((0x30/* 0 */ <= c) && (c <= 0x39/* 9 */)) {\n return c - 0x30;\n }\n\n return -1;\n}\n\nfunction simpleEscapeSequence(c) {\n /* eslint-disable indent */\n return (c === 0x30/* 0 */) ? '\\x00' :\n (c === 0x61/* a */) ? '\\x07' :\n (c === 0x62/* b */) ? '\\x08' :\n (c === 0x74/* t */) ? '\\x09' :\n (c === 0x09/* Tab */) ? '\\x09' :\n (c === 0x6E/* n */) ? '\\x0A' :\n (c === 0x76/* v */) ? '\\x0B' :\n (c === 0x66/* f */) ? '\\x0C' :\n (c === 0x72/* r */) ? '\\x0D' :\n (c === 0x65/* e */) ? '\\x1B' :\n (c === 0x20/* Space */) ? ' ' :\n (c === 0x22/* \" */) ? '\\x22' :\n (c === 0x2F/* / */) ? '/' :\n (c === 0x5C/* \\ */) ? '\\x5C' :\n (c === 0x4E/* N */) ? '\\x85' :\n (c === 0x5F/* _ */) ? '\\xA0' :\n (c === 0x4C/* L */) ? '\\u2028' :\n (c === 0x50/* P */) ? '\\u2029' : '';\n}\n\nfunction charFromCodepoint(c) {\n if (c <= 0xFFFF) {\n return String.fromCharCode(c);\n }\n // Encode UTF-16 surrogate pair\n // https://en.wikipedia.org/wiki/UTF-16#Code_points_U.2B010000_to_U.2B10FFFF\n return String.fromCharCode(\n ((c - 0x010000) >> 10) + 0xD800,\n ((c - 0x010000) & 0x03FF) + 0xDC00\n );\n}\n\n// set a property of a literal object, while protecting against prototype pollution,\n// see https://github.com/nodeca/js-yaml/issues/164 for more details\nfunction setProperty(object, key, value) {\n // used for this specific key only because Object.defineProperty is slow\n if (key === '__proto__') {\n Object.defineProperty(object, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: value\n });\n } else {\n object[key] = value;\n }\n}\n\nvar simpleEscapeCheck = new Array(256); // integer, for fast access\nvar simpleEscapeMap = new Array(256);\nfor (var i = 0; i < 256; i++) {\n simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;\n simpleEscapeMap[i] = simpleEscapeSequence(i);\n}\n\n\nfunction State(input, options) {\n this.input = input;\n\n this.filename = options['filename'] || null;\n this.schema = options['schema'] || DEFAULT_SCHEMA;\n this.onWarning = options['onWarning'] || null;\n // (Hidden) Remove? makes the loader to expect YAML 1.1 documents\n // if such documents have no explicit %YAML directive\n this.legacy = options['legacy'] || false;\n\n this.json = options['json'] || false;\n this.listener = options['listener'] || null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.typeMap = this.schema.compiledTypeMap;\n\n this.length = input.length;\n this.position = 0;\n this.line = 0;\n this.lineStart = 0;\n this.lineIndent = 0;\n\n // position of first leading tab in the current line,\n // used to make sure there are no tabs in the indentation\n this.firstTabInLine = -1;\n\n this.documents = [];\n\n /*\n this.version;\n this.checkLineBreaks;\n this.tagMap;\n this.anchorMap;\n this.tag;\n this.anchor;\n this.kind;\n this.result;*/\n\n}\n\n\nfunction generateError(state, message) {\n var mark = {\n name: state.filename,\n buffer: state.input.slice(0, -1), // omit trailing \\0\n position: state.position,\n line: state.line,\n column: state.position - state.lineStart\n };\n\n mark.snippet = makeSnippet(mark);\n\n return new YAMLException(message, mark);\n}\n\nfunction throwError(state, message) {\n throw generateError(state, message);\n}\n\nfunction throwWarning(state, message) {\n if (state.onWarning) {\n state.onWarning.call(null, generateError(state, message));\n }\n}\n\n\nvar directiveHandlers = {\n\n YAML: function handleYamlDirective(state, name, args) {\n\n var match, major, minor;\n\n if (state.version !== null) {\n throwError(state, 'duplication of %YAML directive');\n }\n\n if (args.length !== 1) {\n throwError(state, 'YAML directive accepts exactly one argument');\n }\n\n match = /^([0-9]+)\\.([0-9]+)$/.exec(args[0]);\n\n if (match === null) {\n throwError(state, 'ill-formed argument of the YAML directive');\n }\n\n major = parseInt(match[1], 10);\n minor = parseInt(match[2], 10);\n\n if (major !== 1) {\n throwError(state, 'unacceptable YAML version of the document');\n }\n\n state.version = args[0];\n state.checkLineBreaks = (minor < 2);\n\n if (minor !== 1 && minor !== 2) {\n throwWarning(state, 'unsupported YAML version of the document');\n }\n },\n\n TAG: function handleTagDirective(state, name, args) {\n\n var handle, prefix;\n\n if (args.length !== 2) {\n throwError(state, 'TAG directive accepts exactly two arguments');\n }\n\n handle = args[0];\n prefix = args[1];\n\n if (!PATTERN_TAG_HANDLE.test(handle)) {\n throwError(state, 'ill-formed tag handle (first argument) of the TAG directive');\n }\n\n if (_hasOwnProperty.call(state.tagMap, handle)) {\n throwError(state, 'there is a previously declared suffix for \"' + handle + '\" tag handle');\n }\n\n if (!PATTERN_TAG_URI.test(prefix)) {\n throwError(state, 'ill-formed tag prefix (second argument) of the TAG directive');\n }\n\n try {\n prefix = decodeURIComponent(prefix);\n } catch (err) {\n throwError(state, 'tag prefix is malformed: ' + prefix);\n }\n\n state.tagMap[handle] = prefix;\n }\n};\n\n\nfunction captureSegment(state, start, end, checkJson) {\n var _position, _length, _character, _result;\n\n if (start < end) {\n _result = state.input.slice(start, end);\n\n if (checkJson) {\n for (_position = 0, _length = _result.length; _position < _length; _position += 1) {\n _character = _result.charCodeAt(_position);\n if (!(_character === 0x09 ||\n (0x20 <= _character && _character <= 0x10FFFF))) {\n throwError(state, 'expected valid JSON character');\n }\n }\n } else if (PATTERN_NON_PRINTABLE.test(_result)) {\n throwError(state, 'the stream contains non-printable characters');\n }\n\n state.result += _result;\n }\n}\n\nfunction mergeMappings(state, destination, source, overridableKeys) {\n var sourceKeys, key, index, quantity;\n\n if (!common.isObject(source)) {\n throwError(state, 'cannot merge mappings; the provided source object is unacceptable');\n }\n\n sourceKeys = Object.keys(source);\n\n for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {\n key = sourceKeys[index];\n\n if (!_hasOwnProperty.call(destination, key)) {\n setProperty(destination, key, source[key]);\n overridableKeys[key] = true;\n }\n }\n}\n\nfunction storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode,\n startLine, startLineStart, startPos) {\n\n var index, quantity;\n\n // The output is a plain object here, so keys can only be strings.\n // We need to convert keyNode to a string, but doing so can hang the process\n // (deeply nested arrays that explode exponentially using aliases).\n if (Array.isArray(keyNode)) {\n keyNode = Array.prototype.slice.call(keyNode);\n\n for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {\n if (Array.isArray(keyNode[index])) {\n throwError(state, 'nested arrays are not supported inside keys');\n }\n\n if (typeof keyNode === 'object' && _class(keyNode[index]) === '[object Object]') {\n keyNode[index] = '[object Object]';\n }\n }\n }\n\n // Avoid code execution in load() via toString property\n // (still use its own toString for arrays, timestamps,\n // and whatever user schema extensions happen to have @@toStringTag)\n if (typeof keyNode === 'object' && _class(keyNode) === '[object Object]') {\n keyNode = '[object Object]';\n }\n\n\n keyNode = String(keyNode);\n\n if (_result === null) {\n _result = {};\n }\n\n if (keyTag === 'tag:yaml.org,2002:merge') {\n if (Array.isArray(valueNode)) {\n for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {\n mergeMappings(state, _result, valueNode[index], overridableKeys);\n }\n } else {\n mergeMappings(state, _result, valueNode, overridableKeys);\n }\n } else {\n if (!state.json &&\n !_hasOwnProperty.call(overridableKeys, keyNode) &&\n _hasOwnProperty.call(_result, keyNode)) {\n state.line = startLine || state.line;\n state.lineStart = startLineStart || state.lineStart;\n state.position = startPos || state.position;\n throwError(state, 'duplicated mapping key');\n }\n\n setProperty(_result, keyNode, valueNode);\n delete overridableKeys[keyNode];\n }\n\n return _result;\n}\n\nfunction readLineBreak(state) {\n var ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x0A/* LF */) {\n state.position++;\n } else if (ch === 0x0D/* CR */) {\n state.position++;\n if (state.input.charCodeAt(state.position) === 0x0A/* LF */) {\n state.position++;\n }\n } else {\n throwError(state, 'a line break is expected');\n }\n\n state.line += 1;\n state.lineStart = state.position;\n state.firstTabInLine = -1;\n}\n\nfunction skipSeparationSpace(state, allowComments, checkIndent) {\n var lineBreaks = 0,\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n if (ch === 0x09/* Tab */ && state.firstTabInLine === -1) {\n state.firstTabInLine = state.position;\n }\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (allowComments && ch === 0x23/* # */) {\n do {\n ch = state.input.charCodeAt(++state.position);\n } while (ch !== 0x0A/* LF */ && ch !== 0x0D/* CR */ && ch !== 0);\n }\n\n if (is_EOL(ch)) {\n readLineBreak(state);\n\n ch = state.input.charCodeAt(state.position);\n lineBreaks++;\n state.lineIndent = 0;\n\n while (ch === 0x20/* Space */) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n } else {\n break;\n }\n }\n\n if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {\n throwWarning(state, 'deficient indentation');\n }\n\n return lineBreaks;\n}\n\nfunction testDocumentSeparator(state) {\n var _position = state.position,\n ch;\n\n ch = state.input.charCodeAt(_position);\n\n // Condition state.position === state.lineStart is tested\n // in parent on each call, for efficiency. No needs to test here again.\n if ((ch === 0x2D/* - */ || ch === 0x2E/* . */) &&\n ch === state.input.charCodeAt(_position + 1) &&\n ch === state.input.charCodeAt(_position + 2)) {\n\n _position += 3;\n\n ch = state.input.charCodeAt(_position);\n\n if (ch === 0 || is_WS_OR_EOL(ch)) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction writeFoldedLines(state, count) {\n if (count === 1) {\n state.result += ' ';\n } else if (count > 1) {\n state.result += common.repeat('\\n', count - 1);\n }\n}\n\n\nfunction readPlainScalar(state, nodeIndent, withinFlowCollection) {\n var preceding,\n following,\n captureStart,\n captureEnd,\n hasPendingContent,\n _line,\n _lineStart,\n _lineIndent,\n _kind = state.kind,\n _result = state.result,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (is_WS_OR_EOL(ch) ||\n is_FLOW_INDICATOR(ch) ||\n ch === 0x23/* # */ ||\n ch === 0x26/* & */ ||\n ch === 0x2A/* * */ ||\n ch === 0x21/* ! */ ||\n ch === 0x7C/* | */ ||\n ch === 0x3E/* > */ ||\n ch === 0x27/* ' */ ||\n ch === 0x22/* \" */ ||\n ch === 0x25/* % */ ||\n ch === 0x40/* @ */ ||\n ch === 0x60/* ` */) {\n return false;\n }\n\n if (ch === 0x3F/* ? */ || ch === 0x2D/* - */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n return false;\n }\n }\n\n state.kind = 'scalar';\n state.result = '';\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n\n while (ch !== 0) {\n if (ch === 0x3A/* : */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following) ||\n withinFlowCollection && is_FLOW_INDICATOR(following)) {\n break;\n }\n\n } else if (ch === 0x23/* # */) {\n preceding = state.input.charCodeAt(state.position - 1);\n\n if (is_WS_OR_EOL(preceding)) {\n break;\n }\n\n } else if ((state.position === state.lineStart && testDocumentSeparator(state)) ||\n withinFlowCollection && is_FLOW_INDICATOR(ch)) {\n break;\n\n } else if (is_EOL(ch)) {\n _line = state.line;\n _lineStart = state.lineStart;\n _lineIndent = state.lineIndent;\n skipSeparationSpace(state, false, -1);\n\n if (state.lineIndent >= nodeIndent) {\n hasPendingContent = true;\n ch = state.input.charCodeAt(state.position);\n continue;\n } else {\n state.position = captureEnd;\n state.line = _line;\n state.lineStart = _lineStart;\n state.lineIndent = _lineIndent;\n break;\n }\n }\n\n if (hasPendingContent) {\n captureSegment(state, captureStart, captureEnd, false);\n writeFoldedLines(state, state.line - _line);\n captureStart = captureEnd = state.position;\n hasPendingContent = false;\n }\n\n if (!is_WHITE_SPACE(ch)) {\n captureEnd = state.position + 1;\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, captureEnd, false);\n\n if (state.result) {\n return true;\n }\n\n state.kind = _kind;\n state.result = _result;\n return false;\n}\n\nfunction readSingleQuotedScalar(state, nodeIndent) {\n var ch,\n captureStart, captureEnd;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x27/* ' */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x27/* ' */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x27/* ' */) {\n captureStart = state.position;\n state.position++;\n captureEnd = state.position;\n } else {\n return true;\n }\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a single quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a single quoted scalar');\n}\n\nfunction readDoubleQuotedScalar(state, nodeIndent) {\n var captureStart,\n captureEnd,\n hexLength,\n hexResult,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x22/* \" */) {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n state.position++;\n captureStart = captureEnd = state.position;\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n if (ch === 0x22/* \" */) {\n captureSegment(state, captureStart, state.position, true);\n state.position++;\n return true;\n\n } else if (ch === 0x5C/* \\ */) {\n captureSegment(state, captureStart, state.position, true);\n ch = state.input.charCodeAt(++state.position);\n\n if (is_EOL(ch)) {\n skipSeparationSpace(state, false, nodeIndent);\n\n // TODO: rework to inline fn with no type cast?\n } else if (ch < 256 && simpleEscapeCheck[ch]) {\n state.result += simpleEscapeMap[ch];\n state.position++;\n\n } else if ((tmp = escapedHexLen(ch)) > 0) {\n hexLength = tmp;\n hexResult = 0;\n\n for (; hexLength > 0; hexLength--) {\n ch = state.input.charCodeAt(++state.position);\n\n if ((tmp = fromHexCode(ch)) >= 0) {\n hexResult = (hexResult << 4) + tmp;\n\n } else {\n throwError(state, 'expected hexadecimal character');\n }\n }\n\n state.result += charFromCodepoint(hexResult);\n\n state.position++;\n\n } else {\n throwError(state, 'unknown escape sequence');\n }\n\n captureStart = captureEnd = state.position;\n\n } else if (is_EOL(ch)) {\n captureSegment(state, captureStart, captureEnd, true);\n writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));\n captureStart = captureEnd = state.position;\n\n } else if (state.position === state.lineStart && testDocumentSeparator(state)) {\n throwError(state, 'unexpected end of the document within a double quoted scalar');\n\n } else {\n state.position++;\n captureEnd = state.position;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a double quoted scalar');\n}\n\nfunction readFlowCollection(state, nodeIndent) {\n var readNext = true,\n _line,\n _lineStart,\n _pos,\n _tag = state.tag,\n _result,\n _anchor = state.anchor,\n following,\n terminator,\n isPair,\n isExplicitPair,\n isMapping,\n overridableKeys = Object.create(null),\n keyNode,\n keyTag,\n valueNode,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x5B/* [ */) {\n terminator = 0x5D;/* ] */\n isMapping = false;\n _result = [];\n } else if (ch === 0x7B/* { */) {\n terminator = 0x7D;/* } */\n isMapping = true;\n _result = {};\n } else {\n return false;\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n while (ch !== 0) {\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === terminator) {\n state.position++;\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = isMapping ? 'mapping' : 'sequence';\n state.result = _result;\n return true;\n } else if (!readNext) {\n throwError(state, 'missed comma between flow collection entries');\n } else if (ch === 0x2C/* , */) {\n // \"flow collection entries can never be completely empty\", as per YAML 1.2, section 7.4\n throwError(state, \"expected the node content, but found ','\");\n }\n\n keyTag = keyNode = valueNode = null;\n isPair = isExplicitPair = false;\n\n if (ch === 0x3F/* ? */) {\n following = state.input.charCodeAt(state.position + 1);\n\n if (is_WS_OR_EOL(following)) {\n isPair = isExplicitPair = true;\n state.position++;\n skipSeparationSpace(state, true, nodeIndent);\n }\n }\n\n _line = state.line; // Save the current line.\n _lineStart = state.lineStart;\n _pos = state.position;\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n keyTag = state.tag;\n keyNode = state.result;\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((isExplicitPair || state.line === _line) && ch === 0x3A/* : */) {\n isPair = true;\n ch = state.input.charCodeAt(++state.position);\n skipSeparationSpace(state, true, nodeIndent);\n composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);\n valueNode = state.result;\n }\n\n if (isMapping) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);\n } else if (isPair) {\n _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));\n } else {\n _result.push(keyNode);\n }\n\n skipSeparationSpace(state, true, nodeIndent);\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x2C/* , */) {\n readNext = true;\n ch = state.input.charCodeAt(++state.position);\n } else {\n readNext = false;\n }\n }\n\n throwError(state, 'unexpected end of the stream within a flow collection');\n}\n\nfunction readBlockScalar(state, nodeIndent) {\n var captureStart,\n folding,\n chomping = CHOMPING_CLIP,\n didReadContent = false,\n detectedIndent = false,\n textIndent = nodeIndent,\n emptyLines = 0,\n atMoreIndented = false,\n tmp,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch === 0x7C/* | */) {\n folding = false;\n } else if (ch === 0x3E/* > */) {\n folding = true;\n } else {\n return false;\n }\n\n state.kind = 'scalar';\n state.result = '';\n\n while (ch !== 0) {\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x2B/* + */ || ch === 0x2D/* - */) {\n if (CHOMPING_CLIP === chomping) {\n chomping = (ch === 0x2B/* + */) ? CHOMPING_KEEP : CHOMPING_STRIP;\n } else {\n throwError(state, 'repeat of a chomping mode identifier');\n }\n\n } else if ((tmp = fromDecimalCode(ch)) >= 0) {\n if (tmp === 0) {\n throwError(state, 'bad explicit indentation width of a block scalar; it cannot be less than one');\n } else if (!detectedIndent) {\n textIndent = nodeIndent + tmp - 1;\n detectedIndent = true;\n } else {\n throwError(state, 'repeat of an indentation width identifier');\n }\n\n } else {\n break;\n }\n }\n\n if (is_WHITE_SPACE(ch)) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (is_WHITE_SPACE(ch));\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (!is_EOL(ch) && (ch !== 0));\n }\n }\n\n while (ch !== 0) {\n readLineBreak(state);\n state.lineIndent = 0;\n\n ch = state.input.charCodeAt(state.position);\n\n while ((!detectedIndent || state.lineIndent < textIndent) &&\n (ch === 0x20/* Space */)) {\n state.lineIndent++;\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (!detectedIndent && state.lineIndent > textIndent) {\n textIndent = state.lineIndent;\n }\n\n if (is_EOL(ch)) {\n emptyLines++;\n continue;\n }\n\n // End of the scalar.\n if (state.lineIndent < textIndent) {\n\n // Perform the chomping.\n if (chomping === CHOMPING_KEEP) {\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n } else if (chomping === CHOMPING_CLIP) {\n if (didReadContent) { // i.e. only if the scalar is not empty.\n state.result += '\\n';\n }\n }\n\n // Break this `while` cycle and go to the funciton's epilogue.\n break;\n }\n\n // Folded style: use fancy rules to handle line breaks.\n if (folding) {\n\n // Lines starting with white space characters (more-indented lines) are not folded.\n if (is_WHITE_SPACE(ch)) {\n atMoreIndented = true;\n // except for the first content line (cf. Example 8.1)\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n\n // End of more-indented block.\n } else if (atMoreIndented) {\n atMoreIndented = false;\n state.result += common.repeat('\\n', emptyLines + 1);\n\n // Just one line break - perceive as the same line.\n } else if (emptyLines === 0) {\n if (didReadContent) { // i.e. only if we have already read some scalar content.\n state.result += ' ';\n }\n\n // Several line breaks - perceive as different lines.\n } else {\n state.result += common.repeat('\\n', emptyLines);\n }\n\n // Literal style: just add exact number of line breaks between content lines.\n } else {\n // Keep all line breaks except the header line break.\n state.result += common.repeat('\\n', didReadContent ? 1 + emptyLines : emptyLines);\n }\n\n didReadContent = true;\n detectedIndent = true;\n emptyLines = 0;\n captureStart = state.position;\n\n while (!is_EOL(ch) && (ch !== 0)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n captureSegment(state, captureStart, state.position, false);\n }\n\n return true;\n}\n\nfunction readBlockSequence(state, nodeIndent) {\n var _line,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = [],\n following,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n if (ch !== 0x2D/* - */) {\n break;\n }\n\n following = state.input.charCodeAt(state.position + 1);\n\n if (!is_WS_OR_EOL(following)) {\n break;\n }\n\n detected = true;\n state.position++;\n\n if (skipSeparationSpace(state, true, -1)) {\n if (state.lineIndent <= nodeIndent) {\n _result.push(null);\n ch = state.input.charCodeAt(state.position);\n continue;\n }\n }\n\n _line = state.line;\n composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);\n _result.push(state.result);\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a sequence entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'sequence';\n state.result = _result;\n return true;\n }\n return false;\n}\n\nfunction readBlockMapping(state, nodeIndent, flowIndent) {\n var following,\n allowCompact,\n _line,\n _keyLine,\n _keyLineStart,\n _keyPos,\n _tag = state.tag,\n _anchor = state.anchor,\n _result = {},\n overridableKeys = Object.create(null),\n keyTag = null,\n keyNode = null,\n valueNode = null,\n atExplicitKey = false,\n detected = false,\n ch;\n\n // there is a leading tab before this token, so it can't be a block sequence/mapping;\n // it can still be flow sequence/mapping or a scalar\n if (state.firstTabInLine !== -1) return false;\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = _result;\n }\n\n ch = state.input.charCodeAt(state.position);\n\n while (ch !== 0) {\n if (!atExplicitKey && state.firstTabInLine !== -1) {\n state.position = state.firstTabInLine;\n throwError(state, 'tab characters must not be used in indentation');\n }\n\n following = state.input.charCodeAt(state.position + 1);\n _line = state.line; // Save the current line.\n\n //\n // Explicit notation case. There are two separate blocks:\n // first for the key (denoted by \"?\") and second for the value (denoted by \":\")\n //\n if ((ch === 0x3F/* ? */ || ch === 0x3A/* : */) && is_WS_OR_EOL(following)) {\n\n if (ch === 0x3F/* ? */) {\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = true;\n allowCompact = true;\n\n } else if (atExplicitKey) {\n // i.e. 0x3A/* : */ === character after the explicit key.\n atExplicitKey = false;\n allowCompact = true;\n\n } else {\n throwError(state, 'incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line');\n }\n\n state.position += 1;\n ch = following;\n\n //\n // Implicit notation case. Flow-style node as the key first, then \":\", and the value.\n //\n } else {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n\n if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {\n // Neither implicit nor explicit notation.\n // Reading is done. Go to the epilogue.\n break;\n }\n\n if (state.line === _line) {\n ch = state.input.charCodeAt(state.position);\n\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x3A/* : */) {\n ch = state.input.charCodeAt(++state.position);\n\n if (!is_WS_OR_EOL(ch)) {\n throwError(state, 'a whitespace character is expected after the key-value separator within a block mapping');\n }\n\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n detected = true;\n atExplicitKey = false;\n allowCompact = false;\n keyTag = state.tag;\n keyNode = state.result;\n\n } else if (detected) {\n throwError(state, 'can not read an implicit mapping pair; a colon is missed');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n\n } else if (detected) {\n throwError(state, 'can not read a block mapping entry; a multiline key may not be an implicit key');\n\n } else {\n state.tag = _tag;\n state.anchor = _anchor;\n return true; // Keep the result of `composeNode`.\n }\n }\n\n //\n // Common reading code for both explicit and implicit notations.\n //\n if (state.line === _line || state.lineIndent > nodeIndent) {\n if (atExplicitKey) {\n _keyLine = state.line;\n _keyLineStart = state.lineStart;\n _keyPos = state.position;\n }\n\n if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {\n if (atExplicitKey) {\n keyNode = state.result;\n } else {\n valueNode = state.result;\n }\n }\n\n if (!atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);\n keyTag = keyNode = valueNode = null;\n }\n\n skipSeparationSpace(state, true, -1);\n ch = state.input.charCodeAt(state.position);\n }\n\n if ((state.line === _line || state.lineIndent > nodeIndent) && (ch !== 0)) {\n throwError(state, 'bad indentation of a mapping entry');\n } else if (state.lineIndent < nodeIndent) {\n break;\n }\n }\n\n //\n // Epilogue.\n //\n\n // Special case: last mapping's node contains only the key in explicit notation.\n if (atExplicitKey) {\n storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);\n }\n\n // Expose the resulting mapping.\n if (detected) {\n state.tag = _tag;\n state.anchor = _anchor;\n state.kind = 'mapping';\n state.result = _result;\n }\n\n return detected;\n}\n\nfunction readTagProperty(state) {\n var _position,\n isVerbatim = false,\n isNamed = false,\n tagHandle,\n tagName,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x21/* ! */) return false;\n\n if (state.tag !== null) {\n throwError(state, 'duplication of a tag property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n\n if (ch === 0x3C/* < */) {\n isVerbatim = true;\n ch = state.input.charCodeAt(++state.position);\n\n } else if (ch === 0x21/* ! */) {\n isNamed = true;\n tagHandle = '!!';\n ch = state.input.charCodeAt(++state.position);\n\n } else {\n tagHandle = '!';\n }\n\n _position = state.position;\n\n if (isVerbatim) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && ch !== 0x3E/* > */);\n\n if (state.position < state.length) {\n tagName = state.input.slice(_position, state.position);\n ch = state.input.charCodeAt(++state.position);\n } else {\n throwError(state, 'unexpected end of the stream within a verbatim tag');\n }\n } else {\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n\n if (ch === 0x21/* ! */) {\n if (!isNamed) {\n tagHandle = state.input.slice(_position - 1, state.position + 1);\n\n if (!PATTERN_TAG_HANDLE.test(tagHandle)) {\n throwError(state, 'named tag handle cannot contain such characters');\n }\n\n isNamed = true;\n _position = state.position + 1;\n } else {\n throwError(state, 'tag suffix cannot contain exclamation marks');\n }\n }\n\n ch = state.input.charCodeAt(++state.position);\n }\n\n tagName = state.input.slice(_position, state.position);\n\n if (PATTERN_FLOW_INDICATORS.test(tagName)) {\n throwError(state, 'tag suffix cannot contain flow indicator characters');\n }\n }\n\n if (tagName && !PATTERN_TAG_URI.test(tagName)) {\n throwError(state, 'tag name cannot contain such characters: ' + tagName);\n }\n\n try {\n tagName = decodeURIComponent(tagName);\n } catch (err) {\n throwError(state, 'tag name is malformed: ' + tagName);\n }\n\n if (isVerbatim) {\n state.tag = tagName;\n\n } else if (_hasOwnProperty.call(state.tagMap, tagHandle)) {\n state.tag = state.tagMap[tagHandle] + tagName;\n\n } else if (tagHandle === '!') {\n state.tag = '!' + tagName;\n\n } else if (tagHandle === '!!') {\n state.tag = 'tag:yaml.org,2002:' + tagName;\n\n } else {\n throwError(state, 'undeclared tag handle \"' + tagHandle + '\"');\n }\n\n return true;\n}\n\nfunction readAnchorProperty(state) {\n var _position,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x26/* & */) return false;\n\n if (state.anchor !== null) {\n throwError(state, 'duplication of an anchor property');\n }\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an anchor node must contain at least one character');\n }\n\n state.anchor = state.input.slice(_position, state.position);\n return true;\n}\n\nfunction readAlias(state) {\n var _position, alias,\n ch;\n\n ch = state.input.charCodeAt(state.position);\n\n if (ch !== 0x2A/* * */) return false;\n\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (state.position === _position) {\n throwError(state, 'name of an alias node must contain at least one character');\n }\n\n alias = state.input.slice(_position, state.position);\n\n if (!_hasOwnProperty.call(state.anchorMap, alias)) {\n throwError(state, 'unidentified alias \"' + alias + '\"');\n }\n\n state.result = state.anchorMap[alias];\n skipSeparationSpace(state, true, -1);\n return true;\n}\n\nfunction composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {\n var allowBlockStyles,\n allowBlockScalars,\n allowBlockCollections,\n indentStatus = 1, // 1: this>parent, 0: this=parent, -1: this<parent\n atNewLine = false,\n hasContent = false,\n typeIndex,\n typeQuantity,\n typeList,\n type,\n flowIndent,\n blockIndent;\n\n if (state.listener !== null) {\n state.listener('open', state);\n }\n\n state.tag = null;\n state.anchor = null;\n state.kind = null;\n state.result = null;\n\n allowBlockStyles = allowBlockScalars = allowBlockCollections =\n CONTEXT_BLOCK_OUT === nodeContext ||\n CONTEXT_BLOCK_IN === nodeContext;\n\n if (allowToSeek) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n }\n }\n\n if (indentStatus === 1) {\n while (readTagProperty(state) || readAnchorProperty(state)) {\n if (skipSeparationSpace(state, true, -1)) {\n atNewLine = true;\n allowBlockCollections = allowBlockStyles;\n\n if (state.lineIndent > parentIndent) {\n indentStatus = 1;\n } else if (state.lineIndent === parentIndent) {\n indentStatus = 0;\n } else if (state.lineIndent < parentIndent) {\n indentStatus = -1;\n }\n } else {\n allowBlockCollections = false;\n }\n }\n }\n\n if (allowBlockCollections) {\n allowBlockCollections = atNewLine || allowCompact;\n }\n\n if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {\n if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {\n flowIndent = parentIndent;\n } else {\n flowIndent = parentIndent + 1;\n }\n\n blockIndent = state.position - state.lineStart;\n\n if (indentStatus === 1) {\n if (allowBlockCollections &&\n (readBlockSequence(state, blockIndent) ||\n readBlockMapping(state, blockIndent, flowIndent)) ||\n readFlowCollection(state, flowIndent)) {\n hasContent = true;\n } else {\n if ((allowBlockScalars && readBlockScalar(state, flowIndent)) ||\n readSingleQuotedScalar(state, flowIndent) ||\n readDoubleQuotedScalar(state, flowIndent)) {\n hasContent = true;\n\n } else if (readAlias(state)) {\n hasContent = true;\n\n if (state.tag !== null || state.anchor !== null) {\n throwError(state, 'alias node should not have any properties');\n }\n\n } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {\n hasContent = true;\n\n if (state.tag === null) {\n state.tag = '?';\n }\n }\n\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n } else if (indentStatus === 0) {\n // Special case: block sequences are allowed to have same indentation level as the parent.\n // http://www.yaml.org/spec/1.2/spec.html#id2799784\n hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);\n }\n }\n\n if (state.tag === null) {\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n\n } else if (state.tag === '?') {\n // Implicit resolving is not allowed for non-scalar types, and '?'\n // non-specific tag is only automatically assigned to plain scalars.\n //\n // We only need to check kind conformity in case user explicitly assigns '?'\n // tag, for example like this: \"!<?> [0]\"\n //\n if (state.result !== null && state.kind !== 'scalar') {\n throwError(state, 'unacceptable node kind for !<?> tag; it should be \"scalar\", not \"' + state.kind + '\"');\n }\n\n for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {\n type = state.implicitTypes[typeIndex];\n\n if (type.resolve(state.result)) { // `state.result` updated in resolver if matched\n state.result = type.construct(state.result);\n state.tag = type.tag;\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n break;\n }\n }\n } else if (state.tag !== '!') {\n if (_hasOwnProperty.call(state.typeMap[state.kind || 'fallback'], state.tag)) {\n type = state.typeMap[state.kind || 'fallback'][state.tag];\n } else {\n // looking for multi type\n type = null;\n typeList = state.typeMap.multi[state.kind || 'fallback'];\n\n for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {\n if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {\n type = typeList[typeIndex];\n break;\n }\n }\n }\n\n if (!type) {\n throwError(state, 'unknown tag !<' + state.tag + '>');\n }\n\n if (state.result !== null && type.kind !== state.kind) {\n throwError(state, 'unacceptable node kind for !<' + state.tag + '> tag; it should be \"' + type.kind + '\", not \"' + state.kind + '\"');\n }\n\n if (!type.resolve(state.result, state.tag)) { // `state.result` updated in resolver if matched\n throwError(state, 'cannot resolve a node with !<' + state.tag + '> explicit tag');\n } else {\n state.result = type.construct(state.result, state.tag);\n if (state.anchor !== null) {\n state.anchorMap[state.anchor] = state.result;\n }\n }\n }\n\n if (state.listener !== null) {\n state.listener('close', state);\n }\n return state.tag !== null || state.anchor !== null || hasContent;\n}\n\nfunction readDocument(state) {\n var documentStart = state.position,\n _position,\n directiveName,\n directiveArgs,\n hasDirectives = false,\n ch;\n\n state.version = null;\n state.checkLineBreaks = state.legacy;\n state.tagMap = Object.create(null);\n state.anchorMap = Object.create(null);\n\n while ((ch = state.input.charCodeAt(state.position)) !== 0) {\n skipSeparationSpace(state, true, -1);\n\n ch = state.input.charCodeAt(state.position);\n\n if (state.lineIndent > 0 || ch !== 0x25/* % */) {\n break;\n }\n\n hasDirectives = true;\n ch = state.input.charCodeAt(++state.position);\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveName = state.input.slice(_position, state.position);\n directiveArgs = [];\n\n if (directiveName.length < 1) {\n throwError(state, 'directive name must not be less than one character in length');\n }\n\n while (ch !== 0) {\n while (is_WHITE_SPACE(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n if (ch === 0x23/* # */) {\n do { ch = state.input.charCodeAt(++state.position); }\n while (ch !== 0 && !is_EOL(ch));\n break;\n }\n\n if (is_EOL(ch)) break;\n\n _position = state.position;\n\n while (ch !== 0 && !is_WS_OR_EOL(ch)) {\n ch = state.input.charCodeAt(++state.position);\n }\n\n directiveArgs.push(state.input.slice(_position, state.position));\n }\n\n if (ch !== 0) readLineBreak(state);\n\n if (_hasOwnProperty.call(directiveHandlers, directiveName)) {\n directiveHandlers[directiveName](state, directiveName, directiveArgs);\n } else {\n throwWarning(state, 'unknown document directive \"' + directiveName + '\"');\n }\n }\n\n skipSeparationSpace(state, true, -1);\n\n if (state.lineIndent === 0 &&\n state.input.charCodeAt(state.position) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 1) === 0x2D/* - */ &&\n state.input.charCodeAt(state.position + 2) === 0x2D/* - */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n\n } else if (hasDirectives) {\n throwError(state, 'directives end mark is expected');\n }\n\n composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);\n skipSeparationSpace(state, true, -1);\n\n if (state.checkLineBreaks &&\n PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {\n throwWarning(state, 'non-ASCII line breaks are interpreted as content');\n }\n\n state.documents.push(state.result);\n\n if (state.position === state.lineStart && testDocumentSeparator(state)) {\n\n if (state.input.charCodeAt(state.position) === 0x2E/* . */) {\n state.position += 3;\n skipSeparationSpace(state, true, -1);\n }\n return;\n }\n\n if (state.position < (state.length - 1)) {\n throwError(state, 'end of the stream or a document separator is expected');\n } else {\n return;\n }\n}\n\n\nfunction loadDocuments(input, options) {\n input = String(input);\n options = options || {};\n\n if (input.length !== 0) {\n\n // Add tailing `\\n` if not exists\n if (input.charCodeAt(input.length - 1) !== 0x0A/* LF */ &&\n input.charCodeAt(input.length - 1) !== 0x0D/* CR */) {\n input += '\\n';\n }\n\n // Strip BOM\n if (input.charCodeAt(0) === 0xFEFF) {\n input = input.slice(1);\n }\n }\n\n var state = new State(input, options);\n\n var nullpos = input.indexOf('\\0');\n\n if (nullpos !== -1) {\n state.position = nullpos;\n throwError(state, 'null byte is not allowed in input');\n }\n\n // Use 0 as string terminator. That significantly simplifies bounds check.\n state.input += '\\0';\n\n while (state.input.charCodeAt(state.position) === 0x20/* Space */) {\n state.lineIndent += 1;\n state.position += 1;\n }\n\n while (state.position < (state.length - 1)) {\n readDocument(state);\n }\n\n return state.documents;\n}\n\n\nfunction loadAll(input, iterator, options) {\n if (iterator !== null && typeof iterator === 'object' && typeof options === 'undefined') {\n options = iterator;\n iterator = null;\n }\n\n var documents = loadDocuments(input, options);\n\n if (typeof iterator !== 'function') {\n return documents;\n }\n\n for (var index = 0, length = documents.length; index < length; index += 1) {\n iterator(documents[index]);\n }\n}\n\n\nfunction load(input, options) {\n var documents = loadDocuments(input, options);\n\n if (documents.length === 0) {\n /*eslint-disable no-undefined*/\n return undefined;\n } else if (documents.length === 1) {\n return documents[0];\n }\n throw new YAMLException('expected a single document in the stream, but found more');\n}\n\n\nmodule.exports.loadAll = loadAll;\nmodule.exports.load = load;\n","'use strict';\n\n/*eslint-disable no-use-before-define*/\n\nvar common = require('./common');\nvar YAMLException = require('./exception');\nvar DEFAULT_SCHEMA = require('./schema/default');\n\nvar _toString = Object.prototype.toString;\nvar _hasOwnProperty = Object.prototype.hasOwnProperty;\n\nvar CHAR_BOM = 0xFEFF;\nvar CHAR_TAB = 0x09; /* Tab */\nvar CHAR_LINE_FEED = 0x0A; /* LF */\nvar CHAR_CARRIAGE_RETURN = 0x0D; /* CR */\nvar CHAR_SPACE = 0x20; /* Space */\nvar CHAR_EXCLAMATION = 0x21; /* ! */\nvar CHAR_DOUBLE_QUOTE = 0x22; /* \" */\nvar CHAR_SHARP = 0x23; /* # */\nvar CHAR_PERCENT = 0x25; /* % */\nvar CHAR_AMPERSAND = 0x26; /* & */\nvar CHAR_SINGLE_QUOTE = 0x27; /* ' */\nvar CHAR_ASTERISK = 0x2A; /* * */\nvar CHAR_COMMA = 0x2C; /* , */\nvar CHAR_MINUS = 0x2D; /* - */\nvar CHAR_COLON = 0x3A; /* : */\nvar CHAR_EQUALS = 0x3D; /* = */\nvar CHAR_GREATER_THAN = 0x3E; /* > */\nvar CHAR_QUESTION = 0x3F; /* ? */\nvar CHAR_COMMERCIAL_AT = 0x40; /* @ */\nvar CHAR_LEFT_SQUARE_BRACKET = 0x5B; /* [ */\nvar CHAR_RIGHT_SQUARE_BRACKET = 0x5D; /* ] */\nvar CHAR_GRAVE_ACCENT = 0x60; /* ` */\nvar CHAR_LEFT_CURLY_BRACKET = 0x7B; /* { */\nvar CHAR_VERTICAL_LINE = 0x7C; /* | */\nvar CHAR_RIGHT_CURLY_BRACKET = 0x7D; /* } */\n\nvar ESCAPE_SEQUENCES = {};\n\nESCAPE_SEQUENCES[0x00] = '\\\\0';\nESCAPE_SEQUENCES[0x07] = '\\\\a';\nESCAPE_SEQUENCES[0x08] = '\\\\b';\nESCAPE_SEQUENCES[0x09] = '\\\\t';\nESCAPE_SEQUENCES[0x0A] = '\\\\n';\nESCAPE_SEQUENCES[0x0B] = '\\\\v';\nESCAPE_SEQUENCES[0x0C] = '\\\\f';\nESCAPE_SEQUENCES[0x0D] = '\\\\r';\nESCAPE_SEQUENCES[0x1B] = '\\\\e';\nESCAPE_SEQUENCES[0x22] = '\\\\\"';\nESCAPE_SEQUENCES[0x5C] = '\\\\\\\\';\nESCAPE_SEQUENCES[0x85] = '\\\\N';\nESCAPE_SEQUENCES[0xA0] = '\\\\_';\nESCAPE_SEQUENCES[0x2028] = '\\\\L';\nESCAPE_SEQUENCES[0x2029] = '\\\\P';\n\nvar DEPRECATED_BOOLEANS_SYNTAX = [\n 'y', 'Y', 'yes', 'Yes', 'YES', 'on', 'On', 'ON',\n 'n', 'N', 'no', 'No', 'NO', 'off', 'Off', 'OFF'\n];\n\nvar DEPRECATED_BASE60_SYNTAX = /^[-+]?[0-9_]+(?::[0-9_]+)+(?:\\.[0-9_]*)?$/;\n\nfunction compileStyleMap(schema, map) {\n var result, keys, index, length, tag, style, type;\n\n if (map === null) return {};\n\n result = {};\n keys = Object.keys(map);\n\n for (index = 0, length = keys.length; index < length; index += 1) {\n tag = keys[index];\n style = String(map[tag]);\n\n if (tag.slice(0, 2) === '!!') {\n tag = 'tag:yaml.org,2002:' + tag.slice(2);\n }\n type = schema.compiledTypeMap['fallback'][tag];\n\n if (type && _hasOwnProperty.call(type.styleAliases, style)) {\n style = type.styleAliases[style];\n }\n\n result[tag] = style;\n }\n\n return result;\n}\n\nfunction encodeHex(character) {\n var string, handle, length;\n\n string = character.toString(16).toUpperCase();\n\n if (character <= 0xFF) {\n handle = 'x';\n length = 2;\n } else if (character <= 0xFFFF) {\n handle = 'u';\n length = 4;\n } else if (character <= 0xFFFFFFFF) {\n handle = 'U';\n length = 8;\n } else {\n throw new YAMLException('code point within a string may not be greater than 0xFFFFFFFF');\n }\n\n return '\\\\' + handle + common.repeat('0', length - string.length) + string;\n}\n\n\nvar QUOTING_TYPE_SINGLE = 1,\n QUOTING_TYPE_DOUBLE = 2;\n\nfunction State(options) {\n this.schema = options['schema'] || DEFAULT_SCHEMA;\n this.indent = Math.max(1, (options['indent'] || 2));\n this.noArrayIndent = options['noArrayIndent'] || false;\n this.skipInvalid = options['skipInvalid'] || false;\n this.flowLevel = (common.isNothing(options['flowLevel']) ? -1 : options['flowLevel']);\n this.styleMap = compileStyleMap(this.schema, options['styles'] || null);\n this.sortKeys = options['sortKeys'] || false;\n this.lineWidth = options['lineWidth'] || 80;\n this.noRefs = options['noRefs'] || false;\n this.noCompatMode = options['noCompatMode'] || false;\n this.condenseFlow = options['condenseFlow'] || false;\n this.quotingType = options['quotingType'] === '\"' ? QUOTING_TYPE_DOUBLE : QUOTING_TYPE_SINGLE;\n this.forceQuotes = options['forceQuotes'] || false;\n this.replacer = typeof options['replacer'] === 'function' ? options['replacer'] : null;\n\n this.implicitTypes = this.schema.compiledImplicit;\n this.explicitTypes = this.schema.compiledExplicit;\n\n this.tag = null;\n this.result = '';\n\n this.duplicates = [];\n this.usedDuplicates = null;\n}\n\n// Indents every line in a string. Empty lines (\\n only) are not indented.\nfunction indentString(string, spaces) {\n var ind = common.repeat(' ', spaces),\n position = 0,\n next = -1,\n result = '',\n line,\n length = string.length;\n\n while (position < length) {\n next = string.indexOf('\\n', position);\n if (next === -1) {\n line = string.slice(position);\n position = length;\n } else {\n line = string.slice(position, next + 1);\n position = next + 1;\n }\n\n if (line.length && line !== '\\n') result += ind;\n\n result += line;\n }\n\n return result;\n}\n\nfunction generateNextLine(state, level) {\n return '\\n' + common.repeat(' ', state.indent * level);\n}\n\nfunction testImplicitResolving(state, str) {\n var index, length, type;\n\n for (index = 0, length = state.implicitTypes.length; index < length; index += 1) {\n type = state.implicitTypes[index];\n\n if (type.resolve(str)) {\n return true;\n }\n }\n\n return false;\n}\n\n// [33] s-white ::= s-space | s-tab\nfunction isWhitespace(c) {\n return c === CHAR_SPACE || c === CHAR_TAB;\n}\n\n// Returns true if the character can be printed without escaping.\n// From YAML 1.2: \"any allowed characters known to be non-printable\n// should also be escaped. [However,] This isn’t mandatory\"\n// Derived from nb-char - \\t - #x85 - #xA0 - #x2028 - #x2029.\nfunction isPrintable(c) {\n return (0x00020 <= c && c <= 0x00007E)\n || ((0x000A1 <= c && c <= 0x00D7FF) && c !== 0x2028 && c !== 0x2029)\n || ((0x0E000 <= c && c <= 0x00FFFD) && c !== CHAR_BOM)\n || (0x10000 <= c && c <= 0x10FFFF);\n}\n\n// [34] ns-char ::= nb-char - s-white\n// [27] nb-char ::= c-printable - b-char - c-byte-order-mark\n// [26] b-char ::= b-line-feed | b-carriage-return\n// Including s-white (for some reason, examples doesn't match specs in this aspect)\n// ns-char ::= c-printable - b-line-feed - b-carriage-return - c-byte-order-mark\nfunction isNsCharOrWhitespace(c) {\n return isPrintable(c)\n && c !== CHAR_BOM\n // - b-char\n && c !== CHAR_CARRIAGE_RETURN\n && c !== CHAR_LINE_FEED;\n}\n\n// [127] ns-plain-safe(c) ::= c = flow-out ⇒ ns-plain-safe-out\n// c = flow-in ⇒ ns-plain-safe-in\n// c = block-key ⇒ ns-plain-safe-out\n// c = flow-key ⇒ ns-plain-safe-in\n// [128] ns-plain-safe-out ::= ns-char\n// [129] ns-plain-safe-in ::= ns-char - c-flow-indicator\n// [130] ns-plain-char(c) ::= ( ns-plain-safe(c) - “:” - “#” )\n// | ( /* An ns-char preceding */ “#” )\n// | ( “:” /* Followed by an ns-plain-safe(c) */ )\nfunction isPlainSafe(c, prev, inblock) {\n var cIsNsCharOrWhitespace = isNsCharOrWhitespace(c);\n var cIsNsChar = cIsNsCharOrWhitespace && !isWhitespace(c);\n return (\n // ns-plain-safe\n inblock ? // c = flow-in\n cIsNsCharOrWhitespace\n : cIsNsCharOrWhitespace\n // - c-flow-indicator\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n )\n // ns-plain-char\n && c !== CHAR_SHARP // false on '#'\n && !(prev === CHAR_COLON && !cIsNsChar) // false on ': '\n || (isNsCharOrWhitespace(prev) && !isWhitespace(prev) && c === CHAR_SHARP) // change to true on '[^ ]#'\n || (prev === CHAR_COLON && cIsNsChar); // change to true on ':[^ ]'\n}\n\n// Simplified test for values allowed as the first character in plain style.\nfunction isPlainSafeFirst(c) {\n // Uses a subset of ns-char - c-indicator\n // where ns-char = nb-char - s-white.\n // No support of ( ( “?” | “:” | “-” ) /* Followed by an ns-plain-safe(c)) */ ) part\n return isPrintable(c) && c !== CHAR_BOM\n && !isWhitespace(c) // - s-white\n // - (c-indicator ::=\n // “-” | “?” | “:” | “,” | “[” | “]” | “{” | “}”\n && c !== CHAR_MINUS\n && c !== CHAR_QUESTION\n && c !== CHAR_COLON\n && c !== CHAR_COMMA\n && c !== CHAR_LEFT_SQUARE_BRACKET\n && c !== CHAR_RIGHT_SQUARE_BRACKET\n && c !== CHAR_LEFT_CURLY_BRACKET\n && c !== CHAR_RIGHT_CURLY_BRACKET\n // | “#” | “&” | “*” | “!” | “|” | “=” | “>” | “'” | “\"”\n && c !== CHAR_SHARP\n && c !== CHAR_AMPERSAND\n && c !== CHAR_ASTERISK\n && c !== CHAR_EXCLAMATION\n && c !== CHAR_VERTICAL_LINE\n && c !== CHAR_EQUALS\n && c !== CHAR_GREATER_THAN\n && c !== CHAR_SINGLE_QUOTE\n && c !== CHAR_DOUBLE_QUOTE\n // | “%” | “@” | “`”)\n && c !== CHAR_PERCENT\n && c !== CHAR_COMMERCIAL_AT\n && c !== CHAR_GRAVE_ACCENT;\n}\n\n// Simplified test for values allowed as the last character in plain style.\nfunction isPlainSafeLast(c) {\n // just not whitespace or colon, it will be checked to be plain character later\n return !isWhitespace(c) && c !== CHAR_COLON;\n}\n\n// Same as 'string'.codePointAt(pos), but works in older browsers.\nfunction codePointAt(string, pos) {\n var first = string.charCodeAt(pos), second;\n if (first >= 0xD800 && first <= 0xDBFF && pos + 1 < string.length) {\n second = string.charCodeAt(pos + 1);\n if (second >= 0xDC00 && second <= 0xDFFF) {\n // https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n }\n }\n return first;\n}\n\n// Determines whether block indentation indicator is required.\nfunction needIndentIndicator(string) {\n var leadingSpaceRe = /^\\n* /;\n return leadingSpaceRe.test(string);\n}\n\nvar STYLE_PLAIN = 1,\n STYLE_SINGLE = 2,\n STYLE_LITERAL = 3,\n STYLE_FOLDED = 4,\n STYLE_DOUBLE = 5;\n\n// Determines which scalar styles are possible and returns the preferred style.\n// lineWidth = -1 => no limit.\n// Pre-conditions: str.length > 0.\n// Post-conditions:\n// STYLE_PLAIN or STYLE_SINGLE => no \\n are in the string.\n// STYLE_LITERAL => no lines are suitable for folding (or lineWidth is -1).\n// STYLE_FOLDED => a line > lineWidth and can be folded (and lineWidth != -1).\nfunction chooseScalarStyle(string, singleLineOnly, indentPerLevel, lineWidth,\n testAmbiguousType, quotingType, forceQuotes, inblock) {\n\n var i;\n var char = 0;\n var prevChar = null;\n var hasLineBreak = false;\n var hasFoldableLine = false; // only checked if shouldTrackWidth\n var shouldTrackWidth = lineWidth !== -1;\n var previousLineBreak = -1; // count the first line correctly\n var plain = isPlainSafeFirst(codePointAt(string, 0))\n && isPlainSafeLast(codePointAt(string, string.length - 1));\n\n if (singleLineOnly || forceQuotes) {\n // Case: no block styles.\n // Check for disallowed characters to rule out plain and single.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n } else {\n // Case: block styles permitted.\n for (i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n if (char === CHAR_LINE_FEED) {\n hasLineBreak = true;\n // Check if any line can be folded.\n if (shouldTrackWidth) {\n hasFoldableLine = hasFoldableLine ||\n // Foldable line = too long, and not more-indented.\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' ');\n previousLineBreak = i;\n }\n } else if (!isPrintable(char)) {\n return STYLE_DOUBLE;\n }\n plain = plain && isPlainSafe(char, prevChar, inblock);\n prevChar = char;\n }\n // in case the end is missing a \\n\n hasFoldableLine = hasFoldableLine || (shouldTrackWidth &&\n (i - previousLineBreak - 1 > lineWidth &&\n string[previousLineBreak + 1] !== ' '));\n }\n // Although every style can represent \\n without escaping, prefer block styles\n // for multiline, since they're more readable and they don't add empty lines.\n // Also prefer folding a super-long line.\n if (!hasLineBreak && !hasFoldableLine) {\n // Strings interpretable as another type have to be quoted;\n // e.g. the string 'true' vs. the boolean true.\n if (plain && !forceQuotes && !testAmbiguousType(string)) {\n return STYLE_PLAIN;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n }\n // Edge case: block indentation indicator can only have one digit.\n if (indentPerLevel > 9 && needIndentIndicator(string)) {\n return STYLE_DOUBLE;\n }\n // At this point we know block styles are valid.\n // Prefer literal style unless we want to fold.\n if (!forceQuotes) {\n return hasFoldableLine ? STYLE_FOLDED : STYLE_LITERAL;\n }\n return quotingType === QUOTING_TYPE_DOUBLE ? STYLE_DOUBLE : STYLE_SINGLE;\n}\n\n// Note: line breaking/folding is implemented for only the folded style.\n// NB. We drop the last trailing newline (if any) of a returned block scalar\n// since the dumper adds its own newline. This always works:\n// • No ending newline => unaffected; already using strip \"-\" chomping.\n// • Ending newline => removed then restored.\n// Importantly, this keeps the \"+\" chomp indicator from gaining an extra line.\nfunction writeScalar(state, string, level, iskey, inblock) {\n state.dump = (function () {\n if (string.length === 0) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? '\"\"' : \"''\";\n }\n if (!state.noCompatMode) {\n if (DEPRECATED_BOOLEANS_SYNTAX.indexOf(string) !== -1 || DEPRECATED_BASE60_SYNTAX.test(string)) {\n return state.quotingType === QUOTING_TYPE_DOUBLE ? ('\"' + string + '\"') : (\"'\" + string + \"'\");\n }\n }\n\n var indent = state.indent * Math.max(1, level); // no 0-indent scalars\n // As indentation gets deeper, let the width decrease monotonically\n // to the lower bound min(state.lineWidth, 40).\n // Note that this implies\n // state.lineWidth ≤ 40 + state.indent: width is fixed at the lower bound.\n // state.lineWidth > 40 + state.indent: width decreases until the lower bound.\n // This behaves better than a constant minimum width which disallows narrower options,\n // or an indent threshold which causes the width to suddenly increase.\n var lineWidth = state.lineWidth === -1\n ? -1 : Math.max(Math.min(state.lineWidth, 40), state.lineWidth - indent);\n\n // Without knowing if keys are implicit/explicit, assume implicit for safety.\n var singleLineOnly = iskey\n // No block styles in flow mode.\n || (state.flowLevel > -1 && level >= state.flowLevel);\n function testAmbiguity(string) {\n return testImplicitResolving(state, string);\n }\n\n switch (chooseScalarStyle(string, singleLineOnly, state.indent, lineWidth,\n testAmbiguity, state.quotingType, state.forceQuotes && !iskey, inblock)) {\n\n case STYLE_PLAIN:\n return string;\n case STYLE_SINGLE:\n return \"'\" + string.replace(/'/g, \"''\") + \"'\";\n case STYLE_LITERAL:\n return '|' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(string, indent));\n case STYLE_FOLDED:\n return '>' + blockHeader(string, state.indent)\n + dropEndingNewline(indentString(foldString(string, lineWidth), indent));\n case STYLE_DOUBLE:\n return '\"' + escapeString(string, lineWidth) + '\"';\n default:\n throw new YAMLException('impossible error: invalid scalar style');\n }\n }());\n}\n\n// Pre-conditions: string is valid for a block scalar, 1 <= indentPerLevel <= 9.\nfunction blockHeader(string, indentPerLevel) {\n var indentIndicator = needIndentIndicator(string) ? String(indentPerLevel) : '';\n\n // note the special case: the string '\\n' counts as a \"trailing\" empty line.\n var clip = string[string.length - 1] === '\\n';\n var keep = clip && (string[string.length - 2] === '\\n' || string === '\\n');\n var chomp = keep ? '+' : (clip ? '' : '-');\n\n return indentIndicator + chomp + '\\n';\n}\n\n// (See the note for writeScalar.)\nfunction dropEndingNewline(string) {\n return string[string.length - 1] === '\\n' ? string.slice(0, -1) : string;\n}\n\n// Note: a long line without a suitable break point will exceed the width limit.\n// Pre-conditions: every char in str isPrintable, str.length > 0, width > 0.\nfunction foldString(string, width) {\n // In folded style, $k$ consecutive newlines output as $k+1$ newlines—\n // unless they're before or after a more-indented line, or at the very\n // beginning or end, in which case $k$ maps to $k$.\n // Therefore, parse each chunk as newline(s) followed by a content line.\n var lineRe = /(\\n+)([^\\n]*)/g;\n\n // first line (possibly an empty line)\n var result = (function () {\n var nextLF = string.indexOf('\\n');\n nextLF = nextLF !== -1 ? nextLF : string.length;\n lineRe.lastIndex = nextLF;\n return foldLine(string.slice(0, nextLF), width);\n }());\n // If we haven't reached the first content line yet, don't add an extra \\n.\n var prevMoreIndented = string[0] === '\\n' || string[0] === ' ';\n var moreIndented;\n\n // rest of the lines\n var match;\n while ((match = lineRe.exec(string))) {\n var prefix = match[1], line = match[2];\n moreIndented = (line[0] === ' ');\n result += prefix\n + (!prevMoreIndented && !moreIndented && line !== ''\n ? '\\n' : '')\n + foldLine(line, width);\n prevMoreIndented = moreIndented;\n }\n\n return result;\n}\n\n// Greedy line breaking.\n// Picks the longest line under the limit each time,\n// otherwise settles for the shortest line over the limit.\n// NB. More-indented lines *cannot* be folded, as that would add an extra \\n.\nfunction foldLine(line, width) {\n if (line === '' || line[0] === ' ') return line;\n\n // Since a more-indented line adds a \\n, breaks can't be followed by a space.\n var breakRe = / [^ ]/g; // note: the match index will always be <= length-2.\n var match;\n // start is an inclusive index. end, curr, and next are exclusive.\n var start = 0, end, curr = 0, next = 0;\n var result = '';\n\n // Invariants: 0 <= start <= length-1.\n // 0 <= curr <= next <= max(0, length-2). curr - start <= width.\n // Inside the loop:\n // A match implies length >= 2, so curr and next are <= length-2.\n while ((match = breakRe.exec(line))) {\n next = match.index;\n // maintain invariant: curr - start <= width\n if (next - start > width) {\n end = (curr > start) ? curr : next; // derive end <= length-2\n result += '\\n' + line.slice(start, end);\n // skip the space that was output as \\n\n start = end + 1; // derive start <= length-1\n }\n curr = next;\n }\n\n // By the invariants, start <= length-1, so there is something left over.\n // It is either the whole string or a part starting from non-whitespace.\n result += '\\n';\n // Insert a break if the remainder is too long and there is a break available.\n if (line.length - start > width && curr > start) {\n result += line.slice(start, curr) + '\\n' + line.slice(curr + 1);\n } else {\n result += line.slice(start);\n }\n\n return result.slice(1); // drop extra \\n joiner\n}\n\n// Escapes a double-quoted string.\nfunction escapeString(string) {\n var result = '';\n var char = 0;\n var escapeSeq;\n\n for (var i = 0; i < string.length; char >= 0x10000 ? i += 2 : i++) {\n char = codePointAt(string, i);\n escapeSeq = ESCAPE_SEQUENCES[char];\n\n if (!escapeSeq && isPrintable(char)) {\n result += string[i];\n if (char >= 0x10000) result += string[i + 1];\n } else {\n result += escapeSeq || encodeHex(char);\n }\n }\n\n return result;\n}\n\nfunction writeFlowSequence(state, level, object) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level, value, false, false) ||\n (typeof value === 'undefined' &&\n writeNode(state, level, null, false, false))) {\n\n if (_result !== '') _result += ',' + (!state.condenseFlow ? ' ' : '');\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = '[' + _result + ']';\n}\n\nfunction writeBlockSequence(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n index,\n length,\n value;\n\n for (index = 0, length = object.length; index < length; index += 1) {\n value = object[index];\n\n if (state.replacer) {\n value = state.replacer.call(object, String(index), value);\n }\n\n // Write only valid elements, put null instead of invalid elements.\n if (writeNode(state, level + 1, value, true, true, false, true) ||\n (typeof value === 'undefined' &&\n writeNode(state, level + 1, null, true, true, false, true))) {\n\n if (!compact || _result !== '') {\n _result += generateNextLine(state, level);\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n _result += '-';\n } else {\n _result += '- ';\n }\n\n _result += state.dump;\n }\n }\n\n state.tag = _tag;\n state.dump = _result || '[]'; // Empty sequence if no valid values.\n}\n\nfunction writeFlowMapping(state, level, object) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n pairBuffer;\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n\n pairBuffer = '';\n if (_result !== '') pairBuffer += ', ';\n\n if (state.condenseFlow) pairBuffer += '\"';\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level, objectKey, false, false)) {\n continue; // Skip this pair because of invalid key;\n }\n\n if (state.dump.length > 1024) pairBuffer += '? ';\n\n pairBuffer += state.dump + (state.condenseFlow ? '\"' : '') + ':' + (state.condenseFlow ? '' : ' ');\n\n if (!writeNode(state, level, objectValue, false, false)) {\n continue; // Skip this pair because of invalid value.\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = '{' + _result + '}';\n}\n\nfunction writeBlockMapping(state, level, object, compact) {\n var _result = '',\n _tag = state.tag,\n objectKeyList = Object.keys(object),\n index,\n length,\n objectKey,\n objectValue,\n explicitPair,\n pairBuffer;\n\n // Allow sorting keys so that the output file is deterministic\n if (state.sortKeys === true) {\n // Default sorting\n objectKeyList.sort();\n } else if (typeof state.sortKeys === 'function') {\n // Custom sort function\n objectKeyList.sort(state.sortKeys);\n } else if (state.sortKeys) {\n // Something is wrong\n throw new YAMLException('sortKeys must be a boolean or a function');\n }\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n pairBuffer = '';\n\n if (!compact || _result !== '') {\n pairBuffer += generateNextLine(state, level);\n }\n\n objectKey = objectKeyList[index];\n objectValue = object[objectKey];\n\n if (state.replacer) {\n objectValue = state.replacer.call(object, objectKey, objectValue);\n }\n\n if (!writeNode(state, level + 1, objectKey, true, true, true)) {\n continue; // Skip this pair because of invalid key.\n }\n\n explicitPair = (state.tag !== null && state.tag !== '?') ||\n (state.dump && state.dump.length > 1024);\n\n if (explicitPair) {\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += '?';\n } else {\n pairBuffer += '? ';\n }\n }\n\n pairBuffer += state.dump;\n\n if (explicitPair) {\n pairBuffer += generateNextLine(state, level);\n }\n\n if (!writeNode(state, level + 1, objectValue, true, explicitPair)) {\n continue; // Skip this pair because of invalid value.\n }\n\n if (state.dump && CHAR_LINE_FEED === state.dump.charCodeAt(0)) {\n pairBuffer += ':';\n } else {\n pairBuffer += ': ';\n }\n\n pairBuffer += state.dump;\n\n // Both key and value are valid.\n _result += pairBuffer;\n }\n\n state.tag = _tag;\n state.dump = _result || '{}'; // Empty mapping if no valid pairs.\n}\n\nfunction detectType(state, object, explicit) {\n var _result, typeList, index, length, type, style;\n\n typeList = explicit ? state.explicitTypes : state.implicitTypes;\n\n for (index = 0, length = typeList.length; index < length; index += 1) {\n type = typeList[index];\n\n if ((type.instanceOf || type.predicate) &&\n (!type.instanceOf || ((typeof object === 'object') && (object instanceof type.instanceOf))) &&\n (!type.predicate || type.predicate(object))) {\n\n if (explicit) {\n if (type.multi && type.representName) {\n state.tag = type.representName(object);\n } else {\n state.tag = type.tag;\n }\n } else {\n state.tag = '?';\n }\n\n if (type.represent) {\n style = state.styleMap[type.tag] || type.defaultStyle;\n\n if (_toString.call(type.represent) === '[object Function]') {\n _result = type.represent(object, style);\n } else if (_hasOwnProperty.call(type.represent, style)) {\n _result = type.represent[style](object, style);\n } else {\n throw new YAMLException('!<' + type.tag + '> tag resolver accepts not \"' + style + '\" style');\n }\n\n state.dump = _result;\n }\n\n return true;\n }\n }\n\n return false;\n}\n\n// Serializes `object` and writes it to global `result`.\n// Returns true on success, or false on invalid object.\n//\nfunction writeNode(state, level, object, block, compact, iskey, isblockseq) {\n state.tag = null;\n state.dump = object;\n\n if (!detectType(state, object, false)) {\n detectType(state, object, true);\n }\n\n var type = _toString.call(state.dump);\n var inblock = block;\n var tagStr;\n\n if (block) {\n block = (state.flowLevel < 0 || state.flowLevel > level);\n }\n\n var objectOrArray = type === '[object Object]' || type === '[object Array]',\n duplicateIndex,\n duplicate;\n\n if (objectOrArray) {\n duplicateIndex = state.duplicates.indexOf(object);\n duplicate = duplicateIndex !== -1;\n }\n\n if ((state.tag !== null && state.tag !== '?') || duplicate || (state.indent !== 2 && level > 0)) {\n compact = false;\n }\n\n if (duplicate && state.usedDuplicates[duplicateIndex]) {\n state.dump = '*ref_' + duplicateIndex;\n } else {\n if (objectOrArray && duplicate && !state.usedDuplicates[duplicateIndex]) {\n state.usedDuplicates[duplicateIndex] = true;\n }\n if (type === '[object Object]') {\n if (block && (Object.keys(state.dump).length !== 0)) {\n writeBlockMapping(state, level, state.dump, compact);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowMapping(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object Array]') {\n if (block && (state.dump.length !== 0)) {\n if (state.noArrayIndent && !isblockseq && level > 0) {\n writeBlockSequence(state, level - 1, state.dump, compact);\n } else {\n writeBlockSequence(state, level, state.dump, compact);\n }\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + state.dump;\n }\n } else {\n writeFlowSequence(state, level, state.dump);\n if (duplicate) {\n state.dump = '&ref_' + duplicateIndex + ' ' + state.dump;\n }\n }\n } else if (type === '[object String]') {\n if (state.tag !== '?') {\n writeScalar(state, state.dump, level, iskey, inblock);\n }\n } else if (type === '[object Undefined]') {\n return false;\n } else {\n if (state.skipInvalid) return false;\n throw new YAMLException('unacceptable kind of an object to dump ' + type);\n }\n\n if (state.tag !== null && state.tag !== '?') {\n // Need to encode all characters except those allowed by the spec:\n //\n // [35] ns-dec-digit ::= [#x30-#x39] /* 0-9 */\n // [36] ns-hex-digit ::= ns-dec-digit\n // | [#x41-#x46] /* A-F */ | [#x61-#x66] /* a-f */\n // [37] ns-ascii-letter ::= [#x41-#x5A] /* A-Z */ | [#x61-#x7A] /* a-z */\n // [38] ns-word-char ::= ns-dec-digit | ns-ascii-letter | “-”\n // [39] ns-uri-char ::= “%” ns-hex-digit ns-hex-digit | ns-word-char | “#”\n // | “;” | “/” | “?” | “:” | “@” | “&” | “=” | “+” | “$” | “,”\n // | “_” | “.” | “!” | “~” | “*” | “'” | “(” | “)” | “[” | “]”\n //\n // Also need to encode '!' because it has special meaning (end of tag prefix).\n //\n tagStr = encodeURI(\n state.tag[0] === '!' ? state.tag.slice(1) : state.tag\n ).replace(/!/g, '%21');\n\n if (state.tag[0] === '!') {\n tagStr = '!' + tagStr;\n } else if (tagStr.slice(0, 18) === 'tag:yaml.org,2002:') {\n tagStr = '!!' + tagStr.slice(18);\n } else {\n tagStr = '!<' + tagStr + '>';\n }\n\n state.dump = tagStr + ' ' + state.dump;\n }\n }\n\n return true;\n}\n\nfunction getDuplicateReferences(object, state) {\n var objects = [],\n duplicatesIndexes = [],\n index,\n length;\n\n inspectNode(object, objects, duplicatesIndexes);\n\n for (index = 0, length = duplicatesIndexes.length; index < length; index += 1) {\n state.duplicates.push(objects[duplicatesIndexes[index]]);\n }\n state.usedDuplicates = new Array(length);\n}\n\nfunction inspectNode(object, objects, duplicatesIndexes) {\n var objectKeyList,\n index,\n length;\n\n if (object !== null && typeof object === 'object') {\n index = objects.indexOf(object);\n if (index !== -1) {\n if (duplicatesIndexes.indexOf(index) === -1) {\n duplicatesIndexes.push(index);\n }\n } else {\n objects.push(object);\n\n if (Array.isArray(object)) {\n for (index = 0, length = object.length; index < length; index += 1) {\n inspectNode(object[index], objects, duplicatesIndexes);\n }\n } else {\n objectKeyList = Object.keys(object);\n\n for (index = 0, length = objectKeyList.length; index < length; index += 1) {\n inspectNode(object[objectKeyList[index]], objects, duplicatesIndexes);\n }\n }\n }\n }\n}\n\nfunction dump(input, options) {\n options = options || {};\n\n var state = new State(options);\n\n if (!state.noRefs) getDuplicateReferences(input, state);\n\n var value = input;\n\n if (state.replacer) {\n value = state.replacer.call({ '': value }, '', value);\n }\n\n if (writeNode(state, 0, value, true, true)) return state.dump + '\\n';\n\n return '';\n}\n\nmodule.exports.dump = dump;\n","'use strict';\n\n\nvar loader = require('./lib/loader');\nvar dumper = require('./lib/dumper');\n\n\nfunction renamed(from, to) {\n return function () {\n throw new Error('Function yaml.' + from + ' is removed in js-yaml 4. ' +\n 'Use yaml.' + to + ' instead, which is now safe by default.');\n };\n}\n\n\nmodule.exports.Type = require('./lib/type');\nmodule.exports.Schema = require('./lib/schema');\nmodule.exports.FAILSAFE_SCHEMA = require('./lib/schema/failsafe');\nmodule.exports.JSON_SCHEMA = require('./lib/schema/json');\nmodule.exports.CORE_SCHEMA = require('./lib/schema/core');\nmodule.exports.DEFAULT_SCHEMA = require('./lib/schema/default');\nmodule.exports.load = loader.load;\nmodule.exports.loadAll = loader.loadAll;\nmodule.exports.dump = dumper.dump;\nmodule.exports.YAMLException = require('./lib/exception');\n\n// Re-export all types in case user wants to create custom schema\nmodule.exports.types = {\n binary: require('./lib/type/binary'),\n float: require('./lib/type/float'),\n map: require('./lib/type/map'),\n null: require('./lib/type/null'),\n pairs: require('./lib/type/pairs'),\n set: require('./lib/type/set'),\n timestamp: require('./lib/type/timestamp'),\n bool: require('./lib/type/bool'),\n int: require('./lib/type/int'),\n merge: require('./lib/type/merge'),\n omap: require('./lib/type/omap'),\n seq: require('./lib/type/seq'),\n str: require('./lib/type/str')\n};\n\n// Removed functions from JS-YAML 3.0.x\nmodule.exports.safeLoad = renamed('safeLoad', 'load');\nmodule.exports.safeLoadAll = renamed('safeLoadAll', 'loadAll');\nmodule.exports.safeDump = renamed('safeDump', 'dump');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Lazy = void 0;\nclass Lazy {\n constructor(creator) {\n this._value = null;\n this.creator = creator;\n }\n get hasValue() {\n return this.creator == null;\n }\n get value() {\n if (this.creator == null) {\n return this._value;\n }\n const result = this.creator();\n this.value = result;\n return result;\n }\n set value(value) {\n this._value = value;\n this.creator = null;\n }\n}\nexports.Lazy = Lazy;\n//# sourceMappingURL=main.js.map","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numeric identifiers include numeric identifiers but can be longer.\n// Therefore non-numeric identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a === b ? 0 : a < b ? -1 : 1\n }\n\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n if (this.major < other.major) {\n return -1\n }\n if (this.major > other.major) {\n return 1\n }\n if (this.minor < other.minor) {\n return -1\n }\n if (this.minor > other.minor) {\n return 1\n }\n if (this.patch < other.patch) {\n return -1\n }\n if (this.patch > other.patch) {\n return 1\n }\n return 0\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are prereleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n comp = comp.replace(re[t.BUILD], '')\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If LT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","/**\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Used to identify `toStringTag` values of typed arrays. */\nvar typedArrayTags = {};\ntypedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\ntypedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\ntypedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\ntypedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\ntypedArrayTags[uint32Tag] = true;\ntypedArrayTags[argsTag] = typedArrayTags[arrayTag] =\ntypedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\ntypedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\ntypedArrayTags[errorTag] = typedArrayTags[funcTag] =\ntypedArrayTags[mapTag] = typedArrayTags[numberTag] =\ntypedArrayTags[objectTag] = typedArrayTags[regexpTag] =\ntypedArrayTags[setTag] = typedArrayTags[stringTag] =\ntypedArrayTags[weakMapTag] = false;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Detect free variable `process` from Node.js. */\nvar freeProcess = moduleExports && freeGlobal.process;\n\n/** Used to access faster Node.js helpers. */\nvar nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n}());\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\nfunction arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n}\n\n/**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\nfunction arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n}\n\n/**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\nfunction arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\nfunction baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n}\n\n/**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\nfunction baseUnary(func) {\n return function(value) {\n return func(value);\n };\n}\n\n/**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\n/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\n/**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\nfunction mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n}\n\n/**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\nfunction overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n}\n\n/**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\nfunction setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeKeys = overArg(Object.keys, Object);\n\n/* Built-in method references that are verified to be native. */\nvar DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\n/**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\nfunction SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n}\n\n/**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\n/**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\n// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\n/**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\n/**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\n/**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\n/**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\nfunction stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\n/**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\nfunction arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\n/**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\n/**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n}\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\nfunction baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n}\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n}\n\n/**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\nfunction equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n}\n\n/**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\n/**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\nvar getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n};\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\n/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\n/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\n/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\n/**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\nfunction isEqual(value, other) {\n return baseIsEqual(value, other);\n}\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\n/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\n/**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\nfunction stubArray() {\n return [];\n}\n\n/**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\nfunction stubFalse() {\n return false;\n}\n\nmodule.exports = isEqual;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DownloadedUpdateHelper = void 0;\nexports.createTempUpdateFile = createTempUpdateFile;\nconst crypto_1 = require(\"crypto\");\nconst fs_1 = require(\"fs\");\n// @ts-ignore\nconst isEqual = require(\"lodash.isequal\");\nconst fs_extra_1 = require(\"fs-extra\");\nconst path = require(\"path\");\n/** @private **/\nclass DownloadedUpdateHelper {\n constructor(cacheDir) {\n this.cacheDir = cacheDir;\n this._file = null;\n this._packageFile = null;\n this.versionInfo = null;\n this.fileInfo = null;\n this._downloadedFileInfo = null;\n }\n get downloadedFileInfo() {\n return this._downloadedFileInfo;\n }\n get file() {\n return this._file;\n }\n get packageFile() {\n return this._packageFile;\n }\n get cacheDirForPendingUpdate() {\n return path.join(this.cacheDir, \"pending\");\n }\n async validateDownloadedPath(updateFile, updateInfo, fileInfo, logger) {\n if (this.versionInfo != null && this.file === updateFile && this.fileInfo != null) {\n // update has already been downloaded from this running instance\n // check here only existence, not checksum\n if (isEqual(this.versionInfo, updateInfo) && isEqual(this.fileInfo.info, fileInfo.info) && (await (0, fs_extra_1.pathExists)(updateFile))) {\n return updateFile;\n }\n else {\n return null;\n }\n }\n // update has already been downloaded from some previous app launch\n const cachedUpdateFile = await this.getValidCachedUpdateFile(fileInfo, logger);\n if (cachedUpdateFile === null) {\n return null;\n }\n logger.info(`Update has already been downloaded to ${updateFile}).`);\n this._file = cachedUpdateFile;\n return cachedUpdateFile;\n }\n async setDownloadedFile(downloadedFile, packageFile, versionInfo, fileInfo, updateFileName, isSaveCache) {\n this._file = downloadedFile;\n this._packageFile = packageFile;\n this.versionInfo = versionInfo;\n this.fileInfo = fileInfo;\n this._downloadedFileInfo = {\n fileName: updateFileName,\n sha512: fileInfo.info.sha512,\n isAdminRightsRequired: fileInfo.info.isAdminRightsRequired === true,\n };\n if (isSaveCache) {\n await (0, fs_extra_1.outputJson)(this.getUpdateInfoFile(), this._downloadedFileInfo);\n }\n }\n async clear() {\n this._file = null;\n this._packageFile = null;\n this.versionInfo = null;\n this.fileInfo = null;\n await this.cleanCacheDirForPendingUpdate();\n }\n async cleanCacheDirForPendingUpdate() {\n try {\n // remove stale data\n await (0, fs_extra_1.emptyDir)(this.cacheDirForPendingUpdate);\n }\n catch (_ignore) {\n // ignore\n }\n }\n /**\n * Returns \"update-info.json\" which is created in the update cache directory's \"pending\" subfolder after the first update is downloaded. If the update file does not exist then the cache is cleared and recreated. If the update file exists then its properties are validated.\n * @param fileInfo\n * @param logger\n */\n async getValidCachedUpdateFile(fileInfo, logger) {\n const updateInfoFilePath = this.getUpdateInfoFile();\n const doesUpdateInfoFileExist = await (0, fs_extra_1.pathExists)(updateInfoFilePath);\n if (!doesUpdateInfoFileExist) {\n return null;\n }\n let cachedInfo;\n try {\n cachedInfo = await (0, fs_extra_1.readJson)(updateInfoFilePath);\n }\n catch (error) {\n let message = `No cached update info available`;\n if (error.code !== \"ENOENT\") {\n await this.cleanCacheDirForPendingUpdate();\n message += ` (error on read: ${error.message})`;\n }\n logger.info(message);\n return null;\n }\n const isCachedInfoFileNameValid = (cachedInfo === null || cachedInfo === void 0 ? void 0 : cachedInfo.fileName) !== null;\n if (!isCachedInfoFileNameValid) {\n logger.warn(`Cached update info is corrupted: no fileName, directory for cached update will be cleaned`);\n await this.cleanCacheDirForPendingUpdate();\n return null;\n }\n if (fileInfo.info.sha512 !== cachedInfo.sha512) {\n logger.info(`Cached update sha512 checksum doesn't match the latest available update. New update must be downloaded. Cached: ${cachedInfo.sha512}, expected: ${fileInfo.info.sha512}. Directory for cached update will be cleaned`);\n await this.cleanCacheDirForPendingUpdate();\n return null;\n }\n const updateFile = path.join(this.cacheDirForPendingUpdate, cachedInfo.fileName);\n if (!(await (0, fs_extra_1.pathExists)(updateFile))) {\n logger.info(\"Cached update file doesn't exist\");\n return null;\n }\n const sha512 = await hashFile(updateFile);\n if (fileInfo.info.sha512 !== sha512) {\n logger.warn(`Sha512 checksum doesn't match the latest available update. New update must be downloaded. Cached: ${sha512}, expected: ${fileInfo.info.sha512}`);\n await this.cleanCacheDirForPendingUpdate();\n return null;\n }\n this._downloadedFileInfo = cachedInfo;\n return updateFile;\n }\n getUpdateInfoFile() {\n return path.join(this.cacheDirForPendingUpdate, \"update-info.json\");\n }\n}\nexports.DownloadedUpdateHelper = DownloadedUpdateHelper;\nfunction hashFile(file, algorithm = \"sha512\", encoding = \"base64\", options) {\n return new Promise((resolve, reject) => {\n const hash = (0, crypto_1.createHash)(algorithm);\n hash.on(\"error\", reject).setEncoding(encoding);\n (0, fs_1.createReadStream)(file, { ...options, highWaterMark: 1024 * 1024 /* better to use more memory but hash faster */ })\n .on(\"error\", reject)\n .on(\"end\", () => {\n hash.end();\n resolve(hash.read());\n })\n .pipe(hash, { end: false });\n });\n}\nasync function createTempUpdateFile(name, cacheDir, log) {\n // https://github.com/electron-userland/electron-builder/pull/2474#issuecomment-366481912\n let nameCounter = 0;\n let result = path.join(cacheDir, name);\n for (let i = 0; i < 3; i++) {\n try {\n await (0, fs_extra_1.unlink)(result);\n return result;\n }\n catch (e) {\n if (e.code === \"ENOENT\") {\n return result;\n }\n log.warn(`Error on remove temp update file: ${e}`);\n result = path.join(cacheDir, `${nameCounter++}-${name}`);\n }\n }\n return result;\n}\n//# sourceMappingURL=DownloadedUpdateHelper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getAppCacheDir = getAppCacheDir;\nconst path = require(\"path\");\nconst os_1 = require(\"os\");\nfunction getAppCacheDir() {\n const homedir = (0, os_1.homedir)();\n // https://github.com/electron/electron/issues/1404#issuecomment-194391247\n let result;\n if (process.platform === \"win32\") {\n result = process.env[\"LOCALAPPDATA\"] || path.join(homedir, \"AppData\", \"Local\");\n }\n else if (process.platform === \"darwin\") {\n result = path.join(homedir, \"Library\", \"Caches\");\n }\n else {\n result = process.env[\"XDG_CACHE_HOME\"] || path.join(homedir, \".cache\");\n }\n return result;\n}\n//# sourceMappingURL=AppAdapter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElectronAppAdapter = void 0;\nconst path = require(\"path\");\nconst AppAdapter_1 = require(\"./AppAdapter\");\nclass ElectronAppAdapter {\n constructor(app = require(\"electron\").app) {\n this.app = app;\n }\n whenReady() {\n return this.app.whenReady();\n }\n get version() {\n return this.app.getVersion();\n }\n get name() {\n return this.app.getName();\n }\n get isPackaged() {\n return this.app.isPackaged === true;\n }\n get appUpdateConfigPath() {\n return this.isPackaged ? path.join(process.resourcesPath, \"app-update.yml\") : path.join(this.app.getAppPath(), \"dev-app-update.yml\");\n }\n get userDataPath() {\n return this.app.getPath(\"userData\");\n }\n get baseCachePath() {\n return (0, AppAdapter_1.getAppCacheDir)();\n }\n quit() {\n this.app.quit();\n }\n relaunch() {\n this.app.relaunch();\n }\n onQuit(handler) {\n this.app.once(\"quit\", (_, exitCode) => handler(exitCode));\n }\n}\nexports.ElectronAppAdapter = ElectronAppAdapter;\n//# sourceMappingURL=ElectronAppAdapter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ElectronHttpExecutor = exports.NET_SESSION_NAME = void 0;\nexports.getNetSession = getNetSession;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nexports.NET_SESSION_NAME = \"electron-updater\";\nfunction getNetSession() {\n return require(\"electron\").session.fromPartition(exports.NET_SESSION_NAME, {\n cache: false,\n });\n}\nclass ElectronHttpExecutor extends builder_util_runtime_1.HttpExecutor {\n constructor(proxyLoginCallback) {\n super();\n this.proxyLoginCallback = proxyLoginCallback;\n this.cachedSession = null;\n }\n async download(url, destination, options) {\n return await options.cancellationToken.createPromise((resolve, reject, onCancel) => {\n const requestOptions = {\n headers: options.headers || undefined,\n redirect: \"manual\",\n };\n (0, builder_util_runtime_1.configureRequestUrl)(url, requestOptions);\n (0, builder_util_runtime_1.configureRequestOptions)(requestOptions);\n this.doDownload(requestOptions, {\n destination,\n options,\n onCancel,\n callback: error => {\n if (error == null) {\n resolve(destination);\n }\n else {\n reject(error);\n }\n },\n responseHandler: null,\n }, 0);\n });\n }\n createRequest(options, callback) {\n // fix (node 7+) for making electron updater work when using AWS private buckets, check if headers contain Host property\n if (options.headers && options.headers.Host) {\n // set host value from headers.Host\n options.host = options.headers.Host;\n // remove header property 'Host', if not removed causes net::ERR_INVALID_ARGUMENT exception\n delete options.headers.Host;\n }\n // differential downloader can call this method very often, so, better to cache session\n if (this.cachedSession == null) {\n this.cachedSession = getNetSession();\n }\n const request = require(\"electron\").net.request({\n ...options,\n session: this.cachedSession,\n });\n request.on(\"response\", callback);\n if (this.proxyLoginCallback != null) {\n request.on(\"login\", this.proxyLoginCallback);\n }\n return request;\n }\n addRedirectHandlers(request, options, reject, redirectCount, handler) {\n request.on(\"redirect\", (statusCode, method, redirectUrl) => {\n // no way to modify request options, abort old and make a new one\n // https://github.com/electron/electron/issues/11505\n request.abort();\n if (redirectCount > this.maxRedirects) {\n reject(this.createMaxRedirectError());\n }\n else {\n handler(builder_util_runtime_1.HttpExecutor.prepareRedirectUrlOptions(redirectUrl, options));\n }\n });\n }\n}\nexports.ElectronHttpExecutor = ElectronHttpExecutor;\n//# sourceMappingURL=electronHttpExecutor.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.newBaseUrl = newBaseUrl;\nexports.newUrlFromBase = newUrlFromBase;\nexports.getChannelFilename = getChannelFilename;\n// if baseUrl path doesn't ends with /, this path will be not prepended to passed pathname for new URL(input, base)\nconst url_1 = require(\"url\");\n/** @internal */\nfunction newBaseUrl(url) {\n const result = new url_1.URL(url);\n if (!result.pathname.endsWith(\"/\")) {\n result.pathname += \"/\";\n }\n return result;\n}\n// addRandomQueryToAvoidCaching is false by default because in most cases URL already contains version number,\n// so, it makes sense only for Generic Provider for channel files\nfunction newUrlFromBase(pathname, baseUrl, addRandomQueryToAvoidCaching = false) {\n const result = new url_1.URL(pathname, baseUrl);\n // search is not propagated (search is an empty string if not specified)\n const search = baseUrl.search;\n if (search != null && search.length !== 0) {\n result.search = search;\n }\n else if (addRandomQueryToAvoidCaching) {\n result.search = `noCache=${Date.now().toString(32)}`;\n }\n return result;\n}\nfunction getChannelFilename(channel) {\n return `${channel}.yml`;\n}\n//# sourceMappingURL=util.js.map","/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/6.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\n/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return !!value && typeof value == 'object';\n}\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && objectToString.call(value) == symbolTag);\n}\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\n/**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\nfunction escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n}\n\nmodule.exports = escapeRegExp;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Provider = void 0;\nexports.findFile = findFile;\nexports.parseUpdateInfo = parseUpdateInfo;\nexports.getFileList = getFileList;\nexports.resolveFiles = resolveFiles;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst js_yaml_1 = require(\"js-yaml\");\nconst url_1 = require(\"url\");\nconst util_1 = require(\"../util\");\n// @ts-ignore\nconst escapeRegExp = require(\"lodash.escaperegexp\");\nclass Provider {\n constructor(runtimeOptions) {\n this.runtimeOptions = runtimeOptions;\n this.requestHeaders = null;\n this.executor = runtimeOptions.executor;\n }\n // By default, the blockmap file is in the same directory as the main file\n // But some providers may have a different blockmap file, so we need to override this method\n getBlockMapFiles(baseUrl, oldVersion, newVersion, oldBlockMapFileBaseUrl = null) {\n const newBlockMapUrl = (0, util_1.newUrlFromBase)(`${baseUrl.pathname}.blockmap`, baseUrl);\n const oldBlockMapUrl = (0, util_1.newUrlFromBase)(`${baseUrl.pathname.replace(new RegExp(escapeRegExp(newVersion), \"g\"), oldVersion)}.blockmap`, oldBlockMapFileBaseUrl ? new url_1.URL(oldBlockMapFileBaseUrl) : baseUrl);\n return [oldBlockMapUrl, newBlockMapUrl];\n }\n get isUseMultipleRangeRequest() {\n return this.runtimeOptions.isUseMultipleRangeRequest !== false;\n }\n getChannelFilePrefix() {\n if (this.runtimeOptions.platform === \"linux\") {\n const arch = process.env[\"TEST_UPDATER_ARCH\"] || process.arch;\n const archSuffix = arch === \"x64\" ? \"\" : `-${arch}`;\n return \"-linux\" + archSuffix;\n }\n else {\n return this.runtimeOptions.platform === \"darwin\" ? \"-mac\" : \"\";\n }\n }\n // due to historical reasons for windows we use channel name without platform specifier\n getDefaultChannelName() {\n return this.getCustomChannelName(\"latest\");\n }\n getCustomChannelName(channel) {\n return `${channel}${this.getChannelFilePrefix()}`;\n }\n get fileExtraDownloadHeaders() {\n return null;\n }\n setRequestHeaders(value) {\n this.requestHeaders = value;\n }\n /**\n * Method to perform API request only to resolve update info, but not to download update.\n */\n httpRequest(url, headers, cancellationToken) {\n return this.executor.request(this.createRequestOptions(url, headers), cancellationToken);\n }\n createRequestOptions(url, headers) {\n const result = {};\n if (this.requestHeaders == null) {\n if (headers != null) {\n result.headers = headers;\n }\n }\n else {\n result.headers = headers == null ? this.requestHeaders : { ...this.requestHeaders, ...headers };\n }\n (0, builder_util_runtime_1.configureRequestUrl)(url, result);\n return result;\n }\n}\nexports.Provider = Provider;\nfunction findFile(files, extension, not) {\n var _a;\n if (files.length === 0) {\n throw (0, builder_util_runtime_1.newError)(\"No files provided\", \"ERR_UPDATER_NO_FILES_PROVIDED\");\n }\n const filteredFiles = files.filter(it => it.url.pathname.toLowerCase().endsWith(`.${extension.toLowerCase()}`));\n const result = (_a = filteredFiles.find(it => [it.url.pathname, it.info.url].some(n => n.includes(process.arch)))) !== null && _a !== void 0 ? _a : filteredFiles.shift();\n if (result) {\n return result;\n }\n else if (not == null) {\n return files[0];\n }\n else {\n return files.find(fileInfo => !not.some(ext => fileInfo.url.pathname.toLowerCase().endsWith(`.${ext.toLowerCase()}`)));\n }\n}\nfunction parseUpdateInfo(rawData, channelFile, channelFileUrl) {\n if (rawData == null) {\n throw (0, builder_util_runtime_1.newError)(`Cannot parse update info from ${channelFile} in the latest release artifacts (${channelFileUrl}): rawData: null`, \"ERR_UPDATER_INVALID_UPDATE_INFO\");\n }\n let result;\n try {\n result = (0, js_yaml_1.load)(rawData);\n }\n catch (e) {\n throw (0, builder_util_runtime_1.newError)(`Cannot parse update info from ${channelFile} in the latest release artifacts (${channelFileUrl}): ${e.stack || e.message}, rawData: ${rawData}`, \"ERR_UPDATER_INVALID_UPDATE_INFO\");\n }\n return result;\n}\nfunction getFileList(updateInfo) {\n const files = updateInfo.files;\n if (files != null && files.length > 0) {\n return files;\n }\n // noinspection JSDeprecatedSymbols\n if (updateInfo.path != null) {\n // noinspection JSDeprecatedSymbols\n return [\n {\n url: updateInfo.path,\n sha2: updateInfo.sha2,\n sha512: updateInfo.sha512,\n },\n ];\n }\n else {\n throw (0, builder_util_runtime_1.newError)(`No files provided: ${(0, builder_util_runtime_1.safeStringifyJson)(updateInfo)}`, \"ERR_UPDATER_NO_FILES_PROVIDED\");\n }\n}\nfunction resolveFiles(updateInfo, baseUrl, pathTransformer = (p) => p) {\n const files = getFileList(updateInfo);\n const result = files.map(fileInfo => {\n if (fileInfo.sha2 == null && fileInfo.sha512 == null) {\n throw (0, builder_util_runtime_1.newError)(`Update info doesn't contain nor sha256 neither sha512 checksum: ${(0, builder_util_runtime_1.safeStringifyJson)(fileInfo)}`, \"ERR_UPDATER_NO_CHECKSUM\");\n }\n return {\n url: (0, util_1.newUrlFromBase)(pathTransformer(fileInfo.url), baseUrl),\n info: fileInfo,\n };\n });\n const packages = updateInfo.packages;\n const packageInfo = packages == null ? null : packages[process.arch] || packages.ia32;\n if (packageInfo != null) {\n ;\n result[0].packageInfo = {\n ...packageInfo,\n path: (0, util_1.newUrlFromBase)(pathTransformer(packageInfo.path), baseUrl).href,\n };\n }\n return result;\n}\n//# sourceMappingURL=Provider.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GenericProvider = void 0;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst util_1 = require(\"../util\");\nconst Provider_1 = require(\"./Provider\");\nclass GenericProvider extends Provider_1.Provider {\n constructor(configuration, updater, runtimeOptions) {\n super(runtimeOptions);\n this.configuration = configuration;\n this.updater = updater;\n this.baseUrl = (0, util_1.newBaseUrl)(this.configuration.url);\n }\n get channel() {\n const result = this.updater.channel || this.configuration.channel;\n return result == null ? this.getDefaultChannelName() : this.getCustomChannelName(result);\n }\n async getLatestVersion() {\n const channelFile = (0, util_1.getChannelFilename)(this.channel);\n const channelUrl = (0, util_1.newUrlFromBase)(channelFile, this.baseUrl, this.updater.isAddNoCacheQuery);\n for (let attemptNumber = 0;; attemptNumber++) {\n try {\n return (0, Provider_1.parseUpdateInfo)(await this.httpRequest(channelUrl), channelFile, channelUrl);\n }\n catch (e) {\n if (e instanceof builder_util_runtime_1.HttpError && e.statusCode === 404) {\n throw (0, builder_util_runtime_1.newError)(`Cannot find channel \"${channelFile}\" update info: ${e.stack || e.message}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\");\n }\n else if (e.code === \"ECONNREFUSED\") {\n if (attemptNumber < 3) {\n await new Promise((resolve, reject) => {\n try {\n setTimeout(resolve, 1000 * attemptNumber);\n }\n catch (e) {\n reject(e);\n }\n });\n continue;\n }\n }\n throw e;\n }\n }\n }\n resolveFiles(updateInfo) {\n return (0, Provider_1.resolveFiles)(updateInfo, this.baseUrl);\n }\n}\nexports.GenericProvider = GenericProvider;\n//# sourceMappingURL=GenericProvider.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BitbucketProvider = void 0;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst util_1 = require(\"../util\");\nconst Provider_1 = require(\"./Provider\");\nclass BitbucketProvider extends Provider_1.Provider {\n constructor(configuration, updater, runtimeOptions) {\n super({\n ...runtimeOptions,\n isUseMultipleRangeRequest: false,\n });\n this.configuration = configuration;\n this.updater = updater;\n const { owner, slug } = configuration;\n this.baseUrl = (0, util_1.newBaseUrl)(`https://api.bitbucket.org/2.0/repositories/${owner}/${slug}/downloads`);\n }\n get channel() {\n return this.updater.channel || this.configuration.channel || \"latest\";\n }\n async getLatestVersion() {\n const cancellationToken = new builder_util_runtime_1.CancellationToken();\n const channelFile = (0, util_1.getChannelFilename)(this.getCustomChannelName(this.channel));\n const channelUrl = (0, util_1.newUrlFromBase)(channelFile, this.baseUrl, this.updater.isAddNoCacheQuery);\n try {\n const updateInfo = await this.httpRequest(channelUrl, undefined, cancellationToken);\n return (0, Provider_1.parseUpdateInfo)(updateInfo, channelFile, channelUrl);\n }\n catch (e) {\n throw (0, builder_util_runtime_1.newError)(`Unable to find latest version on ${this.toString()}, please ensure release exists: ${e.stack || e.message}`, \"ERR_UPDATER_LATEST_VERSION_NOT_FOUND\");\n }\n }\n resolveFiles(updateInfo) {\n return (0, Provider_1.resolveFiles)(updateInfo, this.baseUrl);\n }\n toString() {\n const { owner, slug } = this.configuration;\n return `Bitbucket (owner: ${owner}, slug: ${slug}, channel: ${this.channel})`;\n }\n}\nexports.BitbucketProvider = BitbucketProvider;\n//# sourceMappingURL=BitbucketProvider.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GitHubProvider = exports.BaseGitHubProvider = void 0;\nexports.computeReleaseNotes = computeReleaseNotes;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst semver = require(\"semver\");\nconst url_1 = require(\"url\");\nconst util_1 = require(\"../util\");\nconst Provider_1 = require(\"./Provider\");\nconst hrefRegExp = /\\/tag\\/([^/]+)$/;\nclass BaseGitHubProvider extends Provider_1.Provider {\n constructor(options, defaultHost, runtimeOptions) {\n super({\n ...runtimeOptions,\n /* because GitHib uses S3 */\n isUseMultipleRangeRequest: false,\n });\n this.options = options;\n this.baseUrl = (0, util_1.newBaseUrl)((0, builder_util_runtime_1.githubUrl)(options, defaultHost));\n const apiHost = defaultHost === \"github.com\" ? \"api.github.com\" : defaultHost;\n this.baseApiUrl = (0, util_1.newBaseUrl)((0, builder_util_runtime_1.githubUrl)(options, apiHost));\n }\n computeGithubBasePath(result) {\n // https://github.com/electron-userland/electron-builder/issues/1903#issuecomment-320881211\n const host = this.options.host;\n return host && ![\"github.com\", \"api.github.com\"].includes(host) ? `/api/v3${result}` : result;\n }\n}\nexports.BaseGitHubProvider = BaseGitHubProvider;\nclass GitHubProvider extends BaseGitHubProvider {\n constructor(options, updater, runtimeOptions) {\n super(options, \"github.com\", runtimeOptions);\n this.options = options;\n this.updater = updater;\n }\n get channel() {\n const result = this.updater.channel || this.options.channel;\n return result == null ? this.getDefaultChannelName() : this.getCustomChannelName(result);\n }\n async getLatestVersion() {\n var _a, _b, _c, _d, _e;\n const cancellationToken = new builder_util_runtime_1.CancellationToken();\n const feedXml = (await this.httpRequest((0, util_1.newUrlFromBase)(`${this.basePath}.atom`, this.baseUrl), {\n accept: \"application/xml, application/atom+xml, text/xml, */*\",\n }, cancellationToken));\n const feed = (0, builder_util_runtime_1.parseXml)(feedXml);\n // noinspection TypeScriptValidateJSTypes\n let latestRelease = feed.element(\"entry\", false, `No published versions on GitHub`);\n let tag = null;\n try {\n if (this.updater.allowPrerelease) {\n const currentChannel = ((_a = this.updater) === null || _a === void 0 ? void 0 : _a.channel) || ((_b = semver.prerelease(this.updater.currentVersion)) === null || _b === void 0 ? void 0 : _b[0]) || null;\n if (currentChannel === null) {\n // noinspection TypeScriptValidateJSTypes\n tag = hrefRegExp.exec(latestRelease.element(\"link\").attribute(\"href\"))[1];\n }\n else {\n for (const element of feed.getElements(\"entry\")) {\n // noinspection TypeScriptValidateJSTypes\n const hrefElement = hrefRegExp.exec(element.element(\"link\").attribute(\"href\"));\n // If this is null then something is wrong and skip this release\n if (hrefElement === null) {\n continue;\n }\n // This Release's Tag\n const hrefTag = hrefElement[1];\n //Get Channel from this release's tag\n const hrefChannel = ((_c = semver.prerelease(hrefTag)) === null || _c === void 0 ? void 0 : _c[0]) || null;\n const shouldFetchVersion = !currentChannel || [\"alpha\", \"beta\"].includes(currentChannel);\n const isCustomChannel = hrefChannel !== null && ![\"alpha\", \"beta\"].includes(String(hrefChannel));\n // Allow moving from alpha to beta but not down\n const channelMismatch = currentChannel === \"beta\" && hrefChannel === \"alpha\";\n if (shouldFetchVersion && !isCustomChannel && !channelMismatch) {\n tag = hrefTag;\n break;\n }\n const isNextPreRelease = hrefChannel && hrefChannel === currentChannel;\n if (isNextPreRelease) {\n tag = hrefTag;\n break;\n }\n }\n }\n }\n else {\n tag = await this.getLatestTagName(cancellationToken);\n for (const element of feed.getElements(\"entry\")) {\n // noinspection TypeScriptValidateJSTypes\n if (hrefRegExp.exec(element.element(\"link\").attribute(\"href\"))[1] === tag) {\n latestRelease = element;\n break;\n }\n }\n }\n }\n catch (e) {\n throw (0, builder_util_runtime_1.newError)(`Cannot parse releases feed: ${e.stack || e.message},\\nXML:\\n${feedXml}`, \"ERR_UPDATER_INVALID_RELEASE_FEED\");\n }\n if (tag == null) {\n throw (0, builder_util_runtime_1.newError)(`No published versions on GitHub`, \"ERR_UPDATER_NO_PUBLISHED_VERSIONS\");\n }\n let rawData;\n let channelFile = \"\";\n let channelFileUrl = \"\";\n const fetchData = async (channelName) => {\n channelFile = (0, util_1.getChannelFilename)(channelName);\n channelFileUrl = (0, util_1.newUrlFromBase)(this.getBaseDownloadPath(String(tag), channelFile), this.baseUrl);\n const requestOptions = this.createRequestOptions(channelFileUrl);\n try {\n return (await this.executor.request(requestOptions, cancellationToken));\n }\n catch (e) {\n if (e instanceof builder_util_runtime_1.HttpError && e.statusCode === 404) {\n throw (0, builder_util_runtime_1.newError)(`Cannot find ${channelFile} in the latest release artifacts (${channelFileUrl}): ${e.stack || e.message}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\");\n }\n throw e;\n }\n };\n try {\n let channel = this.channel;\n if (this.updater.allowPrerelease && ((_d = semver.prerelease(tag)) === null || _d === void 0 ? void 0 : _d[0])) {\n channel = this.getCustomChannelName(String((_e = semver.prerelease(tag)) === null || _e === void 0 ? void 0 : _e[0]));\n }\n rawData = await fetchData(channel);\n }\n catch (e) {\n if (this.updater.allowPrerelease) {\n // Allow fallback to `latest.yml`\n rawData = await fetchData(this.getDefaultChannelName());\n }\n else {\n throw e;\n }\n }\n const result = (0, Provider_1.parseUpdateInfo)(rawData, channelFile, channelFileUrl);\n if (result.releaseName == null) {\n result.releaseName = latestRelease.elementValueOrEmpty(\"title\");\n }\n if (result.releaseNotes == null) {\n result.releaseNotes = computeReleaseNotes(this.updater.currentVersion, this.updater.fullChangelog, feed, latestRelease);\n }\n return {\n tag: tag,\n ...result,\n };\n }\n async getLatestTagName(cancellationToken) {\n const options = this.options;\n // do not use API for GitHub to avoid limit, only for custom host or GitHub Enterprise\n const url = options.host == null || options.host === \"github.com\"\n ? (0, util_1.newUrlFromBase)(`${this.basePath}/latest`, this.baseUrl)\n : new url_1.URL(`${this.computeGithubBasePath(`/repos/${options.owner}/${options.repo}/releases`)}/latest`, this.baseApiUrl);\n try {\n const rawData = await this.httpRequest(url, { Accept: \"application/json\" }, cancellationToken);\n if (rawData == null) {\n return null;\n }\n const releaseInfo = JSON.parse(rawData);\n return releaseInfo.tag_name;\n }\n catch (e) {\n throw (0, builder_util_runtime_1.newError)(`Unable to find latest version on GitHub (${url}), please ensure a production release exists: ${e.stack || e.message}`, \"ERR_UPDATER_LATEST_VERSION_NOT_FOUND\");\n }\n }\n get basePath() {\n return `/${this.options.owner}/${this.options.repo}/releases`;\n }\n resolveFiles(updateInfo) {\n // still replace space to - due to backward compatibility\n return (0, Provider_1.resolveFiles)(updateInfo, this.baseUrl, p => this.getBaseDownloadPath(updateInfo.tag, p.replace(/ /g, \"-\")));\n }\n getBaseDownloadPath(tag, fileName) {\n return `${this.basePath}/download/${tag}/${fileName}`;\n }\n}\nexports.GitHubProvider = GitHubProvider;\nfunction getNoteValue(parent) {\n const result = parent.elementValueOrEmpty(\"content\");\n // GitHub reports empty notes as <content>No content.</content>\n return result === \"No content.\" ? \"\" : result;\n}\nfunction computeReleaseNotes(currentVersion, isFullChangelog, feed, latestRelease) {\n if (!isFullChangelog) {\n return getNoteValue(latestRelease);\n }\n const releaseNotes = [];\n for (const release of feed.getElements(\"entry\")) {\n // noinspection TypeScriptValidateJSTypes\n const versionRelease = /\\/tag\\/v?([^/]+)$/.exec(release.element(\"link\").attribute(\"href\"))[1];\n if (semver.valid(versionRelease) && semver.lt(currentVersion, versionRelease)) {\n releaseNotes.push({\n version: versionRelease,\n note: getNoteValue(release),\n });\n }\n }\n return releaseNotes.sort((a, b) => semver.rcompare(a.version, b.version));\n}\n//# sourceMappingURL=GitHubProvider.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GitLabProvider = void 0;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst url_1 = require(\"url\");\n// @ts-ignore\nconst escapeRegExp = require(\"lodash.escaperegexp\");\nconst util_1 = require(\"../util\");\nconst Provider_1 = require(\"./Provider\");\nclass GitLabProvider extends Provider_1.Provider {\n /**\n * Normalizes filenames by replacing spaces and underscores with dashes.\n *\n * This is a workaround to handle filename formatting differences between tools:\n * - electron-builder formats filenames like \"test file.txt\" as \"test-file.txt\"\n * - GitLab may provide asset URLs using underscores, such as \"test_file.txt\"\n *\n * Because of this mismatch, we can't reliably extract the correct filename from\n * the asset path without normalization. This function ensures consistent matching\n * across different filename formats by converting all spaces and underscores to dashes.\n *\n * @param filename The filename to normalize\n * @returns The normalized filename with spaces and underscores replaced by dashes\n */\n normalizeFilename(filename) {\n return filename.replace(/ |_/g, \"-\");\n }\n constructor(options, updater, runtimeOptions) {\n super({\n ...runtimeOptions,\n // GitLab might not support multiple range requests efficiently\n isUseMultipleRangeRequest: false,\n });\n this.options = options;\n this.updater = updater;\n // Cache the latest version info to avoid unnecessary HTTP requests\n this.cachedLatestVersion = null;\n const defaultHost = \"gitlab.com\";\n const host = options.host || defaultHost;\n this.baseApiUrl = (0, util_1.newBaseUrl)(`https://${host}/api/v4`);\n }\n get channel() {\n const result = this.updater.channel || this.options.channel;\n return result == null ? this.getDefaultChannelName() : this.getCustomChannelName(result);\n }\n async getLatestVersion() {\n const cancellationToken = new builder_util_runtime_1.CancellationToken();\n // Get latest release from GitLab API using the permalink/latest endpoint\n const latestReleaseUrl = (0, util_1.newUrlFromBase)(`projects/${this.options.projectId}/releases/permalink/latest`, this.baseApiUrl);\n let latestRelease;\n try {\n const header = { \"Content-Type\": \"application/json\", ...this.setAuthHeaderForToken(this.options.token || null) };\n const releaseResponse = await this.httpRequest(latestReleaseUrl, header, cancellationToken);\n if (!releaseResponse) {\n throw (0, builder_util_runtime_1.newError)(\"No latest release found\", \"ERR_UPDATER_NO_PUBLISHED_VERSIONS\");\n }\n latestRelease = JSON.parse(releaseResponse);\n }\n catch (e) {\n throw (0, builder_util_runtime_1.newError)(`Unable to find latest release on GitLab (${latestReleaseUrl}): ${e.stack || e.message}`, \"ERR_UPDATER_LATEST_VERSION_NOT_FOUND\");\n }\n const tag = latestRelease.tag_name;\n // Look for channel file in release assets\n let rawData = null;\n let channelFile = \"\";\n let channelFileUrl = null;\n const fetchChannelData = async (channelName) => {\n channelFile = (0, util_1.getChannelFilename)(channelName);\n // Find the channel file in GitLab release assets\n const channelAsset = latestRelease.assets.links.find(asset => asset.name === channelFile);\n if (!channelAsset) {\n throw (0, builder_util_runtime_1.newError)(`Cannot find ${channelFile} in the latest release assets`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\");\n }\n channelFileUrl = new url_1.URL(channelAsset.direct_asset_url);\n const headers = this.options.token ? { \"PRIVATE-TOKEN\": this.options.token } : undefined;\n try {\n const result = await this.httpRequest(channelFileUrl, headers, cancellationToken);\n if (!result) {\n throw (0, builder_util_runtime_1.newError)(`Empty response from ${channelFileUrl}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\");\n }\n return result;\n }\n catch (e) {\n if (e instanceof builder_util_runtime_1.HttpError && e.statusCode === 404) {\n throw (0, builder_util_runtime_1.newError)(`Cannot find ${channelFile} in the latest release artifacts (${channelFileUrl}): ${e.stack || e.message}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\");\n }\n throw e;\n }\n };\n try {\n rawData = await fetchChannelData(this.channel);\n }\n catch (e) {\n // If custom channel fails, try default channel as fallback\n if (this.channel !== this.getDefaultChannelName()) {\n rawData = await fetchChannelData(this.getDefaultChannelName());\n }\n else {\n throw e;\n }\n }\n if (!rawData) {\n throw (0, builder_util_runtime_1.newError)(`Unable to parse channel data from ${channelFile}`, \"ERR_UPDATER_INVALID_UPDATE_INFO\");\n }\n const result = (0, Provider_1.parseUpdateInfo)(rawData, channelFile, channelFileUrl);\n // Set release name from GitLab if not present\n if (result.releaseName == null) {\n result.releaseName = latestRelease.name;\n }\n // Set release notes from GitLab description if not present\n if (result.releaseNotes == null) {\n result.releaseNotes = latestRelease.description || null;\n }\n // Create assets map from GitLab release assets\n const assetsMap = new Map();\n for (const asset of latestRelease.assets.links) {\n assetsMap.set(this.normalizeFilename(asset.name), asset.direct_asset_url);\n }\n const gitlabUpdateInfo = {\n tag: tag,\n assets: assetsMap,\n ...result,\n };\n // Cache the latest version info\n this.cachedLatestVersion = gitlabUpdateInfo;\n return gitlabUpdateInfo;\n }\n /**\n * Utility function to convert GitlabReleaseAsset to Map<string, string>\n * Maps asset names to their download URLs\n */\n convertAssetsToMap(assets) {\n const assetsMap = new Map();\n for (const asset of assets.links) {\n assetsMap.set(this.normalizeFilename(asset.name), asset.direct_asset_url);\n }\n return assetsMap;\n }\n /**\n * Find blockmap file URL in assets map for a specific filename\n */\n findBlockMapInAssets(assets, filename) {\n const possibleBlockMapNames = [`${filename}.blockmap`, `${this.normalizeFilename(filename)}.blockmap`];\n for (const blockMapName of possibleBlockMapNames) {\n const assetUrl = assets.get(blockMapName);\n if (assetUrl) {\n return new url_1.URL(assetUrl);\n }\n }\n return null;\n }\n async fetchReleaseInfoByVersion(version) {\n const cancellationToken = new builder_util_runtime_1.CancellationToken();\n // Try v-prefixed version first, then fallback to plain version\n const possibleReleaseIds = [`v${version}`, version];\n for (const releaseId of possibleReleaseIds) {\n const releaseUrl = (0, util_1.newUrlFromBase)(`projects/${this.options.projectId}/releases/${encodeURIComponent(releaseId)}`, this.baseApiUrl);\n try {\n const header = { \"Content-Type\": \"application/json\", ...this.setAuthHeaderForToken(this.options.token || null) };\n const releaseResponse = await this.httpRequest(releaseUrl, header, cancellationToken);\n if (releaseResponse) {\n const release = JSON.parse(releaseResponse);\n return release;\n }\n }\n catch (e) {\n // If it's a 404 error, try the next release ID format\n if (e instanceof builder_util_runtime_1.HttpError && e.statusCode === 404) {\n continue;\n }\n // For other errors, throw immediately\n throw (0, builder_util_runtime_1.newError)(`Unable to find release ${releaseId} on GitLab (${releaseUrl}): ${e.stack || e.message}`, \"ERR_UPDATER_RELEASE_NOT_FOUND\");\n }\n }\n // If we get here, none of the release ID formats worked\n throw (0, builder_util_runtime_1.newError)(`Unable to find release with version ${version} (tried: ${possibleReleaseIds.join(\", \")}) on GitLab`, \"ERR_UPDATER_RELEASE_NOT_FOUND\");\n }\n setAuthHeaderForToken(token) {\n const headers = {};\n if (token != null) {\n // If the token starts with \"Bearer\", it is an OAuth application secret\n // Note that the original gitlab token would not start with \"Bearer\"\n // it might start with \"gloas-\", if so user needs to add \"Bearer \" prefix to the token\n if (token.startsWith(\"Bearer\")) {\n headers.authorization = token;\n }\n else {\n headers[\"PRIVATE-TOKEN\"] = token;\n }\n }\n return headers;\n }\n /**\n * Get version info for blockmap files, using cache when possible\n */\n async getVersionInfoForBlockMap(version) {\n // Check if we can use cached version info\n if (this.cachedLatestVersion && this.cachedLatestVersion.version === version) {\n return this.cachedLatestVersion.assets;\n }\n // Fetch version info if not cached or version doesn't match\n const versionInfo = await this.fetchReleaseInfoByVersion(version);\n if (versionInfo && versionInfo.assets) {\n return this.convertAssetsToMap(versionInfo.assets);\n }\n return null;\n }\n /**\n * Find blockmap URLs from version assets\n */\n async findBlockMapUrlsFromAssets(oldVersion, newVersion, baseFilename) {\n let newBlockMapUrl = null;\n let oldBlockMapUrl = null;\n // Get new version assets\n const newVersionAssets = await this.getVersionInfoForBlockMap(newVersion);\n if (newVersionAssets) {\n newBlockMapUrl = this.findBlockMapInAssets(newVersionAssets, baseFilename);\n }\n // Get old version assets\n const oldVersionAssets = await this.getVersionInfoForBlockMap(oldVersion);\n if (oldVersionAssets) {\n const oldFilename = baseFilename.replace(new RegExp(escapeRegExp(newVersion), \"g\"), oldVersion);\n oldBlockMapUrl = this.findBlockMapInAssets(oldVersionAssets, oldFilename);\n }\n return [oldBlockMapUrl, newBlockMapUrl];\n }\n async getBlockMapFiles(baseUrl, oldVersion, newVersion, oldBlockMapFileBaseUrl = null) {\n // If is `project_upload`, find blockmap files from corresponding gitLab assets\n // Because each asset has an unique path that includes an identified hash code,\n // e.g. https://gitlab.com/-/project/71361100/uploads/051f27a925eaf679f2ad688105362acc/latest.yml\n if (this.options.uploadTarget === \"project_upload\") {\n // Get the base filename from the URL to find corresponding blockmap files\n const baseFilename = baseUrl.pathname.split(\"/\").pop() || \"\";\n // Try to find blockmap files in GitLab assets\n const [oldBlockMapUrl, newBlockMapUrl] = await this.findBlockMapUrlsFromAssets(oldVersion, newVersion, baseFilename);\n if (!newBlockMapUrl) {\n throw (0, builder_util_runtime_1.newError)(`Cannot find blockmap file for ${newVersion} in GitLab assets`, \"ERR_UPDATER_BLOCKMAP_FILE_NOT_FOUND\");\n }\n if (!oldBlockMapUrl) {\n throw (0, builder_util_runtime_1.newError)(`Cannot find blockmap file for ${oldVersion} in GitLab assets`, \"ERR_UPDATER_BLOCKMAP_FILE_NOT_FOUND\");\n }\n return [oldBlockMapUrl, newBlockMapUrl];\n }\n else {\n return super.getBlockMapFiles(baseUrl, oldVersion, newVersion, oldBlockMapFileBaseUrl);\n }\n }\n resolveFiles(updateInfo) {\n return (0, Provider_1.getFileList)(updateInfo).map((fileInfo) => {\n // Try both original and normalized filename formats\n const possibleNames = [\n fileInfo.url, // Original filename\n this.normalizeFilename(fileInfo.url), // Normalized filename (spaces/underscores → dashes)\n ];\n const matchingAssetName = possibleNames.find(name => updateInfo.assets.has(name));\n const assetUrl = matchingAssetName ? updateInfo.assets.get(matchingAssetName) : undefined;\n if (!assetUrl) {\n throw (0, builder_util_runtime_1.newError)(`Cannot find asset \"${fileInfo.url}\" in GitLab release assets. Available assets: ${Array.from(updateInfo.assets.keys()).join(\", \")}`, \"ERR_UPDATER_ASSET_NOT_FOUND\");\n }\n return {\n url: new url_1.URL(assetUrl),\n info: fileInfo,\n };\n });\n }\n toString() {\n return `GitLab (projectId: ${this.options.projectId}, channel: ${this.channel})`;\n }\n}\nexports.GitLabProvider = GitLabProvider;\n//# sourceMappingURL=GitLabProvider.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.KeygenProvider = void 0;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst util_1 = require(\"../util\");\nconst Provider_1 = require(\"./Provider\");\nclass KeygenProvider extends Provider_1.Provider {\n constructor(configuration, updater, runtimeOptions) {\n super({\n ...runtimeOptions,\n isUseMultipleRangeRequest: false,\n });\n this.configuration = configuration;\n this.updater = updater;\n this.defaultHostname = \"api.keygen.sh\";\n const host = this.configuration.host || this.defaultHostname;\n this.baseUrl = (0, util_1.newBaseUrl)(`https://${host}/v1/accounts/${this.configuration.account}/artifacts?product=${this.configuration.product}`);\n }\n get channel() {\n return this.updater.channel || this.configuration.channel || \"stable\";\n }\n async getLatestVersion() {\n const cancellationToken = new builder_util_runtime_1.CancellationToken();\n const channelFile = (0, util_1.getChannelFilename)(this.getCustomChannelName(this.channel));\n const channelUrl = (0, util_1.newUrlFromBase)(channelFile, this.baseUrl, this.updater.isAddNoCacheQuery);\n try {\n const updateInfo = await this.httpRequest(channelUrl, {\n Accept: \"application/vnd.api+json\",\n \"Keygen-Version\": \"1.1\",\n }, cancellationToken);\n return (0, Provider_1.parseUpdateInfo)(updateInfo, channelFile, channelUrl);\n }\n catch (e) {\n throw (0, builder_util_runtime_1.newError)(`Unable to find latest version on ${this.toString()}, please ensure release exists: ${e.stack || e.message}`, \"ERR_UPDATER_LATEST_VERSION_NOT_FOUND\");\n }\n }\n resolveFiles(updateInfo) {\n return (0, Provider_1.resolveFiles)(updateInfo, this.baseUrl);\n }\n toString() {\n const { account, product, platform } = this.configuration;\n return `Keygen (account: ${account}, product: ${product}, platform: ${platform}, channel: ${this.channel})`;\n }\n}\nexports.KeygenProvider = KeygenProvider;\n//# sourceMappingURL=KeygenProvider.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PrivateGitHubProvider = void 0;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst js_yaml_1 = require(\"js-yaml\");\nconst path = require(\"path\");\nconst url_1 = require(\"url\");\nconst util_1 = require(\"../util\");\nconst GitHubProvider_1 = require(\"./GitHubProvider\");\nconst Provider_1 = require(\"./Provider\");\nclass PrivateGitHubProvider extends GitHubProvider_1.BaseGitHubProvider {\n constructor(options, updater, token, runtimeOptions) {\n super(options, \"api.github.com\", runtimeOptions);\n this.updater = updater;\n this.token = token;\n }\n createRequestOptions(url, headers) {\n const result = super.createRequestOptions(url, headers);\n result.redirect = \"manual\";\n return result;\n }\n async getLatestVersion() {\n const cancellationToken = new builder_util_runtime_1.CancellationToken();\n const channelFile = (0, util_1.getChannelFilename)(this.getDefaultChannelName());\n const releaseInfo = await this.getLatestVersionInfo(cancellationToken);\n const asset = releaseInfo.assets.find(it => it.name === channelFile);\n if (asset == null) {\n // html_url must be always, but just to be sure\n throw (0, builder_util_runtime_1.newError)(`Cannot find ${channelFile} in the release ${releaseInfo.html_url || releaseInfo.name}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\");\n }\n const url = new url_1.URL(asset.url);\n let result;\n try {\n result = (0, js_yaml_1.load)((await this.httpRequest(url, this.configureHeaders(\"application/octet-stream\"), cancellationToken)));\n }\n catch (e) {\n if (e instanceof builder_util_runtime_1.HttpError && e.statusCode === 404) {\n throw (0, builder_util_runtime_1.newError)(`Cannot find ${channelFile} in the latest release artifacts (${url}): ${e.stack || e.message}`, \"ERR_UPDATER_CHANNEL_FILE_NOT_FOUND\");\n }\n throw e;\n }\n ;\n result.assets = releaseInfo.assets;\n return result;\n }\n get fileExtraDownloadHeaders() {\n return this.configureHeaders(\"application/octet-stream\");\n }\n configureHeaders(accept) {\n return {\n accept,\n authorization: `token ${this.token}`,\n };\n }\n async getLatestVersionInfo(cancellationToken) {\n const allowPrerelease = this.updater.allowPrerelease;\n let basePath = this.basePath;\n if (!allowPrerelease) {\n basePath = `${basePath}/latest`;\n }\n const url = (0, util_1.newUrlFromBase)(basePath, this.baseUrl);\n try {\n const version = JSON.parse((await this.httpRequest(url, this.configureHeaders(\"application/vnd.github.v3+json\"), cancellationToken)));\n if (allowPrerelease) {\n return version.find(it => it.prerelease) || version[0];\n }\n else {\n return version;\n }\n }\n catch (e) {\n throw (0, builder_util_runtime_1.newError)(`Unable to find latest version on GitHub (${url}), please ensure a production release exists: ${e.stack || e.message}`, \"ERR_UPDATER_LATEST_VERSION_NOT_FOUND\");\n }\n }\n get basePath() {\n return this.computeGithubBasePath(`/repos/${this.options.owner}/${this.options.repo}/releases`);\n }\n resolveFiles(updateInfo) {\n return (0, Provider_1.getFileList)(updateInfo).map(it => {\n const name = path.posix.basename(it.url).replace(/ /g, \"-\");\n const asset = updateInfo.assets.find(it => it != null && it.name === name);\n if (asset == null) {\n throw (0, builder_util_runtime_1.newError)(`Cannot find asset \"${name}\" in: ${JSON.stringify(updateInfo.assets, null, 2)}`, \"ERR_UPDATER_ASSET_NOT_FOUND\");\n }\n return {\n url: new url_1.URL(asset.url),\n info: it,\n };\n });\n }\n}\nexports.PrivateGitHubProvider = PrivateGitHubProvider;\n//# sourceMappingURL=PrivateGitHubProvider.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isUrlProbablySupportMultiRangeRequests = isUrlProbablySupportMultiRangeRequests;\nexports.createClient = createClient;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst BitbucketProvider_1 = require(\"./providers/BitbucketProvider\");\nconst GenericProvider_1 = require(\"./providers/GenericProvider\");\nconst GitHubProvider_1 = require(\"./providers/GitHubProvider\");\nconst GitLabProvider_1 = require(\"./providers/GitLabProvider\");\nconst KeygenProvider_1 = require(\"./providers/KeygenProvider\");\nconst PrivateGitHubProvider_1 = require(\"./providers/PrivateGitHubProvider\");\nfunction isUrlProbablySupportMultiRangeRequests(url) {\n return !url.includes(\"s3.amazonaws.com\");\n}\nfunction createClient(data, updater, runtimeOptions) {\n // noinspection SuspiciousTypeOfGuard\n if (typeof data === \"string\") {\n throw (0, builder_util_runtime_1.newError)(\"Please pass PublishConfiguration object\", \"ERR_UPDATER_INVALID_PROVIDER_CONFIGURATION\");\n }\n const provider = data.provider;\n switch (provider) {\n case \"github\": {\n const githubOptions = data;\n const token = (githubOptions.private ? process.env[\"GH_TOKEN\"] || process.env[\"GITHUB_TOKEN\"] : null) || githubOptions.token;\n if (token == null) {\n return new GitHubProvider_1.GitHubProvider(githubOptions, updater, runtimeOptions);\n }\n else {\n return new PrivateGitHubProvider_1.PrivateGitHubProvider(githubOptions, updater, token, runtimeOptions);\n }\n }\n case \"bitbucket\":\n return new BitbucketProvider_1.BitbucketProvider(data, updater, runtimeOptions);\n case \"gitlab\":\n return new GitLabProvider_1.GitLabProvider(data, updater, runtimeOptions);\n case \"keygen\":\n return new KeygenProvider_1.KeygenProvider(data, updater, runtimeOptions);\n case \"s3\":\n case \"spaces\":\n return new GenericProvider_1.GenericProvider({\n provider: \"generic\",\n url: (0, builder_util_runtime_1.getS3LikeProviderBaseUrl)(data),\n channel: data.channel || null,\n }, updater, {\n ...runtimeOptions,\n // https://github.com/minio/minio/issues/5285#issuecomment-350428955\n isUseMultipleRangeRequest: false,\n });\n case \"generic\": {\n const options = data;\n return new GenericProvider_1.GenericProvider(options, updater, {\n ...runtimeOptions,\n isUseMultipleRangeRequest: options.useMultipleRangeRequest !== false && isUrlProbablySupportMultiRangeRequests(options.url),\n });\n }\n case \"custom\": {\n const options = data;\n const constructor = options.updateProvider;\n if (!constructor) {\n throw (0, builder_util_runtime_1.newError)(\"Custom provider not specified\", \"ERR_UPDATER_INVALID_PROVIDER_CONFIGURATION\");\n }\n return new constructor(options, updater, runtimeOptions);\n }\n default:\n throw (0, builder_util_runtime_1.newError)(`Unsupported provider: ${provider}`, \"ERR_UPDATER_UNSUPPORTED_PROVIDER\");\n }\n}\n//# sourceMappingURL=providerFactory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.OperationKind = void 0;\nexports.computeOperations = computeOperations;\nvar OperationKind;\n(function (OperationKind) {\n OperationKind[OperationKind[\"COPY\"] = 0] = \"COPY\";\n OperationKind[OperationKind[\"DOWNLOAD\"] = 1] = \"DOWNLOAD\";\n})(OperationKind || (exports.OperationKind = OperationKind = {}));\nfunction computeOperations(oldBlockMap, newBlockMap, logger) {\n const nameToOldBlocks = buildBlockFileMap(oldBlockMap.files);\n const nameToNewBlocks = buildBlockFileMap(newBlockMap.files);\n let lastOperation = null;\n // for now only one file is supported in block map\n const blockMapFile = newBlockMap.files[0];\n const operations = [];\n const name = blockMapFile.name;\n const oldEntry = nameToOldBlocks.get(name);\n if (oldEntry == null) {\n // new file (unrealistic case for now, because in any case both blockmap contain the only file named as \"file\")\n throw new Error(`no file ${name} in old blockmap`);\n }\n const newFile = nameToNewBlocks.get(name);\n let changedBlockCount = 0;\n const { checksumToOffset: checksumToOldOffset, checksumToOldSize } = buildChecksumMap(nameToOldBlocks.get(name), oldEntry.offset, logger);\n let newOffset = blockMapFile.offset;\n for (let i = 0; i < newFile.checksums.length; newOffset += newFile.sizes[i], i++) {\n const blockSize = newFile.sizes[i];\n const checksum = newFile.checksums[i];\n let oldOffset = checksumToOldOffset.get(checksum);\n if (oldOffset != null && checksumToOldSize.get(checksum) !== blockSize) {\n logger.warn(`Checksum (\"${checksum}\") matches, but size differs (old: ${checksumToOldSize.get(checksum)}, new: ${blockSize})`);\n oldOffset = undefined;\n }\n if (oldOffset === undefined) {\n // download data from new file\n changedBlockCount++;\n if (lastOperation != null && lastOperation.kind === OperationKind.DOWNLOAD && lastOperation.end === newOffset) {\n lastOperation.end += blockSize;\n }\n else {\n lastOperation = {\n kind: OperationKind.DOWNLOAD,\n start: newOffset,\n end: newOffset + blockSize,\n // oldBlocks: null,\n };\n validateAndAdd(lastOperation, operations, checksum, i);\n }\n }\n else {\n // reuse data from old file\n if (lastOperation != null && lastOperation.kind === OperationKind.COPY && lastOperation.end === oldOffset) {\n lastOperation.end += blockSize;\n // lastOperation.oldBlocks!!.push(checksum)\n }\n else {\n lastOperation = {\n kind: OperationKind.COPY,\n start: oldOffset,\n end: oldOffset + blockSize,\n // oldBlocks: [checksum]\n };\n validateAndAdd(lastOperation, operations, checksum, i);\n }\n }\n }\n if (changedBlockCount > 0) {\n logger.info(`File${blockMapFile.name === \"file\" ? \"\" : \" \" + blockMapFile.name} has ${changedBlockCount} changed blocks`);\n }\n return operations;\n}\nconst isValidateOperationRange = process.env[\"DIFFERENTIAL_DOWNLOAD_PLAN_BUILDER_VALIDATE_RANGES\"] === \"true\";\nfunction validateAndAdd(operation, operations, checksum, index) {\n if (isValidateOperationRange && operations.length !== 0) {\n const lastOperation = operations[operations.length - 1];\n if (lastOperation.kind === operation.kind && operation.start < lastOperation.end && operation.start > lastOperation.start) {\n const min = [lastOperation.start, lastOperation.end, operation.start, operation.end].reduce((p, v) => (p < v ? p : v));\n throw new Error(`operation (block index: ${index}, checksum: ${checksum}, kind: ${OperationKind[operation.kind]}) overlaps previous operation (checksum: ${checksum}):\\n` +\n `abs: ${lastOperation.start} until ${lastOperation.end} and ${operation.start} until ${operation.end}\\n` +\n `rel: ${lastOperation.start - min} until ${lastOperation.end - min} and ${operation.start - min} until ${operation.end - min}`);\n }\n }\n operations.push(operation);\n}\nfunction buildChecksumMap(file, fileOffset, logger) {\n const checksumToOffset = new Map();\n const checksumToSize = new Map();\n let offset = fileOffset;\n for (let i = 0; i < file.checksums.length; i++) {\n const checksum = file.checksums[i];\n const size = file.sizes[i];\n const existing = checksumToSize.get(checksum);\n if (existing === undefined) {\n checksumToOffset.set(checksum, offset);\n checksumToSize.set(checksum, size);\n }\n else if (logger.debug != null) {\n const sizeExplanation = existing === size ? \"(same size)\" : `(size: ${existing}, this size: ${size})`;\n logger.debug(`${checksum} duplicated in blockmap ${sizeExplanation}, it doesn't lead to broken differential downloader, just corresponding block will be skipped)`);\n }\n offset += size;\n }\n return { checksumToOffset, checksumToOldSize: checksumToSize };\n}\nfunction buildBlockFileMap(list) {\n const result = new Map();\n for (const item of list) {\n result.set(item.name, item);\n }\n return result;\n}\n//# sourceMappingURL=downloadPlanBuilder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DataSplitter = void 0;\nexports.copyData = copyData;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst fs_1 = require(\"fs\");\nconst stream_1 = require(\"stream\");\nconst downloadPlanBuilder_1 = require(\"./downloadPlanBuilder\");\nconst DOUBLE_CRLF = Buffer.from(\"\\r\\n\\r\\n\");\nvar ReadState;\n(function (ReadState) {\n ReadState[ReadState[\"INIT\"] = 0] = \"INIT\";\n ReadState[ReadState[\"HEADER\"] = 1] = \"HEADER\";\n ReadState[ReadState[\"BODY\"] = 2] = \"BODY\";\n})(ReadState || (ReadState = {}));\nfunction copyData(task, out, oldFileFd, reject, resolve) {\n const readStream = (0, fs_1.createReadStream)(\"\", {\n fd: oldFileFd,\n autoClose: false,\n start: task.start,\n // end is inclusive\n end: task.end - 1,\n });\n readStream.on(\"error\", reject);\n readStream.once(\"end\", resolve);\n readStream.pipe(out, {\n end: false,\n });\n}\nclass DataSplitter extends stream_1.Writable {\n constructor(out, options, partIndexToTaskIndex, boundary, partIndexToLength, finishHandler, grandTotalBytes, onProgress) {\n super();\n this.out = out;\n this.options = options;\n this.partIndexToTaskIndex = partIndexToTaskIndex;\n this.partIndexToLength = partIndexToLength;\n this.finishHandler = finishHandler;\n this.grandTotalBytes = grandTotalBytes;\n this.onProgress = onProgress;\n // properties for progress update calculations\n this.start = Date.now(); // download start time used to calculate average rate\n this.nextUpdate = this.start + 1000; // timestamp of next update to prevent updates more often than once per second\n this.transferred = 0; // total number of bytes transferred\n this.delta = 0; // number of bytes transferred since last update, reset after each update\n this.partIndex = -1;\n this.headerListBuffer = null;\n this.readState = ReadState.INIT;\n this.ignoreByteCount = 0;\n this.remainingPartDataCount = 0;\n this.actualPartLength = 0;\n this.boundaryLength = boundary.length + 4; /* size of \\r\\n-- */\n // first chunk doesn't start with \\r\\n\n this.ignoreByteCount = this.boundaryLength - 2;\n }\n get isFinished() {\n return this.partIndex === this.partIndexToLength.length;\n }\n // noinspection JSUnusedGlobalSymbols\n _write(data, encoding, callback) {\n if (this.isFinished) {\n console.error(`Trailing ignored data: ${data.length} bytes`);\n return;\n }\n this.handleData(data)\n .then(() => {\n if (this.onProgress) {\n const now = Date.now();\n if ((now >= this.nextUpdate || this.transferred === this.grandTotalBytes) && this.grandTotalBytes && (now - this.start) / 1000) {\n this.nextUpdate = now + 1000;\n this.onProgress({\n total: this.grandTotalBytes,\n delta: this.delta,\n transferred: this.transferred,\n percent: (this.transferred / this.grandTotalBytes) * 100,\n bytesPerSecond: Math.round(this.transferred / ((now - this.start) / 1000)),\n });\n this.delta = 0;\n }\n }\n callback();\n })\n .catch(callback);\n }\n async handleData(chunk) {\n let start = 0;\n if (this.ignoreByteCount !== 0 && this.remainingPartDataCount !== 0) {\n throw (0, builder_util_runtime_1.newError)(\"Internal error\", \"ERR_DATA_SPLITTER_BYTE_COUNT_MISMATCH\");\n }\n if (this.ignoreByteCount > 0) {\n const toIgnore = Math.min(this.ignoreByteCount, chunk.length);\n this.ignoreByteCount -= toIgnore;\n start = toIgnore;\n }\n else if (this.remainingPartDataCount > 0) {\n const toRead = Math.min(this.remainingPartDataCount, chunk.length);\n this.remainingPartDataCount -= toRead;\n await this.processPartData(chunk, 0, toRead);\n start = toRead;\n }\n if (start === chunk.length) {\n return;\n }\n if (this.readState === ReadState.HEADER) {\n const headerListEnd = this.searchHeaderListEnd(chunk, start);\n if (headerListEnd === -1) {\n return;\n }\n start = headerListEnd;\n this.readState = ReadState.BODY;\n // header list is ignored, we don't need it\n this.headerListBuffer = null;\n }\n while (true) {\n if (this.readState === ReadState.BODY) {\n this.readState = ReadState.INIT;\n }\n else {\n this.partIndex++;\n let taskIndex = this.partIndexToTaskIndex.get(this.partIndex);\n if (taskIndex == null) {\n if (this.isFinished) {\n taskIndex = this.options.end;\n }\n else {\n throw (0, builder_util_runtime_1.newError)(\"taskIndex is null\", \"ERR_DATA_SPLITTER_TASK_INDEX_IS_NULL\");\n }\n }\n const prevTaskIndex = this.partIndex === 0 ? this.options.start : this.partIndexToTaskIndex.get(this.partIndex - 1) + 1; /* prev part is download, next maybe copy */\n if (prevTaskIndex < taskIndex) {\n await this.copyExistingData(prevTaskIndex, taskIndex);\n }\n else if (prevTaskIndex > taskIndex) {\n throw (0, builder_util_runtime_1.newError)(\"prevTaskIndex must be < taskIndex\", \"ERR_DATA_SPLITTER_TASK_INDEX_ASSERT_FAILED\");\n }\n if (this.isFinished) {\n this.onPartEnd();\n this.finishHandler();\n return;\n }\n start = this.searchHeaderListEnd(chunk, start);\n if (start === -1) {\n this.readState = ReadState.HEADER;\n return;\n }\n }\n const partLength = this.partIndexToLength[this.partIndex];\n const end = start + partLength;\n const effectiveEnd = Math.min(end, chunk.length);\n await this.processPartStarted(chunk, start, effectiveEnd);\n this.remainingPartDataCount = partLength - (effectiveEnd - start);\n if (this.remainingPartDataCount > 0) {\n return;\n }\n start = end + this.boundaryLength;\n if (start >= chunk.length) {\n this.ignoreByteCount = this.boundaryLength - (chunk.length - end);\n return;\n }\n }\n }\n copyExistingData(index, end) {\n return new Promise((resolve, reject) => {\n const w = () => {\n if (index === end) {\n resolve();\n return;\n }\n const task = this.options.tasks[index];\n if (task.kind !== downloadPlanBuilder_1.OperationKind.COPY) {\n reject(new Error(\"Task kind must be COPY\"));\n return;\n }\n copyData(task, this.out, this.options.oldFileFd, reject, () => {\n index++;\n w();\n });\n };\n w();\n });\n }\n searchHeaderListEnd(chunk, readOffset) {\n const headerListEnd = chunk.indexOf(DOUBLE_CRLF, readOffset);\n if (headerListEnd !== -1) {\n return headerListEnd + DOUBLE_CRLF.length;\n }\n // not all headers data were received, save to buffer\n const partialChunk = readOffset === 0 ? chunk : chunk.slice(readOffset);\n if (this.headerListBuffer == null) {\n this.headerListBuffer = partialChunk;\n }\n else {\n this.headerListBuffer = Buffer.concat([this.headerListBuffer, partialChunk]);\n }\n return -1;\n }\n onPartEnd() {\n const expectedLength = this.partIndexToLength[this.partIndex - 1];\n if (this.actualPartLength !== expectedLength) {\n throw (0, builder_util_runtime_1.newError)(`Expected length: ${expectedLength} differs from actual: ${this.actualPartLength}`, \"ERR_DATA_SPLITTER_LENGTH_MISMATCH\");\n }\n this.actualPartLength = 0;\n }\n processPartStarted(data, start, end) {\n if (this.partIndex !== 0) {\n this.onPartEnd();\n }\n return this.processPartData(data, start, end);\n }\n processPartData(data, start, end) {\n this.actualPartLength += end - start;\n this.transferred += end - start;\n this.delta += end - start;\n const out = this.out;\n if (out.write(start === 0 && data.length === end ? data : data.slice(start, end))) {\n return Promise.resolve();\n }\n else {\n return new Promise((resolve, reject) => {\n out.on(\"error\", reject);\n out.once(\"drain\", () => {\n out.removeListener(\"error\", reject);\n resolve();\n });\n });\n }\n }\n}\nexports.DataSplitter = DataSplitter;\n//# sourceMappingURL=DataSplitter.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.executeTasksUsingMultipleRangeRequests = executeTasksUsingMultipleRangeRequests;\nexports.checkIsRangesSupported = checkIsRangesSupported;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst DataSplitter_1 = require(\"./DataSplitter\");\nconst downloadPlanBuilder_1 = require(\"./downloadPlanBuilder\");\nfunction executeTasksUsingMultipleRangeRequests(differentialDownloader, tasks, out, oldFileFd, reject) {\n const w = (taskOffset) => {\n if (taskOffset >= tasks.length) {\n if (differentialDownloader.fileMetadataBuffer != null) {\n out.write(differentialDownloader.fileMetadataBuffer);\n }\n out.end();\n return;\n }\n const nextOffset = taskOffset + 1000;\n doExecuteTasks(differentialDownloader, {\n tasks,\n start: taskOffset,\n end: Math.min(tasks.length, nextOffset),\n oldFileFd,\n }, out, () => w(nextOffset), reject);\n };\n return w;\n}\nfunction doExecuteTasks(differentialDownloader, options, out, resolve, reject) {\n let ranges = \"bytes=\";\n let partCount = 0;\n let grandTotalBytes = 0;\n const partIndexToTaskIndex = new Map();\n const partIndexToLength = [];\n for (let i = options.start; i < options.end; i++) {\n const task = options.tasks[i];\n if (task.kind === downloadPlanBuilder_1.OperationKind.DOWNLOAD) {\n ranges += `${task.start}-${task.end - 1}, `;\n partIndexToTaskIndex.set(partCount, i);\n partCount++;\n partIndexToLength.push(task.end - task.start);\n grandTotalBytes += task.end - task.start;\n }\n }\n if (partCount <= 1) {\n // the only remote range - copy\n const w = (index) => {\n if (index >= options.end) {\n resolve();\n return;\n }\n const task = options.tasks[index++];\n if (task.kind === downloadPlanBuilder_1.OperationKind.COPY) {\n (0, DataSplitter_1.copyData)(task, out, options.oldFileFd, reject, () => w(index));\n }\n else {\n const requestOptions = differentialDownloader.createRequestOptions();\n requestOptions.headers.Range = `bytes=${task.start}-${task.end - 1}`;\n const request = differentialDownloader.httpExecutor.createRequest(requestOptions, response => {\n response.on(\"error\", reject);\n if (!checkIsRangesSupported(response, reject)) {\n return;\n }\n response.pipe(out, {\n end: false,\n });\n response.once(\"end\", () => w(index));\n });\n differentialDownloader.httpExecutor.addErrorAndTimeoutHandlers(request, reject);\n request.end();\n }\n };\n w(options.start);\n return;\n }\n const requestOptions = differentialDownloader.createRequestOptions();\n requestOptions.headers.Range = ranges.substring(0, ranges.length - 2);\n const request = differentialDownloader.httpExecutor.createRequest(requestOptions, response => {\n if (!checkIsRangesSupported(response, reject)) {\n return;\n }\n const contentType = (0, builder_util_runtime_1.safeGetHeader)(response, \"content-type\");\n const m = /^multipart\\/.+?\\s*;\\s*boundary=(?:\"([^\"]+)\"|([^\\s\";]+))\\s*$/i.exec(contentType);\n if (m == null) {\n reject(new Error(`Content-Type \"multipart/byteranges\" is expected, but got \"${contentType}\"`));\n return;\n }\n const dicer = new DataSplitter_1.DataSplitter(out, options, partIndexToTaskIndex, m[1] || m[2], partIndexToLength, resolve, grandTotalBytes, differentialDownloader.options.onProgress);\n dicer.on(\"error\", reject);\n response.pipe(dicer);\n response.on(\"end\", () => {\n setTimeout(() => {\n request.abort();\n reject(new Error(\"Response ends without calling any handlers\"));\n }, 10000);\n });\n });\n differentialDownloader.httpExecutor.addErrorAndTimeoutHandlers(request, reject);\n request.end();\n}\nfunction checkIsRangesSupported(response, reject) {\n // Electron net handles redirects automatically, our NodeJS test server doesn't use redirects - so, we don't check 3xx codes.\n if (response.statusCode >= 400) {\n reject((0, builder_util_runtime_1.createHttpError)(response));\n return false;\n }\n if (response.statusCode !== 206) {\n const acceptRanges = (0, builder_util_runtime_1.safeGetHeader)(response, \"accept-ranges\");\n if (acceptRanges == null || acceptRanges === \"none\") {\n reject(new Error(`Server doesn't support Accept-Ranges (response code ${response.statusCode})`));\n return false;\n }\n }\n return true;\n}\n//# sourceMappingURL=multipleRangeDownloader.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ProgressDifferentialDownloadCallbackTransform = void 0;\nconst stream_1 = require(\"stream\");\nvar OperationKind;\n(function (OperationKind) {\n OperationKind[OperationKind[\"COPY\"] = 0] = \"COPY\";\n OperationKind[OperationKind[\"DOWNLOAD\"] = 1] = \"DOWNLOAD\";\n})(OperationKind || (OperationKind = {}));\nclass ProgressDifferentialDownloadCallbackTransform extends stream_1.Transform {\n constructor(progressDifferentialDownloadInfo, cancellationToken, onProgress) {\n super();\n this.progressDifferentialDownloadInfo = progressDifferentialDownloadInfo;\n this.cancellationToken = cancellationToken;\n this.onProgress = onProgress;\n this.start = Date.now();\n this.transferred = 0;\n this.delta = 0;\n this.expectedBytes = 0;\n this.index = 0;\n this.operationType = OperationKind.COPY;\n this.nextUpdate = this.start + 1000;\n }\n _transform(chunk, encoding, callback) {\n if (this.cancellationToken.cancelled) {\n callback(new Error(\"cancelled\"), null);\n return;\n }\n // Don't send progress update when copying from disk\n if (this.operationType == OperationKind.COPY) {\n callback(null, chunk);\n return;\n }\n this.transferred += chunk.length;\n this.delta += chunk.length;\n const now = Date.now();\n if (now >= this.nextUpdate &&\n this.transferred !== this.expectedBytes /* will be emitted by endRangeDownload() */ &&\n this.transferred !== this.progressDifferentialDownloadInfo.grandTotal /* will be emitted on _flush */) {\n this.nextUpdate = now + 1000;\n this.onProgress({\n total: this.progressDifferentialDownloadInfo.grandTotal,\n delta: this.delta,\n transferred: this.transferred,\n percent: (this.transferred / this.progressDifferentialDownloadInfo.grandTotal) * 100,\n bytesPerSecond: Math.round(this.transferred / ((now - this.start) / 1000)),\n });\n this.delta = 0;\n }\n callback(null, chunk);\n }\n beginFileCopy() {\n this.operationType = OperationKind.COPY;\n }\n beginRangeDownload() {\n this.operationType = OperationKind.DOWNLOAD;\n this.expectedBytes += this.progressDifferentialDownloadInfo.expectedByteCounts[this.index++];\n }\n endRangeDownload() {\n // _flush() will doour final 100%\n if (this.transferred !== this.progressDifferentialDownloadInfo.grandTotal) {\n this.onProgress({\n total: this.progressDifferentialDownloadInfo.grandTotal,\n delta: this.delta,\n transferred: this.transferred,\n percent: (this.transferred / this.progressDifferentialDownloadInfo.grandTotal) * 100,\n bytesPerSecond: Math.round(this.transferred / ((Date.now() - this.start) / 1000)),\n });\n }\n }\n // Called when we are 100% done with the connection/download\n _flush(callback) {\n if (this.cancellationToken.cancelled) {\n callback(new Error(\"cancelled\"));\n return;\n }\n this.onProgress({\n total: this.progressDifferentialDownloadInfo.grandTotal,\n delta: this.delta,\n transferred: this.transferred,\n percent: 100,\n bytesPerSecond: Math.round(this.transferred / ((Date.now() - this.start) / 1000)),\n });\n this.delta = 0;\n this.transferred = 0;\n callback(null);\n }\n}\nexports.ProgressDifferentialDownloadCallbackTransform = ProgressDifferentialDownloadCallbackTransform;\n//# sourceMappingURL=ProgressDifferentialDownloadCallbackTransform.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DifferentialDownloader = void 0;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst fs_extra_1 = require(\"fs-extra\");\nconst fs_1 = require(\"fs\");\nconst DataSplitter_1 = require(\"./DataSplitter\");\nconst url_1 = require(\"url\");\nconst downloadPlanBuilder_1 = require(\"./downloadPlanBuilder\");\nconst multipleRangeDownloader_1 = require(\"./multipleRangeDownloader\");\nconst ProgressDifferentialDownloadCallbackTransform_1 = require(\"./ProgressDifferentialDownloadCallbackTransform\");\nclass DifferentialDownloader {\n // noinspection TypeScriptAbstractClassConstructorCanBeMadeProtected\n constructor(blockAwareFileInfo, httpExecutor, options) {\n this.blockAwareFileInfo = blockAwareFileInfo;\n this.httpExecutor = httpExecutor;\n this.options = options;\n this.fileMetadataBuffer = null;\n this.logger = options.logger;\n }\n createRequestOptions() {\n const result = {\n headers: {\n ...this.options.requestHeaders,\n accept: \"*/*\",\n },\n };\n (0, builder_util_runtime_1.configureRequestUrl)(this.options.newUrl, result);\n // user-agent, cache-control and other common options\n (0, builder_util_runtime_1.configureRequestOptions)(result);\n return result;\n }\n doDownload(oldBlockMap, newBlockMap) {\n // we don't check other metadata like compressionMethod - generic check that it is make sense to differentially update is suitable for it\n if (oldBlockMap.version !== newBlockMap.version) {\n throw new Error(`version is different (${oldBlockMap.version} - ${newBlockMap.version}), full download is required`);\n }\n const logger = this.logger;\n const operations = (0, downloadPlanBuilder_1.computeOperations)(oldBlockMap, newBlockMap, logger);\n if (logger.debug != null) {\n logger.debug(JSON.stringify(operations, null, 2));\n }\n let downloadSize = 0;\n let copySize = 0;\n for (const operation of operations) {\n const length = operation.end - operation.start;\n if (operation.kind === downloadPlanBuilder_1.OperationKind.DOWNLOAD) {\n downloadSize += length;\n }\n else {\n copySize += length;\n }\n }\n const newSize = this.blockAwareFileInfo.size;\n if (downloadSize + copySize + (this.fileMetadataBuffer == null ? 0 : this.fileMetadataBuffer.length) !== newSize) {\n throw new Error(`Internal error, size mismatch: downloadSize: ${downloadSize}, copySize: ${copySize}, newSize: ${newSize}`);\n }\n logger.info(`Full: ${formatBytes(newSize)}, To download: ${formatBytes(downloadSize)} (${Math.round(downloadSize / (newSize / 100))}%)`);\n return this.downloadFile(operations);\n }\n downloadFile(tasks) {\n const fdList = [];\n const closeFiles = () => {\n return Promise.all(fdList.map(openedFile => {\n return (0, fs_extra_1.close)(openedFile.descriptor).catch((e) => {\n this.logger.error(`cannot close file \"${openedFile.path}\": ${e}`);\n });\n }));\n };\n return this.doDownloadFile(tasks, fdList)\n .then(closeFiles)\n .catch((e) => {\n // then must be after catch here (since then always throws error)\n return closeFiles()\n .catch(closeFilesError => {\n // closeFiles never throw error, but just to be sure\n try {\n this.logger.error(`cannot close files: ${closeFilesError}`);\n }\n catch (errorOnLog) {\n try {\n console.error(errorOnLog);\n }\n catch (_ignored) {\n // ok, give up and ignore error\n }\n }\n throw e;\n })\n .then(() => {\n throw e;\n });\n });\n }\n async doDownloadFile(tasks, fdList) {\n const oldFileFd = await (0, fs_extra_1.open)(this.options.oldFile, \"r\");\n fdList.push({ descriptor: oldFileFd, path: this.options.oldFile });\n const newFileFd = await (0, fs_extra_1.open)(this.options.newFile, \"w\");\n fdList.push({ descriptor: newFileFd, path: this.options.newFile });\n const fileOut = (0, fs_1.createWriteStream)(this.options.newFile, { fd: newFileFd });\n await new Promise((resolve, reject) => {\n const streams = [];\n // Create our download info transformer if we have one\n let downloadInfoTransform = undefined;\n if (!this.options.isUseMultipleRangeRequest && this.options.onProgress) {\n const expectedByteCounts = [];\n let grandTotalBytes = 0;\n for (const task of tasks) {\n if (task.kind === downloadPlanBuilder_1.OperationKind.DOWNLOAD) {\n expectedByteCounts.push(task.end - task.start);\n grandTotalBytes += task.end - task.start;\n }\n }\n const progressDifferentialDownloadInfo = {\n expectedByteCounts: expectedByteCounts,\n grandTotal: grandTotalBytes,\n };\n downloadInfoTransform = new ProgressDifferentialDownloadCallbackTransform_1.ProgressDifferentialDownloadCallbackTransform(progressDifferentialDownloadInfo, this.options.cancellationToken, this.options.onProgress);\n streams.push(downloadInfoTransform);\n }\n const digestTransform = new builder_util_runtime_1.DigestTransform(this.blockAwareFileInfo.sha512);\n // to simply debug, do manual validation to allow file to be fully written\n digestTransform.isValidateOnEnd = false;\n streams.push(digestTransform);\n // noinspection JSArrowFunctionCanBeReplacedWithShorthand\n fileOut.on(\"finish\", () => {\n ;\n fileOut.close(() => {\n // remove from fd list because closed successfully\n fdList.splice(1, 1);\n try {\n digestTransform.validate();\n }\n catch (e) {\n reject(e);\n return;\n }\n resolve(undefined);\n });\n });\n streams.push(fileOut);\n let lastStream = null;\n for (const stream of streams) {\n stream.on(\"error\", reject);\n if (lastStream == null) {\n lastStream = stream;\n }\n else {\n lastStream = lastStream.pipe(stream);\n }\n }\n const firstStream = streams[0];\n let w;\n if (this.options.isUseMultipleRangeRequest) {\n w = (0, multipleRangeDownloader_1.executeTasksUsingMultipleRangeRequests)(this, tasks, firstStream, oldFileFd, reject);\n w(0);\n return;\n }\n let downloadOperationCount = 0;\n let actualUrl = null;\n this.logger.info(`Differential download: ${this.options.newUrl}`);\n const requestOptions = this.createRequestOptions();\n requestOptions.redirect = \"manual\";\n w = (index) => {\n var _a, _b;\n if (index >= tasks.length) {\n if (this.fileMetadataBuffer != null) {\n firstStream.write(this.fileMetadataBuffer);\n }\n firstStream.end();\n return;\n }\n const operation = tasks[index++];\n if (operation.kind === downloadPlanBuilder_1.OperationKind.COPY) {\n // We are copying, let's not send status updates to the UI\n if (downloadInfoTransform) {\n downloadInfoTransform.beginFileCopy();\n }\n (0, DataSplitter_1.copyData)(operation, firstStream, oldFileFd, reject, () => w(index));\n return;\n }\n const range = `bytes=${operation.start}-${operation.end - 1}`;\n requestOptions.headers.range = range;\n (_b = (_a = this.logger) === null || _a === void 0 ? void 0 : _a.debug) === null || _b === void 0 ? void 0 : _b.call(_a, `download range: ${range}`);\n // We are starting to download\n if (downloadInfoTransform) {\n downloadInfoTransform.beginRangeDownload();\n }\n const request = this.httpExecutor.createRequest(requestOptions, response => {\n response.on(\"error\", reject);\n response.on(\"aborted\", () => {\n reject(new Error(\"response has been aborted by the server\"));\n });\n // Electron net handles redirects automatically, our NodeJS test server doesn't use redirects - so, we don't check 3xx codes.\n if (response.statusCode >= 400) {\n reject((0, builder_util_runtime_1.createHttpError)(response));\n }\n response.pipe(firstStream, {\n end: false,\n });\n response.once(\"end\", () => {\n // Pass on that we are downloading a segment\n if (downloadInfoTransform) {\n downloadInfoTransform.endRangeDownload();\n }\n if (++downloadOperationCount === 100) {\n downloadOperationCount = 0;\n setTimeout(() => w(index), 1000);\n }\n else {\n w(index);\n }\n });\n });\n request.on(\"redirect\", (statusCode, method, redirectUrl) => {\n this.logger.info(`Redirect to ${removeQuery(redirectUrl)}`);\n actualUrl = redirectUrl;\n (0, builder_util_runtime_1.configureRequestUrl)(new url_1.URL(actualUrl), requestOptions);\n request.followRedirect();\n });\n this.httpExecutor.addErrorAndTimeoutHandlers(request, reject);\n request.end();\n };\n w(0);\n });\n }\n async readRemoteBytes(start, endInclusive) {\n const buffer = Buffer.allocUnsafe(endInclusive + 1 - start);\n const requestOptions = this.createRequestOptions();\n requestOptions.headers.range = `bytes=${start}-${endInclusive}`;\n let position = 0;\n await this.request(requestOptions, chunk => {\n chunk.copy(buffer, position);\n position += chunk.length;\n });\n if (position !== buffer.length) {\n throw new Error(`Received data length ${position} is not equal to expected ${buffer.length}`);\n }\n return buffer;\n }\n request(requestOptions, dataHandler) {\n return new Promise((resolve, reject) => {\n const request = this.httpExecutor.createRequest(requestOptions, response => {\n if (!(0, multipleRangeDownloader_1.checkIsRangesSupported)(response, reject)) {\n return;\n }\n response.on(\"error\", reject);\n response.on(\"aborted\", () => {\n reject(new Error(\"response has been aborted by the server\"));\n });\n response.on(\"data\", dataHandler);\n response.on(\"end\", () => resolve());\n });\n this.httpExecutor.addErrorAndTimeoutHandlers(request, reject);\n request.end();\n });\n }\n}\nexports.DifferentialDownloader = DifferentialDownloader;\nfunction formatBytes(value, symbol = \" KB\") {\n return new Intl.NumberFormat(\"en\").format((value / 1024).toFixed(2)) + symbol;\n}\n// safety\nfunction removeQuery(url) {\n const index = url.indexOf(\"?\");\n return index < 0 ? url : url.substring(0, index);\n}\n//# sourceMappingURL=DifferentialDownloader.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GenericDifferentialDownloader = void 0;\nconst DifferentialDownloader_1 = require(\"./DifferentialDownloader\");\nclass GenericDifferentialDownloader extends DifferentialDownloader_1.DifferentialDownloader {\n download(oldBlockMap, newBlockMap) {\n return this.doDownload(oldBlockMap, newBlockMap);\n }\n}\nexports.GenericDifferentialDownloader = GenericDifferentialDownloader;\n//# sourceMappingURL=GenericDifferentialDownloader.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.UpdaterSignal = exports.UPDATE_DOWNLOADED = exports.DOWNLOAD_PROGRESS = exports.CancellationToken = void 0;\nexports.addHandler = addHandler;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nObject.defineProperty(exports, \"CancellationToken\", { enumerable: true, get: function () { return builder_util_runtime_1.CancellationToken; } });\nexports.DOWNLOAD_PROGRESS = \"download-progress\";\nexports.UPDATE_DOWNLOADED = \"update-downloaded\";\nclass UpdaterSignal {\n constructor(emitter) {\n this.emitter = emitter;\n }\n /**\n * Emitted when an authenticating proxy is [asking for user credentials](https://github.com/electron/electron/blob/master/docs/api/client-request.md#event-login).\n */\n login(handler) {\n addHandler(this.emitter, \"login\", handler);\n }\n progress(handler) {\n addHandler(this.emitter, exports.DOWNLOAD_PROGRESS, handler);\n }\n updateDownloaded(handler) {\n addHandler(this.emitter, exports.UPDATE_DOWNLOADED, handler);\n }\n updateCancelled(handler) {\n addHandler(this.emitter, \"update-cancelled\", handler);\n }\n}\nexports.UpdaterSignal = UpdaterSignal;\nconst isLogEvent = false;\nfunction addHandler(emitter, event, handler) {\n if (isLogEvent) {\n emitter.on(event, (...args) => {\n console.log(\"%s %s\", event, args);\n handler(...args);\n });\n }\n else {\n emitter.on(event, handler);\n }\n}\n//# sourceMappingURL=types.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NoOpLogger = exports.AppUpdater = void 0;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst crypto_1 = require(\"crypto\");\nconst os_1 = require(\"os\");\nconst events_1 = require(\"events\");\nconst fs_extra_1 = require(\"fs-extra\");\nconst js_yaml_1 = require(\"js-yaml\");\nconst lazy_val_1 = require(\"lazy-val\");\nconst path = require(\"path\");\nconst semver_1 = require(\"semver\");\nconst DownloadedUpdateHelper_1 = require(\"./DownloadedUpdateHelper\");\nconst ElectronAppAdapter_1 = require(\"./ElectronAppAdapter\");\nconst electronHttpExecutor_1 = require(\"./electronHttpExecutor\");\nconst GenericProvider_1 = require(\"./providers/GenericProvider\");\nconst providerFactory_1 = require(\"./providerFactory\");\nconst zlib_1 = require(\"zlib\");\nconst GenericDifferentialDownloader_1 = require(\"./differentialDownloader/GenericDifferentialDownloader\");\nconst types_1 = require(\"./types\");\nclass AppUpdater extends events_1.EventEmitter {\n /**\n * Get the update channel. Doesn't return `channel` from the update configuration, only if was previously set.\n */\n get channel() {\n return this._channel;\n }\n /**\n * Set the update channel. Overrides `channel` in the update configuration.\n *\n * `allowDowngrade` will be automatically set to `true`. If this behavior is not suitable for you, simple set `allowDowngrade` explicitly after.\n */\n set channel(value) {\n if (this._channel != null) {\n // noinspection SuspiciousTypeOfGuard\n if (typeof value !== \"string\") {\n throw (0, builder_util_runtime_1.newError)(`Channel must be a string, but got: ${value}`, \"ERR_UPDATER_INVALID_CHANNEL\");\n }\n else if (value.length === 0) {\n throw (0, builder_util_runtime_1.newError)(`Channel must be not an empty string`, \"ERR_UPDATER_INVALID_CHANNEL\");\n }\n }\n this._channel = value;\n this.allowDowngrade = true;\n }\n /**\n * Shortcut for explicitly adding auth tokens to request headers\n */\n addAuthHeader(token) {\n this.requestHeaders = Object.assign({}, this.requestHeaders, {\n authorization: token,\n });\n }\n // noinspection JSMethodCanBeStatic,JSUnusedGlobalSymbols\n get netSession() {\n return (0, electronHttpExecutor_1.getNetSession)();\n }\n /**\n * The logger. You can pass [electron-log](https://github.com/megahertz/electron-log), [winston](https://github.com/winstonjs/winston) or another logger with the following interface: `{ info(), warn(), error() }`.\n * Set it to `null` if you would like to disable a logging feature.\n */\n get logger() {\n return this._logger;\n }\n set logger(value) {\n this._logger = value == null ? new NoOpLogger() : value;\n }\n // noinspection JSUnusedGlobalSymbols\n /**\n * test only\n * @private\n */\n set updateConfigPath(value) {\n this.clientPromise = null;\n this._appUpdateConfigPath = value;\n this.configOnDisk = new lazy_val_1.Lazy(() => this.loadUpdateConfig());\n }\n /**\n * Allows developer to override default logic for determining if an update is supported.\n * The default logic compares the `UpdateInfo` minimum system version against the `os.release()` with `semver` package\n */\n get isUpdateSupported() {\n return this._isUpdateSupported;\n }\n set isUpdateSupported(value) {\n if (value) {\n this._isUpdateSupported = value;\n }\n }\n /**\n * Allows developer to override default logic for determining if the user is below the rollout threshold.\n * The default logic compares the staging percentage with numerical representation of user ID.\n * An override can define custom logic, or bypass it if needed.\n */\n get isUserWithinRollout() {\n return this._isUserWithinRollout;\n }\n set isUserWithinRollout(value) {\n if (value) {\n this._isUserWithinRollout = value;\n }\n }\n constructor(options, app) {\n super();\n /**\n * Whether to automatically download an update when it is found.\n * @default true\n */\n this.autoDownload = true;\n /**\n * Whether to automatically install a downloaded update on app quit (if `quitAndInstall` was not called before).\n * @default true\n */\n this.autoInstallOnAppQuit = true;\n /**\n * Whether to run the app after finish install when run the installer is NOT in silent mode.\n * @default true\n */\n this.autoRunAppAfterInstall = true;\n /**\n * *GitHub provider only.* Whether to allow update to pre-release versions. Defaults to `true` if application version contains prerelease components (e.g. `0.12.1-alpha.1`, here `alpha` is a prerelease component), otherwise `false`.\n *\n * If `true`, downgrade will be allowed (`allowDowngrade` will be set to `true`).\n */\n this.allowPrerelease = false;\n /**\n * *GitHub provider only.* Get all release notes (from current version to latest), not just the latest.\n * @default false\n */\n this.fullChangelog = false;\n /**\n * Whether to allow version downgrade (when a user from the beta channel wants to go back to the stable channel).\n *\n * Taken in account only if channel differs (pre-release version component in terms of semantic versioning).\n *\n * @default false\n */\n this.allowDowngrade = false;\n /**\n * Web installer files might not have signature verification, this switch prevents to load them unless it is needed.\n *\n * Currently false to prevent breaking the current API, but it should be changed to default true at some point that\n * breaking changes are allowed.\n *\n * @default false\n */\n this.disableWebInstaller = false;\n /**\n * *NSIS only* Disable differential downloads and always perform full download of installer.\n *\n * @default false\n */\n this.disableDifferentialDownload = false;\n /**\n * Allows developer to force the updater to work in \"dev\" mode, looking for \"dev-app-update.yml\" instead of \"app-update.yml\"\n * Dev: `path.join(this.app.getAppPath(), \"dev-app-update.yml\")`\n * Prod: `path.join(process.resourcesPath!, \"app-update.yml\")`\n *\n * @default false\n */\n this.forceDevUpdateConfig = false;\n /**\n * The base URL of the old block map file.\n *\n * When null, the updater will use the base URL of the update file to download the update.\n * When set, the updater will use this string as the base URL of the old block map file.\n * Some servers like github cannot download the old block map file from latest release,\n * so you need to compute the old block map file base URL manually.\n *\n * @default null\n */\n this.previousBlockmapBaseUrlOverride = null;\n this._channel = null;\n this.downloadedUpdateHelper = null;\n /**\n * The request headers.\n */\n this.requestHeaders = null;\n this._logger = console;\n // noinspection JSUnusedGlobalSymbols\n /**\n * For type safety you can use signals, e.g. `autoUpdater.signals.updateDownloaded(() => {})` instead of `autoUpdater.on('update-available', () => {})`\n */\n this.signals = new types_1.UpdaterSignal(this);\n this._appUpdateConfigPath = null;\n this._isUpdateSupported = updateInfo => this.checkIfUpdateSupported(updateInfo);\n this._isUserWithinRollout = updateInfo => this.isStagingMatch(updateInfo);\n this.clientPromise = null;\n this.stagingUserIdPromise = new lazy_val_1.Lazy(() => this.getOrCreateStagingUserId());\n // public, allow to read old config for anyone\n /** @internal */\n this.configOnDisk = new lazy_val_1.Lazy(() => this.loadUpdateConfig());\n this.checkForUpdatesPromise = null;\n this.downloadPromise = null;\n this.updateInfoAndProvider = null;\n /**\n * @private\n * @internal\n */\n this._testOnlyOptions = null;\n this.on(\"error\", (error) => {\n this._logger.error(`Error: ${error.stack || error.message}`);\n });\n if (app == null) {\n this.app = new ElectronAppAdapter_1.ElectronAppAdapter();\n this.httpExecutor = new electronHttpExecutor_1.ElectronHttpExecutor((authInfo, callback) => this.emit(\"login\", authInfo, callback));\n }\n else {\n this.app = app;\n this.httpExecutor = null;\n }\n const currentVersionString = this.app.version;\n const currentVersion = (0, semver_1.parse)(currentVersionString);\n if (currentVersion == null) {\n throw (0, builder_util_runtime_1.newError)(`App version is not a valid semver version: \"${currentVersionString}\"`, \"ERR_UPDATER_INVALID_VERSION\");\n }\n this.currentVersion = currentVersion;\n this.allowPrerelease = hasPrereleaseComponents(currentVersion);\n if (options != null) {\n this.setFeedURL(options);\n if (typeof options !== \"string\" && options.requestHeaders) {\n this.requestHeaders = options.requestHeaders;\n }\n }\n }\n //noinspection JSMethodCanBeStatic,JSUnusedGlobalSymbols\n getFeedURL() {\n return \"Deprecated. Do not use it.\";\n }\n /**\n * Configure update provider. If value is `string`, [GenericServerOptions](./publish.md#genericserveroptions) will be set with value as `url`.\n * @param options If you want to override configuration in the `app-update.yml`.\n */\n setFeedURL(options) {\n const runtimeOptions = this.createProviderRuntimeOptions();\n // https://github.com/electron-userland/electron-builder/issues/1105\n let provider;\n if (typeof options === \"string\") {\n provider = new GenericProvider_1.GenericProvider({ provider: \"generic\", url: options }, this, {\n ...runtimeOptions,\n isUseMultipleRangeRequest: (0, providerFactory_1.isUrlProbablySupportMultiRangeRequests)(options),\n });\n }\n else {\n provider = (0, providerFactory_1.createClient)(options, this, runtimeOptions);\n }\n this.clientPromise = Promise.resolve(provider);\n }\n /**\n * Asks the server whether there is an update.\n * @returns null if the updater is disabled, otherwise info about the latest version\n */\n checkForUpdates() {\n if (!this.isUpdaterActive()) {\n return Promise.resolve(null);\n }\n let checkForUpdatesPromise = this.checkForUpdatesPromise;\n if (checkForUpdatesPromise != null) {\n this._logger.info(\"Checking for update (already in progress)\");\n return checkForUpdatesPromise;\n }\n const nullizePromise = () => (this.checkForUpdatesPromise = null);\n this._logger.info(\"Checking for update\");\n checkForUpdatesPromise = this.doCheckForUpdates()\n .then(it => {\n nullizePromise();\n return it;\n })\n .catch((e) => {\n nullizePromise();\n this.emit(\"error\", e, `Cannot check for updates: ${(e.stack || e).toString()}`);\n throw e;\n });\n this.checkForUpdatesPromise = checkForUpdatesPromise;\n return checkForUpdatesPromise;\n }\n isUpdaterActive() {\n const isEnabled = this.app.isPackaged || this.forceDevUpdateConfig;\n if (!isEnabled) {\n this._logger.info(\"Skip checkForUpdates because application is not packed and dev update config is not forced\");\n return false;\n }\n return true;\n }\n // noinspection JSUnusedGlobalSymbols\n checkForUpdatesAndNotify(downloadNotification) {\n return this.checkForUpdates().then(it => {\n if (!(it === null || it === void 0 ? void 0 : it.downloadPromise)) {\n if (this._logger.debug != null) {\n this._logger.debug(\"checkForUpdatesAndNotify called, downloadPromise is null\");\n }\n return it;\n }\n void it.downloadPromise.then(() => {\n const notificationContent = AppUpdater.formatDownloadNotification(it.updateInfo.version, this.app.name, downloadNotification);\n new (require(\"electron\").Notification)(notificationContent).show();\n });\n return it;\n });\n }\n static formatDownloadNotification(version, appName, downloadNotification) {\n if (downloadNotification == null) {\n downloadNotification = {\n title: \"A new update is ready to install\",\n body: `{appName} version {version} has been downloaded and will be automatically installed on exit`,\n };\n }\n downloadNotification = {\n title: downloadNotification.title.replace(\"{appName}\", appName).replace(\"{version}\", version),\n body: downloadNotification.body.replace(\"{appName}\", appName).replace(\"{version}\", version),\n };\n return downloadNotification;\n }\n async isStagingMatch(updateInfo) {\n const rawStagingPercentage = updateInfo.stagingPercentage;\n let stagingPercentage = rawStagingPercentage;\n if (stagingPercentage == null) {\n return true;\n }\n stagingPercentage = parseInt(stagingPercentage, 10);\n if (isNaN(stagingPercentage)) {\n this._logger.warn(`Staging percentage is NaN: ${rawStagingPercentage}`);\n return true;\n }\n // convert from user 0-100 to internal 0-1\n stagingPercentage = stagingPercentage / 100;\n const stagingUserId = await this.stagingUserIdPromise.value;\n const val = builder_util_runtime_1.UUID.parse(stagingUserId).readUInt32BE(12);\n const percentage = val / 0xffffffff;\n this._logger.info(`Staging percentage: ${stagingPercentage}, percentage: ${percentage}, user id: ${stagingUserId}`);\n return percentage < stagingPercentage;\n }\n computeFinalHeaders(headers) {\n if (this.requestHeaders != null) {\n Object.assign(headers, this.requestHeaders);\n }\n return headers;\n }\n async isUpdateAvailable(updateInfo) {\n const latestVersion = (0, semver_1.parse)(updateInfo.version);\n if (latestVersion == null) {\n throw (0, builder_util_runtime_1.newError)(`This file could not be downloaded, or the latest version (from update server) does not have a valid semver version: \"${updateInfo.version}\"`, \"ERR_UPDATER_INVALID_VERSION\");\n }\n const currentVersion = this.currentVersion;\n if ((0, semver_1.eq)(latestVersion, currentVersion)) {\n return false;\n }\n if (!(await Promise.resolve(this.isUpdateSupported(updateInfo)))) {\n return false;\n }\n const isUserWithinRollout = await Promise.resolve(this.isUserWithinRollout(updateInfo));\n if (!isUserWithinRollout) {\n return false;\n }\n // https://github.com/electron-userland/electron-builder/pull/3111#issuecomment-405033227\n // https://github.com/electron-userland/electron-builder/pull/3111#issuecomment-405030797\n const isLatestVersionNewer = (0, semver_1.gt)(latestVersion, currentVersion);\n const isLatestVersionOlder = (0, semver_1.lt)(latestVersion, currentVersion);\n if (isLatestVersionNewer) {\n return true;\n }\n return this.allowDowngrade && isLatestVersionOlder;\n }\n checkIfUpdateSupported(updateInfo) {\n const minimumSystemVersion = updateInfo === null || updateInfo === void 0 ? void 0 : updateInfo.minimumSystemVersion;\n const currentOSVersion = (0, os_1.release)();\n if (minimumSystemVersion) {\n try {\n if ((0, semver_1.lt)(currentOSVersion, minimumSystemVersion)) {\n this._logger.info(`Current OS version ${currentOSVersion} is less than the minimum OS version required ${minimumSystemVersion} for version ${currentOSVersion}`);\n return false;\n }\n }\n catch (e) {\n this._logger.warn(`Failed to compare current OS version(${currentOSVersion}) with minimum OS version(${minimumSystemVersion}): ${(e.message || e).toString()}`);\n }\n }\n return true;\n }\n async getUpdateInfoAndProvider() {\n await this.app.whenReady();\n if (this.clientPromise == null) {\n this.clientPromise = this.configOnDisk.value.then(it => (0, providerFactory_1.createClient)(it, this, this.createProviderRuntimeOptions()));\n }\n const client = await this.clientPromise;\n const stagingUserId = await this.stagingUserIdPromise.value;\n client.setRequestHeaders(this.computeFinalHeaders({ \"x-user-staging-id\": stagingUserId }));\n return {\n info: await client.getLatestVersion(),\n provider: client,\n };\n }\n createProviderRuntimeOptions() {\n return {\n isUseMultipleRangeRequest: true,\n platform: this._testOnlyOptions == null ? process.platform : this._testOnlyOptions.platform,\n executor: this.httpExecutor,\n };\n }\n async doCheckForUpdates() {\n this.emit(\"checking-for-update\");\n const result = await this.getUpdateInfoAndProvider();\n const updateInfo = result.info;\n if (!(await this.isUpdateAvailable(updateInfo))) {\n this._logger.info(`Update for version ${this.currentVersion.format()} is not available (latest version: ${updateInfo.version}, downgrade is ${this.allowDowngrade ? \"allowed\" : \"disallowed\"}).`);\n this.emit(\"update-not-available\", updateInfo);\n return {\n isUpdateAvailable: false,\n versionInfo: updateInfo,\n updateInfo,\n };\n }\n this.updateInfoAndProvider = result;\n this.onUpdateAvailable(updateInfo);\n const cancellationToken = new builder_util_runtime_1.CancellationToken();\n //noinspection ES6MissingAwait\n return {\n isUpdateAvailable: true,\n versionInfo: updateInfo,\n updateInfo,\n cancellationToken,\n downloadPromise: this.autoDownload ? this.downloadUpdate(cancellationToken) : null,\n };\n }\n onUpdateAvailable(updateInfo) {\n this._logger.info(`Found version ${updateInfo.version} (url: ${(0, builder_util_runtime_1.asArray)(updateInfo.files)\n .map(it => it.url)\n .join(\", \")})`);\n this.emit(\"update-available\", updateInfo);\n }\n /**\n * Start downloading update manually. You can use this method if `autoDownload` option is set to `false`.\n * @returns {Promise<Array<string>>} Paths to downloaded files.\n */\n downloadUpdate(cancellationToken = new builder_util_runtime_1.CancellationToken()) {\n const updateInfoAndProvider = this.updateInfoAndProvider;\n if (updateInfoAndProvider == null) {\n const error = new Error(\"Please check update first\");\n this.dispatchError(error);\n return Promise.reject(error);\n }\n if (this.downloadPromise != null) {\n this._logger.info(\"Downloading update (already in progress)\");\n return this.downloadPromise;\n }\n this._logger.info(`Downloading update from ${(0, builder_util_runtime_1.asArray)(updateInfoAndProvider.info.files)\n .map(it => it.url)\n .join(\", \")}`);\n const errorHandler = (e) => {\n // https://github.com/electron-userland/electron-builder/issues/1150#issuecomment-436891159\n if (!(e instanceof builder_util_runtime_1.CancellationError)) {\n try {\n this.dispatchError(e);\n }\n catch (nestedError) {\n this._logger.warn(`Cannot dispatch error event: ${nestedError.stack || nestedError}`);\n }\n }\n return e;\n };\n this.downloadPromise = this.doDownloadUpdate({\n updateInfoAndProvider,\n requestHeaders: this.computeRequestHeaders(updateInfoAndProvider.provider),\n cancellationToken,\n disableWebInstaller: this.disableWebInstaller,\n disableDifferentialDownload: this.disableDifferentialDownload,\n })\n .catch((e) => {\n throw errorHandler(e);\n })\n .finally(() => {\n this.downloadPromise = null;\n });\n return this.downloadPromise;\n }\n dispatchError(e) {\n this.emit(\"error\", e, (e.stack || e).toString());\n }\n dispatchUpdateDownloaded(event) {\n this.emit(types_1.UPDATE_DOWNLOADED, event);\n }\n async loadUpdateConfig() {\n if (this._appUpdateConfigPath == null) {\n this._appUpdateConfigPath = this.app.appUpdateConfigPath;\n }\n return (0, js_yaml_1.load)(await (0, fs_extra_1.readFile)(this._appUpdateConfigPath, \"utf-8\"));\n }\n computeRequestHeaders(provider) {\n const fileExtraDownloadHeaders = provider.fileExtraDownloadHeaders;\n if (fileExtraDownloadHeaders != null) {\n const requestHeaders = this.requestHeaders;\n return requestHeaders == null\n ? fileExtraDownloadHeaders\n : {\n ...fileExtraDownloadHeaders,\n ...requestHeaders,\n };\n }\n return this.computeFinalHeaders({ accept: \"*/*\" });\n }\n async getOrCreateStagingUserId() {\n const file = path.join(this.app.userDataPath, \".updaterId\");\n try {\n const id = await (0, fs_extra_1.readFile)(file, \"utf-8\");\n if (builder_util_runtime_1.UUID.check(id)) {\n return id;\n }\n else {\n this._logger.warn(`Staging user id file exists, but content was invalid: ${id}`);\n }\n }\n catch (e) {\n if (e.code !== \"ENOENT\") {\n this._logger.warn(`Couldn't read staging user ID, creating a blank one: ${e}`);\n }\n }\n const id = builder_util_runtime_1.UUID.v5((0, crypto_1.randomBytes)(4096), builder_util_runtime_1.UUID.OID);\n this._logger.info(`Generated new staging user ID: ${id}`);\n try {\n await (0, fs_extra_1.outputFile)(file, id);\n }\n catch (e) {\n this._logger.warn(`Couldn't write out staging user ID: ${e}`);\n }\n return id;\n }\n /** @internal */\n get isAddNoCacheQuery() {\n const headers = this.requestHeaders;\n // https://github.com/electron-userland/electron-builder/issues/3021\n if (headers == null) {\n return true;\n }\n for (const headerName of Object.keys(headers)) {\n const s = headerName.toLowerCase();\n if (s === \"authorization\" || s === \"private-token\") {\n return false;\n }\n }\n return true;\n }\n async getOrCreateDownloadHelper() {\n let result = this.downloadedUpdateHelper;\n if (result == null) {\n const dirName = (await this.configOnDisk.value).updaterCacheDirName;\n const logger = this._logger;\n if (dirName == null) {\n logger.error(\"updaterCacheDirName is not specified in app-update.yml Was app build using at least electron-builder 20.34.0?\");\n }\n const cacheDir = path.join(this.app.baseCachePath, dirName || this.app.name);\n if (logger.debug != null) {\n logger.debug(`updater cache dir: ${cacheDir}`);\n }\n result = new DownloadedUpdateHelper_1.DownloadedUpdateHelper(cacheDir);\n this.downloadedUpdateHelper = result;\n }\n return result;\n }\n async executeDownload(taskOptions) {\n const fileInfo = taskOptions.fileInfo;\n const downloadOptions = {\n headers: taskOptions.downloadUpdateOptions.requestHeaders,\n cancellationToken: taskOptions.downloadUpdateOptions.cancellationToken,\n sha2: fileInfo.info.sha2,\n sha512: fileInfo.info.sha512,\n };\n if (this.listenerCount(types_1.DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(types_1.DOWNLOAD_PROGRESS, it);\n }\n const updateInfo = taskOptions.downloadUpdateOptions.updateInfoAndProvider.info;\n const version = updateInfo.version;\n const packageInfo = fileInfo.packageInfo;\n function getCacheUpdateFileName() {\n // NodeJS URL doesn't decode automatically\n const urlPath = decodeURIComponent(taskOptions.fileInfo.url.pathname);\n if (urlPath.toLowerCase().endsWith(`.${taskOptions.fileExtension.toLowerCase()}`)) {\n return path.basename(urlPath);\n }\n else {\n // url like /latest, generate name\n return taskOptions.fileInfo.info.url;\n }\n }\n const downloadedUpdateHelper = await this.getOrCreateDownloadHelper();\n const cacheDir = downloadedUpdateHelper.cacheDirForPendingUpdate;\n await (0, fs_extra_1.mkdir)(cacheDir, { recursive: true });\n const updateFileName = getCacheUpdateFileName();\n let updateFile = path.join(cacheDir, updateFileName);\n const packageFile = packageInfo == null ? null : path.join(cacheDir, `package-${version}${path.extname(packageInfo.path) || \".7z\"}`);\n const done = async (isSaveCache) => {\n await downloadedUpdateHelper.setDownloadedFile(updateFile, packageFile, updateInfo, fileInfo, updateFileName, isSaveCache);\n await taskOptions.done({\n ...updateInfo,\n downloadedFile: updateFile,\n });\n const currentBlockMapFile = path.join(cacheDir, \"current.blockmap\");\n if (await (0, fs_extra_1.pathExists)(currentBlockMapFile)) {\n await (0, fs_extra_1.copyFile)(currentBlockMapFile, path.join(downloadedUpdateHelper.cacheDir, \"current.blockmap\"));\n }\n return packageFile == null ? [updateFile] : [updateFile, packageFile];\n };\n const log = this._logger;\n const cachedUpdateFile = await downloadedUpdateHelper.validateDownloadedPath(updateFile, updateInfo, fileInfo, log);\n if (cachedUpdateFile != null) {\n updateFile = cachedUpdateFile;\n return await done(false);\n }\n const removeFileIfAny = async () => {\n await downloadedUpdateHelper.clear().catch(() => {\n // ignore\n });\n return await (0, fs_extra_1.unlink)(updateFile).catch(() => {\n // ignore\n });\n };\n const tempUpdateFile = await (0, DownloadedUpdateHelper_1.createTempUpdateFile)(`temp-${updateFileName}`, cacheDir, log);\n try {\n await taskOptions.task(tempUpdateFile, downloadOptions, packageFile, removeFileIfAny);\n await (0, builder_util_runtime_1.retry)(() => (0, fs_extra_1.rename)(tempUpdateFile, updateFile), {\n retries: 60,\n interval: 500,\n shouldRetry: (error) => {\n if (error instanceof Error && /^EBUSY:/.test(error.message)) {\n return true;\n }\n log.warn(`Cannot rename temp file to final file: ${error.message || error.stack}`);\n return false;\n },\n });\n }\n catch (e) {\n await removeFileIfAny();\n if (e instanceof builder_util_runtime_1.CancellationError) {\n log.info(\"cancelled\");\n this.emit(\"update-cancelled\", updateInfo);\n }\n throw e;\n }\n log.info(`New version ${version} has been downloaded to ${updateFile}`);\n return await done(true);\n }\n async differentialDownloadInstaller(fileInfo, downloadUpdateOptions, installerPath, provider, oldInstallerFileName) {\n try {\n if (this._testOnlyOptions != null && !this._testOnlyOptions.isUseDifferentialDownload) {\n return true;\n }\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider;\n const blockmapFileUrls = await provider.getBlockMapFiles(fileInfo.url, this.app.version, downloadUpdateOptions.updateInfoAndProvider.info.version, this.previousBlockmapBaseUrlOverride);\n this._logger.info(`Download block maps (old: \"${blockmapFileUrls[0]}\", new: ${blockmapFileUrls[1]})`);\n const downloadBlockMap = async (url) => {\n const data = await this.httpExecutor.downloadToBuffer(url, {\n headers: downloadUpdateOptions.requestHeaders,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n });\n if (data == null || data.length === 0) {\n throw new Error(`Blockmap \"${url.href}\" is empty`);\n }\n try {\n return JSON.parse((0, zlib_1.gunzipSync)(data).toString());\n }\n catch (e) {\n throw new Error(`Cannot parse blockmap \"${url.href}\", error: ${e}`);\n }\n };\n const downloadOptions = {\n newUrl: fileInfo.url,\n oldFile: path.join(this.downloadedUpdateHelper.cacheDir, oldInstallerFileName),\n logger: this._logger,\n newFile: installerPath,\n isUseMultipleRangeRequest: provider.isUseMultipleRangeRequest,\n requestHeaders: downloadUpdateOptions.requestHeaders,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n };\n if (this.listenerCount(types_1.DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(types_1.DOWNLOAD_PROGRESS, it);\n }\n const saveBlockMapToCacheDir = async (blockMapData, cacheDir) => {\n const blockMapFile = path.join(cacheDir, \"current.blockmap\");\n await (0, fs_extra_1.outputFile)(blockMapFile, (0, zlib_1.gzipSync)(JSON.stringify(blockMapData)));\n };\n const getBlockMapFromCacheDir = async (cacheDir) => {\n const blockMapFile = path.join(cacheDir, \"current.blockmap\");\n try {\n if (await (0, fs_extra_1.pathExists)(blockMapFile)) {\n return JSON.parse((0, zlib_1.gunzipSync)(await (0, fs_extra_1.readFile)(blockMapFile)).toString());\n }\n }\n catch (e) {\n this._logger.warn(`Cannot parse blockmap \"${blockMapFile}\", error: ${e}`);\n }\n return null;\n };\n const newBlockMapData = await downloadBlockMap(blockmapFileUrls[1]);\n await saveBlockMapToCacheDir(newBlockMapData, this.downloadedUpdateHelper.cacheDirForPendingUpdate);\n // get old blockmap from cache dir first, if not found, download it\n let oldBlockMapData = await getBlockMapFromCacheDir(this.downloadedUpdateHelper.cacheDir);\n if (oldBlockMapData == null) {\n oldBlockMapData = await downloadBlockMap(blockmapFileUrls[0]);\n }\n await new GenericDifferentialDownloader_1.GenericDifferentialDownloader(fileInfo.info, this.httpExecutor, downloadOptions).download(oldBlockMapData, newBlockMapData);\n return false;\n }\n catch (e) {\n this._logger.error(`Cannot download differentially, fallback to full download: ${e.stack || e}`);\n if (this._testOnlyOptions != null) {\n // test mode\n throw e;\n }\n return true;\n }\n }\n}\nexports.AppUpdater = AppUpdater;\nfunction hasPrereleaseComponents(version) {\n const versionPrereleaseComponent = (0, semver_1.prerelease)(version);\n return versionPrereleaseComponent != null && versionPrereleaseComponent.length > 0;\n}\n/** @private */\nclass NoOpLogger {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n info(message) {\n // ignore\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n warn(message) {\n // ignore\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n error(message) {\n // ignore\n }\n}\nexports.NoOpLogger = NoOpLogger;\n//# sourceMappingURL=AppUpdater.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BaseUpdater = void 0;\nconst child_process_1 = require(\"child_process\");\nconst AppUpdater_1 = require(\"./AppUpdater\");\nclass BaseUpdater extends AppUpdater_1.AppUpdater {\n constructor(options, app) {\n super(options, app);\n this.quitAndInstallCalled = false;\n this.quitHandlerAdded = false;\n }\n quitAndInstall(isSilent = false, isForceRunAfter = false) {\n this._logger.info(`Install on explicit quitAndInstall`);\n // If NOT in silent mode use `autoRunAppAfterInstall` to determine whether to force run the app\n const isInstalled = this.install(isSilent, isSilent ? isForceRunAfter : this.autoRunAppAfterInstall);\n if (isInstalled) {\n setImmediate(() => {\n // this event is normally emitted when calling quitAndInstall, this emulates that\n require(\"electron\").autoUpdater.emit(\"before-quit-for-update\");\n this.app.quit();\n });\n }\n else {\n this.quitAndInstallCalled = false;\n }\n }\n executeDownload(taskOptions) {\n return super.executeDownload({\n ...taskOptions,\n done: event => {\n this.dispatchUpdateDownloaded(event);\n this.addQuitHandler();\n return Promise.resolve();\n },\n });\n }\n get installerPath() {\n return this.downloadedUpdateHelper == null ? null : this.downloadedUpdateHelper.file;\n }\n // must be sync (because quit even handler is not async)\n install(isSilent = false, isForceRunAfter = false) {\n if (this.quitAndInstallCalled) {\n this._logger.warn(\"install call ignored: quitAndInstallCalled is set to true\");\n return false;\n }\n const downloadedUpdateHelper = this.downloadedUpdateHelper;\n const installerPath = this.installerPath;\n const downloadedFileInfo = downloadedUpdateHelper == null ? null : downloadedUpdateHelper.downloadedFileInfo;\n if (installerPath == null || downloadedFileInfo == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"));\n return false;\n }\n // prevent calling several times\n this.quitAndInstallCalled = true;\n try {\n this._logger.info(`Install: isSilent: ${isSilent}, isForceRunAfter: ${isForceRunAfter}`);\n return this.doInstall({\n isSilent,\n isForceRunAfter,\n isAdminRightsRequired: downloadedFileInfo.isAdminRightsRequired,\n });\n }\n catch (e) {\n this.dispatchError(e);\n return false;\n }\n }\n addQuitHandler() {\n if (this.quitHandlerAdded || !this.autoInstallOnAppQuit) {\n return;\n }\n this.quitHandlerAdded = true;\n this.app.onQuit(exitCode => {\n if (this.quitAndInstallCalled) {\n this._logger.info(\"Update installer has already been triggered. Quitting application.\");\n return;\n }\n if (!this.autoInstallOnAppQuit) {\n this._logger.info(\"Update will not be installed on quit because autoInstallOnAppQuit is set to false.\");\n return;\n }\n if (exitCode !== 0) {\n this._logger.info(`Update will be not installed on quit because application is quitting with exit code ${exitCode}`);\n return;\n }\n this._logger.info(\"Auto install update on quit\");\n this.install(true, false);\n });\n }\n spawnSyncLog(cmd, args = [], env = {}) {\n this._logger.info(`Executing: ${cmd} with args: ${args}`);\n const response = (0, child_process_1.spawnSync)(cmd, args, {\n env: { ...process.env, ...env },\n encoding: \"utf-8\",\n shell: true,\n });\n const { error, status, stdout, stderr } = response;\n if (error != null) {\n this._logger.error(stderr);\n throw error;\n }\n else if (status != null && status !== 0) {\n this._logger.error(stderr);\n throw new Error(`Command ${cmd} exited with code ${status}`);\n }\n return stdout.trim();\n }\n /**\n * This handles both node 8 and node 10 way of emitting error when spawning a process\n * - node 8: Throws the error\n * - node 10: Emit the error(Need to listen with on)\n */\n // https://github.com/electron-userland/electron-builder/issues/1129\n // Node 8 sends errors: https://nodejs.org/dist/latest-v8.x/docs/api/errors.html#errors_common_system_errors\n async spawnLog(cmd, args = [], env = undefined, stdio = \"ignore\") {\n this._logger.info(`Executing: ${cmd} with args: ${args}`);\n return new Promise((resolve, reject) => {\n try {\n const params = { stdio, env, detached: true };\n const p = (0, child_process_1.spawn)(cmd, args, params);\n p.on(\"error\", error => {\n reject(error);\n });\n p.unref();\n if (p.pid !== undefined) {\n resolve(true);\n }\n }\n catch (error) {\n reject(error);\n }\n });\n }\n}\nexports.BaseUpdater = BaseUpdater;\n//# sourceMappingURL=BaseUpdater.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileWithEmbeddedBlockMapDifferentialDownloader = void 0;\nconst fs_extra_1 = require(\"fs-extra\");\nconst DifferentialDownloader_1 = require(\"./DifferentialDownloader\");\nconst zlib_1 = require(\"zlib\");\nclass FileWithEmbeddedBlockMapDifferentialDownloader extends DifferentialDownloader_1.DifferentialDownloader {\n async download() {\n const packageInfo = this.blockAwareFileInfo;\n const fileSize = packageInfo.size;\n const offset = fileSize - (packageInfo.blockMapSize + 4);\n this.fileMetadataBuffer = await this.readRemoteBytes(offset, fileSize - 1);\n const newBlockMap = readBlockMap(this.fileMetadataBuffer.slice(0, this.fileMetadataBuffer.length - 4));\n await this.doDownload(await readEmbeddedBlockMapData(this.options.oldFile), newBlockMap);\n }\n}\nexports.FileWithEmbeddedBlockMapDifferentialDownloader = FileWithEmbeddedBlockMapDifferentialDownloader;\nfunction readBlockMap(data) {\n return JSON.parse((0, zlib_1.inflateRawSync)(data).toString());\n}\nasync function readEmbeddedBlockMapData(file) {\n const fd = await (0, fs_extra_1.open)(file, \"r\");\n try {\n const fileSize = (await (0, fs_extra_1.fstat)(fd)).size;\n const sizeBuffer = Buffer.allocUnsafe(4);\n await (0, fs_extra_1.read)(fd, sizeBuffer, 0, sizeBuffer.length, fileSize - sizeBuffer.length);\n const dataBuffer = Buffer.allocUnsafe(sizeBuffer.readUInt32BE(0));\n await (0, fs_extra_1.read)(fd, dataBuffer, 0, dataBuffer.length, fileSize - sizeBuffer.length - dataBuffer.length);\n await (0, fs_extra_1.close)(fd);\n return readBlockMap(dataBuffer);\n }\n catch (e) {\n await (0, fs_extra_1.close)(fd);\n throw e;\n }\n}\n//# sourceMappingURL=FileWithEmbeddedBlockMapDifferentialDownloader.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AppImageUpdater = void 0;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst child_process_1 = require(\"child_process\");\nconst fs_extra_1 = require(\"fs-extra\");\nconst fs_1 = require(\"fs\");\nconst path = require(\"path\");\nconst BaseUpdater_1 = require(\"./BaseUpdater\");\nconst FileWithEmbeddedBlockMapDifferentialDownloader_1 = require(\"./differentialDownloader/FileWithEmbeddedBlockMapDifferentialDownloader\");\nconst Provider_1 = require(\"./providers/Provider\");\nconst types_1 = require(\"./types\");\nclass AppImageUpdater extends BaseUpdater_1.BaseUpdater {\n constructor(options, app) {\n super(options, app);\n }\n isUpdaterActive() {\n if (process.env[\"APPIMAGE\"] == null && !this.forceDevUpdateConfig) {\n if (process.env[\"SNAP\"] == null) {\n this._logger.warn(\"APPIMAGE env is not defined, current application is not an AppImage\");\n }\n else {\n this._logger.info(\"SNAP env is defined, updater is disabled\");\n }\n return false;\n }\n return super.isUpdaterActive();\n }\n /*** @private */\n doDownloadUpdate(downloadUpdateOptions) {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider;\n const fileInfo = (0, Provider_1.findFile)(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"AppImage\", [\"rpm\", \"deb\", \"pacman\"]);\n return this.executeDownload({\n fileExtension: \"AppImage\",\n fileInfo,\n downloadUpdateOptions,\n task: async (updateFile, downloadOptions) => {\n const oldFile = process.env[\"APPIMAGE\"];\n if (oldFile == null) {\n throw (0, builder_util_runtime_1.newError)(\"APPIMAGE env is not defined\", \"ERR_UPDATER_OLD_FILE_NOT_FOUND\");\n }\n if (downloadUpdateOptions.disableDifferentialDownload || (await this.downloadDifferential(fileInfo, oldFile, updateFile, provider, downloadUpdateOptions))) {\n await this.httpExecutor.download(fileInfo.url, updateFile, downloadOptions);\n }\n await (0, fs_extra_1.chmod)(updateFile, 0o755);\n },\n });\n }\n async downloadDifferential(fileInfo, oldFile, updateFile, provider, downloadUpdateOptions) {\n try {\n const downloadOptions = {\n newUrl: fileInfo.url,\n oldFile,\n logger: this._logger,\n newFile: updateFile,\n isUseMultipleRangeRequest: provider.isUseMultipleRangeRequest,\n requestHeaders: downloadUpdateOptions.requestHeaders,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n };\n if (this.listenerCount(types_1.DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(types_1.DOWNLOAD_PROGRESS, it);\n }\n await new FileWithEmbeddedBlockMapDifferentialDownloader_1.FileWithEmbeddedBlockMapDifferentialDownloader(fileInfo.info, this.httpExecutor, downloadOptions).download();\n return false;\n }\n catch (e) {\n this._logger.error(`Cannot download differentially, fallback to full download: ${e.stack || e}`);\n // during test (developer machine mac) we must throw error\n return process.platform === \"linux\";\n }\n }\n doInstall(options) {\n const appImageFile = process.env[\"APPIMAGE\"];\n if (appImageFile == null) {\n throw (0, builder_util_runtime_1.newError)(\"APPIMAGE env is not defined\", \"ERR_UPDATER_OLD_FILE_NOT_FOUND\");\n }\n // https://stackoverflow.com/a/1712051/1910191\n (0, fs_1.unlinkSync)(appImageFile);\n let destination;\n const existingBaseName = path.basename(appImageFile);\n const installerPath = this.installerPath;\n if (installerPath == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"));\n return false;\n }\n // https://github.com/electron-userland/electron-builder/issues/2964\n // if no version in existing file name, it means that user wants to preserve current custom name\n if (path.basename(installerPath) === existingBaseName || !/\\d+\\.\\d+\\.\\d+/.test(existingBaseName)) {\n // no version in the file name, overwrite existing\n destination = appImageFile;\n }\n else {\n destination = path.join(path.dirname(appImageFile), path.basename(installerPath));\n }\n (0, child_process_1.execFileSync)(\"mv\", [\"-f\", installerPath, destination]);\n if (destination !== appImageFile) {\n this.emit(\"appimage-filename-updated\", destination);\n }\n const env = {\n ...process.env,\n APPIMAGE_SILENT_INSTALL: \"true\",\n };\n if (options.isForceRunAfter) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.spawnLog(destination, [], env);\n }\n else {\n env.APPIMAGE_EXIT_AFTER_INSTALL = \"true\";\n (0, child_process_1.execFileSync)(destination, [], { env });\n }\n return true;\n }\n}\nexports.AppImageUpdater = AppImageUpdater;\n//# sourceMappingURL=AppImageUpdater.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LinuxUpdater = void 0;\nconst BaseUpdater_1 = require(\"./BaseUpdater\");\nclass LinuxUpdater extends BaseUpdater_1.BaseUpdater {\n constructor(options, app) {\n super(options, app);\n }\n /**\n * Returns true if the current process is running as root.\n */\n isRunningAsRoot() {\n var _a;\n return ((_a = process.getuid) === null || _a === void 0 ? void 0 : _a.call(process)) === 0;\n }\n /**\n * Sanitizies the installer path for using with command line tools.\n */\n get installerPath() {\n var _a, _b;\n return (_b = (_a = super.installerPath) === null || _a === void 0 ? void 0 : _a.replace(/\\\\/g, \"\\\\\\\\\").replace(/ /g, \"\\\\ \")) !== null && _b !== void 0 ? _b : null;\n }\n runCommandWithSudoIfNeeded(commandWithArgs) {\n if (this.isRunningAsRoot()) {\n this._logger.info(\"Running as root, no need to use sudo\");\n return this.spawnSyncLog(commandWithArgs[0], commandWithArgs.slice(1));\n }\n const { name } = this.app;\n const installComment = `\"${name} would like to update\"`;\n const sudo = this.sudoWithArgs(installComment);\n this._logger.info(`Running as non-root user, using sudo to install: ${sudo}`);\n let wrapper = `\"`;\n // some sudo commands dont want the command to be wrapped in \" quotes\n if (/pkexec/i.test(sudo[0]) || sudo[0] === \"sudo\") {\n wrapper = \"\";\n }\n return this.spawnSyncLog(sudo[0], [...(sudo.length > 1 ? sudo.slice(1) : []), `${wrapper}/bin/bash`, \"-c\", `'${commandWithArgs.join(\" \")}'${wrapper}`]);\n }\n sudoWithArgs(installComment) {\n const sudo = this.determineSudoCommand();\n const command = [sudo];\n if (/kdesudo/i.test(sudo)) {\n command.push(\"--comment\", installComment);\n command.push(\"-c\");\n }\n else if (/gksudo/i.test(sudo)) {\n command.push(\"--message\", installComment);\n }\n else if (/pkexec/i.test(sudo)) {\n command.push(\"--disable-internal-agent\");\n }\n return command;\n }\n hasCommand(cmd) {\n try {\n this.spawnSyncLog(`command`, [\"-v\", cmd]);\n return true;\n }\n catch {\n return false;\n }\n }\n determineSudoCommand() {\n const sudos = [\"gksudo\", \"kdesudo\", \"pkexec\", \"beesu\"];\n for (const sudo of sudos) {\n if (this.hasCommand(sudo)) {\n return sudo;\n }\n }\n return \"sudo\";\n }\n /**\n * Detects the package manager to use based on the available commands.\n * Allows overriding the default behavior by setting the ELECTRON_BUILDER_LINUX_PACKAGE_MANAGER environment variable.\n * If the environment variable is set, it will be used directly. (This is useful for testing each package manager logic path.)\n * Otherwise, it checks for the presence of the specified package manager commands in the order provided.\n * @param pms - An array of package manager commands to check for, in priority order.\n * @returns The detected package manager command or \"unknown\" if none are found.\n */\n detectPackageManager(pms) {\n var _a;\n const pmOverride = (_a = process.env.ELECTRON_BUILDER_LINUX_PACKAGE_MANAGER) === null || _a === void 0 ? void 0 : _a.trim();\n if (pmOverride) {\n return pmOverride;\n }\n // Check for the package manager in the order of priority\n for (const pm of pms) {\n if (this.hasCommand(pm)) {\n return pm;\n }\n }\n // return the first package manager in the list if none are found, this will throw upstream for proper logging\n this._logger.warn(`No package manager found in the list: ${pms.join(\", \")}. Defaulting to the first one: ${pms[0]}`);\n return pms[0];\n }\n}\nexports.LinuxUpdater = LinuxUpdater;\n//# sourceMappingURL=LinuxUpdater.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DebUpdater = void 0;\nconst Provider_1 = require(\"./providers/Provider\");\nconst types_1 = require(\"./types\");\nconst LinuxUpdater_1 = require(\"./LinuxUpdater\");\nclass DebUpdater extends LinuxUpdater_1.LinuxUpdater {\n constructor(options, app) {\n super(options, app);\n }\n /*** @private */\n doDownloadUpdate(downloadUpdateOptions) {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider;\n const fileInfo = (0, Provider_1.findFile)(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"deb\", [\"AppImage\", \"rpm\", \"pacman\"]);\n return this.executeDownload({\n fileExtension: \"deb\",\n fileInfo,\n downloadUpdateOptions,\n task: async (updateFile, downloadOptions) => {\n if (this.listenerCount(types_1.DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(types_1.DOWNLOAD_PROGRESS, it);\n }\n await this.httpExecutor.download(fileInfo.url, updateFile, downloadOptions);\n },\n });\n }\n doInstall(options) {\n const installerPath = this.installerPath;\n if (installerPath == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"));\n return false;\n }\n if (!this.hasCommand(\"dpkg\") && !this.hasCommand(\"apt\")) {\n this.dispatchError(new Error(\"Neither dpkg nor apt command found. Cannot install .deb package.\"));\n return false;\n }\n const priorityList = [\"dpkg\", \"apt\"];\n const packageManager = this.detectPackageManager(priorityList);\n try {\n DebUpdater.installWithCommandRunner(packageManager, installerPath, this.runCommandWithSudoIfNeeded.bind(this), this._logger);\n }\n catch (error) {\n this.dispatchError(error);\n return false;\n }\n if (options.isForceRunAfter) {\n this.app.relaunch();\n }\n return true;\n }\n static installWithCommandRunner(packageManager, installerPath, commandRunner, logger) {\n var _a;\n if (packageManager === \"dpkg\") {\n try {\n // Primary: Install unsigned .deb directly with dpkg\n commandRunner([\"dpkg\", \"-i\", installerPath]);\n }\n catch (error) {\n // Handle missing dependencies via apt-get\n logger.warn((_a = error.message) !== null && _a !== void 0 ? _a : error);\n logger.warn(\"dpkg installation failed, trying to fix broken dependencies with apt-get\");\n commandRunner([\"apt-get\", \"install\", \"-f\", \"-y\"]);\n }\n }\n else if (packageManager === \"apt\") {\n // Fallback: Use apt for direct install (less safe for unsigned .deb)\n logger.warn(\"Using apt to install a local .deb. This may fail for unsigned packages unless properly configured.\");\n commandRunner([\n \"apt\",\n \"install\",\n \"-y\",\n \"--allow-unauthenticated\", // needed for unsigned .debs\n \"--allow-downgrades\", // allow lower version installs\n \"--allow-change-held-packages\",\n installerPath,\n ]);\n }\n else {\n throw new Error(`Package manager ${packageManager} not supported`);\n }\n }\n}\nexports.DebUpdater = DebUpdater;\n//# sourceMappingURL=DebUpdater.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PacmanUpdater = void 0;\nconst types_1 = require(\"./types\");\nconst Provider_1 = require(\"./providers/Provider\");\nconst LinuxUpdater_1 = require(\"./LinuxUpdater\");\nclass PacmanUpdater extends LinuxUpdater_1.LinuxUpdater {\n constructor(options, app) {\n super(options, app);\n }\n /*** @private */\n doDownloadUpdate(downloadUpdateOptions) {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider;\n const fileInfo = (0, Provider_1.findFile)(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"pacman\", [\"AppImage\", \"deb\", \"rpm\"]);\n return this.executeDownload({\n fileExtension: \"pacman\",\n fileInfo,\n downloadUpdateOptions,\n task: async (updateFile, downloadOptions) => {\n if (this.listenerCount(types_1.DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(types_1.DOWNLOAD_PROGRESS, it);\n }\n await this.httpExecutor.download(fileInfo.url, updateFile, downloadOptions);\n },\n });\n }\n doInstall(options) {\n const installerPath = this.installerPath;\n if (installerPath == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"));\n return false;\n }\n try {\n PacmanUpdater.installWithCommandRunner(installerPath, this.runCommandWithSudoIfNeeded.bind(this), this._logger);\n }\n catch (error) {\n this.dispatchError(error);\n return false;\n }\n if (options.isForceRunAfter) {\n this.app.relaunch(); // note: `app` is undefined in tests since vite doesn't run in electron\n }\n return true;\n }\n static installWithCommandRunner(installerPath, commandRunner, logger) {\n var _a;\n try {\n commandRunner([\"pacman\", \"-U\", \"--noconfirm\", installerPath]);\n }\n catch (error) {\n logger.warn((_a = error.message) !== null && _a !== void 0 ? _a : error);\n logger.warn(\"pacman installation failed, attempting to update package database and retry\");\n try {\n // Update package database (not a full upgrade, just sync)\n commandRunner([\"pacman\", \"-Sy\", \"--noconfirm\"]);\n // Retry installation\n commandRunner([\"pacman\", \"-U\", \"--noconfirm\", installerPath]);\n }\n catch (retryError) {\n logger.error(\"Retry after pacman -Sy failed\");\n throw retryError;\n }\n }\n }\n}\nexports.PacmanUpdater = PacmanUpdater;\n//# sourceMappingURL=PacmanUpdater.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RpmUpdater = void 0;\nconst types_1 = require(\"./types\");\nconst Provider_1 = require(\"./providers/Provider\");\nconst LinuxUpdater_1 = require(\"./LinuxUpdater\");\nclass RpmUpdater extends LinuxUpdater_1.LinuxUpdater {\n constructor(options, app) {\n super(options, app);\n }\n /*** @private */\n doDownloadUpdate(downloadUpdateOptions) {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider;\n const fileInfo = (0, Provider_1.findFile)(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"rpm\", [\"AppImage\", \"deb\", \"pacman\"]);\n return this.executeDownload({\n fileExtension: \"rpm\",\n fileInfo,\n downloadUpdateOptions,\n task: async (updateFile, downloadOptions) => {\n if (this.listenerCount(types_1.DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(types_1.DOWNLOAD_PROGRESS, it);\n }\n await this.httpExecutor.download(fileInfo.url, updateFile, downloadOptions);\n },\n });\n }\n doInstall(options) {\n const installerPath = this.installerPath;\n if (installerPath == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"));\n return false;\n }\n const priorityList = [\"zypper\", \"dnf\", \"yum\", \"rpm\"];\n const packageManager = this.detectPackageManager(priorityList);\n try {\n RpmUpdater.installWithCommandRunner(packageManager, installerPath, this.runCommandWithSudoIfNeeded.bind(this), this._logger);\n }\n catch (error) {\n this.dispatchError(error);\n return false;\n }\n if (options.isForceRunAfter) {\n this.app.relaunch();\n }\n return true;\n }\n static installWithCommandRunner(packageManager, installerPath, commandRunner, logger) {\n if (packageManager === \"zypper\") {\n return commandRunner([\"zypper\", \"--non-interactive\", \"--no-refresh\", \"install\", \"--allow-unsigned-rpm\", \"-f\", installerPath]);\n }\n if (packageManager === \"dnf\") {\n return commandRunner([\"dnf\", \"install\", \"--nogpgcheck\", \"-y\", installerPath]);\n }\n if (packageManager === \"yum\") {\n return commandRunner([\"yum\", \"install\", \"--nogpgcheck\", \"-y\", installerPath]);\n }\n if (packageManager === \"rpm\") {\n logger.warn(\"Installing with rpm only (no dependency resolution).\");\n return commandRunner([\"rpm\", \"-Uvh\", \"--replacepkgs\", \"--replacefiles\", \"--nodeps\", installerPath]);\n }\n throw new Error(`Package manager ${packageManager} not supported`);\n }\n}\nexports.RpmUpdater = RpmUpdater;\n//# sourceMappingURL=RpmUpdater.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MacUpdater = void 0;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst fs_extra_1 = require(\"fs-extra\");\nconst fs_1 = require(\"fs\");\nconst path = require(\"path\");\nconst http_1 = require(\"http\");\nconst AppUpdater_1 = require(\"./AppUpdater\");\nconst Provider_1 = require(\"./providers/Provider\");\nconst child_process_1 = require(\"child_process\");\nconst crypto_1 = require(\"crypto\");\nclass MacUpdater extends AppUpdater_1.AppUpdater {\n constructor(options, app) {\n super(options, app);\n this.nativeUpdater = require(\"electron\").autoUpdater;\n this.squirrelDownloadedUpdate = false;\n this.nativeUpdater.on(\"error\", it => {\n this._logger.warn(it);\n this.emit(\"error\", it);\n });\n this.nativeUpdater.on(\"update-downloaded\", () => {\n this.squirrelDownloadedUpdate = true;\n this.debug(\"nativeUpdater.update-downloaded\");\n });\n }\n debug(message) {\n if (this._logger.debug != null) {\n this._logger.debug(message);\n }\n }\n closeServerIfExists() {\n if (this.server) {\n this.debug(\"Closing proxy server\");\n this.server.close(err => {\n if (err) {\n this.debug(\"proxy server wasn't already open, probably attempted closing again as a safety check before quit\");\n }\n });\n }\n }\n async doDownloadUpdate(downloadUpdateOptions) {\n let files = downloadUpdateOptions.updateInfoAndProvider.provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info);\n const log = this._logger;\n // detect if we are running inside Rosetta emulation\n const sysctlRosettaInfoKey = \"sysctl.proc_translated\";\n let isRosetta = false;\n try {\n this.debug(\"Checking for macOS Rosetta environment\");\n const result = (0, child_process_1.execFileSync)(\"sysctl\", [sysctlRosettaInfoKey], { encoding: \"utf8\" });\n isRosetta = result.includes(`${sysctlRosettaInfoKey}: 1`);\n log.info(`Checked for macOS Rosetta environment (isRosetta=${isRosetta})`);\n }\n catch (e) {\n log.warn(`sysctl shell command to check for macOS Rosetta environment failed: ${e}`);\n }\n let isArm64Mac = false;\n try {\n this.debug(\"Checking for arm64 in uname\");\n const result = (0, child_process_1.execFileSync)(\"uname\", [\"-a\"], { encoding: \"utf8\" });\n const isArm = result.includes(\"ARM\");\n log.info(`Checked 'uname -a': arm64=${isArm}`);\n isArm64Mac = isArm64Mac || isArm;\n }\n catch (e) {\n log.warn(`uname shell command to check for arm64 failed: ${e}`);\n }\n isArm64Mac = isArm64Mac || process.arch === \"arm64\" || isRosetta;\n // allow arm64 macs to install universal or rosetta2(x64) - https://github.com/electron-userland/electron-builder/pull/5524\n const isArm64 = (file) => { var _a; return file.url.pathname.includes(\"arm64\") || ((_a = file.info.url) === null || _a === void 0 ? void 0 : _a.includes(\"arm64\")); };\n if (isArm64Mac && files.some(isArm64)) {\n files = files.filter(file => isArm64Mac === isArm64(file));\n }\n else {\n files = files.filter(file => !isArm64(file));\n }\n const zipFileInfo = (0, Provider_1.findFile)(files, \"zip\", [\"pkg\", \"dmg\"]);\n if (zipFileInfo == null) {\n throw (0, builder_util_runtime_1.newError)(`ZIP file not provided: ${(0, builder_util_runtime_1.safeStringifyJson)(files)}`, \"ERR_UPDATER_ZIP_FILE_NOT_FOUND\");\n }\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider;\n const CURRENT_MAC_APP_ZIP_FILE_NAME = \"update.zip\";\n return this.executeDownload({\n fileExtension: \"zip\",\n fileInfo: zipFileInfo,\n downloadUpdateOptions,\n task: async (destinationFile, downloadOptions) => {\n const cachedUpdateFilePath = path.join(this.downloadedUpdateHelper.cacheDir, CURRENT_MAC_APP_ZIP_FILE_NAME);\n const canDifferentialDownload = () => {\n if (!(0, fs_extra_1.pathExistsSync)(cachedUpdateFilePath)) {\n log.info(\"Unable to locate previous update.zip for differential download (is this first install?), falling back to full download\");\n return false;\n }\n return !downloadUpdateOptions.disableDifferentialDownload;\n };\n let differentialDownloadFailed = true;\n if (canDifferentialDownload()) {\n differentialDownloadFailed = await this.differentialDownloadInstaller(zipFileInfo, downloadUpdateOptions, destinationFile, provider, CURRENT_MAC_APP_ZIP_FILE_NAME);\n }\n if (differentialDownloadFailed) {\n await this.httpExecutor.download(zipFileInfo.url, destinationFile, downloadOptions);\n }\n },\n done: async (event) => {\n if (!downloadUpdateOptions.disableDifferentialDownload) {\n try {\n const cachedUpdateFilePath = path.join(this.downloadedUpdateHelper.cacheDir, CURRENT_MAC_APP_ZIP_FILE_NAME);\n await (0, fs_extra_1.copyFile)(event.downloadedFile, cachedUpdateFilePath);\n }\n catch (error) {\n this._logger.warn(`Unable to copy file for caching for future differential downloads: ${error.message}`);\n }\n }\n return this.updateDownloaded(zipFileInfo, event);\n },\n });\n }\n async updateDownloaded(zipFileInfo, event) {\n var _a;\n const downloadedFile = event.downloadedFile;\n const updateFileSize = (_a = zipFileInfo.info.size) !== null && _a !== void 0 ? _a : (await (0, fs_extra_1.stat)(downloadedFile)).size;\n const log = this._logger;\n const logContext = `fileToProxy=${zipFileInfo.url.href}`;\n this.closeServerIfExists();\n this.debug(`Creating proxy server for native Squirrel.Mac (${logContext})`);\n this.server = (0, http_1.createServer)();\n this.debug(`Proxy server for native Squirrel.Mac is created (${logContext})`);\n this.server.on(\"close\", () => {\n log.info(`Proxy server for native Squirrel.Mac is closed (${logContext})`);\n });\n // must be called after server is listening, otherwise address is null\n const getServerUrl = (s) => {\n const address = s.address();\n if (typeof address === \"string\") {\n return address;\n }\n return `http://127.0.0.1:${address === null || address === void 0 ? void 0 : address.port}`;\n };\n return await new Promise((resolve, reject) => {\n const pass = (0, crypto_1.randomBytes)(64).toString(\"base64\").replace(/\\//g, \"_\").replace(/\\+/g, \"-\");\n const authInfo = Buffer.from(`autoupdater:${pass}`, \"ascii\");\n // insecure random is ok\n const fileUrl = `/${(0, crypto_1.randomBytes)(64).toString(\"hex\")}.zip`;\n this.server.on(\"request\", (request, response) => {\n const requestUrl = request.url;\n log.info(`${requestUrl} requested`);\n if (requestUrl === \"/\") {\n // check for basic auth header\n if (!request.headers.authorization || request.headers.authorization.indexOf(\"Basic \") === -1) {\n response.statusCode = 401;\n response.statusMessage = \"Invalid Authentication Credentials\";\n response.end();\n log.warn(\"No authenthication info\");\n return;\n }\n // verify auth credentials\n const base64Credentials = request.headers.authorization.split(\" \")[1];\n const credentials = Buffer.from(base64Credentials, \"base64\").toString(\"ascii\");\n const [username, password] = credentials.split(\":\");\n if (username !== \"autoupdater\" || password !== pass) {\n response.statusCode = 401;\n response.statusMessage = \"Invalid Authentication Credentials\";\n response.end();\n log.warn(\"Invalid authenthication credentials\");\n return;\n }\n const data = Buffer.from(`{ \"url\": \"${getServerUrl(this.server)}${fileUrl}\" }`);\n response.writeHead(200, { \"Content-Type\": \"application/json\", \"Content-Length\": data.length });\n response.end(data);\n return;\n }\n if (!requestUrl.startsWith(fileUrl)) {\n log.warn(`${requestUrl} requested, but not supported`);\n response.writeHead(404);\n response.end();\n return;\n }\n log.info(`${fileUrl} requested by Squirrel.Mac, pipe ${downloadedFile}`);\n let errorOccurred = false;\n response.on(\"finish\", () => {\n if (!errorOccurred) {\n this.nativeUpdater.removeListener(\"error\", reject);\n resolve([]);\n }\n });\n const readStream = (0, fs_1.createReadStream)(downloadedFile);\n readStream.on(\"error\", error => {\n try {\n response.end();\n }\n catch (e) {\n log.warn(`cannot end response: ${e}`);\n }\n errorOccurred = true;\n this.nativeUpdater.removeListener(\"error\", reject);\n reject(new Error(`Cannot pipe \"${downloadedFile}\": ${error}`));\n });\n response.writeHead(200, {\n \"Content-Type\": \"application/zip\",\n \"Content-Length\": updateFileSize,\n });\n readStream.pipe(response);\n });\n this.debug(`Proxy server for native Squirrel.Mac is starting to listen (${logContext})`);\n this.server.listen(0, \"127.0.0.1\", () => {\n this.debug(`Proxy server for native Squirrel.Mac is listening (address=${getServerUrl(this.server)}, ${logContext})`);\n this.nativeUpdater.setFeedURL({\n url: getServerUrl(this.server),\n headers: {\n \"Cache-Control\": \"no-cache\",\n Authorization: `Basic ${authInfo.toString(\"base64\")}`,\n },\n });\n // The update has been downloaded and is ready to be served to Squirrel\n this.dispatchUpdateDownloaded(event);\n if (this.autoInstallOnAppQuit) {\n this.nativeUpdater.once(\"error\", reject);\n // This will trigger fetching and installing the file on Squirrel side\n this.nativeUpdater.checkForUpdates();\n }\n else {\n resolve([]);\n }\n });\n });\n }\n handleUpdateDownloaded() {\n if (this.autoRunAppAfterInstall) {\n this.nativeUpdater.quitAndInstall();\n }\n else {\n this.app.quit();\n }\n this.closeServerIfExists();\n }\n quitAndInstall() {\n if (this.squirrelDownloadedUpdate) {\n // update already fetched by Squirrel, it's ready to install\n this.handleUpdateDownloaded();\n }\n else {\n // Quit and install as soon as Squirrel get the update\n this.nativeUpdater.on(\"update-downloaded\", () => this.handleUpdateDownloaded());\n if (!this.autoInstallOnAppQuit) {\n /**\n * If this was not `true` previously then MacUpdater.doDownloadUpdate()\n * would not actually initiate the downloading by electron's autoUpdater\n */\n this.nativeUpdater.checkForUpdates();\n }\n }\n }\n}\nexports.MacUpdater = MacUpdater;\n//# sourceMappingURL=MacUpdater.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.verifySignature = verifySignature;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst child_process_1 = require(\"child_process\");\nconst os = require(\"os\");\nconst path = require(\"path\");\nfunction preparePowerShellExec(command, timeout) {\n // https://github.com/electron-userland/electron-builder/issues/2421\n // https://github.com/electron-userland/electron-builder/issues/2535\n // Resetting PSModulePath is necessary https://github.com/electron-userland/electron-builder/issues/7127\n // semicolon wont terminate the set command and run chcp thus leading to verification errors on certificats with special chars like german umlauts, so rather\n // join commands using & https://github.com/electron-userland/electron-builder/issues/8162\n const executable = `set \"PSModulePath=\" & chcp 65001 >NUL & powershell.exe`;\n const args = [\"-NoProfile\", \"-NonInteractive\", \"-InputFormat\", \"None\", \"-Command\", command];\n const options = {\n shell: true,\n timeout,\n };\n return [executable, args, options];\n}\n// $certificateInfo = (Get-AuthenticodeSignature 'xxx\\yyy.exe'\n// | where {$_.Status.Equals([System.Management.Automation.SignatureStatus]::Valid) -and $_.SignerCertificate.Subject.Contains(\"CN=siemens.com\")})\n// | Out-String ; if ($certificateInfo) { exit 0 } else { exit 1 }\nfunction verifySignature(publisherNames, unescapedTempUpdateFile, logger) {\n return new Promise((resolve, reject) => {\n // Escape quotes and backticks in filenames to prevent user from breaking the\n // arguments and perform a remote command injection.\n //\n // Consider example powershell command:\n // ```powershell\n // Get-AuthenticodeSignature 'C:\\\\path\\\\my-bad-';calc;'filename.exe'\n // ```\n // The above would work expected and find the file name, however, it will also execute `;calc;`\n // command and start the calculator app.\n //\n // From Powershell quoting rules:\n // https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_quoting_rules?view=powershell-7\n // * Double quotes `\"` are treated literally within single-quoted strings;\n // * Single quotes can be escaped by doubling them: 'don''t' -> don't;\n //\n // Also note that at this point the file has already been written to the disk, thus we are\n // guaranteed that the path will not contain any illegal characters like <>:\"/\\|?*\n // https://docs.microsoft.com/en-us/windows/win32/fileio/naming-a-file\n const tempUpdateFile = unescapedTempUpdateFile.replace(/'/g, \"''\");\n logger.info(`Verifying signature ${tempUpdateFile}`);\n (0, child_process_1.execFile)(...preparePowerShellExec(`\"Get-AuthenticodeSignature -LiteralPath '${tempUpdateFile}' | ConvertTo-Json -Compress\"`, 20 * 1000), (error, stdout, stderr) => {\n var _a;\n try {\n if (error != null || stderr) {\n handleError(logger, error, stderr, reject);\n resolve(null);\n return;\n }\n const data = parseOut(stdout);\n if (data.Status === 0) {\n try {\n const normlaizedUpdateFilePath = path.normalize(data.Path);\n const normalizedTempUpdateFile = path.normalize(unescapedTempUpdateFile);\n logger.info(`LiteralPath: ${normlaizedUpdateFilePath}. Update Path: ${normalizedTempUpdateFile}`);\n if (normlaizedUpdateFilePath !== normalizedTempUpdateFile) {\n handleError(logger, new Error(`LiteralPath of ${normlaizedUpdateFilePath} is different than ${normalizedTempUpdateFile}`), stderr, reject);\n resolve(null);\n return;\n }\n }\n catch (error) {\n logger.warn(`Unable to verify LiteralPath of update asset due to missing data.Path. Skipping this step of validation. Message: ${(_a = error.message) !== null && _a !== void 0 ? _a : error.stack}`);\n }\n const subject = (0, builder_util_runtime_1.parseDn)(data.SignerCertificate.Subject);\n let match = false;\n for (const name of publisherNames) {\n const dn = (0, builder_util_runtime_1.parseDn)(name);\n if (dn.size) {\n // if we have a full DN, compare all values\n const allKeys = Array.from(dn.keys());\n match = allKeys.every(key => {\n return dn.get(key) === subject.get(key);\n });\n }\n else if (name === subject.get(\"CN\")) {\n logger.warn(`Signature validated using only CN ${name}. Please add your full Distinguished Name (DN) to publisherNames configuration`);\n match = true;\n }\n if (match) {\n resolve(null);\n return;\n }\n }\n }\n const result = `publisherNames: ${publisherNames.join(\" | \")}, raw info: ` + JSON.stringify(data, (name, value) => (name === \"RawData\" ? undefined : value), 2);\n logger.warn(`Sign verification failed, installer signed with incorrect certificate: ${result}`);\n resolve(result);\n }\n catch (e) {\n handleError(logger, e, null, reject);\n resolve(null);\n return;\n }\n });\n });\n}\nfunction parseOut(out) {\n const data = JSON.parse(out);\n delete data.PrivateKey;\n delete data.IsOSBinary;\n delete data.SignatureType;\n const signerCertificate = data.SignerCertificate;\n if (signerCertificate != null) {\n delete signerCertificate.Archived;\n delete signerCertificate.Extensions;\n delete signerCertificate.Handle;\n delete signerCertificate.HasPrivateKey;\n // duplicates data.SignerCertificate (contains RawData)\n delete signerCertificate.SubjectName;\n }\n return data;\n}\nfunction handleError(logger, error, stderr, reject) {\n if (isOldWin6()) {\n logger.warn(`Cannot execute Get-AuthenticodeSignature: ${error || stderr}. Ignoring signature validation due to unsupported powershell version. Please upgrade to powershell 3 or higher.`);\n return;\n }\n try {\n (0, child_process_1.execFileSync)(...preparePowerShellExec(\"ConvertTo-Json test\", 10 * 1000));\n }\n catch (testError) {\n logger.warn(`Cannot execute ConvertTo-Json: ${testError.message}. Ignoring signature validation due to unsupported powershell version. Please upgrade to powershell 3 or higher.`);\n return;\n }\n if (error != null) {\n reject(error);\n }\n if (stderr) {\n reject(new Error(`Cannot execute Get-AuthenticodeSignature, stderr: ${stderr}. Failing signature validation due to unknown stderr.`));\n }\n}\nfunction isOldWin6() {\n const winVersion = os.release();\n return winVersion.startsWith(\"6.\") && !winVersion.startsWith(\"6.3\");\n}\n//# sourceMappingURL=windowsExecutableCodeSignatureVerifier.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NsisUpdater = void 0;\nconst builder_util_runtime_1 = require(\"builder-util-runtime\");\nconst path = require(\"path\");\nconst BaseUpdater_1 = require(\"./BaseUpdater\");\nconst FileWithEmbeddedBlockMapDifferentialDownloader_1 = require(\"./differentialDownloader/FileWithEmbeddedBlockMapDifferentialDownloader\");\nconst types_1 = require(\"./types\");\nconst Provider_1 = require(\"./providers/Provider\");\nconst fs_extra_1 = require(\"fs-extra\");\nconst windowsExecutableCodeSignatureVerifier_1 = require(\"./windowsExecutableCodeSignatureVerifier\");\nconst url_1 = require(\"url\");\nclass NsisUpdater extends BaseUpdater_1.BaseUpdater {\n constructor(options, app) {\n super(options, app);\n this._verifyUpdateCodeSignature = (publisherNames, unescapedTempUpdateFile) => (0, windowsExecutableCodeSignatureVerifier_1.verifySignature)(publisherNames, unescapedTempUpdateFile, this._logger);\n }\n /**\n * The verifyUpdateCodeSignature. You can pass [win-verify-signature](https://github.com/beyondkmp/win-verify-trust) or another custom verify function: ` (publisherName: string[], path: string) => Promise<string | null>`.\n * The default verify function uses [windowsExecutableCodeSignatureVerifier](https://github.com/electron-userland/electron-builder/blob/master/packages/electron-updater/src/windowsExecutableCodeSignatureVerifier.ts)\n */\n get verifyUpdateCodeSignature() {\n return this._verifyUpdateCodeSignature;\n }\n set verifyUpdateCodeSignature(value) {\n if (value) {\n this._verifyUpdateCodeSignature = value;\n }\n }\n /*** @private */\n doDownloadUpdate(downloadUpdateOptions) {\n const provider = downloadUpdateOptions.updateInfoAndProvider.provider;\n const fileInfo = (0, Provider_1.findFile)(provider.resolveFiles(downloadUpdateOptions.updateInfoAndProvider.info), \"exe\");\n return this.executeDownload({\n fileExtension: \"exe\",\n downloadUpdateOptions,\n fileInfo,\n task: async (destinationFile, downloadOptions, packageFile, removeTempDirIfAny) => {\n const packageInfo = fileInfo.packageInfo;\n const isWebInstaller = packageInfo != null && packageFile != null;\n if (isWebInstaller && downloadUpdateOptions.disableWebInstaller) {\n throw (0, builder_util_runtime_1.newError)(`Unable to download new version ${downloadUpdateOptions.updateInfoAndProvider.info.version}. Web Installers are disabled`, \"ERR_UPDATER_WEB_INSTALLER_DISABLED\");\n }\n if (!isWebInstaller && !downloadUpdateOptions.disableWebInstaller) {\n this._logger.warn(\"disableWebInstaller is set to false, you should set it to true if you do not plan on using a web installer. This will default to true in a future version.\");\n }\n if (isWebInstaller ||\n downloadUpdateOptions.disableDifferentialDownload ||\n (await this.differentialDownloadInstaller(fileInfo, downloadUpdateOptions, destinationFile, provider, builder_util_runtime_1.CURRENT_APP_INSTALLER_FILE_NAME))) {\n await this.httpExecutor.download(fileInfo.url, destinationFile, downloadOptions);\n }\n const signatureVerificationStatus = await this.verifySignature(destinationFile);\n if (signatureVerificationStatus != null) {\n await removeTempDirIfAny();\n // noinspection ThrowInsideFinallyBlockJS\n throw (0, builder_util_runtime_1.newError)(`New version ${downloadUpdateOptions.updateInfoAndProvider.info.version} is not signed by the application owner: ${signatureVerificationStatus}`, \"ERR_UPDATER_INVALID_SIGNATURE\");\n }\n if (isWebInstaller) {\n if (await this.differentialDownloadWebPackage(downloadUpdateOptions, packageInfo, packageFile, provider)) {\n try {\n await this.httpExecutor.download(new url_1.URL(packageInfo.path), packageFile, {\n headers: downloadUpdateOptions.requestHeaders,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n sha512: packageInfo.sha512,\n });\n }\n catch (e) {\n try {\n await (0, fs_extra_1.unlink)(packageFile);\n }\n catch (_ignored) {\n // ignore\n }\n throw e;\n }\n }\n }\n },\n });\n }\n // $certificateInfo = (Get-AuthenticodeSignature 'xxx\\yyy.exe'\n // | where {$_.Status.Equals([System.Management.Automation.SignatureStatus]::Valid) -and $_.SignerCertificate.Subject.Contains(\"CN=siemens.com\")})\n // | Out-String ; if ($certificateInfo) { exit 0 } else { exit 1 }\n async verifySignature(tempUpdateFile) {\n let publisherName;\n try {\n publisherName = (await this.configOnDisk.value).publisherName;\n if (publisherName == null) {\n return null;\n }\n }\n catch (e) {\n if (e.code === \"ENOENT\") {\n // no app-update.yml\n return null;\n }\n throw e;\n }\n return await this._verifyUpdateCodeSignature(Array.isArray(publisherName) ? publisherName : [publisherName], tempUpdateFile);\n }\n doInstall(options) {\n const installerPath = this.installerPath;\n if (installerPath == null) {\n this.dispatchError(new Error(\"No update filepath provided, can't quit and install\"));\n return false;\n }\n const args = [\"--updated\"];\n if (options.isSilent) {\n args.push(\"/S\");\n }\n if (options.isForceRunAfter) {\n args.push(\"--force-run\");\n }\n if (this.installDirectory) {\n // maybe check if folder exists\n args.push(`/D=${this.installDirectory}`);\n }\n const packagePath = this.downloadedUpdateHelper == null ? null : this.downloadedUpdateHelper.packageFile;\n if (packagePath != null) {\n // only = form is supported\n args.push(`--package-file=${packagePath}`);\n }\n const callUsingElevation = () => {\n this.spawnLog(path.join(process.resourcesPath, \"elevate.exe\"), [installerPath].concat(args)).catch(e => this.dispatchError(e));\n };\n if (options.isAdminRightsRequired) {\n this._logger.info(\"isAdminRightsRequired is set to true, run installer using elevate.exe\");\n callUsingElevation();\n return true;\n }\n this.spawnLog(installerPath, args).catch((e) => {\n // https://github.com/electron-userland/electron-builder/issues/1129\n // Node 8 sends errors: https://nodejs.org/dist/latest-v8.x/docs/api/errors.html#errors_common_system_errors\n const errorCode = e.code;\n this._logger.info(`Cannot run installer: error code: ${errorCode}, error message: \"${e.message}\", will be executed again using elevate if EACCES, and will try to use electron.shell.openItem if ENOENT`);\n if (errorCode === \"UNKNOWN\" || errorCode === \"EACCES\") {\n callUsingElevation();\n }\n else if (errorCode === \"ENOENT\") {\n require(\"electron\")\n .shell.openPath(installerPath)\n .catch((err) => this.dispatchError(err));\n }\n else {\n this.dispatchError(e);\n }\n });\n return true;\n }\n async differentialDownloadWebPackage(downloadUpdateOptions, packageInfo, packagePath, provider) {\n if (packageInfo.blockMapSize == null) {\n return true;\n }\n try {\n const downloadOptions = {\n newUrl: new url_1.URL(packageInfo.path),\n oldFile: path.join(this.downloadedUpdateHelper.cacheDir, builder_util_runtime_1.CURRENT_APP_PACKAGE_FILE_NAME),\n logger: this._logger,\n newFile: packagePath,\n requestHeaders: this.requestHeaders,\n isUseMultipleRangeRequest: provider.isUseMultipleRangeRequest,\n cancellationToken: downloadUpdateOptions.cancellationToken,\n };\n if (this.listenerCount(types_1.DOWNLOAD_PROGRESS) > 0) {\n downloadOptions.onProgress = it => this.emit(types_1.DOWNLOAD_PROGRESS, it);\n }\n await new FileWithEmbeddedBlockMapDifferentialDownloader_1.FileWithEmbeddedBlockMapDifferentialDownloader(packageInfo, this.httpExecutor, downloadOptions).download();\n }\n catch (e) {\n this._logger.error(`Cannot download differentially, fallback to full download: ${e.stack || e}`);\n // during test (developer machine mac or linux) we must throw error\n return process.platform === \"win32\";\n }\n return false;\n }\n}\nexports.NsisUpdater = NsisUpdater;\n//# sourceMappingURL=NsisUpdater.js.map","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.NsisUpdater = exports.MacUpdater = exports.RpmUpdater = exports.PacmanUpdater = exports.DebUpdater = exports.AppImageUpdater = exports.Provider = exports.NoOpLogger = exports.AppUpdater = exports.BaseUpdater = void 0;\nconst fs_extra_1 = require(\"fs-extra\");\nconst path = require(\"path\");\nvar BaseUpdater_1 = require(\"./BaseUpdater\");\nObject.defineProperty(exports, \"BaseUpdater\", { enumerable: true, get: function () { return BaseUpdater_1.BaseUpdater; } });\nvar AppUpdater_1 = require(\"./AppUpdater\");\nObject.defineProperty(exports, \"AppUpdater\", { enumerable: true, get: function () { return AppUpdater_1.AppUpdater; } });\nObject.defineProperty(exports, \"NoOpLogger\", { enumerable: true, get: function () { return AppUpdater_1.NoOpLogger; } });\nvar Provider_1 = require(\"./providers/Provider\");\nObject.defineProperty(exports, \"Provider\", { enumerable: true, get: function () { return Provider_1.Provider; } });\nvar AppImageUpdater_1 = require(\"./AppImageUpdater\");\nObject.defineProperty(exports, \"AppImageUpdater\", { enumerable: true, get: function () { return AppImageUpdater_1.AppImageUpdater; } });\nvar DebUpdater_1 = require(\"./DebUpdater\");\nObject.defineProperty(exports, \"DebUpdater\", { enumerable: true, get: function () { return DebUpdater_1.DebUpdater; } });\nvar PacmanUpdater_1 = require(\"./PacmanUpdater\");\nObject.defineProperty(exports, \"PacmanUpdater\", { enumerable: true, get: function () { return PacmanUpdater_1.PacmanUpdater; } });\nvar RpmUpdater_1 = require(\"./RpmUpdater\");\nObject.defineProperty(exports, \"RpmUpdater\", { enumerable: true, get: function () { return RpmUpdater_1.RpmUpdater; } });\nvar MacUpdater_1 = require(\"./MacUpdater\");\nObject.defineProperty(exports, \"MacUpdater\", { enumerable: true, get: function () { return MacUpdater_1.MacUpdater; } });\nvar NsisUpdater_1 = require(\"./NsisUpdater\");\nObject.defineProperty(exports, \"NsisUpdater\", { enumerable: true, get: function () { return NsisUpdater_1.NsisUpdater; } });\n__exportStar(require(\"./types\"), exports);\n// autoUpdater to mimic electron bundled autoUpdater\nlet _autoUpdater;\nfunction doLoadAutoUpdater() {\n // tslint:disable:prefer-conditional-expression\n if (process.platform === \"win32\") {\n _autoUpdater = new (require(\"./NsisUpdater\").NsisUpdater)();\n }\n else if (process.platform === \"darwin\") {\n _autoUpdater = new (require(\"./MacUpdater\").MacUpdater)();\n }\n else {\n _autoUpdater = new (require(\"./AppImageUpdater\").AppImageUpdater)();\n try {\n const identity = path.join(process.resourcesPath, \"package-type\");\n if (!(0, fs_extra_1.existsSync)(identity)) {\n return _autoUpdater;\n }\n const fileType = (0, fs_extra_1.readFileSync)(identity).toString().trim();\n switch (fileType) {\n case \"deb\":\n _autoUpdater = new (require(\"./DebUpdater\").DebUpdater)();\n break;\n case \"rpm\":\n _autoUpdater = new (require(\"./RpmUpdater\").RpmUpdater)();\n break;\n case \"pacman\":\n _autoUpdater = new (require(\"./PacmanUpdater\").PacmanUpdater)();\n break;\n default:\n break;\n }\n }\n catch (error) {\n console.warn(\"Unable to detect 'package-type' for autoUpdater (rpm/deb/pacman support). If you'd like to expand support, please consider contributing to electron-builder\", error.message);\n }\n }\n return _autoUpdater;\n}\nObject.defineProperty(exports, \"autoUpdater\", {\n enumerable: true,\n get: () => {\n return _autoUpdater || doLoadAutoUpdater();\n },\n});\n//# sourceMappingURL=main.js.map","import { autoUpdater } from 'electron-updater'\nimport type { BrowserWindow } from 'electron'\nimport { ipcMain } from 'electron'\n\nlet _win: BrowserWindow | null = null\n\nexport function initAutoUpdater(win: BrowserWindow): void {\n _win = win\n\n // Download starts automatically as soon as an update is found.\n // autoInstallOnAppQuit means if the user never clicks \"Restart & Install\",\n // the update is applied silently the next time they quit the app.\n autoUpdater.autoDownload = true\n autoUpdater.autoInstallOnAppQuit = true\n\n autoUpdater.on('update-available', (info) => {\n _win?.webContents.send('updater:available', {\n version: info.version,\n releaseNotes: info.releaseNotes ?? null,\n })\n })\n\n autoUpdater.on('update-not-available', () => {\n // nothing — silent\n })\n\n autoUpdater.on('download-progress', (progress) => {\n _win?.webContents.send('updater:progress', Math.round(progress.percent))\n })\n\n autoUpdater.on('update-downloaded', () => {\n _win?.webContents.send('updater:ready')\n })\n\n autoUpdater.on('error', (err) => {\n console.error('[updater] Error:', err.message)\n _win?.webContents.send('updater:error', err.message)\n })\n\n // Manual check (exposed to renderer for future use)\n ipcMain.handle('updater:check', async () => {\n try {\n await autoUpdater.checkForUpdates()\n } catch (e) {\n console.error('[updater] checkForUpdates failed:', e)\n }\n })\n\n // Called only when the user explicitly clicks \"Restart & Install\"\n ipcMain.handle('updater:quit-and-install', () => {\n autoUpdater.quitAndInstall(false, true)\n })\n}\n\nexport function checkForUpdates(): void {\n autoUpdater.checkForUpdates().catch((e) => {\n console.error('[updater] background check failed:', e)\n })\n}\n","import { app, BrowserWindow, ipcMain, nativeTheme, Menu } from 'electron'\nimport { execSync } from 'child_process'\nimport fs from 'fs'\nimport os from 'os'\nimport path from 'path'\nimport { fileURLToPath } from 'url'\nimport { setupIpcHandlers } from './ipc-handlers'\nimport { JivaRunner } from './jiva-runner'\nimport { CodeRunner } from './code-runner'\nimport { initAutoUpdater, checkForUpdates } from './updater'\n\n/**\n * Augment process.env.PATH so that npm/npx/node are findable in packaged apps.\n * macOS apps launched from Finder/Dock get a minimal PATH (/usr/bin:/bin only).\n * Strategy: ask the user's login shell for its PATH first; fallback to known locations.\n */\nfunction augmentPath() {\n if (process.platform === 'win32') return\n try {\n const shell = process.env.SHELL ?? '/bin/zsh'\n const shellPath = execSync(`${shell} -l -c 'echo $PATH'`, { timeout: 3000 }).toString().trim()\n if (shellPath) {\n process.env.PATH = shellPath\n return\n }\n } catch {}\n // Fallback: prepend well-known Node.js binary locations\n const home = os.homedir()\n const candidates = [\n '/usr/local/bin',\n '/opt/homebrew/bin',\n '/opt/local/bin',\n `${home}/.npm-global/bin`,\n '/usr/local/opt/node/bin',\n ]\n try {\n const nvmDir = path.join(home, '.nvm', 'versions', 'node')\n if (fs.existsSync(nvmDir)) {\n const v = fs.readdirSync(nvmDir).sort().reverse()[0]\n if (v) candidates.push(path.join(nvmDir, v, 'bin'))\n }\n } catch {}\n const current = process.env.PATH ?? ''\n const existing = new Set(current.split(':').filter(Boolean))\n const toAdd = candidates.filter(p => !existing.has(p))\n if (toAdd.length) process.env.PATH = [...toAdd, current].join(':')\n}\n\naugmentPath()\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n\nprocess.env.DIST = path.join(__dirname, '../dist')\nprocess.env.VITE_PUBLIC = app.isPackaged\n ? process.env.DIST\n : path.join(process.env.DIST, '../public')\n\nlet win: BrowserWindow | null\nlet cloudWin: BrowserWindow | null = null\nlet jivaRunner: JivaRunner | null = null\nlet codeRunner: CodeRunner | null = null\n\nconst VITE_DEV_SERVER_URL = process.env['VITE_DEV_SERVER_URL']\n\nfunction createAppMenu() {\n const isMac = process.platform === 'darwin'\n const isDev = !!VITE_DEV_SERVER_URL\n\n const template: Electron.MenuItemConstructorOptions[] = [\n ...(isMac ? [{\n label: app.name,\n submenu: [\n { role: 'about' as const },\n { type: 'separator' as const },\n { role: 'services' as const },\n { type: 'separator' as const },\n { role: 'hide' as const },\n { role: 'hideOthers' as const },\n { role: 'unhide' as const },\n { type: 'separator' as const },\n { role: 'quit' as const },\n ],\n }] : []),\n {\n label: 'Edit',\n submenu: [\n { role: 'undo' as const },\n { role: 'redo' as const },\n { type: 'separator' as const },\n { role: 'cut' as const },\n { role: 'copy' as const },\n { role: 'paste' as const },\n ...(isMac ? [\n { role: 'pasteAndMatchStyle' as const },\n { role: 'delete' as const },\n { role: 'selectAll' as const },\n ] : [\n { role: 'delete' as const },\n { type: 'separator' as const },\n { role: 'selectAll' as const },\n ]),\n ],\n },\n {\n label: 'View',\n submenu: [\n ...(isDev ? [\n { role: 'reload' as const },\n { role: 'forceReload' as const },\n { role: 'toggleDevTools' as const },\n { type: 'separator' as const },\n ] : []),\n { role: 'resetZoom' as const },\n { role: 'zoomIn' as const },\n { role: 'zoomOut' as const },\n { type: 'separator' as const },\n { role: 'togglefullscreen' as const },\n ],\n },\n {\n label: 'Window',\n submenu: [\n { role: 'minimize' as const },\n { role: 'zoom' as const },\n ...(isMac ? [\n { type: 'separator' as const },\n { role: 'front' as const },\n ] : [\n { role: 'close' as const },\n ]),\n ],\n },\n ]\n\n Menu.setApplicationMenu(Menu.buildFromTemplate(template))\n}\n\nfunction createWindow() {\n win = new BrowserWindow({\n width: 1280,\n height: 800,\n minWidth: 900,\n minHeight: 600,\n titleBarStyle: 'hiddenInset',\n trafficLightPosition: { x: 18, y: 18 },\n vibrancy: 'under-window',\n visualEffectState: 'active',\n backgroundColor: '#F5F3FF',\n show: false,\n webPreferences: {\n preload: path.join(__dirname, 'preload.js'),\n contextIsolation: true,\n nodeIntegration: false,\n sandbox: false,\n },\n })\n\n win.once('ready-to-show', () => {\n win?.show()\n })\n\n nativeTheme.on('updated', () => {\n win?.webContents.send('native-theme-changed', nativeTheme.shouldUseDarkColors)\n })\n\n if (VITE_DEV_SERVER_URL) {\n win.loadURL(VITE_DEV_SERVER_URL)\n win.webContents.openDevTools({ mode: 'detach' })\n } else {\n win.loadFile(path.join(process.env.DIST!, 'index.html'))\n }\n\n win.on('closed', () => {\n win = null\n })\n\n return win\n}\n\nfunction createCloudWindow() {\n // If cloud window already open, just focus it instead of spawning a duplicate\n if (cloudWin && !cloudWin.isDestroyed()) {\n cloudWin.focus()\n return cloudWin\n }\n\n cloudWin = new BrowserWindow({\n width: 1100,\n height: 780,\n minWidth: 780,\n minHeight: 560,\n titleBarStyle: 'hiddenInset',\n trafficLightPosition: { x: 18, y: 18 },\n vibrancy: 'under-window',\n visualEffectState: 'active',\n backgroundColor: '#F5F3FF',\n title: 'Jivam Cloud',\n show: false,\n webPreferences: {\n preload: path.join(__dirname, 'preload.js'),\n contextIsolation: true,\n nodeIntegration: false,\n sandbox: false,\n },\n })\n\n cloudWin.once('ready-to-show', () => cloudWin?.show())\n cloudWin.on('closed', () => { cloudWin = null })\n\n if (VITE_DEV_SERVER_URL) {\n cloudWin.loadURL(`${VITE_DEV_SERVER_URL}?mode=cloud`)\n } else {\n cloudWin.loadFile(path.join(process.env.DIST!, 'index.html'), { query: { mode: 'cloud' } })\n }\n\n return cloudWin\n}\n\nfunction initJivaRunner() {\n jivaRunner = new JivaRunner()\n return jivaRunner\n}\n\nfunction initCodeRunner() {\n codeRunner = new CodeRunner()\n return codeRunner\n}\n\napp.on('window-all-closed', () => {\n if (process.platform !== 'darwin') {\n app.quit()\n win = null\n }\n})\n\napp.on('before-quit', async () => {\n if (jivaRunner) await jivaRunner.cleanup()\n if (codeRunner) await codeRunner.cleanup()\n})\n\napp.on('activate', () => {\n if (BrowserWindow.getAllWindows().length === 0) {\n createWindow()\n }\n})\n\napp.whenReady().then(() => {\n app.name = 'Jivam'\n const runner = initJivaRunner()\n const cRunner = initCodeRunner()\n setupIpcHandlers(runner, cRunner, () => win)\n createAppMenu()\n\n // Cloud window — open on renderer request\n ipcMain.handle('cloud:open-window', () => { createCloudWindow() })\n\n const mainWin = createWindow()\n\n // Auto-updater: init after window is created, check silently after load\n if (app.isPackaged) {\n mainWin.webContents.once('did-finish-load', () => {\n initAutoUpdater(mainWin)\n // Small delay so the user sees the app first before any update notification\n setTimeout(checkForUpdates, 5000)\n })\n }\n})\n"],"names":["getJivaConfigPath","appData","path","os","JIVA_CONFIG_PATH","readConfig","fs","raw","err","writeConfig","config","dir","JIVA_DIR","DIRECTIVE_PATH","CONVERSATIONS_DIR","readRecentConversations","limit","f","filePath","stat","messageCount","title","firstUser","m","a","b","d","buildDirectiveContent","userDirective","now","weekdays","months","weekday","month","day","year","hours","minutes","time","timezone","_a","p","offset","sign","absH","absM","iso","recent","recentActivity","c","dynamicContext","writeDirective","content","PERSONAS_DIR","getPersonaIcon","name","tags","listPersonas","personas","entries","entry","personaDir","pluginJsonPath","manifest","builtInNames","l","activatePersona","execSync","activeFile","getActivePersona","jivaConfigPath","SUPABASE_URL","SUPABASE_ANON_KEY","CLOUD_RUN_URL","supabaseFetch","body","res","data","msg","cloudSignIn","email","password","cloudSignUp","userObj","initCloudSession","userId","sessionId","text","CloudRunner","__publicField","resolve","reject","timeoutMs","_","prompt","onPhase","_opts","onLog","startTime","signal","reader","decoder","buffer","iterations","toolsUsed","plan","currentEventType","outer","done","value","lines","line","evtType","e","TEXT_EXTENSIONS","IMAGE_EXTENSIONS","LANG_MAP","getFileCategory","ext","lower","convertFile","category","convertTextFile","convertPdf","convertDocx","convertImage","markdown","extractPdfText","parts","compressedStreamRe","buf","decompressed","zlib","extractTextFromStream","btEtRe","stream","results","block","litRe","s","clean","hexRe","hex","str","i","code","xml","extractFromZip","parseDocumentXml","targetPath","compressionMethod","compressedSize","uncompressedSize","filenameLen","extraLen","filename","dataStart","dataEnd","compressed","paragraphs","paraRe","runs","runRe","r","mimeType","cloudRunner","setupIpcHandlers","jivaRunner","codeRunner","getWindow","ipcMain","nodejsOk","nodejsVersion","jivaCoreOk","jivaCoreVersion","npmRoot","pkgJson","known","windowsPaths","wp","configCandidates","configOk","foundConfigPath","candidate","cfg","reasoning","jivaVersionMismatch","requiredJivaVersion","appPkgPath","reqMaj","reqMin","instMaj","instMin","status","win","serverStatus","errorMsg","event","_persona","opts","sender","isCloudSender","result","phase","logEvent","_event","id","success","convsDir","summary","_b","_c","runtimeStatus","configServers","statusMap","allServers","serverCfg","rt","serverConfig","mcpEntry","enabled","dialog","dirPath","homeDir","resolvedDir","resolvedHome","fullPath","resolvedFile","shell","includeImages","imageExts","docExts","textExts","filters","workspaceDir","uploadsDir","destPath","base64","dataUri","execFileSync","file","diff","branch","ahead","behind","tracking","ab","mcpServers","servers","MCP_SELECTIONS_PATH","readMcpSelections","convId","user","skillCache","parseFrontmatter","match","colon","key","discoverSkills","searchDirs","skills","skillDir","skillMdPath","fm","description","structurePrompt","userPrompt","completer","systemPrompt","skillList","userMsg","structured","relevantSkills","cleaned","parsed","matched","skillLines","evaluate","originalPrompt","agentResponse","MAX_ATTEMPTS","run","execute","enrichedPrompt","currentPrompt","lastResult","attempt","evaluation","prevSummary","resolveJivaCoreEntryPath","main","LOG_RE","parseLogLine","CodeRunner","EventEmitter","mcpServerNames","jiva","pathToFileURL","configManager","ModelOrchestrator","WorkspaceManager","ConversationManager","CodeAgent","MCPServerManager","createKrutrimModel","createLocalProvider","reasoningConfig","reasoningModel","OrchestratorClass","directivePath","WsClass","storageProvider","ConvManagerClass","activeMcpNames","MgrClass","mgr","selectedServers","AgentClass","orch","method","harness.run","agent","origStdoutWrite","origStderrWrite","intercept","evt","args","possiblePaths","JivaRunner","persona","jivaCoreEntry","DualAgent","LogLevel","logger","multimodalConfig","createModel","multimodalModel","allowedPath","McpManagerClass","jivaCoreDir","jivaCoreRoot","personaManagerPath","PersonaManager","personaMCPServers","log","emit","level","tag","message","lvl","handler","addMethod","removeMethod","transport","origWrite","toolMatch","unhook","response","tool","executingTimer","synthesizingTimer","allTools","grouped","serverName","toolName","manager","fullStatus","base64DataUri","error","universalify","fn","cb","constants","require$$0","origCwd","cwd","platform","chdir","polyfills","patch","patchLchmod","patchLutimes","chownFix","chmodFix","chownFixSync","chmodFixSync","statFix","statFixSync","mode","uid","gid","fs$rename","rename","from","to","start","backoff","CB","er","stater","st","fs$read","read","fd","length","position","callback_","callback","eagCounter","__","fs$readSync","err2","threw","ret","at","mt","er2","orig","target","chownErOk","options","stats","nonroot","Stream","legacyStreams","legacy","ReadStream","WriteStream","self","keys","index","clone_1","clone","getPrototypeOf","obj","copy","require$$1","require$$2","require$$3","util","require$$4","gracefulQueue","previousSymbol","noop","publishQueue","context","queue","debug","global","fs$close","close","resetQueue","fs$closeSync","closeSync","require$$5","gracefulFs","createReadStream","createWriteStream","fs$readFile","readFile","go$readFile","enqueue","fs$writeFile","writeFile","go$writeFile","fs$appendFile","appendFile","go$appendFile","fs$copyFile","copyFile","src","dest","flags","go$copyFile","fs$readdir","readdir","noReaddirOptionVersions","go$readdir","fs$readdirCallback","files","legStreams","fs$ReadStream","ReadStream$open","fs$WriteStream","WriteStream$open","val","FileReadStream","FileWriteStream","that","open","fs$open","go$open","elem","retry","retryTimer","lastTime","sinceAttempt","sinceStart","desiredDelay","u","api","exports","bytesRead","bytesWritten","buffers","utils","pth","checkPath","getMode","defaults","makeDir","_makeDir","makeDirSync","mkdirs","pathExists","pathExists_1","utimesMillis","atime","mtime","futimesErr","closeErr","utimesMillisSync","utimes","getStats","statFunc","srcStat","destStat","getStatsSync","checkPaths","funcName","areIdentical","srcBaseName","destBaseName","isSrcSubdir","errMsg","checkPathsSync","checkParentPaths","srcParent","destParent","checkParentPathsSync","srcArr","destArr","acc","cur","handleFilter","checkParentDir","dirExists","onInclude","include","startCopy","onDir","onFile","onLink","mayCopyFile","handleTimestampsAndMode","setDestMode","srcMode","fileIsNotWritable","makeFileWritable","setDestTimestampsAndMode","setDestTimestamps","updatedSrcStat","copyDir","mkDirAndCopy","items","copyDirItems","item","copyDirItem","srcItem","destItem","resolvedSrc","resolvedDest","copyLink","copy_1","mkdirsSync","copySync","handleFilterAndCopy","handleTimestamps","copySync_1","assert","isWindows","rimraf","busyTries","rimraf_","fixWinEPERM","rmdir","er3","fixWinEPERMSync","rmdirSync","originalEr","rmkids","n","errState","rimrafSync","rmkidsSync","rimraf_1","remove","removeSync","remove_1","mkdir","emptyDir","emptyDirSync","empty","createFile","makeFile","createFileSync","createLink","srcpath","dstpath","makeLink","dstStat","createLinkSync","link","symlinkPaths","dstdir","relativeToDst","exists","symlinkPathsSync","symlinkPaths_1","symlinkType","type","symlinkTypeSync","symlinkType_1","_mkdirs","_symlinkPaths","_symlinkType","require$$6","require$$7","createSymlink","_createSymlink","relative","createSymlinkSync","symlink","ensure","stringify","EOL","finalEOL","replacer","spaces","EOF","stripBom","_fs","_readFile","shouldThrow","readFileSync","_writeFile","writeFileSync","jsonfile","jsonFile","outputFile","encoding","itDoes","outputFileSync","outputFile_1","outputJson","outputJson_1","outputJsonSync","outputJsonSync_1","json","mkdirp","move","overwrite","isChangingCase","isParentRoot","doRename","parent","destExists","moveAcrossDevice","move_1","mkdirpSync","moveSync","moveSync_1","lib","require$$8","require$$9","CancellationToken_1","events_1","CancellationToken","CancellationError","finallyHandler","cancelHandler","addedCancelHandler","it","newError","h","w","y","ms","parse","fmtLong","fmtShort","msAbs","plural","isPlural","setup","env","createDebug","coerce","disable","enable","destroy","selectColor","namespace","hash","prevTime","enableOverride","namespacesCache","enabledCache","curr","format","formatter","extend","v","delimiter","newDebug","namespaces","split","ns","matchesTemplate","search","template","searchIndex","templateIndex","starIndex","matchIndex","skip","common","formatArgs","save","load","useColors","localstorage","warned","module","lastC","formatters","hasFlag","flag","argv","prefix","terminatorPosition","tty","forceColor","translateLevel","supportsColor","haveStream","streamIsTTY","min","osRelease","version","getSupportLevel","supportsColor_1","init","prop","k","colorCode","getDate","srcModule","ProgressCallbackTransform_1","stream_1","ProgressCallbackTransform","total","cancellationToken","onProgress","chunk","httpExecutor","createHttpError","parseJson","configureRequestOptionsFromUrl","configureRequestUrl","safeGetHeader","configureRequestOptions","safeStringifyJson","crypto_1","debug_1","fs_1","url_1","error_1","HttpError","HTTP_STATUS_CODES","statusCode","HttpExecutor","encodedData","headers","requestProcessor","redirectCount","onCancel","request","timeout","shouldRedirect","redirectUrl","contentType","isJson","url","responseChunks","requestOptions","receivedLength","configurePipes","socket","newOptions","originalUrl","parsedRedirectUrl","parseUrl","protocol","hostname","port","originalPort","redirectPort","task","maxRetries","attemptNumber","baseUrl","parsedUrl","DigestTransform","expected","algorithm","checkSha2","sha2Header","sha2","headerKey","streams","contentLength","sha512","fileOut","lastStream","token","skippedNames","MemoLazy_1","MemoLazy","selector","creator","selected","equals","firstValue","secondValue","keys1","keys2","publishOptions","githubUrl","githubTagPrefix","getS3LikeProviderBaseUrl","defaultHost","configuration","provider","s3Url","spacesUrl","appendPath","retry_1","retryCount","interval","shouldRetry","rfc2253Parser","parseDn","seq","quoted","nextNonSpace","ch","ord","j","uuid","invalidName","randomHost","hex2byte","byte2hex","UUID","check","uuidNamed","getVariant","input","bits","UuidEncoding","hashMethod","sax","strict","opt","SAXParser","SAXStream","createStream","parser","clearBuffers","S","rootNS","o","F","newf","checkBufferLength","maxAllowed","maxActual","len","closeText","emitNode","flushBuffers","end","write","streamWraps","ev","me","remaining","CDATA","DOCTYPE","XML_NAMESPACE","XMLNS_NAMESPACE","nameStart","nameBody","entityStart","entityBody","isWhitespace","isQuote","isAttribEnd","isMatch","regex","notMatch","nodeType","textopts","strictFail","newTag","qname","attribute","qualName","local","attrib","qn","openTag","selfClosing","nv","uri","closeTag","t","tagName","closeTo","x","parseEntity","entity","entityLC","num","numStr","beginWhiteSpace","charAt","starti","pad","returnState","parsedEntity","stringFromCharCode","floor","fromCodePoint","MAX_SIZE","codeUnits","highSurrogate","lowSurrogate","codePoint","parseXml","XElement","isValidName","ignoreCase","errorIfMissed","element","isNameEquals","NAME_REG_EXP","elementName","rootElement","elements","saxElement","cdata","asArray","httpExecutor_1","publishOptions_1","rfc2253Parser_1","uuid_1","xml_1","isNothing","subject","isObject","toArray","sequence","source","sourceKeys","repeat","string","count","cycle","isNegativeZero","number","formatError","exception","compact","where","YAMLException","reason","mark","getLine","lineStart","lineEnd","maxLineLength","head","tail","maxHalfLength","padStart","max","makeSnippet","re","lineStarts","lineEnds","foundLineNo","lineNoLength","snippet","TYPE_CONSTRUCTOR_OPTIONS","YAML_NODE_KINDS","compileStyleAliases","map","style","alias","Type","compileList","schema","currentType","newIndex","previousType","previousIndex","compileMap","collectType","Schema","definition","implicit","explicit","failsafe","resolveYamlNull","constructYamlNull","isNull","object","_null","resolveYamlBoolean","constructYamlBoolean","isBoolean","bool","isHexCode","isOctCode","isDecCode","resolveYamlInteger","hasDigits","constructYamlInteger","isInteger","int","YAML_FLOAT_PATTERN","resolveYamlFloat","constructYamlFloat","SCIENTIFIC_WITHOUT_DOT","representYamlFloat","isFloat","float","core","YAML_DATE_REGEXP","YAML_TIMESTAMP_REGEXP","resolveYamlTimestamp","constructYamlTimestamp","hour","minute","second","fraction","delta","tz_hour","tz_minute","date","representYamlTimestamp","timestamp","resolveYamlMerge","merge","BASE64_MAP","resolveYamlBinary","idx","bitlen","constructYamlBinary","tailbits","representYamlBinary","isBinary","binary","_hasOwnProperty","_toString","resolveYamlOmap","objectKeys","pair","pairKey","pairHasKey","constructYamlOmap","omap","resolveYamlPairs","constructYamlPairs","pairs","resolveYamlSet","constructYamlSet","set","_default","DEFAULT_SCHEMA","CONTEXT_FLOW_IN","CONTEXT_FLOW_OUT","CONTEXT_BLOCK_IN","CONTEXT_BLOCK_OUT","CHOMPING_CLIP","CHOMPING_STRIP","CHOMPING_KEEP","PATTERN_NON_PRINTABLE","PATTERN_NON_ASCII_LINE_BREAKS","PATTERN_FLOW_INDICATORS","PATTERN_TAG_HANDLE","PATTERN_TAG_URI","_class","is_EOL","is_WHITE_SPACE","is_WS_OR_EOL","is_FLOW_INDICATOR","fromHexCode","lc","escapedHexLen","fromDecimalCode","simpleEscapeSequence","charFromCodepoint","setProperty","simpleEscapeCheck","simpleEscapeMap","State","generateError","state","throwError","throwWarning","directiveHandlers","major","minor","handle","captureSegment","checkJson","_position","_length","_character","_result","mergeMappings","destination","overridableKeys","quantity","storeMappingPair","keyTag","keyNode","valueNode","startLine","startLineStart","startPos","readLineBreak","skipSeparationSpace","allowComments","checkIndent","lineBreaks","testDocumentSeparator","writeFoldedLines","readPlainScalar","nodeIndent","withinFlowCollection","preceding","following","captureStart","captureEnd","hasPendingContent","_line","_lineStart","_lineIndent","_kind","readSingleQuotedScalar","readDoubleQuotedScalar","hexLength","hexResult","tmp","readFlowCollection","readNext","_pos","_tag","_anchor","terminator","isPair","isExplicitPair","isMapping","composeNode","readBlockScalar","folding","chomping","didReadContent","detectedIndent","textIndent","emptyLines","atMoreIndented","readBlockSequence","detected","readBlockMapping","flowIndent","allowCompact","_keyLine","_keyLineStart","_keyPos","atExplicitKey","readTagProperty","isVerbatim","isNamed","tagHandle","readAnchorProperty","readAlias","parentIndent","nodeContext","allowToSeek","allowBlockStyles","allowBlockScalars","allowBlockCollections","indentStatus","atNewLine","hasContent","typeIndex","typeQuantity","typeList","blockIndent","readDocument","documentStart","directiveName","directiveArgs","hasDirectives","loadDocuments","nullpos","loadAll","iterator","documents","loader","CHAR_BOM","CHAR_TAB","CHAR_LINE_FEED","CHAR_CARRIAGE_RETURN","CHAR_SPACE","CHAR_EXCLAMATION","CHAR_DOUBLE_QUOTE","CHAR_SHARP","CHAR_PERCENT","CHAR_AMPERSAND","CHAR_SINGLE_QUOTE","CHAR_ASTERISK","CHAR_COMMA","CHAR_MINUS","CHAR_COLON","CHAR_EQUALS","CHAR_GREATER_THAN","CHAR_QUESTION","CHAR_COMMERCIAL_AT","CHAR_LEFT_SQUARE_BRACKET","CHAR_RIGHT_SQUARE_BRACKET","CHAR_GRAVE_ACCENT","CHAR_LEFT_CURLY_BRACKET","CHAR_VERTICAL_LINE","CHAR_RIGHT_CURLY_BRACKET","ESCAPE_SEQUENCES","DEPRECATED_BOOLEANS_SYNTAX","DEPRECATED_BASE60_SYNTAX","compileStyleMap","encodeHex","character","QUOTING_TYPE_SINGLE","QUOTING_TYPE_DOUBLE","indentString","ind","next","generateNextLine","testImplicitResolving","isPrintable","isNsCharOrWhitespace","isPlainSafe","prev","inblock","cIsNsCharOrWhitespace","cIsNsChar","isPlainSafeFirst","isPlainSafeLast","codePointAt","pos","first","needIndentIndicator","leadingSpaceRe","STYLE_PLAIN","STYLE_SINGLE","STYLE_LITERAL","STYLE_FOLDED","STYLE_DOUBLE","chooseScalarStyle","singleLineOnly","indentPerLevel","lineWidth","testAmbiguousType","quotingType","forceQuotes","char","prevChar","hasLineBreak","hasFoldableLine","shouldTrackWidth","previousLineBreak","plain","writeScalar","iskey","indent","testAmbiguity","blockHeader","dropEndingNewline","foldString","escapeString","indentIndicator","clip","keep","chomp","width","lineRe","nextLF","foldLine","prevMoreIndented","moreIndented","breakRe","escapeSeq","writeFlowSequence","writeNode","writeBlockSequence","writeFlowMapping","objectKeyList","objectKey","objectValue","pairBuffer","writeBlockMapping","explicitPair","detectType","isblockseq","tagStr","objectOrArray","duplicateIndex","duplicate","getDuplicateReferences","objects","duplicatesIndexes","inspectNode","dump","dumper","renamed","jsYaml","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","Lazy","SEMVER_SPEC_VERSION","MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","RELEASE_TYPES","safeRe","safeSrc","R","LETTERDASHNUMBER","safeRegexReplacements","makeSafeRegex","createToken","isGlobal","safe","looseOption","emptyOpts","parseOptions","parseOptions_1","numeric","compareIdentifiers","anum","bnum","rcompareIdentifiers","identifiers","SemVer$d","SemVer","other","release","identifier","identifierBase","base","prerelease","semver","throwErrors","parse_1","valid","valid_1","clean_1","inc","inc_1","version1","version2","v1","v2","comparison","v1Higher","highVersion","lowVersion","highHasPre","diff_1","loose","major_1","minor_1","patch_1","prerelease_1","compare","compare_1","rcompare","rcompare_1","compareLoose","compareLoose_1","compareBuild","versionA","versionB","compareBuild_1","sort","list","sort_1","rsort","rsort_1","gt","gt_1","lt","lt_1","eq","eq_1","neq","neq_1","gte","gte_1","lte","lte_1","cmp","op","cmp_1","coerceRtlRegex","build","coerce_1","LRUCache","firstKey","lrucache","SPACE_CHARACTERS","Range","range","Comparator","isNullSet","isAny","comps","memoKey","FLAG_INCLUDE_PRERELEASE","FLAG_LOOSE","cached","cache","hr","hyphenReplace","comparatorTrimReplace","tildeTrimReplace","caretTrimReplace","rangeList","comp","parseComparator","replaceGTE0","rangeMap","comparators","thisComparators","isSatisfiable","rangeComparators","thisComparator","rangeComparator","testSet","LRU","remainingComparators","testComparator","otherComparator","replaceCarets","replaceTildes","replaceXRanges","replaceStars","isX","replaceTilde","M","pr","replaceCaret","z","replaceXRange","gtlt","xM","xm","xp","anyX","incPr","$0","fM","fp","fpr","fb","tM","tm","tp","tpr","allowed","ANY","comparator","satisfies","satisfies_1","toComparators","toComparators_1","maxSatisfying","versions","maxSV","rangeObj","maxSatisfying_1","minSatisfying","minSV","minSatisfying_1","minVersion","minver","setMin","compver","minVersion_1","validRange","outside","hilo","gtfn","ltefn","ltfn","ecomp","high","low","outside_1","gtr","gtr_1","ltr","ltr_1","intersects","r1","r2","intersects_1","simplify","ranges","simplified","original","subset","sub","dom","sawNonNull","OUTER","simpleSub","simpleDom","isSub","simpleSubset","minimumVersionWithPreRelease","minimumVersion","eqSet","higherGT","lowerLT","gtltComp","higher","hasDomLT","hasDomGT","needDomLTPre","needDomGTPre","subset_1","internalRe","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","require$$35","require$$36","require$$37","require$$38","simplifyRange","require$$39","require$$40","LARGE_ARRAY_SIZE","HASH_UNDEFINED","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","argsTag","arrayTag","asyncTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","promiseTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reRegExpChar","reIsHostCtor","reIsUint","typedArrayTags","freeGlobal","freeSelf","root","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","nodeIsTypedArray","arrayFilter","array","predicate","resIndex","arrayPush","values","arraySome","baseTimes","iteratee","baseUnary","func","cacheHas","getValue","mapToArray","overArg","transform","arg","setToArray","arrayProto","funcProto","objectProto","coreJsData","funcToString","hasOwnProperty","maskSrcKey","nativeObjectToString","reIsNative","Buffer","Symbol","Uint8Array","propertyIsEnumerable","splice","symToStringTag","nativeGetSymbols","nativeIsBuffer","nativeKeys","DataView","getNative","Map","Promise","Set","WeakMap","nativeCreate","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","Hash","hashClear","hashDelete","hashGet","hashHas","hashSet","ListCache","listCacheClear","listCacheDelete","assocIndexOf","lastIndex","listCacheGet","listCacheHas","listCacheSet","MapCache","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","size","SetCache","setCacheAdd","setCacheHas","Stack","stackClear","stackDelete","stackGet","stackHas","stackSet","arrayLikeKeys","inherited","isArr","isArray","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","isIndex","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","getRawTag","objectToString","baseIsArguments","isObjectLike","baseIsEqual","bitmask","customizer","stack","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","getTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","baseIsNative","isMasked","pattern","isFunction","baseIsTypedArray","isLength","baseKeys","isPrototype","isPartial","arrLength","othLength","stacked","seen","arrValue","othValue","compared","othIndex","convert","objProps","getAllKeys","objLength","othProps","skipCtor","objValue","objCtor","othCtor","getSymbols","isKeyable","isOwn","unmasked","symbol","stubArray","Ctor","ctorString","proto","isArrayLike","stubFalse","isEqual","DownloadedUpdateHelper_1","createTempUpdateFile","fs_extra_1","DownloadedUpdateHelper","cacheDir","updateFile","updateInfo","fileInfo","cachedUpdateFile","downloadedFile","packageFile","versionInfo","updateFileName","isSaveCache","updateInfoFilePath","cachedInfo","hashFile","nameCounter","AppAdapter","getAppCacheDir","os_1","homedir","ElectronAppAdapter_1","AppAdapter_1","ElectronAppAdapter","app","exitCode","getNetSession","builder_util_runtime_1","ElectronHttpExecutor","proxyLoginCallback","newBaseUrl","newUrlFromBase","getChannelFilename","pathname","addRandomQueryToAvoidCaching","channel","reHasRegExpChar","symbolToString","baseToString","isSymbol","toString","escapeRegExp","lodash_escaperegexp","Provider_1","findFile","parseUpdateInfo","getFileList","resolveFiles","js_yaml_1","util_1","Provider","runtimeOptions","oldVersion","newVersion","oldBlockMapFileBaseUrl","newBlockMapUrl","arch","extension","not","filteredFiles","rawData","channelFile","channelFileUrl","pathTransformer","packages","packageInfo","GenericProvider_1","GenericProvider","updater","channelUrl","BitbucketProvider_1","BitbucketProvider","owner","slug","GitHubProvider_1","computeReleaseNotes","hrefRegExp","BaseGitHubProvider","apiHost","host","GitHubProvider","_d","_e","feedXml","feed","latestRelease","currentChannel","hrefElement","hrefTag","hrefChannel","shouldFetchVersion","isCustomChannel","fetchData","channelName","fileName","getNoteValue","currentVersion","isFullChangelog","releaseNotes","versionRelease","GitLabProvider_1","GitLabProvider","latestReleaseUrl","header","releaseResponse","fetchChannelData","channelAsset","asset","assetsMap","gitlabUpdateInfo","assets","possibleBlockMapNames","blockMapName","assetUrl","possibleReleaseIds","releaseId","releaseUrl","baseFilename","oldBlockMapUrl","newVersionAssets","oldVersionAssets","oldFilename","matchingAssetName","KeygenProvider_1","KeygenProvider","account","product","PrivateGitHubProvider_1","PrivateGitHubProvider","releaseInfo","accept","allowPrerelease","basePath","providerFactory","isUrlProbablySupportMultiRangeRequests","createClient","githubOptions","constructor","downloadPlanBuilder","computeOperations","OperationKind","oldBlockMap","newBlockMap","nameToOldBlocks","buildBlockFileMap","nameToNewBlocks","lastOperation","blockMapFile","operations","oldEntry","newFile","changedBlockCount","checksumToOldOffset","checksumToOldSize","buildChecksumMap","newOffset","blockSize","checksum","oldOffset","validateAndAdd","isValidateOperationRange","operation","fileOffset","checksumToOffset","checksumToSize","existing","sizeExplanation","DataSplitter_1","copyData","downloadPlanBuilder_1","DOUBLE_CRLF","ReadState","out","oldFileFd","readStream","DataSplitter","partIndexToTaskIndex","boundary","partIndexToLength","finishHandler","grandTotalBytes","toIgnore","toRead","headerListEnd","taskIndex","prevTaskIndex","partLength","effectiveEnd","readOffset","partialChunk","expectedLength","multipleRangeDownloader","executeTasksUsingMultipleRangeRequests","checkIsRangesSupported","differentialDownloader","tasks","taskOffset","nextOffset","doExecuteTasks","partCount","dicer","acceptRanges","ProgressDifferentialDownloadCallbackTransform_1","ProgressDifferentialDownloadCallbackTransform","progressDifferentialDownloadInfo","DifferentialDownloader_1","multipleRangeDownloader_1","DifferentialDownloader","blockAwareFileInfo","downloadSize","copySize","newSize","formatBytes","fdList","closeFiles","openedFile","closeFilesError","errorOnLog","newFileFd","downloadInfoTransform","expectedByteCounts","digestTransform","firstStream","downloadOperationCount","actualUrl","removeQuery","endInclusive","dataHandler","GenericDifferentialDownloader_1","GenericDifferentialDownloader","addHandler","UpdaterSignal","emitter","AppUpdater_1","lazy_val_1","semver_1","electronHttpExecutor_1","providerFactory_1","zlib_1","types_1","AppUpdater","NoOpLogger","authInfo","currentVersionString","hasPrereleaseComponents","checkForUpdatesPromise","nullizePromise","downloadNotification","notificationContent","appName","rawStagingPercentage","stagingPercentage","stagingUserId","percentage","latestVersion","isLatestVersionNewer","isLatestVersionOlder","minimumSystemVersion","currentOSVersion","client","updateInfoAndProvider","errorHandler","nestedError","fileExtraDownloadHeaders","requestHeaders","headerName","dirName","taskOptions","downloadOptions","getCacheUpdateFileName","urlPath","downloadedUpdateHelper","currentBlockMapFile","removeFileIfAny","tempUpdateFile","downloadUpdateOptions","installerPath","oldInstallerFileName","blockmapFileUrls","downloadBlockMap","saveBlockMapToCacheDir","blockMapData","getBlockMapFromCacheDir","newBlockMapData","oldBlockMapData","versionPrereleaseComponent","BaseUpdater_1","child_process_1","BaseUpdater","isSilent","isForceRunAfter","downloadedFileInfo","cmd","stdout","stderr","stdio","params","FileWithEmbeddedBlockMapDifferentialDownloader_1","FileWithEmbeddedBlockMapDifferentialDownloader","fileSize","readBlockMap","readEmbeddedBlockMapData","sizeBuffer","dataBuffer","AppImageUpdater_1","AppImageUpdater","oldFile","appImageFile","existingBaseName","LinuxUpdater_1","LinuxUpdater","commandWithArgs","installComment","sudo","wrapper","command","sudos","pms","pmOverride","pm","DebUpdater_1","DebUpdater","priorityList","packageManager","commandRunner","PacmanUpdater_1","PacmanUpdater","retryError","RpmUpdater_1","RpmUpdater","MacUpdater_1","http_1","MacUpdater","sysctlRosettaInfoKey","isRosetta","isArm64Mac","isArm","isArm64","zipFileInfo","CURRENT_MAC_APP_ZIP_FILE_NAME","destinationFile","cachedUpdateFilePath","canDifferentialDownload","differentialDownloadFailed","updateFileSize","logContext","getServerUrl","address","pass","fileUrl","requestUrl","base64Credentials","credentials","username","errorOccurred","windowsExecutableCodeSignatureVerifier","verifySignature","preparePowerShellExec","publisherNames","unescapedTempUpdateFile","handleError","parseOut","normlaizedUpdateFilePath","normalizedTempUpdateFile","dn","signerCertificate","isOldWin6","testError","winVersion","NsisUpdater_1","windowsExecutableCodeSignatureVerifier_1","NsisUpdater","removeTempDirIfAny","isWebInstaller","signatureVerificationStatus","publisherName","packagePath","callUsingElevation","errorCode","__createBinding","this","k2","desc","__exportStar","_autoUpdater","doLoadAutoUpdater","identity","_win","initAutoUpdater","autoUpdater","info","progress","checkForUpdates","augmentPath","shellPath","home","candidates","nvmDir","current","toAdd","__dirname","fileURLToPath","_documentCurrentScript","cloudWin","VITE_DEV_SERVER_URL","createAppMenu","isMac","isDev","Menu","createWindow","BrowserWindow","nativeTheme","createCloudWindow","initJivaRunner","initCodeRunner","runner","cRunner","mainWin"],"mappings":"iiBAKO,SAASA,IAA4B,CAC1C,OAAQ,QAAQ,SAAA,CACd,IAAK,QAAS,CACZ,MAAMC,EAAU,YAAY,SAAWC,EAAK,KAAKC,GAAG,UAAW,UAAW,SAAS,EACnF,OAAOD,EAAK,KAAKD,EAAS,cAAe,SAAU,aAAa,CAClE,CACA,IAAK,SACH,OAAOC,EAAK,KAAKC,GAAG,QAAA,EAAW,UAAW,cAAe,cAAe,aAAa,EACvF,QACE,OAAOD,EAAK,KACV,YAAY,iBAAmBA,EAAK,KAAKC,GAAG,QAAA,EAAW,SAAS,EAChE,cAAe,aAAA,CACjB,CAEN,CAEA,MAAMC,GAAmBJ,GAAA,EA0BlB,SAASK,IAAgC,CAC9C,GAAI,CACF,GAAIC,EAAG,WAAWF,EAAgB,EAAG,CACnC,MAAMG,EAAMD,EAAG,aAAaF,GAAkB,OAAO,EACrD,OAAO,KAAK,MAAMG,CAAG,CACvB,CACA,OAAO,IACT,OAASC,EAAK,CACZ,eAAQ,MAAM,yCAA0CA,CAAG,EACpD,IACT,CACF,CAEO,SAASC,GAAYC,EAA6B,CACvD,GAAI,CACF,MAAMC,EAAMT,EAAK,QAAQE,EAAgB,EACzC,OAAKE,EAAG,WAAWK,CAAG,GACpBL,EAAG,UAAUK,EAAK,CAAE,UAAW,GAAM,EAEvCL,EAAG,cAAcF,GAAkB,KAAK,UAAUM,EAAQ,KAAM,CAAC,EAAG,OAAO,EACpE,EACT,OAASF,EAAK,CACZ,eAAQ,MAAM,0CAA2CA,CAAG,EACrD,EACT,CACF,CCpEA,MAAMI,GAAWV,EAAK,KAAKC,GAAG,QAAA,EAAW,OAAO,EAC1CU,GAAiBX,EAAK,KAAKU,GAAU,mBAAmB,EACxDE,GAAoBZ,EAAK,KAAKU,GAAU,eAAe,EAY7D,SAASG,GAAwBC,EAAQ,EAAuB,CAC9D,GAAI,CACF,OAAKV,EAAG,WAAWQ,EAAiB,EAEtBR,EACX,YAAYQ,EAAiB,EAC7B,OAAQG,GAAMA,EAAE,SAAS,OAAO,CAAC,EACjC,IAAKA,GAAM,CACV,MAAMC,EAAWhB,EAAK,KAAKY,GAAmBG,CAAC,EAC/C,GAAI,CACF,MAAME,EAAOb,EAAG,SAASY,CAAQ,EAC3BX,EAAM,KAAK,MAAMD,EAAG,aAAaY,EAAU,OAAO,CAAC,EACnDE,EAAuB,MAAM,QAAQb,EAAI,QAAQ,EAAIA,EAAI,SAAS,OAAS,EAEjF,IAAIc,EAAgBd,EAAI,SAAWA,EAAI,OAAS,GAChD,GAAI,CAACc,GAAS,MAAM,QAAQd,EAAI,QAAQ,EAAG,CACzC,MAAMe,EAAYf,EAAI,SAAS,KAC5BgB,GAA2CA,EAAE,OAAS,MAAA,EAErDD,GAAA,MAAAA,EAAW,UACbD,EAAQ,OAAOC,EAAU,OAAO,EAAE,MAAM,EAAG,EAAE,EAAE,QAAQ,MAAO,GAAG,EAC7D,OAAOA,EAAU,OAAO,EAAE,OAAS,KAAID,GAAS,OAExD,CACA,OAAAA,EAAQA,GAAS,wBACV,CAAE,KAAAF,EAAM,MAAAE,EAAO,aAAAD,CAAA,CACxB,MAAQ,CACN,OAAO,IACT,CACF,CAAC,EACA,OAAO,OAAO,EACd,KAAK,CAACI,EAAGC,IAAMA,EAAG,KAAK,QAAUD,EAAG,KAAK,OAAO,EAChD,MAAM,EAAGR,CAAK,EAEuC,IAAI,CAAC,CAAE,KAAAG,EAAM,MAAAE,EAAO,aAAAD,KAAmB,CAC7F,MAAMM,EAAI,IAAI,KAAKP,EAAK,OAAO,EAE/B,MAAO,CAAE,KADI,GAAGO,EAAE,YAAA,CAAa,IAAI,OAAOA,EAAE,SAAA,EAAa,CAAC,EAAE,SAAS,EAAG,GAAG,CAAC,IAAI,OAAOA,EAAE,SAAS,EAAE,SAAS,EAAG,GAAG,CAAC,IAAI,OAAOA,EAAE,SAAA,CAAU,EAAE,SAAS,EAAG,GAAG,CAAC,IAAI,OAAOA,EAAE,WAAA,CAAY,EAAE,SAAS,EAAG,GAAG,CAAC,GACzL,MAAAL,EAAO,aAAAD,CAAA,CACxB,CAAC,EApC6C,CAAA,CAqChD,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAMO,SAASO,GAAsBC,EAAgC,OACpE,MAAMC,MAAU,KAEVC,EAAW,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,UAAU,EACxFC,EAAS,CACb,UAAW,WAAY,QAAS,QAAS,MAAO,OAChD,OAAQ,SAAU,YAAa,UAAW,WAAY,UAAA,EAGlDC,EAAUF,EAASD,EAAI,OAAA,CAAQ,EAC/BI,EAAQF,EAAOF,EAAI,SAAA,CAAU,EAC7BK,EAAML,EAAI,QAAA,EACVM,EAAON,EAAI,YAAA,EACXO,EAAQ,OAAOP,EAAI,SAAA,CAAU,EAAE,SAAS,EAAG,GAAG,EAC9CQ,EAAU,OAAOR,EAAI,WAAA,CAAY,EAAE,SAAS,EAAG,GAAG,EAClDS,EAAO,GAAGF,CAAK,IAAIC,CAAO,GAGhC,IAAIE,EAAW,MACf,GAAI,CACFA,IAAWC,EAAA,KAAK,eAAe,KAAM,CAAE,aAAc,OAAA,CAAS,EAC3D,cAAcX,CAAG,EACjB,KAAMY,GAAMA,EAAE,OAAS,cAAc,IAF7B,YAAAD,EAEgC,QAAS,KACtD,MAAQ,CAEN,MAAME,EAAS,CAACb,EAAI,kBAAA,EACdc,EAAOD,GAAU,EAAI,IAAM,IAC3BE,EAAO,OAAO,KAAK,MAAM,KAAK,IAAIF,CAAM,EAAI,EAAE,CAAC,EAAE,SAAS,EAAG,GAAG,EAChEG,EAAO,OAAO,KAAK,IAAIH,CAAM,EAAI,EAAE,EAAE,SAAS,EAAG,GAAG,EAC1DH,EAAW,MAAMI,CAAI,GAAGC,CAAI,IAAIC,CAAI,EACtC,CAEA,MAAMC,EAAMjB,EAAI,YAAA,EAGVkB,EAAShC,GAAwB,CAAC,EACxC,IAAIiC,EACAD,EAAO,SAAW,EACpBC,EAAiB,gCAKjBA,EAAiB;AAAA;AAAA,EAHJD,EACV,IAAKE,GAAM,KAAKA,EAAE,IAAI,OAAOA,EAAE,KAAK,OAAOA,EAAE,YAAY,IAAI,EAC7D,KAAK;AAAA,CAAI,CACsE,GAGpF,MAAMC,EAAiB;AAAA;AAAA;AAAA,UAGflB,CAAO,KAAKC,CAAK,IAAIC,CAAG,KAAKC,CAAI;AAAA,UACjCG,CAAI,IAAIC,CAAQ;AAAA,SACjBO,CAAG;AAAA;AAAA;AAAA;AAAA;AAAA,sDAK0CX,CAAI;AAAA;AAAA;AAAA,EAGxDa,CAAc;AAAA,EAGd,OAAIpB,GAAA,MAAAA,EAAe,OACVA,EAAc,OAAS;AAAA;AAAA;AAAA;AAAA,EAAgBsB,EAEzCA,CACT,CAOO,SAASC,GAAevB,EAA2D,CACxF,MAAMwB,EAAUzB,GAAsBC,CAAa,EACnD,GAAI,CACGtB,EAAG,WAAWM,EAAQ,GACzBN,EAAG,UAAUM,GAAU,CAAE,UAAW,GAAM,EAE5CN,EAAG,cAAcO,GAAgBuC,EAAS,OAAO,EACjD,QAAQ,IAAI,yCAAyCvC,EAAc,EAAE,CACvE,OAASL,EAAK,CACZ,QAAQ,KAAK,gDAAiDA,CAAG,CACnE,CACA,MAAO,CAAE,KAAMK,GAAgB,QAAAuC,CAAA,CACjC,CClJA,MAAMC,GAAenD,EAAK,KAAKC,GAAG,QAAA,EAAW,QAAS,UAAU,EAgBhE,SAASmD,GAAeC,EAAcC,EAAwB,CAC5D,OAAID,IAAS,QAAUC,EAAK,SAAS,MAAM,EAAU,gBACjDD,IAAS,YAAcC,EAAK,SAAS,UAAU,EAAU,SACzDD,IAAS,aAAeA,IAAS,iBAAmBC,EAAK,SAAS,MAAM,EAAU,QAClFD,IAAS,uBAAyBC,EAAK,SAAS,YAAY,EAAU,SACtED,IAAS,UAAYC,EAAK,SAAS,SAAS,EAAU,eACtDD,IAAS,gBAAkBC,EAAK,SAAS,MAAM,EAAU,YACtD,KACT,CAEO,SAASC,IAA8B,CAC5C,MAAMC,EAA0B,CAAA,EAEhC,GAAI,CAACpD,EAAG,WAAW+C,EAAY,EAC7B,OAAOK,EAGT,GAAI,CACF,MAAMC,EAAUrD,EAAG,YAAY+C,GAAc,CAAE,cAAe,GAAM,EAEpE,UAAWO,KAASD,EAAS,CAE3B,GADI,CAACC,EAAM,eACPA,EAAM,OAAS,SAAU,SAE7B,MAAMC,EAAa3D,EAAK,KAAKmD,GAAcO,EAAM,IAAI,EAC/CE,EAAiB5D,EAAK,KAAK2D,EAAY,eAAgB,aAAa,EAE1E,IAAIE,EAAqE,CAAA,EAEzE,GAAIzD,EAAG,WAAWwD,CAAc,EAC9B,GAAI,CACF,MAAMvD,EAAMD,EAAG,aAAawD,EAAgB,OAAO,EACnDC,EAAW,KAAK,MAAMxD,CAAG,CAC3B,MAAQ,CAER,CAGF,MAAMgD,EAAOK,EAAM,KACbJ,EAAOO,EAAS,MAAQ,CAAA,EACxBC,EAAe,CAAC,OAAQ,UAAU,EAExCN,EAAS,KAAK,CACZ,KAAAH,EACA,aAAcQ,EAAS,MAAQR,GAAM,QAAQ,KAAM,GAAG,EAAE,QAAQ,QAASU,GAAKA,EAAE,aAAa,EAC7F,YAAaF,EAAS,aAAe,GAAGR,CAAI,WAC5C,KAAAC,EACA,KAAMF,GAAeC,EAAMC,CAAI,EAC/B,UAAWQ,EAAa,SAAST,CAAI,EACrC,QAASM,CAAA,CACV,CACH,CACF,OAASrD,EAAK,CACZ,QAAQ,MAAM,4CAA6CA,CAAG,CAChE,CAGA,OAAOkD,EAAS,KAAK,CAAClC,EAAGC,IACnBD,EAAE,WAAa,CAACC,EAAE,UAAkB,GACpC,CAACD,EAAE,WAAaC,EAAE,UAAkB,EACjCD,EAAE,KAAK,cAAcC,EAAE,IAAI,CACnC,CACH,CAEO,SAASyC,GAAgBX,EAAuB,CACrD,KAAM,CAAE,SAAAY,CAAA,EAAa,QAAQ,eAAe,EAC5C,GAAI,CACF,OAAAA,EAAS,yBAAyBZ,CAAI,GAAI,CAAE,QAAS,IAAO,MAAO,SAAU,EACtE,EACT,MAAQ,CAEN,MAAMa,EAAalE,EAAK,KAAKC,GAAG,QAAA,EAAW,QAAS,oBAAoB,EACxE,GAAI,CACFG,OAAAA,EAAG,cAAc8D,EAAYb,EAAM,OAAO,EACnC,EACT,MAAQ,CACN,MAAO,EACT,CACF,CACF,CAEO,SAASc,IAAkC,CAChD,GAAI,CACF,MAAMC,EAAiBtE,GAAA,EACvB,GAAIM,EAAG,WAAWgE,CAAc,EAAG,CACjC,MAAM5D,EAAS,KAAK,MAAMJ,EAAG,aAAagE,EAAgB,OAAO,CAAC,EAClE,GAAI5D,EAAO,cAAe,OAAOA,EAAO,aAC1C,CACA,MAAM0D,EAAalE,EAAK,KAAKC,GAAG,QAAA,EAAW,QAAS,oBAAoB,EACxE,GAAIG,EAAG,WAAW8D,CAAU,EAC1B,OAAO9D,EAAG,aAAa8D,EAAY,OAAO,EAAE,KAAA,CAEhD,MAAQ,CAAC,CACT,OAAO,IACT,CC9GA,MAAMG,GAAe,2CACfC,GACJ,mNAEIC,GAAgB,uCAStB,eAAeC,GAAcxE,EAAcyE,EAAiE,CAC1G,MAAMC,EAAM,MAAM,MAAM,GAAGL,EAAY,GAAGrE,CAAI,GAAI,CAChD,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,OAAUsE,EAAA,EAEZ,KAAM,KAAK,UAAUG,CAAI,CAAA,CAC1B,EACKE,EAAO,MAAMD,EAAI,KAAA,EACvB,GAAI,CAACA,EAAI,GAAI,CACX,MAAME,EAAOD,EAAK,mBAAqBA,EAAK,OAASA,EAAK,SAAW,cACrE,MAAM,IAAI,MAAMC,CAAG,CACrB,CACA,OAAOD,CACT,CAEA,eAAsBE,GAAYC,EAAeC,EAAsC,CACrF,MAAMJ,EAAO,MAAMH,GAAc,qCAAsC,CAAE,MAAAM,EAAO,SAAAC,EAAU,EAC1F,MAAO,CACL,OAASJ,EAAK,KAAiC,GAC/C,MAAQA,EAAK,KAAiC,MAC9C,YAAaA,EAAK,aAClB,aAAcA,EAAK,aAAA,CAEvB,CAEA,eAAsBK,GAAYF,EAAeC,EAAsC,CACrF,MAAMJ,EAAO,MAAMH,GAAc,kBAAmB,CAAE,MAAAM,EAAO,SAAAC,EAAU,EAIjEE,EAAYN,EAAK,MAAQA,EAC/B,MAAO,CACL,OAAQM,EAAQ,GAChB,MAAOA,EAAQ,MACf,YAAcN,EAAK,cAAgB,GACnC,aAAeA,EAAK,eAAiB,EAAA,CAEzC,CAiBA,eAAsBO,GAAiBC,EAAgBC,EAAkC,CACvF,MAAMV,EAAM,MAAM,MAAM,GAAGH,EAAa,eAAgB,CACtD,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,cAAeY,EACf,eAAgBC,CAAA,EAElB,KAAM,KAAK,UAAU,CAAA,CAAE,CAAA,CACxB,EACD,GAAI,CAACV,EAAI,GAAI,CACX,MAAMW,EAAO,MAAMX,EAAI,KAAA,EACvB,MAAM,IAAI,MAAM,8BAA8BW,CAAI,EAAE,CACtD,CACF,CChFA,MAAMd,GAAgB,uCAcf,MAAMe,EAAY,CAAlB,cACGC,GAAA,cAAwB,MACxBA,GAAA,iBAA2B,MAC3BA,GAAA,eAAU,IACVA,GAAA,wBAA2C,MAC3CA,GAAA,qBAAsC,MACtCA,GAAA,qBAAqC,MACrCA,GAAA,oBAA8C,MAGtD,WAAkB,CACZ,KAAK,SACJ,KAAK,gBACR,KAAK,cAAgB,IAAI,QAAc,CAACC,EAASC,IAAW,CAC1D,KAAK,cAAgBD,EACrB,KAAK,aAAeC,CACtB,CAAC,EAEL,CAEA,UAAUN,EAAgBC,EAAyB,OACjD,KAAK,OAASD,EACd,KAAK,UAAYC,EACjB,KAAK,QAAU,IACf9C,EAAA,KAAK,gBAAL,MAAAA,EAAA,WACA,KAAK,cAAgB,KACrB,KAAK,aAAe,IACtB,CAOA,eAAeoD,EAAkC,CAC/C,OAAI,KAAK,QAAgB,QAAQ,QAAA,EAC5B,KAAK,cACH,QAAQ,KAAK,CAClB,KAAK,cACL,IAAI,QAAc,CAACC,EAAGF,IACpB,WAAW,IAAMA,EAAO,IAAI,MAAM,gCAAgCC,CAAS,IAAI,CAAC,EAAGA,CAAS,CAAA,CAC9F,CACD,EAN+B,QAAQ,OAAO,IAAI,MAAM,+BAA+B,CAAC,CAO3F,CAEA,UAAoB,CAClB,OAAO,KAAK,OACd,CAEA,gBAA0B,CACxB,MAAO,CAAC,KAAK,SAAW,KAAK,gBAAkB,IACjD,CAEA,YAAmB,OACjB,KAAK,QAAU,GACf,KAAK,OAAS,KACd,KAAK,UAAY,MAEjBpD,EAAA,KAAK,eAAL,MAAAA,EAAA,UAAoB,IAAI,MAAM,2BAA2B,GACzD,KAAK,cAAgB,KACrB,KAAK,cAAgB,KACrB,KAAK,aAAe,IACtB,CAEA,MAAa,QACXA,EAAA,KAAK,mBAAL,MAAAA,EAAuB,OACzB,CAEA,IAAY,SAAkC,CAC5C,MAAO,CACL,eAAgB,mBAChB,cAAe,KAAK,QAAU,aAC9B,eAAgB,KAAK,WAAa,iBAAA,CAEtC,CAEA,MAAM,KACJsD,EACAC,EACAC,EACAC,EACyB,CACzB,GAAI,CAAC,KAAK,QAAS,MAAM,IAAI,MAAM,4BAA4B,EAE/D,MAAMC,EAAY,KAAK,IAAA,EACvBH,EAAQ,UAAU,EAElB,KAAK,iBAAmB,IAAI,gBAC5B,KAAM,CAAE,OAAAI,GAAW,KAAK,iBAExB,GAAI,CAEF,MAAO,CAAE,GADM,MAAM,KAAK,YAAYL,EAAQC,EAASE,EAAOE,CAAM,EAChD,WAAY,KAAK,IAAA,EAAQD,CAAA,CAC/C,OAAS1F,EAAK,CACZ,OAAKA,EAAc,OAAS,aACnB,CACL,QAAS,GACT,WAAY,EACZ,UAAW,CAAA,EACX,KAAM,KACN,WAAY,KAAK,MAAQ0F,CAAA,GAI7B,QAAQ,KAAK,2DAA4D1F,CAAG,EAErE,CAAE,GADM,MAAM,KAAK,eAAesF,EAAQC,EAASI,CAAM,EAC5C,WAAY,KAAK,IAAA,EAAQD,CAAA,EAC/C,QAAA,CACE,KAAK,iBAAmB,KACxBH,EAAQ,MAAM,CAChB,CACF,CAEA,MAAc,YACZD,EACAC,EACAE,EACAE,EAC6C,CAC7C,MAAMvB,EAAM,MAAM,MAAM,GAAGH,EAAa,mBAAoB,CAC1D,OAAQ,OACR,QAAS,CAAE,GAAG,KAAK,QAAS,OAAU,mBAAA,EACtC,KAAM,KAAK,UAAU,CAAE,QAASqB,EAAQ,EACxC,OAAAK,CAAA,CACD,EAED,GAAI,CAACvB,EAAI,IAAM,CAACA,EAAI,KAClB,MAAM,IAAI,MAAM,uBAAuBA,EAAI,MAAM,EAAE,EAGrD,MAAMwB,EAASxB,EAAI,KAAK,UAAA,EAClByB,EAAU,IAAI,YACpB,IAAIC,EAAS,GACTlD,EAAU,GACVmD,EAAa,EACjB,MAAMC,EAAsB,CAAA,EAC5B,IAAIC,EAA+B,KAE/BC,EAAkC,KAEtCC,SAAoB,CAClB,KAAM,CAAE,KAAAC,EAAM,MAAAC,CAAA,EAAU,MAAMT,EAAO,KAAA,EACrC,GAAIQ,EAAM,MAEVN,GAAUD,EAAQ,OAAOQ,EAAO,CAAE,OAAQ,GAAM,EAChD,MAAMC,EAAQR,EAAO,MAAM;AAAA,CAAI,EAC/BA,EAASQ,EAAM,OAAS,GAExB,UAAWC,KAAQD,EAAO,CACxB,GAAIC,EAAK,WAAW,SAAS,EAAG,CAC9BL,EAAmBK,EAAK,MAAM,CAAC,EAAE,KAAA,EACjC,QACF,CACA,GAAI,CAACA,EAAK,WAAW,QAAQ,EAAG,SAChC,MAAMxG,EAAMwG,EAAK,MAAM,CAAC,EAAE,KAAA,EAC1B,GAAI,CAACxG,GAAOA,IAAQ,SAAU,SAE9B,IAAImB,EACJ,GAAI,CACFA,EAAI,KAAK,MAAMnB,CAAG,CACpB,MAAQ,CACN,QACF,CAGA,MAAMyG,EAAUN,GAAqBhF,EAAE,KAGvC,GAFAgF,EAAmB,KAEfM,IAAY,SAAU,CACxB,MAAMlC,EAAMpD,EAAE,QACVoD,IACFiB,EAAQ,WAAW,EACnBE,GAAA,MAAAA,EAAQ,CACN,UAAW,IAAI,KAAA,EAAO,YAAA,EACtB,MAAO,OACP,IAAK,QACL,QAAS,SAASnB,CAAG,EAAA,GAG3B,SAAWkC,IAAY,WACrB5D,EAAW1B,EAAE,SAAWA,EAAE,UAAY,GACtC6E,EAAc7E,EAAE,YAAc,EAC1B,MAAM,QAAQA,EAAE,SAAS,GAAG8E,EAAU,KAAK,GAAI9E,EAAE,SAAsB,EACvEA,EAAE,OAAM+E,EAAO/E,EAAE,UACvB,IAAWsF,IAAY,QACrB,MAAM,IAAI,MAAMtF,EAAE,SAAqB,cAAc,EACvD,GAAWsF,IAAY,OACrB,MAAML,EAEV,CACF,CAEA,MAAO,CAAE,QAAAvD,EAAS,WAAAmD,EAAY,UAAAC,EAAW,KAAAC,CAAA,CAC3C,CAEA,MAAc,eACZX,EACAC,EACAI,EAC6C,CAC7CJ,EAAQ,WAAW,EACnB,MAAMnB,EAAM,MAAM,MAAM,GAAGH,EAAa,YAAa,CACnD,OAAQ,OACR,QAAS,KAAK,QACd,KAAM,KAAK,UAAU,CAAE,QAASqB,EAAQ,EACxC,OAAAK,CAAA,CACD,EACD,GAAI,CAACvB,EAAI,GAAI,CACX,MAAMW,EAAO,MAAMX,EAAI,KAAA,EACvB,MAAM,IAAI,MAAM,sBAAsBA,EAAI,MAAM,MAAMW,CAAI,EAAE,CAC9D,CACA,MAAM7D,EAAI,MAAMkD,EAAI,KAAA,EACpB,MAAO,CACL,QAAUlD,EAAE,UAAY,GACxB,WAAaA,EAAE,YAAc,EAC7B,UAAW,MAAM,QAAQA,EAAE,SAAS,EAAKA,EAAE,UAAyB,CAAA,EACpE,KAAOA,EAAE,MAAQ,IAAA,CAErB,CAEA,MAAM,mBAAmC,CACvC,GAAK,KAAK,QACV,GAAI,CACF,MAAM,MAAM,GAAG+C,EAAa,oBAAqB,CAC/C,OAAQ,SACR,QAAS,KAAK,OAAA,CACf,CACH,OAASwC,EAAG,CACV,QAAQ,MAAM,0CAA2CA,CAAC,CAC5D,CACF,CAEA,MAAM,aAA6B,CACjC,GAAI,CACF,MAAM,MAAM,GAAGxC,EAAa,iBAAkB,CAC5C,OAAQ,OACR,QAAS,KAAK,OAAA,CACf,CACH,MAAQ,CAAC,CACT,KAAK,KAAA,CACP,CACF,CCzPA,MAAMyC,OAAsB,IAAI,CAC9B,MAAO,KAAM,WAAY,MAAO,MAChC,KAAM,MAAO,KAAM,MAAO,MAAO,MACjC,KAAM,KAAM,KAAM,KAAM,OAAQ,KAAM,QACtC,IAAK,MAAO,KAAM,IAAK,MAAO,KAC9B,MAAO,OAAQ,OAAQ,OACvB,OAAQ,MAAO,MAAO,MAAO,QAC7B,OAAQ,QAAS,OAAQ,MAAO,OAAQ,MAAO,MAAO,OACtD,KAAM,OAAQ,MAAO,OAAQ,MAAO,MAAO,MAC3C,MAAO,UAAW,MAAO,QACzB,MAAO,eAAgB,YAAa,gBACpC,aAAc,WAAY,QAAS,SACnC,IAAK,KAAM,QAAS,MAAO,KAAM,MAAO,MAAO,KAAM,MAAO,KAC5D,MAAO,SAAU,QACjB,OAAQ,MAAO,KACjB,CAAC,EAEKC,GAA2C,CAC/C,IAAK,YACL,IAAK,aACL,KAAM,aACN,IAAK,YACL,KAAM,aACN,IAAK,WACP,EAEMC,GAAmC,CACvC,GAAI,aAAc,IAAK,MAAO,GAAI,aAAc,IAAK,MACrD,GAAI,SAAU,GAAI,OAAQ,GAAI,KAAM,GAAI,OACxC,KAAM,OAAQ,GAAI,SAAU,MAAO,QAAS,GAAI,SAChD,EAAG,IAAK,IAAK,MAAO,EAAG,IAAK,IAAK,MACjC,IAAK,MAAO,KAAM,OAAQ,KAAM,OAAQ,KAAM,OAC9C,KAAM,OAAQ,IAAK,OAAQ,IAAK,MAAO,IAAK,MAC5C,KAAM,OAAQ,MAAO,OAAQ,KAAM,OAAQ,IAAK,OAAQ,KAAM,OAC9D,GAAI,OAAQ,KAAM,OAAQ,IAAK,OAAQ,KAAM,OAAQ,IAAK,aAC1D,IAAK,MAAO,QAAS,UAAW,IAAK,UAAW,MAAO,WACvD,GAAI,WAAY,SAAU,WAAY,IAAK,MAC3C,EAAG,IAAK,GAAI,QAAS,MAAO,QAAS,IAAK,MAC1C,IAAK,MAAO,OAAQ,QACtB,EAEO,SAASC,GAAgBC,EAA2B,CACzD,MAAMC,EAAQD,EAAI,YAAA,EAAc,QAAQ,MAAO,EAAE,EACjD,OAAIJ,GAAgB,IAAIK,CAAK,EAAU,OACnCA,KAASJ,GAAyB,QAClCI,IAAU,MAAc,MACxBA,IAAU,OAAe,OACtB,aACT,CAEO,SAASC,GAAYtG,EAAiC,CAC3D,MAAMqC,EAAOrD,EAAK,SAASgB,CAAQ,EAC7BoG,EAAMpH,EAAK,QAAQgB,CAAQ,EAAE,cAAc,QAAQ,MAAO,EAAE,EAC5DuG,EAAWJ,GAAgBC,CAAG,EAEpC,GAAI,CACF,OAAQG,EAAA,CACN,IAAK,OAAQ,OAAOC,GAAgBxG,EAAUqC,EAAM+D,CAAG,EACvD,IAAK,MAAO,OAAOK,GAAWzG,EAAUqC,CAAI,EAC5C,IAAK,OAAQ,OAAOqE,GAAY1G,EAAUqC,CAAI,EAC9C,IAAK,QAAS,OAAOsE,GAAa3G,EAAUqC,EAAM+D,CAAG,EACrD,QAAS,MAAO,CAAE,KAAA/D,EAAM,SAAU,cAAe,SAAU,GAAI,MAAO,cAAc+D,CAAG,mBAAA,CAAoB,CAE/G,OAAS9G,EAAK,CACZ,MAAO,CACL,KAAA+C,EACA,SAAAkE,EACA,SAAU,GACV,MAAOjH,aAAe,MAAQA,EAAI,QAAU,qBAAA,CAEhD,CACF,CAEA,SAASkH,GAAgBxG,EAAkBqC,EAAc+D,EAA4B,CAEnF,GADahH,EAAG,SAASY,CAAQ,EACxB,KAAO,EAAI,KAAO,KACzB,MAAO,CAAE,KAAAqC,EAAM,SAAU,OAAQ,SAAU,GAAI,MAAO,6CAAA,EAExD,MAAMH,EAAU9C,EAAG,aAAaY,EAAU,OAAO,EAE3C4G,EAAW,SADJV,GAASE,CAAG,GAAKA,CACA;AAAA,EAAKlE,CAAO;AAAA,QAC1C,MAAO,CAAE,KAAAG,EAAM,SAAU,OAAQ,SAAAuE,CAAA,CACnC,CAKA,SAASH,GAAWzG,EAAkBqC,EAA6B,CAEjE,GADajD,EAAG,SAASY,CAAQ,EACxB,KAAO,GAAK,KAAO,KAC1B,MAAO,CAAE,KAAAqC,EAAM,SAAU,MAAO,SAAU,GAAI,MAAO,8BAAA,EAGvD,MAAM+C,EAAShG,EAAG,aAAaY,CAAQ,EACjCqE,EAAOwC,GAAezB,CAAM,EAElC,GAAI,CAACf,EAAK,OACR,MAAO,CAAE,KAAAhC,EAAM,SAAU,MAAO,SAAU,GAAI,MAAO,mEAAA,EAGvD,MAAMuE,EAAW,WAAWvE,CAAI;AAAA;AAAA,EAAUgC,CAAI,GAC9C,MAAO,CAAE,KAAAhC,EAAM,SAAU,MAAO,SAAAuE,CAAA,CAClC,CAEA,SAASC,GAAezB,EAAwB,CAE9C,MAAM/F,EAAM+F,EAAO,SAAS,QAAQ,EAC9B0B,EAAkB,CAAA,EAGlBC,EAAqB,gFAC3B,IAAI1G,EACJ,MAAQA,EAAI0G,EAAmB,KAAK1H,CAAG,KAAO,MAC5C,GAAI,CACF,MAAM2H,EAAM,OAAO,KAAK3G,EAAE,CAAC,EAAG,QAAQ,EAChC4G,EAAeC,GAAK,YAAYF,CAAG,EAAE,SAAS,QAAQ,EAC5DF,EAAM,KAAK,GAAGK,GAAsBF,CAAY,CAAC,CACnD,MAAQ,CAAsC,CAIhD,MAAMG,EAAS,kBACf,MAAQ/G,EAAI+G,EAAO,KAAK/H,CAAG,KAAO,MAChCyH,EAAM,KAAK,GAAGK,GAAsB9G,EAAE,CAAC,CAAC,CAAC,EAI3C,MAAO,CAAC,GAAG,IAAI,IAAIyG,CAAK,CAAC,EAAE,KAAK,GAAG,EAAE,QAAQ,OAAQ,GAAG,EAAE,KAAA,CAC5D,CAEA,SAASK,GAAsBE,EAA0B,CACvD,MAAMC,EAAoB,CAAA,EAGpBF,EAAS,kBACf,IAAI/G,EACJ,MAAQA,EAAI+G,EAAO,KAAKC,CAAM,KAAO,MAAM,CACzC,MAAME,EAAQlH,EAAE,CAAC,EAEXmH,EAAQ,gCACd,IAAIC,EACJ,MAAQA,EAAID,EAAM,KAAKD,CAAK,KAAO,MAAM,CAQvC,MAAMG,EAPUD,EAAE,CAAC,EAChB,QAAQ,OAAQ;AAAA,CAAI,EACpB,QAAQ,OAAQ,IAAI,EACpB,QAAQ,OAAQ,GAAI,EACpB,QAAQ,QAAS,GAAG,EACpB,QAAQ,QAAS,GAAG,EACpB,QAAQ,QAAS,IAAI,EACF,QAAQ,sBAAuB,EAAE,EAAE,KAAA,EACrDC,EAAM,OAAS,GAAGJ,EAAQ,KAAKI,CAAK,CAC1C,CAGA,MAAMC,EAAQ,sBACd,MAAQF,EAAIE,EAAM,KAAKJ,CAAK,KAAO,MAAM,CACvC,MAAMK,EAAMH,EAAE,CAAC,EAAE,QAAQ,MAAO,EAAE,EAClC,GAAIG,EAAI,OAAS,IAAM,EAAG,SAC1B,IAAIC,EAAM,GACV,QAASC,EAAI,EAAGA,EAAIF,EAAI,OAAQE,GAAK,EAAG,CACtC,MAAMC,EAAO,SAASH,EAAI,MAAME,EAAGA,EAAI,CAAC,EAAG,EAAE,EACzCC,GAAQ,IAAQA,GAAQ,MAAMF,GAAO,OAAO,aAAaE,CAAI,EACnE,CACIF,EAAI,OAAO,OAAS,GAAGP,EAAQ,KAAKO,EAAI,MAAM,CACpD,CACF,CAEA,OAAOP,CACT,CAKA,SAASZ,GAAY1G,EAAkBqC,EAA6B,CAElE,GADajD,EAAG,SAASY,CAAQ,EACxB,KAAO,GAAK,KAAO,KAC1B,MAAO,CAAE,KAAAqC,EAAM,SAAU,OAAQ,SAAU,GAAI,MAAO,+BAAA,EAGxD,MAAM+C,EAAShG,EAAG,aAAaY,CAAQ,EACjCgI,EAAMC,GAAe7C,EAAQ,mBAAmB,EAEtD,GAAI,CAAC4C,EACH,MAAO,CAAE,KAAA3F,EAAM,SAAU,OAAQ,SAAU,GAAI,MAAO,0CAAA,EAGxD,MAAMgC,EAAO6D,GAAiBF,EAAI,SAAS,OAAO,CAAC,EAEnD,GAAI,CAAC3D,EAAK,OACR,MAAO,CAAE,KAAAhC,EAAM,SAAU,OAAQ,SAAU,GAAI,MAAO,0BAAA,EAGxD,MAAMuE,EAAW,YAAYvE,CAAI;AAAA;AAAA,EAAUgC,CAAI,GAC/C,MAAO,CAAE,KAAAhC,EAAM,SAAU,OAAQ,SAAAuE,CAAA,CACnC,CAEA,SAASqB,GAAe7C,EAAgB+C,EAAmC,CACzE,IAAI3G,EAAS,EAEb,KAAOA,EAAS4D,EAAO,OAAS,IAAI,CAElC,GAAIA,EAAO,aAAa5D,CAAM,IAAM,SAAY,CAC9CA,IACA,QACF,CAEA,MAAM4G,EAAoBhD,EAAO,aAAa5D,EAAS,CAAC,EAClD6G,EAAiBjD,EAAO,aAAa5D,EAAS,EAAE,EAChD8G,EAAmBlD,EAAO,aAAa5D,EAAS,EAAE,EAClD+G,EAAcnD,EAAO,aAAa5D,EAAS,EAAE,EAC7CgH,EAAWpD,EAAO,aAAa5D,EAAS,EAAE,EAE1CiH,EAAWrD,EAAO,MAAM5D,EAAS,GAAIA,EAAS,GAAK+G,CAAW,EAAE,SAAS,OAAO,EAChFG,EAAYlH,EAAS,GAAK+G,EAAcC,EACxCG,EAAUD,EAAYL,EAE5B,GAAII,IAAaN,EAAY,CAC3B,MAAMS,EAAaxD,EAAO,MAAMsD,EAAWC,CAAO,EAClD,GAAIP,IAAsB,EAExB,OAAOQ,EACT,GAAWR,IAAsB,EAE/B,GAAI,CACF,OAAOlB,GAAK,eAAe0B,CAAU,CACvC,MAAQ,CAEN,GAAI,CACF,OAAO1B,GAAK,YAAY0B,CAAU,CACpC,MAAQ,CACN,OAAO,IACT,CACF,CAEF,OAAO,IACT,CAGIP,IAAmB,GAAKC,IAAqB,EAC/C9G,EAASkH,EAETlH,EAASmH,CAEb,CAEA,OAAO,IACT,CAEA,SAAST,GAAiBF,EAAqB,CAE7C,MAAMa,EAAuB,CAAA,EACvBC,EAAS,6BACf,IAAIzI,EAEJ,MAAQA,EAAIyI,EAAO,KAAKd,CAAG,KAAO,MAAM,CAEtC,MAAMe,EAAiB,CAAA,EACjBC,EAAQ,4BACd,IAAIC,EACJ,MAAQA,EAAID,EAAM,KAAK3I,EAAE,CAAC,CAAC,KAAO,MAChC0I,EAAK,KAAKE,EAAE,CAAC,CAAC,EAEhB,MAAM5E,EAAO0E,EAAK,KAAK,EAAE,EAAE,KAAA,EACvB1E,GAAMwE,EAAW,KAAKxE,CAAI,CAChC,CAEA,OAAOwE,EAAW,KAAK;AAAA;AAAA,CAAM,CAC/B,CAKA,SAASlC,GAAa3G,EAAkBqC,EAAc+D,EAA4B,CAEhF,GADahH,EAAG,SAASY,CAAQ,EACxB,KAAO,GAAK,KAAO,KAC1B,MAAO,CAAE,KAAAqC,EAAM,SAAU,QAAS,SAAU,GAAI,MAAO,gCAAA,EAGzD,MAAM6G,EAAWjD,GAAiBG,EAAI,YAAA,CAAa,GAAK,YAExD,MAAO,CAAE,KAAA/D,EAAM,SAAU,QAAS,SAAUrC,EAAU,SAAAkJ,CAAA,CACxD,CCxRA,MAAMC,GAAc,IAAI7E,GAEjB,SAAS8E,GACdC,EACAC,EACAC,EACA,CAEAC,UAAQ,OAAO,cAAe,IAAM,OAElC,IAAIC,EAAW,GACXC,EACJ,GAAI,CACFzG,GAAAA,SAAS,gBAAiB,CAAE,QAAS,GAAA,CAAM,EAC3CwG,EAAW,GACX,GAAI,CACFC,EAAgBzG,GAAAA,SAAS,iBAAkB,CAAE,QAAS,GAAA,CAAM,EACzD,SAAA,EAAW,KAAA,EAAO,QAAQ,KAAM,EAAE,CACvC,MAAQ,CAAC,CACX,MAAQ,CAAC,CAGT,IAAI0G,EAAa,GACbC,EACJ,GAAIH,EAAU,CACZ,GAAI,CACF,MAAMI,EAAU5G,YAAS,cAAe,CAAE,QAAS,IAAM,EAAE,SAAA,EAAW,KAAA,EAChE6G,EAAU9K,EAAK,KAAK6K,EAAS,YAAa,cAAc,EAC1DzK,EAAG,WAAW0K,CAAO,IAEvBF,EADY,KAAK,MAAMxK,EAAG,aAAa0K,EAAS,OAAO,CAAC,EAClC,QACtBH,EAAa,GAEjB,MAAQ,CAAC,CAET,GAAI,CAACA,EAAY,CACf,MAAMI,EAAQ/K,EAAK,KAAKC,GAAG,UAAW,cAAe,MAAO,eAAgB,YAAa,cAAc,EACvG,GAAIG,EAAG,WAAW2K,CAAK,EACrB,GAAI,CAEFH,EADY,KAAK,MAAMxK,EAAG,aAAa2K,EAAO,OAAO,CAAC,EAChC,QACtBJ,EAAa,EACf,MAAQ,CAAC,CAEb,CAEA,GAAI,CAACA,GAAc,QAAQ,WAAa,QAAS,CAC/C,MAAMK,EAAe,CACnBhL,EAAK,KAAK,QAAA,IAAY,SAAW,GAAI,MAAO,eAAgB,YAAa,cAAc,EACvFA,EAAK,KAAK,QAAA,IAAY,cAAgB,GAAI,MAAO,eAAgB,YAAa,cAAc,CAAA,EAE9F,UAAWiL,KAAMD,EACf,GAAI5K,EAAG,WAAW6K,CAAE,EAClB,GAAI,CAEFL,EADY,KAAK,MAAMxK,EAAG,aAAa6K,EAAI,OAAO,CAAC,EAC7B,QACtBN,EAAa,GACb,KACF,MAAQ,CAAC,CAGf,CACF,CAGA,MAAMO,EAAmB,CACvBpL,GAAA,EACAE,EAAK,KAAKC,GAAG,QAAA,EAAW,QAAS,aAAa,CAAA,EAGhD,IAAIkL,EAAW,GACXC,EAAkB,GACtB,UAAWC,KAAaH,EACtB,GAAK9K,EAAG,WAAWiL,CAAS,EAC5B,GAAI,CACF,MAAMC,EAAM,KAAK,MAAMlL,EAAG,aAAaiL,EAAW,OAAO,CAAC,EACpDE,IAAcjJ,EAAAgJ,GAAA,YAAAA,EAAK,SAAL,YAAAhJ,EAAyC,YAAa,CAAA,EAE1E,KADiBiJ,GAAA,YAAAA,EAAW,UAAUD,GAAA,YAAAA,EAAK,SAAW,IAC3C,OAAS,EAAG,CACrBH,EAAW,GACXC,EAAkBC,EAClB,KACF,CACF,MAAQ,CAAC,CAIX,IAAIG,EAAsB,GACtBC,EACJ,GAAI,CAEF,MAAMC,EAAa1L,EAAK,KAAK,UAAW,KAAM,cAAc,EAG5D,GADAyL,EADe,KAAK,MAAMrL,EAAG,aAAasL,EAAY,OAAO,CAAC,EACjC,sBACzBD,GAAuBb,EAAiB,CAE1C,KAAM,CAACe,EAAQC,CAAM,EAAIH,EAAoB,MAAM,GAAG,EAAE,IAAI,MAAM,EAC5D,CAACI,EAASC,CAAO,EAAIlB,EAAgB,MAAM,GAAG,EAAE,IAAI,MAAM,GAC5De,IAAWE,GAAWD,IAAWE,KACnCN,EAAsB,GAE1B,CACF,MAAQ,CAAC,CAET,MAAO,CACL,OAAU,CAAE,GAAIf,EAAY,QAASC,CAAA,EACrC,SAAU,CAAE,GAAIC,EAAY,QAASC,CAAA,EACrC,OAAU,CAAE,GAAIO,EAAY,KAAMC,GAAmBF,EAAiB,CAAC,CAAA,EACvE,SAAU,QAAQ,SAClB,oBAAAM,EACA,oBAAAC,CAAA,CAEJ,CAAC,EAGDpB,EAAW,GAAG,iBAAkB,CAAC0B,EAAQpH,IAAS,CAChD,MAAMqH,EAAMzB,EAAA,EAEN0B,EAAeF,IAAW,SAAWA,IAAW,OAAS,UAAYA,EAC3EC,GAAA,MAAAA,EAAK,YAAY,KAAK,6BAA8BC,EAActH,EACpE,CAAC,EAGD6F,UAAQ,OAAO,oBAAqB,SAAY,CAC9C,GAAI,CACF,OAAIH,EAAW,cAAgB,WAAaA,EAAW,UAAA,IAAgB,UACrE,MAAMA,EAAW,WAAA,EAEZ,CAAE,QAAS,GAAM,OAAQA,EAAW,WAAU,CACvD,OAAS/J,EAAK,CACZ,MAAM4L,EAAW5L,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,EAChE,eAAQ,MAAM,kCAAmC4L,CAAQ,EAClD,CAAE,QAAS,GAAO,MAAOA,CAAA,CAClC,CACF,CAAC,EAED1B,UAAQ,OAAO,mBAAoB,SAAY,CAC7C,GAAI,CACF,aAAMH,EAAW,QAAA,EACV,CAAE,QAAS,EAAA,CACpB,OAAS/J,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAEDkK,UAAQ,OAAO,sBAAuB,SAAY,CAChD,GAAI,CACF,aAAMH,EAAW,QAAA,EACjB,MAAMA,EAAW,WAAA,EACV,CAAE,QAAS,GAAM,OAAQA,EAAW,WAAU,CACvD,OAAS/J,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAEDkK,UAAQ,OAAO,qBAAsB,IAAM,CACzC,MAAMuB,EAAS1B,EAAW,UAAA,EAC1B,MAAO,CACL,OAAQ0B,IAAW,SAAWA,IAAW,OAAS,UAAYA,EAC9D,KAAM,CAAA,CAEV,CAAC,EAMDvB,EAAAA,QAAQ,OAAO,oBAAqB,MAAO2B,EAAOvG,EAAgBwG,EAAmBC,IAAiC,CAGpH,MAAMC,EAASH,EAAM,OAIfI,EADYD,EAAO,OAAA,EACO,SAAS,YAAY,EAErD,GAAI,CAEF,GAAIC,EAAe,CACZpC,GAAY,YACf,MAAMA,GAAY,eAAe,GAAM,EAEzC,MAAMqC,EAAS,MAAMrC,GAAY,KAAKvE,EAAS6G,GAAU,CACvDH,EAAO,KAAK,oBAAqBG,CAAK,CACxC,EAAGJ,EAAOK,GAAa,CACrBJ,EAAO,KAAK,gBAAiBI,CAAQ,CACvC,CAAC,EACD,MAAO,CAAE,QAAS,GAAM,OAAAF,EAAQ,eAAgBA,EAAO,cAAA,CACzD,EAGInC,EAAW,cAAgB,WAAaA,EAAW,UAAA,IAAgB,UACrE,MAAMA,EAAW,WAAA,EAGnB,MAAMmC,EAAS,MAAMnC,EAAW,KAAKzE,EAAS6G,GAAU,CACtDH,EAAO,KAAK,oBAAqBG,CAAK,CACxC,EAAGJ,EAAOK,GAAa,CACrBJ,EAAO,KAAK,gBAAiBI,CAAQ,CACvC,CAAC,EAED,MAAO,CAAE,QAAS,GAAM,OAAAF,EAAQ,eAAgBA,EAAO,cAAA,CACzD,OAASlM,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAGDkK,UAAQ,OAAO,oBAAqB,KAClCH,EAAW,KAAA,EACJ,CAAE,QAAS,EAAA,EACnB,EAGDG,UAAQ,OAAO,0BAA2B,KACxCH,EAAW,kBAAA,EACJ,CAAE,QAAS,EAAA,EACnB,EAGDG,EAAAA,QAAQ,OAAO,yBAA0B,MAAOmC,EAAQC,IAAe,CACrE,GAAI,CACF,OAAIvC,EAAW,cAAgB,WAAaA,EAAW,UAAA,IAAgB,UACrE,MAAMA,EAAW,WAAA,EAEnB,MAAMA,EAAW,iBAAiBuC,CAAE,EAC7B,CAAE,QAAS,EAAA,CACpB,OAAStM,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAGDkK,UAAQ,OAAO,cAAe,IACrBrK,GAAA,CACR,EAEDqK,EAAAA,QAAQ,OAAO,eAAgB,CAACmC,EAAQnM,IAC/BD,GAAYC,CAA2C,CAC/D,EAGDgK,UAAQ,OAAO,gBAAiB,IACvBjH,GAAA,CACR,EAEDiH,EAAAA,QAAQ,OAAO,oBAAqB,MAAOmC,EAAQtJ,IAAiB,CAClE,MAAMwJ,EAAU7I,GAAgBX,CAAI,EACpC,GAAIwJ,EAEF,GAAI,CACF,MAAMxC,EAAW,cAAchH,CAAI,CACrC,OAAS/C,EAAK,CACZ,QAAQ,MAAM,kCAAmCA,CAAG,CACtD,CAEF,MAAO,CAAE,QAAAuM,CAAA,CACX,CAAC,EAEDrC,UAAQ,OAAO,kBAAmB,IACzBrG,GAAA,CACR,EAGDqG,UAAQ,OAAO,qBAAsB,IAAM,CACzC,MAAMsC,EAAW9M,EAAK,KAAKC,GAAG,QAAA,EAAW,QAAS,eAAe,EACjE,GAAI,CACF,OAAKG,EAAG,WAAW0M,CAAQ,EACb1M,EAAG,YAAY0M,CAAQ,EAClC,OAAO/L,GAAKA,EAAE,SAAS,OAAO,CAAC,EAC/B,IAAIA,GAAK,WACR,MAAMC,EAAWhB,EAAK,KAAK8M,EAAU/L,CAAC,EAChCE,EAAOb,EAAG,SAASY,CAAQ,EACjC,GAAI,CACF,MAAMX,EAAM,KAAK,MAAMD,EAAG,aAAaY,EAAU,OAAO,CAAC,EAIzD,IAAI+L,IAAkBzK,EAAAjC,EAAI,WAAJ,YAAAiC,EAAc,QAASjC,EAAI,SAAWA,EAAI,OAAS,GACzE,GAAI,CAAC0M,GAAW,MAAM,QAAQ1M,EAAI,QAAQ,EAAG,CAC3C,MAAMe,EAAYf,EAAI,SAAS,KAC5BgB,GAA4CA,EAAE,OAAS,MAAA,EAE1D,GAAID,GAAA,MAAAA,EAAW,QAAS,CACtB,MAAMiE,EACJ,OAAOjE,EAAU,SAAY,SACzBA,EAAU,QACV,MAAM,QAAQA,EAAU,OAAO,EAC/BA,EAAU,QACP,OAAQmB,GAAwBA,EAAE,OAAS,MAAM,EACjD,IAAKA,GAAyBA,EAAE,MAAQ,EAAE,EAC1C,KAAK,EAAE,EACV,GACNwK,EAAU1H,EAAK,MAAM,EAAG,EAAE,EAAE,QAAQ,MAAO,GAAG,EAC1CA,EAAK,OAAS,KAAI0H,GAAW,MACnC,CACF,CACA,OAAAA,EAAUA,GAAW,WAEd,CACL,GAAIhM,EAAE,QAAQ,QAAS,EAAE,EACzB,QAAAgM,EACA,eAAcC,EAAA3M,EAAI,WAAJ,YAAA2M,EAAc,SAAU,EACtC,aAAc/L,EAAK,QACnB,OAAOgM,EAAA5M,EAAI,WAAJ,YAAA4M,EAAc,OAAQ,MAAA,CAEjC,MAAQ,CACN,OAAO,IACT,CACF,CAAC,EACA,OAAO,OAAO,EACd,KAAK,CAAC,EAAG1L,IAAOA,EAAG,aAAe,EAAG,YAAa,EA5ChB,CAAA,CA8CvC,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAAC,EAEDiJ,EAAAA,QAAQ,OAAO,qBAAsB,CAACmC,EAAQC,IAAe,CAC3D,MAAM5L,EAAWhB,EAAK,KAAKC,GAAG,QAAA,EAAW,QAAS,gBAAiB,GAAG2M,CAAE,OAAO,EAC/E,GAAI,CACF,OAAKxM,EAAG,WAAWY,CAAQ,EACpB,KAAK,MAAMZ,EAAG,aAAaY,EAAU,OAAO,CAAC,EADf,IAEvC,MAAQ,CACN,OAAO,IACT,CACF,CAAC,EAIDwJ,UAAQ,OAAO,kBAAmB,IAAM,CACtC,GAAI,CACF,MAAM0C,EAAgB7C,EAAW,mBAAA,EAC3B7J,EAASL,GAAA,EACTgN,GAAgB3M,GAAA,YAAAA,EAAQ,aAAc,CAAA,EACtC4M,EAAY,IAAI,IAAIF,EAAc,IAAKzE,GAAM,CAACA,EAAE,KAAMA,CAAC,CAAC,CAAC,EAEzD4E,EAAa,OAAO,QAAQF,CAAa,EAAE,IAAI,CAAC,CAAC9J,EAAMiK,CAAS,IAAM,CAC1E,MAAMC,EAAKH,EAAU,IAAI/J,CAAI,EAC7B,MAAO,CACL,KAAAA,EACA,QAASiK,EAAU,SAAW,GAC9B,WAAWC,GAAA,YAAAA,EAAI,YAAa,GAC5B,WAAWA,GAAA,YAAAA,EAAI,YAAa,EAC5B,QAASD,EAAU,SAAW,GAC9B,KAAMA,EAAU,MAAQ,CAAA,EACxB,IAAKA,EAAU,KAAO,CAAA,EACtB,IAAMA,EAAsC,IAC5C,KAAMA,EAAU,QAAU,QAAU,OACpC,MAAOC,GAAA,YAAAA,EAAI,KAAA,CAEf,CAAC,EAED,UAAWA,KAAML,EACVC,EAAcI,EAAG,IAAI,GACxBF,EAAW,KAAK,CACd,KAAME,EAAG,KACT,QAASA,EAAG,QACZ,UAAWA,EAAG,UACd,UAAWA,EAAG,UACd,QAAS,GACT,KAAM,CAAA,EACN,IAAK,CAAA,EACL,IAAK,OACL,KAAM,OAAA,CACP,EAIL,OAAOF,CACT,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAAC,EAED7C,UAAQ,OAAO,gBAAiB,IAAM,CACpC,GAAI,CACF,OAAOH,EAAW,YAAA,CACpB,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAAC,EAEDG,EAAAA,QAAQ,OAAO,iBAAkB,MAAOmC,EAAQtJ,EAAcmK,IAOxD,CACJ,GAAI,CACF,MAAMhN,EAASL,GAAA,EACf,GAAI,CAACK,EAAQ,MAAO,CAAE,QAAS,GAAO,MAAO,kBAAA,EAE7C,MAAMiN,EAAoC,CAAE,QAASD,EAAa,SAAW,EAAA,EAC7E,OAAIA,EAAa,OAAS,SACxBC,EAAS,QAAUD,EAAa,SAAW,GAC3CC,EAAS,KAAOD,EAAa,MAAQ,CAAA,EACjCA,EAAa,KAAO,OAAO,KAAKA,EAAa,GAAG,EAAE,OAAS,IAC7DC,EAAS,IAAMD,EAAa,OAG9BC,EAAS,IAAMD,EAAa,KAAO,GAC/BA,EAAa,KAAO,OAAO,KAAKA,EAAa,GAAG,EAAE,OAAS,IAC7DC,EAAS,IAAMD,EAAa,MAIhChN,EAAO,WAAa,CAAE,GAAIA,EAAO,YAAc,GAAK,CAAC6C,CAAI,EAAGoK,CAAA,EAC5DlN,GAAYC,CAAM,GAEd6J,EAAW,cAAgB,SAAWA,EAAW,UAAA,IAAgB,SACnE,MAAMA,EAAW,aAAahH,EAAMoK,CAAQ,EAGvC,CAAE,QAAS,EAAA,CACpB,OAASnN,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAEDkK,EAAAA,QAAQ,OAAO,oBAAqB,MAAOmC,EAAQtJ,IAAiB,CAClE,GAAI,CACF,MAAM7C,EAASL,GAAA,EACf,OAAIK,GAAA,MAAAA,EAAQ,aACV,OAAOA,EAAO,WAAW6C,CAAI,EAC7B9C,GAAYC,CAAM,IAEhB6J,EAAW,cAAgB,SAAWA,EAAW,UAAA,IAAgB,SACnE,MAAMA,EAAW,gBAAgBhH,CAAI,EAEhC,CAAE,QAAS,EAAA,CACpB,OAAS/C,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAEDkK,EAAAA,QAAQ,OAAO,oBAAqB,MAAOmC,EAAQtJ,EAAcqK,IAAqB,OACpF,GAAI,CACF,MAAMlN,EAASL,GAAA,EACf,OAAImC,EAAA9B,GAAA,YAAAA,EAAQ,aAAR,MAAA8B,EAAqBe,KACvB7C,EAAO,WAAW6C,CAAI,EAAE,QAAUqK,EAClCnN,GAAYC,CAAM,IAEhB6J,EAAW,cAAgB,SAAWA,EAAW,UAAA,IAAgB,SACnE,MAAMA,EAAW,gBAAgBhH,EAAMqK,CAAO,EAEzC,CAAE,QAAS,EAAA,CACpB,OAASpN,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAEDkK,EAAAA,QAAQ,OAAO,uBAAwB,MAAOmC,EAAQtJ,IAAiB,CACrE,GAAI,CACF,aAAMgH,EAAW,mBAAmBhH,CAAI,EACjC,CAAE,QAAS,EAAA,CACpB,OAAS/C,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAIDkK,UAAQ,OAAO,oBAAqB,IAAM,CACxC,MAAMhK,EAASL,GAAA,EACf,OAAOK,GAAA,YAAAA,EAAQ,eAAgBP,GAAG,QAAA,CACpC,CAAC,EAEDuK,EAAAA,QAAQ,OAAO,oBAAqB,CAACmC,EAAQlM,IAAgB,CAC3D,GAAI,CACF,MAAMD,EAASL,MAAgB,CAAE,OAAQ,CAAE,UAAW,KAAK,EAC3D,OAAAI,GAAY,CAAE,GAAGC,EAAQ,aAAcC,EAAK,EACrC,CAAE,QAAS,EAAA,CACpB,OAASH,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAEDkK,UAAQ,OAAO,qBAAsB,SAAY,CAC/C,MAAMwB,EAAMzB,EAAA,EACNiC,EAAS,MAAMmB,SAAO,eAAe3B,EAAM,CAC/C,WAAY,CAAC,eAAe,EAC5B,MAAO,4BAAA,CACR,EACD,OAAIQ,EAAO,UAAYA,EAAO,UAAU,SAAW,EAAU,KACtDA,EAAO,UAAU,CAAC,CAC3B,CAAC,EAEDhC,EAAAA,QAAQ,OAAO,uBAAwB,CAACmC,EAAQiB,IAAoB,CAClE,GAAI,CAEF,MAAMC,EAAU5N,GAAG,QAAA,EACb6N,EAAc9N,EAAK,QAAQ4N,CAAO,EAClCG,EAAe/N,EAAK,QAAQ6N,CAAO,EACzC,MAAI,CAACC,EAAY,WAAWC,CAAY,GAAKD,IAAgBC,EACpD,CAAA,EAEJ3N,EAAG,WAAW0N,CAAW,EACd1N,EAAG,YAAY0N,EAAa,CAAE,cAAe,GAAM,EAEhE,OAAO/G,GAAK,CAACA,EAAE,KAAK,WAAW,GAAG,CAAC,EACnC,IAAIA,GAAK,CACR,MAAMiH,EAAWhO,EAAK,KAAK8N,EAAa/G,EAAE,IAAI,EACxC9F,EAAOb,EAAG,SAAS4N,CAAQ,EACjC,MAAO,CACL,KAAMjH,EAAE,KACR,KAAMiH,EACN,YAAajH,EAAE,YAAA,EACf,KAAM9F,EAAK,KACX,SAAUA,EAAK,OAAA,CAEnB,CAAC,EAdqC,CAAA,CAe1C,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAAC,EAEDuJ,EAAAA,QAAQ,OAAO,sBAAuB,CAACmC,EAAQ3L,IAAqB,CAClE,GAAI,CAEF,MAAM6M,EAAU5N,GAAG,QAAA,EACbgO,EAAejO,EAAK,QAAQgB,CAAQ,EACpC+M,EAAe/N,EAAK,QAAQ6N,CAAO,EAGzC,MAFI,CAACI,EAAa,WAAWF,CAAY,GAErC,CAAC3N,EAAG,WAAW6N,CAAY,EAAU,KAC5B7N,EAAG,SAAS6N,CAAY,EAE5B,KAAO,IAAM,KAAa,2DAC5B7N,EAAG,aAAa6N,EAAc,OAAO,CAC9C,MAAQ,CACN,OAAO,IACT,CACF,CAAC,EAEDzD,EAAAA,QAAQ,OAAO,0BAA2B,CAACmC,EAAQ3L,IAAqB,CACtEkN,EAAAA,MAAM,iBAAiBlN,CAAQ,CACjC,CAAC,EAIDwJ,EAAAA,QAAQ,OAAO,wBAAyB,MAAOmC,EAAQwB,IAA2B,CAChF,MAAMnC,EAAMzB,EAAA,EACN6D,EAAY,CAAC,MAAO,MAAO,OAAQ,MAAO,OAAQ,KAAK,EACvDC,EAAU,CAAC,MAAO,MAAM,EACxBC,EAAW,CACf,MAAO,KAAM,WAAY,MAAO,MAChC,KAAM,MAAO,KAAM,MAAO,MAAO,MACjC,KAAM,KAAM,KAAM,KAAM,OAAQ,KAAM,QACtC,IAAK,MAAO,KAAM,IAAK,MAAO,KAC9B,MAAO,OAAQ,OAAQ,OACvB,OAAQ,MAAO,MAAO,MACtB,OAAQ,QAAS,OAAQ,MAAO,OAAQ,MAAO,MAAO,OACtD,KAAM,OAAQ,MAAO,MAAO,MAC5B,MAAO,UAAW,QAClB,MAAO,aAAc,WACrB,MAAO,SAAU,QAAS,IAAK,MAAO,OAAA,EASlCC,EAAiC,CACrC,CAAE,KAAM,sBAAuB,WALRJ,EACrB,CAAC,GAAGC,EAAW,GAAGC,EAAS,GAAGC,CAAQ,EACtC,CAAC,GAAGD,EAAS,GAAGC,CAAQ,CAGiB,EAC3C,CAAE,KAAM,YAAa,WAAYD,CAAA,EACjC,CAAE,KAAM,cAAe,WAAYC,CAAA,CAAS,EAE1CH,GACFI,EAAQ,KAAK,CAAE,KAAM,SAAU,WAAYH,EAAW,EAGxD,MAAM5B,EAAS,MAAMmB,SAAO,eAAe3B,EAAM,CAC/C,MAAO,eACP,WAAY,CAAC,WAAY,iBAAiB,EAC1C,QAAAuC,CAAA,CACD,EAED,OAAI/B,EAAO,UAAYA,EAAO,UAAU,SAAW,EAAU,CAAA,EACtDA,EAAO,SAChB,CAAC,EAEDhC,EAAAA,QAAQ,OAAO,0BAA2B,CAACmC,EAAQ3L,IAAqB,CAEtE,MAAM6M,EAAU5N,GAAG,QAAA,EAEnB,GAAI,CADaD,EAAK,QAAQgB,CAAQ,EACxB,WAAWhB,EAAK,QAAQ6N,CAAO,CAAC,EAC5C,MAAO,CAAE,KAAM7N,EAAK,SAASgB,CAAQ,EAAG,SAAU,cAAe,SAAU,GAAI,MAAO,+CAAA,EAGxF,MAAMwL,EAASlF,GAAYtG,CAAQ,EAEnC,GAAIwL,EAAO,WAAa,SAAW,CAACA,EAAO,MAEzC,GAAI,CACF,MAAMhM,EAASL,GAAA,EACTqO,GAAehO,GAAA,YAAAA,EAAQ,eAAgBqN,EACvCY,EAAazO,EAAK,KAAKwO,EAAc,QAAS,SAAS,EAC7DpO,EAAG,UAAUqO,EAAY,CAAE,UAAW,GAAM,EAC5C,MAAMC,EAAW1O,EAAK,KAAKyO,EAAYzO,EAAK,SAASgB,CAAQ,CAAC,EAC9DZ,EAAG,aAAaY,EAAU0N,CAAQ,EAClClC,EAAO,SAAWkC,CACpB,OAASpO,EAAK,CACZkM,EAAO,MAAQ,sCAAsClM,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAC,EACvG,CAGF,OAAOkM,CACT,CAAC,EAEDhC,EAAAA,QAAQ,OAAO,sBAAuB,MAAOmC,EAAQ3L,IAAqB,CACxE,GAAI,CACF,MAAMoG,EAAMpH,EAAK,QAAQgB,CAAQ,EAAE,cAAc,QAAQ,MAAO,EAAE,EAK5DkJ,EAJkC,CACtC,IAAK,YAAa,IAAK,aAAc,KAAM,aAC3C,IAAK,YAAa,KAAM,aAAc,IAAK,WAAA,EAEpB9C,CAAG,GAAK,YAC3BuH,EAASvO,EAAG,aAAaY,CAAQ,EAAE,SAAS,QAAQ,EACpD4N,EAAU,QAAQ1E,CAAQ,WAAWyE,CAAM,GAEjD,MAAO,CAAE,QAAS,GAAM,YADJ,MAAMtE,EAAW,cAAcuE,CAAO,CAClC,CAC1B,OAAStO,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAGDkK,UAAQ,OAAO,kBAAmB,IAAM,QACtClI,EAAAiI,EAAA,IAAA,MAAAjI,EAAa,UACf,CAAC,EAEDkI,UAAQ,OAAO,kBAAmB,IAAM,CACtC,MAAMwB,EAAMzB,EAAA,EACRyB,GAAA,MAAAA,EAAK,cACPA,EAAI,WAAA,EAEJA,GAAA,MAAAA,EAAK,UAET,CAAC,EAEDxB,UAAQ,OAAO,eAAgB,IAAM,QACnClI,EAAAiI,EAAA,IAAA,MAAAjI,EAAa,OACf,CAAC,EAEDkI,UAAQ,OAAO,qBAAsB,IAAM,OACzC,QAAOlI,EAAAiI,EAAA,IAAA,YAAAjI,EAAa,gBAAiB,EACvC,CAAC,EAGDkI,EAAAA,QAAQ,OAAO,oBAAqB,MAAOmC,EAAQ/G,EAAgByG,IAAiC,CAClG,MAAML,EAAMzB,EAAA,EACZ,GAAI,CACF,GAAI,CAACD,EAAW,UAAW,CACzB,MAAM9J,EAASL,GAAA,EACTqO,GAAgBhO,GAAA,YAAAA,EAAoC,eACrDP,GAAG,QAAA,EACR,MAAMqK,EAAW,WAAWkE,CAAY,CAC1C,CAMA,MAAO,CAAE,QAAS,GAAM,GAJT,MAAMlE,EAAW,KAAK1E,EAASuG,GAAU,CACtDH,GAAA,MAAAA,EAAK,YAAY,KAAK,gBAAiBG,EACzC,EAAGE,CAAI,CAEoB,CAC7B,OAAS/L,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAGDkK,UAAQ,OAAO,oBAAqB,KAClCF,EAAW,KAAA,EACJ,CAAE,QAAS,EAAA,EACnB,EAGDE,UAAQ,OAAO,qBAAsB,SAAY,CAC/C,GAAI,CACF,aAAMF,EAAW,QAAA,EACV,CAAE,QAAS,EAAA,CACpB,OAAShK,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAGDkK,EAAAA,QAAQ,OAAO,cAAe,CAACmC,EAAQlM,IAAgB,CACrD,GAAI,CACFoO,OAAAA,gBAAa,MAAO,CAAC,YAAa,uBAAuB,EAAG,CAAE,IAAKpO,EAAK,QAAS,IAAM,EAChF,EACT,MAAQ,CACN,MAAO,EACT,CACF,CAAC,EAGD+J,EAAAA,QAAQ,OAAO,aAAc,CAACmC,EAAQlM,IAAgB,CACpD,GAAI,CAEF,OADeoO,GAAAA,aAAa,MAAO,CAAC,SAAU,aAAa,EAAG,CAAE,IAAKpO,EAAK,QAAS,GAAA,CAAM,EAAE,SAAA,EAExF,MAAM;AAAA,CAAI,EACV,OAAO,OAAO,EACd,IAAIoG,IAAS,CACZ,OAAQA,EAAK,MAAM,EAAG,CAAC,EAAE,KAAA,EACzB,KAAMA,EAAK,MAAM,CAAC,EAAE,KAAA,CAAK,EACzB,CACN,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAAC,EAID2D,EAAAA,QAAQ,OAAO,gBAAiB,CAACmC,EAAQlM,EAAaqO,EAAc/C,IAAoB,CACtF,GAAI,CAEF,GAAIA,IAAW,KAAM,CACnB,MAAMiC,EAAWhO,EAAK,KAAKS,EAAKqO,CAAI,EACpC,GAAI,CAEF,MAAMlI,EADUxG,EAAG,aAAa4N,EAAU,OAAO,EAC3B,MAAM;AAAA,CAAI,EAC5BpH,EAAMA,EAAM,OAAS,CAAC,IAAM,MAAU,IAAA,EAC1C,MAAMnC,EAAOmC,EAAM,IAAI7C,GAAK,IAAIA,CAAC,EAAE,EAAE,KAAK;AAAA,CAAI,EAC9C,MAAO;AAAA,QAAwB+K,CAAI;AAAA,aAAgBlI,EAAM,MAAM;AAAA,EAAQnC,CAAI,EAC7E,MAAQ,CACN,OAAO,IACT,CACF,CAGA,GAAIsH,IAAW,IACb,GAAI,CACF,MAAMgD,EAAOF,GAAAA,aAAa,MAAO,CAAC,OAAQ,WAAY,KAAMC,CAAI,EAAG,CAAE,IAAKrO,EAAK,QAAS,GAAA,CAAM,EAAE,SAAA,EAChG,GAAIsO,EAAK,KAAA,EAAQ,OAAOA,CAC1B,MAAQ,CAAC,CAIX,GAAI,CACF,MAAMA,EAAOF,GAAAA,aAAa,MAAO,CAAC,OAAQ,OAAQ,KAAMC,CAAI,EAAG,CAAE,IAAKrO,EAAK,QAAS,GAAA,CAAM,EAAE,SAAA,EAC5F,GAAIsO,EAAK,KAAA,EAAQ,OAAOA,CAC1B,MAAQ,CAAC,CAGT,GAAI,CACF,MAAMA,EAAOF,GAAAA,aAAa,MAAO,CAAC,OAAQ,WAAY,KAAMC,CAAI,EAAG,CAAE,IAAKrO,EAAK,QAAS,GAAA,CAAM,EAAE,SAAA,EAChG,GAAIsO,EAAK,KAAA,EAAQ,OAAOA,CAC1B,MAAQ,CAAC,CAGT,GAAI,CACF,MAAMA,EAAOF,GAAAA,aAAa,MAAO,CAAC,OAAQ,KAAMC,CAAI,EAAG,CAAE,IAAKrO,EAAK,QAAS,GAAA,CAAM,EAAE,SAAA,EACpF,GAAIsO,EAAK,KAAA,EAAQ,OAAOA,CAC1B,MAAQ,CAAC,CAET,OAAO,IACT,MAAQ,CACN,OAAO,IACT,CACF,CAAC,EAGDvE,EAAAA,QAAQ,OAAO,gBAAiB,CAACmC,EAAQlM,IAAgB,CACvD,GAAI,CACFoO,OAAAA,gBAAa,MAAO,CAAC,MAAM,EAAG,CAAE,IAAKpO,EAAK,QAAS,IAAO,EACnD,CAAE,QAAS,EAAA,CACpB,OAASH,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAGDkK,EAAAA,QAAQ,OAAO,kBAAmB,CAACmC,EAAQlM,IAAgB,CACzD,GAAI,CACF,MAAMuO,EAASH,GAAAA,aAAa,MAAO,CAAC,YAAa,eAAgB,MAAM,EACrE,CAAE,IAAKpO,EAAK,QAAS,GAAA,CAAK,EAAG,SAAA,EAAW,KAAA,EAE1C,IAAIwO,EAAQ,EAAGC,EAAS,EACxB,GAAI,CACF,MAAMC,EAAWN,GAAAA,aACf,MAAO,CAAC,YAAa,eAAgB,uBAAwB,MAAM,EACnE,CAAE,IAAKpO,EAAK,QAAS,GAAA,CAAK,EAC1B,SAAA,EAAW,KAAA,EACb,GAAI0O,EAAU,CACZ,MAAMC,EAAKP,GAAAA,aACT,MAAO,CAAC,WAAY,eAAgB,UAAW,GAAGM,CAAQ,SAAS,EACnE,CAAE,IAAK1O,EAAK,QAAS,GAAA,CAAK,EAC1B,SAAA,EAAW,OAAO,MAAM,GAAI,EAC9ByO,EAAS,SAASE,EAAG,CAAC,CAAC,GAAK,EAC5BH,EAAQ,SAASG,EAAG,CAAC,CAAC,GAAK,CAC7B,CACF,MAAQ,CAA2C,CAEnD,MAAO,CAAE,OAAAJ,EAAQ,MAAAC,EAAO,OAAAC,CAAA,CAC1B,MAAQ,CACN,OAAO,IACT,CACF,CAAC,EAGD1E,EAAAA,QAAQ,OAAO,YAAa,MAAOmC,EAAQlM,EAAa4O,EAAuBhD,IAAyD,CACtI,GAAI,CACF,aAAM/B,EAAW,WAAW7J,EAAK4O,EAAYhD,CAAI,EAC1C,CAAE,QAAS,EAAA,CACpB,OAAS/L,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAGDkK,UAAQ,OAAO,yBAA0B,IAAM,CAC7C,GAAI,CACF,MAAMhK,EAASL,GAAA,EACTmP,GAAW9O,GAAA,YAAAA,EAAoC,aAAyD,CAAA,EAC9G,OAAO,OAAO,QAAQ8O,CAAO,EAAE,IAAI,CAAC,CAACjM,EAAMiI,CAAG,KAAO,CACnD,KAAAjI,EACA,QAAUiI,EAAI,SAAW,GACzB,SAAUA,EAAI,WAAa,GAC3B,QAAUA,EAAI,SAAW,GACzB,IAAKA,EAAI,GAAA,EACT,CACJ,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAAC,EAGDd,UAAQ,OAAO,2BAA4B,IAClCF,EAAW,kBAAA,CACnB,EAGD,MAAMiF,EAAsBvP,EAAK,KAAKC,GAAG,QAAA,EAAW,QAAS,2BAA2B,EAExF,SAASuP,GAA8C,CACrD,GAAI,CACF,GAAIpP,EAAG,WAAWmP,CAAmB,EACnC,OAAO,KAAK,MAAMnP,EAAG,aAAamP,EAAqB,OAAO,CAAC,CAEnE,MAAQ,CAAC,CACT,MAAO,CAAA,CACT,CAEA/E,EAAAA,QAAQ,OAAO,yBAA0B,CAACmC,EAAQ8C,IACzCD,EAAA,EAAoBC,CAAM,GAAK,CAAA,CACvC,EAEDjF,EAAAA,QAAQ,OAAO,yBAA0B,CAACmC,EAAQ8C,EAAgBH,IAAsB,CACtF,GAAI,CACF,MAAM3K,EAAO6K,EAAA,EACb,OAAA7K,EAAK8K,CAAM,EAAIH,EACflP,EAAG,UAAUJ,EAAK,QAAQuP,CAAmB,EAAG,CAAE,UAAW,GAAM,EACnEnP,EAAG,cAAcmP,EAAqB,KAAK,UAAU5K,EAAM,KAAM,CAAC,CAAC,EAC5D,CAAE,QAAS,EAAA,CACpB,OAASrE,EAAK,CACZ,MAAO,CAAE,QAAS,GAAO,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,EAGDkK,UAAQ,OAAO,gBAAiB,IAAM,CACpC,MAAMhK,EAASL,GAAA,EACf,OAAQK,GAAA,YAAAA,EAAoC,gBAA2B,EACzE,CAAC,EAIDgK,EAAAA,QAAQ,OAAO,gBAAiB,CAACmC,EAAQzJ,IAAoB,CAC3D,MAAM1C,EAASL,MAAgB,CAAE,OAAQ,CAAE,UAAW,KAAK,EAC3D,OAAAI,GAAY,CAAE,GAAGC,EAAQ,cAAe0C,EAA8C,EAEtFD,GAAeC,GAAW,MAAS,EAC5B,CAAE,QAAS,EAAA,CACpB,CAAC,EAIDsH,EAAAA,QAAQ,OAAO,gBAAiB,MAAOmC,EAAQ7H,EAAeC,IAAqB,CACjF,GAAI,CACF,MAAM2K,EAAO,MAAM7K,GAAYC,EAAOC,CAAQ,EAC9C,MAAO,CAAE,OAAQ2K,EAAK,OAAQ,MAAOA,EAAK,KAAA,CAC5C,OAASpP,EAAK,CACZ,MAAO,CAAE,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjE,CACF,CAAC,EAEDkK,EAAAA,QAAQ,OAAO,gBAAiB,MAAOmC,EAAQ7H,EAAeC,IAAqB,CACjF,GAAI,CACF,MAAM2K,EAAO,MAAM1K,GAAYF,EAAOC,CAAQ,EAC9C,MAAO,CAAE,OAAQ2K,EAAK,OAAQ,MAAOA,EAAK,KAAA,CAC5C,OAASpP,EAAK,CACZ,MAAO,CAAE,MAAOA,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjE,CACF,CAAC,EAEDkK,UAAQ,OAAO,iBAAkB,SAAY,CAC3CL,GAAY,WAAA,CACd,CAAC,EAEDK,EAAAA,QAAQ,OAAO,aAAc,MAAOmC,EAAQxH,EAAgBC,IAAsB,CAChF+E,GAAY,UAAA,EACZ,GAAI,CACF,aAAMjF,GAAiBC,EAAQC,CAAS,EACxC+E,GAAY,UAAUhF,EAAQC,CAAS,EAChC,CAAE,QAAS,EAAA,CACpB,OAAS9E,EAAK,CACZ,OAAA6J,GAAY,WAAA,EACL,CAAE,QAAS,GAAO,MAAO7J,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,CAAA,CACjF,CACF,CAAC,CACH,CCp5BA,IAAIqP,GAA6B,KAEjC,SAASC,GAAiB1M,EAAyC,CACjE,MAAM2M,EAAQ,2BAA2B,KAAK3M,CAAO,EACrD,GAAI,CAAC2M,EAAO,MAAO,CAAA,EACnB,MAAMrD,EAAiC,CAAA,EACvC,UAAW3F,KAAQgJ,EAAM,CAAC,EAAE,MAAM;AAAA,CAAI,EAAG,CACvC,MAAMC,EAAQjJ,EAAK,QAAQ,GAAG,EAC9B,GAAIiJ,IAAU,GAAI,SAClB,MAAMC,EAAMlJ,EAAK,MAAM,EAAGiJ,CAAK,EAAE,KAAA,EAC3BnJ,EAAQE,EAAK,MAAMiJ,EAAQ,CAAC,EAAE,OAAO,QAAQ,eAAgB,EAAE,EACjEC,IAAKvD,EAAOuD,CAAG,EAAIpJ,EACzB,CACA,OAAO6F,CACT,CAEA,eAAsBwD,IAAmC,CACvD,GAAIL,KAAe,KAAM,OAAOA,GAEhC,MAAMM,EAAa,CACjBjQ,EAAK,KAAKC,GAAG,QAAA,EAAW,UAAW,QAAQ,EAC3CD,EAAK,KAAKC,GAAG,QAAA,EAAW,QAAS,QAAQ,CAAA,EAGrCiQ,EAAkB,CAAA,EAExB,UAAWzP,KAAOwP,EAAY,CAC5B,GAAI,CAAC7P,EAAG,WAAWK,CAAG,EAAG,SACzB,IAAIgD,EACJ,GAAI,CACFA,EAAUrD,EAAG,YAAYK,EAAK,CAAE,cAAe,GAAM,CACvD,MAAQ,CACN,QACF,CACA,UAAWiD,KAASD,EAAS,CAC3B,GAAI,CAACC,EAAM,cAAe,SAC1B,MAAMyM,EAAWnQ,EAAK,KAAKS,EAAKiD,EAAM,IAAI,EACpC0M,EAAcpQ,EAAK,KAAKmQ,EAAU,UAAU,EAClD,GAAK/P,EAAG,WAAWgQ,CAAW,EAC9B,GAAI,CACF,MAAMlN,EAAU9C,EAAG,aAAagQ,EAAa,OAAO,EAC9CC,EAAKT,GAAiB1M,CAAO,EAC7BG,EAAOgN,EAAG,MAAQ3M,EAAM,KACxB4M,EAAcD,EAAG,aAAe,GACtCH,EAAO,KAAK,CAAE,KAAA7M,EAAM,YAAAiN,EAAa,IAAKH,EAAU,CAClD,MAAQ,CAER,CACF,CACF,CAEA,OAAAR,GAAaO,EACNA,CACT,CAEA,eAAsBK,GACpBC,EACAN,EACAO,EACiB,CACjB,MAAMC,EAAe,oIAEfC,EAAYT,EAAO,OAAS,EAC9BA,EAAO,IAAIzH,GAAK,KAAKA,EAAE,IAAI,KAAKA,EAAE,GAAG,MAAMA,EAAE,WAAW,EAAE,EAAE,KAAK;AAAA,CAAI,EACrE,mBAEEmI,EAAU;AAAA,EAAUJ,CAAU;AAAA;AAAA;AAAA,EAA0BG,CAAS;AAAA;AAAA;AAAA,wIAEvE,IAAIE,EAAaL,EACjB,MAAMM,EAA2B,CAAA,EAEjC,GAAI,CACF,MAAMzQ,EAAM,MAAMoQ,EAAUC,EAAcE,CAAO,EACjD,GAAIvQ,EAAK,CACP,MAAM0Q,EAAU1Q,EAAI,KAAA,EAAO,QAAQ,uBAAwB,EAAE,EACvD2Q,EAAS,KAAK,MAAMD,CAAO,EAK7B,OAAOC,EAAO,mBAAsB,UAAYA,EAAO,oBACzDH,EAAaG,EAAO,mBAElB,MAAM,QAAQA,EAAO,eAAe,GACtCF,EAAe,KAAK,GAAGE,EAAO,gBAAgB,OAAQvI,GAAmB,OAAOA,GAAM,QAAQ,CAAC,CAEnG,CACF,MAAQ,CAER,CAEA,GAAIqI,EAAe,OAAS,EAAG,CAC7B,MAAMG,EAAUH,EACb,IAAIzN,GAAQ6M,EAAO,KAAKzH,GAAKA,EAAE,OAASpF,CAAI,CAAC,EAC7C,OAAQoF,GAAkBA,IAAM,MAAS,EAE5C,GAAIwI,EAAQ,OAAS,EAAG,CACtB,MAAMC,EAAaD,EAChB,IAAIxI,GAAK,KAAKA,EAAE,IAAI,KAAKA,EAAE,GAAG;AAAA,+DAAkE,EAChG,KAAK;AAAA,CAAI,EACZoI,EAAa,GAAGA,CAAU;AAAA;AAAA;AAAA,EAAqCK,CAAU,EAC3E,CACF,CAEA,OAAOL,CACT,CAEA,eAAsBM,GACpBC,EACAC,EACAZ,EACqD,CACrD,MAAMC,EAAe,mHACfE,EAAU;AAAA,EAAsBQ,CAAc;AAAA;AAAA;AAAA,EAAgCC,EAAc,MAAM,EAAG,IAAI,CAAC;AAAA;AAAA;AAAA,sFAEhH,GAAI,CACF,MAAMhR,EAAM,MAAMoQ,EAAUC,EAAcE,CAAO,EACjD,GAAIvQ,EAAK,CACP,MAAM0Q,EAAU1Q,EAAI,KAAA,EAAO,QAAQ,uBAAwB,EAAE,EACvD2Q,EAAS,KAAK,MAAMD,CAAO,EACjC,MAAO,CACL,UAAWC,EAAO,YAAc,GAChC,WAAY,OAAOA,EAAO,YAAe,SAAWA,EAAO,WAAa,EAAA,CAE5E,CACF,MAAQ,CAER,CAEA,MAAO,CAAE,UAAW,GAAM,WAAY,EAAA,CACxC,CAEA,MAAMM,GAAe,EAErB,eAAsBC,GACpBf,EACAC,EACAe,EACY,CACZ,MAAMtB,EAAS,MAAMF,GAAA,EACfyB,EAAiB,MAAMlB,GAAgBC,EAAYN,EAAQO,CAAS,EAE1E,IAAIiB,EAAgBD,EAChBE,EAAuB,KAE3B,QAASC,EAAU,EAAGA,GAAWN,KAC/BK,EAAa,MAAMH,EAAQE,CAAa,EAEpCE,IAAYN,IAH6BM,IAAW,CAKxD,MAAMC,EAAa,MAAMV,GAASX,EAAYmB,EAAW,QAASlB,CAAS,EAC3E,GAAIoB,EAAW,UAAW,MAE1B,MAAMC,EAAcH,EAAW,QAAQ,MAAM,EAAG,GAAG,EACnDD,EAAgB,GAAGD,CAAc;AAAA;AAAA,6BAAkCK,CAAW;AAAA;AAAA,6BAAmCD,EAAW,UAAU,GACxI,CAEA,OAAOF,CACT,CCpJA,SAASI,IAAmC,CAC1C,GAAI,CACF,MAAMlH,EAAU5G,YAAS,cAAe,CAAE,QAAS,IAAM,EAAE,SAAA,EAAW,KAAA,EAChE6G,EAAU9K,EAAK,KAAK6K,EAAS,YAAa,cAAc,EAC9D,GAAIzK,EAAG,WAAW0K,CAAO,EAAG,CAE1B,MAAMkH,EADM,KAAK,MAAM5R,EAAG,aAAa0K,EAAS,OAAO,CAAC,EACvC,MAAQ,gBACzB,OAAO9K,EAAK,KAAK6K,EAAS,YAAamH,CAAI,CAC7C,CACF,MAAQ,CAAC,CAET,MAAMjH,EAAQ/K,EAAK,KAAKC,GAAG,QAAA,EAAW,cAAe,MAAO,eAAgB,YAAa,OAAQ,UAAU,EAC3G,GAAIG,EAAG,WAAW2K,CAAK,EAAG,OAAOA,EAEjC,MAAM,IAAI,MAAM,gEAAgE,CAClF,CAIA,MAAMkH,GAAS,4EAER,SAASC,GAAarL,EAAmC,CAC9D,MAAMxF,EAAI4Q,GAAO,KAAKpL,EAAK,MAAM,EACjC,OAAKxF,EACE,CACL,UAAWA,EAAE,CAAC,EACd,MAAOA,EAAE,CAAC,EAAE,YAAA,EACZ,IAAKA,EAAE,CAAC,EACR,QAASA,EAAE,CAAC,CAAA,EALC,IAOjB,CAEO,MAAM8Q,WAAmBC,GAAAA,YAAa,CAAtC,kCACG7M,GAAA,aAAiB,MACjBA,GAAA,oBAAwB,MACxBA,GAAA,iBAAqB,MACrBA,GAAA,2BAA+B,MAC/BA,GAAA,kBAAsB,MACtBA,GAAA,aAAQ,IACRA,GAAA,eAAU,IACVA,GAAA,qBAAgB,IAExB,SAAmB,CACjB,OAAO,KAAK,KACd,CAEA,mBAAmC,CACjC,OAAK,KAAK,oBACF,KAAK,oBAAgD,uBAAmC,KAD1D,IAExC,CAEA,MAAM,WAAWiJ,EAAsB6D,EAA2BhG,EAAqE,SACrI,KAAK,SAAUA,GAAA,YAAAA,EAAM,UAAW,GAChC,KAAK,eAAgBA,GAAA,YAAAA,EAAM,gBAAiB,GAE5C,MAAM3I,EAAQqO,GAAA,EACd,QAAQ,IAAI,wCAAwCrO,CAAK,EAAE,EAE3D,MAAM4O,EAAO,MAAM,OAAOC,GAAAA,cAAc7O,CAAK,EAAE,MAEzC,CACJ,cAAA8O,EACA,kBAAAC,EACA,iBAAAC,EACA,oBAAAC,EACA,UAAAC,EACA,iBAAAC,EACA,mBAAAC,EACA,oBAAAC,CAAA,EACET,EAGFE,EAA6C,eAAA,EAE/C,MAAMQ,EAAmBR,EAEtB,kBAAA,EAIGS,EADcH,EACe,CACjC,SAAUE,EAAgB,SAC1B,OAAQA,EAAgB,OACxB,MAAOA,EAAgB,aACvB,KAAM,YACN,iBAAkBA,EAAgB,gBAAA,CACnC,EAEKE,EAAoBT,EAC1B,KAAK,aAAe,IAAIS,EAAkB,CAAE,eAAAD,EAAgB,EAG5D,KAAM,CAAE,KAAME,CAAA,EAAkBlQ,IAC7BX,EAAAnC,OAAA,YAAAmC,EAA0C,aAAA,EAEvC8Q,EAAUV,EAChB,KAAK,UAAY,IAAIU,EAAQ,CAAE,aAAA5E,EAAc,cAAA2E,EAAe,EAC5D,MAAO,KAAK,UAA8C,WAAA,EAI1D,MAAME,GAAkB,MADDN,EACO,EACxBO,EAAmBX,EACzB,KAAK,oBAAsB,IAAIW,EAAiBD,GAAiB,KAAK,YAAY,EAGlF,KAAK,WAAa,KAClB,MAAME,GAAiBlB,GAAkBA,EAAe,OAAS,EAAIA,EAAiB,KACtF,GAAIkB,IAAkBV,EAAkB,CACtC,MAAMW,EAAWX,EACXY,EAAM,IAAID,EACVnG,IAAcL,EAAA7M,OAAA,YAAA6M,EAA0C,aAAyC,CAAA,EACjG0G,EAA2C,CAAA,EACjD,UAAWrQ,KAAQkQ,GACblG,EAAWhK,CAAI,MAAmBA,CAAI,EAAIgK,EAAWhK,CAAI,GAE/D,MAAMoQ,EAAI,WAAWC,CAAe,EACpC,KAAK,WAAaD,EAClB,QAAQ,IAAI,oCAAoCF,GAAe,KAAK,IAAI,CAAC,EAAE,CAC7E,CAGA,MAAMI,EAAaf,EAMnB,KAAK,MAAQ,IAAIe,EAAW,CAC1B,aAAc,KAAK,aACnB,UAAW,KAAK,UAChB,oBAAqB,KAAK,oBAC1B,cAAe,KAAK,cACpB,GAAI,KAAK,YAAcJ,GAAiB,CAAE,WAAY,KAAK,WAAY,eAAgBA,IAAmB,CAAA,CAAC,CAC5G,EAED,KAAK,MAAQ,GACb,QAAQ,IAAI,2CAA2C,KAAK,aAAa,aAAa,KAAK,OAAO,GAAG,CACvG,CAEQ,eAA2B,CACjC,MAAMK,EAAO,KAAK,aAClB,MAAO,OAAOlD,EAAsBF,IAA+C,CACjF,UAAWqD,IAAU,CAAC,WAAY,mBAAoB,WAAY,OAAQ,QAAQ,EAChF,GAAI,OAAOD,EAAKC,CAAM,GAAM,WAC5B,GAAI,CAMF,OAJe,MADHD,EAAKC,CAAM,EAAuF,KAAKD,CAAI,EAC/F,CACtB,CAAE,KAAM,SAAU,QAASlD,CAAA,EAC3B,CAAE,KAAM,OAAQ,QAASF,CAAA,CAAW,CACrC,GACa,SAAW,IAC3B,MAAQ,CAER,CAEF,OAAO,IACT,CACF,CAEA,MAAM,KACJ5K,EACAG,EACAsG,EACwB,CAExB,OADmBA,GAAA,YAAAA,EAAM,UAAW,KAAK,QAEhCyH,GAAYlO,EAAQ,KAAK,cAAA,EAAiBrD,GAAK,KAAK,QAAQA,EAAGwD,CAAK,CAAC,EAEvE,KAAK,QAAQH,EAAQG,CAAK,CACnC,CAEA,MAAc,QACZH,EACAG,EACwB,CACxB,GAAI,CAAC,KAAK,MACR,MAAM,IAAI,MAAM,4BAA4B,EAG9C,MAAMgO,EAAQ,KAAK,MAKbC,EAAkB,QAAQ,OAAO,MAAM,KAAK,QAAQ,MAAM,EAC1DC,EAAkB,QAAQ,OAAO,MAAM,KAAK,QAAQ,MAAM,EAE1DC,EAAavP,GAA8B,CAC/C,MAAMU,EAAO,OAAOV,GAAS,SAAWA,EAAO,OAAO,KAAKA,CAAI,EAAE,SAAA,EACjE,UAAWkC,KAAQxB,EAAK,MAAM;AAAA,CAAI,EAAG,CACnC,MAAM8O,EAAMjC,GAAarL,CAAI,EACzBsN,KAAWA,CAAG,CACpB,CACF,EAGA,QAAQ,OAAO,MAAQ,CAACxP,KAA8ByP,KACpDF,EAAUvP,CAAI,EACPqP,EAAgBrP,EAAM,GAAGyP,CAAI,GAGtC,QAAQ,OAAO,MAAQ,CAACzP,KAA8ByP,KACpDF,EAAUvP,CAAI,EACPsP,EAAgBtP,EAAM,GAAGyP,CAAI,GAGtC,GAAI,CACF,MAAM5H,EAAS,MAAMuH,EAAM,KAAKnO,CAAM,EACtC,MAAO,CACL,QAAS4G,EAAO,QAChB,UAAWA,EAAO,WAAa,CAAA,EAC/B,WAAYA,EAAO,YAAc,CAAA,CAErC,QAAA,CACE,QAAQ,OAAO,MAAQwH,EACvB,QAAQ,OAAO,MAAQC,CACzB,CACF,CAEA,MAAa,CACP,KAAK,OACN,KAAK,MAA2B,KAAA,CAErC,CAEA,MAAM,SAAyB,CAC7B,GAAI,KAAK,MACP,GAAI,CACF,MAAO,KAAK,MAAuC,QAAA,CACrD,OAAS3T,EAAK,CACZ,QAAQ,KAAK,8BAA+BA,CAAG,CACjD,CAEF,GAAI,KAAK,WACP,GAAI,CACF,MAAO,KAAK,WAA4C,QAAA,CAC1D,MAAQ,CAAC,CAEX,KAAK,MAAQ,KACb,KAAK,aAAe,KACpB,KAAK,UAAY,KACjB,KAAK,oBAAsB,KAC3B,KAAK,WAAa,KAClB,KAAK,MAAQ,EACf,CACF,CC1PA,SAASyR,IAAmC,CAE1C,GAAI,CACF,MAAMlH,EAAU5G,YAAS,cAAe,CAAE,QAAS,IAAM,EAAE,SAAA,EAAW,KAAA,EAChE6G,EAAU9K,EAAK,KAAK6K,EAAS,YAAa,cAAc,EAC9D,GAAIzK,EAAG,WAAW0K,CAAO,EAAG,CAE1B,MAAMkH,EADM,KAAK,MAAM5R,EAAG,aAAa0K,EAAS,OAAO,CAAC,EACvC,MAAQ,gBACzB,OAAO9K,EAAK,KAAK6K,EAAS,YAAamH,CAAI,CAC7C,CACF,MAAQ,CAAC,CAGT,GAAI,QAAQ,WAAa,QAAS,CAChC,MAAMqC,EAAgB,CACpBrU,EAAK,KAAK,QAAA,IAAY,SAAW,GAAI,MAAO,eAAgB,YAAa,OAAQ,UAAU,EAC3FA,EAAK,KAAK,QAAA,IAAY,cAAgB,GAAI,MAAO,eAAgB,YAAa,OAAQ,UAAU,EAChG,oEAAA,EAEF,UAAW+K,KAASsJ,EAClB,GAAIjU,EAAG,WAAW2K,CAAK,EAAG,OAAOA,CAErC,CAGA,MAAMA,EAAQ,qEACd,GAAI3K,EAAG,WAAW2K,CAAK,EAAG,OAAOA,EAEjC,MAAM,IAAI,MACR,4FAAA,CAEJ,CAgCO,MAAMuJ,WAAmBlC,GAAAA,YAAa,CAAtC,kCACG7M,GAAA,cAAuB,WACvBA,GAAA,aAAiB,MACjBA,GAAA,oBAAwB,MACxBA,GAAA,kBAAsB,MACtBA,GAAA,iBAAqB,MACrBA,GAAA,2BAA+B,MAC/BA,GAAA,sBAA0B,MAC1BA,GAAA,kBAAsB,MACtBA,GAAA,sBAAgC,MAChCA,GAAA,6BAAuC,MAE/C,WAA0B,CACxB,OAAO,KAAK,MACd,CAEA,0BAA0C,CACxC,OAAO,KAAK,qBACd,CAMA,MAAM,WAAWgP,EAAiC,OAChD,KAAK,UAAU,cAAc,EAE7B,GAAI,CAIF,MAAMC,EAAgBzC,GAAA,EACtB,QAAQ,IAAI,wCAAwCyC,CAAa,EAAE,EAInE,MAAMlC,EAAO,MAAM,OAAOC,GAAAA,cAAciC,CAAa,EAAE,MAEjD,CACJ,cAAAhC,EACA,iBAAAK,EACA,iBAAAH,EACA,oBAAAC,EACA,kBAAAF,EACA,UAAAgC,EACA,mBAAA3B,EACA,SAAA4B,EACA,OAAAC,EACA,oBAAA5B,CAAA,EACET,EAYJ,GAAI,CAAEE,EAAuC,eAC3C,MAAM,IAAI,MAAM,gDAAgD,EAEhEA,EAAuC,eAAA,EAEzC,MAAMQ,EAAmBR,EAAuC,kBAAA,EAG1DoC,EAAoBpC,EAAuC,mBAAA,EAK3DqC,EAAc/B,EACdG,EAAiB4B,EAAY,CACjC,SAAU7B,EAAgB,SAC1B,OAAQA,EAAgB,OACxB,MAAOA,EAAgB,aACvB,KAAM,YACN,iBAAkBA,EAAgB,gBAAA,CACnC,EAED,IAAI8B,EACJ,GAAIF,EACF,GAAI,CACFE,EAAkBD,EAAY,CAC5B,SAAUD,EAAiB,SAC3B,OAAQA,EAAiB,OACzB,MAAOA,EAAiB,aACxB,KAAM,YAAA,CACP,CACH,MAAQ,CACN,QAAQ,KAAK,2EAA2E,CAC1F,CAIF,MAAM1B,EAAoBT,EAC1B,KAAK,aAAe,IAAIS,EAAkB,CAAE,eAAAD,EAAgB,gBAAA6B,EAAiB,EAG7E,MAAMzF,GAAcmD,EAAuC,cAAA,EACrDuC,EAAc9U,GAAG,SAAA,IAAe,QAAU,YAAc,SAGxDoP,GAAuC,aAC1CA,GAAuC,WAAgB,CACtD,QAAS,MACT,KAAM,CAAC,KAAM,0CAA2C0F,CAAW,EACnE,QAAS,EAAA,GAIb,MAAMC,GAAkBnC,EAKxB,KAAK,WAAa,IAAImC,GACtB,MAAO,KAAK,WAET,WAAW3F,EAAU,EAKxB,KAAM,CAAE,KAAM8D,CAAA,EAAkBlQ,IAC7BX,EAAAnC,OAAA,YAAAmC,EAA0C,aAAA,EAGvCkM,EAAe,QAAQ,IAAA,EACvB4E,EAAUV,EAChB,KAAK,UAAY,IAAIU,EAAQ,CAAE,aAAA5E,EAAc,cAAA2E,EAAe,EAC5D,MAAO,KAAK,UAA8C,WAAA,EAI1D,MAAME,EAAkB,MADDN,EACO,EACxBO,EAAmBX,EACzB,KAAK,oBAAsB,IAAIW,EAAiBD,EAAiB,KAAK,YAAY,EAIlF,MAAM4B,EAAcjV,EAAK,QAAQwU,CAAa,EACxCU,EAAelV,EAAK,QAAQiV,CAAW,EACvCE,EAAqBnV,EAAK,KAAKkV,EAAc,OAAQ,WAAY,oBAAoB,EACrF,CAAE,eAAAE,CAAA,EAAmB,MAAM,OAC/B7C,GAAAA,cAAc4C,CAAkB,EAAE,MAMpC,KAAK,eAAiB,IAAIC,EAC1B,MAAO,KAAK,eAA6D,WACvEb,GAAY/B,EAAuC,iBAAA,GAAsB,MAAA,EAI3E,MAAM6C,EAAqB,KAAK,eAE7B,qBAAA,EAEH,SAAW,CAAChS,EAAM7C,CAAM,IAAK,OAAO,QAAQ6U,CAAiB,EAC3D,GAAI,CACF,MAAO,KAAK,WAET,UAAUhS,EAAM7C,CAAM,CAC3B,OAASF,EAAK,CACZ,QAAQ,KAAK,kDAAkD+C,CAAI,KAAM/C,CAAG,CAC9E,CAIF,MAAMqT,EAAac,EAcnB,KAAK,MAAQ,IAAId,EAAW,CAC1B,aAAc,KAAK,aACnB,WAAY,KAAK,WACjB,UAAW,KAAK,UAChB,oBAAqB,KAAK,oBAC1B,eAAgB,KAAK,eACrB,YAAa,GACb,cAAe,GACf,SAAU,GACV,oBAAqB,EAAA,CACtB,EAGD,KAAK,WAAagB,EAElB,KAAK,eAAiBJ,GAAW,KACjC,KAAK,UAAU,OAAO,EACtB,QAAQ,IAAI,uCAAuC,CAErD,OAASjU,EAAK,CACZ,MAAMsE,EAAMtE,aAAe,MAAQA,EAAI,QAAU,OAAOA,CAAG,EAC3D,cAAQ,MAAM,sCAAuCsE,CAAG,EACxD,KAAK,UAAU,QAASA,CAAG,EACrBtE,CACR,CACF,CAEQ,eAA2B,CACjC,MAAMsT,EAAO,KAAK,aAClB,MAAO,OAAOlD,EAAsBF,IAA+C,CACjF,UAAWqD,IAAU,CAAC,WAAY,mBAAoB,WAAY,OAAQ,QAAQ,EAChF,GAAI,OAAOD,EAAKC,CAAM,GAAM,WAC5B,GAAI,CAMF,OAJe,MADHD,EAAKC,CAAM,EAAuF,KAAKD,CAAI,EAC/F,CACtB,CAAE,KAAM,SAAU,QAASlD,CAAA,EAC3B,CAAE,KAAM,OAAQ,QAASF,CAAA,CAAW,CACrC,GACa,SAAW,IAC3B,MAAQ,CAER,CAEF,OAAO,IACT,CACF,CAcQ,WAAWzK,EAAkD,CACnE,MAAMuP,EAAM,KAAK,WACjB,GAAI,CAACA,EAAK,MAAO,IAAM,CAAC,EAExB,MAAMC,EAAO,CAACC,EAAeC,EAAaC,IAAoB,CAC5D,MAAMC,EAAMH,EAAM,YAAA,EAClBzP,EAAM,CACJ,UAAW,IAAI,KAAA,EAAO,YAAA,EACtB,MAAQ4P,IAAQ,QAAUA,IAAQ,QAAUA,EAAM,OAClD,IAAAF,EACA,QAAAC,CAAA,CACD,CACH,EAIA,GAAI,OAAOJ,EAAI,IAAO,WAAY,CAEhC,MAAMM,EAAU,IAAIxB,IAAgB,CAClC,GAAIA,EAAK,QAAU,GAAK,OAAOA,EAAK,CAAC,GAAM,SACzCmB,EAAKnB,EAAK,CAAC,EAAGA,EAAK,CAAC,GAAK,OAAQA,EAAK,CAAC,CAAC,UAC/BA,EAAK,QAAU,GAAK,OAAOA,EAAK,CAAC,GAAM,SAChDmB,EAAK,OAAQ,OAAQnB,EAAK,CAAC,CAAC,UACnBA,EAAK,QAAU,GAAK,OAAOA,EAAK,CAAC,GAAM,SAAU,CAC1D,MAAMrN,EAAIqN,EAAK,CAAC,EAChBmB,EAAK,OAAOxO,EAAE,OAAS,MAAM,EAAG,OAAOA,EAAE,KAAOA,EAAE,MAAQ,MAAM,EAAG,OAAOA,EAAE,SAAWA,EAAE,KAAO,EAAE,CAAC,CACrG,CACF,EACA,GAAI,CACA,OAAAuO,EAAI,GAAwC,MAAOM,CAAO,EACrD,IAAM,CACP,OAAON,EAAI,KAAQ,WAAaA,EAAI,IAAyC,MAAOM,CAAO,EACtF,OAAON,EAAI,gBAAmB,YAAaA,EAAI,eAAoD,MAAOM,CAAO,CAC5H,CACF,MAAQ,CAAC,CACX,CAGA,UAAWC,IAAa,CAAC,eAAgB,aAAc,SAAS,EAAG,CACjE,GAAI,OAAOP,EAAIO,CAAS,GAAM,WAAY,SAC1C,MAAMC,EAAeD,EAAU,QAAQ,MAAO,QAAQ,EAChDE,EAAY,CAEhB,MAAQrS,GAAmC,CACzC6R,EAAK,OAAO7R,EAAM,OAAS,MAAM,EAAG,OAAOA,EAAM,KAAOA,EAAM,MAAQ,MAAM,EAAG,OAAOA,EAAM,SAAWA,EAAM,KAAO,EAAE,CAAC,CACzH,EAGA,IAAMA,GAAmC,CACvC6R,EAAK,OAAO7R,EAAM,OAAS,MAAM,EAAG,OAAOA,EAAM,KAAOA,EAAM,MAAQ,MAAM,EAAG,OAAOA,EAAM,SAAWA,EAAM,KAAO,EAAE,CAAC,CACzH,CAAA,EAEF,GAAI,CACA,OAAA4R,EAAIO,CAAS,EAA2BE,CAAS,EAC5C,IAAM,CACX,GAAI,OAAOT,EAAIQ,CAAY,GAAM,WAC/B,GAAI,CAAGR,EAAIQ,CAAY,EAA2BC,CAAS,CAAE,MAAQ,CAAC,CAE1E,CACF,MAAQ,CAAC,CACX,CAGA,MAAMC,EAAY,QAAQ,OAAO,MAAM,KAAK,QAAQ,MAAM,EAE1D,eAAQ,OAAO,MAAQ,CAACrR,KAA8ByP,IAAgB,CACpE,MAAM/O,EAAO,OAAOV,GAAS,SAAWA,EAAO,OAAO,KAAKA,CAAI,EAAE,SAAA,EACjE,UAAWkC,KAAQxB,EAAK,MAAM;AAAA,CAAI,EAAG,CAEnC,MAAMwL,EAAaqB,GAAarL,CAAI,EACpC,GAAIgK,EAAY,CAAE9K,EAAM8K,CAAU,EAAG,QAAS,CAE9C,MAAMoF,EAAY,yDAAyD,KAAKpP,EAAK,MAAM,EACvFoP,GACFlQ,EAAM,CAAE,UAAW,IAAI,KAAA,EAAO,cAAe,MAAO,OAAQ,IAAK,OAAQ,QAAS,SAASkQ,EAAU,CAAC,CAAC,GAAI,CAE/G,CACA,OAAOD,EAAUrR,EAAM,GAAGyP,CAAI,CAChC,EACO,IAAM,CAAE,QAAQ,OAAO,MAAQ4B,CAAU,CAClD,CAEA,MAAc,QACZpQ,EACAI,EACAD,EACwB,WACxB,MAAMmQ,EAASnQ,EAAQ,KAAK,WAAWA,CAAK,EAAI,KAE1CgO,EAAQ,KAAK,MASnB,IAAIoC,EACJ,GAAI,CACFA,EAAW,MAAMpC,EAAM,KAAKnO,CAAM,CACpC,QAAA,CACEsQ,GAAA,MAAAA,GACF,CAIA,GAAInQ,KAASzD,EAAA6T,EAAS,YAAT,MAAA7T,EAAoB,QAC/B,UAAW8T,KAAQD,EAAS,UAC1BpQ,EAAM,CAAE,UAAW,IAAI,KAAA,EAAO,YAAA,EAAe,MAAO,OAAQ,IAAK,OAAQ,QAAS,SAASqQ,CAAI,GAAI,EAKvG,IAAI3G,EAAwB,KAC5B,GAAI,CACFA,IAAUxC,GAAAD,EAAA,KAAK,qBAEZ,2BAFO,YAAAC,EAAA,KAAAD,KAEyB,IACrC,MAAQ,CAAC,CAET,GAAI,CAACyC,EACH,GAAI,CACFA,EAAS,MAAO,KAAK,MAElB,iBAAA,CACL,MAAQ,CAAC,CAGX,OAAIA,SAAa,sBAAwBA,GAElC,CACL,QAAS0G,EAAS,QAClB,WAAYA,EAAS,WACrB,UAAWA,EAAS,WAAa,CAAA,EACjC,KAAMA,EAAS,KACX,CAAE,SAAUA,EAAS,KAAK,UAAY,CAAA,EAAI,UAAWA,EAAS,KAAK,WACnE,KACJ,WAAY,KAAK,IAAA,EAAQnQ,EACzB,eAAgB,KAAK,uBAAyB,MAAA,CAElD,CASA,MAAM,KACJJ,EACAC,EACAwG,EACAtG,EACwB,CACxB,GAAI,CAAC,KAAK,MACR,MAAM,IAAI,MAAM,sDAAsD,EAExE,GAAI,KAAK,SAAW,OAClB,MAAM,IAAI,MAAM,wCAAwC,EAG1D,KAAK,UAAU,MAAM,EACrB,MAAMC,EAAY,KAAK,IAAA,EAEvBH,EAAQ,UAAU,EAClB,MAAMwQ,EAAiB,WAAW,IAAMxQ,EAAQ,WAAW,EAAG,GAAI,EAC5DyQ,EAAoB,WAAW,IAAMzQ,EAAQ,cAAc,EAAG,GAAK,EAEzE,GAAI,CACF,IAAI2G,EAEJ,OAAIH,GAAA,MAAAA,EAAM,QACRG,EAAS,MAAMsH,GAAYlO,EAAQ,KAAK,cAAA,EAAiBrD,GAAK,KAAK,QAAQA,EAAGyD,EAAWD,CAAK,CAAC,EAE/FyG,EAAS,MAAM,KAAK,QAAQ5G,EAAQI,EAAWD,CAAK,EAGtD,aAAasQ,CAAc,EAC3B,aAAaC,CAAiB,EAC9BzQ,EAAQ,MAAM,EACd,KAAK,UAAU,OAAO,EACf2G,CACT,OAASlM,EAAK,CACZ,mBAAa+V,CAAc,EAC3B,aAAaC,CAAiB,EAC9B,KAAK,UAAU,OAAO,EAChBhW,CACR,CACF,CAMA,MAAM,iBAAiBsM,EAA2B,CAChD,GAAI,CAAC,KAAK,MACR,MAAM,IAAI,MAAM,sDAAsD,EAExE,MAAO,KAAK,MAA0D,iBAAiBA,CAAE,EACzF,KAAK,sBAAwBA,EAC7B,QAAQ,IAAI,qCAAqCA,CAAE,EAAE,CACvD,CAKA,MAAM,cAAc2H,EAAgC,CAC9C,KAAK,OACP,MAAM,KAAK,QAAA,EAEb,MAAM,KAAK,WAAWA,CAAO,CAC/B,CAKA,mBAA0B,CACpB,KAAK,OACL,KAAK,MAAwC,kBAAA,EAEjD,KAAK,sBAAwB,IAC/B,CAOA,aAA4E,SAC1E,GAAI,CAAC,KAAK,WAAY,MAAO,CAAA,EAC7B,GAAI,CACF,MAAMgC,IAAYvJ,GAAA1K,EAAA,KAAK,YAEpB,cAFe,YAAA0K,EAAA,KAAA1K,KAEI,CAAA,EAEhBkU,EAAwE,CAAA,EAC9E,UAAWJ,KAAQG,EAAU,CAE3B,MAAMzO,EAAQsO,EAAK,KAAK,MAAM,IAAI,EAC5BK,EAAa3O,EAAM,OAAS,EAAIA,EAAM,CAAC,EAAI,UAC3C4O,EAAW5O,EAAM,OAAS,EAAIA,EAAM,MAAM,CAAC,EAAE,KAAK,IAAI,EAAIsO,EAAK,KAChEI,EAAQC,CAAU,IAAGD,EAAQC,CAAU,EAAI,CAAA,GAChDD,EAAQC,CAAU,EAAE,KAAK,CAAE,KAAMC,EAAU,YAAaN,EAAK,aAAe,GAAI,CAClF,CACA,OAAOI,CACT,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAMA,MAAM,aAAanT,EAAc7C,EAAgC,CAC/D,GAAI,CAAC,KAAK,WAAY,MAAM,IAAI,MAAM,6BAA6B,EACnE,MAAO,KAAK,WAET,UAAU6C,EAAM7C,CAAM,CAC3B,CAMA,MAAM,gBAAgB6C,EAA6B,CACjD,GAAI,CAAC,KAAK,WAAY,MAAM,IAAI,MAAM,6BAA6B,EACnE,MAAMsT,EAAU,KAAK,WAIjBA,EAAQ,aACV,MAAMA,EAAQ,aAAatT,CAAI,EACtBsT,EAAQ,eACjB,MAAMA,EAAQ,cAActT,CAAI,CAEpC,CAKA,oBAAuH,SACrH,GAAI,CAAC,KAAK,WAAY,MAAO,CAAA,EAC7B,GAAI,CAIF,SAHkB2J,GAAA1K,EAAA,KAAK,YAEpB,kBAFe,YAAA0K,EAAA,KAAA1K,KAEQ,CAAA,GACV,IAAI,IAAM,CACxB,GAAG,EACH,MAAQ,EAA8B,OAChC,EAA8B,SAAA,EACpC,CACJ,MAAQ,CACN,MAAO,CAAA,CACT,CACF,CAMA,MAAM,mBAAmBe,EAA6B,WACpD,GAAI,CAAC,KAAK,WAAY,MAAM,IAAI,MAAM,6BAA6B,EACnE,MAAMsT,EAAU,KAAK,WAGrB,GAAI,OAAOA,EAAQ,iBAAoB,WAAY,CACjD,MAAOA,EAAQ,gBAAiDtT,CAAI,EACpE,MACF,CAKA,GAAI,CAFa,KAAK,mBAAA,EACD,KAAKoF,GAAKA,EAAE,OAASpF,CAAI,EACpC,MAAM,IAAI,MAAM,eAAeA,CAAI,aAAa,EAE1D,MAAMuT,IAAc3J,GAAAD,GAAA1K,EAAA,KAAK,YAEtB,kBAFiB,YAAA0K,EAAA,KAAA1K,KAAA,YAAA2K,EAEI,KAAMxE,GAAMA,EAAE,OAASpF,KAAS,CAAA,EAExD,MAAM,KAAK,gBAAgBA,CAAI,EAC/B,MAAM7C,EAAUoW,EAAW,KAAO,KAC9B,CAAE,KAAM,OAAiB,IAAKA,EAAW,IAAe,IAAKA,EAAW,IAA2C,QAAS,EAAA,EAC5H,CAAE,KAAM,QAAkB,QAASA,EAAW,QAAmB,KAAMA,EAAW,KAA8B,IAAKA,EAAW,IAA2C,QAAS,EAAA,EACxL,MAAM,KAAK,aAAavT,EAAM7C,CAAM,CACtC,CAMA,MAAM,gBAAgB6C,EAAcqK,EAAiC,CACnE,GAAI,CAAC,KAAK,WAAY,MAAM,IAAI,MAAM,6BAA6B,EACnE,MAAMiJ,EAAU,KAAK,WAIjBjJ,GAAWiJ,EAAQ,aACrB,MAAMA,EAAQ,aAAatT,CAAI,EACtB,CAACqK,GAAWiJ,EAAQ,eAC7B,MAAMA,EAAQ,cAActT,CAAI,CAEpC,CAOA,MAAM,cAAcwT,EAAwC,OAC1D,GAAI,CAAC,KAAK,aACR,MAAM,IAAI,MAAM,sDAAsD,EAGxE,MAAMrW,EAASL,GAAA,EACf,GAAI,GAACmC,EAAA9B,GAAA,YAAAA,EAAQ,SAAR,MAAA8B,EAAgB,YACnB,MAAM,IAAI,MAAM,6EAA6E,EAiB/F,OAViB,MAJI,KAAK,aAIU,KAAK,CACvC,SAAU,CAAC,CACT,KAAM,OACN,QAAS,CACP,CAAE,KAAM,YAAa,UAAW,CAAE,IAAKuU,EAAc,EACrD,CAAE,KAAM,OAAQ,KAAM,iHAAA,CAAkH,CAC1I,CACD,CAAA,CACF,GAEe,OAClB,CAKA,MAAM,SAAyB,CAC7B,GAAI,CACE,KAAK,QACP,MAAO,KAAK,MAAuC,QAAA,EACnD,KAAK,MAAQ,MAEX,KAAK,aACP,MAAO,KAAK,WAA4C,QAAA,EACxD,KAAK,WAAa,KAEtB,OAASvW,EAAK,CACZ,QAAQ,KAAK,8BAA+BA,CAAG,CACjD,CACA,KAAK,aAAe,KACpB,KAAK,UAAY,KACjB,KAAK,oBAAsB,KAC3B,KAAK,eAAiB,KACtB,KAAK,sBAAwB,KAC7B,KAAK,UAAU,SAAS,CAC1B,CAEA,MAAa,CACP,KAAK,OACN,KAAK,MAA2B,KAAA,CAErC,CAEQ,UAAUyL,EAAsB+K,EAAgB,CACtD,KAAK,OAAS/K,EACd,KAAK,KAAK,iBAAkBA,EAAQ,CAAE,MAAA+K,EAAO,CAC/C,CACF,qICruBAC,GAAA,aAAuB,SAAUC,EAAI,CACnC,OAAO,OAAO,eAAe,YAAa5C,EAAM,CAC9C,GAAI,OAAOA,EAAKA,EAAK,OAAS,CAAC,GAAM,WAAY4C,EAAG,MAAM,KAAM5C,CAAI,MAElE,QAAO,IAAI,QAAQ,CAAC5O,EAASC,IAAW,CACtC2O,EAAK,KAAK,CAAC9T,EAAKoE,IAASpE,GAAO,KAAQmF,EAAOnF,CAAG,EAAIkF,EAAQd,CAAG,CAAC,EAClEsS,EAAG,MAAM,KAAM5C,CAAI,CAC3B,CAAO,CAEP,EAAK,OAAQ,CAAE,MAAO4C,EAAG,IAAI,CAAE,CAC/B,EAEAD,GAAA,YAAsB,SAAUC,EAAI,CAClC,OAAO,OAAO,eAAe,YAAa5C,EAAM,CAC9C,MAAM6C,EAAK7C,EAAKA,EAAK,OAAS,CAAC,EAC/B,GAAI,OAAO6C,GAAO,WAAY,OAAOD,EAAG,MAAM,KAAM5C,CAAI,EAEtDA,EAAK,IAAG,EACR4C,EAAG,MAAM,KAAM5C,CAAI,EAAE,KAAKnK,GAAKgN,EAAG,KAAMhN,CAAC,EAAGgN,CAAE,CAEpD,EAAK,OAAQ,CAAE,MAAOD,EAAG,IAAI,CAAE,CAC/B,ECvBA,IAAIE,GAAYC,GAEZC,GAAU,QAAQ,IAClBC,GAAM,KAENC,GAAW,QAAA,IAAY,sBAAwB,QAAQ,SAE3D,QAAQ,IAAM,UAAW,CACvB,OAAKD,KACHA,GAAMD,GAAQ,KAAK,OAAO,GACrBC,EACT,EACA,GAAI,CACF,QAAQ,IAAA,CACV,MAAa,CAAC,CAGd,GAAI,OAAO,QAAQ,OAAU,WAAY,CACvC,IAAIE,GAAQ,QAAQ,MACpB,QAAQ,MAAQ,SAAU/V,EAAG,CAC3B6V,GAAM,KACNE,GAAM,KAAK,QAAS/V,CAAC,CAAA,EAEnB,OAAO,gBAAgB,OAAO,eAAe,QAAQ,MAAO+V,EAAK,CACvE,KAEAC,GAAiBC,GAEjB,SAASA,GAAOrX,EAAI,CAKd8W,GAAU,eAAe,WAAW,GACpC,QAAQ,QAAQ,MAAM,wBAAwB,GAChDQ,EAAYtX,CAAE,EAIXA,EAAG,SACNuX,EAAavX,CAAE,EAQjBA,EAAG,MAAQwX,EAASxX,EAAG,KAAK,EAC5BA,EAAG,OAASwX,EAASxX,EAAG,MAAM,EAC9BA,EAAG,OAASwX,EAASxX,EAAG,MAAM,EAE9BA,EAAG,MAAQyX,EAASzX,EAAG,KAAK,EAC5BA,EAAG,OAASyX,EAASzX,EAAG,MAAM,EAC9BA,EAAG,OAASyX,EAASzX,EAAG,MAAM,EAE9BA,EAAG,UAAY0X,EAAa1X,EAAG,SAAS,EACxCA,EAAG,WAAa0X,EAAa1X,EAAG,UAAU,EAC1CA,EAAG,WAAa0X,EAAa1X,EAAG,UAAU,EAE1CA,EAAG,UAAY2X,EAAa3X,EAAG,SAAS,EACxCA,EAAG,WAAa2X,EAAa3X,EAAG,UAAU,EAC1CA,EAAG,WAAa2X,EAAa3X,EAAG,UAAU,EAE1CA,EAAG,KAAO4X,EAAQ5X,EAAG,IAAI,EACzBA,EAAG,MAAQ4X,EAAQ5X,EAAG,KAAK,EAC3BA,EAAG,MAAQ4X,EAAQ5X,EAAG,KAAK,EAE3BA,EAAG,SAAW6X,EAAY7X,EAAG,QAAQ,EACrCA,EAAG,UAAY6X,EAAY7X,EAAG,SAAS,EACvCA,EAAG,UAAY6X,EAAY7X,EAAG,SAAS,EAGnCA,EAAG,OAAS,CAACA,EAAG,SAClBA,EAAG,OAAS,SAAUJ,EAAMkY,EAAMjB,EAAI,CAChCA,GAAI,QAAQ,SAASA,CAAE,CAAA,EAE7B7W,EAAG,WAAa,UAAY,CAAA,GAE1BA,EAAG,OAAS,CAACA,EAAG,SAClBA,EAAG,OAAS,SAAUJ,EAAMmY,EAAKC,EAAKnB,EAAI,CACpCA,GAAI,QAAQ,SAASA,CAAE,CAAA,EAE7B7W,EAAG,WAAa,UAAY,CAAA,GAY1BkX,KAAa,UACflX,EAAG,OAAS,OAAOA,EAAG,QAAW,WAAaA,EAAG,OAC9C,SAAUiY,EAAW,CACtB,SAASC,EAAQC,EAAMC,EAAIvB,EAAI,CAC7B,IAAIwB,EAAQ,KAAK,IAAA,EACbC,EAAU,EACdL,EAAUE,EAAMC,EAAI,SAASG,EAAIC,EAAI,CACnC,GAAIA,IACIA,EAAG,OAAS,UAAYA,EAAG,OAAS,SAAWA,EAAG,OAAS,UAC5D,KAAK,IAAA,EAAQH,EAAQ,IAAO,CACjC,WAAW,UAAW,CACpBrY,EAAG,KAAKoY,EAAI,SAAUK,EAAQC,EAAI,CAC5BD,GAAUA,EAAO,OAAS,SAC5BR,EAAUE,EAAMC,EAAIG,CAAE,EAEtB1B,EAAG2B,CAAE,CAAA,CACR,CAAA,EACAF,CAAO,EACNA,EAAU,MACZA,GAAW,IACb,MAAA,CAEEzB,KAAO2B,CAAE,CAAA,CACd,CAAA,CAEH,OAAI,OAAO,gBAAgB,OAAO,eAAeN,EAAQD,CAAS,EAC3DC,CAAA,EACNlY,EAAG,MAAM,GAIdA,EAAG,KAAO,OAAOA,EAAG,MAAS,WAAaA,EAAG,KAC1C,SAAU2Y,EAAS,CACpB,SAASC,EAAMC,EAAI7S,EAAQ5D,EAAQ0W,EAAQC,EAAUC,EAAW,CAC9D,IAAIC,EACJ,GAAID,GAAa,OAAOA,GAAc,WAAY,CAChD,IAAIE,EAAa,EACjBD,EAAW,SAAUT,EAAIjT,EAAG4T,GAAI,CAC9B,GAAIX,GAAMA,EAAG,OAAS,UAAYU,EAAa,GAC7C,OAAAA,IACOP,EAAQ,KAAK3Y,EAAI6Y,EAAI7S,EAAQ5D,EAAQ0W,EAAQC,EAAUE,CAAQ,EAExED,EAAU,MAAM,KAAM,SAAS,CAAA,CACjC,CAEF,OAAOL,EAAQ,KAAK3Y,EAAI6Y,EAAI7S,EAAQ5D,EAAQ0W,EAAQC,EAAUE,CAAQ,CAAA,CAIxE,OAAI,OAAO,gBAAgB,OAAO,eAAeL,EAAMD,CAAO,EACvDC,CAAA,EACN5Y,EAAG,IAAI,EAEVA,EAAG,SAAW,OAAOA,EAAG,UAAa,WAAaA,EAAG,kBACxCoZ,EAAa,CAAE,OAAO,SAAUP,EAAI7S,EAAQ5D,EAAQ0W,EAAQC,EAAU,CAEjF,QADIG,EAAa,IAEf,GAAI,CACF,OAAOE,EAAY,KAAKpZ,EAAI6Y,EAAI7S,EAAQ5D,EAAQ0W,EAAQC,CAAQ,CAAA,OACzDP,EAAI,CACX,GAAIA,EAAG,OAAS,UAAYU,EAAa,GAAI,CAC3CA,IACA,QAAA,CAEF,MAAMV,CAAA,CAEV,CACF,EAAIxY,EAAG,QAAQ,EAEf,SAASsX,EAAatX,EAAI,CACxBA,EAAG,OAAS,SAAUJ,EAAMkY,EAAMmB,EAAU,CAC1CjZ,EAAG,KAAMJ,EACAkX,GAAU,SAAWA,GAAU,UAC/BgB,EACA,SAAU5X,EAAK2Y,EAAI,CAC1B,GAAI3Y,EAAK,CACH+Y,KAAmB/Y,CAAG,EAC1B,MAAA,CAIFF,EAAG,OAAO6Y,EAAIf,EAAM,SAAU5X,EAAK,CACjCF,EAAG,MAAM6Y,EAAI,SAASQ,EAAM,CACtBJ,GAAUA,EAAS/Y,GAAOmZ,CAAI,CAAA,CACnC,CAAA,CACF,CAAA,CACH,CAAC,EAGHrZ,EAAG,WAAa,SAAUJ,EAAMkY,EAAM,CACpC,IAAIe,EAAK7Y,EAAG,SAASJ,EAAMkX,GAAU,SAAWA,GAAU,UAAWgB,CAAI,EAIrEwB,EAAQ,GACRC,EACJ,GAAI,CACFA,EAAMvZ,EAAG,WAAW6Y,EAAIf,CAAI,EAC5BwB,EAAQ,EAAA,QACV,CACE,GAAIA,EACF,GAAI,CACFtZ,EAAG,UAAU6Y,CAAE,CAAA,MACJ,CAAA,MAEb7Y,EAAG,UAAU6Y,CAAE,CACjB,CAEF,OAAOU,CAAA,CACT,CAGF,SAAShC,EAAcvX,EAAI,CACrB8W,GAAU,eAAe,WAAW,GAAK9W,EAAG,SAC9CA,EAAG,QAAU,SAAUJ,EAAM4Z,EAAIC,EAAI5C,EAAI,CACvC7W,EAAG,KAAKJ,EAAMkX,GAAU,UAAW,SAAU0B,EAAIK,EAAI,CACnD,GAAIL,EAAI,CACF3B,KAAO2B,CAAE,EACb,MAAA,CAEFxY,EAAG,QAAQ6Y,EAAIW,EAAIC,EAAI,SAAUjB,EAAI,CACnCxY,EAAG,MAAM6Y,EAAI,SAAUa,EAAK,CACtB7C,GAAIA,EAAG2B,GAAMkB,CAAG,CAAA,CACrB,CAAA,CACF,CAAA,CACF,CAAA,EAGH1Z,EAAG,YAAc,SAAUJ,EAAM4Z,EAAIC,EAAI,CACvC,IAAIZ,EAAK7Y,EAAG,SAASJ,EAAMkX,GAAU,SAAS,EAC1CyC,EACAD,EAAQ,GACZ,GAAI,CACFC,EAAMvZ,EAAG,YAAY6Y,EAAIW,EAAIC,CAAE,EAC/BH,EAAQ,EAAA,QACV,CACE,GAAIA,EACF,GAAI,CACFtZ,EAAG,UAAU6Y,CAAE,CAAA,MACJ,CAAA,MAEb7Y,EAAG,UAAU6Y,CAAE,CACjB,CAEF,OAAOU,CAAA,GAGAvZ,EAAG,UACZA,EAAG,QAAU,SAAUkC,EAAI0K,EAAIC,EAAIgK,EAAI,CAAMA,GAAI,QAAQ,SAASA,CAAE,CAAA,EACpE7W,EAAG,YAAc,UAAY,CAAA,EAC/B,CAGF,SAASyX,EAAUkC,EAAM,CACvB,OAAKA,GACE,SAAUC,EAAQ9B,EAAMjB,EAAI,CACjC,OAAO8C,EAAK,KAAK3Z,EAAI4Z,EAAQ9B,EAAM,SAAUU,EAAI,CAC3CqB,EAAUrB,CAAE,IAAGA,EAAK,MACpB3B,GAAIA,EAAG,MAAM,KAAM,SAAS,CAAA,CACjC,CAAA,CACH,CAGF,SAASc,EAAcgC,EAAM,CAC3B,OAAKA,GACE,SAAUC,EAAQ9B,EAAM,CAC7B,GAAI,CACF,OAAO6B,EAAK,KAAK3Z,EAAI4Z,EAAQ9B,CAAI,CAAA,OAC1BU,EAAI,CACX,GAAI,CAACqB,EAAUrB,CAAE,EAAG,MAAMA,CAAA,CAC5B,CACF,CAIF,SAAShB,EAAUmC,EAAM,CACvB,OAAKA,GACE,SAAUC,EAAQ7B,EAAKC,EAAKnB,EAAI,CACrC,OAAO8C,EAAK,KAAK3Z,EAAI4Z,EAAQ7B,EAAKC,EAAK,SAAUQ,EAAI,CAC/CqB,EAAUrB,CAAE,IAAGA,EAAK,MACpB3B,GAAIA,EAAG,MAAM,KAAM,SAAS,CAAA,CACjC,CAAA,CACH,CAGF,SAASa,EAAciC,EAAM,CAC3B,OAAKA,GACE,SAAUC,EAAQ7B,EAAKC,EAAK,CACjC,GAAI,CACF,OAAO2B,EAAK,KAAK3Z,EAAI4Z,EAAQ7B,EAAKC,CAAG,CAAA,OAC9BQ,EAAI,CACX,GAAI,CAACqB,EAAUrB,CAAE,EAAG,MAAMA,CAAA,CAC5B,CACF,CAGF,SAASZ,EAAS+B,EAAM,CACtB,OAAKA,GAGE,SAAUC,EAAQE,EAASjD,EAAI,CAChC,OAAOiD,GAAY,aACrBjD,EAAKiD,EACLA,EAAU,MAEZ,SAASb,EAAUT,EAAIuB,EAAO,CACxBA,IACEA,EAAM,IAAM,IAAGA,EAAM,KAAO,YAC5BA,EAAM,IAAM,IAAGA,EAAM,KAAO,aAE9BlD,GAAIA,EAAG,MAAM,KAAM,SAAS,CAAA,CAElC,OAAOiD,EAAUH,EAAK,KAAK3Z,EAAI4Z,EAAQE,EAASb,CAAQ,EACpDU,EAAK,KAAK3Z,EAAI4Z,EAAQX,CAAQ,CAAA,CACpC,CAGF,SAASpB,EAAa8B,EAAM,CAC1B,OAAKA,GAGE,SAAUC,EAAQE,EAAS,CAChC,IAAIC,EAAQD,EAAUH,EAAK,KAAK3Z,EAAI4Z,EAAQE,CAAO,EAC/CH,EAAK,KAAK3Z,EAAI4Z,CAAM,EACxB,OAAIG,IACEA,EAAM,IAAM,IAAGA,EAAM,KAAO,YAC5BA,EAAM,IAAM,IAAGA,EAAM,KAAO,aAE3BA,CAAA,CACT,CAeF,SAASF,EAAWrB,EAAI,CAItB,GAHI,CAACA,GAGDA,EAAG,OAAS,SACd,MAAO,GAET,IAAIwB,EAAU,CAAC,QAAQ,QAAU,QAAQ,WAAa,EACtD,MAAI,GAAAA,IACExB,EAAG,OAAS,UAAYA,EAAG,OAAS,SAInC,CAEX,CClWA,IAAIyB,GAASlD,GAAkB,OAE/BmD,GAAiBC,GAEjB,SAASA,GAAQna,EAAI,CACnB,MAAO,CACL,WAAYoa,EACZ,YAAaC,CACjB,EAEE,SAASD,EAAYxa,EAAMka,EAAS,CAClC,GAAI,EAAE,gBAAgBM,GAAa,OAAO,IAAIA,EAAWxa,EAAMka,CAAO,EAEtEG,GAAO,KAAK,IAAI,EAEhB,IAAIK,EAAO,KAEX,KAAK,KAAO1a,EACZ,KAAK,GAAK,KACV,KAAK,SAAW,GAChB,KAAK,OAAS,GAEd,KAAK,MAAQ,IACb,KAAK,KAAO,IACZ,KAAK,WAAa,GAAK,KAEvBka,EAAUA,GAAW,CAAA,EAIrB,QADIS,EAAO,OAAO,KAAKT,CAAO,EACrBU,EAAQ,EAAG1B,EAASyB,EAAK,OAAQC,EAAQ1B,EAAQ0B,IAAS,CACjE,IAAI7K,EAAM4K,EAAKC,CAAK,EACpB,KAAK7K,CAAG,EAAImK,EAAQnK,CAAG,CAC7B,CAII,GAFI,KAAK,UAAU,KAAK,YAAY,KAAK,QAAQ,EAE7C,KAAK,QAAU,OAAW,CAC5B,GAAiB,OAAO,KAAK,OAAzB,SACF,MAAM,UAAU,wBAAwB,EAE1C,GAAI,KAAK,MAAQ,OACf,KAAK,IAAM,YACW,OAAO,KAAK,KAAzB,SACT,MAAM,UAAU,sBAAsB,EAGxC,GAAI,KAAK,MAAQ,KAAK,IACpB,MAAM,IAAI,MAAM,sBAAsB,EAGxC,KAAK,IAAM,KAAK,KACtB,CAEI,GAAI,KAAK,KAAO,KAAM,CACpB,QAAQ,SAAS,UAAW,CAC1B2K,EAAK,MAAK,CAClB,CAAO,EACD,MACN,CAEIta,EAAG,KAAK,KAAK,KAAM,KAAK,MAAO,KAAK,KAAM,SAAUE,EAAK2Y,EAAI,CAC3D,GAAI3Y,EAAK,CACPoa,EAAK,KAAK,QAASpa,CAAG,EACtBoa,EAAK,SAAW,GAChB,MACR,CAEMA,EAAK,GAAKzB,EACVyB,EAAK,KAAK,OAAQzB,CAAE,EACpByB,EAAK,MAAK,CAChB,CAAK,CACL,CAEE,SAASD,EAAaza,EAAMka,EAAS,CACnC,GAAI,EAAE,gBAAgBO,GAAc,OAAO,IAAIA,EAAYza,EAAMka,CAAO,EAExEG,GAAO,KAAK,IAAI,EAEhB,KAAK,KAAOra,EACZ,KAAK,GAAK,KACV,KAAK,SAAW,GAEhB,KAAK,MAAQ,IACb,KAAK,SAAW,SAChB,KAAK,KAAO,IACZ,KAAK,aAAe,EAEpBka,EAAUA,GAAW,CAAA,EAIrB,QADIS,EAAO,OAAO,KAAKT,CAAO,EACrBU,EAAQ,EAAG1B,EAASyB,EAAK,OAAQC,EAAQ1B,EAAQ0B,IAAS,CACjE,IAAI7K,EAAM4K,EAAKC,CAAK,EACpB,KAAK7K,CAAG,EAAImK,EAAQnK,CAAG,CAC7B,CAEI,GAAI,KAAK,QAAU,OAAW,CAC5B,GAAiB,OAAO,KAAK,OAAzB,SACF,MAAM,UAAU,wBAAwB,EAE1C,GAAI,KAAK,MAAQ,EACf,MAAM,IAAI,MAAM,uBAAuB,EAGzC,KAAK,IAAM,KAAK,KACtB,CAEI,KAAK,KAAO,GACZ,KAAK,OAAS,CAAA,EAEV,KAAK,KAAO,OACd,KAAK,MAAQ3P,EAAG,KAChB,KAAK,OAAO,KAAK,CAAC,KAAK,MAAO,KAAK,KAAM,KAAK,MAAO,KAAK,KAAM,MAAS,CAAC,EAC1E,KAAK,MAAK,EAEhB,CACA,CCnHA,IAAAya,GAAiBC,GAEbC,GAAiB,OAAO,gBAAkB,SAAUC,EAAK,CAC3D,OAAOA,EAAI,SACb,EAEA,SAASF,GAAOE,EAAK,CACnB,GAAIA,IAAQ,MAAQ,OAAOA,GAAQ,SACjC,OAAOA,EAET,GAAIA,aAAe,OACjB,IAAIC,EAAO,CAAE,UAAWF,GAAeC,CAAG,CAAC,MAE3C,KAAIC,EAAO,OAAO,OAAO,IAAI,EAE/B,cAAO,oBAAoBD,CAAG,EAAE,QAAQ,SAAUjL,EAAK,CACrD,OAAO,eAAekL,EAAMlL,EAAK,OAAO,yBAAyBiL,EAAKjL,CAAG,CAAC,CAC9E,CAAG,EAEMkL,CACT,CCtBA,IAAI7a,GAAK+W,EACLK,GAAY0D,GACZX,GAASY,GACTL,GAAQM,GAERC,GAAOC,GAGPC,GACAC,GAGA,OAAO,QAAW,YAAc,OAAO,OAAO,KAAQ,YACxDD,GAAgB,OAAO,IAAI,mBAAmB,EAE9CC,GAAiB,OAAO,IAAI,sBAAsB,IAElDD,GAAgB,uBAChBC,GAAiB,2BAGnB,SAASC,IAAQ,CAAC,CAElB,SAASC,GAAaC,EAASC,EAAO,CACpC,OAAO,eAAeD,EAASJ,GAAe,CAC5C,IAAK,UAAW,CACd,OAAOK,CAAA,CACT,CACD,CACH,CAEA,IAAIC,GAAQJ,GACRJ,GAAK,SACPQ,GAAQR,GAAK,SAAS,MAAM,EACrB,YAAY,KAAK,QAAA,IAAY,YAAc,EAAE,IACpDQ,GAAQ,UAAW,CACjB,IAAIxa,EAAIga,GAAK,OAAO,MAAMA,GAAM,SAAS,EACzCha,EAAI,SAAWA,EAAE,MAAM,IAAI,EAAE,KAAK;AAAA,OAAU,EAC5C,QAAQ,MAAMA,CAAC,CAAA,GAInB,GAAI,CAACjB,GAAGmb,EAAa,EAAG,CAEtB,IAAIK,GAAQE,GAAOP,EAAa,GAAK,CAAA,EACrCG,GAAatb,GAAIwb,EAAK,EAMtBxb,GAAG,MAAS,SAAU2b,EAAU,CAC9B,SAASC,EAAO/C,EAAIhC,EAAI,CACtB,OAAO8E,EAAS,KAAK3b,GAAI6Y,EAAI,SAAU3Y,EAAK,CAErCA,GACH2b,GAAA,EAGE,OAAOhF,GAAO,YAChBA,EAAG,MAAM,KAAM,SAAS,CAAA,CAC3B,CAAA,CAGH,cAAO,eAAe+E,EAAOR,GAAgB,CAC3C,MAAOO,CAAA,CACR,EACMC,CAAA,EACN5b,GAAG,KAAK,EAEXA,GAAG,UAAa,SAAU8b,EAAc,CACtC,SAASC,EAAWlD,EAAI,CAEtBiD,EAAa,MAAM9b,GAAI,SAAS,EAChC6b,GAAA,CAAW,CAGb,cAAO,eAAeE,EAAWX,GAAgB,CAC/C,MAAOU,CAAA,CACR,EACMC,CAAA,EACN/b,GAAG,SAAS,EAEX,YAAY,KAAK,QAAA,IAAY,YAAc,EAAE,GAC/C,QAAQ,GAAG,OAAQ,UAAW,CAC5Byb,GAAMzb,GAAGmb,EAAa,CAAC,EACvBa,GAAkB,MAAMhc,GAAGmb,EAAa,EAAE,OAAQ,CAAC,CAAA,CACpD,CAEL,CAEKO,GAAOP,EAAa,GACvBG,GAAaI,GAAQ1b,GAAGmb,EAAa,CAAC,MAGxCc,GAAiB5E,GAAMqD,GAAM1a,EAAE,CAAC,EAC5B,QAAA,IAAY,+BAAiC,CAACA,GAAG,YACjDic,GAAiB5E,GAAMrX,EAAE,EACzBA,GAAG,UAAY,IAGnB,SAASqX,GAAOrX,EAAI,CAElBoX,GAAUpX,CAAE,EACZA,EAAG,YAAcqX,GAEjBrX,EAAG,iBAAmBkc,EACtBlc,EAAG,kBAAoBmc,GACvB,IAAIC,EAAcpc,EAAG,SACrBA,EAAG,SAAWqc,EACd,SAASA,EAAUzc,EAAMka,EAASjD,EAAI,CACpC,OAAI,OAAOiD,GAAY,aACrBjD,EAAKiD,EAASA,EAAU,MAEnBwC,EAAY1c,EAAMka,EAASjD,CAAE,EAEpC,SAASyF,EAAa1c,EAAMka,EAASjD,EAAIjR,EAAW,CAClD,OAAOwW,EAAYxc,EAAMka,EAAS,SAAU5Z,EAAK,CAC3CA,IAAQA,EAAI,OAAS,UAAYA,EAAI,OAAS,UAChDqc,GAAQ,CAACD,EAAa,CAAC1c,EAAMka,EAASjD,CAAE,EAAG3W,EAAK0F,GAAa,KAAK,IAAA,EAAO,KAAK,IAAA,CAAK,CAAC,EAEhF,OAAOiR,GAAO,YAChBA,EAAG,MAAM,KAAM,SAAS,CAC5B,CACD,CAAA,CACH,CAGF,IAAI2F,EAAexc,EAAG,UACtBA,EAAG,UAAYyc,EACf,SAASA,EAAW7c,EAAM2E,EAAMuV,EAASjD,EAAI,CAC3C,OAAI,OAAOiD,GAAY,aACrBjD,EAAKiD,EAASA,EAAU,MAEnB4C,EAAa9c,EAAM2E,EAAMuV,EAASjD,CAAE,EAE3C,SAAS6F,EAAc9c,EAAM2E,EAAMuV,EAASjD,EAAIjR,EAAW,CACzD,OAAO4W,EAAa5c,EAAM2E,EAAMuV,EAAS,SAAU5Z,EAAK,CAClDA,IAAQA,EAAI,OAAS,UAAYA,EAAI,OAAS,UAChDqc,GAAQ,CAACG,EAAc,CAAC9c,EAAM2E,EAAMuV,EAASjD,CAAE,EAAG3W,EAAK0F,GAAa,KAAK,IAAA,EAAO,KAAK,IAAA,CAAK,CAAC,EAEvF,OAAOiR,GAAO,YAChBA,EAAG,MAAM,KAAM,SAAS,CAC5B,CACD,CAAA,CACH,CAGF,IAAI8F,EAAgB3c,EAAG,WACnB2c,IACF3c,EAAG,WAAa4c,GAClB,SAASA,EAAYhd,EAAM2E,EAAMuV,EAASjD,EAAI,CAC5C,OAAI,OAAOiD,GAAY,aACrBjD,EAAKiD,EAASA,EAAU,MAEnB+C,EAAcjd,EAAM2E,EAAMuV,EAASjD,CAAE,EAE5C,SAASgG,EAAejd,EAAM2E,EAAMuV,EAASjD,EAAIjR,EAAW,CAC1D,OAAO+W,EAAc/c,EAAM2E,EAAMuV,EAAS,SAAU5Z,EAAK,CACnDA,IAAQA,EAAI,OAAS,UAAYA,EAAI,OAAS,UAChDqc,GAAQ,CAACM,EAAe,CAACjd,EAAM2E,EAAMuV,EAASjD,CAAE,EAAG3W,EAAK0F,GAAa,KAAK,IAAA,EAAO,KAAK,IAAA,CAAK,CAAC,EAExF,OAAOiR,GAAO,YAChBA,EAAG,MAAM,KAAM,SAAS,CAC5B,CACD,CAAA,CACH,CAGF,IAAIiG,EAAc9c,EAAG,SACjB8c,IACF9c,EAAG,SAAW+c,GAChB,SAASA,EAAUC,EAAKC,EAAMC,EAAOrG,EAAI,CACvC,OAAI,OAAOqG,GAAU,aACnBrG,EAAKqG,EACLA,EAAQ,GAEHC,EAAYH,EAAKC,EAAMC,EAAOrG,CAAE,EAEvC,SAASsG,EAAaH,EAAKC,EAAMC,EAAOrG,EAAIjR,EAAW,CACrD,OAAOkX,EAAYE,EAAKC,EAAMC,EAAO,SAAUhd,EAAK,CAC9CA,IAAQA,EAAI,OAAS,UAAYA,EAAI,OAAS,UAChDqc,GAAQ,CAACY,EAAa,CAACH,EAAKC,EAAMC,EAAOrG,CAAE,EAAG3W,EAAK0F,GAAa,KAAK,IAAA,EAAO,KAAK,IAAA,CAAK,CAAC,EAEnF,OAAOiR,GAAO,YAChBA,EAAG,MAAM,KAAM,SAAS,CAC5B,CACD,CAAA,CACH,CAGF,IAAIuG,EAAapd,EAAG,QACpBA,EAAG,QAAUqd,EACb,IAAIC,EAA0B,YAC9B,SAASD,EAASzd,EAAMka,EAASjD,EAAI,CAC/B,OAAOiD,GAAY,aACrBjD,EAAKiD,EAASA,EAAU,MAE1B,IAAIyD,EAAaD,EAAwB,KAAK,QAAQ,OAAO,EACzD,SAAqB1d,EAAMka,EAASjD,EAAIjR,EAAW,CACnD,OAAOwX,EAAWxd,EAAM4d,EACtB5d,EAAMka,EAASjD,EAAIjR,CAAA,CACpB,CAAA,EAED,SAAqBhG,EAAMka,EAASjD,EAAIjR,EAAW,CACnD,OAAOwX,EAAWxd,EAAMka,EAAS0D,EAC/B5d,EAAMka,EAASjD,EAAIjR,CAAA,CACpB,CAAA,EAGL,OAAO2X,EAAW3d,EAAMka,EAASjD,CAAE,EAEnC,SAAS2G,EAAoB5d,EAAMka,EAASjD,EAAIjR,EAAW,CACzD,OAAO,SAAU1F,EAAKud,EAAO,CACvBvd,IAAQA,EAAI,OAAS,UAAYA,EAAI,OAAS,UAChDqc,GAAQ,CACNgB,EACA,CAAC3d,EAAMka,EAASjD,CAAE,EAClB3W,EACA0F,GAAa,KAAK,IAAA,EAClB,KAAK,IAAA,CAAI,CACV,GAEG6X,GAASA,EAAM,MACjBA,EAAM,KAAA,EAEJ,OAAO5G,GAAO,YAChBA,EAAG,KAAK,KAAM3W,EAAKud,CAAK,EAC5B,CACF,CACF,CAGF,GAAI,QAAQ,QAAQ,OAAO,EAAG,CAAC,IAAM,OAAQ,CAC3C,IAAIC,EAAavD,GAAOna,CAAE,EAC1Boa,EAAasD,EAAW,WACxBrD,EAAcqD,EAAW,WAAA,CAG3B,IAAIC,EAAgB3d,EAAG,WACnB2d,IACFvD,EAAW,UAAY,OAAO,OAAOuD,EAAc,SAAS,EAC5DvD,EAAW,UAAU,KAAOwD,GAG9B,IAAIC,EAAiB7d,EAAG,YACpB6d,IACFxD,EAAY,UAAY,OAAO,OAAOwD,EAAe,SAAS,EAC9DxD,EAAY,UAAU,KAAOyD,GAG/B,OAAO,eAAe9d,EAAI,aAAc,CACtC,IAAK,UAAY,CACf,OAAOoa,CAAA,EAET,IAAK,SAAU2D,EAAK,CAClB3D,EAAa2D,CAAA,EAEf,WAAY,GACZ,aAAc,EAAA,CACf,EACD,OAAO,eAAe/d,EAAI,cAAe,CACvC,IAAK,UAAY,CACf,OAAOqa,CAAA,EAET,IAAK,SAAU0D,EAAK,CAClB1D,EAAc0D,CAAA,EAEhB,WAAY,GACZ,aAAc,EAAA,CACf,EAGD,IAAIC,EAAiB5D,EACrB,OAAO,eAAepa,EAAI,iBAAkB,CAC1C,IAAK,UAAY,CACf,OAAOge,CAAA,EAET,IAAK,SAAUD,EAAK,CAClBC,EAAiBD,CAAA,EAEnB,WAAY,GACZ,aAAc,EAAA,CACf,EACD,IAAIE,EAAkB5D,EACtB,OAAO,eAAera,EAAI,kBAAmB,CAC3C,IAAK,UAAY,CACf,OAAOie,CAAA,EAET,IAAK,SAAUF,EAAK,CAClBE,EAAkBF,CAAA,EAEpB,WAAY,GACZ,aAAc,EAAA,CACf,EAED,SAAS3D,EAAYxa,EAAMka,EAAS,CAClC,OAAI,gBAAgBM,GACXuD,EAAc,MAAM,KAAM,SAAS,EAAG,MAEtCvD,EAAW,MAAM,OAAO,OAAOA,EAAW,SAAS,EAAG,SAAS,CAAA,CAG1E,SAASwD,GAAmB,CAC1B,IAAIM,EAAO,KACXC,GAAKD,EAAK,KAAMA,EAAK,MAAOA,EAAK,KAAM,SAAUhe,EAAK2Y,EAAI,CACpD3Y,GACEge,EAAK,WACPA,EAAK,QAAA,EAEPA,EAAK,KAAK,QAAShe,CAAG,IAEtBge,EAAK,GAAKrF,EACVqF,EAAK,KAAK,OAAQrF,CAAE,EACpBqF,EAAK,KAAA,EACP,CACD,CAAA,CAGH,SAAS7D,EAAaza,EAAMka,EAAS,CACnC,OAAI,gBAAgBO,GACXwD,EAAe,MAAM,KAAM,SAAS,EAAG,MAEvCxD,EAAY,MAAM,OAAO,OAAOA,EAAY,SAAS,EAAG,SAAS,CAAA,CAG5E,SAASyD,GAAoB,CAC3B,IAAII,EAAO,KACXC,GAAKD,EAAK,KAAMA,EAAK,MAAOA,EAAK,KAAM,SAAUhe,EAAK2Y,EAAI,CACpD3Y,GACFge,EAAK,QAAA,EACLA,EAAK,KAAK,QAAShe,CAAG,IAEtBge,EAAK,GAAKrF,EACVqF,EAAK,KAAK,OAAQrF,CAAE,EACtB,CACD,CAAA,CAGH,SAASqD,EAAkBtc,EAAMka,EAAS,CACxC,OAAO,IAAI9Z,EAAG,WAAWJ,EAAMka,CAAO,CAAA,CAGxC,SAASqC,GAAmBvc,EAAMka,EAAS,CACzC,OAAO,IAAI9Z,EAAG,YAAYJ,EAAMka,CAAO,CAAA,CAGzC,IAAIsE,EAAUpe,EAAG,KACjBA,EAAG,KAAOme,GACV,SAASA,GAAMve,EAAMsd,EAAOpF,EAAMjB,EAAI,CACpC,OAAI,OAAOiB,GAAS,aAClBjB,EAAKiB,EAAMA,EAAO,MAEbuG,EAAQze,EAAMsd,EAAOpF,EAAMjB,CAAE,EAEpC,SAASwH,EAASze,EAAMsd,EAAOpF,EAAMjB,EAAIjR,EAAW,CAClD,OAAOwY,EAAQxe,EAAMsd,EAAOpF,EAAM,SAAU5X,EAAK2Y,EAAI,CAC/C3Y,IAAQA,EAAI,OAAS,UAAYA,EAAI,OAAS,UAChDqc,GAAQ,CAAC8B,EAAS,CAACze,EAAMsd,EAAOpF,EAAMjB,CAAE,EAAG3W,EAAK0F,GAAa,KAAK,IAAA,EAAO,KAAK,IAAA,CAAK,CAAC,EAEhF,OAAOiR,GAAO,YAChBA,EAAG,MAAM,KAAM,SAAS,CAC5B,CACD,CAAA,CACH,CAGF,OAAO7W,CACT,CAEA,SAASuc,GAAS+B,EAAM,CACtB7C,GAAM,UAAW6C,EAAK,CAAC,EAAE,KAAMA,EAAK,CAAC,CAAC,EACtCte,GAAGmb,EAAa,EAAE,KAAKmD,CAAI,EAC3BC,GAAA,CACF,CAGA,IAAIC,GAKJ,SAAS3C,IAAc,CAErB,QADIta,EAAM,KAAK,IAAA,EACNmH,EAAI,EAAGA,EAAI1I,GAAGmb,EAAa,EAAE,OAAQ,EAAEzS,EAG1C1I,GAAGmb,EAAa,EAAEzS,CAAC,EAAE,OAAS,IAChC1I,GAAGmb,EAAa,EAAEzS,CAAC,EAAE,CAAC,EAAInH,EAC1BvB,GAAGmb,EAAa,EAAEzS,CAAC,EAAE,CAAC,EAAInH,GAI9Bgd,GAAA,CACF,CAEA,SAASA,IAAS,CAKhB,GAHA,aAAaC,EAAU,EACvBA,GAAa,OAETxe,GAAGmb,EAAa,EAAE,SAAW,EAGjC,KAAImD,EAAOte,GAAGmb,EAAa,EAAE,MAAA,EACzBvE,EAAK0H,EAAK,CAAC,EACXtK,EAAOsK,EAAK,CAAC,EAEbpe,EAAMoe,EAAK,CAAC,EACZ1Y,EAAY0Y,EAAK,CAAC,EAClBG,EAAWH,EAAK,CAAC,EAIrB,GAAI1Y,IAAc,OAChB6V,GAAM,QAAS7E,EAAG,KAAM5C,CAAI,EAC5B4C,EAAG,MAAM,KAAM5C,CAAI,UACV,KAAK,IAAA,EAAQpO,GAAa,IAAO,CAE1C6V,GAAM,UAAW7E,EAAG,KAAM5C,CAAI,EAC9B,IAAI6C,EAAK7C,EAAK,IAAA,EACV,OAAO6C,GAAO,YAChBA,EAAG,KAAK,KAAM3W,CAAG,CAAA,KACd,CAEL,IAAIwe,EAAe,KAAK,IAAA,EAAQD,EAG5BE,EAAa,KAAK,IAAIF,EAAW7Y,EAAW,CAAC,EAG7CgZ,EAAe,KAAK,IAAID,EAAa,IAAK,GAAG,EAE7CD,GAAgBE,GAClBnD,GAAM,QAAS7E,EAAG,KAAM5C,CAAI,EAC5B4C,EAAG,MAAM,KAAM5C,EAAK,OAAO,CAACpO,CAAS,CAAC,CAAC,GAIvC5F,GAAGmb,EAAa,EAAE,KAAKmD,CAAI,CAC7B,CAIEE,KAAe,SACjBA,GAAa,WAAWD,GAAO,CAAC,GAEpC,cC5bA,MAAMM,EAAI9H,GAAwB,aAC5B/W,EAAK8a,GAELgE,EAAM,CACV,SACA,aACA,QACA,QACA,QACA,WACA,SACA,SACA,YACA,QACA,QACA,YACA,UACA,SACA,SACA,OACA,QACA,QACA,UACA,OACA,UACA,UACA,WACA,WACA,WACA,SACA,KACA,QACA,OACA,UACA,WACA,SACA,SACA,WACF,EAAE,OAAOnP,GAKA,OAAO3P,EAAG2P,CAAG,GAAM,UAC3B,EAGD,OAAO,OAAOoP,EAAS/e,CAAE,EAGzB8e,EAAI,QAAQrL,GAAU,CACpBsL,EAAQtL,CAAM,EAAIoL,EAAE7e,EAAGyT,CAAM,CAAC,CAChC,CAAC,EAIDsL,EAAA,OAAiB,SAAU1V,EAAU4P,EAAU,CAC7C,OAAI,OAAOA,GAAa,WACfjZ,EAAG,OAAOqJ,EAAU4P,CAAQ,EAE9B,IAAI,QAAQ7T,GACVpF,EAAG,OAAOqJ,EAAUjE,CAAO,CACnC,CACH,EAIA2Z,EAAA,KAAe,SAAUlG,EAAI7S,EAAQ5D,EAAQ0W,EAAQC,EAAUE,EAAU,CACvE,OAAI,OAAOA,GAAa,WACfjZ,EAAG,KAAK6Y,EAAI7S,EAAQ5D,EAAQ0W,EAAQC,EAAUE,CAAQ,EAExD,IAAI,QAAQ,CAAC7T,EAASC,IAAW,CACtCrF,EAAG,KAAK6Y,EAAI7S,EAAQ5D,EAAQ0W,EAAQC,EAAU,CAAC7Y,EAAK8e,EAAWhZ,IAAW,CACxE,GAAI9F,EAAK,OAAOmF,EAAOnF,CAAG,EAC1BkF,EAAQ,CAAE,UAAA4Z,EAAW,OAAAhZ,CAAM,CAAE,CACnC,CAAK,CACL,CAAG,CACH,EAOA+Y,EAAA,MAAgB,SAAUlG,EAAI7S,KAAWgO,EAAM,CAC7C,OAAI,OAAOA,EAAKA,EAAK,OAAS,CAAC,GAAM,WAC5BhU,EAAG,MAAM6Y,EAAI7S,EAAQ,GAAGgO,CAAI,EAG9B,IAAI,QAAQ,CAAC5O,EAASC,IAAW,CACtCrF,EAAG,MAAM6Y,EAAI7S,EAAQ,GAAGgO,EAAM,CAAC9T,EAAK+e,EAAcjZ,IAAW,CAC3D,GAAI9F,EAAK,OAAOmF,EAAOnF,CAAG,EAC1BkF,EAAQ,CAAE,aAAA6Z,EAAc,OAAAjZ,CAAM,CAAE,CACtC,CAAK,CACL,CAAG,CACH,EAGI,OAAOhG,EAAG,QAAW,aAIvB+e,EAAA,OAAiB,SAAUlG,EAAIqG,KAAYlL,EAAM,CAC/C,OAAI,OAAOA,EAAKA,EAAK,OAAS,CAAC,GAAM,WAC5BhU,EAAG,OAAO6Y,EAAIqG,EAAS,GAAGlL,CAAI,EAGhC,IAAI,QAAQ,CAAC5O,EAASC,IAAW,CACtCrF,EAAG,OAAO6Y,EAAIqG,EAAS,GAAGlL,EAAM,CAAC9T,EAAK+e,EAAcC,IAAY,CAC9D,GAAIhf,EAAK,OAAOmF,EAAOnF,CAAG,EAC1BkF,EAAQ,CAAE,aAAA6Z,EAAc,QAAAC,CAAO,CAAE,CACzC,CAAO,CACP,CAAK,CACL,GAII,OAAOlf,EAAG,SAAS,QAAW,WAChC+e,EAAQ,SAAS,OAASF,EAAE7e,EAAG,SAAS,MAAM,EAE9C,QAAQ,YACN,oEACA,UAAW,2CCvHf,MAAMJ,GAAOmX,EAIboI,GAAA,UAA2B,SAAoBC,EAAK,CAClD,GAAI,QAAQ,WAAa,SACa,YAAY,KAAKA,EAAI,QAAQxf,GAAK,MAAMwf,CAAG,EAAE,KAAM,EAAE,CAAC,EAEzD,CAC/B,MAAM1I,EAAQ,IAAI,MAAM,qCAAqC0I,CAAG,EAAE,EAClE,MAAA1I,EAAM,KAAO,SACPA,CACZ,CAEA,ECnBA,MAAM1W,GAAK+W,GACL,CAAE,UAAAsI,EAAS,EAAKvE,GAEhBwE,GAAUxF,GAAW,CACzB,MAAMyF,EAAW,CAAE,KAAM,GAAK,EAC9B,OAAI,OAAOzF,GAAY,SAAiBA,EAChC,CAAE,GAAGyF,EAAU,GAAGzF,CAAO,EAAI,IACvC,EAEA0F,GAAA,QAAyB,MAAOnf,EAAKyZ,KACnCuF,GAAUhf,CAAG,EAENL,GAAG,MAAMK,EAAK,CACnB,KAAMif,GAAQxF,CAAO,EACrB,UAAW,EACf,CAAG,GAGH0F,GAAA,YAA6B,CAACnf,EAAKyZ,KACjCuF,GAAUhf,CAAG,EAENL,GAAG,UAAUK,EAAK,CACvB,KAAMif,GAAQxF,CAAO,EACrB,UAAW,EACf,CAAG,GCxBH,MAAM+E,GAAI9H,GAAwB,YAC5B,CAAE,QAAS0I,GAAU,YAAAC,IAAgB5E,GACrC0E,GAAUX,GAAEY,EAAQ,EAE1B,IAAAE,GAAiB,CACf,OAAQH,GACR,WAAYE,GAEZ,OAAQF,GACR,WAAYE,GACZ,UAAWF,GACX,cAAeE,EACjB,ECZA,MAAMb,GAAI9H,GAAwB,YAC5B/W,GAAK8a,GAEX,SAAS8E,GAAYhgB,EAAM,CACzB,OAAOI,GAAG,OAAOJ,CAAI,EAAE,KAAK,IAAM,EAAI,EAAE,MAAM,IAAM,EAAK,CAC3D,CAEA,IAAAigB,GAAiB,CACf,WAAYhB,GAAEe,EAAU,EACxB,eAAgB5f,GAAG,UACrB,ECTA,MAAMA,GAAK+W,GAEX,SAAS+I,GAAclgB,EAAMmgB,EAAOC,EAAO/G,EAAU,CAEnDjZ,GAAG,KAAKJ,EAAM,KAAM,CAACM,EAAK2Y,IAAO,CAC/B,GAAI3Y,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5BF,GAAG,QAAQ6Y,EAAIkH,EAAOC,EAAOC,GAAc,CACzCjgB,GAAG,MAAM6Y,EAAIqH,GAAY,CACnBjH,GAAUA,EAASgH,GAAcC,CAAQ,CACrD,CAAO,CACP,CAAK,CACL,CAAG,CACH,CAEA,SAASC,GAAkBvgB,EAAMmgB,EAAOC,EAAO,CAC7C,MAAMnH,EAAK7Y,GAAG,SAASJ,EAAM,IAAI,EACjCI,OAAAA,GAAG,YAAY6Y,EAAIkH,EAAOC,CAAK,EACxBhgB,GAAG,UAAU6Y,CAAE,CACxB,CAEA,IAAAuH,GAAiB,CACjB,aAAEN,GACF,iBAAEK,EACF,ECvBA,MAAMngB,GAAK+W,GACLnX,GAAOkb,EACPG,GAAOF,GAEb,SAASsF,GAAUrD,EAAKC,EAAMhR,EAAM,CAClC,MAAMqU,EAAWrU,EAAK,YACjByC,GAAS1O,GAAG,KAAK0O,EAAM,CAAE,OAAQ,EAAI,CAAE,EACvCA,GAAS1O,GAAG,MAAM0O,EAAM,CAAE,OAAQ,EAAI,CAAE,EAC7C,OAAO,QAAQ,IAAI,CACjB4R,EAAStD,CAAG,EACZsD,EAASrD,CAAI,EAAE,MAAM/c,GAAO,CAC1B,GAAIA,EAAI,OAAS,SAAU,OAAO,KAClC,MAAMA,CACZ,CAAK,CACL,CAAG,EAAE,KAAK,CAAC,CAACqgB,EAASC,CAAQ,KAAO,CAAE,QAAAD,EAAS,SAAAC,GAAW,CAC1D,CAEA,SAASC,GAAczD,EAAKC,EAAMhR,EAAM,CACtC,IAAIuU,EACJ,MAAMF,EAAWrU,EAAK,YACjByC,GAAS1O,GAAG,SAAS0O,EAAM,CAAE,OAAQ,EAAI,CAAE,EAC3CA,GAAS1O,GAAG,UAAU0O,EAAM,CAAE,OAAQ,EAAI,CAAE,EAC3C6R,EAAUD,EAAStD,CAAG,EAC5B,GAAI,CACFwD,EAAWF,EAASrD,CAAI,CAC5B,OAAW/c,EAAK,CACZ,GAAIA,EAAI,OAAS,SAAU,MAAO,CAAE,QAAAqgB,EAAS,SAAU,IAAI,EAC3D,MAAMrgB,CACV,CACE,MAAO,CAAE,QAAAqgB,EAAS,SAAAC,CAAQ,CAC5B,CAEA,SAASE,GAAY1D,EAAKC,EAAM0D,EAAU1U,EAAM4K,EAAI,CAClDoE,GAAK,YAAYoF,EAAQ,EAAErD,EAAKC,EAAMhR,EAAM,CAAC/L,EAAK6Z,IAAU,CAC1D,GAAI7Z,EAAK,OAAO2W,EAAG3W,CAAG,EACtB,KAAM,CAAE,QAAAqgB,EAAS,SAAAC,GAAazG,EAE9B,GAAIyG,EAAU,CACZ,GAAII,GAAaL,EAASC,CAAQ,EAAG,CACnC,MAAMK,EAAcjhB,GAAK,SAASod,CAAG,EAC/B8D,EAAelhB,GAAK,SAASqd,CAAI,EACvC,OAAI0D,IAAa,QACfE,IAAgBC,GAChBD,EAAY,YAAW,IAAOC,EAAa,YAAW,EAC/CjK,EAAG,KAAM,CAAE,QAAA0J,EAAS,SAAAC,EAAU,eAAgB,EAAI,CAAE,EAEtD3J,EAAG,IAAI,MAAM,8CAA8C,CAAC,CAC3E,CACM,GAAI0J,EAAQ,YAAW,GAAM,CAACC,EAAS,YAAW,EAChD,OAAO3J,EAAG,IAAI,MAAM,mCAAmCoG,CAAI,qBAAqBD,CAAG,IAAI,CAAC,EAE1F,GAAI,CAACuD,EAAQ,YAAW,GAAMC,EAAS,YAAW,EAChD,OAAO3J,EAAG,IAAI,MAAM,+BAA+BoG,CAAI,yBAAyBD,CAAG,IAAI,CAAC,CAEhG,CAEI,OAAIuD,EAAQ,YAAW,GAAMQ,GAAY/D,EAAKC,CAAI,EACzCpG,EAAG,IAAI,MAAMmK,GAAOhE,EAAKC,EAAM0D,CAAQ,CAAC,CAAC,EAE3C9J,EAAG,KAAM,CAAE,QAAA0J,EAAS,SAAAC,CAAQ,CAAE,CACzC,CAAG,CACH,CAEA,SAASS,GAAgBjE,EAAKC,EAAM0D,EAAU1U,EAAM,CAClD,KAAM,CAAE,QAAAsU,EAAS,SAAAC,CAAQ,EAAKC,GAAazD,EAAKC,EAAMhR,CAAI,EAE1D,GAAIuU,EAAU,CACZ,GAAII,GAAaL,EAASC,CAAQ,EAAG,CACnC,MAAMK,EAAcjhB,GAAK,SAASod,CAAG,EAC/B8D,EAAelhB,GAAK,SAASqd,CAAI,EACvC,GAAI0D,IAAa,QACfE,IAAgBC,GAChBD,EAAY,YAAW,IAAOC,EAAa,YAAW,EACtD,MAAO,CAAE,QAAAP,EAAS,SAAAC,EAAU,eAAgB,EAAI,EAElD,MAAM,IAAI,MAAM,8CAA8C,CACpE,CACI,GAAID,EAAQ,YAAW,GAAM,CAACC,EAAS,YAAW,EAChD,MAAM,IAAI,MAAM,mCAAmCvD,CAAI,qBAAqBD,CAAG,IAAI,EAErF,GAAI,CAACuD,EAAQ,YAAW,GAAMC,EAAS,YAAW,EAChD,MAAM,IAAI,MAAM,+BAA+BvD,CAAI,yBAAyBD,CAAG,IAAI,CAEzF,CAEE,GAAIuD,EAAQ,YAAW,GAAMQ,GAAY/D,EAAKC,CAAI,EAChD,MAAM,IAAI,MAAM+D,GAAOhE,EAAKC,EAAM0D,CAAQ,CAAC,EAE7C,MAAO,CAAE,QAAAJ,EAAS,SAAAC,CAAQ,CAC5B,CAMA,SAASU,GAAkBlE,EAAKuD,EAAStD,EAAM0D,EAAU9J,EAAI,CAC3D,MAAMsK,EAAYvhB,GAAK,QAAQA,GAAK,QAAQod,CAAG,CAAC,EAC1CoE,EAAaxhB,GAAK,QAAQA,GAAK,QAAQqd,CAAI,CAAC,EAClD,GAAImE,IAAeD,GAAaC,IAAexhB,GAAK,MAAMwhB,CAAU,EAAE,KAAM,OAAOvK,EAAE,EACrF7W,GAAG,KAAKohB,EAAY,CAAE,OAAQ,IAAQ,CAAClhB,EAAKsgB,IACtCtgB,EACEA,EAAI,OAAS,SAAiB2W,EAAE,EAC7BA,EAAG3W,CAAG,EAEX0gB,GAAaL,EAASC,CAAQ,EACzB3J,EAAG,IAAI,MAAMmK,GAAOhE,EAAKC,EAAM0D,CAAQ,CAAC,CAAC,EAE3CO,GAAiBlE,EAAKuD,EAASa,EAAYT,EAAU9J,CAAE,CAC/D,CACH,CAEA,SAASwK,GAAsBrE,EAAKuD,EAAStD,EAAM0D,EAAU,CAC3D,MAAMQ,EAAYvhB,GAAK,QAAQA,GAAK,QAAQod,CAAG,CAAC,EAC1CoE,EAAaxhB,GAAK,QAAQA,GAAK,QAAQqd,CAAI,CAAC,EAClD,GAAImE,IAAeD,GAAaC,IAAexhB,GAAK,MAAMwhB,CAAU,EAAE,KAAM,OAC5E,IAAIZ,EACJ,GAAI,CACFA,EAAWxgB,GAAG,SAASohB,EAAY,CAAE,OAAQ,EAAI,CAAE,CACvD,OAAWlhB,EAAK,CACZ,GAAIA,EAAI,OAAS,SAAU,OAC3B,MAAMA,CACV,CACE,GAAI0gB,GAAaL,EAASC,CAAQ,EAChC,MAAM,IAAI,MAAMQ,GAAOhE,EAAKC,EAAM0D,CAAQ,CAAC,EAE7C,OAAOU,GAAqBrE,EAAKuD,EAASa,EAAYT,CAAQ,CAChE,CAEA,SAASC,GAAcL,EAASC,EAAU,CACxC,OAAOA,EAAS,KAAOA,EAAS,KAAOA,EAAS,MAAQD,EAAQ,KAAOC,EAAS,MAAQD,EAAQ,GAClG,CAIA,SAASQ,GAAa/D,EAAKC,EAAM,CAC/B,MAAMqE,EAAS1hB,GAAK,QAAQod,CAAG,EAAE,MAAMpd,GAAK,GAAG,EAAE,OAAO,GAAK,CAAC,EACxD2hB,EAAU3hB,GAAK,QAAQqd,CAAI,EAAE,MAAMrd,GAAK,GAAG,EAAE,OAAO,GAAK,CAAC,EAChE,OAAO0hB,EAAO,OAAO,CAACE,EAAKC,EAAK/Y,IAAM8Y,GAAOD,EAAQ7Y,CAAC,IAAM+Y,EAAK,EAAI,CACvE,CAEA,SAAST,GAAQhE,EAAKC,EAAM0D,EAAU,CACpC,MAAO,UAAUA,CAAQ,KAAK3D,CAAG,mCAAmCC,CAAI,IAC1E,CAEA,IAAApc,GAAiB,CACf,WAAA6f,GACA,eAAAO,GACA,iBAAAC,GACA,qBAAAG,GACA,YAAAN,GACF,aAAEH,EACF,ECvJA,MAAM5gB,GAAK+W,GACLnX,GAAOkb,EACP6E,GAAS5E,GAAqB,OAC9B6E,GAAa5E,GAA0B,WACvC8E,GAAe5E,GAA0B,aACzCra,GAAOmb,GAEb,SAASnB,GAAMmC,EAAKC,EAAMhR,EAAM4K,EAAI,CAC9B,OAAO5K,GAAS,YAAc,CAAC4K,GACjCA,EAAK5K,EACLA,EAAO,CAAA,GACE,OAAOA,GAAS,aACzBA,EAAO,CAAE,OAAQA,CAAI,GAGvB4K,EAAKA,GAAM,UAAY,CAAA,EACvB5K,EAAOA,GAAQ,CAAA,EAEfA,EAAK,QAAU,YAAaA,EAAO,CAAC,CAACA,EAAK,QAAU,GACpDA,EAAK,UAAY,cAAeA,EAAO,CAAC,CAACA,EAAK,UAAYA,EAAK,QAG3DA,EAAK,oBAAsB,QAAQ,OAAS,QAC9C,QAAQ,YACN;AAAA;AAAA,+DAEA,UAAW,mBACjB,EAGEpL,GAAK,WAAWmc,EAAKC,EAAM,OAAQhR,EAAM,CAAC/L,EAAK6Z,IAAU,CACvD,GAAI7Z,EAAK,OAAO2W,EAAG3W,CAAG,EACtB,KAAM,CAAE,QAAAqgB,EAAS,SAAAC,GAAazG,EAC9BlZ,GAAK,iBAAiBmc,EAAKuD,EAAStD,EAAM,OAAQ/c,GAC5CA,EAAY2W,EAAG3W,CAAG,EAClB+L,EAAK,OAAeyV,GAAaC,GAAgBnB,EAAUxD,EAAKC,EAAMhR,EAAM4K,CAAE,EAC3E8K,GAAenB,EAAUxD,EAAKC,EAAMhR,EAAM4K,CAAE,CACpD,CACL,CAAG,CACH,CAEA,SAAS8K,GAAgBnB,EAAUxD,EAAKC,EAAMhR,EAAM4K,EAAI,CACtD,MAAMuK,EAAaxhB,GAAK,QAAQqd,CAAI,EACpC2C,GAAWwB,EAAY,CAAClhB,EAAK0hB,IAAc,CACzC,GAAI1hB,EAAK,OAAO2W,EAAG3W,CAAG,EACtB,GAAI0hB,EAAW,OAAOvB,GAASG,EAAUxD,EAAKC,EAAMhR,EAAM4K,CAAE,EAC5D8I,GAAOyB,EAAYlhB,GACbA,EAAY2W,EAAG3W,CAAG,EACfmgB,GAASG,EAAUxD,EAAKC,EAAMhR,EAAM4K,CAAE,CAC9C,CACL,CAAG,CACH,CAEA,SAAS6K,GAAcG,EAAWrB,EAAUxD,EAAKC,EAAMhR,EAAM4K,EAAI,CAC/D,QAAQ,QAAQ5K,EAAK,OAAO+Q,EAAKC,CAAI,CAAC,EAAE,KAAK6E,GACvCA,EAAgBD,EAAUrB,EAAUxD,EAAKC,EAAMhR,EAAM4K,CAAE,EACpDA,EAAE,EACRH,GAASG,EAAGH,CAAK,CAAC,CACvB,CAEA,SAASqL,GAAWvB,EAAUxD,EAAKC,EAAMhR,EAAM4K,EAAI,CACjD,OAAI5K,EAAK,OAAeyV,GAAarB,GAAUG,EAAUxD,EAAKC,EAAMhR,EAAM4K,CAAE,EACrEwJ,GAASG,EAAUxD,EAAKC,EAAMhR,EAAM4K,CAAE,CAC/C,CAEA,SAASwJ,GAAUG,EAAUxD,EAAKC,EAAMhR,EAAM4K,EAAI,EACnC5K,EAAK,YAAcjM,GAAG,KAAOA,GAAG,OACxCgd,EAAK,CAAC9c,EAAKqgB,IACVrgB,EAAY2W,EAAG3W,CAAG,EAElBqgB,EAAQ,YAAW,EAAWyB,GAAMzB,EAASC,EAAUxD,EAAKC,EAAMhR,EAAM4K,CAAE,EACrE0J,EAAQ,OAAM,GACdA,EAAQ,kBAAiB,GACzBA,EAAQ,gBAAwB0B,GAAO1B,EAASC,EAAUxD,EAAKC,EAAMhR,EAAM4K,CAAE,EAC7E0J,EAAQ,eAAc,EAAW2B,GAAO1B,EAAUxD,EAAKC,EAAMhR,EAAM4K,CAAE,EACrE0J,EAAQ,SAAQ,EAAW1J,EAAG,IAAI,MAAM,8BAA8BmG,CAAG,EAAE,CAAC,EAC5EuD,EAAQ,OAAM,EAAW1J,EAAG,IAAI,MAAM,4BAA4BmG,CAAG,EAAE,CAAC,EAC1EnG,EAAG,IAAI,MAAM,iBAAiBmG,CAAG,EAAE,CAAC,CAC5C,CACH,CAEA,SAASiF,GAAQ1B,EAASC,EAAUxD,EAAKC,EAAMhR,EAAM4K,EAAI,CACvD,OAAK2J,EACE2B,GAAY5B,EAASvD,EAAKC,EAAMhR,EAAM4K,CAAE,EADzBkG,GAASwD,EAASvD,EAAKC,EAAMhR,EAAM4K,CAAE,CAE7D,CAEA,SAASsL,GAAa5B,EAASvD,EAAKC,EAAMhR,EAAM4K,EAAI,CAClD,GAAI5K,EAAK,UACPjM,GAAG,OAAOid,EAAM/c,GACVA,EAAY2W,EAAG3W,CAAG,EACf6c,GAASwD,EAASvD,EAAKC,EAAMhR,EAAM4K,CAAE,CAC7C,MACI,QAAI5K,EAAK,aACP4K,EAAG,IAAI,MAAM,IAAIoG,CAAI,kBAAkB,CAAC,EACnCpG,EAAE,CAClB,CAEA,SAASkG,GAAUwD,EAASvD,EAAKC,EAAMhR,EAAM4K,EAAI,CAC/C7W,GAAG,SAASgd,EAAKC,EAAM/c,GACjBA,EAAY2W,EAAG3W,CAAG,EAClB+L,EAAK,mBAA2BmW,GAAwB7B,EAAQ,KAAMvD,EAAKC,EAAMpG,CAAE,EAChFwL,GAAYpF,EAAMsD,EAAQ,KAAM1J,CAAE,CAC1C,CACH,CAEA,SAASuL,GAAyBE,EAAStF,EAAKC,EAAMpG,EAAI,CAIxD,OAAI0L,GAAkBD,CAAO,EACpBE,GAAiBvF,EAAMqF,EAASpiB,GACjCA,EAAY2W,EAAG3W,CAAG,EACfuiB,GAAyBH,EAAStF,EAAKC,EAAMpG,CAAE,CACvD,EAEI4L,GAAyBH,EAAStF,EAAKC,EAAMpG,CAAE,CACxD,CAEA,SAAS0L,GAAmBD,EAAS,CACnC,OAAQA,EAAU,OAAW,CAC/B,CAEA,SAASE,GAAkBvF,EAAMqF,EAASzL,EAAI,CAC5C,OAAOwL,GAAYpF,EAAMqF,EAAU,IAAOzL,CAAE,CAC9C,CAEA,SAAS4L,GAA0BH,EAAStF,EAAKC,EAAMpG,EAAI,CACzD6L,GAAkB1F,EAAKC,EAAM/c,GACvBA,EAAY2W,EAAG3W,CAAG,EACfmiB,GAAYpF,EAAMqF,EAASzL,CAAE,CACrC,CACH,CAEA,SAASwL,GAAapF,EAAMqF,EAASzL,EAAI,CACvC,OAAO7W,GAAG,MAAMid,EAAMqF,EAASzL,CAAE,CACnC,CAEA,SAAS6L,GAAmB1F,EAAKC,EAAMpG,EAAI,CAIzC7W,GAAG,KAAKgd,EAAK,CAAC9c,EAAKyiB,IACbziB,EAAY2W,EAAG3W,CAAG,EACf4f,GAAa7C,EAAM0F,EAAe,MAAOA,EAAe,MAAO9L,CAAE,CACzE,CACH,CAEA,SAASmL,GAAOzB,EAASC,EAAUxD,EAAKC,EAAMhR,EAAM4K,EAAI,CACtD,OAAK2J,EACEoC,GAAQ5F,EAAKC,EAAMhR,EAAM4K,CAAE,EADZgM,GAAatC,EAAQ,KAAMvD,EAAKC,EAAMhR,EAAM4K,CAAE,CAEtE,CAEA,SAASgM,GAAcP,EAAStF,EAAKC,EAAMhR,EAAM4K,EAAI,CACnD7W,GAAG,MAAMid,EAAM/c,GAAO,CACpB,GAAIA,EAAK,OAAO2W,EAAG3W,CAAG,EACtB0iB,GAAQ5F,EAAKC,EAAMhR,EAAM/L,GACnBA,EAAY2W,EAAG3W,CAAG,EACfmiB,GAAYpF,EAAMqF,EAASzL,CAAE,CACrC,CACL,CAAG,CACH,CAEA,SAAS+L,GAAS5F,EAAKC,EAAMhR,EAAM4K,EAAI,CACrC7W,GAAG,QAAQgd,EAAK,CAAC9c,EAAK4iB,IAChB5iB,EAAY2W,EAAG3W,CAAG,EACf6iB,GAAaD,EAAO9F,EAAKC,EAAMhR,EAAM4K,CAAE,CAC/C,CACH,CAEA,SAASkM,GAAcD,EAAO9F,EAAKC,EAAMhR,EAAM4K,EAAI,CACjD,MAAMmM,EAAOF,EAAM,IAAG,EACtB,OAAKE,EACEC,GAAYH,EAAOE,EAAMhG,EAAKC,EAAMhR,EAAM4K,CAAE,EADjCA,EAAE,CAEtB,CAEA,SAASoM,GAAaH,EAAOE,EAAMhG,EAAKC,EAAMhR,EAAM4K,EAAI,CACtD,MAAMqM,EAAUtjB,GAAK,KAAKod,EAAKgG,CAAI,EAC7BG,EAAWvjB,GAAK,KAAKqd,EAAM+F,CAAI,EACrCniB,GAAK,WAAWqiB,EAASC,EAAU,OAAQlX,EAAM,CAAC/L,EAAK6Z,IAAU,CAC/D,GAAI7Z,EAAK,OAAO2W,EAAG3W,CAAG,EACtB,KAAM,CAAE,SAAAsgB,CAAQ,EAAKzG,EACrBgI,GAAUvB,EAAU0C,EAASC,EAAUlX,EAAM/L,GACvCA,EAAY2W,EAAG3W,CAAG,EACf6iB,GAAaD,EAAO9F,EAAKC,EAAMhR,EAAM4K,CAAE,CAC/C,CACL,CAAG,CACH,CAEA,SAASqL,GAAQ1B,EAAUxD,EAAKC,EAAMhR,EAAM4K,EAAI,CAC9C7W,GAAG,SAASgd,EAAK,CAAC9c,EAAKkjB,IAAgB,CACrC,GAAIljB,EAAK,OAAO2W,EAAG3W,CAAG,EAKtB,GAJI+L,EAAK,cACPmX,EAAcxjB,GAAK,QAAQ,QAAQ,IAAG,EAAIwjB,CAAW,GAGlD5C,EAGHxgB,GAAG,SAASid,EAAM,CAAC/c,EAAKmjB,IAClBnjB,EAIEA,EAAI,OAAS,UAAYA,EAAI,OAAS,UAAkBF,GAAG,QAAQojB,EAAanG,EAAMpG,CAAE,EACrFA,EAAG3W,CAAG,GAEX+L,EAAK,cACPoX,EAAezjB,GAAK,QAAQ,QAAQ,IAAG,EAAIyjB,CAAY,GAErDxiB,GAAK,YAAYuiB,EAAaC,CAAY,EACrCxM,EAAG,IAAI,MAAM,gBAAgBuM,CAAW,mCAAmCC,CAAY,IAAI,CAAC,EAMjG7C,EAAS,eAAiB3f,GAAK,YAAYwiB,EAAcD,CAAW,EAC/DvM,EAAG,IAAI,MAAM,qBAAqBwM,CAAY,WAAWD,CAAW,IAAI,CAAC,EAE3EE,GAASF,EAAanG,EAAMpG,CAAE,EACtC,MAxBD,QAAO7W,GAAG,QAAQojB,EAAanG,EAAMpG,CAAE,CA0B7C,CAAG,CACH,CAEA,SAASyM,GAAUF,EAAanG,EAAMpG,EAAI,CACxC7W,GAAG,OAAOid,EAAM/c,GACVA,EAAY2W,EAAG3W,CAAG,EACfF,GAAG,QAAQojB,EAAanG,EAAMpG,CAAE,CACxC,CACH,CAEA,IAAA0M,GAAiB1I,GCxOjB,MAAM7a,GAAK+W,GACLnX,GAAOkb,EACP0I,GAAazI,GAAqB,WAClCoF,GAAmBnF,GAA0B,iBAC7Cna,GAAOqa,GAEb,SAASuI,GAAUzG,EAAKC,EAAMhR,EAAM,CAC9B,OAAOA,GAAS,aAClBA,EAAO,CAAE,OAAQA,CAAI,GAGvBA,EAAOA,GAAQ,CAAA,EACfA,EAAK,QAAU,YAAaA,EAAO,CAAC,CAACA,EAAK,QAAU,GACpDA,EAAK,UAAY,cAAeA,EAAO,CAAC,CAACA,EAAK,UAAYA,EAAK,QAG3DA,EAAK,oBAAsB,QAAQ,OAAS,QAC9C,QAAQ,YACN;AAAA;AAAA,+DAEA,UAAW,mBACjB,EAGE,KAAM,CAAE,QAAAsU,EAAS,SAAAC,GAAa3f,GAAK,eAAemc,EAAKC,EAAM,OAAQhR,CAAI,EACzEpL,OAAAA,GAAK,qBAAqBmc,EAAKuD,EAAStD,EAAM,MAAM,EAC7CyG,GAAoBlD,EAAUxD,EAAKC,EAAMhR,CAAI,CACtD,CAEA,SAASyX,GAAqBlD,EAAUxD,EAAKC,EAAMhR,EAAM,CACvD,GAAIA,EAAK,QAAU,CAACA,EAAK,OAAO+Q,EAAKC,CAAI,EAAG,OAC5C,MAAMmE,EAAaxhB,GAAK,QAAQqd,CAAI,EACpC,OAAKjd,GAAG,WAAWohB,CAAU,GAAGoC,GAAWpC,CAAU,EAC9Cf,GAASG,EAAUxD,EAAKC,EAAMhR,CAAI,CAC3C,CAEA,SAAS8V,GAAWvB,EAAUxD,EAAKC,EAAMhR,EAAM,CAC7C,GAAI,EAAAA,EAAK,QAAU,CAACA,EAAK,OAAO+Q,EAAKC,CAAI,GACzC,OAAOoD,GAASG,EAAUxD,EAAKC,EAAMhR,CAAI,CAC3C,CAEA,SAASoU,GAAUG,EAAUxD,EAAKC,EAAMhR,EAAM,CAE5C,MAAMsU,GADWtU,EAAK,YAAcjM,GAAG,SAAWA,GAAG,WAC5Bgd,CAAG,EAE5B,GAAIuD,EAAQ,YAAW,EAAI,OAAOyB,GAAMzB,EAASC,EAAUxD,EAAKC,EAAMhR,CAAI,EACrE,GAAIsU,EAAQ,OAAM,GACdA,EAAQ,kBAAiB,GACzBA,EAAQ,cAAa,EAAI,OAAO0B,GAAO1B,EAASC,EAAUxD,EAAKC,EAAMhR,CAAI,EAC7E,GAAIsU,EAAQ,iBAAkB,OAAO2B,GAAO1B,EAAUxD,EAAKC,EAAMhR,CAAI,EACrE,MAAIsU,EAAQ,WAAkB,IAAI,MAAM,8BAA8BvD,CAAG,EAAE,EACvEuD,EAAQ,SAAgB,IAAI,MAAM,4BAA4BvD,CAAG,EAAE,EACtE,IAAI,MAAM,iBAAiBA,CAAG,EAAE,CACxC,CAEA,SAASiF,GAAQ1B,EAASC,EAAUxD,EAAKC,EAAMhR,EAAM,CACnD,OAAKuU,EACE2B,GAAY5B,EAASvD,EAAKC,EAAMhR,CAAI,EADrB8Q,GAASwD,EAASvD,EAAKC,EAAMhR,CAAI,CAEzD,CAEA,SAASkW,GAAa5B,EAASvD,EAAKC,EAAMhR,EAAM,CAC9C,GAAIA,EAAK,UACPjM,OAAAA,GAAG,WAAWid,CAAI,EACXF,GAASwD,EAASvD,EAAKC,EAAMhR,CAAI,EACnC,GAAIA,EAAK,aACd,MAAM,IAAI,MAAM,IAAIgR,CAAI,kBAAkB,CAE9C,CAEA,SAASF,GAAUwD,EAASvD,EAAKC,EAAMhR,EAAM,CAC3CjM,OAAAA,GAAG,aAAagd,EAAKC,CAAI,EACrBhR,EAAK,oBAAoB0X,GAAiBpD,EAAQ,KAAMvD,EAAKC,CAAI,EAC9DoF,GAAYpF,EAAMsD,EAAQ,IAAI,CACvC,CAEA,SAASoD,GAAkBrB,EAAStF,EAAKC,EAAM,CAI7C,OAAIsF,GAAkBD,CAAO,GAAGE,GAAiBvF,EAAMqF,CAAO,EACvDI,GAAkB1F,EAAKC,CAAI,CACpC,CAEA,SAASsF,GAAmBD,EAAS,CACnC,OAAQA,EAAU,OAAW,CAC/B,CAEA,SAASE,GAAkBvF,EAAMqF,EAAS,CACxC,OAAOD,GAAYpF,EAAMqF,EAAU,GAAK,CAC1C,CAEA,SAASD,GAAapF,EAAMqF,EAAS,CACnC,OAAOtiB,GAAG,UAAUid,EAAMqF,CAAO,CACnC,CAEA,SAASI,GAAmB1F,EAAKC,EAAM,CAIrC,MAAM0F,EAAiB3iB,GAAG,SAASgd,CAAG,EACtC,OAAOmD,GAAiBlD,EAAM0F,EAAe,MAAOA,EAAe,KAAK,CAC1E,CAEA,SAASX,GAAOzB,EAASC,EAAUxD,EAAKC,EAAMhR,EAAM,CAClD,OAAKuU,EACEoC,GAAQ5F,EAAKC,EAAMhR,CAAI,EADR4W,GAAatC,EAAQ,KAAMvD,EAAKC,EAAMhR,CAAI,CAElE,CAEA,SAAS4W,GAAcP,EAAStF,EAAKC,EAAMhR,EAAM,CAC/CjM,OAAAA,GAAG,UAAUid,CAAI,EACjB2F,GAAQ5F,EAAKC,EAAMhR,CAAI,EAChBoW,GAAYpF,EAAMqF,CAAO,CAClC,CAEA,SAASM,GAAS5F,EAAKC,EAAMhR,EAAM,CACjCjM,GAAG,YAAYgd,CAAG,EAAE,QAAQgG,GAAQC,GAAYD,EAAMhG,EAAKC,EAAMhR,CAAI,CAAC,CACxE,CAEA,SAASgX,GAAaD,EAAMhG,EAAKC,EAAMhR,EAAM,CAC3C,MAAMiX,EAAUtjB,GAAK,KAAKod,EAAKgG,CAAI,EAC7BG,EAAWvjB,GAAK,KAAKqd,EAAM+F,CAAI,EAC/B,CAAE,SAAAxC,CAAQ,EAAK3f,GAAK,eAAeqiB,EAASC,EAAU,OAAQlX,CAAI,EACxE,OAAO8V,GAAUvB,EAAU0C,EAASC,EAAUlX,CAAI,CACpD,CAEA,SAASiW,GAAQ1B,EAAUxD,EAAKC,EAAMhR,EAAM,CAC1C,IAAImX,EAAcpjB,GAAG,aAAagd,CAAG,EAKrC,GAJI/Q,EAAK,cACPmX,EAAcxjB,GAAK,QAAQ,QAAQ,IAAG,EAAIwjB,CAAW,GAGlD5C,EAEE,CACL,IAAI6C,EACJ,GAAI,CACFA,EAAerjB,GAAG,aAAaid,CAAI,CACzC,OAAa/c,EAAK,CAIZ,GAAIA,EAAI,OAAS,UAAYA,EAAI,OAAS,UAAW,OAAOF,GAAG,YAAYojB,EAAanG,CAAI,EAC5F,MAAM/c,CACZ,CAII,GAHI+L,EAAK,cACPoX,EAAezjB,GAAK,QAAQ,QAAQ,IAAG,EAAIyjB,CAAY,GAErDxiB,GAAK,YAAYuiB,EAAaC,CAAY,EAC5C,MAAM,IAAI,MAAM,gBAAgBD,CAAW,mCAAmCC,CAAY,IAAI,EAMhG,GAAIrjB,GAAG,SAASid,CAAI,EAAE,eAAiBpc,GAAK,YAAYwiB,EAAcD,CAAW,EAC/E,MAAM,IAAI,MAAM,qBAAqBC,CAAY,WAAWD,CAAW,IAAI,EAE7E,OAAOE,GAASF,EAAanG,CAAI,CACrC,KA1BI,QAAOjd,GAAG,YAAYojB,EAAanG,CAAI,CA2B3C,CAEA,SAASqG,GAAUF,EAAanG,EAAM,CACpCjd,OAAAA,GAAG,WAAWid,CAAI,EACXjd,GAAG,YAAYojB,EAAanG,CAAI,CACzC,CAEA,IAAA2G,GAAiBH,GCtKjB,MAAM5E,GAAI9H,GAAwB,aAClC,IAAA8D,GAAiB,CACf,KAAMgE,GAAE/D,EAAiB,EACzB,SAAUC,EACZ,ECJA,MAAM/a,GAAK+W,GACLnX,GAAOkb,EACP+I,GAAS9I,GAET+I,GAAa,QAAQ,WAAa,QAExC,SAASvE,GAAUzF,EAAS,CACV,CACd,SACA,QACA,OACA,QACA,QACA,SACJ,EACU,QAAQ7Y,GAAK,CACnB6Y,EAAQ7Y,CAAC,EAAI6Y,EAAQ7Y,CAAC,GAAKjB,GAAGiB,CAAC,EAC/BA,EAAIA,EAAI,OACR6Y,EAAQ7Y,CAAC,EAAI6Y,EAAQ7Y,CAAC,GAAKjB,GAAGiB,CAAC,CACnC,CAAG,EAED6Y,EAAQ,aAAeA,EAAQ,cAAgB,CACjD,CAEA,SAASiK,GAAQ5hB,EAAG2X,EAASjD,EAAI,CAC/B,IAAImN,EAAY,EAEZ,OAAOlK,GAAY,aACrBjD,EAAKiD,EACLA,EAAU,CAAA,GAGZ+J,GAAO1hB,EAAG,sBAAsB,EAChC0hB,GAAO,YAAY,OAAO1hB,EAAG,SAAU,iCAAiC,EACxE0hB,GAAO,YAAY,OAAOhN,EAAI,WAAY,oCAAoC,EAC9EgN,GAAO/J,EAAS,2CAA2C,EAC3D+J,GAAO,YAAY,OAAO/J,EAAS,SAAU,kCAAkC,EAE/EyF,GAASzF,CAAO,EAEhBmK,GAAQ9hB,EAAG2X,EAAS,SAASvB,EAAIC,EAAI,CACnC,GAAIA,EAAI,CACN,IAAKA,EAAG,OAAS,SAAWA,EAAG,OAAS,aAAeA,EAAG,OAAS,UAC/DwL,EAAYlK,EAAQ,aAAc,CACpCkK,IACA,MAAMhiB,EAAOgiB,EAAY,IAEzB,OAAO,WAAW,IAAMC,GAAQ9hB,EAAG2X,EAASvB,CAAE,EAAGvW,CAAI,CAC7D,CAGUwW,EAAG,OAAS,WAAUA,EAAK,KACrC,CAEI3B,EAAG2B,CAAE,CACT,CAAG,CACH,CAaA,SAASyL,GAAS9hB,EAAG2X,EAASjD,EAAI,CAChCgN,GAAO1hB,CAAC,EACR0hB,GAAO/J,CAAO,EACd+J,GAAO,OAAOhN,GAAO,UAAU,EAI/BiD,EAAQ,MAAM3X,EAAG,CAACqW,EAAIE,IAAO,CAC3B,GAAIF,GAAMA,EAAG,OAAS,SACpB,OAAO3B,EAAG,IAAI,EAIhB,GAAI2B,GAAMA,EAAG,OAAS,SAAWsL,GAC/B,OAAOI,GAAY/hB,EAAG2X,EAAStB,EAAI3B,CAAE,EAGvC,GAAI6B,GAAMA,EAAG,cACX,OAAOyL,GAAMhiB,EAAG2X,EAAStB,EAAI3B,CAAE,EAGjCiD,EAAQ,OAAO3X,EAAGqW,GAAM,CACtB,GAAIA,EAAI,CACN,GAAIA,EAAG,OAAS,SACd,OAAO3B,EAAG,IAAI,EAEhB,GAAI2B,EAAG,OAAS,QACd,OAAQsL,GACJI,GAAY/hB,EAAG2X,EAAStB,EAAI3B,CAAE,EAC9BsN,GAAMhiB,EAAG2X,EAAStB,EAAI3B,CAAE,EAE9B,GAAI2B,EAAG,OAAS,SACd,OAAO2L,GAAMhiB,EAAG2X,EAAStB,EAAI3B,CAAE,CAEzC,CACM,OAAOA,EAAG2B,CAAE,CAClB,CAAK,CACL,CAAG,CACH,CAEA,SAAS0L,GAAa/hB,EAAG2X,EAAStB,EAAI3B,EAAI,CACxCgN,GAAO1hB,CAAC,EACR0hB,GAAO/J,CAAO,EACd+J,GAAO,OAAOhN,GAAO,UAAU,EAE/BiD,EAAQ,MAAM3X,EAAG,IAAOuX,GAAO,CACzBA,EACF7C,EAAG6C,EAAI,OAAS,SAAW,KAAOlB,CAAE,EAEpCsB,EAAQ,KAAK3X,EAAG,CAACiiB,EAAKrK,IAAU,CAC1BqK,EACFvN,EAAGuN,EAAI,OAAS,SAAW,KAAO5L,CAAE,EAC3BuB,EAAM,cACfoK,GAAMhiB,EAAG2X,EAAStB,EAAI3B,CAAE,EAExBiD,EAAQ,OAAO3X,EAAG0U,CAAE,CAE9B,CAAO,CAEP,CAAG,CACH,CAEA,SAASwN,GAAiBliB,EAAG2X,EAAStB,EAAI,CACxC,IAAIuB,EAEJ8J,GAAO1hB,CAAC,EACR0hB,GAAO/J,CAAO,EAEd,GAAI,CACFA,EAAQ,UAAU3X,EAAG,GAAK,CAC9B,OAAWuX,EAAK,CACZ,GAAIA,EAAI,OAAS,SACf,OAEA,MAAMlB,CAEZ,CAEE,GAAI,CACFuB,EAAQD,EAAQ,SAAS3X,CAAC,CAC9B,OAAWiiB,EAAK,CACZ,GAAIA,EAAI,OAAS,SACf,OAEA,MAAM5L,CAEZ,CAEMuB,EAAM,cACRuK,GAAUniB,EAAG2X,EAAStB,CAAE,EAExBsB,EAAQ,WAAW3X,CAAC,CAExB,CAEA,SAASgiB,GAAOhiB,EAAG2X,EAASyK,EAAY1N,EAAI,CAC1CgN,GAAO1hB,CAAC,EACR0hB,GAAO/J,CAAO,EACd+J,GAAO,OAAOhN,GAAO,UAAU,EAK/BiD,EAAQ,MAAM3X,EAAGqW,GAAM,CACjBA,IAAOA,EAAG,OAAS,aAAeA,EAAG,OAAS,UAAYA,EAAG,OAAS,SACxEgM,GAAOriB,EAAG2X,EAASjD,CAAE,EACZ2B,GAAMA,EAAG,OAAS,UAC3B3B,EAAG0N,CAAU,EAEb1N,EAAG2B,CAAE,CAEX,CAAG,CACH,CAEA,SAASgM,GAAQriB,EAAG2X,EAASjD,EAAI,CAC/BgN,GAAO1hB,CAAC,EACR0hB,GAAO/J,CAAO,EACd+J,GAAO,OAAOhN,GAAO,UAAU,EAE/BiD,EAAQ,QAAQ3X,EAAG,CAACqW,EAAIiF,IAAU,CAChC,GAAIjF,EAAI,OAAO3B,EAAG2B,CAAE,EAEpB,IAAIiM,EAAIhH,EAAM,OACViH,EAEJ,GAAID,IAAM,EAAG,OAAO3K,EAAQ,MAAM3X,EAAG0U,CAAE,EAEvC4G,EAAM,QAAQ9c,GAAK,CACjBojB,GAAOnkB,GAAK,KAAKuC,EAAGxB,CAAC,EAAGmZ,EAAStB,GAAM,CACrC,GAAI,CAAAkM,EAGJ,IAAIlM,EAAI,OAAO3B,EAAG6N,EAAWlM,CAAE,EAC3B,EAAEiM,IAAM,GACV3K,EAAQ,MAAM3X,EAAG0U,CAAE,EAE7B,CAAO,CACP,CAAK,CACL,CAAG,CACH,CAKA,SAAS8N,GAAYxiB,EAAG2X,EAAS,CAC/B,IAAIpB,EAEJoB,EAAUA,GAAW,CAAA,EACrByF,GAASzF,CAAO,EAEhB+J,GAAO1hB,EAAG,sBAAsB,EAChC0hB,GAAO,YAAY,OAAO1hB,EAAG,SAAU,iCAAiC,EACxE0hB,GAAO/J,EAAS,yBAAyB,EACzC+J,GAAO,YAAY,OAAO/J,EAAS,SAAU,kCAAkC,EAE/E,GAAI,CACFpB,EAAKoB,EAAQ,UAAU3X,CAAC,CAC5B,OAAWqW,EAAI,CACX,GAAIA,EAAG,OAAS,SACd,OAIEA,EAAG,OAAS,SAAWsL,IACzBO,GAAgBliB,EAAG2X,EAAStB,CAAE,CAEpC,CAEE,GAAI,CAEEE,GAAMA,EAAG,cACX4L,GAAUniB,EAAG2X,EAAS,IAAI,EAE1BA,EAAQ,WAAW3X,CAAC,CAE1B,OAAWqW,EAAI,CACX,GAAIA,EAAG,OAAS,SACd,OACK,GAAIA,EAAG,OAAS,QACrB,OAAOsL,GAAYO,GAAgBliB,EAAG2X,EAAStB,CAAE,EAAI8L,GAAUniB,EAAG2X,EAAStB,CAAE,EACxE,GAAIA,EAAG,OAAS,SACrB,MAAMA,EAER8L,GAAUniB,EAAG2X,EAAStB,CAAE,CAC5B,CACA,CAEA,SAAS8L,GAAWniB,EAAG2X,EAASyK,EAAY,CAC1CV,GAAO1hB,CAAC,EACR0hB,GAAO/J,CAAO,EAEd,GAAI,CACFA,EAAQ,UAAU3X,CAAC,CACvB,OAAWqW,EAAI,CACX,GAAIA,EAAG,OAAS,UACd,MAAM+L,EACD,GAAI/L,EAAG,OAAS,aAAeA,EAAG,OAAS,UAAYA,EAAG,OAAS,QACxEoM,GAAWziB,EAAG2X,CAAO,UACZtB,EAAG,OAAS,SACrB,MAAMA,CAEZ,CACA,CAEA,SAASoM,GAAYziB,EAAG2X,EAAS,CAK/B,GAJA+J,GAAO1hB,CAAC,EACR0hB,GAAO/J,CAAO,EACdA,EAAQ,YAAY3X,CAAC,EAAE,QAAQxB,GAAKgkB,GAAW/kB,GAAK,KAAKuC,EAAGxB,CAAC,EAAGmZ,CAAO,CAAC,EAEpEgK,GAAW,CAOb,MAAMle,EAAY,KAAK,IAAG,EAC1B,EACE,IAAI,CAEF,OADYkU,EAAQ,UAAU3X,EAAG2X,CAAO,CAEhD,MAAc,CAAA,OACD,KAAK,MAAQlU,EAAY,IACtC,KAEI,QADYkU,EAAQ,UAAU3X,EAAG2X,CAAO,CAG5C,CAEA,IAAA+K,GAAiBd,GACjBA,GAAO,KAAOY,GC3Sd,MAAM3kB,GAAK+W,GACL8H,GAAI/D,GAAwB,aAC5BiJ,GAAShJ,GAEf,SAAS+J,GAAQllB,EAAMqZ,EAAU,CAE/B,GAAIjZ,GAAG,GAAI,OAAOA,GAAG,GAAGJ,EAAM,CAAE,UAAW,GAAM,MAAO,EAAI,EAAIqZ,CAAQ,EACxE8K,GAAOnkB,EAAMqZ,CAAQ,CACvB,CAEA,SAAS8L,GAAYnlB,EAAM,CAEzB,GAAII,GAAG,OAAQ,OAAOA,GAAG,OAAOJ,EAAM,CAAE,UAAW,GAAM,MAAO,EAAI,CAAE,EACtEmkB,GAAO,KAAKnkB,CAAI,CAClB,CAEA,IAAAolB,GAAiB,CACf,OAAQnG,GAAEiG,EAAM,EAClB,WAAEC,EACF,ECnBA,MAAMlG,GAAI9H,GAAwB,YAC5B/W,GAAK8a,GACLlb,GAAOmb,EACPkK,GAAQjK,GACR8J,GAAS5J,GAETgK,GAAWrG,GAAE,eAAyBxe,EAAK,CAC/C,IAAIyiB,EACJ,GAAI,CACFA,EAAQ,MAAM9iB,GAAG,QAAQK,CAAG,CAChC,MAAU,CACN,OAAO4kB,GAAM,OAAO5kB,CAAG,CAC3B,CAEE,OAAO,QAAQ,IAAIyiB,EAAM,IAAIE,GAAQ8B,GAAO,OAAOllB,GAAK,KAAKS,EAAK2iB,CAAI,CAAC,CAAC,CAAC,CAC3E,CAAC,EAED,SAASmC,GAAc9kB,EAAK,CAC1B,IAAIyiB,EACJ,GAAI,CACFA,EAAQ9iB,GAAG,YAAYK,CAAG,CAC9B,MAAU,CACN,OAAO4kB,GAAM,WAAW5kB,CAAG,CAC/B,CAEEyiB,EAAM,QAAQE,GAAQ,CACpBA,EAAOpjB,GAAK,KAAKS,EAAK2iB,CAAI,EAC1B8B,GAAO,WAAW9B,CAAI,CAC1B,CAAG,CACH,CAEA,IAAAoC,GAAiB,CACf,aAAAD,GACA,aAAcA,GACd,SAAAD,GACA,SAAUA,EACZ,ECpCA,MAAMrG,GAAI9H,GAAwB,aAC5BnX,GAAOkb,EACP9a,GAAK+a,GACLkK,GAAQjK,GAEd,SAASqK,GAAY3W,EAAMuK,EAAU,CACnC,SAASqM,GAAY,CACnBtlB,GAAG,UAAU0O,EAAM,GAAIxO,GAAO,CAC5B,GAAIA,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5B+Y,EAAQ,CACd,CAAK,CACL,CAEEjZ,GAAG,KAAK0O,EAAM,CAACxO,EAAK6Z,IAAU,CAC5B,GAAI,CAAC7Z,GAAO6Z,EAAM,OAAM,EAAI,OAAOd,EAAQ,EAC3C,MAAM5Y,EAAMT,GAAK,QAAQ8O,CAAI,EAC7B1O,GAAG,KAAKK,EAAK,CAACH,EAAK6Z,IAAU,CAC3B,GAAI7Z,EAEF,OAAIA,EAAI,OAAS,SACR+kB,GAAM,OAAO5kB,EAAKH,GAAO,CAC9B,GAAIA,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5BolB,EAAQ,CACpB,CAAW,EAEIrM,EAAS/Y,CAAG,EAGjB6Z,EAAM,YAAW,EAAIuL,EAAQ,EAI/BtlB,GAAG,QAAQK,EAAKH,GAAO,CACrB,GAAIA,EAAK,OAAO+Y,EAAS/Y,CAAG,CACtC,CAAS,CAET,CAAK,CACL,CAAG,CACH,CAEA,SAASqlB,GAAgB7W,EAAM,CAC7B,IAAIqL,EACJ,GAAI,CACFA,EAAQ/Z,GAAG,SAAS0O,CAAI,CAC5B,MAAU,CAAA,CACR,GAAIqL,GAASA,EAAM,SAAU,OAE7B,MAAM1Z,EAAMT,GAAK,QAAQ8O,CAAI,EAC7B,GAAI,CACG1O,GAAG,SAASK,CAAG,EAAE,YAAW,GAG/BL,GAAG,YAAYK,CAAG,CAExB,OAAWH,EAAK,CAEZ,GAAIA,GAAOA,EAAI,OAAS,SAAU+kB,GAAM,WAAW5kB,CAAG,MACjD,OAAMH,CACf,CAEEF,GAAG,cAAc0O,EAAM,EAAE,CAC3B,CAEA,IAAAA,GAAiB,CACf,WAAYmQ,GAAEwG,EAAU,EAC1B,eAAEE,EACF,EClEA,MAAM1G,GAAI9H,GAAwB,aAC5BnX,GAAOkb,EACP9a,GAAK+a,GACLkK,GAAQjK,GACR4E,GAAa1E,GAA0B,WACvC,CAAA,aAAE0F,EAAY,EAAK5E,GAEzB,SAASwJ,GAAYC,EAASC,EAASzM,EAAU,CAC/C,SAAS0M,EAAUF,EAASC,EAAS,CACnC1lB,GAAG,KAAKylB,EAASC,EAASxlB,GAAO,CAC/B,GAAIA,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5B+Y,EAAS,IAAI,CACnB,CAAK,CACL,CAEEjZ,GAAG,MAAM0lB,EAAS,CAACngB,EAAGqgB,IAAY,CAChC5lB,GAAG,MAAMylB,EAAS,CAACvlB,EAAKqgB,IAAY,CAClC,GAAIrgB,EACF,OAAAA,EAAI,QAAUA,EAAI,QAAQ,QAAQ,QAAS,YAAY,EAChD+Y,EAAS/Y,CAAG,EAErB,GAAI0lB,GAAWhF,GAAaL,EAASqF,CAAO,EAAG,OAAO3M,EAAS,IAAI,EAEnE,MAAM5Y,EAAMT,GAAK,QAAQ8lB,CAAO,EAChC9F,GAAWvf,EAAK,CAACH,EAAK0hB,IAAc,CAClC,GAAI1hB,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5B,GAAI0hB,EAAW,OAAO+D,EAASF,EAASC,CAAO,EAC/CT,GAAM,OAAO5kB,EAAKH,GAAO,CACvB,GAAIA,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5BylB,EAASF,EAASC,CAAO,CACnC,CAAS,CACT,CAAO,CACP,CAAK,CACL,CAAG,CACH,CAEA,SAASG,GAAgBJ,EAASC,EAAS,CACzC,IAAIE,EACJ,GAAI,CACFA,EAAU5lB,GAAG,UAAU0lB,CAAO,CAClC,MAAU,CAAA,CAER,GAAI,CACF,MAAMnF,EAAUvgB,GAAG,UAAUylB,CAAO,EACpC,GAAIG,GAAWhF,GAAaL,EAASqF,CAAO,EAAG,MACnD,OAAW1lB,EAAK,CACZ,MAAAA,EAAI,QAAUA,EAAI,QAAQ,QAAQ,QAAS,YAAY,EACjDA,CACV,CAEE,MAAMG,EAAMT,GAAK,QAAQ8lB,CAAO,EAEhC,OADkB1lB,GAAG,WAAWK,CAAG,GAEnC4kB,GAAM,WAAW5kB,CAAG,EAEbL,GAAG,SAASylB,EAASC,CAAO,CACrC,CAEA,IAAAI,GAAiB,CACf,WAAYjH,GAAE2G,EAAU,EAC1B,eAAEK,EACF,EC7DA,MAAMjmB,GAAOmX,EACP/W,GAAK8a,GACL8E,GAAa7E,GAA0B,WAwB7C,SAASgL,GAAcN,EAASC,EAASzM,EAAU,CACjD,GAAIrZ,GAAK,WAAW6lB,CAAO,EACzB,OAAOzlB,GAAG,MAAMylB,EAAUvlB,GACpBA,GACFA,EAAI,QAAUA,EAAI,QAAQ,QAAQ,QAAS,eAAe,EACnD+Y,EAAS/Y,CAAG,GAEd+Y,EAAS,KAAM,CACpB,MAAOwM,EACP,MAAOA,CACf,CAAO,CACF,EACI,CACL,MAAMO,EAASpmB,GAAK,QAAQ8lB,CAAO,EAC7BO,EAAgBrmB,GAAK,KAAKomB,EAAQP,CAAO,EAC/C,OAAO7F,GAAWqG,EAAe,CAAC/lB,EAAKgmB,IACjChmB,EAAY+Y,EAAS/Y,CAAG,EACxBgmB,EACKjN,EAAS,KAAM,CACpB,MAAOgN,EACP,MAAOR,CACjB,CAAS,EAEMzlB,GAAG,MAAMylB,EAAUvlB,GACpBA,GACFA,EAAI,QAAUA,EAAI,QAAQ,QAAQ,QAAS,eAAe,EACnD+Y,EAAS/Y,CAAG,GAEd+Y,EAAS,KAAM,CACpB,MAAOwM,EACP,MAAO7lB,GAAK,SAASomB,EAAQP,CAAO,CAChD,CAAW,CACF,CAEJ,CACL,CACA,CAEA,SAASU,GAAkBV,EAASC,EAAS,CAC3C,IAAIQ,EACJ,GAAItmB,GAAK,WAAW6lB,CAAO,EAAG,CAE5B,GADAS,EAASlmB,GAAG,WAAWylB,CAAO,EAC1B,CAACS,EAAQ,MAAM,IAAI,MAAM,iCAAiC,EAC9D,MAAO,CACL,MAAOT,EACP,MAAOA,CACb,CACA,KAAS,CACL,MAAMO,EAASpmB,GAAK,QAAQ8lB,CAAO,EAC7BO,EAAgBrmB,GAAK,KAAKomB,EAAQP,CAAO,EAE/C,GADAS,EAASlmB,GAAG,WAAWimB,CAAa,EAChCC,EACF,MAAO,CACL,MAAOD,EACP,MAAOR,CACf,EAGM,GADAS,EAASlmB,GAAG,WAAWylB,CAAO,EAC1B,CAACS,EAAQ,MAAM,IAAI,MAAM,iCAAiC,EAC9D,MAAO,CACL,MAAOT,EACP,MAAO7lB,GAAK,SAASomB,EAAQP,CAAO,CAC5C,CAEA,CACA,CAEA,IAAAW,GAAiB,CACjB,aAAEL,GACF,iBAAEI,EACF,EChGA,MAAMnmB,GAAK+W,GAEX,SAASsP,GAAaZ,EAASa,EAAMrN,EAAU,CAG7C,GAFAA,EAAY,OAAOqN,GAAS,WAAcA,EAAOrN,EACjDqN,EAAQ,OAAOA,GAAS,WAAc,GAAQA,EAC1CA,EAAM,OAAOrN,EAAS,KAAMqN,CAAI,EACpCtmB,GAAG,MAAMylB,EAAS,CAACvlB,EAAK6Z,IAAU,CAChC,GAAI7Z,EAAK,OAAO+Y,EAAS,KAAM,MAAM,EACrCqN,EAAQvM,GAASA,EAAM,YAAW,EAAM,MAAQ,OAChDd,EAAS,KAAMqN,CAAI,CACvB,CAAG,CACH,CAEA,SAASC,GAAiBd,EAASa,EAAM,CACvC,IAAIvM,EAEJ,GAAIuM,EAAM,OAAOA,EACjB,GAAI,CACFvM,EAAQ/Z,GAAG,UAAUylB,CAAO,CAChC,MAAU,CACN,MAAO,MACX,CACE,OAAQ1L,GAASA,EAAM,YAAW,EAAM,MAAQ,MAClD,CAEA,IAAAyM,GAAiB,CACjB,YAAEH,GACF,gBAAEE,EACF,EC5BA,MAAM1H,GAAI9H,GAAwB,aAC5BnX,GAAOkb,EACP9a,GAAK+a,GACL0L,GAAUzL,GACV2E,GAAS8G,GAAQ,OACjBjD,GAAaiD,GAAQ,WAErBC,GAAgBxL,GAChB6K,GAAeW,GAAc,aAC7BP,GAAmBO,GAAc,iBAEjCC,GAAe3K,GACfqK,GAAcM,GAAa,YAC3BJ,GAAkBI,GAAa,gBAE/B/G,GAAagH,GAA0B,WAEvC,CAAE,aAAAhG,EAAY,EAAKiG,GAEzB,SAASC,GAAerB,EAASC,EAASY,EAAMrN,EAAU,CACxDA,EAAY,OAAOqN,GAAS,WAAcA,EAAOrN,EACjDqN,EAAQ,OAAOA,GAAS,WAAc,GAAQA,EAE9CtmB,GAAG,MAAM0lB,EAAS,CAACxlB,EAAK6Z,IAAU,CAC5B,CAAC7Z,GAAO6Z,EAAM,iBAChB,QAAQ,IAAI,CACV/Z,GAAG,KAAKylB,CAAO,EACfzlB,GAAG,KAAK0lB,CAAO,CACvB,CAAO,EAAE,KAAK,CAAC,CAACnF,EAASqF,CAAO,IAAM,CAC9B,GAAIhF,GAAaL,EAASqF,CAAO,EAAG,OAAO3M,EAAS,IAAI,EACxD8N,GAAetB,EAASC,EAASY,EAAMrN,CAAQ,CACvD,CAAO,EACI8N,GAAetB,EAASC,EAASY,EAAMrN,CAAQ,CAC1D,CAAG,CACH,CAEA,SAAS8N,GAAgBtB,EAASC,EAASY,EAAMrN,EAAU,CACzD8M,GAAaN,EAASC,EAAS,CAACxlB,EAAK8mB,IAAa,CAChD,GAAI9mB,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5BulB,EAAUuB,EAAS,MACnBX,GAAYW,EAAS,MAAOV,EAAM,CAACpmB,EAAKomB,IAAS,CAC/C,GAAIpmB,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5B,MAAMG,EAAMT,GAAK,QAAQ8lB,CAAO,EAChC9F,GAAWvf,EAAK,CAACH,EAAK0hB,IAAc,CAClC,GAAI1hB,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5B,GAAI0hB,EAAW,OAAO5hB,GAAG,QAAQylB,EAASC,EAASY,EAAMrN,CAAQ,EACjE0G,GAAOtf,EAAKH,GAAO,CACjB,GAAIA,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5BF,GAAG,QAAQylB,EAASC,EAASY,EAAMrN,CAAQ,CACrD,CAAS,CACT,CAAO,CACP,CAAK,CACL,CAAG,CACH,CAEA,SAASgO,GAAmBxB,EAASC,EAASY,EAAM,CAClD,IAAIvM,EACJ,GAAI,CACFA,EAAQ/Z,GAAG,UAAU0lB,CAAO,CAChC,MAAU,CAAA,CACR,GAAI3L,GAASA,EAAM,iBAAkB,CACnC,MAAMwG,EAAUvgB,GAAG,SAASylB,CAAO,EAC7BG,EAAU5lB,GAAG,SAAS0lB,CAAO,EACnC,GAAI9E,GAAaL,EAASqF,CAAO,EAAG,MACxC,CAEE,MAAMoB,EAAWb,GAAiBV,EAASC,CAAO,EAClDD,EAAUuB,EAAS,MACnBV,EAAOC,GAAgBS,EAAS,MAAOV,CAAI,EAC3C,MAAMjmB,EAAMT,GAAK,QAAQ8lB,CAAO,EAEhC,OADe1lB,GAAG,WAAWK,CAAG,GAEhCmjB,GAAWnjB,CAAG,EACPL,GAAG,YAAYylB,EAASC,EAASY,CAAI,CAC9C,CAEA,IAAAY,GAAiB,CACf,cAAerI,GAAEiI,EAAa,EAChC,kBAAEG,EACF,EC/EA,KAAM,CAAE,WAAA5B,GAAY,eAAAE,IAAmBxO,GACjC,CAAE,WAAAyO,GAAY,eAAAK,IAAmB/K,GACjC,CAAE,cAAAgM,GAAe,kBAAAG,IAAsBlM,GAE7C,IAAAoM,GAAiB,CAEf,WAAA9B,GACA,eAAAE,GACA,WAAYF,GACZ,eAAgBE,GAEhB,WAAAC,GACA,eAAAK,GACA,WAAYL,GACZ,eAAgBK,GAEhB,cAAAiB,GACA,kBAAAG,GACA,cAAeH,GACf,kBAAmBG,EACrB,ECtBA,SAASG,GAAWxM,EAAK,CAAE,IAAAyM,EAAM;AAAA,EAAM,SAAAC,EAAW,GAAM,SAAAC,EAAW,KAAM,OAAAC,CAAM,EAAK,CAAA,EAAI,CACtF,MAAMC,EAAMH,EAAWD,EAAM,GACvB5e,EAAM,KAAK,UAAUmS,EAAK2M,EAAUC,CAAM,EAEhD,GAAI/e,IAAQ,OACV,MAAM,IAAI,UAAU,cAAc,OAAOmS,CAAG,iCAAiC,EAG/E,OAAOnS,EAAI,QAAQ,MAAO4e,CAAG,EAAII,CACnC,CAEA,SAASC,GAAU5kB,EAAS,CAE1B,OAAI,OAAO,SAASA,CAAO,IAAGA,EAAUA,EAAQ,SAAS,MAAM,GACxDA,EAAQ,QAAQ,UAAW,EAAE,CACtC,CAEA,IAAAqc,GAAiB,CAAA,UAAEiI,YAAWM,EAAQ,ECjBtC,IAAIC,GACJ,GAAI,CACFA,GAAM5Q,EACR,MAAY,CACV4Q,GAAM7M,CACR,CACA,MAAMnE,GAAeoE,GACf,CAAA,UAAEqM,GAAW,SAAAM,IAAa1M,GAEhC,eAAe4M,GAAWlZ,EAAMoL,EAAU,GAAI,CACxC,OAAOA,GAAY,WACrBA,EAAU,CAAE,SAAUA,CAAO,GAG/B,MAAM9Z,EAAK8Z,EAAQ,IAAM6N,GAEnBE,EAAc,WAAY/N,EAAUA,EAAQ,OAAS,GAE3D,IAAIvV,EAAO,MAAMoS,GAAa,aAAa3W,EAAG,QAAQ,EAAE0O,EAAMoL,CAAO,EAErEvV,EAAOmjB,GAASnjB,CAAI,EAEpB,IAAIqW,EACJ,GAAI,CACFA,EAAM,KAAK,MAAMrW,EAAMuV,EAAUA,EAAQ,QAAU,IAAI,CAC3D,OAAW5Z,EAAK,CACZ,GAAI2nB,EACF,MAAA3nB,EAAI,QAAU,GAAGwO,CAAI,KAAKxO,EAAI,OAAO,GAC/BA,EAEN,OAAO,IAEb,CAEE,OAAO0a,CACT,CAEA,MAAMyB,GAAW1F,GAAa,YAAYiR,EAAS,EAEnD,SAASE,GAAcpZ,EAAMoL,EAAU,GAAI,CACrC,OAAOA,GAAY,WACrBA,EAAU,CAAE,SAAUA,CAAO,GAG/B,MAAM9Z,EAAK8Z,EAAQ,IAAM6N,GAEnBE,EAAc,WAAY/N,EAAUA,EAAQ,OAAS,GAE3D,GAAI,CACF,IAAIhX,EAAU9C,EAAG,aAAa0O,EAAMoL,CAAO,EAC3C,OAAAhX,EAAU4kB,GAAS5kB,CAAO,EACnB,KAAK,MAAMA,EAASgX,EAAQ,OAAO,CAC9C,OAAW5Z,EAAK,CACZ,GAAI2nB,EACF,MAAA3nB,EAAI,QAAU,GAAGwO,CAAI,KAAKxO,EAAI,OAAO,GAC/BA,EAEN,OAAO,IAEb,CACA,CAEA,eAAe6nB,GAAYrZ,EAAMkM,EAAKd,EAAU,CAAA,EAAI,CAClD,MAAM9Z,EAAK8Z,EAAQ,IAAM6N,GAEnBlf,EAAM2e,GAAUxM,EAAKd,CAAO,EAElC,MAAMnD,GAAa,aAAa3W,EAAG,SAAS,EAAE0O,EAAMjG,EAAKqR,CAAO,CAClE,CAEA,MAAM2C,GAAY9F,GAAa,YAAYoR,EAAU,EAErD,SAASC,GAAetZ,EAAMkM,EAAKd,EAAU,CAAA,EAAI,CAC/C,MAAM9Z,EAAK8Z,EAAQ,IAAM6N,GAEnBlf,EAAM2e,GAAUxM,EAAKd,CAAO,EAElC,OAAO9Z,EAAG,cAAc0O,EAAMjG,EAAKqR,CAAO,CAC5C,CAIA,IAAAmO,GAAiB,CACf,SAAA5L,GACA,aAAAyL,GACA,UAAArL,GACA,cAAAuL,EACF,ECrFA,MAAME,GAAWnR,GAEjB,IAAAkR,GAAiB,CAEf,SAAUC,GAAS,SACnB,aAAcA,GAAS,aACvB,UAAWA,GAAS,UACpB,cAAeA,GAAS,aAC1B,ECRA,MAAMrJ,GAAI9H,GAAwB,aAC5B/W,GAAK8a,GACLlb,GAAOmb,EACPkK,GAAQjK,GACR4E,GAAa1E,GAA0B,WAE7C,SAASiN,GAAYzZ,EAAMnK,EAAM6jB,EAAUnP,EAAU,CAC/C,OAAOmP,GAAa,aACtBnP,EAAWmP,EACXA,EAAW,QAGb,MAAM/nB,EAAMT,GAAK,QAAQ8O,CAAI,EAC7BkR,GAAWvf,EAAK,CAACH,EAAKmoB,IAAW,CAC/B,GAAInoB,EAAK,OAAO+Y,EAAS/Y,CAAG,EAC5B,GAAImoB,EAAQ,OAAOroB,GAAG,UAAU0O,EAAMnK,EAAM6jB,EAAUnP,CAAQ,EAE9DgM,GAAM,OAAO5kB,EAAKH,GAAO,CACvB,GAAIA,EAAK,OAAO+Y,EAAS/Y,CAAG,EAE5BF,GAAG,UAAU0O,EAAMnK,EAAM6jB,EAAUnP,CAAQ,CACjD,CAAK,CACL,CAAG,CACH,CAEA,SAASqP,GAAgB5Z,KAASsF,EAAM,CACtC,MAAM3T,EAAMT,GAAK,QAAQ8O,CAAI,EAC7B,GAAI1O,GAAG,WAAWK,CAAG,EACnB,OAAOL,GAAG,cAAc0O,EAAM,GAAGsF,CAAI,EAEvCiR,GAAM,WAAW5kB,CAAG,EACpBL,GAAG,cAAc0O,EAAM,GAAGsF,CAAI,CAChC,CAEA,IAAAuU,GAAiB,CACf,WAAY1J,GAAEsJ,EAAU,EAC1B,eAAEG,EACF,ECrCA,KAAM,CAAA,UAAElB,EAAS,EAAKrQ,GAChB,CAAE,WAAAoR,EAAU,EAAKrN,GAEvB,eAAe0N,GAAY9Z,EAAMnK,EAAMuV,EAAU,CAAA,EAAI,CACnD,MAAMrR,EAAM2e,GAAU7iB,EAAMuV,CAAO,EAEnC,MAAMqO,GAAWzZ,EAAMjG,EAAKqR,CAAO,CACrC,CAEA,IAAA2O,GAAiBD,GCTjB,KAAM,CAAA,UAAEpB,EAAS,EAAKrQ,GAChB,CAAE,eAAAuR,EAAc,EAAKxN,GAE3B,SAAS4N,GAAgBha,EAAMnK,EAAMuV,EAAS,CAC5C,MAAMrR,EAAM2e,GAAU7iB,EAAMuV,CAAO,EAEnCwO,GAAe5Z,EAAMjG,EAAKqR,CAAO,CACnC,CAEA,IAAA6O,GAAiBD,GCTjB,MAAM7J,GAAI9H,GAAwB,YAC5BmR,GAAWpN,GAEjBoN,GAAS,WAAarJ,GAAE9D,EAAwB,EAChDmN,GAAS,eAAiBlN,GAE1BkN,GAAS,WAAaA,GAAS,WAC/BA,GAAS,eAAiBA,GAAS,eACnCA,GAAS,UAAYA,GAAS,UAC9BA,GAAS,cAAgBA,GAAS,cAClCA,GAAS,SAAWA,GAAS,SAC7BA,GAAS,aAAeA,GAAS,aAEjC,IAAAU,GAAiBV,GCbjB,MAAMloB,GAAK+W,GACLnX,GAAOkb,EACPD,GAAOE,GAAmB,KAC1B+J,GAAS9J,GAAqB,OAC9B6N,GAAS3N,GAAqB,OAC9B0E,GAAa5D,GAA0B,WACvCnb,GAAO+lB,GAEb,SAASkC,GAAM9L,EAAKC,EAAMhR,EAAM4K,EAAI,CAC9B,OAAO5K,GAAS,aAClB4K,EAAK5K,EACLA,EAAO,CAAA,GAGTA,EAAOA,GAAQ,CAAA,EAEf,MAAM8c,EAAY9c,EAAK,WAAaA,EAAK,SAAW,GAEpDpL,GAAK,WAAWmc,EAAKC,EAAM,OAAQhR,EAAM,CAAC/L,EAAK6Z,IAAU,CACvD,GAAI7Z,EAAK,OAAO2W,EAAG3W,CAAG,EACtB,KAAM,CAAE,QAAAqgB,EAAS,eAAAyI,EAAiB,IAAUjP,EAC5ClZ,GAAK,iBAAiBmc,EAAKuD,EAAStD,EAAM,OAAQ/c,GAAO,CACvD,GAAIA,EAAK,OAAO2W,EAAG3W,CAAG,EACtB,GAAI+oB,GAAahM,CAAI,EAAG,OAAOiM,GAASlM,EAAKC,EAAM8L,EAAWC,EAAgBnS,CAAE,EAChFgS,GAAOjpB,GAAK,QAAQqd,CAAI,EAAG/c,GACrBA,EAAY2W,EAAG3W,CAAG,EACfgpB,GAASlM,EAAKC,EAAM8L,EAAWC,EAAgBnS,CAAE,CACzD,CACP,CAAK,CACL,CAAG,CACH,CAEA,SAASoS,GAAchM,EAAM,CAC3B,MAAMkM,EAASvpB,GAAK,QAAQqd,CAAI,EAEhC,OADmBrd,GAAK,MAAMupB,CAAM,EAClB,OAASA,CAC7B,CAEA,SAASD,GAAUlM,EAAKC,EAAM8L,EAAWC,EAAgBnS,EAAI,CAC3D,GAAImS,EAAgB,OAAO9Q,GAAO8E,EAAKC,EAAM8L,EAAWlS,CAAE,EAC1D,GAAIkS,EACF,OAAOjE,GAAO7H,EAAM/c,GACdA,EAAY2W,EAAG3W,CAAG,EACfgY,GAAO8E,EAAKC,EAAM8L,EAAWlS,CAAE,CACvC,EAEH+I,GAAW3C,EAAM,CAAC/c,EAAKkpB,IACjBlpB,EAAY2W,EAAG3W,CAAG,EAClBkpB,EAAmBvS,EAAG,IAAI,MAAM,sBAAsB,CAAC,EACpDqB,GAAO8E,EAAKC,EAAM8L,EAAWlS,CAAE,CACvC,CACH,CAEA,SAASqB,GAAQ8E,EAAKC,EAAM8L,EAAWlS,EAAI,CACzC7W,GAAG,OAAOgd,EAAKC,EAAM/c,GACdA,EACDA,EAAI,OAAS,QAAgB2W,EAAG3W,CAAG,EAChCmpB,GAAiBrM,EAAKC,EAAM8L,EAAWlS,CAAE,EAF/BA,EAAE,CAGpB,CACH,CAEA,SAASwS,GAAkBrM,EAAKC,EAAM8L,EAAWlS,EAAI,CAKnDgE,GAAKmC,EAAKC,EAJG,CACX,UAAA8L,EACA,aAAc,EAClB,EACwB7oB,GAChBA,EAAY2W,EAAG3W,CAAG,EACf4kB,GAAO9H,EAAKnG,CAAE,CACtB,CACH,CAEA,IAAAyS,GAAiBR,GCxEjB,MAAM9oB,GAAK+W,GACLnX,GAAOkb,EACP2I,GAAW1I,GAAmB,SAC9BgK,GAAa/J,GAAqB,WAClCuO,GAAarO,GAAqB,WAClCra,GAAOmb,GAEb,SAASwN,GAAUxM,EAAKC,EAAMhR,EAAM,CAClCA,EAAOA,GAAQ,CAAA,EACf,MAAM8c,EAAY9c,EAAK,WAAaA,EAAK,SAAW,GAE9C,CAAE,QAAAsU,EAAS,eAAAyI,EAAiB,EAAK,EAAKnoB,GAAK,eAAemc,EAAKC,EAAM,OAAQhR,CAAI,EACvF,OAAApL,GAAK,qBAAqBmc,EAAKuD,EAAStD,EAAM,MAAM,EAC/CgM,GAAahM,CAAI,GAAGsM,GAAW3pB,GAAK,QAAQqd,CAAI,CAAC,EAC/CiM,GAASlM,EAAKC,EAAM8L,EAAWC,CAAc,CACtD,CAEA,SAASC,GAAchM,EAAM,CAC3B,MAAMkM,EAASvpB,GAAK,QAAQqd,CAAI,EAEhC,OADmBrd,GAAK,MAAMupB,CAAM,EAClB,OAASA,CAC7B,CAEA,SAASD,GAAUlM,EAAKC,EAAM8L,EAAWC,EAAgB,CACvD,GAAIA,EAAgB,OAAO9Q,GAAO8E,EAAKC,EAAM8L,CAAS,EACtD,GAAIA,EACF,OAAAhE,GAAW9H,CAAI,EACR/E,GAAO8E,EAAKC,EAAM8L,CAAS,EAEpC,GAAI/oB,GAAG,WAAWid,CAAI,EAAG,MAAM,IAAI,MAAM,sBAAsB,EAC/D,OAAO/E,GAAO8E,EAAKC,EAAM8L,CAAS,CACpC,CAEA,SAAS7Q,GAAQ8E,EAAKC,EAAM8L,EAAW,CACrC,GAAI,CACF/oB,GAAG,WAAWgd,EAAKC,CAAI,CAC3B,OAAW/c,EAAK,CACZ,GAAIA,EAAI,OAAS,QAAS,MAAMA,EAChC,OAAOmpB,GAAiBrM,EAAKC,EAAM8L,CAAS,CAChD,CACA,CAEA,SAASM,GAAkBrM,EAAKC,EAAM8L,EAAW,CAK/C,OAAAtF,GAASzG,EAAKC,EAJD,CACX,UAAA8L,EACA,aAAc,EAClB,CAC0B,EACjBhE,GAAW/H,CAAG,CACvB,CAEA,IAAAyM,GAAiBD,GCnDjB,MAAM3K,GAAI9H,GAAwB,aAClC,IAAA+R,GAAiB,CACf,KAAMjK,GAAE/D,EAAiB,EACzB,SAAUC,EACZ,ECJA2O,GAAiB,CAEf,GAAG3S,GAEH,GAAG+D,GACH,GAAGC,GACH,GAAGC,GACH,GAAGE,GACH,GAAGc,GACH,GAAG4K,GACH,GAAGC,GACH,GAAG8C,GACH,GAAGC,EACL,0BCdA,OAAO,eAAeC,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,kBAA4BA,GAAA,kBAA4B,OACxD,MAAMC,GAAW/S,GACjB,MAAMgT,WAA0BD,GAAS,YAAa,CAClD,IAAI,WAAY,CACZ,OAAO,KAAK,YAAe,KAAK,SAAW,MAAQ,KAAK,QAAQ,SACxE,CACI,IAAI,OAAOvjB,EAAO,CACd,KAAK,0BAAyB,EAC9B,KAAK,QAAUA,EACf,KAAK,oBAAsB,IAAM,KAAK,OAAM,EAC5C,KAAK,QAAQ,SAAS,KAAK,mBAAmB,CACtD,CAEI,YAAY4iB,EAAQ,CAChB,MAAK,EACL,KAAK,oBAAsB,KAC3B,KAAK,QAAU,KACf,KAAK,WAAa,GACdA,GAAU,OACV,KAAK,OAASA,EAE1B,CACI,QAAS,CACL,KAAK,WAAa,GAClB,KAAK,KAAK,QAAQ,CAC1B,CACI,SAAS3T,EAAS,CACV,KAAK,UACLA,EAAO,EAGP,KAAK,KAAK,SAAUA,CAAO,CAEvC,CACI,cAAcyD,EAAU,CACpB,GAAI,KAAK,UACL,OAAO,QAAQ,OAAO,IAAI+Q,EAAmB,EAEjD,MAAMC,EAAiB,IAAM,CACzB,GAAIC,GAAiB,KACjB,GAAI,CACA,KAAK,eAAe,SAAUA,CAAa,EAC3CA,EAAgB,IACpC,MACgC,CAEhC,CAEA,EACQ,IAAIA,EAAgB,KACpB,OAAO,IAAI,QAAQ,CAAC9kB,EAASC,IAAW,CACpC,IAAI8kB,EAAqB,KAYzB,GAXAD,EAAgB,IAAM,CAClB,GAAI,CACIC,GAAsB,OACtBA,EAAkB,EAClBA,EAAqB,KAE7C,QACA,CACoB9kB,EAAO,IAAI2kB,EAAmB,CAClD,CACA,EACgB,KAAK,UAAW,CAChBE,EAAa,EACb,MAChB,CACY,KAAK,SAASA,CAAa,EAC3BjR,EAAS7T,EAASC,EAAS4T,GAAa,CACpCkR,EAAqBlR,CACrC,CAAa,CACb,CAAS,EACI,KAAKmR,IACNH,EAAc,EACPG,EACV,EACI,MAAOzjB,GAAM,CACd,MAAAsjB,EAAc,EACRtjB,CAClB,CAAS,CACT,CACI,2BAA4B,CACxB,MAAMwiB,EAAS,KAAK,QAChBA,GAAU,MAAQ,KAAK,qBAAuB,OAC9CA,EAAO,eAAe,SAAU,KAAK,mBAAmB,EACxD,KAAK,oBAAsB,KAEvC,CACI,SAAU,CACN,GAAI,CACA,KAAK,0BAAyB,CAC1C,QACA,CACY,KAAK,mBAAkB,EACvB,KAAK,QAAU,IAC3B,CACA,CACA,CACAU,GAAA,kBAA4BE,GAC5B,MAAMC,WAA0B,KAAM,CAClC,aAAc,CACV,MAAM,WAAW,CACzB,CACA,CACAH,GAAA,kBAA4BG,aCzG5B,OAAO,eAAetT,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,SAAmB2T,GACnB,SAASA,GAAS/U,EAAS3M,EAAM,CAC7B,MAAM+N,EAAQ,IAAI,MAAMpB,CAAO,EAC/B,OAAAoB,EAAM,KAAO/N,EACN+N,CACX,oFCHA,IAAIrO,EAAI,IACJpH,EAAIoH,EAAI,GACRiiB,EAAIrpB,EAAI,GACRG,EAAIkpB,EAAI,GACRC,EAAInpB,EAAI,EACRopB,EAAIppB,EAAI,OAgBZqpB,GAAiB,SAAU1M,EAAKjE,EAAS,CACvCA,EAAUA,GAAW,CAAA,EACrB,IAAIwM,EAAO,OAAOvI,EAClB,GAAIuI,IAAS,UAAYvI,EAAI,OAAS,EACpC,OAAO2M,EAAM3M,CAAG,EACX,GAAIuI,IAAS,UAAY,SAASvI,CAAG,EAC1C,OAAOjE,EAAQ,KAAO6Q,EAAQ5M,CAAG,EAAI6M,EAAS7M,CAAG,EAEnD,MAAM,IAAI,MACR,wDACE,KAAK,UAAUA,CAAG,CACxB,CACA,EAUA,SAAS2M,EAAMjiB,EAAK,CAElB,GADAA,EAAM,OAAOA,CAAG,EACZ,EAAAA,EAAI,OAAS,KAGjB,KAAIgH,EAAQ,mIAAmI,KAC7IhH,CACJ,EACE,GAAKgH,EAGL,KAAIgV,EAAI,WAAWhV,EAAM,CAAC,CAAC,EACvB6W,GAAQ7W,EAAM,CAAC,GAAK,MAAM,YAAW,EACzC,OAAQ6W,EAAI,CACV,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,IACH,OAAO7B,EAAI+F,EACb,IAAK,QACL,IAAK,OACL,IAAK,IACH,OAAO/F,EAAI8F,EACb,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAO9F,EAAIrjB,EACb,IAAK,QACL,IAAK,OACL,IAAK,MACL,IAAK,KACL,IAAK,IACH,OAAOqjB,EAAI6F,EACb,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAO7F,EAAIxjB,EACb,IAAK,UACL,IAAK,SACL,IAAK,OACL,IAAK,MACL,IAAK,IACH,OAAOwjB,EAAIpc,EACb,IAAK,eACL,IAAK,cACL,IAAK,QACL,IAAK,OACL,IAAK,KACH,OAAOoc,EACT,QACE,SAEN,CAUA,SAASmG,EAASH,EAAI,CACpB,IAAII,EAAQ,KAAK,IAAIJ,CAAE,EACvB,OAAII,GAASzpB,EACJ,KAAK,MAAMqpB,EAAKrpB,CAAC,EAAI,IAE1BypB,GAASP,EACJ,KAAK,MAAMG,EAAKH,CAAC,EAAI,IAE1BO,GAAS5pB,EACJ,KAAK,MAAMwpB,EAAKxpB,CAAC,EAAI,IAE1B4pB,GAASxiB,EACJ,KAAK,MAAMoiB,EAAKpiB,CAAC,EAAI,IAEvBoiB,EAAK,IACd,CAUA,SAASE,EAAQF,EAAI,CACnB,IAAII,EAAQ,KAAK,IAAIJ,CAAE,EACvB,OAAII,GAASzpB,EACJ0pB,EAAOL,EAAII,EAAOzpB,EAAG,KAAK,EAE/BypB,GAASP,EACJQ,EAAOL,EAAII,EAAOP,EAAG,MAAM,EAEhCO,GAAS5pB,EACJ6pB,EAAOL,EAAII,EAAO5pB,EAAG,QAAQ,EAElC4pB,GAASxiB,EACJyiB,EAAOL,EAAII,EAAOxiB,EAAG,QAAQ,EAE/BoiB,EAAK,KACd,CAMA,SAASK,EAAOL,EAAII,EAAOpG,EAAGxhB,EAAM,CAClC,IAAI8nB,EAAWF,GAASpG,EAAI,IAC5B,OAAO,KAAK,MAAMgG,EAAKhG,CAAC,EAAI,IAAMxhB,GAAQ8nB,EAAW,IAAM,GAC7D,wDC3JA,SAASC,EAAMC,EAAK,CACnBC,EAAY,MAAQA,EACpBA,EAAY,QAAUA,EACtBA,EAAY,OAASC,EACrBD,EAAY,QAAUE,EACtBF,EAAY,OAASG,EACrBH,EAAY,QAAU5d,EACtB4d,EAAY,SAAWnU,KACvBmU,EAAY,QAAUI,EAEtB,OAAO,KAAKL,CAAG,EAAE,QAAQtb,GAAO,CAC/Bub,EAAYvb,CAAG,EAAIsb,EAAItb,CAAG,CAC5B,CAAE,EAMDub,EAAY,MAAQ,CAAA,EACpBA,EAAY,MAAQ,CAAA,EAOpBA,EAAY,WAAa,CAAA,EAQzB,SAASK,EAAYC,EAAW,CAC/B,IAAIC,EAAO,EAEX,QAAS/iB,EAAI,EAAGA,EAAI8iB,EAAU,OAAQ9iB,IACrC+iB,GAASA,GAAQ,GAAKA,EAAQD,EAAU,WAAW9iB,CAAC,EACpD+iB,GAAQ,EAGT,OAAOP,EAAY,OAAO,KAAK,IAAIO,CAAI,EAAIP,EAAY,OAAO,MAAM,CACtE,CACCA,EAAY,YAAcK,EAS1B,SAASL,EAAYM,EAAW,CAC/B,IAAIE,EACAC,EAAiB,KACjBC,EACAC,EAEJ,SAASpQ,KAASzH,EAAM,CAEvB,GAAI,CAACyH,EAAM,QACV,OAGD,MAAMnB,EAAOmB,EAGPqQ,EAAO,OAAO,IAAI,IAAM,EACxBrB,EAAKqB,GAAQJ,GAAYI,GAC/BxR,EAAK,KAAOmQ,EACZnQ,EAAK,KAAOoR,EACZpR,EAAK,KAAOwR,EACZJ,EAAWI,EAEX9X,EAAK,CAAC,EAAIkX,EAAY,OAAOlX,EAAK,CAAC,CAAC,EAEhC,OAAOA,EAAK,CAAC,GAAM,UAEtBA,EAAK,QAAQ,IAAI,EAIlB,IAAIwG,EAAQ,EACZxG,EAAK,CAAC,EAAIA,EAAK,CAAC,EAAE,QAAQ,gBAAiB,CAACvE,EAAOsc,KAAW,CAE7D,GAAItc,IAAU,KACb,MAAO,IAER+K,IACA,MAAMwR,EAAYd,EAAY,WAAWa,EAAM,EAC/C,GAAI,OAAOC,GAAc,WAAY,CACpC,MAAMjO,EAAM/J,EAAKwG,CAAK,EACtB/K,EAAQuc,EAAU,KAAK1R,EAAMyD,CAAG,EAGhC/J,EAAK,OAAOwG,EAAO,CAAC,EACpBA,GACL,CACI,OAAO/K,CACX,CAAI,EAGDyb,EAAY,WAAW,KAAK5Q,EAAMtG,CAAI,GAExBsG,EAAK,KAAO4Q,EAAY,KAChC,MAAM5Q,EAAMtG,CAAI,CACzB,CAEE,OAAAyH,EAAM,UAAY+P,EAClB/P,EAAM,UAAYyP,EAAY,UAAS,EACvCzP,EAAM,MAAQyP,EAAY,YAAYM,CAAS,EAC/C/P,EAAM,OAASwQ,EACfxQ,EAAM,QAAUyP,EAAY,QAE5B,OAAO,eAAezP,EAAO,UAAW,CACvC,WAAY,GACZ,aAAc,GACd,IAAK,IACAkQ,IAAmB,KACfA,GAEJC,IAAoBV,EAAY,aACnCU,EAAkBV,EAAY,WAC9BW,EAAeX,EAAY,QAAQM,CAAS,GAGtCK,GAER,IAAKK,GAAK,CACTP,EAAiBO,CACrB,CACA,CAAG,EAGG,OAAOhB,EAAY,MAAS,YAC/BA,EAAY,KAAKzP,CAAK,EAGhBA,CACT,CAEC,SAASwQ,EAAOT,EAAWW,EAAW,CACrC,MAAMC,EAAWlB,EAAY,KAAK,WAAa,OAAOiB,EAAc,IAAc,IAAMA,GAAaX,CAAS,EAC9G,OAAAY,EAAS,IAAM,KAAK,IACbA,CACT,CASC,SAASf,EAAOgB,EAAY,CAC3BnB,EAAY,KAAKmB,CAAU,EAC3BnB,EAAY,WAAamB,EAEzBnB,EAAY,MAAQ,CAAA,EACpBA,EAAY,MAAQ,CAAA,EAEpB,MAAMoB,GAAS,OAAOD,GAAe,SAAWA,EAAa,IAC3D,KAAI,EACJ,QAAQ,OAAQ,GAAG,EACnB,MAAM,GAAG,EACT,OAAO,OAAO,EAEhB,UAAWE,KAAMD,EACZC,EAAG,CAAC,IAAM,IACbrB,EAAY,MAAM,KAAKqB,EAAG,MAAM,CAAC,CAAC,EAElCrB,EAAY,MAAM,KAAKqB,CAAE,CAG7B,CAUC,SAASC,EAAgBC,EAAQC,EAAU,CAC1C,IAAIC,EAAc,EACdC,EAAgB,EAChBC,EAAY,GACZC,EAAa,EAEjB,KAAOH,EAAcF,EAAO,QAC3B,GAAIG,EAAgBF,EAAS,SAAWA,EAASE,CAAa,IAAMH,EAAOE,CAAW,GAAKD,EAASE,CAAa,IAAM,KAElHF,EAASE,CAAa,IAAM,KAC/BC,EAAYD,EACZE,EAAaH,EACbC,MAEAD,IACAC,aAESC,IAAc,GAExBD,EAAgBC,EAAY,EAC5BC,IACAH,EAAcG,MAEd,OAAO,GAKT,KAAOF,EAAgBF,EAAS,QAAUA,EAASE,CAAa,IAAM,KACrEA,IAGD,OAAOA,IAAkBF,EAAS,MACpC,CAQC,SAAStB,GAAU,CAClB,MAAMiB,EAAa,CAClB,GAAGnB,EAAY,MACf,GAAGA,EAAY,MAAM,IAAIM,GAAa,IAAMA,CAAS,CACxD,EAAI,KAAK,GAAG,EACV,OAAAN,EAAY,OAAO,EAAE,EACdmB,CACT,CASC,SAAS/e,EAAQrK,EAAM,CACtB,UAAW8pB,KAAQ7B,EAAY,MAC9B,GAAIsB,EAAgBvpB,EAAM8pB,CAAI,EAC7B,MAAO,GAIT,UAAWR,KAAMrB,EAAY,MAC5B,GAAIsB,EAAgBvpB,EAAMspB,CAAE,EAC3B,MAAO,GAIT,MAAO,EACT,CASC,SAASpB,EAAOpN,EAAK,CACpB,OAAIA,aAAe,MACXA,EAAI,OAASA,EAAI,QAElBA,CACT,CAMC,SAASuN,GAAU,CAClB,QAAQ,KAAK,uIAAuI,CACtJ,CAEC,OAAAJ,EAAY,OAAOA,EAAY,MAAM,EAE9BA,CACR,CAEA8B,OAAAA,GAAiBhC,yDC7RjBjM,EAAA,WAAqBkO,EACrBlO,EAAA,KAAemO,EACfnO,EAAA,KAAeoO,EACfpO,EAAA,UAAoBqO,EACpBrO,EAAA,QAAkBsO,EAAA,EAClBtO,EAAA,SAAmB,IAAM,CACxB,IAAIuO,EAAS,GAEb,MAAO,IAAM,CACPA,IACJA,EAAS,GACT,QAAQ,KAAK,uIAAuI,EACrJ,CAEF,GAAA,EAMAvO,EAAA,OAAiB,CAChB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,SACD,EAWA,SAASqO,GAAY,CAIpB,GAAI,OAAO,OAAW,KAAe,OAAO,UAAY,OAAO,QAAQ,OAAS,YAAc,OAAO,QAAQ,QAC5G,MAAO,GAIR,GAAI,OAAO,UAAc,KAAe,UAAU,WAAa,UAAU,UAAU,YAAA,EAAc,MAAM,uBAAuB,EAC7H,MAAO,GAGR,IAAInsB,EAKJ,OAAQ,OAAO,SAAa,KAAe,SAAS,iBAAmB,SAAS,gBAAgB,OAAS,SAAS,gBAAgB,MAAM,kBAEtI,OAAO,OAAW,KAAe,OAAO,UAAY,OAAO,QAAQ,SAAY,OAAO,QAAQ,WAAa,OAAO,QAAQ,QAG1H,OAAO,UAAc,KAAe,UAAU,YAAcA,EAAI,UAAU,UAAU,YAAA,EAAc,MAAM,gBAAgB,IAAM,SAASA,EAAE,CAAC,EAAG,EAAE,GAAK,IAEpJ,OAAO,UAAc,KAAe,UAAU,WAAa,UAAU,UAAU,YAAA,EAAc,MAAM,oBAAoB,CAC1H,CAQA,SAASgsB,EAAWjZ,EAAM,CAQzB,GAPAA,EAAK,CAAC,GAAK,KAAK,UAAY,KAAO,IAClC,KAAK,WACJ,KAAK,UAAY,MAAQ,KAC1BA,EAAK,CAAC,GACL,KAAK,UAAY,MAAQ,KAC1B,IAAMuZ,EAAO,QAAQ,SAAS,KAAK,IAAI,EAEpC,CAAC,KAAK,UACT,OAGD,MAAM5qB,EAAI,UAAY,KAAK,MAC3BqR,EAAK,OAAO,EAAG,EAAGrR,EAAG,gBAAgB,EAKrC,IAAI6X,EAAQ,EACRgT,EAAQ,EACZxZ,EAAK,CAAC,EAAE,QAAQ,cAAevE,GAAS,CACnCA,IAAU,OAGd+K,IACI/K,IAAU,OAGb+d,EAAQhT,GACT,CACA,EAEDxG,EAAK,OAAOwZ,EAAO,EAAG7qB,CAAC,CACxB,CAUAoc,EAAA,IAAc,QAAQ,OAAS,QAAQ,MAAQ,IAAM,CAAC,GAQtD,SAASmO,EAAKb,EAAY,CACzB,GAAI,CACCA,EACHtN,EAAQ,QAAQ,QAAQ,QAASsN,CAAU,EAE3CtN,EAAQ,QAAQ,WAAW,OAAO,CACnC,MACe,CAAA,CAIjB,CAQA,SAASoO,GAAO,CACf,IAAItjB,EACJ,GAAI,CACHA,EAAIkV,EAAQ,QAAQ,QAAQ,OAAO,GAAKA,EAAQ,QAAQ,QAAQ,OAAO,CAAA,MACxD,CAAA,CAMhB,MAAI,CAAClV,GAAK,OAAO,QAAY,KAAe,QAAS,UACpDA,EAAI,QAAA,IAAY,OAGVA,CACR,CAaA,SAASwjB,GAAe,CACvB,GAAI,CAGH,OAAO,YAAA,MACQ,CAAA,CAIjB,CAEAE,EAAA,QAAiBxW,GAAA,EAAoBgI,CAAO,EAE5C,KAAM,CAAC,WAAA0O,GAAcF,EAAO,QAM5BE,EAAW,EAAI,SAAUvB,EAAG,CAC3B,GAAI,CACH,OAAO,KAAK,UAAUA,CAAC,CAAA,OACfxV,EAAO,CACf,MAAO,+BAAiCA,EAAM,OAAA,CAEhD,uFC7QAgX,GAAiB,CAACC,EAAMC,EAAO,QAAQ,OAAS,CAC/C,MAAMC,EAASF,EAAK,WAAW,GAAG,EAAI,GAAMA,EAAK,SAAW,EAAI,IAAM,KAChE5U,EAAW6U,EAAK,QAAQC,EAASF,CAAI,EACrCG,EAAqBF,EAAK,QAAQ,IAAI,EAC5C,OAAO7U,IAAa,KAAO+U,IAAuB,IAAM/U,EAAW+U,EACpE,mDCNA,MAAMjuB,EAAKkX,GACLgX,EAAMjT,GACN4S,EAAU3S,GAAA,EAEV,CAAC,IAAAkQ,CAAG,EAAI,QAEd,IAAI+C,EACAN,EAAQ,UAAU,GACrBA,EAAQ,WAAW,GACnBA,EAAQ,aAAa,GACrBA,EAAQ,aAAa,EACrBM,EAAa,GACHN,EAAQ,OAAO,GACzBA,EAAQ,QAAQ,GAChBA,EAAQ,YAAY,GACpBA,EAAQ,cAAc,KACtBM,EAAa,GAGV,gBAAiB/C,IAChBA,EAAI,cAAgB,OACvB+C,EAAa,EACH/C,EAAI,cAAgB,QAC9B+C,EAAa,EAEbA,EAAa/C,EAAI,YAAY,SAAW,EAAI,EAAI,KAAK,IAAI,SAASA,EAAI,YAAa,EAAE,EAAG,CAAC,GAI3F,SAASgD,EAAe7Y,EAAO,CAC9B,OAAIA,IAAU,EACN,GAGD,CACN,MAAAA,EACA,SAAU,GACV,OAAQA,GAAS,EACjB,OAAQA,GAAS,CACnB,CACA,CAEA,SAAS8Y,EAAcC,EAAYC,EAAa,CAC/C,GAAIJ,IAAe,EAClB,MAAO,GAGR,GAAIN,EAAQ,WAAW,GACtBA,EAAQ,YAAY,GACpBA,EAAQ,iBAAiB,EACzB,MAAO,GAGR,GAAIA,EAAQ,WAAW,EACtB,MAAO,GAGR,GAAIS,GAAc,CAACC,GAAeJ,IAAe,OAChD,MAAO,GAGR,MAAMK,EAAML,GAAc,EAE1B,GAAI/C,EAAI,OAAS,OAChB,OAAOoD,EAGR,GAAI,QAAQ,WAAa,QAAS,CAGjC,MAAMC,EAAYzuB,EAAG,QAAO,EAAG,MAAM,GAAG,EACxC,OACC,OAAOyuB,EAAU,CAAC,CAAC,GAAK,IACxB,OAAOA,EAAU,CAAC,CAAC,GAAK,MAEjB,OAAOA,EAAU,CAAC,CAAC,GAAK,MAAQ,EAAI,EAGrC,CACT,CAEC,GAAI,OAAQrD,EACX,MAAI,CAAC,SAAU,WAAY,WAAY,YAAa,iBAAkB,WAAW,EAAE,KAAK5oB,GAAQA,KAAQ4oB,CAAG,GAAKA,EAAI,UAAY,WACxH,EAGDoD,EAGR,GAAI,qBAAsBpD,EACzB,MAAO,gCAAgC,KAAKA,EAAI,gBAAgB,EAAI,EAAI,EAGzE,GAAIA,EAAI,YAAc,YACrB,MAAO,GAGR,GAAI,iBAAkBA,EAAK,CAC1B,MAAMsD,EAAU,UAAUtD,EAAI,sBAAwB,IAAI,MAAM,GAAG,EAAE,CAAC,EAAG,EAAE,EAE3E,OAAQA,EAAI,aAAY,CACvB,IAAK,YACJ,OAAOsD,GAAW,EAAI,EAAI,EAC3B,IAAK,iBACJ,MAAO,GAGX,CAEC,MAAI,iBAAiB,KAAKtD,EAAI,IAAI,EAC1B,EAGJ,8DAA8D,KAAKA,EAAI,IAAI,GAI3E,cAAeA,EACX,EAGDoD,CACR,CAEA,SAASG,EAAgBvmB,EAAQ,CAChC,MAAMmN,EAAQ8Y,EAAcjmB,EAAQA,GAAUA,EAAO,KAAK,EAC1D,OAAOgmB,EAAe7Y,CAAK,CAC5B,CAEA,OAAAqZ,GAAiB,CAChB,cAAeD,EACf,OAAQP,EAAeC,EAAc,GAAMH,EAAI,OAAO,CAAC,CAAC,CAAC,EACzD,OAAQE,EAAeC,EAAc,GAAMH,EAAI,OAAO,CAAC,CAAC,CAAC,0DCjI1D,MAAMA,EAAMhX,GACNkE,EAAOH,GAMbiE,EAAA,KAAe2P,EACf3P,EAAA,IAAc7J,EACd6J,EAAA,WAAqBkO,EACrBlO,EAAA,KAAemO,EACfnO,EAAA,KAAeoO,EACfpO,EAAA,UAAoBqO,EACpBrO,EAAA,QAAkB9D,EAAK,UACtB,IAAM,CAAA,EACN,uIACD,EAMA8D,EAAA,OAAiB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAElC,GAAI,CAGH,MAAMmP,EAAgBnT,GAAA,EAElBmT,IAAkBA,EAAc,QAAUA,GAAe,OAAS,IACrEnP,EAAA,OAAiB,CAChB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,GAAA,EAGH,MAAgB,CAEhB,CAQAA,EAAA,YAAsB,OAAO,KAAK,QAAA,GAAW,EAAE,OAAOpP,GAC9C,WAAW,KAAKA,CAAG,CAC1B,EAAE,OAAO,CAACiL,EAAKjL,IAAQ,CAEvB,MAAMgf,EAAOhf,EACX,UAAU,CAAC,EACX,YAAA,EACA,QAAQ,YAAa,CAACpK,EAAGqpB,IAClBA,EAAE,YAAA,CACT,EAGF,IAAI7Q,EAAM,YAAYpO,CAAG,EACzB,MAAI,2BAA2B,KAAKoO,CAAG,EACtCA,EAAM,GACI,6BAA6B,KAAKA,CAAG,EAC/CA,EAAM,GACIA,IAAQ,OAClBA,EAAM,KAENA,EAAM,OAAOA,CAAG,EAGjBnD,EAAI+T,CAAI,EAAI5Q,EACLnD,CACR,EAAG,CAAA,CAAE,EAML,SAASwS,GAAY,CACpB,MAAO,WAAYrO,EAAQ,YAC1B,EAAQA,EAAQ,YAAY,OAC5BgP,EAAI,OAAO,QAAQ,OAAO,EAAE,CAC9B,CAQA,SAASd,EAAWjZ,EAAM,CACzB,KAAM,CAAC,UAAW/Q,EAAM,UAAAmqB,GAAa,KAErC,GAAIA,EAAW,CACd,MAAMzqB,EAAI,KAAK,MACTksB,EAAY,UAAclsB,EAAI,EAAIA,EAAI,OAASA,GAC/CkrB,EAAS,KAAKgB,CAAS,MAAM5rB,CAAI,WAEvC+Q,EAAK,CAAC,EAAI6Z,EAAS7Z,EAAK,CAAC,EAAE,MAAM;AAAA,CAAI,EAAE,KAAK;AAAA,EAAO6Z,CAAM,EACzD7Z,EAAK,KAAK6a,EAAY,KAAOtB,EAAO,QAAQ,SAAS,KAAK,IAAI,EAAI,SAAW,CAAA,MAE7EvZ,EAAK,CAAC,EAAI8a,EAAA,EAAY7rB,EAAO,IAAM+Q,EAAK,CAAC,CAE3C,CAEA,SAAS8a,GAAU,CAClB,OAAI/P,EAAQ,YAAY,SAChB,GAED,IAAI,OAAO,YAAA,EAAgB,GACnC,CAMA,SAAS7J,KAAOlB,EAAM,CACrB,OAAO,QAAQ,OAAO,MAAMiH,EAAK,kBAAkB8D,EAAQ,YAAa,GAAG/K,CAAI,EAAI;AAAA,CAAI,CACxF,CAQA,SAASkZ,EAAKb,EAAY,CACrBA,EACH,QAAA,IAAY,MAAQA,EAIpB,OAAO,QAAA,IAAY,KAErB,CASA,SAASc,GAAO,CACf,OAAO,QAAA,IAAY,KACpB,CASA,SAASuB,EAAKjT,EAAO,CACpBA,EAAM,YAAc,CAAA,EAEpB,MAAMlB,EAAO,OAAO,KAAKwE,EAAQ,WAAW,EAC5C,QAASrW,EAAI,EAAGA,EAAI6R,EAAK,OAAQ7R,IAChC+S,EAAM,YAAYlB,EAAK7R,CAAC,CAAC,EAAIqW,EAAQ,YAAYxE,EAAK7R,CAAC,CAAC,CAE1D,CAEA6kB,EAAA,QAAiBvS,GAAA,EAAoB+D,CAAO,EAE5C,KAAM,CAAC,WAAA0O,GAAcF,EAAO,QAM5BE,EAAW,EAAI,SAAUvB,EAAG,CAC3B,YAAK,YAAY,OAAS,KAAK,UACxBjR,EAAK,QAAQiR,EAAG,KAAK,WAAW,EACrC,MAAM;AAAA,CAAI,EACV,OAAWzjB,EAAI,KAAA,CAAM,EACrB,KAAK,GAAG,CACX,EAMAglB,EAAW,EAAI,SAAUvB,EAAG,CAC3B,YAAK,YAAY,OAAS,KAAK,UACxBjR,EAAK,QAAQiR,EAAG,KAAK,WAAW,CACxC,8BCjQI,OAAO,QAAY,KAAe,QAAQ,OAAS,YAAc,QAAQ,UAAY,IAAQ,QAAQ,OACxG6C,GAAA,QAAiBhY,GAAA,EAEjBgY,GAAA,QAAiBjU,GAAA,0BCPlB,OAAO,eAAekU,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,0BAAoC,OACpC,MAAMC,GAAWlY,GACjB,MAAMmY,WAAkCD,GAAS,SAAU,CACvD,YAAYE,EAAOC,EAAmBC,EAAY,CAC9C,MAAK,EACL,KAAK,MAAQF,EACb,KAAK,kBAAoBC,EACzB,KAAK,WAAaC,EAClB,KAAK,MAAQ,KAAK,IAAG,EACrB,KAAK,YAAc,EACnB,KAAK,MAAQ,EACb,KAAK,WAAa,KAAK,MAAQ,GACvC,CACI,WAAWC,EAAOlH,EAAUnP,EAAU,CAClC,GAAI,KAAK,kBAAkB,UAAW,CAClCA,EAAS,IAAI,MAAM,WAAW,EAAG,IAAI,EACrC,MACZ,CACQ,KAAK,aAAeqW,EAAM,OAC1B,KAAK,OAASA,EAAM,OACpB,MAAM/tB,EAAM,KAAK,IAAG,EAChBA,GAAO,KAAK,YAAc,KAAK,cAAgB,KAAK,QACpD,KAAK,WAAaA,EAAM,IACxB,KAAK,WAAW,CACZ,MAAO,KAAK,MACZ,MAAO,KAAK,MACZ,YAAa,KAAK,YAClB,QAAU,KAAK,YAAc,KAAK,MAAS,IAC3C,eAAgB,KAAK,MAAM,KAAK,cAAgBA,EAAM,KAAK,OAAS,IAAK,CACzF,CAAa,EACD,KAAK,MAAQ,GAEjB0X,EAAS,KAAMqW,CAAK,CAC5B,CACI,OAAOrW,EAAU,CACb,GAAI,KAAK,kBAAkB,UAAW,CAClCA,EAAS,IAAI,MAAM,WAAW,CAAC,EAC/B,MACZ,CACQ,KAAK,WAAW,CACZ,MAAO,KAAK,MACZ,MAAO,KAAK,MACZ,YAAa,KAAK,MAClB,QAAS,IACT,eAAgB,KAAK,MAAM,KAAK,cAAgB,KAAK,MAAQ,KAAK,OAAS,IAAK,CAC5F,CAAS,EACD,KAAK,MAAQ,EACbA,EAAS,IAAI,CACrB,CACA,CACA+V,GAAA,0BAAoCE,GCnDpC,OAAO,eAAeK,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,gBAA0BA,GAAA,0BAA2C,OACrEA,GAAA,gBAA0BC,GAC1BD,GAAA,UAAoBE,GACpBF,GAAA,+BAAyCG,GACzCH,GAAA,oBAA8BI,GAC9BJ,GAAA,cAAwBK,GACxBL,GAAA,wBAAkCM,GAClCN,GAAA,kBAA4BO,GAC5B,MAAMC,GAAWhZ,GACXiZ,GAAUlV,GACVmV,GAAOlV,EACPkU,GAAWjU,GACXkV,GAAQhV,GACR2O,GAAsB7N,GACtBmU,GAAUvJ,GACVoI,GAA8BnI,GAC9BpL,MAAYuU,GAAQ,SAAS,kBAAkB,EACrD,SAASR,GAAgBzZ,EAAU7F,EAAc,KAAM,CACnD,OAAO,IAAIkgB,GAAUra,EAAS,YAAc,GAAI,GAAGA,EAAS,UAAU,IAAIA,EAAS,aAAa,IAC3F7F,GAAe,KAAO,GAAK;AAAA,EAAO,KAAK,UAAUA,EAAa,KAAM,IAAI,GACzE;AAAA,WACA4f,GAAkB/Z,EAAS,OAAO,EAAG7F,CAAW,CACxD,CACA,MAAMmgB,GAAoB,IAAI,IAAI,CAC9B,CAAC,IAAK,mBAAmB,EACzB,CAAC,IAAK,aAAa,EACnB,CAAC,IAAK,WAAW,EACjB,CAAC,IAAK,WAAW,EACjB,CAAC,IAAK,oBAAoB,EAC1B,CAAC,IAAK,gBAAgB,EACtB,CAAC,IAAK,iBAAiB,EACvB,CAAC,IAAK,0BAA0B,EAChC,CAAC,IAAK,uBAAuB,EAC7B,CAAC,IAAK,aAAa,EACnB,CAAC,IAAK,qBAAqB,EAC3B,CAAC,IAAK,iBAAiB,EACvB,CAAC,IAAK,4BAA4B,CACtC,CAAC,EACD,MAAMD,WAAkB,KAAM,CAC1B,YAAYE,EAAYhb,EAAU,eAAe+a,GAAkB,IAAIC,CAAU,GAAKA,CAAU,GAAIpgB,EAAc,KAAM,CACpH,MAAMoF,CAAO,EACb,KAAK,WAAagb,EAClB,KAAK,YAAcpgB,EACnB,KAAK,KAAO,YACZ,KAAK,KAAO,cAAcogB,CAAU,EAC5C,CACI,eAAgB,CACZ,OAAO,KAAK,YAAc,KAAO,KAAK,YAAc,GAC5D,CACA,CACAf,GAAA,UAAoBa,GACpB,SAASX,GAAUrjB,EAAQ,CACvB,OAAOA,EAAO,KAAKge,GAAOA,GAAM,MAAQA,EAAG,SAAW,EAAI,KAAO,KAAK,MAAMA,CAAE,CAAE,CACpF,CACA,MAAMmG,EAAa,CACf,aAAc,CACV,KAAK,aAAe,EAC5B,CACI,QAAQzW,EAASsV,EAAoB,IAAIvF,GAAoB,kBAAqBtlB,EAAM,CACpFsrB,GAAwB/V,CAAO,EAC/B,MAAM8O,EAAOrkB,GAAQ,KAAO,OAAY,KAAK,UAAUA,CAAI,EACrDisB,EAAc5H,EAAO,OAAO,KAAKA,CAAI,EAAI,OAC/C,GAAI4H,GAAe,KAAM,CACrB/U,GAAMmN,CAAI,EACV,KAAM,CAAE,QAAA6H,EAAS,GAAGxkB,CAAI,EAAK6N,EAC7BA,EAAU,CACN,OAAQ,OACR,QAAS,CACL,eAAgB,mBAChB,iBAAkB0W,EAAY,OAC9B,GAAGC,CACvB,EACgB,GAAGxkB,CACnB,CACA,CACQ,OAAO,KAAK,aAAa6N,EAASsV,EAAmBhF,GAAMA,EAAG,IAAIoG,CAAW,CAAC,CACtF,CACI,aAAa1W,EAASsV,EAAmBsB,EAAkBC,EAAgB,EAAG,CAC1E,OAAIlV,GAAM,SACNA,GAAM,YAAYqU,GAAkBhW,CAAO,CAAC,EAAE,EAE3CsV,EAAkB,cAAc,CAAChqB,EAASC,EAAQurB,IAAa,CAClE,MAAMC,EAAU,KAAK,cAAc/W,EAAU/D,GAAa,CACtD,GAAI,CACA,KAAK,eAAeA,EAAU+D,EAASsV,EAAmBhqB,EAASC,EAAQsrB,EAAeD,CAAgB,CAC9H,OACuB/pB,EAAG,CACNtB,EAAOsB,CAAC,CAC5B,CACA,CAAa,EACD,KAAK,2BAA2BkqB,EAASxrB,EAAQyU,EAAQ,OAAO,EAChE,KAAK,oBAAoB+W,EAAS/W,EAASzU,EAAQsrB,EAAe7W,GAAW,CACzE,KAAK,aAAaA,EAASsV,EAAmBsB,EAAkBC,CAAa,EAAE,KAAKvrB,CAAO,EAAE,MAAMC,CAAM,CACzH,CAAa,EACDqrB,EAAiBG,EAASxrB,CAAM,EAChCurB,EAAS,IAAMC,EAAQ,OAAO,CAC1C,CAAS,CACT,CAGI,oBAAoBA,EAAS/W,EAASzU,EAAQsrB,EAAenb,EAAS,CAE1E,CACI,2BAA2Bqb,EAASxrB,EAAQyrB,EAAU,GAAK,IAAM,CAC7D,KAAK,kBAAkBD,EAASxrB,EAAQyrB,CAAO,EAC/CD,EAAQ,GAAG,QAASxrB,CAAM,EAC1BwrB,EAAQ,GAAG,UAAW,IAAM,CACxBxrB,EAAO,IAAI,MAAM,wCAAwC,CAAC,CACtE,CAAS,CACT,CACI,eAAe0Q,EAAU+D,EAASsV,EAAmBhqB,EAASC,EAAQsrB,EAAeD,EAAkB,CACnG,IAAIxuB,EAKJ,GAJIuZ,GAAM,SACNA,GAAM,aAAa1F,EAAS,UAAU,IAAIA,EAAS,aAAa,sBAAsB+Z,GAAkBhW,CAAO,CAAC,EAAE,EAGlH/D,EAAS,aAAe,IAAK,CAE7B1Q,EAAOmqB,GAAgBzZ,EAAU,WAAW+D,EAAQ,QAAU,KAAK,SAASA,EAAQ,UAAY,QAAQ,KAAKA,EAAQ,QAAQ,GAAGA,EAAQ,KAAO,IAAIA,EAAQ,IAAI,GAAK,EAAE,GAAGA,EAAQ,IAAI;AAAA;AAAA;AAAA,CAGhM,CAAC,EACU,MACZ,SACiB/D,EAAS,aAAe,IAAK,CAElC3Q,EAAO,EACP,MACZ,CACQ,MAAMuD,GAAQzG,EAAK6T,EAAS,cAAgB,MAAQ7T,IAAO,OAASA,EAAK,EACnE6uB,EAAiBpoB,GAAQ,KAAOA,EAAO,IACvCqoB,EAAcpB,GAAc7Z,EAAU,UAAU,EACtD,GAAIgb,GAAkBC,GAAe,KAAM,CACvC,GAAIL,EAAgB,KAAK,aAAc,CACnCtrB,EAAO,KAAK,wBAAwB,EACpC,MAChB,CACY,KAAK,aAAakrB,GAAa,0BAA0BS,EAAalX,CAAO,EAAGsV,EAAmBsB,EAAkBC,CAAa,EAAE,KAAKvrB,CAAO,EAAE,MAAMC,CAAM,EAC9J,MACZ,CACQ0Q,EAAS,YAAY,MAAM,EAC3B,IAAIxR,EAAO,GACXwR,EAAS,GAAG,QAAS1Q,CAAM,EAC3B0Q,EAAS,GAAG,OAASuZ,GAAW/qB,GAAQ+qB,CAAM,EAC9CvZ,EAAS,GAAG,MAAO,IAAM,CACrB,GAAI,CACA,GAAIA,EAAS,YAAc,MAAQA,EAAS,YAAc,IAAK,CAC3D,MAAMkb,EAAcrB,GAAc7Z,EAAU,cAAc,EACpDmb,EAASD,GAAe,OAAS,MAAM,QAAQA,CAAW,EAAIA,EAAY,KAAK7G,GAAMA,EAAG,SAAS,MAAM,CAAC,GAAK,KAAO6G,EAAY,SAAS,MAAM,GACrJ5rB,EAAOmqB,GAAgBzZ,EAAU,WAAW+D,EAAQ,QAAU,KAAK,SAASA,EAAQ,UAAY,QAAQ,KAAKA,EAAQ,QAAQ,GAAGA,EAAQ,KAAO,IAAIA,EAAQ,IAAI,GAAK,EAAE,GAAGA,EAAQ,IAAI;AAAA;AAAA;AAAA,YAG7LoX,EAAS,KAAK,UAAU,KAAK,MAAM3sB,CAAI,CAAC,EAAIA,CAAI;AAAA,WACjD,CAAC,CACZ,MAEoBa,EAAQb,EAAK,SAAW,EAAI,KAAOA,CAAI,CAE3D,OACmBoC,EAAG,CACNtB,EAAOsB,CAAC,CACxB,CACA,CAAS,CACT,CACI,MAAM,iBAAiBwqB,EAAKrX,EAAS,CACjC,OAAO,MAAMA,EAAQ,kBAAkB,cAAc,CAAC1U,EAASC,EAAQurB,IAAa,CAChF,MAAMQ,EAAiB,CAAA,EACjBC,EAAiB,CACnB,QAASvX,EAAQ,SAAW,OAE5B,SAAU,QAC1B,EACY6V,GAAoBwB,EAAKE,CAAc,EACvCxB,GAAwBwB,CAAc,EACtC,KAAK,WAAWA,EAAgB,CAC5B,YAAa,KACb,QAAAvX,EACA,SAAA8W,EACA,SAAUla,GAAS,CACXA,GAAS,KACTtR,EAAQ,OAAO,OAAOgsB,CAAc,CAAC,EAGrC/rB,EAAOqR,CAAK,CAEpC,EACgB,gBAAiB,CAACX,EAAUkD,IAAa,CACrC,IAAIqY,EAAiB,EACrBvb,EAAS,GAAG,OAASuZ,GAAU,CAE3B,GADAgC,GAAkBhC,EAAM,OACpBgC,EAAiB,SAAW,CAC5BrY,EAAS,IAAI,MAAM,gCAAgC,CAAC,EACpD,MAC5B,CACwBmY,EAAe,KAAK9B,CAAK,CACjD,CAAqB,EACDvZ,EAAS,GAAG,MAAO,IAAM,CACrBkD,EAAS,IAAI,CACrC,CAAqB,CACrB,CACA,EAAe,CAAC,CAChB,CAAS,CACT,CACI,WAAWoY,EAAgBvX,EAAS6W,EAAe,CAC/C,MAAME,EAAU,KAAK,cAAcQ,EAAiBtb,GAAa,CAC7D,GAAIA,EAAS,YAAc,IAAK,CAC5B+D,EAAQ,SAAS,IAAI,MAAM,oBAAoBuX,EAAe,UAAY,QAAQ,KAAKA,EAAe,QAAQ,GAAGA,EAAe,IAAI,aAAatb,EAAS,UAAU,KAAKA,EAAS,aAAa,EAAE,CAAC,EAClM,MAChB,CAGYA,EAAS,GAAG,QAAS+D,EAAQ,QAAQ,EAErC,MAAMkX,EAAcpB,GAAc7Z,EAAU,UAAU,EACtD,GAAIib,GAAe,KAAM,CACjBL,EAAgB,KAAK,aACrB,KAAK,WAAWJ,GAAa,0BAA0BS,EAAaK,CAAc,EAAGvX,EAAS6W,GAAe,EAG7G7W,EAAQ,SAAS,KAAK,wBAAwB,EAElD,MAChB,CACgBA,EAAQ,iBAAmB,KAC3ByX,GAAezX,EAAS/D,CAAQ,EAGhC+D,EAAQ,gBAAgB/D,EAAU+D,EAAQ,QAAQ,CAElE,CAAS,EACD,KAAK,2BAA2B+W,EAAS/W,EAAQ,SAAUuX,EAAe,OAAO,EACjF,KAAK,oBAAoBR,EAASQ,EAAgBvX,EAAQ,SAAU6W,EAAeU,GAAkB,CACjG,KAAK,WAAWA,EAAgBvX,EAAS6W,GAAe,CACpE,CAAS,EACDE,EAAQ,IAAG,CACnB,CACI,wBAAyB,CACrB,OAAO,IAAI,MAAM,yBAAyB,KAAK,YAAY,GAAG,CACtE,CACI,kBAAkBA,EAAS5X,EAAU6X,EAAS,CAC1CD,EAAQ,GAAG,SAAWW,GAAW,CAC7BA,EAAO,WAAWV,EAAS,IAAM,CAC7BD,EAAQ,MAAK,EACb5X,EAAS,IAAI,MAAM,mBAAmB,CAAC,CACvD,CAAa,CACb,CAAS,CACT,CACI,OAAO,0BAA0B+X,EAAalX,EAAS,CACnD,MAAM2X,EAAa/B,GAA+BsB,EAAa,CAAE,GAAGlX,CAAO,CAAE,EACvE2W,EAAUgB,EAAW,QAC3B,GAAIhB,GAAY,MAAsCA,EAAQ,cAAe,CAEzE,MAAMiB,EAAcnB,GAAa,uBAAuBzW,CAAO,EACzD6X,EAAoBC,GAASZ,EAAalX,CAAO,EAEnDyW,GAAa,sBAAsBmB,EAAaC,CAAiB,IAC7DlW,GAAM,SACNA,GAAM,yCAAyCiW,EAAY,IAAI,OAAOC,EAAkB,IAAI,mDAAmD,EAEnJ,OAAOlB,EAAQ,cAE/B,CACQ,OAAOgB,CACf,CACI,OAAO,uBAAuB3X,EAAS,CACnC,MAAM+X,EAAW/X,EAAQ,UAAY,SACrC,GAAI,CAACA,EAAQ,SACT,MAAM,IAAI,MAAM,qCAAqC,EAEzD,MAAMgY,EAAWhY,EAAQ,SACnBiY,EAAOjY,EAAQ,KAAO,IAAIA,EAAQ,IAAI,GAAK,GAC3Cla,EAAOka,EAAQ,MAAQ,IAC7B,OAAO,IAAIoW,GAAM,IAAI,GAAG2B,CAAQ,KAAKC,CAAQ,GAAGC,CAAI,GAAGnyB,CAAI,EAAE,CACrE,CACI,OAAO,sBAAsB8xB,EAAaV,EAAa,CAEnD,GAAIU,EAAY,SAAS,YAAW,IAAOV,EAAY,SAAS,cAC5D,MAAO,GAMX,GAAIU,EAAY,WAAa,SAEzB,CAAC,KAAM,EAAE,EAAE,SAASA,EAAY,IAAI,GACpCV,EAAY,WAAa,UAEzB,CAAC,MAAO,EAAE,EAAE,SAASA,EAAY,IAAI,EACrC,MAAO,GAOX,GAAIU,EAAY,WAAaV,EAAY,SACrC,MAAO,GAGX,MAAMgB,EAAeN,EAAY,KAC3BO,EAAejB,EAAY,KACjC,OAAOgB,IAAiBC,CAChC,CACI,OAAO,mBAAmBC,EAAMC,EAAa,EAAG,CAC5C,QAASC,EAAgB,GAAIA,IACzB,GAAI,CACA,OAAOF,EAAI,CAC3B,OACmBvrB,EAAG,CACN,GAAIyrB,EAAgBD,IAAgBxrB,aAAaypB,IAAazpB,EAAE,iBAAoBA,EAAE,OAAS,SAC3F,SAEJ,MAAMA,CACtB,CAEA,CACA,CACA4oB,GAAA,aAAuBgB,GACvB,SAASqB,GAAST,EAAKrX,EAAS,CAC5B,GAAI,CAEA,OAAO,IAAIoW,GAAM,IAAIiB,CAAG,CAChC,MACU,CAEF,MAAMW,EAAWhY,EAAQ,SACnB+X,EAAW/X,EAAQ,UAAY,SAC/BiY,EAAOjY,EAAQ,KAAO,IAAIA,EAAQ,IAAI,GAAK,GAC3CuY,EAAU,GAAGR,CAAQ,KAAKC,CAAQ,GAAGC,CAAI,GAC/C,OAAO,IAAI7B,GAAM,IAAIiB,EAAKkB,CAAO,CACzC,CACA,CACA,SAAS3C,GAA+ByB,EAAKrX,EAAS,CAClD,MAAM1N,EAASyjB,GAAwB/V,CAAO,EACxCwY,EAAYV,GAAST,EAAKrX,CAAO,EACvC,OAAA6V,GAAoB2C,EAAWlmB,CAAM,EAC9BA,CACX,CACA,SAASujB,GAAoBwB,EAAKrX,EAAS,CACvCA,EAAQ,SAAWqX,EAAI,SACvBrX,EAAQ,SAAWqX,EAAI,SACnBA,EAAI,KACJrX,EAAQ,KAAOqX,EAAI,KAEdrX,EAAQ,MACb,OAAOA,EAAQ,KAEnBA,EAAQ,KAAOqX,EAAI,SAAWA,EAAI,MACtC,CACA,MAAMoB,WAAwBtD,GAAS,SAAU,CAE7C,IAAI,QAAS,CACT,OAAO,KAAK,OACpB,CACI,YAAYuD,EAAUC,EAAY,SAAUrK,EAAW,SAAU,CAC7D,MAAK,EACL,KAAK,SAAWoK,EAChB,KAAK,UAAYC,EACjB,KAAK,SAAWrK,EAChB,KAAK,QAAU,KACf,KAAK,gBAAkB,GACvB,KAAK,YAAe2H,GAAS,YAAY0C,CAAS,CAC1D,CAEI,WAAWnD,EAAOlH,EAAUnP,EAAU,CAClC,KAAK,SAAS,OAAOqW,CAAK,EAC1BrW,EAAS,KAAMqW,CAAK,CAC5B,CAEI,OAAOrW,EAAU,CAEb,GADA,KAAK,QAAU,KAAK,SAAS,OAAO,KAAK,QAAQ,EAC7C,KAAK,gBACL,GAAI,CACA,KAAK,SAAQ,CAC7B,OACmBtS,EAAG,CACNsS,EAAStS,CAAC,EACV,MAChB,CAEQsS,EAAS,IAAI,CACrB,CACI,UAAW,CACP,GAAI,KAAK,SAAW,KAChB,QAAUkX,GAAQ,UAAU,mBAAoB,yBAAyB,EAE7E,GAAI,KAAK,UAAY,KAAK,SACtB,QAAUA,GAAQ,UAAU,GAAG,KAAK,SAAS,gCAAgC,KAAK,QAAQ,SAAS,KAAK,OAAO,GAAI,uBAAuB,EAE9I,OAAO,IACf,CACA,CACAZ,GAAA,gBAA0BgD,GAC1B,SAASG,GAAUC,EAAYC,EAAM3Z,EAAU,CAC3C,OAAI0Z,GAAc,MAAQC,GAAQ,MAAQD,IAAeC,GACrD3Z,EAAS,IAAI,MAAM,+BAA+B2Z,CAAI,YAAYD,CAAU,2BAA2B,CAAC,EACjG,IAEJ,EACX,CACA,SAAS/C,GAAc7Z,EAAU8c,EAAW,CACxC,MAAMtsB,EAAQwP,EAAS,QAAQ8c,CAAS,EACxC,OAAItsB,GAAS,KACF,KAEF,MAAM,QAAQA,CAAK,EAEjBA,EAAM,SAAW,EAAI,KAAOA,EAAMA,EAAM,OAAS,CAAC,EAGlDA,CAEf,CACA,SAASgrB,GAAezX,EAAS/D,EAAU,CACvC,GAAI,CAAC2c,GAAU9C,GAAc7Z,EAAU,iBAAiB,EAAG+D,EAAQ,QAAQ,KAAMA,EAAQ,QAAQ,EAC7F,OAEJ,MAAMgZ,EAAU,CAAA,EAChB,GAAIhZ,EAAQ,QAAQ,YAAc,KAAM,CACpC,MAAMiZ,EAAgBnD,GAAc7Z,EAAU,gBAAgB,EAC1Dgd,GAAiB,MACjBD,EAAQ,KAAK,IAAI9D,GAA4B,0BAA0B,SAAS+D,EAAe,EAAE,EAAGjZ,EAAQ,QAAQ,kBAAmBA,EAAQ,QAAQ,UAAU,CAAC,CAE9K,CACI,MAAMkZ,EAASlZ,EAAQ,QAAQ,OAC3BkZ,GAAU,KACVF,EAAQ,KAAK,IAAIP,GAAgBS,EAAQ,SAAUA,EAAO,SAAW,KAAO,CAACA,EAAO,SAAS,GAAG,GAAK,CAACA,EAAO,SAAS,GAAG,GAAK,CAACA,EAAO,SAAS,GAAG,EAAI,MAAQ,QAAQ,CAAC,EAElKlZ,EAAQ,QAAQ,MAAQ,MAC7BgZ,EAAQ,KAAK,IAAIP,GAAgBzY,EAAQ,QAAQ,KAAM,SAAU,KAAK,CAAC,EAE3E,MAAMmZ,KAAchD,GAAK,mBAAmBnW,EAAQ,WAAW,EAC/DgZ,EAAQ,KAAKG,CAAO,EACpB,IAAIC,EAAand,EACjB,UAAW9N,KAAU6qB,EACjB7qB,EAAO,GAAG,QAAUyO,GAAU,CAC1Buc,EAAQ,MAAK,EACRnZ,EAAQ,QAAQ,kBAAkB,WACnCA,EAAQ,SAASpD,CAAK,CAEtC,CAAS,EACDwc,EAAaA,EAAW,KAAKjrB,CAAM,EAEvCgrB,EAAQ,GAAG,SAAU,IAAM,CAEvBA,EAAQ,MAAMnZ,EAAQ,QAAQ,CACtC,CAAK,CACL,CACA,SAAS+V,GAAwB/V,EAASqZ,EAAO1f,EAAQ,CACjDA,GAAU,OACVqG,EAAQ,OAASrG,GAErBqG,EAAQ,QAAU,CAAE,GAAGA,EAAQ,OAAO,EACtC,MAAM2W,EAAU3W,EAAQ,QACxB,OAAIqZ,GAAS,OAET1C,EAAQ,cAAgB0C,EAAM,WAAW,OAAO,GAAKA,EAAM,WAAW,QAAQ,EAAIA,EAAQ,SAASA,CAAK,IAExG1C,EAAQ,YAAY,GAAK,OACzBA,EAAQ,YAAY,EAAI,qBAExBhd,GAAU,MAAQA,IAAW,OAASgd,EAAQ,eAAe,GAAK,QAClEA,EAAQ,eAAe,EAAI,YAG3B3W,EAAQ,UAAY,MAAQ,QAAQ,SAAS,UAAY,OACzDA,EAAQ,SAAW,UAEhBA,CACX,CACA,SAASgW,GAAkBvrB,EAAM6uB,EAAc,CAC3C,OAAO,KAAK,UAAU7uB,EAAM,CAACtB,EAAMsD,IAC3BtD,EAAK,SAAS,eAAe,GAC7BA,EAAK,SAAS,eAAe,GAC7BA,EAAK,SAAS,UAAU,GACxBA,EAAK,SAAS,UAAU,GACxBA,EAAK,SAAS,OAAO,GACrBA,EAAK,SAAS,UAAU,GACxBA,EAAK,SAAS,OAAO,GACpBmwB,GAAgB,MAAQA,EAAa,IAAInwB,CAAI,EACvC,4BAEJsD,EACR,CAAC,CACR,WCteA,OAAO,eAAe8sB,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,SAAmB,OACnB,MAAMC,EAAS,CACX,YAAYC,EAAUC,EAAS,CAC3B,KAAK,SAAWD,EAChB,KAAK,QAAUC,EACf,KAAK,SAAW,OAChB,KAAK,OAAS,MACtB,CACI,IAAI,UAAW,CACX,OAAO,KAAK,SAAW,MAC/B,CACI,IAAI,OAAQ,CACR,MAAMC,EAAW,KAAK,SAAQ,EAC9B,GAAI,KAAK,SAAW,QAAaC,GAAO,KAAK,SAAUD,CAAQ,EAE3D,OAAO,KAAK,OAEhB,KAAK,SAAWA,EAChB,MAAMrnB,EAAS,KAAK,QAAQqnB,CAAQ,EACpC,YAAK,MAAQrnB,EACNA,CACf,CACI,IAAI,MAAM7F,EAAO,CACb,KAAK,OAASA,CACtB,CACA,CACA8sB,GAAA,SAAmBC,GACnB,SAASI,GAAOC,EAAYC,EAAa,CAIrC,GAHsB,OAAOD,GAAe,UAAYA,IAAe,OAChD,OAAOC,GAAgB,UAAYA,IAAgB,MAErC,CACjC,MAAMC,EAAQ,OAAO,KAAKF,CAAU,EAC9BG,EAAQ,OAAO,KAAKF,CAAW,EACrC,OAAOC,EAAM,SAAWC,EAAM,QAAUD,EAAM,MAAOlkB,GAAQ+jB,GAAOC,EAAWhkB,CAAG,EAAGikB,EAAYjkB,CAAG,CAAC,CAAC,CAC9G,CAEI,OAAOgkB,IAAeC,CAC1B,WCvCA,OAAO,eAAeG,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,UAAoBC,GACpBD,GAAA,gBAA0BE,GAC1BF,GAAA,yBAAmCG,GAEnC,SAASF,GAAUla,EAASqa,EAAc,aAAc,CACpD,MAAO,GAAGra,EAAQ,UAAY,OAAO,MAAMA,EAAQ,MAAQqa,CAAW,EAC1E,CACA,SAASF,GAAgBna,EAAS,CAC9B,IAAI5X,EACJ,OAAI4X,EAAQ,cACDA,EAAQ,cAEd,GAAA5X,EAAK4X,EAAQ,oBAAsB,MAAQ5X,IAAO,SAASA,EACrD,IAEJ,EACX,CACA,SAASgyB,GAAyBE,EAAe,CAC7C,MAAMC,EAAWD,EAAc,SAC/B,GAAIC,IAAa,KACb,OAAOC,GAAMF,CAAa,EAE9B,GAAIC,IAAa,SACb,OAAOE,GAAUH,CAAa,EAElC,MAAM,IAAI,MAAM,2BAA2BC,CAAQ,EAAE,CACzD,CACA,SAASC,GAAMxa,EAAS,CACpB,IAAIqX,EACJ,GAAIrX,EAAQ,YAAc,GACtBqX,EAAM,WAAWrX,EAAQ,MAAM,uCAE1BA,EAAQ,UAAY,KACzBqX,EAAM,GAAGrX,EAAQ,QAAQ,IAAIA,EAAQ,MAAM,WAEtCA,EAAQ,OAAO,SAAS,GAAG,EAAG,CACnC,GAAIA,EAAQ,QAAU,KAClB,MAAM,IAAI,MAAM,gBAAgBA,EAAQ,MAAM,4CAA4C,EAG1FA,EAAQ,SAAW,YACnBqX,EAAM,4BAA4BrX,EAAQ,MAAM,GAGhDqX,EAAM,cAAcrX,EAAQ,MAAM,kBAAkBA,EAAQ,MAAM,EAE9E,MACaA,EAAQ,SAAW,aACxBqX,EAAM,WAAWrX,EAAQ,MAAM,OAAOA,EAAQ,MAAM,oBAGpDqX,EAAM,WAAWrX,EAAQ,MAAM,oBAEnC,OAAO0a,GAAWrD,EAAKrX,EAAQ,IAAI,CACvC,CACA,SAAS0a,GAAWrD,EAAKhvB,EAAG,CACxB,OAAIA,GAAK,MAAQA,EAAE,OAAS,IACnBA,EAAE,WAAW,GAAG,IACjBgvB,GAAO,KAEXA,GAAOhvB,GAEJgvB,CACX,CACA,SAASoD,GAAUza,EAAS,CACxB,GAAIA,EAAQ,MAAQ,KAChB,MAAM,IAAI,MAAM,iBAAiB,EAErC,GAAIA,EAAQ,QAAU,KAClB,MAAM,IAAI,MAAM,mBAAmB,EAEvC,OAAO0a,GAAW,WAAW1a,EAAQ,IAAI,IAAIA,EAAQ,MAAM,0BAA2BA,EAAQ,IAAI,CACtG,WCzEA,OAAO,eAAe2a,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,MAAgBlW,GAChB,MAAMsL,GAAsB9S,GAC5B,eAAewH,GAAM2T,EAAMpY,EAAS,CAChC,IAAI5X,EACJ,KAAM,CAAE,QAASwyB,EAAY,SAAAC,EAAU,QAAArc,EAAU,EAAG,QAAA9G,EAAU,EAAG,YAAAojB,EAAa,kBAAAxF,EAAoB,IAAIvF,GAAoB,iBAAmB,EAAK/P,EAClJ,GAAI,CACA,OAAO,MAAMoY,EAAI,CACzB,OACWxb,EAAO,CACV,GAAK,MAAM,QAAQ,SAASxU,EAAK0yB,GAAgB,KAAiC,OAASA,EAAYle,CAAK,KAAO,MAAQxU,IAAO,OAASA,EAAK,EAAI,GAAMwyB,EAAa,GAAK,CAACtF,EAAkB,UAC3L,aAAM,IAAI,QAAQhqB,GAAW,WAAWA,EAASuvB,EAAWrc,EAAU9G,CAAO,CAAC,EACvE,MAAM+M,GAAM2T,EAAM,CAAE,GAAGpY,EAAS,QAAS4a,EAAa,EAAG,QAASljB,EAAU,CAAC,CAAE,EAGtF,MAAMkF,CAElB,CACA,WClBA,OAAO,eAAeme,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,QAAkBC,GAClB,SAASA,GAAQC,EAAK,CAClB,IAAIC,EAAS,GACTrlB,EAAM,KACNwjB,EAAQ,GACR8B,EAAe,EACnBF,EAAMA,EAAI,KAAI,EACd,MAAM3oB,EAAS,IAAI,IACnB,QAAS1D,EAAI,EAAGA,GAAKqsB,EAAI,OAAQrsB,IAAK,CAClC,GAAIA,IAAMqsB,EAAI,OAAQ,CACdplB,IAAQ,MACRvD,EAAO,IAAIuD,EAAKwjB,CAAK,EAEzB,KACZ,CACQ,MAAM+B,EAAKH,EAAIrsB,CAAC,EAChB,GAAIssB,GACA,GAAIE,IAAO,IAAK,CACZF,EAAS,GACT,QAChB,MAEa,CACD,GAAIE,IAAO,IAAK,CACZF,EAAS,GACT,QAChB,CACY,GAAIE,IAAO,KAAM,CACbxsB,IACA,MAAMysB,EAAM,SAASJ,EAAI,MAAMrsB,EAAGA,EAAI,CAAC,EAAG,EAAE,EACxC,OAAO,MAAMysB,CAAG,EAChBhC,GAAS4B,EAAIrsB,CAAC,GAGdA,IACAyqB,GAAS,OAAO,aAAagC,CAAG,GAEpC,QAChB,CACY,GAAIxlB,IAAQ,MAAQulB,IAAO,IAAK,CAC5BvlB,EAAMwjB,EACNA,EAAQ,GACR,QAChB,CACY,GAAI+B,IAAO,KAAOA,IAAO,KAAOA,IAAO,IAAK,CACpCvlB,IAAQ,MACRvD,EAAO,IAAIuD,EAAKwjB,CAAK,EAEzBxjB,EAAM,KACNwjB,EAAQ,GACR,QAChB,CACA,CACQ,GAAI+B,IAAO,KAAO,CAACF,EAAQ,CACvB,GAAI7B,EAAM,SAAW,EACjB,SAEJ,GAAIzqB,EAAIusB,EAAc,CAClB,IAAIG,EAAI1sB,EACR,KAAOqsB,EAAIK,CAAC,IAAM,KACdA,IAEJH,EAAeG,CAC/B,CACY,GAAIH,GAAgBF,EAAI,QACpBA,EAAIE,CAAY,IAAM,KACtBF,EAAIE,CAAY,IAAM,KACrBtlB,IAAQ,MAAQolB,EAAIE,CAAY,IAAM,KACtCtlB,IAAQ,MAAQolB,EAAIE,CAAY,IAAM,IAAM,CAC7CvsB,EAAIusB,EAAe,EACnB,QAChB,CACA,CACQ9B,GAAS+B,CACjB,CACI,OAAO9oB,CACX,WC7EA,OAAO,eAAeipB,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,IAAcA,GAAA,KAAe,OAC7B,MAAMtF,GAAWhZ,GACXoZ,GAAUrV,GACVwa,GAAc,mDAEdC,MAAiBxF,GAAS,aAAa,EAAE,EAC/CwF,GAAW,CAAC,EAAIA,GAAW,CAAC,EAAI,EAEhC,MAAMC,GAAW,CAAA,EAEXC,EAAW,CAAA,EAEjB,QAAS/sB,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAC1B,MAAMF,GAAOE,EAAI,KAAO,SAAS,EAAE,EAAE,OAAO,CAAC,EAC7C8sB,GAAShtB,CAAG,EAAIE,EAChB+sB,EAAS/sB,CAAC,EAAIF,CAClB,CAEA,MAAMktB,EAAK,CACP,YAAYL,EAAM,CACd,KAAK,MAAQ,KACb,KAAK,OAAS,KACd,MAAMM,EAAQD,GAAK,MAAML,CAAI,EAC7B,GAAI,CAACM,EACD,MAAM,IAAI,MAAM,YAAY,EAEhC,KAAK,QAAUA,EAAM,QACjBA,EAAM,SAAW,QACjB,KAAK,MAAQN,EAGb,KAAK,OAASA,CAE1B,CACI,OAAO,GAAGpyB,EAAMuoB,EAAW,CACvB,OAAOoK,GAAU3yB,EAAM,OAAQ,GAAMuoB,CAAS,CACtD,CACI,UAAW,CACP,OAAI,KAAK,OAAS,OACd,KAAK,MAAQpE,GAAU,KAAK,MAAM,GAE/B,KAAK,KACpB,CACI,SAAU,CACN,MAAO,SAAS,KAAK,OAAO,IAAI,KAAK,SAAQ,CAAE,EACvD,CACI,OAAO,MAAMiO,EAAMjzB,EAAS,EAAG,CAC3B,GAAI,OAAOizB,GAAS,SAEhB,OADAA,EAAOA,EAAK,YAAW,EAClB,gDAAgD,KAAKA,CAAI,EAG1DA,IAAS,uCACF,CAAE,QAAS,OAAW,QAAS,MAAO,OAAQ,OAAO,EAEzD,CACH,SAAUG,GAASH,EAAK,EAAE,EAAIA,EAAK,EAAE,CAAC,EAAI,MAAS,EACnD,QAASQ,IAAYL,GAASH,EAAK,EAAE,EAAIA,EAAK,EAAE,CAAC,EAAI,MAAS,CAAC,EAC/D,OAAQ,OACxB,EATuB,GAWf,GAAI,OAAO,SAASA,CAAI,EAAG,CACvB,GAAIA,EAAK,OAASjzB,EAAS,GACvB,MAAO,GAEX,IAAIsG,EAAI,EACR,KAAOA,EAAI,IACH2sB,EAAKjzB,EAASsG,CAAC,IAAM,EADdA,IACX,CAIJ,OAAIA,IAAM,GACC,CAAE,QAAS,OAAW,QAAS,MAAO,OAAQ,QAAQ,EAE1D,CACH,SAAU2sB,EAAKjzB,EAAS,CAAC,EAAI,MAAS,EACtC,QAASyzB,IAAYR,EAAKjzB,EAAS,CAAC,EAAI,MAAS,CAAC,EAClD,OAAQ,QACxB,CACA,CACQ,QAAU+tB,GAAQ,UAAU,uBAAwB,uBAAuB,CACnF,CAEI,OAAO,MAAM2F,EAAO,CAChB,MAAM9vB,EAAS,OAAO,YAAY,EAAE,EACpC,IAAIovB,EAAI,EACR,QAAS,EAAI,EAAG,EAAI,GAAI,IACpBpvB,EAAO,CAAC,EAAIwvB,GAASM,EAAMV,GAAG,EAAIU,EAAMV,GAAG,CAAC,GACxC,IAAM,GAAK,IAAM,GAAK,IAAM,GAAK,IAAM,KACvCA,GAAK,GAGb,OAAOpvB,CACf,CACA,CACAqvB,GAAA,KAAeK,GAEfA,GAAK,IAAMA,GAAK,MAAM,sCAAsC,EAE5D,SAASG,GAAWE,EAAM,CACtB,OAAQA,EAAI,CACR,IAAK,GACL,IAAK,GACL,IAAK,GACD,MAAO,MACX,IAAK,GACL,IAAK,GACD,MAAO,UACX,IAAK,GACD,MAAO,YACX,QACI,MAAO,QACnB,CACA,CACA,IAAIC,IACH,SAAUA,EAAc,CACrBA,EAAaA,EAAa,MAAW,CAAC,EAAI,QAC1CA,EAAaA,EAAa,OAAY,CAAC,EAAI,SAC3CA,EAAaA,EAAa,OAAY,CAAC,EAAI,QAC/C,GAAGA,KAAiBA,GAAe,CAAA,EAAG,EAEtC,SAASJ,GAAU3yB,EAAMgzB,EAAY1H,EAAS/C,EAAWpD,EAAW4N,GAAa,MAAO,CACpF,MAAMvK,KAAWsE,GAAS,YAAYkG,CAAU,EAEhD,GADyB,OAAOhzB,GAAS,UACjB,CAAC,OAAO,SAASA,CAAI,EACzC,QAAUktB,GAAQ,UAAUmF,GAAa,uBAAuB,EAEpE7J,EAAK,OAAOD,CAAS,EACrBC,EAAK,OAAOxoB,CAAI,EAChB,MAAM+C,EAASylB,EAAK,OAAM,EAC1B,IAAIrf,EACJ,OAAQgc,EAAQ,CACZ,KAAK4N,GAAa,OACdhwB,EAAO,CAAC,EAAKA,EAAO,CAAC,EAAI,GAAQuoB,EACjCvoB,EAAO,CAAC,EAAKA,EAAO,CAAC,EAAI,GAAQ,IACjCoG,EAASpG,EACT,MACJ,KAAKgwB,GAAa,OACdhwB,EAAO,CAAC,EAAKA,EAAO,CAAC,EAAI,GAAQuoB,EACjCvoB,EAAO,CAAC,EAAKA,EAAO,CAAC,EAAI,GAAQ,IACjCoG,EAAS,IAAIspB,GAAK1vB,CAAM,EACxB,MACJ,QACIoG,EACIqpB,EAASzvB,EAAO,CAAC,CAAC,EACdyvB,EAASzvB,EAAO,CAAC,CAAC,EAClByvB,EAASzvB,EAAO,CAAC,CAAC,EAClByvB,EAASzvB,EAAO,CAAC,CAAC,EAClB,IACAyvB,EAASzvB,EAAO,CAAC,CAAC,EAClByvB,EAASzvB,EAAO,CAAC,CAAC,EAClB,IACAyvB,EAAUzvB,EAAO,CAAC,EAAI,GAAQuoB,CAAO,EACrCkH,EAASzvB,EAAO,CAAC,CAAC,EAClB,IACAyvB,EAAUzvB,EAAO,CAAC,EAAI,GAAQ,GAAI,EAClCyvB,EAASzvB,EAAO,CAAC,CAAC,EAClB,IACAyvB,EAASzvB,EAAO,EAAE,CAAC,EACnByvB,EAASzvB,EAAO,EAAE,CAAC,EACnByvB,EAASzvB,EAAO,EAAE,CAAC,EACnByvB,EAASzvB,EAAO,EAAE,CAAC,EACnByvB,EAASzvB,EAAO,EAAE,CAAC,EACnByvB,EAASzvB,EAAO,EAAE,CAAC,EAC3B,KACZ,CACI,OAAOoG,CACX,CACA,SAASgb,GAAUphB,EAAQ,CACvB,OAAQyvB,EAASzvB,EAAO,CAAC,CAAC,EACtByvB,EAASzvB,EAAO,CAAC,CAAC,EAClByvB,EAASzvB,EAAO,CAAC,CAAC,EAClByvB,EAASzvB,EAAO,CAAC,CAAC,EAClB,IACAyvB,EAASzvB,EAAO,CAAC,CAAC,EAClByvB,EAASzvB,EAAO,CAAC,CAAC,EAClB,IACAyvB,EAASzvB,EAAO,CAAC,CAAC,EAClByvB,EAASzvB,EAAO,CAAC,CAAC,EAClB,IACAyvB,EAASzvB,EAAO,CAAC,CAAC,EAClByvB,EAASzvB,EAAO,CAAC,CAAC,EAClB,IACAyvB,EAASzvB,EAAO,EAAE,CAAC,EACnByvB,EAASzvB,EAAO,EAAE,CAAC,EACnByvB,EAASzvB,EAAO,EAAE,CAAC,EACnByvB,EAASzvB,EAAO,EAAE,CAAC,EACnByvB,EAASzvB,EAAO,EAAE,CAAC,EACnByvB,EAASzvB,EAAO,EAAE,CAAC,CAC3B,CAEAqvB,GAAA,IAAc,IAAIK,GAAK,sCAAsC,gCCjM3D,SAAUQ,EAAK,CAEfA,EAAI,OAAS,SAAUC,EAAQC,EAAK,CAClC,OAAO,IAAIC,EAAUF,EAAQC,CAAG,CACpC,EACEF,EAAI,UAAYG,EAChBH,EAAI,UAAYI,EAChBJ,EAAI,aAAeK,EAWnBL,EAAI,kBAAoB,GAAK,KAE7B,IAAIhX,EAAU,CACZ,UACA,WACA,WACA,UACA,UACA,eACA,eACA,SACA,aACA,cACA,QACA,UAGFgX,EAAI,OAAS,CACX,OACA,wBACA,kBACA,UACA,UACA,eACA,YACA,UACA,WACA,YACA,QACA,aACA,QACA,MACA,QACA,SACA,gBACA,kBAGF,SAASG,EAAUF,EAAQC,EAAK,CAC9B,GAAI,EAAE,gBAAgBC,GACpB,OAAO,IAAIA,EAAUF,EAAQC,CAAG,EAGlC,IAAII,EAAS,KACbC,EAAaD,CAAM,EACnBA,EAAO,EAAIA,EAAO,EAAI,GACtBA,EAAO,oBAAsBN,EAAI,kBACjCM,EAAO,IAAMJ,GAAO,CAAA,EACpBI,EAAO,IAAI,UAAYA,EAAO,IAAI,WAAaA,EAAO,IAAI,cAC1DA,EAAO,UAAYA,EAAO,IAAI,UAAY,cAAgB,cAC1DA,EAAO,KAAO,CAAA,EACdA,EAAO,OAASA,EAAO,WAAaA,EAAO,QAAU,GACrDA,EAAO,IAAMA,EAAO,MAAQ,KAC5BA,EAAO,OAAS,CAAC,CAACL,EAClBK,EAAO,SAAW,CAAC,EAAEL,GAAUK,EAAO,IAAI,UAC1CA,EAAO,MAAQE,EAAE,MACjBF,EAAO,eAAiBA,EAAO,IAAI,eACnCA,EAAO,SACLA,EAAO,eACL,OAAO,OAAON,EAAI,YAAY,EAC9B,OAAO,OAAOA,EAAI,QAAQ,EAC9BM,EAAO,WAAa,CAAA,EAKhBA,EAAO,IAAI,QACbA,EAAO,GAAK,OAAO,OAAOG,CAAM,GAK9BH,EAAO,IAAI,0BAA4B,SACzCA,EAAO,IAAI,wBAA0B,CAACL,GAIxCK,EAAO,cAAgBA,EAAO,IAAI,WAAa,GAC3CA,EAAO,gBACTA,EAAO,SAAWA,EAAO,KAAOA,EAAO,OAAS,GAElDrhB,EAAKqhB,EAAQ,SAAS,CAC1B,CAEO,OAAO,SACV,OAAO,OAAS,SAAUI,EAAG,CAC3B,SAASC,GAAI,CAAA,CACbA,EAAE,UAAYD,EACd,IAAIE,EAAO,IAAID,EACf,OAAOC,CACb,GAGO,OAAO,OACV,OAAO,KAAO,SAAUF,EAAG,CACzB,IAAI11B,EAAI,CAAA,EACR,QAASwH,KAAKkuB,EAAOA,EAAE,eAAeluB,CAAC,GAAGxH,EAAE,KAAKwH,CAAC,EAClD,OAAOxH,CACb,GAGE,SAAS61B,EAAkBP,EAAQ,CAGjC,QAFIQ,EAAa,KAAK,IAAId,EAAI,kBAAmB,EAAE,EAC/Ce,EAAY,EACPvuB,EAAI,EAAG/E,EAAIub,EAAQ,OAAQxW,EAAI/E,EAAG+E,IAAK,CAC9C,IAAIwuB,GAAMV,EAAOtX,EAAQxW,CAAC,CAAC,EAAE,OAC7B,GAAIwuB,GAAMF,EAKR,OAAQ9X,EAAQxW,CAAC,EAAC,CAChB,IAAK,WACHyuB,EAAUX,CAAM,EAChB,MAEF,IAAK,QACHY,EAASZ,EAAQ,UAAWA,EAAO,KAAK,EACxCA,EAAO,MAAQ,GACf,MAEF,IAAK,SACHY,EAASZ,EAAQ,WAAYA,EAAO,MAAM,EAC1CA,EAAO,OAAS,GAChB,MAEF,QACE9f,EAAM8f,EAAQ,+BAAiCtX,EAAQxW,CAAC,CAAC,EAG/DuuB,EAAY,KAAK,IAAIA,EAAWC,EAAG,CACzC,CAEI,IAAIj2B,GAAIi1B,EAAI,kBAAoBe,EAChCT,EAAO,oBAAsBv1B,GAAIu1B,EAAO,QAC5C,CAEE,SAASC,EAAaD,EAAQ,CAC5B,QAAS9tB,EAAI,EAAG/E,EAAIub,EAAQ,OAAQxW,EAAI/E,EAAG+E,IACzC8tB,EAAOtX,EAAQxW,CAAC,CAAC,EAAI,EAE3B,CAEE,SAAS2uB,EAAab,EAAQ,CAC5BW,EAAUX,CAAM,EACZA,EAAO,QAAU,KACnBY,EAASZ,EAAQ,UAAWA,EAAO,KAAK,EACxCA,EAAO,MAAQ,IAEbA,EAAO,SAAW,KACpBY,EAASZ,EAAQ,WAAYA,EAAO,MAAM,EAC1CA,EAAO,OAAS,GAEtB,CAEEH,EAAU,UAAY,CACpB,IAAK,UAAY,CACfiB,EAAI,IAAI,CACd,EACI,MAAOC,GACP,OAAQ,UAAY,CAClB,YAAK,MAAQ,KACN,IACb,EACI,MAAO,UAAY,CACjB,OAAO,KAAK,MAAM,IAAI,CAC5B,EACI,MAAO,UAAY,CACjBF,EAAa,IAAI,CACvB,GAGE,IAAIpd,EACJ,GAAI,CACFA,EAAS,QAAQ,QAAQ,EAAE,MAC/B,MAAe,CACXA,EAAS,UAAY,CAAA,CACzB,CACOA,IAAQA,EAAS,UAAY,CAAA,GAElC,IAAIud,EAActB,EAAI,OAAO,OAAO,SAAUuB,EAAI,CAChD,OAAOA,IAAO,SAAWA,IAAO,KACpC,CAAG,EAED,SAASlB,EAAaJ,EAAQC,EAAK,CACjC,OAAO,IAAIE,EAAUH,EAAQC,CAAG,CACpC,CAEE,SAASE,EAAUH,EAAQC,EAAK,CAC9B,GAAI,EAAE,gBAAgBE,GACpB,OAAO,IAAIA,EAAUH,EAAQC,CAAG,EAGlCnc,EAAO,MAAM,IAAI,EAEjB,KAAK,QAAU,IAAIoc,EAAUF,EAAQC,CAAG,EACxC,KAAK,SAAW,GAChB,KAAK,SAAW,GAEhB,IAAIsB,EAAK,KAET,KAAK,QAAQ,MAAQ,UAAY,CAC/BA,EAAG,KAAK,KAAK,CACnB,EAEI,KAAK,QAAQ,QAAU,SAAUlf,EAAI,CACnCkf,EAAG,KAAK,QAASlf,CAAE,EAInBkf,EAAG,QAAQ,MAAQ,IACzB,EAEI,KAAK,SAAW,KAEhBF,EAAY,QAAQ,SAAUC,EAAI,CAChC,OAAO,eAAeC,EAAI,KAAOD,EAAI,CACnC,IAAK,UAAY,CACf,OAAOC,EAAG,QAAQ,KAAOD,CAAE,CACrC,EACQ,IAAK,SAAUnN,EAAG,CAChB,GAAI,CAACA,EACH,OAAAoN,EAAG,mBAAmBD,CAAE,EACxBC,EAAG,QAAQ,KAAOD,CAAE,EAAInN,EACjBA,EAEToN,EAAG,GAAGD,EAAInN,CAAC,CACrB,EACQ,WAAY,GACZ,aAAc,EACtB,CAAO,CACP,CAAK,CACL,CAEEgM,EAAU,UAAY,OAAO,OAAOrc,EAAO,UAAW,CACpD,YAAa,CACX,MAAOqc,EAEb,CAAG,EAEDA,EAAU,UAAU,MAAQ,SAAU/xB,EAAM,CAC1C,OACE,OAAO,QAAW,YAClB,OAAO,OAAO,UAAa,YAC3B,OAAO,SAASA,CAAI,IAEf,KAAK,WACR,KAAK,SAAW,IAAI,YAAY,MAAM,GAExCA,EAAO,KAAK,SAAS,OAAOA,EAAM,CAAE,OAAQ,EAAI,CAAE,GAGpD,KAAK,QAAQ,MAAMA,EAAK,SAAQ,CAAE,EAClC,KAAK,KAAK,OAAQA,CAAI,EACf,EACX,EAEE+xB,EAAU,UAAU,IAAM,SAAUhH,EAAO,CAKzC,GAJIA,GAASA,EAAM,QACjB,KAAK,MAAMA,CAAK,EAGd,KAAK,SAAU,CACjB,IAAIqI,EAAY,KAAK,SAAS,OAAM,EAChCA,IACF,KAAK,QAAQ,MAAMA,CAAS,EAC5B,KAAK,KAAK,OAAQA,CAAS,EAEnC,CACI,YAAK,QAAQ,IAAG,EACT,EACX,EAEErB,EAAU,UAAU,GAAK,SAAUmB,EAAIjiB,EAAS,CAC9C,IAAIkiB,EAAK,KACT,MAAI,CAACA,EAAG,QAAQ,KAAOD,CAAE,GAAKD,EAAY,QAAQC,CAAE,IAAM,KACxDC,EAAG,QAAQ,KAAOD,CAAE,EAAI,UAAY,CAClC,IAAIzjB,EACF,UAAU,SAAW,EACnB,CAAC,UAAU,CAAC,CAAC,EACb,MAAM,MAAM,KAAM,SAAS,EAC/BA,EAAK,OAAO,EAAG,EAAGyjB,CAAE,EACpBC,EAAG,KAAK,MAAMA,EAAI1jB,CAAI,CAC9B,GAGWiG,EAAO,UAAU,GAAG,KAAKyd,EAAID,EAAIjiB,CAAO,CACnD,EAIE,IAAIoiB,EAAQ,UACRC,EAAU,UACVC,EAAgB,uCAChBC,EAAkB,gCAClBpB,EAAS,CAAE,IAAKmB,EAAe,MAAOC,CAAe,EAQrDC,EACF,4JAEEC,EACF,gMAEEC,EACF,6JACEC,EACF,iMAEF,SAASC,EAAaz1B,EAAG,CACvB,OAAOA,IAAM,KAAOA,IAAM;AAAA,GAAQA,IAAM,MAAQA,IAAM,GAC1D,CAEE,SAAS01B,EAAQ11B,EAAG,CAClB,OAAOA,IAAM,KAAOA,IAAM,GAC9B,CAEE,SAAS21B,GAAY31B,EAAG,CACtB,OAAOA,IAAM,KAAOy1B,EAAaz1B,CAAC,CACtC,CAEE,SAAS41B,EAAQC,EAAO71B,EAAG,CACzB,OAAO61B,EAAM,KAAK71B,CAAC,CACvB,CAEE,SAAS81B,GAASD,EAAO71B,EAAG,CAC1B,MAAO,CAAC41B,EAAQC,EAAO71B,CAAC,CAC5B,CAEE,IAAI+zB,EAAI,EACRR,EAAI,MAAQ,CACV,MAAOQ,IACP,iBAAkBA,IAClB,KAAMA,IACN,YAAaA,IACb,UAAWA,IACX,UAAWA,IACX,iBAAkBA,IAClB,QAASA,IACT,eAAgBA,IAChB,YAAaA,IACb,mBAAoBA,IACpB,iBAAkBA,IAClB,QAASA,IACT,eAAgBA,IAChB,cAAeA,IACf,MAAOA,IACP,aAAcA,IACd,eAAgBA,IAChB,UAAWA,IACX,eAAgBA,IAChB,iBAAkBA,IAClB,SAAUA,IACV,eAAgBA,IAChB,OAAQA,IACR,YAAaA,IACb,sBAAuBA,IACvB,aAAcA,IACd,oBAAqBA,IACrB,oBAAqBA,IACrB,sBAAuBA,IACvB,sBAAuBA,IACvB,sBAAuBA,IACvB,UAAWA,IACX,oBAAqBA,IACrB,OAAQA,IACR,cAAeA,KAGjBR,EAAI,aAAe,CACjB,IAAK,IACL,GAAI,IACJ,GAAI,IACJ,KAAM,IACN,KAAM,KAGRA,EAAI,SAAW,CACb,IAAK,IACL,GAAI,IACJ,GAAI,IACJ,KAAM,IACN,KAAM,IACN,MAAO,IACP,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,KAAM,IACN,OAAQ,IACR,IAAK,IACL,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,KAAM,IACN,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,KAAM,IACN,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,KAAM,IACN,MAAO,IACP,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,KAAM,IACN,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,MAAO,IACP,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,KAAM,IACN,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,IAAK,IACL,KAAM,IACN,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,KAAM,IACN,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,KAAM,IACN,MAAO,IACP,MAAO,IACP,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,KAAM,IACN,OAAQ,IACR,KAAM,IACN,KAAM,IACN,IAAK,IACL,KAAM,IACN,MAAO,IACP,KAAM,IACN,MAAO,IACP,OAAQ,IACR,IAAK,IACL,OAAQ,IACR,KAAM,IACN,IAAK,IACL,KAAM,IACN,MAAO,IACP,IAAK,IACL,IAAK,IACL,KAAM,IACN,IAAK,IACL,OAAQ,IACR,KAAM,IACN,KAAM,IACN,KAAM,IACN,MAAO,IACP,MAAO,IACP,KAAM,IACN,OAAQ,IACR,MAAO,IACP,KAAM,IACN,MAAO,IACP,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,MAAO,IACP,OAAQ,IACR,MAAO,IACP,MAAO,IACP,OAAQ,IACR,OAAQ,IACR,KAAM,IACN,KAAM,IACN,KAAM,IACN,MAAO,IACP,MAAO,IACP,KAAM,IACN,MAAO,IACP,MAAO,IACP,QAAS,IACT,KAAM,IACN,IAAK,IACL,MAAO,IACP,KAAM,IACN,MAAO,IACP,OAAQ,IACR,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,QAAS,IACT,GAAI,IACJ,IAAK,IACL,MAAO,IACP,IAAK,IACL,QAAS,IACT,IAAK,IACL,IAAK,IACL,IAAK,IACL,MAAO,IACP,MAAO,IACP,KAAM,IACN,MAAO,IACP,MAAO,IACP,QAAS,IACT,KAAM,IACN,IAAK,IACL,MAAO,IACP,KAAM,IACN,MAAO,IACP,OAAQ,IACR,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,QAAS,IACT,GAAI,IACJ,IAAK,IACL,OAAQ,IACR,MAAO,IACP,IAAK,IACL,QAAS,IACT,IAAK,IACL,IAAK,IACL,IAAK,IACL,MAAO,IACP,SAAU,IACV,MAAO,IACP,IAAK,IACL,KAAM,KACN,KAAM,KACN,OAAQ,KACR,KAAM,KACN,IAAK,KACL,IAAK,KACL,IAAK,KACL,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,MAAO,KACP,OAAQ,KACR,OAAQ,KACR,KAAM,KACN,OAAQ,KACR,OAAQ,KACR,MAAO,KACP,MAAO,KACP,OAAQ,KACR,OAAQ,KACR,MAAO,KACP,MAAO,KACP,KAAM,KACN,MAAO,KACP,OAAQ,KACR,KAAM,KACN,MAAO,KACP,QAAS,KACT,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,KACN,MAAO,KACP,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,KACN,KAAM,KACN,OAAQ,KACR,KAAM,KACN,MAAO,KACP,MAAO,KACP,MAAO,KACP,KAAM,KACN,MAAO,KACP,GAAI,KACJ,KAAM,KACN,IAAK,KACL,MAAO,KACP,OAAQ,KACR,MAAO,KACP,KAAM,KACN,MAAO,KACP,IAAK,KACL,IAAK,KACL,GAAI,KACJ,IAAK,KACL,IAAK,KACL,IAAK,KACL,OAAQ,KACR,IAAK,KACL,KAAM,KACN,MAAO,KACP,GAAI,KACJ,MAAO,KACP,GAAI,KACJ,GAAI,KACJ,IAAK,KACL,IAAK,KACL,KAAM,KACN,KAAM,KACN,KAAM,KACN,MAAO,KACP,OAAQ,KACR,KAAM,KACN,KAAM,KACN,MAAO,KACP,MAAO,KACP,OAAQ,KACR,OAAQ,KACR,KAAM,KACN,KAAM,KACN,IAAK,KACL,OAAQ,KACR,MAAO,KACP,OAAQ,KACR,MAAO,MAGT,OAAO,KAAKA,EAAI,QAAQ,EAAE,QAAQ,SAAUvmB,EAAK,CAC/C,IAAIhJ,EAAIuvB,EAAI,SAASvmB,CAAG,EACpBtH,EAAI,OAAO1B,GAAM,SAAW,OAAO,aAAaA,CAAC,EAAIA,EACzDuvB,EAAI,SAASvmB,CAAG,EAAItH,CACxB,CAAG,EAED,QAASA,KAAK6tB,EAAI,MAChBA,EAAI,MAAMA,EAAI,MAAM7tB,CAAC,CAAC,EAAIA,EAI5BquB,EAAIR,EAAI,MAER,SAAS/gB,EAAKqhB,EAAQzqB,EAAOxH,EAAM,CACjCiyB,EAAOzqB,CAAK,GAAKyqB,EAAOzqB,CAAK,EAAExH,CAAI,CACvC,CAEE,SAAS6yB,EAASZ,EAAQkC,EAAUn0B,EAAM,CACpCiyB,EAAO,UAAUW,EAAUX,CAAM,EACrCrhB,EAAKqhB,EAAQkC,EAAUn0B,CAAI,CAC/B,CAEE,SAAS4yB,EAAUX,EAAQ,CACzBA,EAAO,SAAWmC,EAASnC,EAAO,IAAKA,EAAO,QAAQ,EAClDA,EAAO,UAAUrhB,EAAKqhB,EAAQ,SAAUA,EAAO,QAAQ,EAC3DA,EAAO,SAAW,EACtB,CAEE,SAASmC,EAASvC,EAAKnxB,EAAM,CAC3B,OAAImxB,EAAI,OAAMnxB,EAAOA,EAAK,KAAI,GAC1BmxB,EAAI,YAAWnxB,EAAOA,EAAK,QAAQ,OAAQ,GAAG,GAC3CA,CACX,CAEE,SAASyR,EAAM8f,EAAQhe,EAAI,CACzB,OAAA2e,EAAUX,CAAM,EACZA,EAAO,gBACThe,GACE;AAAA,QACAge,EAAO,KACP;AAAA,UACAA,EAAO,OACP;AAAA,QACAA,EAAO,GAEXhe,EAAK,IAAI,MAAMA,CAAE,EACjBge,EAAO,MAAQhe,EACfrD,EAAKqhB,EAAQ,UAAWhe,CAAE,EACnBge,CACX,CAEE,SAASc,EAAId,EAAQ,CACnB,OAAIA,EAAO,SAAW,CAACA,EAAO,YAC5BoC,EAAWpC,EAAQ,mBAAmB,EAEtCA,EAAO,QAAUE,EAAE,OACnBF,EAAO,QAAUE,EAAE,kBACnBF,EAAO,QAAUE,EAAE,MAEnBhgB,EAAM8f,EAAQ,gBAAgB,EAEhCW,EAAUX,CAAM,EAChBA,EAAO,EAAI,GACXA,EAAO,OAAS,GAChBrhB,EAAKqhB,EAAQ,OAAO,EACpBH,EAAU,KAAKG,EAAQA,EAAO,OAAQA,EAAO,GAAG,EACzCA,CACX,CAEE,SAASoC,EAAWpC,EAAQlhB,EAAS,CACnC,GAAI,OAAOkhB,GAAW,UAAY,EAAEA,aAAkBH,GACpD,MAAM,IAAI,MAAM,wBAAwB,EAEtCG,EAAO,QACT9f,EAAM8f,EAAQlhB,CAAO,CAE3B,CAEE,SAASujB,EAAOrC,EAAQ,CACjBA,EAAO,SAAQA,EAAO,QAAUA,EAAO,QAAQA,EAAO,SAAS,EAAC,GACrE,IAAIrN,EAASqN,EAAO,KAAKA,EAAO,KAAK,OAAS,CAAC,GAAKA,EAChDnhB,EAAOmhB,EAAO,IAAM,CAAE,KAAMA,EAAO,QAAS,WAAY,EAAE,EAG1DA,EAAO,IAAI,QACbnhB,EAAI,GAAK8T,EAAO,IAElBqN,EAAO,WAAW,OAAS,EAC3BY,EAASZ,EAAQ,iBAAkBnhB,CAAG,CAC1C,CAEE,SAASyjB,EAAM71B,EAAM81B,EAAW,CAC9B,IAAIrwB,EAAIzF,EAAK,QAAQ,GAAG,EACpB+1B,EAAWtwB,EAAI,EAAI,CAAC,GAAIzF,CAAI,EAAIA,EAAK,MAAM,GAAG,EAC9C4qB,EAASmL,EAAS,CAAC,EACnBC,GAAQD,EAAS,CAAC,EAGtB,OAAID,GAAa91B,IAAS,UACxB4qB,EAAS,QACToL,GAAQ,IAGH,CAAE,OAAQpL,EAAQ,MAAOoL,EAAK,CACzC,CAEE,SAASC,EAAO1C,EAAQ,CAKtB,GAJKA,EAAO,SACVA,EAAO,WAAaA,EAAO,WAAWA,EAAO,SAAS,EAAC,GAIvDA,EAAO,WAAW,QAAQA,EAAO,UAAU,IAAM,IACjDA,EAAO,IAAI,WAAW,eAAeA,EAAO,UAAU,EACtD,CACAA,EAAO,WAAaA,EAAO,YAAc,GACzC,MACN,CAEI,GAAIA,EAAO,IAAI,MAAO,CACpB,IAAI2C,EAAKL,EAAMtC,EAAO,WAAY,EAAI,EAClC3I,EAASsL,EAAG,OACZF,EAAQE,EAAG,MAEf,GAAItL,IAAW,QAEb,GAAIoL,IAAU,OAASzC,EAAO,cAAgBsB,EAC5Cc,EACEpC,EACA,gCACEsB,EACA;AAAA,UAEAtB,EAAO,qBAGXyC,IAAU,SACVzC,EAAO,cAAgBuB,EAEvBa,EACEpC,EACA,kCACEuB,EACA;AAAA,UAEAvB,EAAO,iBAEN,CACL,IAAInhB,EAAMmhB,EAAO,IACbrN,GAASqN,EAAO,KAAKA,EAAO,KAAK,OAAS,CAAC,GAAKA,EAChDnhB,EAAI,KAAO8T,GAAO,KACpB9T,EAAI,GAAK,OAAO,OAAO8T,GAAO,EAAE,GAElC9T,EAAI,GAAG4jB,CAAK,EAAIzC,EAAO,WACjC,CAMMA,EAAO,WAAW,KAAK,CAACA,EAAO,WAAYA,EAAO,WAAW,CAAC,CACpE,MAEMA,EAAO,IAAI,WAAWA,EAAO,UAAU,EAAIA,EAAO,YAClDY,EAASZ,EAAQ,cAAe,CAC9B,KAAMA,EAAO,WACb,MAAOA,EAAO,WACtB,CAAO,EAGHA,EAAO,WAAaA,EAAO,YAAc,EAC7C,CAEE,SAAS4C,EAAQ5C,EAAQ6C,EAAa,CACpC,GAAI7C,EAAO,IAAI,MAAO,CAEpB,IAAInhB,EAAMmhB,EAAO,IAGb2C,EAAKL,EAAMtC,EAAO,OAAO,EAC7BnhB,EAAI,OAAS8jB,EAAG,OAChB9jB,EAAI,MAAQ8jB,EAAG,MACf9jB,EAAI,IAAMA,EAAI,GAAG8jB,EAAG,MAAM,GAAK,GAE3B9jB,EAAI,QAAU,CAACA,EAAI,MACrBujB,EACEpC,EACA,6BAA+B,KAAK,UAAUA,EAAO,OAAO,GAE9DnhB,EAAI,IAAM8jB,EAAG,QAGf,IAAIhQ,EAASqN,EAAO,KAAKA,EAAO,KAAK,OAAS,CAAC,GAAKA,EAChDnhB,EAAI,IAAM8T,EAAO,KAAO9T,EAAI,IAC9B,OAAO,KAAKA,EAAI,EAAE,EAAE,QAAQ,SAAUlT,GAAG,CACvCi1B,EAASZ,EAAQ,kBAAmB,CAClC,OAAQr0B,GACR,IAAKkT,EAAI,GAAGlT,EAAC,CACzB,CAAW,CACX,CAAS,EAMH,QAASuG,GAAI,EAAG/E,GAAI6yB,EAAO,WAAW,OAAQ9tB,GAAI/E,GAAG+E,KAAK,CACxD,IAAI4wB,GAAK9C,EAAO,WAAW9tB,EAAC,EACxBzF,GAAOq2B,GAAG,CAAC,EACX/yB,GAAQ+yB,GAAG,CAAC,EACZN,GAAWF,EAAM71B,GAAM,EAAI,EAC3B4qB,GAASmL,GAAS,OAClBC,GAAQD,GAAS,MACjBO,GAAM1L,KAAW,GAAK,GAAKxY,EAAI,GAAGwY,EAAM,GAAK,GAC7C3sB,GAAI,CACN,KAAM+B,GACN,MAAOsD,GACP,OAAQsnB,GACR,MAAOoL,GACP,IAAKM,IAKH1L,IAAUA,KAAW,SAAW,CAAC0L,KACnCX,EACEpC,EACA,6BAA+B,KAAK,UAAU3I,EAAM,GAEtD3sB,GAAE,IAAM2sB,IAEV2I,EAAO,IAAI,WAAWvzB,EAAI,EAAI/B,GAC9Bk2B,EAASZ,EAAQ,cAAet1B,EAAC,CACzC,CACMs1B,EAAO,WAAW,OAAS,CACjC,CAEIA,EAAO,IAAI,cAAgB,CAAC,CAAC6C,EAG7B7C,EAAO,QAAU,GACjBA,EAAO,KAAK,KAAKA,EAAO,GAAG,EAC3BY,EAASZ,EAAQ,YAAaA,EAAO,GAAG,EACnC6C,IAEC,CAAC7C,EAAO,UAAYA,EAAO,QAAQ,YAAW,IAAO,SACvDA,EAAO,MAAQE,EAAE,OAEjBF,EAAO,MAAQE,EAAE,KAEnBF,EAAO,IAAM,KACbA,EAAO,QAAU,IAEnBA,EAAO,WAAaA,EAAO,YAAc,GACzCA,EAAO,WAAW,OAAS,CAC/B,CAEE,SAASgD,EAAShD,EAAQ,CACxB,GAAI,CAACA,EAAO,QAAS,CACnBoC,EAAWpC,EAAQ,wBAAwB,EAC3CA,EAAO,UAAY,MACnBA,EAAO,MAAQE,EAAE,KACjB,MACN,CAEI,GAAIF,EAAO,OAAQ,CACjB,GAAIA,EAAO,UAAY,SAAU,CAC/BA,EAAO,QAAU,KAAOA,EAAO,QAAU,IACzCA,EAAO,QAAU,GACjBA,EAAO,MAAQE,EAAE,OACjB,MACR,CACMU,EAASZ,EAAQ,WAAYA,EAAO,MAAM,EAC1CA,EAAO,OAAS,EACtB,CAII,IAAIiD,EAAIjD,EAAO,KAAK,OAChBkD,EAAUlD,EAAO,QAChBA,EAAO,SACVkD,EAAUA,EAAQlD,EAAO,SAAS,EAAC,GAGrC,QADImD,EAAUD,EACPD,KAAK,CACV,IAAI7d,EAAQ4a,EAAO,KAAKiD,CAAC,EACzB,GAAI7d,EAAM,OAAS+d,EAEjBf,EAAWpC,EAAQ,sBAAsB,MAEzC,MAER,CAGI,GAAIiD,EAAI,EAAG,CACTb,EAAWpC,EAAQ,0BAA4BA,EAAO,OAAO,EAC7DA,EAAO,UAAY,KAAOA,EAAO,QAAU,IAC3CA,EAAO,MAAQE,EAAE,KACjB,MACN,CACIF,EAAO,QAAUkD,EAEjB,QADIrxB,GAAImuB,EAAO,KAAK,OACbnuB,MAAMoxB,GAAG,CACd,IAAIpkB,GAAOmhB,EAAO,IAAMA,EAAO,KAAK,IAAG,EACvCA,EAAO,QAAUA,EAAO,IAAI,KAC5BY,EAASZ,EAAQ,aAAcA,EAAO,OAAO,EAE7C,IAAIoD,GAAI,CAAA,EACR,QAASlxB,MAAK2M,GAAI,GAChBukB,GAAElxB,EAAC,EAAI2M,GAAI,GAAG3M,EAAC,EAGjB,IAAIygB,GAASqN,EAAO,KAAKA,EAAO,KAAK,OAAS,CAAC,GAAKA,EAChDA,EAAO,IAAI,OAASnhB,GAAI,KAAO8T,GAAO,IAExC,OAAO,KAAK9T,GAAI,EAAE,EAAE,QAAQ,SAAUlT,GAAG,CACvC,IAAIsiB,GAAIpP,GAAI,GAAGlT,EAAC,EAChBi1B,EAASZ,EAAQ,mBAAoB,CAAE,OAAQr0B,GAAG,IAAKsiB,EAAC,CAAE,CACpE,CAAS,CAET,CACQgV,IAAM,IAAGjD,EAAO,WAAa,IACjCA,EAAO,QAAUA,EAAO,YAAcA,EAAO,WAAa,GAC1DA,EAAO,WAAW,OAAS,EAC3BA,EAAO,MAAQE,EAAE,IACrB,CAEE,SAASmD,EAAYrD,EAAQ,CAC3B,IAAIsD,EAAStD,EAAO,OAChBuD,EAAWD,EAAO,YAAW,EAC7BE,EACAC,EAAS,GAEb,OAAIzD,EAAO,SAASsD,CAAM,EACjBtD,EAAO,SAASsD,CAAM,EAE3BtD,EAAO,SAASuD,CAAQ,EACnBvD,EAAO,SAASuD,CAAQ,GAEjCD,EAASC,EACLD,EAAO,OAAO,CAAC,IAAM,MACnBA,EAAO,OAAO,CAAC,IAAM,KACvBA,EAASA,EAAO,MAAM,CAAC,EACvBE,EAAM,SAASF,EAAQ,EAAE,EACzBG,EAASD,EAAI,SAAS,EAAE,IAExBF,EAASA,EAAO,MAAM,CAAC,EACvBE,EAAM,SAASF,EAAQ,EAAE,EACzBG,EAASD,EAAI,SAAS,EAAE,IAG5BF,EAASA,EAAO,QAAQ,MAAO,EAAE,EAE/B,MAAME,CAAG,GACTC,EAAO,YAAW,IAAOH,GACzBE,EAAM,GACNA,EAAM,SAENpB,EAAWpC,EAAQ,0BAA0B,EACtC,IAAMA,EAAO,OAAS,KAGxB,OAAO,cAAcwD,CAAG,EACnC,CAEE,SAASE,GAAgB1D,EAAQ7zB,EAAG,CAC9BA,IAAM,KACR6zB,EAAO,MAAQE,EAAE,UACjBF,EAAO,iBAAmBA,EAAO,UACvB4B,EAAaz1B,CAAC,IAGxBi2B,EAAWpC,EAAQ,kCAAkC,EACrDA,EAAO,SAAW7zB,EAClB6zB,EAAO,MAAQE,EAAE,KAEvB,CAEE,SAASyD,EAAO7K,EAAO5mB,EAAG,CACxB,IAAI0D,EAAS,GACb,OAAI1D,EAAI4mB,EAAM,SACZljB,EAASkjB,EAAM,OAAO5mB,CAAC,GAElB0D,CACX,CAEE,SAASmrB,GAAMjI,EAAO,CACpB,IAAIkH,EAAS,KACb,GAAI,KAAK,MACP,MAAM,KAAK,MAEb,GAAIA,EAAO,OACT,OAAO9f,EACL8f,EACA,wDAGJ,GAAIlH,IAAU,KACZ,OAAOgI,EAAId,CAAM,EAEf,OAAOlH,GAAU,WACnBA,EAAQA,EAAM,SAAQ,GAIxB,QAFI5mB,EAAI,EACJ/F,EAAI,GAENA,EAAIw3B,EAAO7K,EAAO5mB,GAAG,EACrB8tB,EAAO,EAAI7zB,EAEP,EAACA,GAcL,OAVI6zB,EAAO,gBACTA,EAAO,WACH7zB,IAAM;AAAA,GACR6zB,EAAO,OACPA,EAAO,OAAS,GAEhBA,EAAO,UAIHA,EAAO,MAAK,CAClB,KAAKE,EAAE,MAEL,GADAF,EAAO,MAAQE,EAAE,iBACb/zB,IAAM,SACR,SAEFu3B,GAAgB1D,EAAQ7zB,CAAC,EACzB,SAEF,KAAK+zB,EAAE,iBACLwD,GAAgB1D,EAAQ7zB,CAAC,EACzB,SAEF,KAAK+zB,EAAE,KACL,GAAIF,EAAO,SAAW,CAACA,EAAO,WAAY,CAExC,QADI4D,GAAS1xB,EAAI,EACV/F,GAAKA,IAAM,KAAOA,IAAM,KAC7BA,EAAIw3B,EAAO7K,EAAO5mB,GAAG,EACjB/F,GAAK6zB,EAAO,gBACdA,EAAO,WACH7zB,IAAM;AAAA,GACR6zB,EAAO,OACPA,EAAO,OAAS,GAEhBA,EAAO,UAIbA,EAAO,UAAYlH,EAAM,UAAU8K,GAAQ1xB,EAAI,CAAC,CAC5D,CAEY/F,IAAM,KACN,EAAE6zB,EAAO,SAAWA,EAAO,YAAc,CAACA,EAAO,SAEjDA,EAAO,MAAQE,EAAE,UACjBF,EAAO,iBAAmBA,EAAO,WAG/B,CAAC4B,EAAaz1B,CAAC,IACd,CAAC6zB,EAAO,SAAWA,EAAO,aAE3BoC,EAAWpC,EAAQ,iCAAiC,EAElD7zB,IAAM,IACR6zB,EAAO,MAAQE,EAAE,YAEjBF,EAAO,UAAY7zB,GAGvB,SAEF,KAAK+zB,EAAE,OAED/zB,IAAM,IACR6zB,EAAO,MAAQE,EAAE,cAEjBF,EAAO,QAAU7zB,EAEnB,SAEF,KAAK+zB,EAAE,cACD/zB,IAAM,IACR6zB,EAAO,MAAQE,EAAE,WAEjBF,EAAO,QAAU,IAAM7zB,EACvB6zB,EAAO,MAAQE,EAAE,QAEnB,SAEF,KAAKA,EAAE,UAEL,GAAI/zB,IAAM,IACR6zB,EAAO,MAAQE,EAAE,UACjBF,EAAO,SAAW,WACT,CAAA4B,EAAaz1B,CAAC,EAElB,GAAI41B,EAAQP,EAAWr1B,CAAC,EAC7B6zB,EAAO,MAAQE,EAAE,SACjBF,EAAO,QAAU7zB,UACRA,IAAM,IACf6zB,EAAO,MAAQE,EAAE,UACjBF,EAAO,QAAU,WACR7zB,IAAM,IACf6zB,EAAO,MAAQE,EAAE,UACjBF,EAAO,aAAeA,EAAO,aAAe,OACvC,CAGL,GAFAoC,EAAWpC,EAAQ,aAAa,EAE5BA,EAAO,iBAAmB,EAAIA,EAAO,SAAU,CACjD,IAAI6D,EAAM7D,EAAO,SAAWA,EAAO,iBACnC7zB,EAAI,IAAI,MAAM03B,CAAG,EAAE,KAAK,GAAG,EAAI13B,CAC7C,CACY6zB,EAAO,UAAY,IAAM7zB,EACzB6zB,EAAO,MAAQE,EAAE,IAC7B,CACU,SAEF,KAAKA,EAAE,UACL,GAAIF,EAAO,SAAW7zB,IAAM,KAAM,CAChC6zB,EAAO,MAAQE,EAAE,QACjBF,EAAO,QAAU,GACjBA,EAAO,SAAW,GAClB,QACZ,CAGYA,EAAO,SACPA,EAAO,UAAY,IACnBA,EAAO,UAEPA,EAAO,MAAQE,EAAE,YACjBF,EAAO,SAAW,KAAOA,EAAO,SAAW7zB,EAC3C6zB,EAAO,SAAW,KACRA,EAAO,SAAW7zB,GAAG,YAAW,IAAOi1B,GACjDR,EAASZ,EAAQ,aAAa,EAC9BA,EAAO,MAAQE,EAAE,MACjBF,EAAO,SAAW,GAClBA,EAAO,MAAQ,KACLA,EAAO,SAAW7zB,GAAG,YAAW,IAAOk1B,GACjDrB,EAAO,MAAQE,EAAE,SACbF,EAAO,SAAWA,EAAO,UAC3BoC,EACEpC,EACA,+CAGJA,EAAO,QAAU,GACjBA,EAAO,SAAW,IACT7zB,IAAM,KACfy0B,EAASZ,EAAQ,oBAAqBA,EAAO,QAAQ,EACrDA,EAAO,SAAW,GAClBA,EAAO,MAAQE,EAAE,OACR2B,EAAQ11B,CAAC,IAClB6zB,EAAO,MAAQE,EAAE,kBACjBF,EAAO,UAAY7zB,GAIrB,SAEF,KAAK+zB,EAAE,iBACD/zB,IAAM6zB,EAAO,IACfA,EAAO,MAAQE,EAAE,UACjBF,EAAO,EAAI,IAEbA,EAAO,UAAY7zB,EACnB,SAEF,KAAK+zB,EAAE,QACD/zB,IAAM,KACR6zB,EAAO,MAAQE,EAAE,KACjBU,EAASZ,EAAQ,YAAaA,EAAO,OAAO,EAC5CA,EAAO,QAAU,KAEjBA,EAAO,SAAW7zB,EACdA,IAAM,IACR6zB,EAAO,MAAQE,EAAE,YACR2B,EAAQ11B,CAAC,IAClB6zB,EAAO,MAAQE,EAAE,eACjBF,EAAO,EAAI7zB,IAGf,SAEF,KAAK+zB,EAAE,eACLF,EAAO,SAAW7zB,EACdA,IAAM6zB,EAAO,IACfA,EAAO,EAAI,GACXA,EAAO,MAAQE,EAAE,SAEnB,SAEF,KAAKA,EAAE,YACD/zB,IAAM,KACR6zB,EAAO,SAAW7zB,EAClB6zB,EAAO,MAAQE,EAAE,SACR/zB,IAAM,KACf6zB,EAAO,MAAQE,EAAE,UACjBF,EAAO,iBAAmBA,EAAO,UACxB6B,EAAQ11B,CAAC,GAClB6zB,EAAO,SAAW7zB,EAClB6zB,EAAO,MAAQE,EAAE,mBACjBF,EAAO,EAAI7zB,GAEX6zB,EAAO,SAAW7zB,EAEpB,SAEF,KAAK+zB,EAAE,mBACLF,EAAO,SAAW7zB,EACdA,IAAM6zB,EAAO,IACfA,EAAO,MAAQE,EAAE,YACjBF,EAAO,EAAI,IAEb,SAEF,KAAKE,EAAE,QACD/zB,IAAM,IACR6zB,EAAO,MAAQE,EAAE,eAEjBF,EAAO,SAAW7zB,EAEpB,SAEF,KAAK+zB,EAAE,eACD/zB,IAAM,KACR6zB,EAAO,MAAQE,EAAE,cACjBF,EAAO,QAAUmC,EAASnC,EAAO,IAAKA,EAAO,OAAO,EAChDA,EAAO,SACTY,EAASZ,EAAQ,YAAaA,EAAO,OAAO,EAE9CA,EAAO,QAAU,KAEjBA,EAAO,SAAW,IAAM7zB,EACxB6zB,EAAO,MAAQE,EAAE,SAEnB,SAEF,KAAKA,EAAE,cACD/zB,IAAM,KACRi2B,EAAWpC,EAAQ,mBAAmB,EAGtCA,EAAO,SAAW,KAAO7zB,EACzB6zB,EAAO,MAAQE,EAAE,SACRF,EAAO,SAAWA,EAAO,UAAY,GAC9CA,EAAO,MAAQE,EAAE,YAEjBF,EAAO,MAAQE,EAAE,KAEnB,SAEF,KAAKA,EAAE,MAEL,QADI0D,GAAS1xB,EAAI,EACV/F,GAAKA,IAAM,KAChBA,EAAIw3B,EAAO7K,EAAO5mB,GAAG,EACjB/F,GAAK6zB,EAAO,gBACdA,EAAO,WACH7zB,IAAM;AAAA,GACR6zB,EAAO,OACPA,EAAO,OAAS,GAEhBA,EAAO,UAIbA,EAAO,OAASlH,EAAM,UAAU8K,GAAQ1xB,EAAI,CAAC,EACzC/F,IAAM,MACR6zB,EAAO,MAAQE,EAAE,cAEnB,SAEF,KAAKA,EAAE,aACD/zB,IAAM,IACR6zB,EAAO,MAAQE,EAAE,gBAEjBF,EAAO,OAAS,IAAM7zB,EACtB6zB,EAAO,MAAQE,EAAE,OAEnB,SAEF,KAAKA,EAAE,eACD/zB,IAAM,KACJ6zB,EAAO,OACTY,EAASZ,EAAQ,UAAWA,EAAO,KAAK,EAE1CY,EAASZ,EAAQ,cAAc,EAC/BA,EAAO,MAAQ,GACfA,EAAO,MAAQE,EAAE,MACR/zB,IAAM,IACf6zB,EAAO,OAAS,KAEhBA,EAAO,OAAS,KAAO7zB,EACvB6zB,EAAO,MAAQE,EAAE,OAEnB,SAEF,KAAKA,EAAE,UACD/zB,IAAM,IACR6zB,EAAO,MAAQE,EAAE,iBACR0B,EAAaz1B,CAAC,EACvB6zB,EAAO,MAAQE,EAAE,eAEjBF,EAAO,cAAgB7zB,EAEzB,SAEF,KAAK+zB,EAAE,eACL,GAAI,CAACF,EAAO,cAAgB4B,EAAaz1B,CAAC,EACxC,SACSA,IAAM,IACf6zB,EAAO,MAAQE,EAAE,iBAEjBF,EAAO,cAAgB7zB,EAEzB,SAEF,KAAK+zB,EAAE,iBACD/zB,IAAM,KACRy0B,EAASZ,EAAQ,0BAA2B,CAC1C,KAAMA,EAAO,aACb,KAAMA,EAAO,YAC3B,CAAa,EACDA,EAAO,aAAeA,EAAO,aAAe,GAC5CA,EAAO,MAAQE,EAAE,OAEjBF,EAAO,cAAgB,IAAM7zB,EAC7B6zB,EAAO,MAAQE,EAAE,gBAEnB,SAEF,KAAKA,EAAE,SACD6B,EAAQN,EAAUt1B,CAAC,EACrB6zB,EAAO,SAAW7zB,GAElBk2B,EAAOrC,CAAM,EACT7zB,IAAM,IACRy2B,EAAQ5C,CAAM,EACL7zB,IAAM,IACf6zB,EAAO,MAAQE,EAAE,gBAEZ0B,EAAaz1B,CAAC,GACjBi2B,EAAWpC,EAAQ,+BAA+B,EAEpDA,EAAO,MAAQE,EAAE,SAGrB,SAEF,KAAKA,EAAE,eACD/zB,IAAM,KACRy2B,EAAQ5C,EAAQ,EAAI,EACpBgD,EAAShD,CAAM,IAEfoC,EACEpC,EACA,kDAEFA,EAAO,MAAQE,EAAE,QAEnB,SAEF,KAAKA,EAAE,OAEL,GAAI0B,EAAaz1B,CAAC,EAChB,SACSA,IAAM,IACfy2B,EAAQ5C,CAAM,EACL7zB,IAAM,IACf6zB,EAAO,MAAQE,EAAE,eACR6B,EAAQP,EAAWr1B,CAAC,GAC7B6zB,EAAO,WAAa7zB,EACpB6zB,EAAO,YAAc,GACrBA,EAAO,MAAQE,EAAE,aAEjBkC,EAAWpC,EAAQ,wBAAwB,EAE7C,SAEF,KAAKE,EAAE,YACD/zB,IAAM,IACR6zB,EAAO,MAAQE,EAAE,aACR/zB,IAAM,KACfi2B,EAAWpC,EAAQ,yBAAyB,EAC5CA,EAAO,YAAcA,EAAO,WAC5B0C,EAAO1C,CAAM,EACb4C,EAAQ5C,CAAM,GACL4B,EAAaz1B,CAAC,EACvB6zB,EAAO,MAAQE,EAAE,sBACR6B,EAAQN,EAAUt1B,CAAC,EAC5B6zB,EAAO,YAAc7zB,EAErBi2B,EAAWpC,EAAQ,wBAAwB,EAE7C,SAEF,KAAKE,EAAE,sBACL,GAAI/zB,IAAM,IACR6zB,EAAO,MAAQE,EAAE,iBACZ,IAAI0B,EAAaz1B,CAAC,EACvB,SAEAi2B,EAAWpC,EAAQ,yBAAyB,EAC5CA,EAAO,IAAI,WAAWA,EAAO,UAAU,EAAI,GAC3CA,EAAO,YAAc,GACrBY,EAASZ,EAAQ,cAAe,CAC9B,KAAMA,EAAO,WACb,MAAO,EACrB,CAAa,EACDA,EAAO,WAAa,GAChB7zB,IAAM,IACRy2B,EAAQ5C,CAAM,EACL+B,EAAQP,EAAWr1B,CAAC,GAC7B6zB,EAAO,WAAa7zB,EACpB6zB,EAAO,MAAQE,EAAE,cAEjBkC,EAAWpC,EAAQ,wBAAwB,EAC3CA,EAAO,MAAQE,EAAE,QAGrB,SAEF,KAAKA,EAAE,aACL,GAAI0B,EAAaz1B,CAAC,EAChB,SACS01B,EAAQ11B,CAAC,GAClB6zB,EAAO,EAAI7zB,EACX6zB,EAAO,MAAQE,EAAE,sBAEZF,EAAO,IAAI,yBACd9f,EAAM8f,EAAQ,0BAA0B,EAE1CA,EAAO,MAAQE,EAAE,sBACjBF,EAAO,YAAc7zB,GAEvB,SAEF,KAAK+zB,EAAE,oBACL,GAAI/zB,IAAM6zB,EAAO,EAAG,CACd7zB,IAAM,IACR6zB,EAAO,MAAQE,EAAE,sBAEjBF,EAAO,aAAe7zB,EAExB,QACZ,CACUu2B,EAAO1C,CAAM,EACbA,EAAO,EAAI,GACXA,EAAO,MAAQE,EAAE,oBACjB,SAEF,KAAKA,EAAE,oBACD0B,EAAaz1B,CAAC,EAChB6zB,EAAO,MAAQE,EAAE,OACR/zB,IAAM,IACfy2B,EAAQ5C,CAAM,EACL7zB,IAAM,IACf6zB,EAAO,MAAQE,EAAE,eACR6B,EAAQP,EAAWr1B,CAAC,GAC7Bi2B,EAAWpC,EAAQ,kCAAkC,EACrDA,EAAO,WAAa7zB,EACpB6zB,EAAO,YAAc,GACrBA,EAAO,MAAQE,EAAE,aAEjBkC,EAAWpC,EAAQ,wBAAwB,EAE7C,SAEF,KAAKE,EAAE,sBACL,GAAI,CAAC4B,GAAY31B,CAAC,EAAG,CACfA,IAAM,IACR6zB,EAAO,MAAQE,EAAE,sBAEjBF,EAAO,aAAe7zB,EAExB,QACZ,CACUu2B,EAAO1C,CAAM,EACT7zB,IAAM,IACRy2B,EAAQ5C,CAAM,EAEdA,EAAO,MAAQE,EAAE,OAEnB,SAEF,KAAKA,EAAE,UACL,GAAKF,EAAO,QAaD7zB,IAAM,IACf62B,EAAShD,CAAM,EACN+B,EAAQN,EAAUt1B,CAAC,EAC5B6zB,EAAO,SAAW7zB,EACT6zB,EAAO,QAChBA,EAAO,QAAU,KAAOA,EAAO,QAAU7zB,EACzC6zB,EAAO,QAAU,GACjBA,EAAO,MAAQE,EAAE,SAEZ0B,EAAaz1B,CAAC,GACjBi2B,EAAWpC,EAAQ,gCAAgC,EAErDA,EAAO,MAAQE,EAAE,yBAzBE,CACnB,GAAI0B,EAAaz1B,CAAC,EAChB,SACS81B,GAAST,EAAWr1B,CAAC,EAC1B6zB,EAAO,QACTA,EAAO,QAAU,KAAO7zB,EACxB6zB,EAAO,MAAQE,EAAE,QAEjBkC,EAAWpC,EAAQ,iCAAiC,EAGtDA,EAAO,QAAU7zB,CAE/B,CAcU,SAEF,KAAK+zB,EAAE,oBACL,GAAI0B,EAAaz1B,CAAC,EAChB,SAEEA,IAAM,IACR62B,EAAShD,CAAM,EAEfoC,EAAWpC,EAAQ,mCAAmC,EAExD,SAEF,KAAKE,EAAE,YACP,KAAKA,EAAE,sBACP,KAAKA,EAAE,sBACL,IAAI4D,GACAt0B,GACJ,OAAQwwB,EAAO,MAAK,CAClB,KAAKE,EAAE,YACL4D,GAAc5D,EAAE,KAChB1wB,GAAS,WACT,MAEF,KAAK0wB,EAAE,sBACL4D,GAAc5D,EAAE,oBAChB1wB,GAAS,cACT,MAEF,KAAK0wB,EAAE,sBACL4D,GAAc5D,EAAE,sBAChB1wB,GAAS,cACT,MAGJ,GAAIrD,IAAM,IAAK,CACb,IAAI43B,GAAeV,EAAYrD,CAAM,EAEnCA,EAAO,IAAI,kBACX,CAAC,OAAO,OAAON,EAAI,YAAY,EAAE,SAASqE,EAAY,GAEtD/D,EAAO,OAAS,GAChBA,EAAO,MAAQ8D,GACf9D,EAAO,MAAM+D,EAAY,IAEzB/D,EAAOxwB,EAAM,GAAKu0B,GAClB/D,EAAO,OAAS,GAChBA,EAAO,MAAQ8D,GAE7B,MACY/B,EAAQ/B,EAAO,OAAO,OAAS2B,EAAaD,EAAav1B,CAAC,EAE1D6zB,EAAO,QAAU7zB,GAEjBi2B,EAAWpC,EAAQ,kCAAkC,EACrDA,EAAOxwB,EAAM,GAAK,IAAMwwB,EAAO,OAAS7zB,EACxC6zB,EAAO,OAAS,GAChBA,EAAO,MAAQ8D,IAGjB,SAEF,QACE,MAAM,IAAI,MAAM9D,EAAQ,kBAAoBA,EAAO,KAAK,EAK9D,OAAIA,EAAO,UAAYA,EAAO,qBAC5BO,EAAkBP,CAAM,EAEnBA,CACX,CAEA,sDAEO,OAAO,eACR,UAAY,CACZ,IAAIgE,EAAqB,OAAO,aAC5BC,EAAQ,KAAK,MACbC,EAAgB,UAAY,CAC9B,IAAIC,EAAW,MACXC,EAAY,CAAA,EACZC,GACAC,GACAtgB,GAAQ,GACR1B,GAAS,UAAU,OACvB,GAAI,CAACA,GACH,MAAO,GAGT,QADI1M,GAAS,GACN,EAAEoO,GAAQ1B,IAAQ,CACvB,IAAIiiB,GAAY,OAAO,UAAUvgB,EAAK,CAAC,EACvC,GACE,CAAC,SAASugB,EAAS,GACnBA,GAAY,GACZA,GAAY,SACZN,EAAMM,EAAS,IAAMA,GAErB,MAAM,WAAW,uBAAyBA,EAAS,EAEjDA,IAAa,MAEfH,EAAU,KAAKG,EAAS,GAIxBA,IAAa,MACbF,IAAiBE,IAAa,IAAM,MACpCD,GAAgBC,GAAY,KAAS,MACrCH,EAAU,KAAKC,GAAeC,EAAY,IAExCtgB,GAAQ,IAAM1B,IAAU8hB,EAAU,OAASD,KAC7CvuB,IAAUouB,EAAmB,MAAM,KAAMI,CAAS,EAClDA,EAAU,OAAS,EAE/B,CACQ,OAAOxuB,EACf,EAEU,OAAO,eACT,OAAO,eAAe,OAAQ,gBAAiB,CAC7C,MAAOsuB,EACP,aAAc,GACd,SAAU,EACpB,CAAS,EAED,OAAO,cAAgBA,CAE/B,EAAK,CAEL,GAAsD3b,CAAO,QCtqD7D,OAAO,eAAenW,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,SAAmB,OACnBA,GAAA,SAAmBoyB,GACnB,MAAM9E,GAAMnf,GACNoZ,GAAUrV,GAChB,MAAMmgB,EAAS,CACX,YAAYh4B,EAAM,CAMd,GALA,KAAK,KAAOA,EACZ,KAAK,MAAQ,GACb,KAAK,WAAa,KAClB,KAAK,QAAU,GACf,KAAK,SAAW,KACZ,CAACA,EACD,QAAUktB,GAAQ,UAAU,+BAAgC,4BAA4B,EAE5F,GAAI,CAAC+K,GAAYj4B,CAAI,EACjB,QAAUktB,GAAQ,UAAU,yBAAyBltB,CAAI,GAAI,8BAA8B,CAEvG,CACI,UAAUA,EAAM,CACZ,MAAMmJ,EAAS,KAAK,aAAe,KAAO,KAAO,KAAK,WAAWnJ,CAAI,EACrE,GAAImJ,GAAU,KACV,QAAU+jB,GAAQ,UAAU,iBAAiBltB,CAAI,IAAK,0BAA0B,EAEpF,OAAOmJ,CACf,CACI,gBAAgBnJ,EAAM,CACd,KAAK,aAAe,MACpB,OAAO,KAAK,WAAWA,CAAI,CAEvC,CACI,QAAQA,EAAMk4B,EAAa,GAAOC,EAAgB,KAAM,CACpD,MAAMhvB,EAAS,KAAK,cAAcnJ,EAAMk4B,CAAU,EAClD,GAAI/uB,IAAW,KACX,QAAU+jB,GAAQ,UAAUiL,GAAiB,eAAen4B,CAAI,IAAK,wBAAwB,EAEjG,OAAOmJ,CACf,CACI,cAAcnJ,EAAMk4B,EAAa,GAAO,CACpC,GAAI,KAAK,WAAa,KAClB,OAAO,KAEX,UAAWE,KAAW,KAAK,SACvB,GAAIC,GAAaD,EAASp4B,EAAMk4B,CAAU,EACtC,OAAOE,EAGf,OAAO,IACf,CACI,YAAYp4B,EAAMk4B,EAAa,GAAO,CAClC,OAAI,KAAK,WAAa,KACX,CAAA,EAEJ,KAAK,SAAS,OAAO/Q,GAAMkR,GAAalR,EAAInnB,EAAMk4B,CAAU,CAAC,CAC5E,CACI,oBAAoBl4B,EAAMk4B,EAAa,GAAO,CAC1C,MAAME,EAAU,KAAK,cAAcp4B,EAAMk4B,CAAU,EACnD,OAAOE,IAAY,KAAO,GAAKA,EAAQ,KAC/C,CACA,CACAzyB,GAAA,SAAmBqyB,GACnB,MAAMM,GAAe,IAAI,OAAO,6BAA6B,EAC7D,SAASL,GAAYj4B,EAAM,CACvB,OAAOs4B,GAAa,KAAKt4B,CAAI,CACjC,CACA,SAASq4B,GAAaD,EAASp4B,EAAMk4B,EAAY,CAC7C,MAAMK,EAAcH,EAAQ,KAC5B,OAAOG,IAAgBv4B,GAASk4B,IAAe,IAAQK,EAAY,SAAWv4B,EAAK,QAAUu4B,EAAY,YAAW,IAAOv4B,EAAK,YAAW,CAC/I,CACA,SAAS+3B,GAASz2B,EAAM,CACpB,IAAIk3B,EAAc,KAClB,MAAMjF,EAASN,GAAI,OAAO,GAAM,CAAA,CAAE,EAC5BwF,EAAW,CAAA,EACjB,OAAAlF,EAAO,UAAYmF,GAAc,CAC7B,MAAMN,EAAU,IAAIJ,GAASU,EAAW,IAAI,EAE5C,GADAN,EAAQ,WAAaM,EAAW,WAC5BF,IAAgB,KAChBA,EAAcJ,MAEb,CACD,MAAMlS,EAASuS,EAASA,EAAS,OAAS,CAAC,EACvCvS,EAAO,UAAY,OACnBA,EAAO,SAAW,CAAA,GAEtBA,EAAO,SAAS,KAAKkS,CAAO,CACxC,CACQK,EAAS,KAAKL,CAAO,CAC7B,EACI7E,EAAO,WAAa,IAAM,CACtBkF,EAAS,IAAG,CACpB,EACIlF,EAAO,OAASvxB,GAAQ,CAChBy2B,EAAS,OAAS,IAClBA,EAASA,EAAS,OAAS,CAAC,EAAE,MAAQz2B,EAElD,EACIuxB,EAAO,QAAUoF,GAAS,CACtB,MAAMP,EAAUK,EAASA,EAAS,OAAS,CAAC,EAC5CL,EAAQ,MAAQO,EAChBP,EAAQ,QAAU,EAC1B,EACI7E,EAAO,QAAUt2B,GAAO,CACpB,MAAMA,CACd,EACIs2B,EAAO,MAAMjyB,CAAI,EACVk3B,CACX,cC1GA,OAAO,eAAc1c,EAAU,aAAc,CAAE,MAAO,GAAM,EAC5DA,EAAA,8BAAwCA,EAAA,gCAA0CA,EAAA,SAAmBA,EAAA,SAAmBA,EAAA,KAAeA,EAAA,QAAkBA,EAAA,MAAgBA,EAAA,gBAA0BA,EAAA,UAAoBA,EAAA,yBAAmCA,EAAA,0BAAoCA,EAAA,SAAmBA,EAAA,kBAA4BA,EAAA,cAAwBA,YAAoBA,EAAA,aAAuBA,EAAA,UAAoBA,EAAA,gBAA0BA,EAAA,gBAA0BA,EAAA,oBAA8BA,EAAA,+BAAyCA,EAAA,wBAAkCA,EAAA,SAAmBA,EAAA,kBAA4BA,EAAA,kBAA4B,OAC5oBA,EAAA,QAAkB8c,EAClB,IAAIhS,EAAsB9S,GAC1B,OAAO,eAAegI,EAAS,oBAAqB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO8K,EAAoB,iBAAkB,CAAE,CAAE,EAC5I,OAAO,eAAe9K,EAAS,oBAAqB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO8K,EAAoB,iBAAkB,CAAE,CAAE,EAC5I,IAAIsG,EAAUrV,GACd,OAAO,eAAeiE,EAAS,WAAY,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOoR,EAAQ,QAAS,CAAE,CAAE,EAC9G,IAAI2L,EAAiB/gB,GACrB,OAAO,eAAegE,EAAS,0BAA2B,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+c,EAAe,uBAAwB,CAAE,CAAE,EACnJ,OAAO,eAAe/c,EAAS,iCAAkC,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+c,EAAe,8BAA+B,CAAE,CAAE,EACjK,OAAO,eAAe/c,EAAS,sBAAuB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+c,EAAe,mBAAoB,CAAE,CAAE,EAC3I,OAAO,eAAe/c,EAAS,kBAAmB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+c,EAAe,eAAgB,CAAE,CAAE,EACnI,OAAO,eAAe/c,EAAS,kBAAmB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+c,EAAe,eAAgB,CAAE,CAAE,EACnI,OAAO,eAAe/c,EAAS,YAAa,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+c,EAAe,SAAU,CAAE,CAAE,EACvH,OAAO,eAAe/c,EAAS,eAAgB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+c,EAAe,YAAa,CAAE,CAAE,EAC7H,OAAO,eAAe/c,EAAS,YAAa,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+c,EAAe,SAAU,CAAE,CAAE,EACvH,OAAO,eAAe/c,EAAS,gBAAiB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+c,EAAe,aAAc,CAAE,CAAE,EAC/H,OAAO,eAAe/c,EAAS,oBAAqB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+c,EAAe,iBAAkB,CAAE,CAAE,EACvI,IAAIzI,EAAarY,GACjB,OAAO,eAAe+D,EAAS,WAAY,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOsU,EAAW,QAAS,CAAE,CAAE,EACjH,IAAIrE,EAA8B9T,GAClC,OAAO,eAAe6D,EAAS,4BAA6B,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOiQ,EAA4B,yBAA0B,CAAE,CAAE,EACpK,IAAI+M,EAAmB/f,GACvB,OAAO,eAAe+C,EAAS,2BAA4B,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOgd,EAAiB,wBAAyB,CAAE,CAAE,EACvJ,OAAO,eAAehd,EAAS,YAAa,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOgd,EAAiB,SAAU,CAAE,CAAE,EACzH,OAAO,eAAehd,EAAS,kBAAmB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOgd,EAAiB,eAAgB,CAAE,CAAE,EACrI,IAAItH,EAAU7N,GACd,OAAO,eAAe7H,EAAS,QAAS,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO0V,EAAQ,KAAM,CAAE,CAAE,EACxG,IAAIuH,EAAkBnV,GACtB,OAAO,eAAe9H,EAAS,UAAW,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOid,EAAgB,OAAQ,CAAE,CAAE,EACpH,IAAIC,EAAStS,GACb,OAAO,eAAe5K,EAAS,OAAQ,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOkd,EAAO,IAAK,CAAE,CAAE,EACrG,IAAIC,EAAQtS,GACZ,OAAO,eAAe7K,EAAS,WAAY,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOmd,EAAM,QAAS,CAAE,CAAE,EAC5G,OAAO,eAAend,EAAS,WAAY,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOmd,EAAM,QAAS,CAAE,CAAE,EAE5Gnd,EAAA,gCAA0C,gBAE1CA,EAAA,8BAAwC,aACxC,SAAS8c,EAAQ3P,EAAG,CAChB,OAAIA,GAAK,KACE,CAAA,EAEF,MAAM,QAAQA,CAAC,EACbA,EAGA,CAACA,CAAC,CAEjB,8BChDA,SAASiQ,GAAUC,EAAS,CAC1B,OAAQ,OAAOA,EAAY,KAAiBA,IAAY,IAC1D,CAGA,SAASC,GAASD,EAAS,CACzB,OAAQ,OAAOA,GAAY,UAAcA,IAAY,IACvD,CAGA,SAASE,GAAQC,EAAU,CACzB,OAAI,MAAM,QAAQA,CAAQ,EAAUA,EAC3BJ,GAAUI,CAAQ,EAAU,CAAA,EAE9B,CAAEA,CAAQ,CACnB,CAGA,SAAStQ,GAAOrS,EAAQ4iB,EAAQ,CAC9B,IAAIhiB,EAAO1B,EAAQnJ,EAAK8sB,EAExB,GAAID,EAGF,IAFAC,EAAa,OAAO,KAAKD,CAAM,EAE1BhiB,EAAQ,EAAG1B,EAAS2jB,EAAW,OAAQjiB,EAAQ1B,EAAQ0B,GAAS,EACnE7K,EAAM8sB,EAAWjiB,CAAK,EACtBZ,EAAOjK,CAAG,EAAI6sB,EAAO7sB,CAAG,EAI5B,OAAOiK,CACT,CAGA,SAAS8iB,GAAOC,EAAQC,EAAO,CAC7B,IAAIxwB,EAAS,GAAIywB,EAEjB,IAAKA,EAAQ,EAAGA,EAAQD,EAAOC,GAAS,EACtCzwB,GAAUuwB,EAGZ,OAAOvwB,CACT,CAGA,SAAS0wB,GAAeC,EAAQ,CAC9B,OAAQA,IAAW,GAAO,OAAO,oBAAsB,EAAIA,CAC7D,CAGA/P,GAAA,UAAgCmP,GAChCnP,GAAA,SAAgCqP,GAChCrP,GAAA,QAAgCsP,GAChCtP,GAAA,OAAgC0P,GAChC1P,GAAA,eAAgC8P,GAChC9P,GAAA,OAAgCf,GCrDhC,SAAS+Q,GAAYC,EAAWC,EAAS,CACvC,IAAIC,EAAQ,GAAI7nB,EAAU2nB,EAAU,QAAU,mBAE9C,OAAKA,EAAU,MAEXA,EAAU,KAAK,OACjBE,GAAS,OAASF,EAAU,KAAK,KAAO,MAG1CE,GAAS,KAAOF,EAAU,KAAK,KAAO,GAAK,KAAOA,EAAU,KAAK,OAAS,GAAK,IAE3E,CAACC,GAAWD,EAAU,KAAK,UAC7BE,GAAS;AAAA;AAAA,EAASF,EAAU,KAAK,SAG5B3nB,EAAU,IAAM6nB,GAZK7nB,CAa9B,CAGA,SAAS8nB,GAAcC,EAAQC,EAAM,CAEnC,MAAM,KAAK,IAAI,EAEf,KAAK,KAAO,gBACZ,KAAK,OAASD,EACd,KAAK,KAAOC,EACZ,KAAK,QAAUN,GAAY,KAAM,EAAK,EAGlC,MAAM,kBAER,MAAM,kBAAkB,KAAM,KAAK,WAAW,EAG9C,KAAK,MAAS,IAAI,MAAK,EAAI,OAAS,EAExC,CAIAI,GAAc,UAAY,OAAO,OAAO,MAAM,SAAS,EACvDA,GAAc,UAAU,YAAcA,GAGtCA,GAAc,UAAU,SAAW,SAAkBF,EAAS,CAC5D,OAAO,KAAK,KAAO,KAAOF,GAAY,KAAME,CAAO,CACrD,EAGA,IAAAD,GAAiBG,GCnDbpQ,GAASjW,GAIb,SAASwmB,GAAQv3B,EAAQw3B,EAAWC,EAAS1kB,EAAU2kB,EAAe,CACpE,IAAIC,EAAO,GACPC,EAAO,GACPC,EAAgB,KAAK,MAAMH,EAAgB,CAAC,EAAI,EAEpD,OAAI3kB,EAAWykB,EAAYK,IACzBF,EAAO,QACPH,EAAYzkB,EAAW8kB,EAAgBF,EAAK,QAG1CF,EAAU1kB,EAAW8kB,IACvBD,EAAO,OACPH,EAAU1kB,EAAW8kB,EAAgBD,EAAK,QAGrC,CACL,IAAKD,EAAO33B,EAAO,MAAMw3B,EAAWC,CAAO,EAAE,QAAQ,MAAO,GAAG,EAAIG,EACnE,IAAK7kB,EAAWykB,EAAYG,EAAK,MACrC,CACA,CAGA,SAASG,GAASnB,EAAQoB,EAAK,CAC7B,OAAO/Q,GAAO,OAAO,IAAK+Q,EAAMpB,EAAO,MAAM,EAAIA,CACnD,CAGA,SAASqB,GAAYV,EAAMxjB,EAAS,CAGlC,GAFAA,EAAU,OAAO,OAAOA,GAAW,IAAI,EAEnC,CAACwjB,EAAK,OAAQ,OAAO,KAEpBxjB,EAAQ,YAAWA,EAAQ,UAAY,IACxC,OAAOA,EAAQ,QAAgB,WAAUA,EAAQ,OAAc,GAC/D,OAAOA,EAAQ,aAAgB,WAAUA,EAAQ,YAAc,GAC/D,OAAOA,EAAQ,YAAgB,WAAUA,EAAQ,WAAc,GAQnE,QANImkB,EAAK,eACLC,EAAa,CAAE,CAAC,EAChBC,EAAW,CAAA,EACX1uB,EACA2uB,EAAc,GAEV3uB,EAAQwuB,EAAG,KAAKX,EAAK,MAAM,GACjCa,EAAS,KAAK1uB,EAAM,KAAK,EACzByuB,EAAW,KAAKzuB,EAAM,MAAQA,EAAM,CAAC,EAAE,MAAM,EAEzC6tB,EAAK,UAAY7tB,EAAM,OAAS2uB,EAAc,IAChDA,EAAcF,EAAW,OAAS,GAIlCE,EAAc,IAAGA,EAAcF,EAAW,OAAS,GAEvD,IAAI9xB,EAAS,GAAI1D,EAAGjC,EAChB43B,EAAe,KAAK,IAAIf,EAAK,KAAOxjB,EAAQ,WAAYqkB,EAAS,MAAM,EAAE,SAAQ,EAAG,OACpFT,EAAgB5jB,EAAQ,WAAaA,EAAQ,OAASukB,EAAe,GAEzE,IAAK31B,EAAI,EAAGA,GAAKoR,EAAQ,aACnB,EAAAskB,EAAc11B,EAAI,GADcA,IAEpCjC,EAAO82B,GACLD,EAAK,OACLY,EAAWE,EAAc11B,CAAC,EAC1By1B,EAASC,EAAc11B,CAAC,EACxB40B,EAAK,UAAYY,EAAWE,CAAW,EAAIF,EAAWE,EAAc11B,CAAC,GACrEg1B,CACN,EACItxB,EAAS4gB,GAAO,OAAO,IAAKlT,EAAQ,MAAM,EAAIgkB,IAAUR,EAAK,KAAO50B,EAAI,GAAG,SAAQ,EAAI21B,CAAY,EACjG,MAAQ53B,EAAK,IAAM;AAAA,EAAO2F,EAQ9B,IALA3F,EAAO82B,GAAQD,EAAK,OAAQY,EAAWE,CAAW,EAAGD,EAASC,CAAW,EAAGd,EAAK,SAAUI,CAAa,EACxGtxB,GAAU4gB,GAAO,OAAO,IAAKlT,EAAQ,MAAM,EAAIgkB,IAAUR,EAAK,KAAO,GAAG,SAAQ,EAAIe,CAAY,EAC9F,MAAQ53B,EAAK,IAAM;AAAA,EACrB2F,GAAU4gB,GAAO,OAAO,IAAKlT,EAAQ,OAASukB,EAAe,EAAI53B,EAAK,GAAG,EAAI;AAAA,EAExEiC,EAAI,EAAGA,GAAKoR,EAAQ,YACnB,EAAAskB,EAAc11B,GAAKy1B,EAAS,QADGz1B,IAEnCjC,EAAO82B,GACLD,EAAK,OACLY,EAAWE,EAAc11B,CAAC,EAC1By1B,EAASC,EAAc11B,CAAC,EACxB40B,EAAK,UAAYY,EAAWE,CAAW,EAAIF,EAAWE,EAAc11B,CAAC,GACrEg1B,CACN,EACItxB,GAAU4gB,GAAO,OAAO,IAAKlT,EAAQ,MAAM,EAAIgkB,IAAUR,EAAK,KAAO50B,EAAI,GAAG,SAAQ,EAAI21B,CAAY,EAClG,MAAQ53B,EAAK,IAAM;AAAA,EAGvB,OAAO2F,EAAO,QAAQ,MAAO,EAAE,CACjC,CAGA,IAAAkyB,GAAiBN,GClGbZ,GAAgBrmB,GAEhBwnB,GAA2B,CAC7B,OACA,QACA,UACA,YACA,aACA,YACA,YACA,gBACA,eACA,cACF,EAEIC,GAAkB,CACpB,SACA,WACA,SACF,EAEA,SAASC,GAAoBC,EAAK,CAChC,IAAItyB,EAAS,CAAA,EAEb,OAAIsyB,IAAQ,MACV,OAAO,KAAKA,CAAG,EAAE,QAAQ,SAAUC,EAAO,CACxCD,EAAIC,CAAK,EAAE,QAAQ,SAAUC,EAAO,CAClCxyB,EAAO,OAAOwyB,CAAK,CAAC,EAAID,CAChC,CAAO,CACP,CAAK,EAGIvyB,CACT,CAEA,SAASyyB,GAAKxpB,EAAKyE,EAAS,CAuB1B,GAtBAA,EAAUA,GAAW,CAAA,EAErB,OAAO,KAAKA,CAAO,EAAE,QAAQ,SAAU7W,EAAM,CAC3C,GAAIs7B,GAAyB,QAAQt7B,CAAI,IAAM,GAC7C,MAAM,IAAIm6B,GAAc,mBAAqBn6B,EAAO,8BAAgCoS,EAAM,cAAc,CAE9G,CAAG,EAGD,KAAK,QAAgByE,EACrB,KAAK,IAAgBzE,EACrB,KAAK,KAAgByE,EAAQ,MAAoB,KACjD,KAAK,QAAgBA,EAAQ,SAAoB,UAAY,CAAE,MAAO,IACtE,KAAK,UAAgBA,EAAQ,WAAoB,SAAUvV,EAAM,CAAE,OAAOA,GAC1E,KAAK,WAAgBuV,EAAQ,YAAoB,KACjD,KAAK,UAAgBA,EAAQ,WAAoB,KACjD,KAAK,UAAgBA,EAAQ,WAAoB,KACjD,KAAK,cAAgBA,EAAQ,eAAoB,KACjD,KAAK,aAAgBA,EAAQ,cAAoB,KACjD,KAAK,MAAgBA,EAAQ,OAAoB,GACjD,KAAK,aAAgB2kB,GAAoB3kB,EAAQ,cAAmB,IAAI,EAEpE0kB,GAAgB,QAAQ,KAAK,IAAI,IAAM,GACzC,MAAM,IAAIpB,GAAc,iBAAmB,KAAK,KAAO,uBAAyB/nB,EAAM,cAAc,CAExG,CAEA,IAAAiR,GAAiBuY,GC7DbzB,GAAgBrmB,GAChB8nB,GAAgB/jB,GAGpB,SAASgkB,GAAYC,EAAQ97B,EAAM,CACjC,IAAImJ,EAAS,CAAA,EAEb,OAAA2yB,EAAO97B,CAAI,EAAE,QAAQ,SAAU+7B,EAAa,CAC1C,IAAIC,EAAW7yB,EAAO,OAEtBA,EAAO,QAAQ,SAAU8yB,EAAcC,EAAe,CAChDD,EAAa,MAAQF,EAAY,KACjCE,EAAa,OAASF,EAAY,MAClCE,EAAa,QAAUF,EAAY,QAErCC,EAAWE,EAEnB,CAAK,EAED/yB,EAAO6yB,CAAQ,EAAID,CACvB,CAAG,EAEM5yB,CACT,CAGA,SAASgzB,IAA2B,CAClC,IAAIhzB,EAAS,CACP,OAAQ,CAAA,EACR,SAAU,CAAA,EACV,QAAS,CAAA,EACT,SAAU,CAAA,EACV,MAAO,CACL,OAAQ,CAAA,EACR,SAAU,CAAA,EACV,QAAS,CAAA,EACT,SAAU,CAAA,CACpB,CACA,EAASoO,EAAO1B,EAEd,SAASumB,EAAY/Y,EAAM,CACrBA,EAAK,OACPla,EAAO,MAAMka,EAAK,IAAI,EAAE,KAAKA,CAAI,EACjCla,EAAO,MAAM,SAAY,KAAKka,CAAI,GAElCla,EAAOka,EAAK,IAAI,EAAEA,EAAK,GAAG,EAAIla,EAAO,SAAYka,EAAK,GAAG,EAAIA,CAEnE,CAEE,IAAK9L,EAAQ,EAAG1B,EAAS,UAAU,OAAQ0B,EAAQ1B,EAAQ0B,GAAS,EAClE,UAAUA,CAAK,EAAE,QAAQ6kB,CAAW,EAEtC,OAAOjzB,CACT,CAGA,SAASkzB,GAAOC,EAAY,CAC1B,OAAO,KAAK,OAAOA,CAAU,CAC/B,CAGAD,GAAO,UAAU,OAAS,SAAgBC,EAAY,CACpD,IAAIC,EAAW,CAAA,EACXC,EAAW,CAAA,EAEf,GAAIF,aAAsBV,GAExBY,EAAS,KAAKF,CAAU,UAEf,MAAM,QAAQA,CAAU,EAEjCE,EAAWA,EAAS,OAAOF,CAAU,UAE5BA,IAAe,MAAM,QAAQA,EAAW,QAAQ,GAAK,MAAM,QAAQA,EAAW,QAAQ,GAE3FA,EAAW,WAAUC,EAAWA,EAAS,OAAOD,EAAW,QAAQ,GACnEA,EAAW,WAAUE,EAAWA,EAAS,OAAOF,EAAW,QAAQ,OAGvE,OAAM,IAAInC,GAAc,kHACyC,EAGnEoC,EAAS,QAAQ,SAAUlZ,EAAM,CAC/B,GAAI,EAAEA,aAAgBuY,IACpB,MAAM,IAAIzB,GAAc,oFAAoF,EAG9G,GAAI9W,EAAK,UAAYA,EAAK,WAAa,SACrC,MAAM,IAAI8W,GAAc,iHAAiH,EAG3I,GAAI9W,EAAK,MACP,MAAM,IAAI8W,GAAc,oGAAoG,CAElI,CAAG,EAEDqC,EAAS,QAAQ,SAAUnZ,EAAM,CAC/B,GAAI,EAAEA,aAAgBuY,IACpB,MAAM,IAAIzB,GAAc,oFAAoF,CAElH,CAAG,EAED,IAAIhxB,EAAS,OAAO,OAAOkzB,GAAO,SAAS,EAE3C,OAAAlzB,EAAO,UAAY,KAAK,UAAY,CAAA,GAAI,OAAOozB,CAAQ,EACvDpzB,EAAO,UAAY,KAAK,UAAY,CAAA,GAAI,OAAOqzB,CAAQ,EAEvDrzB,EAAO,iBAAmB0yB,GAAY1yB,EAAQ,UAAU,EACxDA,EAAO,iBAAmB0yB,GAAY1yB,EAAQ,UAAU,EACxDA,EAAO,gBAAmBgzB,GAAWhzB,EAAO,iBAAkBA,EAAO,gBAAgB,EAE9EA,CACT,EAGA,IAAA2yB,GAAiBO,GCtHbT,GAAO9nB,GAEXtO,GAAiB,IAAIo2B,GAAK,wBAAyB,CACjD,KAAM,SACN,UAAW,SAAUt6B,EAAM,CAAE,OAAOA,IAAS,KAAOA,EAAO,EAAG,CAChE,CAAC,ECLGs6B,GAAO9nB,GAEXge,GAAiB,IAAI8J,GAAK,wBAAyB,CACjD,KAAM,WACN,UAAW,SAAUt6B,EAAM,CAAE,OAAOA,IAAS,KAAOA,EAAO,CAAA,CAAG,CAChE,CAAC,ECLGs6B,GAAO9nB,GAEX2nB,GAAiB,IAAIG,GAAK,wBAAyB,CACjD,KAAM,UACN,UAAW,SAAUt6B,EAAM,CAAE,OAAOA,IAAS,KAAOA,EAAO,CAAA,CAAG,CAChE,CAAC,ECAG+6B,GAASvoB,GAGb2oB,GAAiB,IAAIJ,GAAO,CAC1B,SAAU,CACRxkB,GACAC,GACAC,EACJ,CACA,CAAC,ECdG6jB,GAAO9nB,GAEX,SAAS4oB,GAAgBp7B,EAAM,CAC7B,GAAIA,IAAS,KAAM,MAAO,GAE1B,IAAIw5B,EAAMx5B,EAAK,OAEf,OAAQw5B,IAAQ,GAAKx5B,IAAS,KACtBw5B,IAAQ,IAAMx5B,IAAS,QAAUA,IAAS,QAAUA,IAAS,OACvE,CAEA,SAASq7B,IAAoB,CAC3B,OAAO,IACT,CAEA,SAASC,GAAOC,EAAQ,CACtB,OAAOA,IAAW,IACpB,CAEA,IAAAC,GAAiB,IAAIlB,GAAK,yBAA0B,CAClD,KAAM,SACN,QAASc,GACT,UAAWC,GACX,UAAWC,GACX,UAAW,CACT,UAAW,UAAY,CAAE,MAAO,GAAI,EACpC,UAAW,UAAY,CAAE,MAAO,MAAO,EACvC,UAAW,UAAY,CAAE,MAAO,MAAO,EACvC,UAAW,UAAY,CAAE,MAAO,MAAO,EACvC,MAAW,UAAY,CAAE,MAAO,EAAG,CACvC,EACE,aAAc,WAChB,CAAC,EChCGhB,GAAO9nB,GAEX,SAASipB,GAAmBz7B,EAAM,CAChC,GAAIA,IAAS,KAAM,MAAO,GAE1B,IAAIw5B,EAAMx5B,EAAK,OAEf,OAAQw5B,IAAQ,IAAMx5B,IAAS,QAAUA,IAAS,QAAUA,IAAS,SAC7Dw5B,IAAQ,IAAMx5B,IAAS,SAAWA,IAAS,SAAWA,IAAS,QACzE,CAEA,SAAS07B,GAAqB17B,EAAM,CAClC,OAAOA,IAAS,QACTA,IAAS,QACTA,IAAS,MAClB,CAEA,SAAS27B,GAAUJ,EAAQ,CACzB,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAM,IAAM,kBACpD,CAEA,IAAAK,GAAiB,IAAItB,GAAK,yBAA0B,CAClD,KAAM,SACN,QAASmB,GACT,UAAWC,GACX,UAAWC,GACX,UAAW,CACT,UAAW,SAAUJ,EAAQ,CAAE,OAAOA,EAAS,OAAS,OAAQ,EAChE,UAAW,SAAUA,EAAQ,CAAE,OAAOA,EAAS,OAAS,OAAQ,EAChE,UAAW,SAAUA,EAAQ,CAAE,OAAOA,EAAS,OAAS,OAAQ,CACpE,EACE,aAAc,WAChB,CAAC,EChCG9S,GAASjW,GACT8nB,GAAS/jB,GAEb,SAASslB,GAAUz9B,EAAG,CACpB,MAAS,KAAeA,GAAOA,GAAK,IAC3B,IAAeA,GAAOA,GAAK,IAC3B,IAAeA,GAAOA,GAAK,GACtC,CAEA,SAAS09B,GAAU19B,EAAG,CACpB,MAAS,KAAeA,GAAOA,GAAK,EACtC,CAEA,SAAS29B,GAAU39B,EAAG,CACpB,MAAS,KAAeA,GAAOA,GAAK,EACtC,CAEA,SAAS49B,GAAmBh8B,EAAM,CAChC,GAAIA,IAAS,KAAM,MAAO,GAE1B,IAAIw5B,EAAMx5B,EAAK,OACXiW,EAAQ,EACRgmB,EAAY,GACZtL,EAEJ,GAAI,CAAC6I,EAAK,MAAO,GASjB,GAPA7I,EAAK3wB,EAAKiW,CAAK,GAGX0a,IAAO,KAAOA,IAAO,OACvBA,EAAK3wB,EAAK,EAAEiW,CAAK,GAGf0a,IAAO,IAAK,CAEd,GAAI1a,EAAQ,IAAMujB,EAAK,MAAO,GAK9B,GAJA7I,EAAK3wB,EAAK,EAAEiW,CAAK,EAIb0a,IAAO,IAAK,CAId,IAFA1a,IAEOA,EAAQujB,EAAKvjB,IAElB,GADA0a,EAAK3wB,EAAKiW,CAAK,EACX0a,IAAO,IACX,IAAIA,IAAO,KAAOA,IAAO,IAAK,MAAO,GACrCsL,EAAY,GAEd,OAAOA,GAAatL,IAAO,GACjC,CAGI,GAAIA,IAAO,IAAK,CAId,IAFA1a,IAEOA,EAAQujB,EAAKvjB,IAElB,GADA0a,EAAK3wB,EAAKiW,CAAK,EACX0a,IAAO,IACX,IAAI,CAACkL,GAAU77B,EAAK,WAAWiW,CAAK,CAAC,EAAG,MAAO,GAC/CgmB,EAAY,GAEd,OAAOA,GAAatL,IAAO,GACjC,CAGI,GAAIA,IAAO,IAAK,CAId,IAFA1a,IAEOA,EAAQujB,EAAKvjB,IAElB,GADA0a,EAAK3wB,EAAKiW,CAAK,EACX0a,IAAO,IACX,IAAI,CAACmL,GAAU97B,EAAK,WAAWiW,CAAK,CAAC,EAAG,MAAO,GAC/CgmB,EAAY,GAEd,OAAOA,GAAatL,IAAO,GACjC,CACA,CAKE,GAAIA,IAAO,IAAK,MAAO,GAEvB,KAAO1a,EAAQujB,EAAKvjB,IAElB,GADA0a,EAAK3wB,EAAKiW,CAAK,EACX0a,IAAO,IACX,IAAI,CAACoL,GAAU/7B,EAAK,WAAWiW,CAAK,CAAC,EACnC,MAAO,GAETgmB,EAAY,GAId,MAAI,GAACA,GAAatL,IAAO,IAG3B,CAEA,SAASuL,GAAqBl8B,EAAM,CAClC,IAAIgC,EAAQhC,EAAMlC,EAAO,EAAG6yB,EAc5B,GAZI3uB,EAAM,QAAQ,GAAG,IAAM,KACzBA,EAAQA,EAAM,QAAQ,KAAM,EAAE,GAGhC2uB,EAAK3uB,EAAM,CAAC,GAER2uB,IAAO,KAAOA,IAAO,OACnBA,IAAO,MAAK7yB,EAAO,IACvBkE,EAAQA,EAAM,MAAM,CAAC,EACrB2uB,EAAK3uB,EAAM,CAAC,GAGVA,IAAU,IAAK,MAAO,GAE1B,GAAI2uB,IAAO,IAAK,CACd,GAAI3uB,EAAM,CAAC,IAAM,IAAK,OAAOlE,EAAO,SAASkE,EAAM,MAAM,CAAC,EAAG,CAAC,EAC9D,GAAIA,EAAM,CAAC,IAAM,IAAK,OAAOlE,EAAO,SAASkE,EAAM,MAAM,CAAC,EAAG,EAAE,EAC/D,GAAIA,EAAM,CAAC,IAAM,IAAK,OAAOlE,EAAO,SAASkE,EAAM,MAAM,CAAC,EAAG,CAAC,CAClE,CAEE,OAAOlE,EAAO,SAASkE,EAAO,EAAE,CAClC,CAEA,SAASm6B,GAAUZ,EAAQ,CACzB,OAAQ,OAAO,UAAU,SAAS,KAAKA,CAAM,IAAO,mBAC5CA,EAAS,IAAM,GAAK,CAAC9S,GAAO,eAAe8S,CAAM,CAC3D,CAEA,IAAAa,GAAiB,IAAI9B,GAAK,wBAAyB,CACjD,KAAM,SACN,QAAS0B,GACT,UAAWE,GACX,UAAWC,GACX,UAAW,CACT,OAAa,SAAU9lB,EAAK,CAAE,OAAOA,GAAO,EAAI,KAAOA,EAAI,SAAS,CAAC,EAAI,MAAQA,EAAI,SAAS,CAAC,EAAE,MAAM,CAAC,CAAE,EAC1G,MAAa,SAAUA,EAAK,CAAE,OAAOA,GAAO,EAAI,KAAQA,EAAI,SAAS,CAAC,EAAI,MAASA,EAAI,SAAS,CAAC,EAAE,MAAM,CAAC,CAAE,EAC5G,QAAa,SAAUA,EAAK,CAAE,OAAOA,EAAI,SAAS,EAAE,CAAE,EAEtD,YAAa,SAAUA,EAAK,CAAE,OAAOA,GAAO,EAAI,KAAOA,EAAI,SAAS,EAAE,EAAE,YAAW,EAAM,MAAQA,EAAI,SAAS,EAAE,EAAE,cAAc,MAAM,CAAC,CAAE,CAC7I,EACE,aAAc,UACd,aAAc,CACZ,OAAa,CAAE,EAAI,KAAK,EACxB,MAAa,CAAE,EAAI,KAAK,EACxB,QAAa,CAAE,GAAI,KAAK,EACxB,YAAa,CAAE,GAAI,KAAK,CAC5B,CACA,CAAC,ECzJGoS,GAASjW,GACT8nB,GAAS/jB,GAET8lB,GAAqB,IAAI,OAE3B,0IAOuB,EAEzB,SAASC,GAAiBt8B,EAAM,CAG9B,MAFI,EAAAA,IAAS,MAET,CAACq8B,GAAmB,KAAKr8B,CAAI,GAG7BA,EAAKA,EAAK,OAAS,CAAC,IAAM,IAKhC,CAEA,SAASu8B,GAAmBv8B,EAAM,CAChC,IAAIgC,EAAOlE,EASX,OAPAkE,EAAShC,EAAK,QAAQ,KAAM,EAAE,EAAE,YAAW,EAC3ClC,EAASkE,EAAM,CAAC,IAAM,IAAM,GAAK,EAE7B,KAAK,QAAQA,EAAM,CAAC,CAAC,GAAK,IAC5BA,EAAQA,EAAM,MAAM,CAAC,GAGnBA,IAAU,OACJlE,IAAS,EAAK,OAAO,kBAAoB,OAAO,kBAE/CkE,IAAU,OACZ,IAEFlE,EAAO,WAAWkE,EAAO,EAAE,CACpC,CAGA,IAAIw6B,GAAyB,gBAE7B,SAASC,GAAmBlB,EAAQnB,EAAO,CACzC,IAAIr6B,EAEJ,GAAI,MAAMw7B,CAAM,EACd,OAAQnB,EAAK,CACX,IAAK,YAAa,MAAO,OACzB,IAAK,YAAa,MAAO,OACzB,IAAK,YAAa,MAAO,MAC/B,SACa,OAAO,oBAAsBmB,EACtC,OAAQnB,EAAK,CACX,IAAK,YAAa,MAAO,OACzB,IAAK,YAAa,MAAO,OACzB,IAAK,YAAa,MAAO,MAC/B,SACa,OAAO,oBAAsBmB,EACtC,OAAQnB,EAAK,CACX,IAAK,YAAa,MAAO,QACzB,IAAK,YAAa,MAAO,QACzB,IAAK,YAAa,MAAO,OAC/B,SACa3R,GAAO,eAAe8S,CAAM,EACrC,MAAO,OAGT,OAAAx7B,EAAMw7B,EAAO,SAAS,EAAE,EAKjBiB,GAAuB,KAAKz8B,CAAG,EAAIA,EAAI,QAAQ,IAAK,IAAI,EAAIA,CACrE,CAEA,SAAS28B,GAAQnB,EAAQ,CACvB,OAAQ,OAAO,UAAU,SAAS,KAAKA,CAAM,IAAM,oBAC3CA,EAAS,IAAM,GAAK9S,GAAO,eAAe8S,CAAM,EAC1D,CAEA,IAAAoB,GAAiB,IAAIrC,GAAK,0BAA2B,CACnD,KAAM,SACN,QAASgC,GACT,UAAWC,GACX,UAAWG,GACX,UAAWD,GACX,aAAc,WAChB,CAAC,ECrFDpY,GAAiB7R,GAAsB,OAAO,CAC5C,SAAU,CACR+D,GACAC,GACAC,GACAE,EACJ,CACA,CAAC,ECRDimB,GAAiBpqB,GCRb8nB,GAAO9nB,GAEPqqB,GAAmB,IAAI,OACzB,oDAEgB,EAEdC,GAAwB,IAAI,OAC9B,kLASwB,EAE1B,SAASC,GAAqB/8B,EAAM,CAClC,OAAIA,IAAS,KAAa,GACtB68B,GAAiB,KAAK78B,CAAI,IAAM,MAChC88B,GAAsB,KAAK98B,CAAI,IAAM,IAE3C,CAEA,SAASg9B,GAAuBh9B,EAAM,CACpC,IAAIkL,EAAO5N,EAAMF,EAAOC,EAAK4/B,EAAMC,EAAQC,EAAQC,EAAW,EAC1DC,EAAQ,KAAMC,EAASC,EAAWC,EAKtC,GAHAtyB,EAAQ2xB,GAAiB,KAAK78B,CAAI,EAC9BkL,IAAU,OAAMA,EAAQ4xB,GAAsB,KAAK98B,CAAI,GAEvDkL,IAAU,KAAM,MAAM,IAAI,MAAM,oBAAoB,EAQxD,GAJA5N,EAAO,CAAE4N,EAAM,CAAC,EAChB9N,EAAQ,CAAE8N,EAAM,CAAC,EAAK,EACtB7N,EAAM,CAAE6N,EAAM,CAAC,EAEX,CAACA,EAAM,CAAC,EACV,OAAO,IAAI,KAAK,KAAK,IAAI5N,EAAMF,EAAOC,CAAG,CAAC,EAS5C,GAJA4/B,EAAO,CAAE/xB,EAAM,CAAC,EAChBgyB,EAAS,CAAEhyB,EAAM,CAAC,EAClBiyB,EAAS,CAAEjyB,EAAM,CAAC,EAEdA,EAAM,CAAC,EAAG,CAEZ,IADAkyB,EAAWlyB,EAAM,CAAC,EAAE,MAAM,EAAG,CAAC,EACvBkyB,EAAS,OAAS,GACvBA,GAAY,IAEdA,EAAW,CAACA,CAChB,CAIE,OAAIlyB,EAAM,CAAC,IACToyB,EAAU,CAAEpyB,EAAM,EAAE,EACpBqyB,EAAY,EAAEryB,EAAM,EAAE,GAAK,GAC3BmyB,GAASC,EAAU,GAAKC,GAAa,IACjCryB,EAAM,CAAC,IAAM,MAAKmyB,EAAQ,CAACA,IAGjCG,EAAO,IAAI,KAAK,KAAK,IAAIlgC,EAAMF,EAAOC,EAAK4/B,EAAMC,EAAQC,EAAQC,CAAQ,CAAC,EAEtEC,GAAOG,EAAK,QAAQA,EAAK,QAAO,EAAKH,CAAK,EAEvCG,CACT,CAEA,SAASC,GAAuBlC,EAAoB,CAClD,OAAOA,EAAO,YAAW,CAC3B,CAEA,IAAAmC,GAAiB,IAAIpD,GAAK,8BAA+B,CACvD,KAAM,SACN,QAASyC,GACT,UAAWC,GACX,WAAY,KACZ,UAAWS,EACb,CAAC,ECrFGnD,GAAO9nB,GAEX,SAASmrB,GAAiB39B,EAAM,CAC9B,OAAOA,IAAS,MAAQA,IAAS,IACnC,CAEA,IAAA49B,GAAiB,IAAItD,GAAK,0BAA2B,CACnD,KAAM,SACN,QAASqD,EACX,CAAC,ECNGrD,GAAO9nB,GAIPqrB,GAAa;AAAA,IAGjB,SAASC,GAAkB99B,EAAM,CAC/B,GAAIA,IAAS,KAAM,MAAO,GAE1B,IAAIoE,EAAM25B,EAAKC,EAAS,EAAGxE,EAAMx5B,EAAK,OAAQm6B,EAAM0D,GAGpD,IAAKE,EAAM,EAAGA,EAAMvE,EAAKuE,IAIvB,GAHA35B,EAAO+1B,EAAI,QAAQn6B,EAAK,OAAO+9B,CAAG,CAAC,EAG/B,EAAA35B,EAAO,IAGX,IAAIA,EAAO,EAAG,MAAO,GAErB45B,GAAU,EAIZ,OAAQA,EAAS,IAAO,CAC1B,CAEA,SAASC,GAAoBj+B,EAAM,CACjC,IAAI+9B,EAAKG,EACL3M,EAAQvxB,EAAK,QAAQ,WAAY,EAAE,EACnCw5B,EAAMjI,EAAM,OACZ4I,EAAM0D,GACNrM,EAAO,EACP3pB,EAAS,CAAA,EAIb,IAAKk2B,EAAM,EAAGA,EAAMvE,EAAKuE,IAClBA,EAAM,IAAM,GAAMA,IACrBl2B,EAAO,KAAM2pB,GAAQ,GAAM,GAAI,EAC/B3pB,EAAO,KAAM2pB,GAAQ,EAAK,GAAI,EAC9B3pB,EAAO,KAAK2pB,EAAO,GAAI,GAGzBA,EAAQA,GAAQ,EAAK2I,EAAI,QAAQ5I,EAAM,OAAOwM,CAAG,CAAC,EAKpD,OAAAG,EAAY1E,EAAM,EAAK,EAEnB0E,IAAa,GACfr2B,EAAO,KAAM2pB,GAAQ,GAAM,GAAI,EAC/B3pB,EAAO,KAAM2pB,GAAQ,EAAK,GAAI,EAC9B3pB,EAAO,KAAK2pB,EAAO,GAAI,GACd0M,IAAa,IACtBr2B,EAAO,KAAM2pB,GAAQ,GAAM,GAAI,EAC/B3pB,EAAO,KAAM2pB,GAAQ,EAAK,GAAI,GACrB0M,IAAa,IACtBr2B,EAAO,KAAM2pB,GAAQ,EAAK,GAAI,EAGzB,IAAI,WAAW3pB,CAAM,CAC9B,CAEA,SAASs2B,GAAoB5C,EAAoB,CAC/C,IAAI1zB,EAAS,GAAI2pB,EAAO,EAAGuM,EAAK1E,EAC5BG,EAAM+B,EAAO,OACbpB,EAAM0D,GAIV,IAAKE,EAAM,EAAGA,EAAMvE,EAAKuE,IAClBA,EAAM,IAAM,GAAMA,IACrBl2B,GAAUsyB,EAAK3I,GAAQ,GAAM,EAAI,EACjC3pB,GAAUsyB,EAAK3I,GAAQ,GAAM,EAAI,EACjC3pB,GAAUsyB,EAAK3I,GAAQ,EAAK,EAAI,EAChC3pB,GAAUsyB,EAAI3I,EAAO,EAAI,GAG3BA,GAAQA,GAAQ,GAAK+J,EAAOwC,CAAG,EAKjC,OAAA1E,EAAOG,EAAM,EAETH,IAAS,GACXxxB,GAAUsyB,EAAK3I,GAAQ,GAAM,EAAI,EACjC3pB,GAAUsyB,EAAK3I,GAAQ,GAAM,EAAI,EACjC3pB,GAAUsyB,EAAK3I,GAAQ,EAAK,EAAI,EAChC3pB,GAAUsyB,EAAI3I,EAAO,EAAI,GAChB6H,IAAS,GAClBxxB,GAAUsyB,EAAK3I,GAAQ,GAAM,EAAI,EACjC3pB,GAAUsyB,EAAK3I,GAAQ,EAAK,EAAI,EAChC3pB,GAAUsyB,EAAK3I,GAAQ,EAAK,EAAI,EAChC3pB,GAAUsyB,EAAI,EAAE,GACPd,IAAS,IAClBxxB,GAAUsyB,EAAK3I,GAAQ,EAAK,EAAI,EAChC3pB,GAAUsyB,EAAK3I,GAAQ,EAAK,EAAI,EAChC3pB,GAAUsyB,EAAI,EAAE,EAChBtyB,GAAUsyB,EAAI,EAAE,GAGXtyB,CACT,CAEA,SAASu2B,GAAS/nB,EAAK,CACrB,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,IAAO,qBAClD,CAEA,IAAAgoB,GAAiB,IAAI/D,GAAK,2BAA4B,CACpD,KAAM,SACN,QAASwD,GACT,UAAWG,GACX,UAAWG,GACX,UAAWD,EACb,CAAC,EC1HG7D,GAAO9nB,GAEP8rB,GAAkB,OAAO,UAAU,eACnCC,GAAkB,OAAO,UAAU,SAEvC,SAASC,GAAgBx+B,EAAM,CAC7B,GAAIA,IAAS,KAAM,MAAO,GAE1B,IAAIy+B,EAAa,CAAA,EAAIxoB,EAAO1B,EAAQmqB,EAAMC,EAASC,EAC/CrD,EAASv7B,EAEb,IAAKiW,EAAQ,EAAG1B,EAASgnB,EAAO,OAAQtlB,EAAQ1B,EAAQ0B,GAAS,EAAG,CAIlE,GAHAyoB,EAAOnD,EAAOtlB,CAAK,EACnB2oB,EAAa,GAETL,GAAU,KAAKG,CAAI,IAAM,kBAAmB,MAAO,GAEvD,IAAKC,KAAWD,EACd,GAAIJ,GAAgB,KAAKI,EAAMC,CAAO,EACpC,GAAI,CAACC,EAAYA,EAAa,OACzB,OAAO,GAIhB,GAAI,CAACA,EAAY,MAAO,GAExB,GAAIH,EAAW,QAAQE,CAAO,IAAM,GAAIF,EAAW,KAAKE,CAAO,MAC1D,OAAO,EAChB,CAEE,MAAO,EACT,CAEA,SAASE,GAAkB7+B,EAAM,CAC/B,OAAOA,IAAS,KAAOA,EAAO,CAAA,CAChC,CAEA,IAAA8+B,GAAiB,IAAIxE,GAAK,yBAA0B,CAClD,KAAM,WACN,QAASkE,GACT,UAAWK,EACb,CAAC,ECzCGvE,GAAO9nB,GAEP+rB,GAAY,OAAO,UAAU,SAEjC,SAASQ,GAAiB/+B,EAAM,CAC9B,GAAIA,IAAS,KAAM,MAAO,GAE1B,IAAIiW,EAAO1B,EAAQmqB,EAAM1oB,EAAMnO,EAC3B0zB,EAASv7B,EAIb,IAFA6H,EAAS,IAAI,MAAM0zB,EAAO,MAAM,EAE3BtlB,EAAQ,EAAG1B,EAASgnB,EAAO,OAAQtlB,EAAQ1B,EAAQ0B,GAAS,EAAG,CAOlE,GANAyoB,EAAOnD,EAAOtlB,CAAK,EAEfsoB,GAAU,KAAKG,CAAI,IAAM,oBAE7B1oB,EAAO,OAAO,KAAK0oB,CAAI,EAEnB1oB,EAAK,SAAW,GAAG,MAAO,GAE9BnO,EAAOoO,CAAK,EAAI,CAAED,EAAK,CAAC,EAAG0oB,EAAK1oB,EAAK,CAAC,CAAC,CAAC,CAC5C,CAEE,MAAO,EACT,CAEA,SAASgpB,GAAmBh/B,EAAM,CAChC,GAAIA,IAAS,KAAM,MAAO,CAAA,EAE1B,IAAIiW,EAAO1B,EAAQmqB,EAAM1oB,EAAMnO,EAC3B0zB,EAASv7B,EAIb,IAFA6H,EAAS,IAAI,MAAM0zB,EAAO,MAAM,EAE3BtlB,EAAQ,EAAG1B,EAASgnB,EAAO,OAAQtlB,EAAQ1B,EAAQ0B,GAAS,EAC/DyoB,EAAOnD,EAAOtlB,CAAK,EAEnBD,EAAO,OAAO,KAAK0oB,CAAI,EAEvB72B,EAAOoO,CAAK,EAAI,CAAED,EAAK,CAAC,EAAG0oB,EAAK1oB,EAAK,CAAC,CAAC,CAAC,EAG1C,OAAOnO,CACT,CAEA,IAAAo3B,GAAiB,IAAI3E,GAAK,0BAA2B,CACnD,KAAM,WACN,QAASyE,GACT,UAAWC,EACb,CAAC,EClDG1E,GAAO9nB,GAEP8rB,GAAkB,OAAO,UAAU,eAEvC,SAASY,GAAel/B,EAAM,CAC5B,GAAIA,IAAS,KAAM,MAAO,GAE1B,IAAIoL,EAAKmwB,EAASv7B,EAElB,IAAKoL,KAAOmwB,EACV,GAAI+C,GAAgB,KAAK/C,EAAQnwB,CAAG,GAC9BmwB,EAAOnwB,CAAG,IAAM,KAAM,MAAO,GAIrC,MAAO,EACT,CAEA,SAAS+zB,GAAiBn/B,EAAM,CAC9B,OAAOA,IAAS,KAAOA,EAAO,CAAA,CAChC,CAEA,IAAAo/B,GAAiB,IAAI9E,GAAK,wBAAyB,CACjD,KAAM,UACN,QAAS4E,GACT,UAAWC,EACb,CAAC,EClBDE,GAAiB7sB,GAAkB,OAAO,CACxC,SAAU,CACR+D,GACAC,EACJ,EACE,SAAU,CACRC,GACAE,GACAc,GACA4K,EACJ,CACA,CAAC,ECjBGoG,GAAsBjW,GACtBqmB,GAAsBtiB,GACtBkjB,GAAsBjjB,GACtB8oB,GAAsB7oB,GAGtB6nB,GAAkB,OAAO,UAAU,eAGnCiB,GAAoB,EACpBC,GAAoB,EACpBC,GAAoB,EACpBC,GAAoB,EAGpBC,GAAiB,EACjBC,GAAiB,EACjBC,GAAiB,EAGjBC,GAAgC,sIAChCC,GAAgC,qBAChCC,GAAgC,cAChCC,GAAgC,yBAChCC,GAAgC,mFAGpC,SAASC,GAAO9pB,EAAK,CAAE,OAAO,OAAO,UAAU,SAAS,KAAKA,CAAG,CAAE,CAElE,SAAS+pB,GAAOhiC,EAAG,CACjB,OAAQA,IAAM,IAAkBA,IAAM,EACxC,CAEA,SAASiiC,GAAejiC,EAAG,CACzB,OAAQA,IAAM,GAAmBA,IAAM,EACzC,CAEA,SAASkiC,GAAaliC,EAAG,CACvB,OAAQA,IAAM,GACNA,IAAM,IACNA,IAAM,IACNA,IAAM,EAChB,CAEA,SAASmiC,GAAkBniC,EAAG,CAC5B,OAAOA,IAAM,IACNA,IAAM,IACNA,IAAM,IACNA,IAAM,KACNA,IAAM,GACf,CAEA,SAASoiC,GAAYpiC,EAAG,CACtB,IAAIqiC,EAEJ,MAAK,KAAeriC,GAAOA,GAAK,GACvBA,EAAI,IAIbqiC,EAAKriC,EAAI,GAEJ,IAAeqiC,GAAQA,GAAM,IACzBA,EAAK,GAAO,GAGd,GACT,CAEA,SAASC,GAActiC,EAAG,CACxB,OAAIA,IAAM,IAAsB,EAC5BA,IAAM,IAAsB,EAC5BA,IAAM,GAAsB,EACzB,CACT,CAEA,SAASuiC,GAAgBviC,EAAG,CAC1B,MAAK,KAAeA,GAAOA,GAAK,GACvBA,EAAI,GAGN,EACT,CAEA,SAASwiC,GAAqBxiC,EAAG,CAE/B,OAAQA,IAAM,GAAe,KACtBA,IAAM,GAAe,OACrBA,IAAM,GAAe,KACrBA,IAAM,KACNA,IAAM,EADe,IAErBA,IAAM,IAAe;AAAA,EACrBA,IAAM,IAAe,KACrBA,IAAM,IAAe,KACrBA,IAAM,IAAe,KACrBA,IAAM,IAAe,OACrBA,IAAM,GAAmB,IACzBA,IAAM,GAAe,IACrBA,IAAM,GAAe,IACrBA,IAAM,GAAe,KACrBA,IAAM,GAAe,IACrBA,IAAM,GAAe,IACrBA,IAAM,GAAe,SACrBA,IAAM,GAAe,SAAW,EACzC,CAEA,SAASyiC,GAAkBziC,EAAG,CAC5B,OAAIA,GAAK,MACA,OAAO,aAAaA,CAAC,EAIvB,OAAO,cACVA,EAAI,OAAa,IAAM,OACvBA,EAAI,MAAY,MAAU,KAChC,CACA,CAIA,SAAS0iC,GAAYvF,EAAQnwB,EAAKpJ,EAAO,CAEnCoJ,IAAQ,YACV,OAAO,eAAemwB,EAAQnwB,EAAK,CACjC,aAAc,GACd,WAAY,GACZ,SAAU,GACV,MAAOpJ,CACb,CAAK,EAEDu5B,EAAOnwB,CAAG,EAAIpJ,CAElB,CAEA,IAAI++B,GAAoB,IAAI,MAAM,GAAG,EACjCC,GAAkB,IAAI,MAAM,GAAG,EACnC,QAAS78B,GAAI,EAAGA,GAAI,IAAKA,KACvB48B,GAAkB58B,EAAC,EAAIy8B,GAAqBz8B,EAAC,EAAI,EAAI,EACrD68B,GAAgB78B,EAAC,EAAIy8B,GAAqBz8B,EAAC,EAI7C,SAAS88B,GAAM1P,EAAOhc,EAAS,CAC7B,KAAK,MAAQgc,EAEb,KAAK,SAAYhc,EAAQ,UAAgB,KACzC,KAAK,OAAYA,EAAQ,QAAgB+pB,GACzC,KAAK,UAAY/pB,EAAQ,WAAgB,KAGzC,KAAK,OAAYA,EAAQ,QAAgB,GAEzC,KAAK,KAAYA,EAAQ,MAAgB,GACzC,KAAK,SAAYA,EAAQ,UAAgB,KAEzC,KAAK,cAAgB,KAAK,OAAO,iBACjC,KAAK,QAAgB,KAAK,OAAO,gBAEjC,KAAK,OAAagc,EAAM,OACxB,KAAK,SAAa,EAClB,KAAK,KAAa,EAClB,KAAK,UAAa,EAClB,KAAK,WAAa,EAIlB,KAAK,eAAiB,GAEtB,KAAK,UAAY,CAAA,CAYnB,CAGA,SAAS2P,GAAcC,EAAOpwB,EAAS,CACrC,IAAIgoB,EAAO,CACT,KAAUoI,EAAM,SAChB,OAAUA,EAAM,MAAM,MAAM,EAAG,EAAE,EACjC,SAAUA,EAAM,SAChB,KAAUA,EAAM,KAChB,OAAUA,EAAM,SAAWA,EAAM,SACrC,EAEE,OAAApI,EAAK,QAAUU,GAAYV,CAAI,EAExB,IAAIF,GAAc9nB,EAASgoB,CAAI,CACxC,CAEA,SAASqI,EAAWD,EAAOpwB,EAAS,CAClC,MAAMmwB,GAAcC,EAAOpwB,CAAO,CACpC,CAEA,SAASswB,GAAaF,EAAOpwB,EAAS,CAChCowB,EAAM,WACRA,EAAM,UAAU,KAAK,KAAMD,GAAcC,EAAOpwB,CAAO,CAAC,CAE5D,CAGA,IAAIuwB,GAAoB,CAEtB,KAAM,SAA6BH,EAAOziC,EAAM+Q,EAAM,CAEpD,IAAIvE,EAAOq2B,EAAOC,EAEdL,EAAM,UAAY,MACpBC,EAAWD,EAAO,gCAAgC,EAGhD1xB,EAAK,SAAW,GAClB2xB,EAAWD,EAAO,6CAA6C,EAGjEj2B,EAAQ,uBAAuB,KAAKuE,EAAK,CAAC,CAAC,EAEvCvE,IAAU,MACZk2B,EAAWD,EAAO,2CAA2C,EAG/DI,EAAQ,SAASr2B,EAAM,CAAC,EAAG,EAAE,EAC7Bs2B,EAAQ,SAASt2B,EAAM,CAAC,EAAG,EAAE,EAEzBq2B,IAAU,GACZH,EAAWD,EAAO,2CAA2C,EAG/DA,EAAM,QAAU1xB,EAAK,CAAC,EACtB0xB,EAAM,gBAAmBK,EAAQ,EAE7BA,IAAU,GAAKA,IAAU,GAC3BH,GAAaF,EAAO,0CAA0C,CAEpE,EAEE,IAAK,SAA4BA,EAAOziC,EAAM+Q,EAAM,CAElD,IAAIgyB,EAAQnY,EAER7Z,EAAK,SAAW,GAClB2xB,EAAWD,EAAO,6CAA6C,EAGjEM,EAAShyB,EAAK,CAAC,EACf6Z,EAAS7Z,EAAK,CAAC,EAEVwwB,GAAmB,KAAKwB,CAAM,GACjCL,EAAWD,EAAO,6DAA6D,EAG7E7C,GAAgB,KAAK6C,EAAM,OAAQM,CAAM,GAC3CL,EAAWD,EAAO,8CAAgDM,EAAS,cAAc,EAGtFvB,GAAgB,KAAK5W,CAAM,GAC9B8X,EAAWD,EAAO,8DAA8D,EAGlF,GAAI,CACF7X,EAAS,mBAAmBA,CAAM,CACxC,MAAkB,CACZ8X,EAAWD,EAAO,4BAA8B7X,CAAM,CAC5D,CAEI6X,EAAM,OAAOM,CAAM,EAAInY,CAC3B,CACA,EAGA,SAASoY,GAAeP,EAAOrtB,EAAOif,EAAK4O,EAAW,CACpD,IAAIC,EAAWC,EAASC,EAAYC,EAEpC,GAAIjuB,EAAQif,EAAK,CAGf,GAFAgP,EAAUZ,EAAM,MAAM,MAAMrtB,EAAOif,CAAG,EAElC4O,EACF,IAAKC,EAAY,EAAGC,EAAUE,EAAQ,OAAQH,EAAYC,EAASD,GAAa,EAC9EE,EAAaC,EAAQ,WAAWH,CAAS,EACnCE,IAAe,GACd,IAAQA,GAAcA,GAAc,SACzCV,EAAWD,EAAO,+BAA+B,OAG5CrB,GAAsB,KAAKiC,CAAO,GAC3CX,EAAWD,EAAO,8CAA8C,EAGlEA,EAAM,QAAUY,CACpB,CACA,CAEA,SAASC,GAAcb,EAAOc,EAAahK,EAAQiK,EAAiB,CAClE,IAAIhK,EAAY9sB,EAAK6K,EAAOksB,EAQ5B,IANK1Z,GAAO,SAASwP,CAAM,GACzBmJ,EAAWD,EAAO,mEAAmE,EAGvFjJ,EAAa,OAAO,KAAKD,CAAM,EAE1BhiB,EAAQ,EAAGksB,EAAWjK,EAAW,OAAQjiB,EAAQksB,EAAUlsB,GAAS,EACvE7K,EAAM8sB,EAAWjiB,CAAK,EAEjBqoB,GAAgB,KAAK2D,EAAa72B,CAAG,IACxC01B,GAAYmB,EAAa72B,EAAK6sB,EAAO7sB,CAAG,CAAC,EACzC82B,EAAgB92B,CAAG,EAAI,GAG7B,CAEA,SAASg3B,GAAiBjB,EAAOY,EAASG,EAAiBG,EAAQC,EAASC,EAC1EC,EAAWC,EAAgBC,EAAU,CAErC,IAAIzsB,EAAOksB,EAKX,GAAI,MAAM,QAAQG,CAAO,EAGvB,IAFAA,EAAU,MAAM,UAAU,MAAM,KAAKA,CAAO,EAEvCrsB,EAAQ,EAAGksB,EAAWG,EAAQ,OAAQrsB,EAAQksB,EAAUlsB,GAAS,EAChE,MAAM,QAAQqsB,EAAQrsB,CAAK,CAAC,GAC9BmrB,EAAWD,EAAO,6CAA6C,EAG7D,OAAOmB,GAAY,UAAYnC,GAAOmC,EAAQrsB,CAAK,CAAC,IAAM,oBAC5DqsB,EAAQrsB,CAAK,EAAI,mBAmBvB,GAXI,OAAOqsB,GAAY,UAAYnC,GAAOmC,CAAO,IAAM,oBACrDA,EAAU,mBAIZA,EAAU,OAAOA,CAAO,EAEpBP,IAAY,OACdA,EAAU,CAAA,GAGRM,IAAW,0BACb,GAAI,MAAM,QAAQE,CAAS,EACzB,IAAKtsB,EAAQ,EAAGksB,EAAWI,EAAU,OAAQtsB,EAAQksB,EAAUlsB,GAAS,EACtE+rB,GAAcb,EAAOY,EAASQ,EAAUtsB,CAAK,EAAGisB,CAAe,OAGjEF,GAAcb,EAAOY,EAASQ,EAAWL,CAAe,MAGtD,CAACf,EAAM,MACP,CAAC7C,GAAgB,KAAK4D,EAAiBI,CAAO,GAC9ChE,GAAgB,KAAKyD,EAASO,CAAO,IACvCnB,EAAM,KAAOqB,GAAarB,EAAM,KAChCA,EAAM,UAAYsB,GAAkBtB,EAAM,UAC1CA,EAAM,SAAWuB,GAAYvB,EAAM,SACnCC,EAAWD,EAAO,wBAAwB,GAG5CL,GAAYiB,EAASO,EAASC,CAAS,EACvC,OAAOL,EAAgBI,CAAO,EAGhC,OAAOP,CACT,CAEA,SAASY,GAAcxB,EAAO,CAC5B,IAAIxQ,EAEJA,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCxQ,IAAO,GACTwQ,EAAM,WACGxQ,IAAO,IAChBwQ,EAAM,WACFA,EAAM,MAAM,WAAWA,EAAM,QAAQ,IAAM,IAC7CA,EAAM,YAGRC,EAAWD,EAAO,0BAA0B,EAG9CA,EAAM,MAAQ,EACdA,EAAM,UAAYA,EAAM,SACxBA,EAAM,eAAiB,EACzB,CAEA,SAASyB,GAAoBzB,EAAO0B,EAAeC,EAAa,CAI9D,QAHIC,EAAa,EACbpS,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEvCxQ,IAAO,GAAG,CACf,KAAO0P,GAAe1P,CAAE,GAClBA,IAAO,GAAiBwQ,EAAM,iBAAmB,KACnDA,EAAM,eAAiBA,EAAM,UAE/BxQ,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAG9C,GAAI0B,GAAiBlS,IAAO,GAC1B,GACEA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,QACrCxQ,IAAO,IAAgBA,IAAO,IAAgBA,IAAO,GAGhE,GAAIyP,GAAOzP,CAAE,EAOX,IANAgS,GAAcxB,CAAK,EAEnBxQ,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAC1C4B,IACA5B,EAAM,WAAa,EAEZxQ,IAAO,IACZwQ,EAAM,aACNxQ,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,MAG9C,MAEN,CAEE,OAAI2B,IAAgB,IAAMC,IAAe,GAAK5B,EAAM,WAAa2B,GAC/DzB,GAAaF,EAAO,uBAAuB,EAGtC4B,CACT,CAEA,SAASC,GAAsB7B,EAAO,CACpC,IAAIS,EAAYT,EAAM,SAClBxQ,EAMJ,OAJAA,EAAKwQ,EAAM,MAAM,WAAWS,CAAS,EAIhC,IAAAjR,IAAO,IAAeA,IAAO,KAC9BA,IAAOwQ,EAAM,MAAM,WAAWS,EAAY,CAAC,GAC3CjR,IAAOwQ,EAAM,MAAM,WAAWS,EAAY,CAAC,IAE7CA,GAAa,EAEbjR,EAAKwQ,EAAM,MAAM,WAAWS,CAAS,EAEjCjR,IAAO,GAAK2P,GAAa3P,CAAE,GAMnC,CAEA,SAASsS,GAAiB9B,EAAO9I,EAAO,CAClCA,IAAU,EACZ8I,EAAM,QAAU,IACP9I,EAAQ,IACjB8I,EAAM,QAAU1Y,GAAO,OAAO;AAAA,EAAM4P,EAAQ,CAAC,EAEjD,CAGA,SAAS6K,GAAgB/B,EAAOgC,EAAYC,EAAsB,CAChE,IAAIC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAAQ1C,EAAM,KACdY,EAAUZ,EAAM,OAChBxQ,EAoBJ,GAlBAA,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCb,GAAa3P,CAAE,GACf4P,GAAkB5P,CAAE,GACpBA,IAAO,IACPA,IAAO,IACPA,IAAO,IACPA,IAAO,IACPA,IAAO,KACPA,IAAO,IACPA,IAAO,IACPA,IAAO,IACPA,IAAO,IACPA,IAAO,IACPA,IAAO,KAIPA,IAAO,IAAeA,IAAO,MAC/B2S,EAAYnC,EAAM,MAAM,WAAWA,EAAM,SAAW,CAAC,EAEjDb,GAAagD,CAAS,GACtBF,GAAwB7C,GAAkB+C,CAAS,GACrD,MAAO,GASX,IALAnC,EAAM,KAAO,SACbA,EAAM,OAAS,GACfoC,EAAeC,EAAarC,EAAM,SAClCsC,EAAoB,GAEb9S,IAAO,GAAG,CACf,GAAIA,IAAO,IAGT,GAFA2S,EAAYnC,EAAM,MAAM,WAAWA,EAAM,SAAW,CAAC,EAEjDb,GAAagD,CAAS,GACtBF,GAAwB7C,GAAkB+C,CAAS,EACrD,cAGO3S,IAAO,IAGhB,GAFA0S,EAAYlC,EAAM,MAAM,WAAWA,EAAM,SAAW,CAAC,EAEjDb,GAAa+C,CAAS,EACxB,UAGG,IAAKlC,EAAM,WAAaA,EAAM,WAAa6B,GAAsB7B,CAAK,GAClEiC,GAAwB7C,GAAkB5P,CAAE,EACrD,MAEK,GAAIyP,GAAOzP,CAAE,EAMlB,GALA+S,EAAQvC,EAAM,KACdwC,EAAaxC,EAAM,UACnByC,EAAczC,EAAM,WACpByB,GAAoBzB,EAAO,GAAO,EAAE,EAEhCA,EAAM,YAAcgC,EAAY,CAClCM,EAAoB,GACpB9S,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAC1C,QACR,KAAa,CACLA,EAAM,SAAWqC,EACjBrC,EAAM,KAAOuC,EACbvC,EAAM,UAAYwC,EAClBxC,EAAM,WAAayC,EACnB,KACR,EAGQH,IACF/B,GAAeP,EAAOoC,EAAcC,EAAY,EAAK,EACrDP,GAAiB9B,EAAOA,EAAM,KAAOuC,CAAK,EAC1CH,EAAeC,EAAarC,EAAM,SAClCsC,EAAoB,IAGjBpD,GAAe1P,CAAE,IACpB6S,EAAarC,EAAM,SAAW,GAGhCxQ,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,CAChD,CAIE,OAFAO,GAAeP,EAAOoC,EAAcC,EAAY,EAAK,EAEjDrC,EAAM,OACD,IAGTA,EAAM,KAAO0C,EACb1C,EAAM,OAASY,EACR,GACT,CAEA,SAAS+B,GAAuB3C,EAAOgC,EAAY,CACjD,IAAIxS,EACA4S,EAAcC,EAIlB,GAFA7S,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCxQ,IAAO,GACT,MAAO,GAQT,IALAwQ,EAAM,KAAO,SACbA,EAAM,OAAS,GACfA,EAAM,WACNoC,EAAeC,EAAarC,EAAM,UAE1BxQ,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,KAAO,GACvD,GAAIxQ,IAAO,GAIT,GAHA+Q,GAAeP,EAAOoC,EAAcpC,EAAM,SAAU,EAAI,EACxDxQ,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAExCxQ,IAAO,GACT4S,EAAepC,EAAM,SACrBA,EAAM,WACNqC,EAAarC,EAAM,aAEnB,OAAO,QAGAf,GAAOzP,CAAE,GAClB+Q,GAAeP,EAAOoC,EAAcC,EAAY,EAAI,EACpDP,GAAiB9B,EAAOyB,GAAoBzB,EAAO,GAAOgC,CAAU,CAAC,EACrEI,EAAeC,EAAarC,EAAM,UAEzBA,EAAM,WAAaA,EAAM,WAAa6B,GAAsB7B,CAAK,EAC1EC,EAAWD,EAAO,8DAA8D,GAGhFA,EAAM,WACNqC,EAAarC,EAAM,UAIvBC,EAAWD,EAAO,4DAA4D,CAChF,CAEA,SAAS4C,GAAuB5C,EAAOgC,EAAY,CACjD,IAAII,EACAC,EACAQ,EACAC,EACAC,EACAvT,EAIJ,GAFAA,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCxQ,IAAO,GACT,MAAO,GAQT,IALAwQ,EAAM,KAAO,SACbA,EAAM,OAAS,GACfA,EAAM,WACNoC,EAAeC,EAAarC,EAAM,UAE1BxQ,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,KAAO,GAAG,CAC1D,GAAIxQ,IAAO,GACT,OAAA+Q,GAAeP,EAAOoC,EAAcpC,EAAM,SAAU,EAAI,EACxDA,EAAM,WACC,GAEF,GAAIxQ,IAAO,GAAa,CAI7B,GAHA+Q,GAAeP,EAAOoC,EAAcpC,EAAM,SAAU,EAAI,EACxDxQ,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAExCf,GAAOzP,CAAE,EACXiS,GAAoBzB,EAAO,GAAOgC,CAAU,UAGnCxS,EAAK,KAAOoQ,GAAkBpQ,CAAE,EACzCwQ,EAAM,QAAUH,GAAgBrQ,CAAE,EAClCwQ,EAAM,oBAEI+C,EAAMxD,GAAc/P,CAAE,GAAK,EAAG,CAIxC,IAHAqT,EAAYE,EACZD,EAAY,EAELD,EAAY,EAAGA,IACpBrT,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,GAEvC+C,EAAM1D,GAAY7P,CAAE,IAAM,EAC7BsT,GAAaA,GAAa,GAAKC,EAG/B9C,EAAWD,EAAO,gCAAgC,EAItDA,EAAM,QAAUN,GAAkBoD,CAAS,EAE3C9C,EAAM,UAEd,MACQC,EAAWD,EAAO,yBAAyB,EAG7CoC,EAAeC,EAAarC,EAAM,QAExC,MAAef,GAAOzP,CAAE,GAClB+Q,GAAeP,EAAOoC,EAAcC,EAAY,EAAI,EACpDP,GAAiB9B,EAAOyB,GAAoBzB,EAAO,GAAOgC,CAAU,CAAC,EACrEI,EAAeC,EAAarC,EAAM,UAEzBA,EAAM,WAAaA,EAAM,WAAa6B,GAAsB7B,CAAK,EAC1EC,EAAWD,EAAO,8DAA8D,GAGhFA,EAAM,WACNqC,EAAarC,EAAM,SAEzB,CAEEC,EAAWD,EAAO,4DAA4D,CAChF,CAEA,SAASgD,GAAmBhD,EAAOgC,EAAY,CAC7C,IAAIiB,EAAW,GACXV,EACAC,EACAU,EACAC,EAAWnD,EAAM,IACjBY,EACAwC,EAAWpD,EAAM,OACjBmC,EACAkB,EACAC,EACAC,EACAC,EACAzC,EAAkB,OAAO,OAAO,IAAI,EACpCI,EACAD,EACAE,EACA5R,EAIJ,GAFAA,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCxQ,IAAO,GACT6T,EAAa,GACbG,EAAY,GACZ5C,EAAU,CAAA,UACDpR,IAAO,IAChB6T,EAAa,IACbG,EAAY,GACZ5C,EAAU,CAAA,MAEV,OAAO,GAST,IANIZ,EAAM,SAAW,OACnBA,EAAM,UAAUA,EAAM,MAAM,EAAIY,GAGlCpR,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAErCxQ,IAAO,GAAG,CAKf,GAJAiS,GAAoBzB,EAAO,GAAMgC,CAAU,EAE3CxS,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCxQ,IAAO6T,EACT,OAAArD,EAAM,WACNA,EAAM,IAAMmD,EACZnD,EAAM,OAASoD,EACfpD,EAAM,KAAOwD,EAAY,UAAY,WACrCxD,EAAM,OAASY,EACR,GACGqC,EAEDzT,IAAO,IAEhByQ,EAAWD,EAAO,0CAA0C,EAH5DC,EAAWD,EAAO,8CAA8C,EAMlEkB,EAASC,EAAUC,EAAY,KAC/BkC,EAASC,EAAiB,GAEtB/T,IAAO,KACT2S,EAAYnC,EAAM,MAAM,WAAWA,EAAM,SAAW,CAAC,EAEjDb,GAAagD,CAAS,IACxBmB,EAASC,EAAiB,GAC1BvD,EAAM,WACNyB,GAAoBzB,EAAO,GAAMgC,CAAU,IAI/CO,EAAQvC,EAAM,KACdwC,EAAaxC,EAAM,UACnBkD,EAAOlD,EAAM,SACbyD,GAAYzD,EAAOgC,EAAY5D,GAAiB,GAAO,EAAI,EAC3D8C,EAASlB,EAAM,IACfmB,EAAUnB,EAAM,OAChByB,GAAoBzB,EAAO,GAAMgC,CAAU,EAE3CxS,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,GAErCuD,GAAkBvD,EAAM,OAASuC,IAAU/S,IAAO,KACrD8T,EAAS,GACT9T,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAC5CyB,GAAoBzB,EAAO,GAAMgC,CAAU,EAC3CyB,GAAYzD,EAAOgC,EAAY5D,GAAiB,GAAO,EAAI,EAC3DgD,EAAYpB,EAAM,QAGhBwD,EACFvC,GAAiBjB,EAAOY,EAASG,EAAiBG,EAAQC,EAASC,EAAWmB,EAAOC,EAAYU,CAAI,EAC5FI,EACT1C,EAAQ,KAAKK,GAAiBjB,EAAO,KAAMe,EAAiBG,EAAQC,EAASC,EAAWmB,EAAOC,EAAYU,CAAI,CAAC,EAEhHtC,EAAQ,KAAKO,CAAO,EAGtBM,GAAoBzB,EAAO,GAAMgC,CAAU,EAE3CxS,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCxQ,IAAO,IACTyT,EAAW,GACXzT,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,GAE5CiD,EAAW,EAEjB,CAEEhD,EAAWD,EAAO,uDAAuD,CAC3E,CAEA,SAAS0D,GAAgB1D,EAAOgC,EAAY,CAC1C,IAAII,EACAuB,EACAC,EAAiBpF,GACjBqF,EAAiB,GACjBC,EAAiB,GACjBC,EAAiB/B,EACjBgC,EAAiB,EACjBC,EAAiB,GACjBlB,EACAvT,EAIJ,GAFAA,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCxQ,IAAO,IACTmU,EAAU,WACDnU,IAAO,GAChBmU,EAAU,OAEV,OAAO,GAMT,IAHA3D,EAAM,KAAO,SACbA,EAAM,OAAS,GAERxQ,IAAO,GAGZ,GAFAA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAExCxQ,IAAO,IAAeA,IAAO,GAC3BgP,KAAkBoF,EACpBA,EAAYpU,IAAO,GAAekP,GAAgBD,GAElDwB,EAAWD,EAAO,sCAAsC,WAGhD+C,EAAMvD,GAAgBhQ,CAAE,IAAM,EACpCuT,IAAQ,EACV9C,EAAWD,EAAO,8EAA8E,EACtF8D,EAIV7D,EAAWD,EAAO,2CAA2C,GAH7D+D,EAAa/B,EAAae,EAAM,EAChCe,EAAiB,QAMnB,OAIJ,GAAI5E,GAAe1P,CAAE,EAAG,CACtB,GAAKA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,QAC1Cd,GAAe1P,CAAE,GAExB,GAAIA,IAAO,GACT,GAAKA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,QAC1C,CAACf,GAAOzP,CAAE,GAAMA,IAAO,EAEpC,CAEE,KAAOA,IAAO,GAAG,CAMf,IALAgS,GAAcxB,CAAK,EACnBA,EAAM,WAAa,EAEnBxQ,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,GAElC,CAAC8D,GAAkB9D,EAAM,WAAa+D,IACtCvU,IAAO,IACbwQ,EAAM,aACNxQ,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAO9C,GAJI,CAAC8D,GAAkB9D,EAAM,WAAa+D,IACxCA,EAAa/D,EAAM,YAGjBf,GAAOzP,CAAE,EAAG,CACdwU,IACA,QACN,CAGI,GAAIhE,EAAM,WAAa+D,EAAY,CAG7BH,IAAalF,GACfsB,EAAM,QAAU1Y,GAAO,OAAO;AAAA,EAAMuc,EAAiB,EAAIG,EAAaA,CAAU,EACvEJ,IAAapF,IAClBqF,IACF7D,EAAM,QAAU;AAAA,GAKpB,KACN,CAsCI,IAnCI2D,EAGEzE,GAAe1P,CAAE,GACnByU,EAAiB,GAEjBjE,EAAM,QAAU1Y,GAAO,OAAO;AAAA,EAAMuc,EAAiB,EAAIG,EAAaA,CAAU,GAGvEC,GACTA,EAAiB,GACjBjE,EAAM,QAAU1Y,GAAO,OAAO;AAAA,EAAM0c,EAAa,CAAC,GAGzCA,IAAe,EACpBH,IACF7D,EAAM,QAAU,KAKlBA,EAAM,QAAU1Y,GAAO,OAAO;AAAA,EAAM0c,CAAU,EAMhDhE,EAAM,QAAU1Y,GAAO,OAAO;AAAA,EAAMuc,EAAiB,EAAIG,EAAaA,CAAU,EAGlFH,EAAiB,GACjBC,EAAiB,GACjBE,EAAa,EACb5B,EAAepC,EAAM,SAEd,CAACf,GAAOzP,CAAE,GAAMA,IAAO,GAC5BA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAG9CO,GAAeP,EAAOoC,EAAcpC,EAAM,SAAU,EAAK,CAC7D,CAEE,MAAO,EACT,CAEA,SAASkE,GAAkBlE,EAAOgC,EAAY,CAC5C,IAAIO,EACAY,EAAYnD,EAAM,IAClBoD,EAAYpD,EAAM,OAClBY,EAAY,CAAA,EACZuB,EACAgC,EAAY,GACZ3U,EAIJ,GAAIwQ,EAAM,iBAAmB,GAAI,MAAO,GAQxC,IANIA,EAAM,SAAW,OACnBA,EAAM,UAAUA,EAAM,MAAM,EAAIY,GAGlCpR,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEnCxQ,IAAO,IACRwQ,EAAM,iBAAmB,KAC3BA,EAAM,SAAWA,EAAM,eACvBC,EAAWD,EAAO,gDAAgD,GAGhE,EAAAxQ,IAAO,KAIX2S,EAAYnC,EAAM,MAAM,WAAWA,EAAM,SAAW,CAAC,EAEjD,CAACb,GAAagD,CAAS,MAZZ,CAmBf,GAHAgC,EAAW,GACXnE,EAAM,WAEFyB,GAAoBzB,EAAO,GAAM,EAAE,GACjCA,EAAM,YAAcgC,EAAY,CAClCpB,EAAQ,KAAK,IAAI,EACjBpR,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAC1C,QACR,CAUI,GAPAuC,EAAQvC,EAAM,KACdyD,GAAYzD,EAAOgC,EAAY1D,GAAkB,GAAO,EAAI,EAC5DsC,EAAQ,KAAKZ,EAAM,MAAM,EACzByB,GAAoBzB,EAAO,GAAM,EAAE,EAEnCxQ,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,GAErCA,EAAM,OAASuC,GAASvC,EAAM,WAAagC,IAAgBxS,IAAO,EACrEyQ,EAAWD,EAAO,qCAAqC,UAC9CA,EAAM,WAAagC,EAC5B,KAEN,CAEE,OAAImC,GACFnE,EAAM,IAAMmD,EACZnD,EAAM,OAASoD,EACfpD,EAAM,KAAO,WACbA,EAAM,OAASY,EACR,IAEF,EACT,CAEA,SAASwD,GAAiBpE,EAAOgC,EAAYqC,EAAY,CACvD,IAAIlC,EACAmC,EACA/B,EACAgC,EACAC,EACAC,EACAtB,EAAgBnD,EAAM,IACtBoD,EAAgBpD,EAAM,OACtBY,EAAgB,CAAA,EAChBG,EAAkB,OAAO,OAAO,IAAI,EACpCG,EAAgB,KAChBC,EAAgB,KAChBC,EAAgB,KAChBsD,EAAgB,GAChBP,EAAgB,GAChB3U,EAIJ,GAAIwQ,EAAM,iBAAmB,GAAI,MAAO,GAQxC,IANIA,EAAM,SAAW,OACnBA,EAAM,UAAUA,EAAM,MAAM,EAAIY,GAGlCpR,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEnCxQ,IAAO,GAAG,CAaf,GAZI,CAACkV,GAAiB1E,EAAM,iBAAmB,KAC7CA,EAAM,SAAWA,EAAM,eACvBC,EAAWD,EAAO,gDAAgD,GAGpEmC,EAAYnC,EAAM,MAAM,WAAWA,EAAM,SAAW,CAAC,EACrDuC,EAAQvC,EAAM,MAMTxQ,IAAO,IAAeA,IAAO,KAAgB2P,GAAagD,CAAS,EAElE3S,IAAO,IACLkV,IACFzD,GAAiBjB,EAAOY,EAASG,EAAiBG,EAAQC,EAAS,KAAMoD,EAAUC,EAAeC,CAAO,EACzGvD,EAASC,EAAUC,EAAY,MAGjC+C,EAAW,GACXO,EAAgB,GAChBJ,EAAe,IAENI,GAETA,EAAgB,GAChBJ,EAAe,IAGfrE,EAAWD,EAAO,mGAAmG,EAGvHA,EAAM,UAAY,EAClBxQ,EAAK2S,MAKA,CAKL,GAJAoC,EAAWvE,EAAM,KACjBwE,EAAgBxE,EAAM,UACtByE,EAAUzE,EAAM,SAEZ,CAACyD,GAAYzD,EAAOqE,EAAYhG,GAAkB,GAAO,EAAI,EAG/D,MAGF,GAAI2B,EAAM,OAASuC,EAAO,CAGxB,IAFA/S,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEnCd,GAAe1P,CAAE,GACtBA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAG9C,GAAIxQ,IAAO,GACTA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAEvCb,GAAa3P,CAAE,GAClByQ,EAAWD,EAAO,yFAAyF,EAGzG0E,IACFzD,GAAiBjB,EAAOY,EAASG,EAAiBG,EAAQC,EAAS,KAAMoD,EAAUC,EAAeC,CAAO,EACzGvD,EAASC,EAAUC,EAAY,MAGjC+C,EAAW,GACXO,EAAgB,GAChBJ,EAAe,GACfpD,EAASlB,EAAM,IACfmB,EAAUnB,EAAM,eAEPmE,EACTlE,EAAWD,EAAO,0DAA0D,MAG5E,QAAAA,EAAM,IAAMmD,EACZnD,EAAM,OAASoD,EACR,EAGjB,SAAiBe,EACTlE,EAAWD,EAAO,gFAAgF,MAGlG,QAAAA,EAAM,IAAMmD,EACZnD,EAAM,OAASoD,EACR,EAEf,CA6BI,IAxBIpD,EAAM,OAASuC,GAASvC,EAAM,WAAagC,KACzC0C,IACFH,EAAWvE,EAAM,KACjBwE,EAAgBxE,EAAM,UACtByE,EAAUzE,EAAM,UAGdyD,GAAYzD,EAAOgC,EAAYzD,GAAmB,GAAM+F,CAAY,IAClEI,EACFvD,EAAUnB,EAAM,OAEhBoB,EAAYpB,EAAM,QAIjB0E,IACHzD,GAAiBjB,EAAOY,EAASG,EAAiBG,EAAQC,EAASC,EAAWmD,EAAUC,EAAeC,CAAO,EAC9GvD,EAASC,EAAUC,EAAY,MAGjCK,GAAoBzB,EAAO,GAAM,EAAE,EACnCxQ,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,IAGvCA,EAAM,OAASuC,GAASvC,EAAM,WAAagC,IAAgBxS,IAAO,EACrEyQ,EAAWD,EAAO,oCAAoC,UAC7CA,EAAM,WAAagC,EAC5B,KAEN,CAOE,OAAI0C,GACFzD,GAAiBjB,EAAOY,EAASG,EAAiBG,EAAQC,EAAS,KAAMoD,EAAUC,EAAeC,CAAO,EAIvGN,IACFnE,EAAM,IAAMmD,EACZnD,EAAM,OAASoD,EACfpD,EAAM,KAAO,UACbA,EAAM,OAASY,GAGVuD,CACT,CAEA,SAASQ,GAAgB3E,EAAO,CAC9B,IAAIS,EACAmE,EAAa,GACbC,EAAa,GACbC,EACA9Q,EACAxE,EAIJ,GAFAA,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCxQ,IAAO,GAAa,MAAO,GAuB/B,GArBIwQ,EAAM,MAAQ,MAChBC,EAAWD,EAAO,+BAA+B,EAGnDxQ,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAExCxQ,IAAO,IACToV,EAAa,GACbpV,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,GAEnCxQ,IAAO,IAChBqV,EAAU,GACVC,EAAY,KACZtV,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,GAG5C8E,EAAY,IAGdrE,EAAYT,EAAM,SAEd4E,EAAY,CACd,GAAKpV,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,QAC1CxQ,IAAO,GAAKA,IAAO,IAEtBwQ,EAAM,SAAWA,EAAM,QACzBhM,EAAUgM,EAAM,MAAM,MAAMS,EAAWT,EAAM,QAAQ,EACrDxQ,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,GAE5CC,EAAWD,EAAO,oDAAoD,CAE5E,KAAS,CACL,KAAOxQ,IAAO,GAAK,CAAC2P,GAAa3P,CAAE,GAE7BA,IAAO,KACJqV,EAUH5E,EAAWD,EAAO,6CAA6C,GAT/D8E,EAAY9E,EAAM,MAAM,MAAMS,EAAY,EAAGT,EAAM,SAAW,CAAC,EAE1DlB,GAAmB,KAAKgG,CAAS,GACpC7E,EAAWD,EAAO,iDAAiD,EAGrE6E,EAAU,GACVpE,EAAYT,EAAM,SAAW,IAMjCxQ,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAG9ChM,EAAUgM,EAAM,MAAM,MAAMS,EAAWT,EAAM,QAAQ,EAEjDnB,GAAwB,KAAK7K,CAAO,GACtCiM,EAAWD,EAAO,qDAAqD,CAE7E,CAEMhM,GAAW,CAAC+K,GAAgB,KAAK/K,CAAO,GAC1CiM,EAAWD,EAAO,4CAA8ChM,CAAO,EAGzE,GAAI,CACFA,EAAU,mBAAmBA,CAAO,CACxC,MAAgB,CACZiM,EAAWD,EAAO,0BAA4BhM,CAAO,CACzD,CAEE,OAAI4Q,EACF5E,EAAM,IAAMhM,EAEHmJ,GAAgB,KAAK6C,EAAM,OAAQ8E,CAAS,EACrD9E,EAAM,IAAMA,EAAM,OAAO8E,CAAS,EAAI9Q,EAE7B8Q,IAAc,IACvB9E,EAAM,IAAM,IAAMhM,EAET8Q,IAAc,KACvB9E,EAAM,IAAM,qBAAuBhM,EAGnCiM,EAAWD,EAAO,0BAA4B8E,EAAY,GAAG,EAGxD,EACT,CAEA,SAASC,GAAmB/E,EAAO,CACjC,IAAIS,EACAjR,EAIJ,GAFAA,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCxQ,IAAO,GAAa,MAAO,GAS/B,IAPIwQ,EAAM,SAAW,MACnBC,EAAWD,EAAO,mCAAmC,EAGvDxQ,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAC5CS,EAAYT,EAAM,SAEXxQ,IAAO,GAAK,CAAC2P,GAAa3P,CAAE,GAAK,CAAC4P,GAAkB5P,CAAE,GAC3DA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAG9C,OAAIA,EAAM,WAAaS,GACrBR,EAAWD,EAAO,4DAA4D,EAGhFA,EAAM,OAASA,EAAM,MAAM,MAAMS,EAAWT,EAAM,QAAQ,EACnD,EACT,CAEA,SAASgF,GAAUhF,EAAO,CACxB,IAAIS,EAAWvH,EACX1J,EAIJ,GAFAA,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtCxQ,IAAO,GAAa,MAAO,GAK/B,IAHAA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAC5CS,EAAYT,EAAM,SAEXxQ,IAAO,GAAK,CAAC2P,GAAa3P,CAAE,GAAK,CAAC4P,GAAkB5P,CAAE,GAC3DA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAG9C,OAAIA,EAAM,WAAaS,GACrBR,EAAWD,EAAO,2DAA2D,EAG/E9G,EAAQ8G,EAAM,MAAM,MAAMS,EAAWT,EAAM,QAAQ,EAE9C7C,GAAgB,KAAK6C,EAAM,UAAW9G,CAAK,GAC9C+G,EAAWD,EAAO,uBAAyB9G,EAAQ,GAAG,EAGxD8G,EAAM,OAASA,EAAM,UAAU9G,CAAK,EACpCuI,GAAoBzB,EAAO,GAAM,EAAE,EAC5B,EACT,CAEA,SAASyD,GAAYzD,EAAOiF,EAAcC,EAAaC,EAAab,EAAc,CAChF,IAAIc,EACAC,EACAC,EACAC,EAAe,EACfC,EAAa,GACbC,EAAa,GACbC,EACAC,EACAC,EACAhlB,EACAyjB,EACAwB,EA6BJ,GA3BI7F,EAAM,WAAa,MACrBA,EAAM,SAAS,OAAQA,CAAK,EAG9BA,EAAM,IAAS,KACfA,EAAM,OAAS,KACfA,EAAM,KAAS,KACfA,EAAM,OAAS,KAEfoF,EAAmBC,EAAoBC,EACrC/G,KAAsB2G,GACtB5G,KAAsB4G,EAEpBC,GACE1D,GAAoBzB,EAAO,GAAM,EAAE,IACrCwF,EAAY,GAERxF,EAAM,WAAaiF,EACrBM,EAAe,EACNvF,EAAM,aAAeiF,EAC9BM,EAAe,EACNvF,EAAM,WAAaiF,IAC5BM,EAAe,KAKjBA,IAAiB,EACnB,KAAOZ,GAAgB3E,CAAK,GAAK+E,GAAmB/E,CAAK,GACnDyB,GAAoBzB,EAAO,GAAM,EAAE,GACrCwF,EAAY,GACZF,EAAwBF,EAEpBpF,EAAM,WAAaiF,EACrBM,EAAe,EACNvF,EAAM,aAAeiF,EAC9BM,EAAe,EACNvF,EAAM,WAAaiF,IAC5BM,EAAe,KAGjBD,EAAwB,GAwD9B,GAnDIA,IACFA,EAAwBE,GAAalB,IAGnCiB,IAAiB,GAAKhH,KAAsB2G,KAC1C9G,KAAoB8G,GAAe7G,KAAqB6G,EAC1Db,EAAaY,EAEbZ,EAAaY,EAAe,EAG9BY,EAAc7F,EAAM,SAAWA,EAAM,UAEjCuF,IAAiB,EACfD,IACCpB,GAAkBlE,EAAO6F,CAAW,GACpCzB,GAAiBpE,EAAO6F,EAAaxB,CAAU,IAChDrB,GAAmBhD,EAAOqE,CAAU,EACtCoB,EAAa,IAERJ,GAAqB3B,GAAgB1D,EAAOqE,CAAU,GACvD1B,GAAuB3C,EAAOqE,CAAU,GACxCzB,GAAuB5C,EAAOqE,CAAU,EAC1CoB,EAAa,GAEJT,GAAUhF,CAAK,GACxByF,EAAa,IAETzF,EAAM,MAAQ,MAAQA,EAAM,SAAW,OACzCC,EAAWD,EAAO,2CAA2C,GAGtD+B,GAAgB/B,EAAOqE,EAAYjG,KAAoB8G,CAAW,IAC3EO,EAAa,GAETzF,EAAM,MAAQ,OAChBA,EAAM,IAAM,MAIZA,EAAM,SAAW,OACnBA,EAAM,UAAUA,EAAM,MAAM,EAAIA,EAAM,SAGjCuF,IAAiB,IAG1BE,EAAaH,GAAyBpB,GAAkBlE,EAAO6F,CAAW,IAI1E7F,EAAM,MAAQ,KACZA,EAAM,SAAW,OACnBA,EAAM,UAAUA,EAAM,MAAM,EAAIA,EAAM,gBAG/BA,EAAM,MAAQ,KAWvB,IAJIA,EAAM,SAAW,MAAQA,EAAM,OAAS,UAC1CC,EAAWD,EAAO,oEAAsEA,EAAM,KAAO,GAAG,EAGrG0F,EAAY,EAAGC,EAAe3F,EAAM,cAAc,OAAQ0F,EAAYC,EAAcD,GAAa,EAGpG,GAFA9kB,EAAOof,EAAM,cAAc0F,CAAS,EAEhC9kB,EAAK,QAAQof,EAAM,MAAM,EAAG,CAC9BA,EAAM,OAASpf,EAAK,UAAUof,EAAM,MAAM,EAC1CA,EAAM,IAAMpf,EAAK,IACbof,EAAM,SAAW,OACnBA,EAAM,UAAUA,EAAM,MAAM,EAAIA,EAAM,QAExC,KACR,UAEaA,EAAM,MAAQ,IAAK,CAC5B,GAAI7C,GAAgB,KAAK6C,EAAM,QAAQA,EAAM,MAAQ,UAAU,EAAGA,EAAM,GAAG,EACzEpf,EAAOof,EAAM,QAAQA,EAAM,MAAQ,UAAU,EAAEA,EAAM,GAAG,MAMxD,KAHApf,EAAO,KACPglB,EAAW5F,EAAM,QAAQ,MAAMA,EAAM,MAAQ,UAAU,EAElD0F,EAAY,EAAGC,EAAeC,EAAS,OAAQF,EAAYC,EAAcD,GAAa,EACzF,GAAI1F,EAAM,IAAI,MAAM,EAAG4F,EAASF,CAAS,EAAE,IAAI,MAAM,IAAME,EAASF,CAAS,EAAE,IAAK,CAClF9kB,EAAOglB,EAASF,CAAS,EACzB,KACV,CAIS9kB,GACHqf,EAAWD,EAAO,iBAAmBA,EAAM,IAAM,GAAG,EAGlDA,EAAM,SAAW,MAAQpf,EAAK,OAASof,EAAM,MAC/CC,EAAWD,EAAO,gCAAkCA,EAAM,IAAM,wBAA0Bpf,EAAK,KAAO,WAAaof,EAAM,KAAO,GAAG,EAGhIpf,EAAK,QAAQof,EAAM,OAAQA,EAAM,GAAG,GAGvCA,EAAM,OAASpf,EAAK,UAAUof,EAAM,OAAQA,EAAM,GAAG,EACjDA,EAAM,SAAW,OACnBA,EAAM,UAAUA,EAAM,MAAM,EAAIA,EAAM,SAJxCC,EAAWD,EAAO,gCAAkCA,EAAM,IAAM,gBAAgB,CAOtF,CAEE,OAAIA,EAAM,WAAa,MACrBA,EAAM,SAAS,QAASA,CAAK,EAExBA,EAAM,MAAQ,MAASA,EAAM,SAAW,MAAQyF,CACzD,CAEA,SAASK,GAAa9F,EAAO,CAC3B,IAAI+F,EAAgB/F,EAAM,SACtBS,EACAuF,EACAC,EACAC,EAAgB,GAChB1W,EAOJ,IALAwQ,EAAM,QAAU,KAChBA,EAAM,gBAAkBA,EAAM,OAC9BA,EAAM,OAAS,OAAO,OAAO,IAAI,EACjCA,EAAM,UAAY,OAAO,OAAO,IAAI,GAE5BxQ,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,KAAO,IACvDyB,GAAoBzB,EAAO,GAAM,EAAE,EAEnCxQ,EAAKwQ,EAAM,MAAM,WAAWA,EAAM,QAAQ,EAEtC,EAAAA,EAAM,WAAa,GAAKxQ,IAAO,MALuB,CAa1D,IAJA0W,EAAgB,GAChB1W,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAC5CS,EAAYT,EAAM,SAEXxQ,IAAO,GAAK,CAAC2P,GAAa3P,CAAE,GACjCA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAU9C,IAPAgG,EAAgBhG,EAAM,MAAM,MAAMS,EAAWT,EAAM,QAAQ,EAC3DiG,EAAgB,CAAA,EAEZD,EAAc,OAAS,GACzB/F,EAAWD,EAAO,8DAA8D,EAG3ExQ,IAAO,GAAG,CACf,KAAO0P,GAAe1P,CAAE,GACtBA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAG9C,GAAIxQ,IAAO,GAAa,CACtB,GAAKA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,QAC1CxQ,IAAO,GAAK,CAACyP,GAAOzP,CAAE,GAC7B,KACR,CAEM,GAAIyP,GAAOzP,CAAE,EAAG,MAIhB,IAFAiR,EAAYT,EAAM,SAEXxQ,IAAO,GAAK,CAAC2P,GAAa3P,CAAE,GACjCA,EAAKwQ,EAAM,MAAM,WAAW,EAAEA,EAAM,QAAQ,EAG9CiG,EAAc,KAAKjG,EAAM,MAAM,MAAMS,EAAWT,EAAM,QAAQ,CAAC,CACrE,CAEQxQ,IAAO,GAAGgS,GAAcxB,CAAK,EAE7B7C,GAAgB,KAAKgD,GAAmB6F,CAAa,EACvD7F,GAAkB6F,CAAa,EAAEhG,EAAOgG,EAAeC,CAAa,EAEpE/F,GAAaF,EAAO,+BAAiCgG,EAAgB,GAAG,CAE9E,CAyBE,GAvBAvE,GAAoBzB,EAAO,GAAM,EAAE,EAE/BA,EAAM,aAAe,GACrBA,EAAM,MAAM,WAAWA,EAAM,QAAQ,IAAU,IAC/CA,EAAM,MAAM,WAAWA,EAAM,SAAW,CAAC,IAAM,IAC/CA,EAAM,MAAM,WAAWA,EAAM,SAAW,CAAC,IAAM,IACjDA,EAAM,UAAY,EAClByB,GAAoBzB,EAAO,GAAM,EAAE,GAE1BkG,GACTjG,EAAWD,EAAO,iCAAiC,EAGrDyD,GAAYzD,EAAOA,EAAM,WAAa,EAAGzB,GAAmB,GAAO,EAAI,EACvEkD,GAAoBzB,EAAO,GAAM,EAAE,EAE/BA,EAAM,iBACNpB,GAA8B,KAAKoB,EAAM,MAAM,MAAM+F,EAAe/F,EAAM,QAAQ,CAAC,GACrFE,GAAaF,EAAO,kDAAkD,EAGxEA,EAAM,UAAU,KAAKA,EAAM,MAAM,EAE7BA,EAAM,WAAaA,EAAM,WAAa6B,GAAsB7B,CAAK,EAAG,CAElEA,EAAM,MAAM,WAAWA,EAAM,QAAQ,IAAM,KAC7CA,EAAM,UAAY,EAClByB,GAAoBzB,EAAO,GAAM,EAAE,GAErC,MACJ,CAEE,GAAIA,EAAM,SAAYA,EAAM,OAAS,EACnCC,EAAWD,EAAO,uDAAuD,MAEzE,OAEJ,CAGA,SAASmG,GAAc/V,EAAOhc,EAAS,CACrCgc,EAAQ,OAAOA,CAAK,EACpBhc,EAAUA,GAAW,CAAA,EAEjBgc,EAAM,SAAW,IAGfA,EAAM,WAAWA,EAAM,OAAS,CAAC,IAAM,IACvCA,EAAM,WAAWA,EAAM,OAAS,CAAC,IAAM,KACzCA,GAAS;AAAA,GAIPA,EAAM,WAAW,CAAC,IAAM,QAC1BA,EAAQA,EAAM,MAAM,CAAC,IAIzB,IAAI4P,EAAQ,IAAIF,GAAM1P,EAAOhc,CAAO,EAEhCgyB,EAAUhW,EAAM,QAAQ,IAAI,EAUhC,IARIgW,IAAY,KACdpG,EAAM,SAAWoG,EACjBnG,EAAWD,EAAO,mCAAmC,GAIvDA,EAAM,OAAS,KAERA,EAAM,MAAM,WAAWA,EAAM,QAAQ,IAAM,IAChDA,EAAM,YAAc,EACpBA,EAAM,UAAY,EAGpB,KAAOA,EAAM,SAAYA,EAAM,OAAS,GACtC8F,GAAa9F,CAAK,EAGpB,OAAOA,EAAM,SACf,CAGA,SAASqG,GAAQjW,EAAOkW,EAAUlyB,EAAS,CACrCkyB,IAAa,MAAQ,OAAOA,GAAa,UAAY,OAAOlyB,EAAY,MAC1EA,EAAUkyB,EACVA,EAAW,MAGb,IAAIC,EAAYJ,GAAc/V,EAAOhc,CAAO,EAE5C,GAAI,OAAOkyB,GAAa,WACtB,OAAOC,EAGT,QAASzxB,EAAQ,EAAG1B,EAASmzB,EAAU,OAAQzxB,EAAQ1B,EAAQ0B,GAAS,EACtEwxB,EAASC,EAAUzxB,CAAK,CAAC,CAE7B,CAGA,SAAS2S,GAAK2I,EAAOhc,EAAS,CAC5B,IAAImyB,EAAYJ,GAAc/V,EAAOhc,CAAO,EAE5C,GAAImyB,EAAU,SAAW,EAGlB,IAAIA,EAAU,SAAW,EAC9B,OAAOA,EAAU,CAAC,EAEpB,MAAM,IAAI7O,GAAc,0DAA0D,EACpF,CAGA8O,GAAA,QAAyBH,GACzBG,GAAA,KAAyB/e,aChsDrBH,GAAsBjW,GACtBqmB,GAAsBtiB,GACtB+oB,GAAsB9oB,GAEtB+nB,GAAkB,OAAO,UAAU,SACnCD,GAAkB,OAAO,UAAU,eAEnCsJ,GAA4B,MAC5BC,GAA4B,EAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,GAC5BC,GAA4B,IAC5BC,GAA4B,IAC5BC,GAA4B,IAE5BC,GAAmB,CAAA,EAEvBA,GAAiB,CAAI,EAAM,MAC3BA,GAAiB,CAAI,EAAM,MAC3BA,GAAiB,CAAI,EAAM,MAC3BA,GAAiB,CAAI,EAAM,MAC3BA,GAAiB,EAAI,EAAM,MAC3BA,GAAiB,EAAI,EAAM,MAC3BA,GAAiB,EAAI,EAAM,MAC3BA,GAAiB,EAAI,EAAM,MAC3BA,GAAiB,EAAI,EAAM,MAC3BA,GAAiB,EAAI,EAAM,MAC3BA,GAAiB,EAAI,EAAM,OAC3BA,GAAiB,GAAI,EAAM,MAC3BA,GAAiB,GAAI,EAAM,MAC3BA,GAAiB,IAAM,EAAI,MAC3BA,GAAiB,IAAM,EAAI,MAE3B,IAAIC,GAA6B,CAC/B,IAAK,IAAK,MAAO,MAAO,MAAO,KAAM,KAAM,KAC3C,IAAK,IAAK,KAAM,KAAM,KAAM,MAAO,MAAO,KAC5C,EAEIC,GAA2B,4CAE/B,SAASC,GAAgBhP,EAAQL,EAAK,CACpC,IAAItyB,EAAQmO,EAAMC,EAAO1B,EAAQzD,EAAKspB,EAAOrY,EAE7C,GAAIoY,IAAQ,KAAM,MAAO,CAAA,EAKzB,IAHAtyB,EAAS,CAAA,EACTmO,EAAO,OAAO,KAAKmkB,CAAG,EAEjBlkB,EAAQ,EAAG1B,EAASyB,EAAK,OAAQC,EAAQ1B,EAAQ0B,GAAS,EAC7DnF,EAAMkF,EAAKC,CAAK,EAChBmkB,EAAQ,OAAOD,EAAIrpB,CAAG,CAAC,EAEnBA,EAAI,MAAM,EAAG,CAAC,IAAM,OACtBA,EAAM,qBAAuBA,EAAI,MAAM,CAAC,GAE1CiR,EAAOyY,EAAO,gBAAgB,SAAY1pB,CAAG,EAEzCiR,GAAQuc,GAAgB,KAAKvc,EAAK,aAAcqY,CAAK,IACvDA,EAAQrY,EAAK,aAAaqY,CAAK,GAGjCvyB,EAAOiJ,CAAG,EAAIspB,EAGhB,OAAOvyB,CACT,CAEA,SAAS4hC,GAAUC,EAAW,CAC5B,IAAItR,EAAQqJ,EAAQltB,EAIpB,GAFA6jB,EAASsR,EAAU,SAAS,EAAE,EAAE,YAAW,EAEvCA,GAAa,IACfjI,EAAS,IACTltB,EAAS,UACAm1B,GAAa,MACtBjI,EAAS,IACTltB,EAAS,UACAm1B,GAAa,WACtBjI,EAAS,IACTltB,EAAS,MAET,OAAM,IAAIskB,GAAc,+DAA+D,EAGzF,MAAO,KAAO4I,EAAShZ,GAAO,OAAO,IAAKlU,EAAS6jB,EAAO,MAAM,EAAIA,CACtE,CAGA,IAAIuR,GAAsB,EACtBC,GAAsB,EAE1B,SAAS3I,GAAM1rB,EAAS,CACtB,KAAK,OAAgBA,EAAQ,QAAa+pB,GAC1C,KAAK,OAAgB,KAAK,IAAI,EAAI/pB,EAAQ,QAAa,CAAC,EACxD,KAAK,cAAgBA,EAAQ,eAAoB,GACjD,KAAK,YAAgBA,EAAQ,aAAkB,GAC/C,KAAK,UAAiBkT,GAAO,UAAUlT,EAAQ,SAAY,EAAI,GAAKA,EAAQ,UAC5E,KAAK,SAAgBi0B,GAAgB,KAAK,OAAQj0B,EAAQ,QAAa,IAAI,EAC3E,KAAK,SAAgBA,EAAQ,UAAe,GAC5C,KAAK,UAAgBA,EAAQ,WAAgB,GAC7C,KAAK,OAAgBA,EAAQ,QAAa,GAC1C,KAAK,aAAgBA,EAAQ,cAAmB,GAChD,KAAK,aAAgBA,EAAQ,cAAmB,GAChD,KAAK,YAAgBA,EAAQ,cAAmB,IAAMq0B,GAAsBD,GAC5E,KAAK,YAAgBp0B,EAAQ,aAAkB,GAC/C,KAAK,SAAgB,OAAOA,EAAQ,UAAgB,WAAaA,EAAQ,SAAc,KAEvF,KAAK,cAAgB,KAAK,OAAO,iBACjC,KAAK,cAAgB,KAAK,OAAO,iBAEjC,KAAK,IAAM,KACX,KAAK,OAAS,GAEd,KAAK,WAAa,CAAA,EAClB,KAAK,eAAiB,IACxB,CAGA,SAASs0B,GAAazR,EAAQnV,EAAQ,CAQpC,QAPI6mB,EAAMrhB,GAAO,OAAO,IAAKxF,CAAM,EAC/BzO,EAAW,EACXu1B,EAAO,GACPliC,EAAS,GACT3F,EACAqS,EAAS6jB,EAAO,OAEb5jB,EAAWD,GAChBw1B,EAAO3R,EAAO,QAAQ;AAAA,EAAM5jB,CAAQ,EAChCu1B,IAAS,IACX7nC,EAAOk2B,EAAO,MAAM5jB,CAAQ,EAC5BA,EAAWD,IAEXrS,EAAOk2B,EAAO,MAAM5jB,EAAUu1B,EAAO,CAAC,EACtCv1B,EAAWu1B,EAAO,GAGhB7nC,EAAK,QAAUA,IAAS;AAAA,IAAM2F,GAAUiiC,GAE5CjiC,GAAU3F,EAGZ,OAAO2F,CACT,CAEA,SAASmiC,GAAiB7I,EAAOtwB,EAAO,CACtC,MAAO;AAAA,EAAO4X,GAAO,OAAO,IAAK0Y,EAAM,OAAStwB,CAAK,CACvD,CAEA,SAASo5B,GAAsB9I,EAAOj9B,EAAK,CACzC,IAAI+R,EAAO1B,EAAQwN,EAEnB,IAAK9L,EAAQ,EAAG1B,EAAS4sB,EAAM,cAAc,OAAQlrB,EAAQ1B,EAAQ0B,GAAS,EAG5E,GAFA8L,EAAOof,EAAM,cAAclrB,CAAK,EAE5B8L,EAAK,QAAQ7d,CAAG,EAClB,MAAO,GAIX,MAAO,EACT,CAGA,SAAS2vB,GAAaz1B,EAAG,CACvB,OAAOA,IAAM4pC,IAAc5pC,IAAMypC,EACnC,CAMA,SAASqC,GAAY9rC,EAAG,CACtB,MAAS,KAAWA,GAAKA,GAAK,KACrB,KAAWA,GAAKA,GAAK,OAAaA,IAAM,MAAUA,IAAM,MACxD,OAAWA,GAAKA,GAAK,OAAaA,IAAMwpC,IACxC,OAAWxpC,GAAKA,GAAK,OAChC,CAOA,SAAS+rC,GAAqB/rC,EAAG,CAC/B,OAAO8rC,GAAY9rC,CAAC,GACfA,IAAMwpC,IAENxpC,IAAM2pC,IACN3pC,IAAM0pC,EACb,CAWA,SAASsC,GAAYhsC,EAAGisC,EAAMC,EAAS,CACrC,IAAIC,EAAwBJ,GAAqB/rC,CAAC,EAC9CosC,EAAYD,GAAyB,CAAC1W,GAAaz1B,CAAC,EACxD,OAEEksC,EACEC,EACEA,GAEGnsC,IAAMoqC,IACNpqC,IAAM2qC,IACN3qC,IAAM4qC,IACN5qC,IAAM8qC,IACN9qC,IAAMgrC,KAGVhrC,IAAM+pC,IACN,EAAEkC,IAAS3B,IAAc,CAAC8B,IACzBL,GAAqBE,CAAI,GAAK,CAACxW,GAAawW,CAAI,GAAKjsC,IAAM+pC,IAC3DkC,IAAS3B,IAAc8B,CAC/B,CAGA,SAASC,GAAiBrsC,EAAG,CAI3B,OAAO8rC,GAAY9rC,CAAC,GAAKA,IAAMwpC,IAC1B,CAAC/T,GAAaz1B,CAAC,GAGfA,IAAMqqC,IACNrqC,IAAMyqC,IACNzqC,IAAMsqC,IACNtqC,IAAMoqC,IACNpqC,IAAM2qC,IACN3qC,IAAM4qC,IACN5qC,IAAM8qC,IACN9qC,IAAMgrC,IAENhrC,IAAM+pC,IACN/pC,IAAMiqC,IACNjqC,IAAMmqC,IACNnqC,IAAM6pC,IACN7pC,IAAM+qC,IACN/qC,IAAMuqC,IACNvqC,IAAMwqC,IACNxqC,IAAMkqC,IACNlqC,IAAM8pC,IAEN9pC,IAAMgqC,IACNhqC,IAAM0qC,IACN1qC,IAAM6qC,EACb,CAGA,SAASyB,GAAgBtsC,EAAG,CAE1B,MAAO,CAACy1B,GAAaz1B,CAAC,GAAKA,IAAMsqC,EACnC,CAGA,SAASiC,GAAYvS,EAAQwS,EAAK,CAChC,IAAIC,EAAQzS,EAAO,WAAWwS,CAAG,EAAGzN,EACpC,OAAI0N,GAAS,OAAUA,GAAS,OAAUD,EAAM,EAAIxS,EAAO,SACzD+E,EAAS/E,EAAO,WAAWwS,EAAM,CAAC,EAC9BzN,GAAU,OAAUA,GAAU,QAExB0N,EAAQ,OAAU,KAAQ1N,EAAS,MAAS,MAGjD0N,CACT,CAGA,SAASC,GAAoB1S,EAAQ,CACnC,IAAI2S,EAAiB,QACrB,OAAOA,EAAe,KAAK3S,CAAM,CACnC,CAEA,IAAI4S,GAAgB,EAChBC,GAAgB,EAChBC,GAAgB,EAChBC,GAAgB,EAChBC,GAAgB,EASpB,SAASC,GAAkBjT,EAAQkT,EAAgBC,EAAgBC,EACjEC,EAAmBC,EAAaC,EAAarB,EAAS,CAEtD,IAAInmC,EACAynC,EAAO,EACPC,EAAW,KACXC,EAAe,GACfC,EAAkB,GAClBC,EAAmBR,IAAc,GACjCS,EAAoB,GACpBC,EAAQzB,GAAiBE,GAAYvS,EAAQ,CAAC,CAAC,GACxCsS,GAAgBC,GAAYvS,EAAQA,EAAO,OAAS,CAAC,CAAC,EAEjE,GAAIkT,GAAkBK,EAGpB,IAAKxnC,EAAI,EAAGA,EAAIi0B,EAAO,OAAQwT,GAAQ,MAAUznC,GAAK,EAAIA,IAAK,CAE7D,GADAynC,EAAOjB,GAAYvS,EAAQj0B,CAAC,EACxB,CAAC+lC,GAAY0B,CAAI,EACnB,OAAOR,GAETc,EAAQA,GAAS9B,GAAYwB,EAAMC,EAAUvB,CAAO,EACpDuB,EAAWD,CACjB,KACS,CAEL,IAAKznC,EAAI,EAAGA,EAAIi0B,EAAO,OAAQwT,GAAQ,MAAUznC,GAAK,EAAIA,IAAK,CAE7D,GADAynC,EAAOjB,GAAYvS,EAAQj0B,CAAC,EACxBynC,IAAS9D,GACXgE,EAAe,GAEXE,IACFD,EAAkBA,GAEf5nC,EAAI8nC,EAAoB,EAAIT,GAC5BpT,EAAO6T,EAAoB,CAAC,IAAM,IACrCA,EAAoB9nC,WAEb,CAAC+lC,GAAY0B,CAAI,EAC1B,OAAOR,GAETc,EAAQA,GAAS9B,GAAYwB,EAAMC,EAAUvB,CAAO,EACpDuB,EAAWD,CACjB,CAEIG,EAAkBA,GAAoBC,GACnC7nC,EAAI8nC,EAAoB,EAAIT,GAC5BpT,EAAO6T,EAAoB,CAAC,IAAM,GACzC,CAIE,MAAI,CAACH,GAAgB,CAACC,EAGhBG,GAAS,CAACP,GAAe,CAACF,EAAkBrT,CAAM,EAC7C4S,GAEFU,IAAgB9B,GAAsBwB,GAAeH,GAG1DM,EAAiB,GAAKT,GAAoB1S,CAAM,EAC3CgT,GAIJO,EAGED,IAAgB9B,GAAsBwB,GAAeH,GAFnDc,EAAkBZ,GAAeD,EAG5C,CAQA,SAASiB,GAAYhL,EAAO/I,EAAQvnB,EAAOu7B,EAAO9B,EAAS,CACzDnJ,EAAM,KAAQ,UAAY,CACxB,GAAI/I,EAAO,SAAW,EACpB,OAAO+I,EAAM,cAAgByI,GAAsB,KAAO,KAE5D,GAAI,CAACzI,EAAM,eACLmI,GAA2B,QAAQlR,CAAM,IAAM,IAAMmR,GAAyB,KAAKnR,CAAM,GAC3F,OAAO+I,EAAM,cAAgByI,GAAuB,IAAMxR,EAAS,IAAQ,IAAMA,EAAS,IAI9F,IAAIiU,EAASlL,EAAM,OAAS,KAAK,IAAI,EAAGtwB,CAAK,EAQzC26B,EAAYrK,EAAM,YAAc,GAChC,GAAK,KAAK,IAAI,KAAK,IAAIA,EAAM,UAAW,EAAE,EAAGA,EAAM,UAAYkL,CAAM,EAGrEf,EAAiBc,GAEfjL,EAAM,UAAY,IAAMtwB,GAASswB,EAAM,UAC7C,SAASmL,EAAclU,EAAQ,CAC7B,OAAO6R,GAAsB9I,EAAO/I,CAAM,CAChD,CAEI,OAAQiT,GAAkBjT,EAAQkT,EAAgBnK,EAAM,OAAQqK,EAC9Dc,EAAenL,EAAM,YAAaA,EAAM,aAAe,CAACiL,EAAO9B,CAAO,EAAC,CAEvE,KAAKU,GACH,OAAO5S,EACT,KAAK6S,GACH,MAAO,IAAM7S,EAAO,QAAQ,KAAM,IAAI,EAAI,IAC5C,KAAK8S,GACH,MAAO,IAAMqB,GAAYnU,EAAQ+I,EAAM,MAAM,EACzCqL,GAAkB3C,GAAazR,EAAQiU,CAAM,CAAC,EACpD,KAAKlB,GACH,MAAO,IAAMoB,GAAYnU,EAAQ+I,EAAM,MAAM,EACzCqL,GAAkB3C,GAAa4C,GAAWrU,EAAQoT,CAAS,EAAGa,CAAM,CAAC,EAC3E,KAAKjB,GACH,MAAO,IAAMsB,GAAatU,CAAiB,EAAI,IACjD,QACE,MAAM,IAAIS,GAAc,wCAAwC,CACxE,CACA,GACA,CAGA,SAAS0T,GAAYnU,EAAQmT,EAAgB,CAC3C,IAAIoB,EAAkB7B,GAAoB1S,CAAM,EAAI,OAAOmT,CAAc,EAAI,GAGzEqB,EAAgBxU,EAAOA,EAAO,OAAS,CAAC,IAAM;AAAA,EAC9CyU,EAAOD,IAASxU,EAAOA,EAAO,OAAS,CAAC,IAAM;AAAA,GAAQA,IAAW;AAAA,GACjE0U,EAAQD,EAAO,IAAOD,EAAO,GAAK,IAEtC,OAAOD,EAAkBG,EAAQ;AAAA,CACnC,CAGA,SAASN,GAAkBpU,EAAQ,CACjC,OAAOA,EAAOA,EAAO,OAAS,CAAC,IAAM;AAAA,EAAOA,EAAO,MAAM,EAAG,EAAE,EAAIA,CACpE,CAIA,SAASqU,GAAWrU,EAAQ2U,EAAO,CAoBjC,QAfIC,EAAS,iBAGTnlC,EAAU,UAAY,CACxB,IAAIolC,EAAS7U,EAAO,QAAQ;AAAA,CAAI,EAChC,OAAA6U,EAASA,IAAW,GAAKA,EAAS7U,EAAO,OACzC4U,EAAO,UAAYC,EACZC,GAAS9U,EAAO,MAAM,EAAG6U,CAAM,EAAGF,CAAK,CAClD,IAEMI,EAAmB/U,EAAO,CAAC,IAAM;AAAA,GAAQA,EAAO,CAAC,IAAM,IACvDgV,EAGAliC,EACIA,EAAQ8hC,EAAO,KAAK5U,CAAM,GAAI,CACpC,IAAI9O,EAASpe,EAAM,CAAC,EAAGhJ,EAAOgJ,EAAM,CAAC,EACrCkiC,EAAgBlrC,EAAK,CAAC,IAAM,IAC5B2F,GAAUyhB,GACL,CAAC6jB,GAAoB,CAACC,GAAgBlrC,IAAS,GAC9C;AAAA,EAAO,IACTgrC,GAAShrC,EAAM6qC,CAAK,EACxBI,EAAmBC,CACvB,CAEE,OAAOvlC,CACT,CAMA,SAASqlC,GAAShrC,EAAM6qC,EAAO,CAC7B,GAAI7qC,IAAS,IAAMA,EAAK,CAAC,IAAM,IAAK,OAAOA,EAa3C,QAVImrC,EAAU,SACVniC,EAEA4I,EAAQ,EAAGif,EAAKxL,EAAO,EAAGwiB,EAAO,EACjCliC,EAAS,GAMLqD,EAAQmiC,EAAQ,KAAKnrC,CAAI,GAC/B6nC,EAAO7+B,EAAM,MAET6+B,EAAOj2B,EAAQi5B,IACjBha,EAAOxL,EAAOzT,EAASyT,EAAOwiB,EAC9BliC,GAAU;AAAA,EAAO3F,EAAK,MAAM4R,EAAOif,CAAG,EAEtCjf,EAAQif,EAAM,GAEhBxL,EAAOwiB,EAKT,OAAAliC,GAAU;AAAA,EAEN3F,EAAK,OAAS4R,EAAQi5B,GAASxlB,EAAOzT,EACxCjM,GAAU3F,EAAK,MAAM4R,EAAOyT,CAAI,EAAI;AAAA,EAAOrlB,EAAK,MAAMqlB,EAAO,CAAC,EAE9D1f,GAAU3F,EAAK,MAAM4R,CAAK,EAGrBjM,EAAO,MAAM,CAAC,CACvB,CAGA,SAAS6kC,GAAatU,EAAQ,CAK5B,QAJIvwB,EAAS,GACT+jC,EAAO,EACP0B,EAEK,EAAI,EAAG,EAAIlV,EAAO,OAAQwT,GAAQ,MAAU,GAAK,EAAI,IAC5DA,EAAOjB,GAAYvS,EAAQ,CAAC,EAC5BkV,EAAYjE,GAAiBuC,CAAI,EAE7B,CAAC0B,GAAapD,GAAY0B,CAAI,GAChC/jC,GAAUuwB,EAAO,CAAC,EACdwT,GAAQ,QAAS/jC,GAAUuwB,EAAO,EAAI,CAAC,IAE3CvwB,GAAUylC,GAAa7D,GAAUmC,CAAI,EAIzC,OAAO/jC,CACT,CAEA,SAAS0lC,GAAkBpM,EAAOtwB,EAAO0qB,EAAQ,CAC/C,IAAIwG,EAAU,GACVuC,EAAUnD,EAAM,IAChBlrB,EACA1B,EACAvS,EAEJ,IAAKiU,EAAQ,EAAG1B,EAASgnB,EAAO,OAAQtlB,EAAQ1B,EAAQ0B,GAAS,EAC/DjU,EAAQu5B,EAAOtlB,CAAK,EAEhBkrB,EAAM,WACRn/B,EAAQm/B,EAAM,SAAS,KAAK5F,EAAQ,OAAOtlB,CAAK,EAAGjU,CAAK,IAItDwrC,GAAUrM,EAAOtwB,EAAO7O,EAAO,GAAO,EAAK,GAC1C,OAAOA,EAAU,KACjBwrC,GAAUrM,EAAOtwB,EAAO,KAAM,GAAO,EAAK,KAEzCkxB,IAAY,KAAIA,GAAW,KAAQZ,EAAM,aAAqB,GAAN,MAC5DY,GAAWZ,EAAM,MAIrBA,EAAM,IAAMmD,EACZnD,EAAM,KAAO,IAAMY,EAAU,GAC/B,CAEA,SAAS0L,GAAmBtM,EAAOtwB,EAAO0qB,EAAQ5C,EAAS,CACzD,IAAIoJ,EAAU,GACVuC,EAAUnD,EAAM,IAChBlrB,EACA1B,EACAvS,EAEJ,IAAKiU,EAAQ,EAAG1B,EAASgnB,EAAO,OAAQtlB,EAAQ1B,EAAQ0B,GAAS,EAC/DjU,EAAQu5B,EAAOtlB,CAAK,EAEhBkrB,EAAM,WACRn/B,EAAQm/B,EAAM,SAAS,KAAK5F,EAAQ,OAAOtlB,CAAK,EAAGjU,CAAK,IAItDwrC,GAAUrM,EAAOtwB,EAAQ,EAAG7O,EAAO,GAAM,GAAM,GAAO,EAAI,GACzD,OAAOA,EAAU,KACjBwrC,GAAUrM,EAAOtwB,EAAQ,EAAG,KAAM,GAAM,GAAM,GAAO,EAAI,MAExD,CAAC8nB,GAAWoJ,IAAY,MAC1BA,GAAWiI,GAAiB7I,EAAOtwB,CAAK,GAGtCswB,EAAM,MAAQ2G,KAAmB3G,EAAM,KAAK,WAAW,CAAC,EAC1DY,GAAW,IAEXA,GAAW,KAGbA,GAAWZ,EAAM,MAIrBA,EAAM,IAAMmD,EACZnD,EAAM,KAAOY,GAAW,IAC1B,CAEA,SAAS2L,GAAiBvM,EAAOtwB,EAAO0qB,EAAQ,CAC9C,IAAIwG,EAAgB,GAChBuC,EAAgBnD,EAAM,IACtBwM,EAAgB,OAAO,KAAKpS,CAAM,EAClCtlB,EACA1B,EACAq5B,EACAC,EACAC,EAEJ,IAAK73B,EAAQ,EAAG1B,EAASo5B,EAAc,OAAQ13B,EAAQ1B,EAAQ0B,GAAS,EAEtE63B,EAAa,GACT/L,IAAY,KAAI+L,GAAc,MAE9B3M,EAAM,eAAc2M,GAAc,KAEtCF,EAAYD,EAAc13B,CAAK,EAC/B43B,EAActS,EAAOqS,CAAS,EAE1BzM,EAAM,WACR0M,EAAc1M,EAAM,SAAS,KAAK5F,EAAQqS,EAAWC,CAAW,GAG7DL,GAAUrM,EAAOtwB,EAAO+8B,EAAW,GAAO,EAAK,IAIhDzM,EAAM,KAAK,OAAS,OAAM2M,GAAc,MAE5CA,GAAc3M,EAAM,MAAQA,EAAM,aAAe,IAAM,IAAM,KAAOA,EAAM,aAAe,GAAK,KAEzFqM,GAAUrM,EAAOtwB,EAAOg9B,EAAa,GAAO,EAAK,IAItDC,GAAc3M,EAAM,KAGpBY,GAAW+L,IAGb3M,EAAM,IAAMmD,EACZnD,EAAM,KAAO,IAAMY,EAAU,GAC/B,CAEA,SAASgM,GAAkB5M,EAAOtwB,EAAO0qB,EAAQ5C,EAAS,CACxD,IAAIoJ,EAAgB,GAChBuC,EAAgBnD,EAAM,IACtBwM,EAAgB,OAAO,KAAKpS,CAAM,EAClCtlB,EACA1B,EACAq5B,EACAC,EACAG,EACAF,EAGJ,GAAI3M,EAAM,WAAa,GAErBwM,EAAc,KAAI,UACT,OAAOxM,EAAM,UAAa,WAEnCwM,EAAc,KAAKxM,EAAM,QAAQ,UACxBA,EAAM,SAEf,MAAM,IAAItI,GAAc,0CAA0C,EAGpE,IAAK5iB,EAAQ,EAAG1B,EAASo5B,EAAc,OAAQ13B,EAAQ1B,EAAQ0B,GAAS,EACtE63B,EAAa,IAET,CAACnV,GAAWoJ,IAAY,MAC1B+L,GAAc9D,GAAiB7I,EAAOtwB,CAAK,GAG7C+8B,EAAYD,EAAc13B,CAAK,EAC/B43B,EAActS,EAAOqS,CAAS,EAE1BzM,EAAM,WACR0M,EAAc1M,EAAM,SAAS,KAAK5F,EAAQqS,EAAWC,CAAW,GAG7DL,GAAUrM,EAAOtwB,EAAQ,EAAG+8B,EAAW,GAAM,GAAM,EAAI,IAI5DI,EAAgB7M,EAAM,MAAQ,MAAQA,EAAM,MAAQ,KACpCA,EAAM,MAAQA,EAAM,KAAK,OAAS,KAE9C6M,IACE7M,EAAM,MAAQ2G,KAAmB3G,EAAM,KAAK,WAAW,CAAC,EAC1D2M,GAAc,IAEdA,GAAc,MAIlBA,GAAc3M,EAAM,KAEhB6M,IACFF,GAAc9D,GAAiB7I,EAAOtwB,CAAK,GAGxC28B,GAAUrM,EAAOtwB,EAAQ,EAAGg9B,EAAa,GAAMG,CAAY,IAI5D7M,EAAM,MAAQ2G,KAAmB3G,EAAM,KAAK,WAAW,CAAC,EAC1D2M,GAAc,IAEdA,GAAc,KAGhBA,GAAc3M,EAAM,KAGpBY,GAAW+L,IAGb3M,EAAM,IAAMmD,EACZnD,EAAM,KAAOY,GAAW,IAC1B,CAEA,SAASkM,GAAW9M,EAAO5F,EAAQL,EAAU,CAC3C,IAAI6G,EAASgF,EAAU9wB,EAAO1B,EAAQwN,EAAMqY,EAI5C,IAFA2M,EAAW7L,EAAWiG,EAAM,cAAgBA,EAAM,cAE7ClrB,EAAQ,EAAG1B,EAASwyB,EAAS,OAAQ9wB,EAAQ1B,EAAQ0B,GAAS,EAGjE,GAFA8L,EAAOglB,EAAS9wB,CAAK,GAEhB8L,EAAK,YAAeA,EAAK,aACzB,CAACA,EAAK,YAAgB,OAAOwZ,GAAW,UAAcA,aAAkBxZ,EAAK,cAC7E,CAACA,EAAK,WAAcA,EAAK,UAAUwZ,CAAM,GAAI,CAYhD,GAVIL,EACEnZ,EAAK,OAASA,EAAK,cACrBof,EAAM,IAAMpf,EAAK,cAAcwZ,CAAM,EAErC4F,EAAM,IAAMpf,EAAK,IAGnBof,EAAM,IAAM,IAGVpf,EAAK,UAAW,CAGlB,GAFAqY,EAAQ+G,EAAM,SAASpf,EAAK,GAAG,GAAKA,EAAK,aAErCwc,GAAU,KAAKxc,EAAK,SAAS,IAAM,oBACrCggB,EAAUhgB,EAAK,UAAUwZ,EAAQnB,CAAK,UAC7BkE,GAAgB,KAAKvc,EAAK,UAAWqY,CAAK,EACnD2H,EAAUhgB,EAAK,UAAUqY,CAAK,EAAEmB,EAAQnB,CAAK,MAE7C,OAAM,IAAIvB,GAAc,KAAO9W,EAAK,IAAM,+BAAiCqY,EAAQ,SAAS,EAG9F+G,EAAM,KAAOY,CACrB,CAEM,MAAO,EACb,CAGE,MAAO,EACT,CAKA,SAASyL,GAAUrM,EAAOtwB,EAAO0qB,EAAQ33B,EAAO+0B,EAASyT,EAAO8B,EAAY,CAC1E/M,EAAM,IAAM,KACZA,EAAM,KAAO5F,EAER0S,GAAW9M,EAAO5F,EAAQ,EAAK,GAClC0S,GAAW9M,EAAO5F,EAAQ,EAAI,EAGhC,IAAIxZ,EAAOwc,GAAU,KAAK4C,EAAM,IAAI,EAChCmJ,EAAU1mC,EACVuqC,EAEAvqC,IACFA,EAASu9B,EAAM,UAAY,GAAKA,EAAM,UAAYtwB,GAGpD,IAAIu9B,EAAgBrsB,IAAS,mBAAqBA,IAAS,iBACvDssB,EACAC,EAWJ,GATIF,IACFC,EAAiBlN,EAAM,WAAW,QAAQ5F,CAAM,EAChD+S,EAAYD,IAAmB,KAG5BlN,EAAM,MAAQ,MAAQA,EAAM,MAAQ,KAAQmN,GAAcnN,EAAM,SAAW,GAAKtwB,EAAQ,KAC3F8nB,EAAU,IAGR2V,GAAanN,EAAM,eAAekN,CAAc,EAClDlN,EAAM,KAAO,QAAUkN,MAClB,CAIL,GAHID,GAAiBE,GAAa,CAACnN,EAAM,eAAekN,CAAc,IACpElN,EAAM,eAAekN,CAAc,EAAI,IAErCtsB,IAAS,kBACPne,GAAU,OAAO,KAAKu9B,EAAM,IAAI,EAAE,SAAW,GAC/C4M,GAAkB5M,EAAOtwB,EAAOswB,EAAM,KAAMxI,CAAO,EAC/C2V,IACFnN,EAAM,KAAO,QAAUkN,EAAiBlN,EAAM,QAGhDuM,GAAiBvM,EAAOtwB,EAAOswB,EAAM,IAAI,EACrCmN,IACFnN,EAAM,KAAO,QAAUkN,EAAiB,IAAMlN,EAAM,eAG/Cpf,IAAS,iBACdne,GAAUu9B,EAAM,KAAK,SAAW,GAC9BA,EAAM,eAAiB,CAAC+M,GAAcr9B,EAAQ,EAChD48B,GAAmBtM,EAAOtwB,EAAQ,EAAGswB,EAAM,KAAMxI,CAAO,EAExD8U,GAAmBtM,EAAOtwB,EAAOswB,EAAM,KAAMxI,CAAO,EAElD2V,IACFnN,EAAM,KAAO,QAAUkN,EAAiBlN,EAAM,QAGhDoM,GAAkBpM,EAAOtwB,EAAOswB,EAAM,IAAI,EACtCmN,IACFnN,EAAM,KAAO,QAAUkN,EAAiB,IAAMlN,EAAM,eAG/Cpf,IAAS,kBACdof,EAAM,MAAQ,KAChBgL,GAAYhL,EAAOA,EAAM,KAAMtwB,EAAOu7B,EAAO9B,CAAO,MAEjD,IAAIvoB,IAAS,qBAClB,MAAO,GAEP,GAAIof,EAAM,YAAa,MAAO,GAC9B,MAAM,IAAItI,GAAc,0CAA4C9W,CAAI,EAGtEof,EAAM,MAAQ,MAAQA,EAAM,MAAQ,MActCgN,EAAS,UACPhN,EAAM,IAAI,CAAC,IAAM,IAAMA,EAAM,IAAI,MAAM,CAAC,EAAIA,EAAM,GAC1D,EAAQ,QAAQ,KAAM,KAAK,EAEjBA,EAAM,IAAI,CAAC,IAAM,IACnBgN,EAAS,IAAMA,EACNA,EAAO,MAAM,EAAG,EAAE,IAAM,qBACjCA,EAAS,KAAOA,EAAO,MAAM,EAAE,EAE/BA,EAAS,KAAOA,EAAS,IAG3BhN,EAAM,KAAOgN,EAAS,IAAMhN,EAAM,KAExC,CAEE,MAAO,EACT,CAEA,SAASoN,GAAuBhT,EAAQ4F,EAAO,CAC7C,IAAIqN,EAAU,CAAA,EACVC,EAAoB,CAAA,EACpBx4B,EACA1B,EAIJ,IAFAm6B,GAAYnT,EAAQiT,EAASC,CAAiB,EAEzCx4B,EAAQ,EAAG1B,EAASk6B,EAAkB,OAAQx4B,EAAQ1B,EAAQ0B,GAAS,EAC1EkrB,EAAM,WAAW,KAAKqN,EAAQC,EAAkBx4B,CAAK,CAAC,CAAC,EAEzDkrB,EAAM,eAAiB,IAAI,MAAM5sB,CAAM,CACzC,CAEA,SAASm6B,GAAYnT,EAAQiT,EAASC,EAAmB,CACvD,IAAId,EACA13B,EACA1B,EAEJ,GAAIgnB,IAAW,MAAQ,OAAOA,GAAW,SAEvC,GADAtlB,EAAQu4B,EAAQ,QAAQjT,CAAM,EAC1BtlB,IAAU,GACRw4B,EAAkB,QAAQx4B,CAAK,IAAM,IACvCw4B,EAAkB,KAAKx4B,CAAK,UAG9Bu4B,EAAQ,KAAKjT,CAAM,EAEf,MAAM,QAAQA,CAAM,EACtB,IAAKtlB,EAAQ,EAAG1B,EAASgnB,EAAO,OAAQtlB,EAAQ1B,EAAQ0B,GAAS,EAC/Dy4B,GAAYnT,EAAOtlB,CAAK,EAAGu4B,EAASC,CAAiB,MAKvD,KAFAd,EAAgB,OAAO,KAAKpS,CAAM,EAE7BtlB,EAAQ,EAAG1B,EAASo5B,EAAc,OAAQ13B,EAAQ1B,EAAQ0B,GAAS,EACtEy4B,GAAYnT,EAAOoS,EAAc13B,CAAK,CAAC,EAAGu4B,EAASC,CAAiB,CAK9E,CAEA,SAASE,GAAKpd,EAAOhc,EAAS,CAC5BA,EAAUA,GAAW,CAAA,EAErB,IAAI4rB,EAAQ,IAAIF,GAAM1rB,CAAO,EAExB4rB,EAAM,QAAQoN,GAAuBhd,EAAO4P,CAAK,EAEtD,IAAIn/B,EAAQuvB,EAMZ,OAJI4P,EAAM,WACRn/B,EAAQm/B,EAAM,SAAS,KAAK,CAAE,GAAIn/B,CAAK,EAAI,GAAIA,CAAK,GAGlDwrC,GAAUrM,EAAO,EAAGn/B,EAAO,GAAM,EAAI,EAAUm/B,EAAM,KAAO;AAAA,EAEzD,EACT,CAEAyN,GAAA,KAAsBD,GCj8BtB,IAAIhH,GAASn1B,GACTo8B,GAASr4B,GAGb,SAASs4B,GAAQj7B,EAAMC,EAAI,CACzB,OAAO,UAAY,CACjB,MAAM,IAAI,MAAM,iBAAmBD,EAAO,sCAC1BC,EAAK,yCAAyC,CAClE,CACA,CAGAi7B,GAAA,KAAqCt4B,GACrCs4B,GAAA,OAAqCr4B,GACrCq4B,GAAA,gBAAqCn4B,GACrCm4B,GAAA,YAAqCr3B,GACrCq3B,GAAA,YAAqCzsB,GACrCysB,GAAA,eAAqCxsB,GACrCwsB,GAAA,KAAqCnH,GAAO,KAC5CmH,GAAA,QAAqCnH,GAAO,QAC5CmH,GAAA,KAAqCF,GAAO,KAC5CE,GAAA,cAAqC1pB,GAGrC0pB,GAAA,MAAuB,CACrB,OAAWzpB,GACX,MAAW0pB,GACX,IAAWC,GACX,KAAWC,GACX,MAAWC,GACX,IAAWC,GACX,UAAWC,GACX,KAAWC,GACX,IAAWC,GACX,MAAWC,GACX,KAAWC,GACX,IAAWC,GACX,IAAWC,EACb,EAGAZ,GAAA,SAAqCD,GAAQ,WAAY,MAAM,EAC/DC,GAAA,YAAqCD,GAAQ,cAAe,SAAS,EACrEC,GAAA,SAAqCD,GAAQ,WAAY,MAAM,YC7C/D,OAAO,eAAexhC,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,KAAe,OACf,MAAMsiC,EAAK,CACP,YAAY1gB,EAAS,CACjB,KAAK,OAAS,KACd,KAAK,QAAUA,CACvB,CACI,IAAI,UAAW,CACX,OAAO,KAAK,SAAW,IAC/B,CACI,IAAI,OAAQ,CACR,GAAI,KAAK,SAAW,KAChB,OAAO,KAAK,OAEhB,MAAMpnB,EAAS,KAAK,QAAO,EAC3B,YAAK,MAAQA,EACNA,CACf,CACI,IAAI,MAAM7F,EAAO,CACb,KAAK,OAASA,EACd,KAAK,QAAU,IACvB,CACA,CACAqL,GAAA,KAAesiC,uBCpBf,MAAMC,GAAsB,QAEtBC,GAAa,IACbC,GAAmB,OAAO,kBACL,iBAGrBC,GAA4B,GAI5BC,GAAwBH,GAAa,EAErCI,GAAgB,CACpB,QACA,WACA,QACA,WACA,QACA,WACA,YACF,EAEA,IAAA19B,GAAiB,CACjB,WAAEs9B,GACA,0BAAAE,GACA,sBAAAC,GACF,iBAAEF,GACA,cAAAG,GACA,oBAAAL,GACA,wBAAyB,EACzB,WAAY,CACd,EClCA,MAAM14B,GACJ,OAAO,SAAY,UACnB,aACA,QAAA,IAAY,YACZ,cAAc,KAAK,QAAA,IAAY,UAAU,EACvC,IAAIzH,IAAS,QAAQ,MAAM,SAAU,GAAGA,CAAI,EAC5C,IAAM,CAAC,EAEX,IAAAgc,GAAiBvU,kBCRjB,KAAM,CACJ,0BAAA64B,EACA,sBAAAC,EACA,WAAAH,CACF,EAAIr9B,GACE0E,EAAQX,GACdiE,EAAUwO,UAAiB,CAAA,EAG3B,MAAM0Q,EAAKlf,EAAA,GAAa,CAAA,EAClB01B,EAAS11B,EAAA,OAAiB,CAAA,EAC1B/B,EAAM+B,EAAA,IAAc,CAAA,EACpB21B,EAAU31B,EAAA,QAAkB,CAAA,EAC5B0a,EAAI1a,EAAA,EAAY,CAAA,EACtB,IAAI41B,EAAI,EAER,MAAMC,EAAmB,eAQnBC,EAAwB,CAC5B,CAAC,MAAO,CAAC,EACT,CAAC,MAAOT,CAAU,EAClB,CAACQ,EAAkBL,CAAqB,GAGpCO,EAAiBvuC,GAAU,CAC/B,SAAW,CAAC4sB,EAAO4K,CAAG,IAAK8W,EACzBtuC,EAAQA,EACL,MAAM,GAAG4sB,CAAK,GAAG,EAAE,KAAK,GAAGA,CAAK,MAAM4K,CAAG,GAAG,EAC5C,MAAM,GAAG5K,CAAK,GAAG,EAAE,KAAK,GAAGA,CAAK,MAAM4K,CAAG,GAAG,EAEjD,OAAOx3B,CACT,EAEMwuC,EAAc,CAAC9xC,EAAMsD,EAAOyuC,IAAa,CAC7C,MAAMC,EAAOH,EAAcvuC,CAAK,EAC1BiU,EAAQm6B,IACdl5B,EAAMxY,EAAMuX,EAAOjU,CAAK,EACxBkzB,EAAEx2B,CAAI,EAAIuX,EACVwC,EAAIxC,CAAK,EAAIjU,EACbmuC,EAAQl6B,CAAK,EAAIy6B,EACjBhX,EAAGzjB,CAAK,EAAI,IAAI,OAAOjU,EAAOyuC,EAAW,IAAM,MAAS,EACxDP,EAAOj6B,CAAK,EAAI,IAAI,OAAOy6B,EAAMD,EAAW,IAAM,MAAS,CAC7D,EAQAD,EAAY,oBAAqB,aAAa,EAC9CA,EAAY,yBAA0B,MAAM,EAM5CA,EAAY,uBAAwB,gBAAgBH,CAAgB,GAAG,EAKvEG,EAAY,cAAe,IAAI/3B,EAAIyc,EAAE,iBAAiB,CAAC,QAChCzc,EAAIyc,EAAE,iBAAiB,CAAC,QACxBzc,EAAIyc,EAAE,iBAAiB,CAAC,GAAG,EAElDsb,EAAY,mBAAoB,IAAI/3B,EAAIyc,EAAE,sBAAsB,CAAC,QACrCzc,EAAIyc,EAAE,sBAAsB,CAAC,QAC7Bzc,EAAIyc,EAAE,sBAAsB,CAAC,GAAG,EAO5Dsb,EAAY,uBAAwB,MAAM/3B,EAAIyc,EAAE,oBAAoB,KAChEzc,EAAIyc,EAAE,iBAAiB,CAAC,GAAG,EAE/Bsb,EAAY,4BAA6B,MAAM/3B,EAAIyc,EAAE,oBAAoB,KACrEzc,EAAIyc,EAAE,sBAAsB,CAAC,GAAG,EAMpCsb,EAAY,aAAc,QAAQ/3B,EAAIyc,EAAE,oBAAoB,UACnDzc,EAAIyc,EAAE,oBAAoB,CAAC,MAAM,EAE1Csb,EAAY,kBAAmB,SAAS/3B,EAAIyc,EAAE,yBAAyB,UAC9Dzc,EAAIyc,EAAE,yBAAyB,CAAC,MAAM,EAK/Csb,EAAY,kBAAmB,GAAGH,CAAgB,GAAG,EAMrDG,EAAY,QAAS,UAAU/3B,EAAIyc,EAAE,eAAe,UAC3Czc,EAAIyc,EAAE,eAAe,CAAC,MAAM,EAWrCsb,EAAY,YAAa,KAAK/3B,EAAIyc,EAAE,WAAW,IAC5Czc,EAAIyc,EAAE,UAAU,CAAC,IAClBzc,EAAIyc,EAAE,KAAK,CAAC,GAAG,EAEjBsb,EAAY,OAAQ,IAAI/3B,EAAIyc,EAAE,SAAS,CAAC,GAAG,EAK3Csb,EAAY,aAAc,WAAW/3B,EAAIyc,EAAE,gBAAgB,IACxDzc,EAAIyc,EAAE,eAAe,CAAC,IACvBzc,EAAIyc,EAAE,KAAK,CAAC,GAAG,EAEjBsb,EAAY,QAAS,IAAI/3B,EAAIyc,EAAE,UAAU,CAAC,GAAG,EAE7Csb,EAAY,OAAQ,cAAc,EAKlCA,EAAY,wBAAyB,GAAG/3B,EAAIyc,EAAE,sBAAsB,CAAC,UAAU,EAC/Esb,EAAY,mBAAoB,GAAG/3B,EAAIyc,EAAE,iBAAiB,CAAC,UAAU,EAErEsb,EAAY,cAAe,YAAY/3B,EAAIyc,EAAE,gBAAgB,CAAC,WACjCzc,EAAIyc,EAAE,gBAAgB,CAAC,WACvBzc,EAAIyc,EAAE,gBAAgB,CAAC,OAC3Bzc,EAAIyc,EAAE,UAAU,CAAC,KACrBzc,EAAIyc,EAAE,KAAK,CAAC,OACR,EAEzBsb,EAAY,mBAAoB,YAAY/3B,EAAIyc,EAAE,qBAAqB,CAAC,WACtCzc,EAAIyc,EAAE,qBAAqB,CAAC,WAC5Bzc,EAAIyc,EAAE,qBAAqB,CAAC,OAChCzc,EAAIyc,EAAE,eAAe,CAAC,KAC1Bzc,EAAIyc,EAAE,KAAK,CAAC,OACR,EAE9Bsb,EAAY,SAAU,IAAI/3B,EAAIyc,EAAE,IAAI,CAAC,OAAOzc,EAAIyc,EAAE,WAAW,CAAC,GAAG,EACjEsb,EAAY,cAAe,IAAI/3B,EAAIyc,EAAE,IAAI,CAAC,OAAOzc,EAAIyc,EAAE,gBAAgB,CAAC,GAAG,EAI3Esb,EAAY,cAAe,oBACDT,CAAyB,kBACrBA,CAAyB,oBACzBA,CAAyB,MAAM,EAC7DS,EAAY,SAAU,GAAG/3B,EAAIyc,EAAE,WAAW,CAAC,cAAc,EACzDsb,EAAY,aAAc/3B,EAAIyc,EAAE,WAAW,EAC7B,MAAMzc,EAAIyc,EAAE,UAAU,CAAC,QACjBzc,EAAIyc,EAAE,KAAK,CAAC,gBACJ,EAC5Bsb,EAAY,YAAa/3B,EAAIyc,EAAE,MAAM,EAAG,EAAI,EAC5Csb,EAAY,gBAAiB/3B,EAAIyc,EAAE,UAAU,EAAG,EAAI,EAIpDsb,EAAY,YAAa,SAAS,EAElCA,EAAY,YAAa,SAAS/3B,EAAIyc,EAAE,SAAS,CAAC,OAAQ,EAAI,EAC9D1a,EAAA,iBAA2B,MAE3Bg2B,EAAY,QAAS,IAAI/3B,EAAIyc,EAAE,SAAS,CAAC,GAAGzc,EAAIyc,EAAE,WAAW,CAAC,GAAG,EACjEsb,EAAY,aAAc,IAAI/3B,EAAIyc,EAAE,SAAS,CAAC,GAAGzc,EAAIyc,EAAE,gBAAgB,CAAC,GAAG,EAI3Esb,EAAY,YAAa,SAAS,EAElCA,EAAY,YAAa,SAAS/3B,EAAIyc,EAAE,SAAS,CAAC,OAAQ,EAAI,EAC9D1a,EAAA,iBAA2B,MAE3Bg2B,EAAY,QAAS,IAAI/3B,EAAIyc,EAAE,SAAS,CAAC,GAAGzc,EAAIyc,EAAE,WAAW,CAAC,GAAG,EACjEsb,EAAY,aAAc,IAAI/3B,EAAIyc,EAAE,SAAS,CAAC,GAAGzc,EAAIyc,EAAE,gBAAgB,CAAC,GAAG,EAG3Esb,EAAY,kBAAmB,IAAI/3B,EAAIyc,EAAE,IAAI,CAAC,QAAQzc,EAAIyc,EAAE,UAAU,CAAC,OAAO,EAC9Esb,EAAY,aAAc,IAAI/3B,EAAIyc,EAAE,IAAI,CAAC,QAAQzc,EAAIyc,EAAE,SAAS,CAAC,OAAO,EAIxEsb,EAAY,iBAAkB,SAAS/3B,EAAIyc,EAAE,IAAI,SACzCzc,EAAIyc,EAAE,UAAU,CAAC,IAAIzc,EAAIyc,EAAE,WAAW,CAAC,IAAK,EAAI,EACxD1a,EAAA,sBAAgC,SAMhCg2B,EAAY,cAAe,SAAS/3B,EAAIyc,EAAE,WAAW,CAAC,cAE/Bzc,EAAIyc,EAAE,WAAW,CAAC,QACf,EAE1Bsb,EAAY,mBAAoB,SAAS/3B,EAAIyc,EAAE,gBAAgB,CAAC,cAEpCzc,EAAIyc,EAAE,gBAAgB,CAAC,QACpB,EAG/Bsb,EAAY,OAAQ,iBAAiB,EAErCA,EAAY,OAAQ,2BAA2B,EAC/CA,EAAY,UAAW,6BAA6B,qCC3NpD,MAAMG,GAAc,OAAO,OAAO,CAAE,MAAO,EAAI,CAAE,EAC3CC,GAAY,OAAO,OAAO,CAAA,CAAG,EAC7BC,GAAet7B,GACdA,EAID,OAAOA,GAAY,SACdo7B,GAGFp7B,EAPEq7B,GASX,IAAAE,GAAiBD,GCdjB,MAAME,GAAU,WACVC,GAAqB,CAACr0C,EAAGC,IAAM,CACnC,GAAI,OAAOD,GAAM,UAAY,OAAOC,GAAM,SACxC,OAAOD,IAAMC,EAAI,EAAID,EAAIC,EAAI,GAAK,EAGpC,MAAMq0C,EAAOF,GAAQ,KAAKp0C,CAAC,EACrBu0C,EAAOH,GAAQ,KAAKn0C,CAAC,EAE3B,OAAIq0C,GAAQC,IACVv0C,EAAI,CAACA,EACLC,EAAI,CAACA,GAGAD,IAAMC,EAAI,EACZq0C,GAAQ,CAACC,EAAQ,GACjBA,GAAQ,CAACD,EAAQ,EAClBt0C,EAAIC,EAAI,GACR,CACN,EAEMu0C,GAAsB,CAACx0C,EAAGC,IAAMo0C,GAAmBp0C,EAAGD,CAAC,EAE7D,IAAAy0C,GAAiB,CACjB,mBAAEJ,GACA,oBAAAG,EACF,EC1BA,MAAMj6B,GAAQ1E,GACR,CAAE,WAAAq9B,GAAY,iBAAAC,IAAqBv5B,GACnC,CAAE,OAAQmjB,GAAE,EAAExE,IAAM1e,GAEpBq6B,GAAep6B,GACf,CAAE,mBAAAu6B,EAAkB,EAAKr6B,GAC/B,IAAA06B,GAAA,MAAMC,EAAO,CACX,YAAatnB,EAASzU,EAAS,CAG7B,GAFAA,EAAUs7B,GAAat7B,CAAO,EAE1ByU,aAAmBsnB,GAAQ,CAC7B,GAAItnB,EAAQ,QAAU,CAAC,CAACzU,EAAQ,OAC9ByU,EAAQ,oBAAsB,CAAC,CAACzU,EAAQ,kBACxC,OAAOyU,EAEPA,EAAUA,EAAQ,OAE1B,SAAe,OAAOA,GAAY,SAC5B,MAAM,IAAI,UAAU,gDAAgD,OAAOA,CAAO,IAAI,EAGxF,GAAIA,EAAQ,OAAS6lB,GACnB,MAAM,IAAI,UACR,0BAA0BA,EAAU,aAC5C,EAGI34B,GAAM,SAAU8S,EAASzU,CAAO,EAChC,KAAK,QAAUA,EACf,KAAK,MAAQ,CAAC,CAACA,EAAQ,MAGvB,KAAK,kBAAoB,CAAC,CAACA,EAAQ,kBAEnC,MAAM7Y,EAAIstB,EAAQ,KAAI,EAAG,MAAMzU,EAAQ,MAAQmkB,GAAGxE,GAAE,KAAK,EAAIwE,GAAGxE,GAAE,IAAI,CAAC,EAEvE,GAAI,CAACx4B,EACH,MAAM,IAAI,UAAU,oBAAoBstB,CAAO,EAAE,EAUnD,GAPA,KAAK,IAAMA,EAGX,KAAK,MAAQ,CAACttB,EAAE,CAAC,EACjB,KAAK,MAAQ,CAACA,EAAE,CAAC,EACjB,KAAK,MAAQ,CAACA,EAAE,CAAC,EAEb,KAAK,MAAQozC,IAAoB,KAAK,MAAQ,EAChD,MAAM,IAAI,UAAU,uBAAuB,EAG7C,GAAI,KAAK,MAAQA,IAAoB,KAAK,MAAQ,EAChD,MAAM,IAAI,UAAU,uBAAuB,EAG7C,GAAI,KAAK,MAAQA,IAAoB,KAAK,MAAQ,EAChD,MAAM,IAAI,UAAU,uBAAuB,EAIxCpzC,EAAE,CAAC,EAGN,KAAK,WAAaA,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAKuL,GAAO,CAC5C,GAAI,WAAW,KAAKA,CAAE,EAAG,CACvB,MAAMwtB,EAAM,CAACxtB,EACb,GAAIwtB,GAAO,GAAKA,EAAMqa,GACpB,OAAOra,CAEnB,CACQ,OAAOxtB,CACf,CAAO,EAVD,KAAK,WAAa,CAAA,EAapB,KAAK,MAAQvL,EAAE,CAAC,EAAIA,EAAE,CAAC,EAAE,MAAM,GAAG,EAAI,CAAA,EACtC,KAAK,OAAM,CACf,CAEE,QAAU,CACR,YAAK,QAAU,GAAG,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,GACpD,KAAK,WAAW,SAClB,KAAK,SAAW,IAAI,KAAK,WAAW,KAAK,GAAG,CAAC,IAExC,KAAK,OAChB,CAEE,UAAY,CACV,OAAO,KAAK,OAChB,CAEE,QAAS60C,EAAO,CAEd,GADAr6B,GAAM,iBAAkB,KAAK,QAAS,KAAK,QAASq6B,CAAK,EACrD,EAAEA,aAAiBD,IAAS,CAC9B,GAAI,OAAOC,GAAU,UAAYA,IAAU,KAAK,QAC9C,MAAO,GAETA,EAAQ,IAAID,GAAOC,EAAO,KAAK,OAAO,CAC5C,CAEI,OAAIA,EAAM,UAAY,KAAK,QAClB,EAGF,KAAK,YAAYA,CAAK,GAAK,KAAK,WAAWA,CAAK,CAC3D,CAEE,YAAaA,EAAO,CAKlB,OAJMA,aAAiBD,KACrBC,EAAQ,IAAID,GAAOC,EAAO,KAAK,OAAO,GAGpC,KAAK,MAAQA,EAAM,MACd,GAEL,KAAK,MAAQA,EAAM,MACd,EAEL,KAAK,MAAQA,EAAM,MACd,GAEL,KAAK,MAAQA,EAAM,MACd,EAEL,KAAK,MAAQA,EAAM,MACd,GAEL,KAAK,MAAQA,EAAM,MACd,EAEF,CACX,CAEE,WAAYA,EAAO,CAMjB,GALMA,aAAiBD,KACrBC,EAAQ,IAAID,GAAOC,EAAO,KAAK,OAAO,GAIpC,KAAK,WAAW,QAAU,CAACA,EAAM,WAAW,OAC9C,MAAO,GACF,GAAI,CAAC,KAAK,WAAW,QAAUA,EAAM,WAAW,OACrD,MAAO,GACF,GAAI,CAAC,KAAK,WAAW,QAAU,CAACA,EAAM,WAAW,OACtD,MAAO,GAGT,IAAIptC,EAAI,EACR,EAAG,CACD,MAAMxH,EAAI,KAAK,WAAWwH,CAAC,EACrBvH,EAAI20C,EAAM,WAAWptC,CAAC,EAE5B,GADA+S,GAAM,qBAAsB/S,EAAGxH,EAAGC,CAAC,EAC/BD,IAAM,QAAaC,IAAM,OAC3B,MAAO,GACF,GAAIA,IAAM,OACf,MAAO,GACF,GAAID,IAAM,OACf,MAAO,GACF,GAAIA,IAAMC,EACf,SAEA,OAAOo0C,GAAmBr0C,EAAGC,CAAC,CAEtC,OAAa,EAAEuH,EACf,CAEE,aAAcotC,EAAO,CACbA,aAAiBD,KACrBC,EAAQ,IAAID,GAAOC,EAAO,KAAK,OAAO,GAGxC,IAAIptC,EAAI,EACR,EAAG,CACD,MAAMxH,EAAI,KAAK,MAAMwH,CAAC,EAChBvH,EAAI20C,EAAM,MAAMptC,CAAC,EAEvB,GADA+S,GAAM,gBAAiB/S,EAAGxH,EAAGC,CAAC,EAC1BD,IAAM,QAAaC,IAAM,OAC3B,MAAO,GACF,GAAIA,IAAM,OACf,MAAO,GACF,GAAID,IAAM,OACf,MAAO,GACF,GAAIA,IAAMC,EACf,SAEA,OAAOo0C,GAAmBr0C,EAAGC,CAAC,CAEtC,OAAa,EAAEuH,EACf,CAIE,IAAKqtC,EAASC,EAAYC,EAAgB,CACxC,GAAIF,EAAQ,WAAW,KAAK,EAAG,CAC7B,GAAI,CAACC,GAAcC,IAAmB,GACpC,MAAM,IAAI,MAAM,iDAAiD,EAGnE,GAAID,EAAY,CACd,MAAMvmC,EAAQ,IAAIumC,CAAU,GAAG,MAAM,KAAK,QAAQ,MAAQ/X,GAAGxE,GAAE,eAAe,EAAIwE,GAAGxE,GAAE,UAAU,CAAC,EAClG,GAAI,CAAChqB,GAASA,EAAM,CAAC,IAAMumC,EACzB,MAAM,IAAI,MAAM,uBAAuBA,CAAU,EAAE,CAE7D,CACA,CAEI,OAAQD,EAAO,CACb,IAAK,WACH,KAAK,WAAW,OAAS,EACzB,KAAK,MAAQ,EACb,KAAK,MAAQ,EACb,KAAK,QACL,KAAK,IAAI,MAAOC,EAAYC,CAAc,EAC1C,MACF,IAAK,WACH,KAAK,WAAW,OAAS,EACzB,KAAK,MAAQ,EACb,KAAK,QACL,KAAK,IAAI,MAAOD,EAAYC,CAAc,EAC1C,MACF,IAAK,WAIH,KAAK,WAAW,OAAS,EACzB,KAAK,IAAI,QAASD,EAAYC,CAAc,EAC5C,KAAK,IAAI,MAAOD,EAAYC,CAAc,EAC1C,MAGF,IAAK,aACC,KAAK,WAAW,SAAW,GAC7B,KAAK,IAAI,QAASD,EAAYC,CAAc,EAE9C,KAAK,IAAI,MAAOD,EAAYC,CAAc,EAC1C,MACF,IAAK,UACH,GAAI,KAAK,WAAW,SAAW,EAC7B,MAAM,IAAI,MAAM,WAAW,KAAK,GAAG,sBAAsB,EAE3D,KAAK,WAAW,OAAS,EACzB,MAEF,IAAK,SAMD,KAAK,QAAU,GACf,KAAK,QAAU,GACf,KAAK,WAAW,SAAW,IAE3B,KAAK,QAEP,KAAK,MAAQ,EACb,KAAK,MAAQ,EACb,KAAK,WAAa,CAAA,EAClB,MACF,IAAK,SAKC,KAAK,QAAU,GAAK,KAAK,WAAW,SAAW,IACjD,KAAK,QAEP,KAAK,MAAQ,EACb,KAAK,WAAa,CAAA,EAClB,MACF,IAAK,QAKC,KAAK,WAAW,SAAW,GAC7B,KAAK,QAEP,KAAK,WAAa,CAAA,EAClB,MAGF,IAAK,MAAO,CACV,MAAMC,EAAO,OAAOD,CAAc,EAAI,EAAI,EAE1C,GAAI,KAAK,WAAW,SAAW,EAC7B,KAAK,WAAa,CAACC,CAAI,MAClB,CACL,IAAIxtC,EAAI,KAAK,WAAW,OACxB,KAAO,EAAEA,GAAK,GACR,OAAO,KAAK,WAAWA,CAAC,GAAM,WAChC,KAAK,WAAWA,CAAC,IACjBA,EAAI,IAGR,GAAIA,IAAM,GAAI,CAEZ,GAAIstC,IAAe,KAAK,WAAW,KAAK,GAAG,GAAKC,IAAmB,GACjE,MAAM,IAAI,MAAM,uDAAuD,EAEzE,KAAK,WAAW,KAAKC,CAAI,CACrC,CACA,CACQ,GAAIF,EAAY,CAGd,IAAIG,EAAa,CAACH,EAAYE,CAAI,EAC9BD,IAAmB,KACrBE,EAAa,CAACH,CAAU,GAEtBT,GAAmB,KAAK,WAAW,CAAC,EAAGS,CAAU,IAAM,EACrD,MAAM,KAAK,WAAW,CAAC,CAAC,IAC1B,KAAK,WAAaG,GAGpB,KAAK,WAAaA,CAE9B,CACQ,KACR,CACM,QACE,MAAM,IAAI,MAAM,+BAA+BJ,CAAO,EAAE,CAChE,CACI,YAAK,IAAM,KAAK,OAAM,EAClB,KAAK,MAAM,SACb,KAAK,KAAO,IAAI,KAAK,MAAM,KAAK,GAAG,CAAC,IAE/B,IACX,CACA,EAEA,IAAAK,GAAiBP,GC1UjB,MAAMA,GAAS9+B,GACT2T,GAAQ,CAAC6D,EAASzU,EAASu8B,EAAc,KAAU,CACvD,GAAI9nB,aAAmBsnB,GACrB,OAAOtnB,EAET,GAAI,CACF,OAAO,IAAIsnB,GAAOtnB,EAASzU,CAAO,CACtC,OAAWtB,EAAI,CACX,GAAI,CAAC69B,EACH,OAAO,KAET,MAAM79B,CACV,CACA,EAEA,IAAA89B,GAAiB5rB,GCfjB,MAAMA,GAAQ3T,GACRw/B,GAAQ,CAAChoB,EAASzU,IAAY,CAClC,MAAMoS,EAAIxB,GAAM6D,EAASzU,CAAO,EAChC,OAAOoS,EAAIA,EAAE,QAAU,IACzB,EACA,IAAAsqB,GAAiBD,GCLjB,MAAM7rB,GAAQ3T,GACRzO,GAAQ,CAACimB,EAASzU,IAAY,CAClC,MAAMzR,EAAIqiB,GAAM6D,EAAQ,KAAI,EAAG,QAAQ,SAAU,EAAE,EAAGzU,CAAO,EAC7D,OAAOzR,EAAIA,EAAE,QAAU,IACzB,EACA,IAAAouC,GAAiBnuC,GCLjB,MAAMutC,GAAS9+B,GAET2/B,GAAM,CAACnoB,EAASwnB,EAASj8B,EAASk8B,EAAYC,IAAmB,CACjE,OAAQn8B,GAAa,WACvBm8B,EAAiBD,EACjBA,EAAal8B,EACbA,EAAU,QAGZ,GAAI,CACF,OAAO,IAAI+7B,GACTtnB,aAAmBsnB,GAAStnB,EAAQ,QAAUA,EAC9CzU,CACN,EAAM,IAAIi8B,EAASC,EAAYC,CAAc,EAAE,OAC/C,MAAe,CACX,OAAO,IACX,CACA,EACA,IAAAU,GAAiBD,GClBjB,MAAMhsB,GAAQ3T,GAERpI,GAAO,CAACioC,EAAUC,IAAa,CACnC,MAAMC,EAAKpsB,GAAMksB,EAAU,KAAM,EAAI,EAC/BG,EAAKrsB,GAAMmsB,EAAU,KAAM,EAAI,EAC/BG,EAAaF,EAAG,QAAQC,CAAE,EAEhC,GAAIC,IAAe,EACjB,OAAO,KAGT,MAAMC,EAAWD,EAAa,EACxBE,EAAcD,EAAWH,EAAKC,EAC9BI,EAAaF,EAAWF,EAAKD,EAC7BM,EAAa,CAAC,CAACF,EAAY,WAAW,OAG5C,GAFkB,CAAC,CAACC,EAAW,WAAW,QAEzB,CAACC,EAAY,CAQ5B,GAAI,CAACD,EAAW,OAAS,CAACA,EAAW,MACnC,MAAO,QAIT,GAAIA,EAAW,YAAYD,CAAW,IAAM,EAC1C,OAAIC,EAAW,OAAS,CAACA,EAAW,MAC3B,QAEF,OAEb,CAGE,MAAMtpB,EAASupB,EAAa,MAAQ,GAEpC,OAAIN,EAAG,QAAUC,EAAG,MACXlpB,EAAS,QAGdipB,EAAG,QAAUC,EAAG,MACXlpB,EAAS,QAGdipB,EAAG,QAAUC,EAAG,MACXlpB,EAAS,QAIX,YACT,EAEA,IAAAwpB,GAAiB1oC,GCzDjB,MAAMknC,GAAS9+B,GACT+uB,GAAQ,CAAC5kC,EAAGo2C,IAAU,IAAIzB,GAAO30C,EAAGo2C,CAAK,EAAE,MACjD,IAAAC,GAAiBzR,GCFjB,MAAM+P,GAAS9+B,GACTgvB,GAAQ,CAAC7kC,EAAGo2C,IAAU,IAAIzB,GAAO30C,EAAGo2C,CAAK,EAAE,MACjD,IAAAE,GAAiBzR,GCFjB,MAAM8P,GAAS9+B,GACTM,GAAQ,CAACnW,EAAGo2C,IAAU,IAAIzB,GAAO30C,EAAGo2C,CAAK,EAAE,MACjD,IAAAG,GAAiBpgC,GCFjB,MAAMqT,GAAQ3T,GACRo/B,GAAa,CAAC5nB,EAASzU,IAAY,CACvC,MAAMlJ,EAAS8Z,GAAM6D,EAASzU,CAAO,EACrC,OAAQlJ,GAAUA,EAAO,WAAW,OAAUA,EAAO,WAAa,IACpE,EACA,IAAA8mC,GAAiBvB,GCLjB,MAAMN,GAAS9+B,GACT4gC,GAAU,CAACz2C,EAAGC,EAAGm2C,IACrB,IAAIzB,GAAO30C,EAAGo2C,CAAK,EAAE,QAAQ,IAAIzB,GAAO10C,EAAGm2C,CAAK,CAAC,EAEnD,IAAAM,GAAiBD,GCJjB,MAAMA,GAAU5gC,GACV8gC,GAAW,CAAC32C,EAAGC,EAAGm2C,IAAUK,GAAQx2C,EAAGD,EAAGo2C,CAAK,EACrD,IAAAQ,GAAiBD,GCFjB,MAAMF,GAAU5gC,GACVghC,GAAe,CAAC72C,EAAGC,IAAMw2C,GAAQz2C,EAAGC,EAAG,EAAI,EACjD,IAAA62C,GAAiBD,GCFjB,MAAMlC,GAAS9+B,GACTkhC,GAAe,CAAC/2C,EAAGC,EAAGm2C,IAAU,CACpC,MAAMY,EAAW,IAAIrC,GAAO30C,EAAGo2C,CAAK,EAC9Ba,EAAW,IAAItC,GAAO10C,EAAGm2C,CAAK,EACpC,OAAOY,EAAS,QAAQC,CAAQ,GAAKD,EAAS,aAAaC,CAAQ,CACrE,EACA,IAAAC,GAAiBH,GCNjB,MAAMA,GAAelhC,GACfshC,GAAO,CAACC,EAAMhB,IAAUgB,EAAK,KAAK,CAACp3C,EAAGC,IAAM82C,GAAa/2C,EAAGC,EAAGm2C,CAAK,CAAC,EAC3E,IAAAiB,GAAiBF,GCFjB,MAAMJ,GAAelhC,GACfyhC,GAAQ,CAACF,EAAMhB,IAAUgB,EAAK,KAAK,CAACp3C,EAAGC,IAAM82C,GAAa92C,EAAGD,EAAGo2C,CAAK,CAAC,EAC5E,IAAAmB,GAAiBD,GCFjB,MAAMb,GAAU5gC,GACV2hC,GAAK,CAACx3C,EAAGC,EAAGm2C,IAAUK,GAAQz2C,EAAGC,EAAGm2C,CAAK,EAAI,EACnD,IAAAqB,GAAiBD,GCFjB,MAAMf,GAAU5gC,GACV6hC,GAAK,CAAC13C,EAAGC,EAAGm2C,IAAUK,GAAQz2C,EAAGC,EAAGm2C,CAAK,EAAI,EACnD,IAAAuB,GAAiBD,GCFjB,MAAMjB,GAAU5gC,GACV+hC,GAAK,CAAC53C,EAAGC,EAAGm2C,IAAUK,GAAQz2C,EAAGC,EAAGm2C,CAAK,IAAM,EACrD,IAAAyB,GAAiBD,GCFjB,MAAMnB,GAAU5gC,GACViiC,GAAM,CAAC93C,EAAGC,EAAGm2C,IAAUK,GAAQz2C,EAAGC,EAAGm2C,CAAK,IAAM,EACtD,IAAA2B,GAAiBD,GCFjB,MAAMrB,GAAU5gC,GACVmiC,GAAM,CAACh4C,EAAGC,EAAGm2C,IAAUK,GAAQz2C,EAAGC,EAAGm2C,CAAK,GAAK,EACrD,IAAA6B,GAAiBD,GCFjB,MAAMvB,GAAU5gC,GACVqiC,GAAM,CAACl4C,EAAGC,EAAGm2C,IAAUK,GAAQz2C,EAAGC,EAAGm2C,CAAK,GAAK,EACrD,IAAA+B,GAAiBD,GCFjB,MAAMN,GAAK/hC,GACLiiC,GAAMl+B,GACN49B,GAAK39B,GACLm+B,GAAMl+B,GACN49B,GAAK19B,GACLk+B,GAAMp9B,GAENs9B,GAAM,CAACp4C,EAAGq4C,EAAIp4C,EAAGm2C,IAAU,CAC/B,OAAQiC,EAAE,CACR,IAAK,MACH,OAAI,OAAOr4C,GAAM,WACfA,EAAIA,EAAE,SAEJ,OAAOC,GAAM,WACfA,EAAIA,EAAE,SAEDD,IAAMC,EAEf,IAAK,MACH,OAAI,OAAOD,GAAM,WACfA,EAAIA,EAAE,SAEJ,OAAOC,GAAM,WACfA,EAAIA,EAAE,SAEDD,IAAMC,EAEf,IAAK,GACL,IAAK,IACL,IAAK,KACH,OAAO23C,GAAG53C,EAAGC,EAAGm2C,CAAK,EAEvB,IAAK,KACH,OAAO0B,GAAI93C,EAAGC,EAAGm2C,CAAK,EAExB,IAAK,IACH,OAAOoB,GAAGx3C,EAAGC,EAAGm2C,CAAK,EAEvB,IAAK,KACH,OAAO4B,GAAIh4C,EAAGC,EAAGm2C,CAAK,EAExB,IAAK,IACH,OAAOsB,GAAG13C,EAAGC,EAAGm2C,CAAK,EAEvB,IAAK,KACH,OAAO8B,GAAIl4C,EAAGC,EAAGm2C,CAAK,EAExB,QACE,MAAM,IAAI,UAAU,qBAAqBiC,CAAE,EAAE,CACnD,CACA,EACA,IAAAC,GAAiBF,GCnDjB,MAAMzD,GAAS9+B,GACT2T,GAAQ5P,GACR,CAAE,OAAQmjB,GAAI,EAAAxE,IAAM1e,GAEpBoQ,GAAS,CAACoD,EAASzU,IAAY,CACnC,GAAIyU,aAAmBsnB,GACrB,OAAOtnB,EAOT,GAJI,OAAOA,GAAY,WACrBA,EAAU,OAAOA,CAAO,GAGtB,OAAOA,GAAY,SACrB,OAAO,KAGTzU,EAAUA,GAAW,CAAA,EAErB,IAAIrK,EAAQ,KACZ,GAAI,CAACqK,EAAQ,IACXrK,EAAQ8e,EAAQ,MAAMzU,EAAQ,kBAAoBmkB,GAAGxE,GAAE,UAAU,EAAIwE,GAAGxE,GAAE,MAAM,CAAC,MAC5E,CAUL,MAAMggB,EAAiB3/B,EAAQ,kBAAoBmkB,GAAGxE,GAAE,aAAa,EAAIwE,GAAGxE,GAAE,SAAS,EACvF,IAAI6U,EACJ,MAAQA,EAAOmL,EAAe,KAAKlrB,CAAO,KACrC,CAAC9e,GAASA,EAAM,MAAQA,EAAM,CAAC,EAAE,SAAW8e,EAAQ,UAEnD,CAAC9e,GACC6+B,EAAK,MAAQA,EAAK,CAAC,EAAE,SAAW7+B,EAAM,MAAQA,EAAM,CAAC,EAAE,UAC3DA,EAAQ6+B,GAEVmL,EAAe,UAAYnL,EAAK,MAAQA,EAAK,CAAC,EAAE,OAASA,EAAK,CAAC,EAAE,OAGnEmL,EAAe,UAAY,EAC/B,CAEE,GAAIhqC,IAAU,KACZ,OAAO,KAGT,MAAMq2B,EAAQr2B,EAAM,CAAC,EACfs2B,EAAQt2B,EAAM,CAAC,GAAK,IACpB4H,EAAQ5H,EAAM,CAAC,GAAK,IACpB0mC,EAAar8B,EAAQ,mBAAqBrK,EAAM,CAAC,EAAI,IAAIA,EAAM,CAAC,CAAC,GAAK,GACtEiqC,EAAQ5/B,EAAQ,mBAAqBrK,EAAM,CAAC,EAAI,IAAIA,EAAM,CAAC,CAAC,GAAK,GAEvE,OAAOib,GAAM,GAAGob,CAAK,IAAIC,CAAK,IAAI1uB,CAAK,GAAG8+B,CAAU,GAAGuD,CAAK,GAAI5/B,CAAO,CACzE,EACA,IAAA6/B,GAAiBxuB,GC3DjB,MAAMyuB,EAAS,CACb,aAAe,CACb,KAAK,IAAM,IACX,KAAK,IAAM,IAAI,GACnB,CAEE,IAAKjqC,EAAK,CACR,MAAMpJ,EAAQ,KAAK,IAAI,IAAIoJ,CAAG,EAC9B,GAAIpJ,IAAU,OAIZ,YAAK,IAAI,OAAOoJ,CAAG,EACnB,KAAK,IAAI,IAAIA,EAAKpJ,CAAK,EAChBA,CAEb,CAEE,OAAQoJ,EAAK,CACX,OAAO,KAAK,IAAI,OAAOA,CAAG,CAC9B,CAEE,IAAKA,EAAKpJ,EAAO,CAGf,GAAI,CAFY,KAAK,OAAOoJ,CAAG,GAEfpJ,IAAU,OAAW,CAEnC,GAAI,KAAK,IAAI,MAAQ,KAAK,IAAK,CAC7B,MAAMszC,EAAW,KAAK,IAAI,KAAI,EAAG,KAAI,EAAG,MACxC,KAAK,OAAOA,CAAQ,CAC5B,CAEM,KAAK,IAAI,IAAIlqC,EAAKpJ,CAAK,CAC7B,CAEI,OAAO,IACX,CACA,CAEA,IAAAuzC,GAAiBF,4CCvCjB,MAAMG,EAAmB,OAGzB,MAAMC,CAAM,CACV,YAAaC,EAAOngC,EAAS,CAG3B,GAFAA,EAAUs7B,EAAat7B,CAAO,EAE1BmgC,aAAiBD,EACnB,OACEC,EAAM,QAAU,CAAC,CAACngC,EAAQ,OAC1BmgC,EAAM,oBAAsB,CAAC,CAACngC,EAAQ,kBAE/BmgC,EAEA,IAAID,EAAMC,EAAM,IAAKngC,CAAO,EAIvC,GAAImgC,aAAiBC,EAEnB,YAAK,IAAMD,EAAM,MACjB,KAAK,IAAM,CAAC,CAACA,CAAK,CAAC,EACnB,KAAK,UAAY,OACV,KAsBT,GAnBA,KAAK,QAAUngC,EACf,KAAK,MAAQ,CAAC,CAACA,EAAQ,MACvB,KAAK,kBAAoB,CAAC,CAACA,EAAQ,kBAKnC,KAAK,IAAMmgC,EAAM,KAAI,EAAG,QAAQF,EAAkB,GAAG,EAGrD,KAAK,IAAM,KAAK,IACb,MAAM,IAAI,EAEV,IAAIlwC,GAAK,KAAK,WAAWA,EAAE,KAAI,CAAE,CAAC,EAIlC,OAAOlH,GAAKA,EAAE,MAAM,EAEnB,CAAC,KAAK,IAAI,OACZ,MAAM,IAAI,UAAU,yBAAyB,KAAK,GAAG,EAAE,EAIzD,GAAI,KAAK,IAAI,OAAS,EAAG,CAEvB,MAAMysC,EAAQ,KAAK,IAAI,CAAC,EAExB,GADA,KAAK,IAAM,KAAK,IAAI,OAAOzsC,GAAK,CAACw3C,EAAUx3C,EAAE,CAAC,CAAC,CAAC,EAC5C,KAAK,IAAI,SAAW,EACtB,KAAK,IAAM,CAACysC,CAAK,UACR,KAAK,IAAI,OAAS,GAE3B,UAAWzsC,KAAK,KAAK,IACnB,GAAIA,EAAE,SAAW,GAAKy3C,EAAMz3C,EAAE,CAAC,CAAC,EAAG,CACjC,KAAK,IAAM,CAACA,CAAC,EACb,KACZ,EAGA,CAEI,KAAK,UAAY,MACrB,CAEE,IAAI,OAAS,CACX,GAAI,KAAK,YAAc,OAAW,CAChC,KAAK,UAAY,GACjB,QAAS+F,EAAI,EAAGA,EAAI,KAAK,IAAI,OAAQA,IAAK,CACpCA,EAAI,IACN,KAAK,WAAa,MAEpB,MAAM2xC,EAAQ,KAAK,IAAI3xC,CAAC,EACxB,QAASkmB,EAAI,EAAGA,EAAIyrB,EAAM,OAAQzrB,IAC5BA,EAAI,IACN,KAAK,WAAa,KAEpB,KAAK,WAAayrB,EAAMzrB,CAAC,EAAE,SAAQ,EAAG,KAAI,CAEpD,CACA,CACI,OAAO,KAAK,SAChB,CAEE,QAAU,CACR,OAAO,KAAK,KAChB,CAEE,UAAY,CACV,OAAO,KAAK,KAChB,CAEE,WAAYqrB,EAAO,CAMjB,MAAMK,IAFH,KAAK,QAAQ,mBAAqBC,IAClC,KAAK,QAAQ,OAASC,IACE,IAAMP,EAC3BQ,EAASC,EAAM,IAAIJ,CAAO,EAChC,GAAIG,EACF,OAAOA,EAGT,MAAMnD,EAAQ,KAAK,QAAQ,MAErBqD,EAAKrD,EAAQrZ,EAAGxE,EAAE,gBAAgB,EAAIwE,EAAGxE,EAAE,WAAW,EAC5DwgB,EAAQA,EAAM,QAAQU,EAAIC,EAAc,KAAK,QAAQ,iBAAiB,CAAC,EACvEn/B,EAAM,iBAAkBw+B,CAAK,EAG7BA,EAAQA,EAAM,QAAQhc,EAAGxE,EAAE,cAAc,EAAGohB,CAAqB,EACjEp/B,EAAM,kBAAmBw+B,CAAK,EAG9BA,EAAQA,EAAM,QAAQhc,EAAGxE,EAAE,SAAS,EAAGqhB,CAAgB,EACvDr/B,EAAM,aAAcw+B,CAAK,EAGzBA,EAAQA,EAAM,QAAQhc,EAAGxE,EAAE,SAAS,EAAGshB,CAAgB,EACvDt/B,EAAM,aAAcw+B,CAAK,EAKzB,IAAIe,EAAYf,EACb,MAAM,GAAG,EACT,IAAIgB,GAAQC,EAAgBD,EAAM,KAAK,OAAO,CAAC,EAC/C,KAAK,GAAG,EACR,MAAM,KAAK,EAEX,IAAIA,GAAQE,EAAYF,EAAM,KAAK,OAAO,CAAC,EAE1C3D,IAEF0D,EAAYA,EAAU,OAAOC,IAC3Bx/B,EAAM,uBAAwBw/B,EAAM,KAAK,OAAO,EACzC,CAAC,CAACA,EAAK,MAAMhd,EAAGxE,EAAE,eAAe,CAAC,EAC1C,GAEHhe,EAAM,aAAcu/B,CAAS,EAK7B,MAAMI,EAAW,IAAI,IACfC,EAAcL,EAAU,IAAIC,GAAQ,IAAIf,EAAWe,EAAM,KAAK,OAAO,CAAC,EAC5E,UAAWA,KAAQI,EAAa,CAC9B,GAAIlB,EAAUc,CAAI,EAChB,MAAO,CAACA,CAAI,EAEdG,EAAS,IAAIH,EAAK,MAAOA,CAAI,CACnC,CACQG,EAAS,KAAO,GAAKA,EAAS,IAAI,EAAE,GACtCA,EAAS,OAAO,EAAE,EAGpB,MAAMhvC,GAAS,CAAC,GAAGgvC,EAAS,OAAM,CAAE,EACpC,OAAAV,EAAM,IAAIJ,EAASluC,EAAM,EAClBA,EACX,CAEE,WAAY6tC,EAAOngC,EAAS,CAC1B,GAAI,EAAEmgC,aAAiBD,GACrB,MAAM,IAAI,UAAU,qBAAqB,EAG3C,OAAO,KAAK,IAAI,KAAMsB,GAElBC,EAAcD,EAAiBxhC,CAAO,GACtCmgC,EAAM,IAAI,KAAMuB,GAEZD,EAAcC,EAAkB1hC,CAAO,GACvCwhC,EAAgB,MAAOG,GACdD,EAAiB,MAAOE,GACtBD,EAAe,WAAWC,EAAiB5hC,CAAO,CAC1D,CACF,CAEJ,CAEJ,CACL,CAGE,KAAMyU,EAAS,CACb,GAAI,CAACA,EACH,MAAO,GAGT,GAAI,OAAOA,GAAY,SACrB,GAAI,CACFA,EAAU,IAAIsnB,EAAOtnB,EAAS,KAAK,OAAO,CAClD,MAAmB,CACX,MAAO,EACf,CAGI,QAAS7lB,EAAI,EAAGA,EAAI,KAAK,IAAI,OAAQA,IACnC,GAAIizC,EAAQ,KAAK,IAAIjzC,CAAC,EAAG6lB,EAAS,KAAK,OAAO,EAC5C,MAAO,GAGX,MAAO,EACX,EAGA0rB,GAAiBD,EAEjB,MAAM4B,EAAM7kC,GACN2jC,EAAQ,IAAIkB,EAEZxG,EAAet6B,GACfo/B,EAAan/B,GAAA,EACbU,EAAQT,GACR66B,EAAS36B,GACT,CACJ,OAAQ+iB,EACR,EAAAxE,EACA,sBAAAohB,EACA,iBAAAC,EACA,iBAAAC,CACF,EAAI/+B,GACE,CAAE,wBAAAu+B,EAAyB,WAAAC,GAAe5zB,GAE1CuzB,EAAYx3C,GAAKA,EAAE,QAAU,WAC7By3C,EAAQz3C,GAAKA,EAAE,QAAU,GAIzB44C,EAAgB,CAACF,EAAavhC,IAAY,CAC9C,IAAI1N,EAAS,GACb,MAAMyvC,EAAuBR,EAAY,MAAK,EAC9C,IAAIS,EAAiBD,EAAqB,IAAG,EAE7C,KAAOzvC,GAAUyvC,EAAqB,QACpCzvC,EAASyvC,EAAqB,MAAOE,GAC5BD,EAAe,WAAWC,EAAiBjiC,CAAO,CAC1D,EAEDgiC,EAAiBD,EAAqB,IAAG,EAG3C,OAAOzvC,CACT,EAKM8uC,EAAkB,CAACD,EAAMnhC,KAC7BmhC,EAAOA,EAAK,QAAQhd,EAAGxE,EAAE,KAAK,EAAG,EAAE,EACnChe,EAAM,OAAQw/B,EAAMnhC,CAAO,EAC3BmhC,EAAOe,GAAcf,EAAMnhC,CAAO,EAClC2B,EAAM,QAASw/B,CAAI,EACnBA,EAAOgB,EAAchB,EAAMnhC,CAAO,EAClC2B,EAAM,SAAUw/B,CAAI,EACpBA,EAAOiB,GAAejB,EAAMnhC,CAAO,EACnC2B,EAAM,SAAUw/B,CAAI,EACpBA,EAAOkB,EAAalB,EAAMnhC,CAAO,EACjC2B,EAAM,QAASw/B,CAAI,EACZA,GAGHmB,EAAM5vC,GAAM,CAACA,GAAMA,EAAG,YAAW,IAAO,KAAOA,IAAO,IAStDyvC,EAAgB,CAAChB,EAAMnhC,IACpBmhC,EACJ,KAAI,EACJ,MAAM,KAAK,EACX,IAAKt4C,GAAM05C,EAAa15C,EAAGmX,CAAO,CAAC,EACnC,KAAK,GAAG,EAGPuiC,EAAe,CAACpB,EAAMnhC,IAAY,CACtC,MAAMjQ,EAAIiQ,EAAQ,MAAQmkB,EAAGxE,EAAE,UAAU,EAAIwE,EAAGxE,EAAE,KAAK,EACvD,OAAOwhB,EAAK,QAAQpxC,EAAG,CAACtE,EAAG+2C,EAAGr7C,EAAGkB,EAAGo6C,IAAO,CACzC9gC,EAAM,QAASw/B,EAAM11C,EAAG+2C,EAAGr7C,EAAGkB,EAAGo6C,CAAE,EACnC,IAAIhjC,EAEJ,OAAI6iC,EAAIE,CAAC,EACP/iC,EAAM,GACG6iC,EAAIn7C,CAAC,EACdsY,EAAM,KAAK+iC,CAAC,SAAS,CAACA,EAAI,CAAC,SAClBF,EAAIj6C,CAAC,EAEdoX,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,OAAOq7C,CAAC,IAAI,CAACr7C,EAAI,CAAC,OAC1Bs7C,GACT9gC,EAAM,kBAAmB8gC,CAAE,EAC3BhjC,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,IAAIkB,CAAC,IAAIo6C,CAChC,KAAWD,CAAC,IAAI,CAACr7C,EAAI,CAAC,QAGhBsY,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,IAAIkB,CAC3B,KAAWm6C,CAAC,IAAI,CAACr7C,EAAI,CAAC,OAGlBwa,EAAM,eAAgBlC,CAAG,EAClBA,CACX,CAAG,CACH,EAUMyiC,GAAgB,CAACf,EAAMnhC,IACpBmhC,EACJ,KAAI,EACJ,MAAM,KAAK,EACX,IAAKt4C,GAAM65C,EAAa75C,EAAGmX,CAAO,CAAC,EACnC,KAAK,GAAG,EAGP0iC,EAAe,CAACvB,EAAMnhC,IAAY,CACtC2B,EAAM,QAASw/B,EAAMnhC,CAAO,EAC5B,MAAMjQ,EAAIiQ,EAAQ,MAAQmkB,EAAGxE,EAAE,UAAU,EAAIwE,EAAGxE,EAAE,KAAK,EACjDgjB,EAAI3iC,EAAQ,kBAAoB,KAAO,GAC7C,OAAOmhC,EAAK,QAAQpxC,EAAG,CAACtE,EAAG+2C,EAAGr7C,EAAGkB,EAAGo6C,IAAO,CACzC9gC,EAAM,QAASw/B,EAAM11C,EAAG+2C,EAAGr7C,EAAGkB,EAAGo6C,CAAE,EACnC,IAAIhjC,EAEJ,OAAI6iC,EAAIE,CAAC,EACP/iC,EAAM,GACG6iC,EAAIn7C,CAAC,EACdsY,EAAM,KAAK+iC,CAAC,OAAOG,CAAC,KAAK,CAACH,EAAI,CAAC,SACtBF,EAAIj6C,CAAC,EACVm6C,IAAM,IACR/iC,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,KAAKw7C,CAAC,KAAKH,CAAC,IAAI,CAACr7C,EAAI,CAAC,OAEvCsY,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,KAAKw7C,CAAC,KAAK,CAACH,EAAI,CAAC,SAE3BC,GACT9gC,EAAM,kBAAmB8gC,CAAE,EACvBD,IAAM,IACJr7C,IAAM,IACRsY,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,IAAIkB,CAAC,IAAIo6C,CACpC,KAAeD,CAAC,IAAIr7C,CAAC,IAAI,CAACkB,EAAI,CAAC,KAErBoX,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,IAAIkB,CAAC,IAAIo6C,CACpC,KAAeD,CAAC,IAAI,CAACr7C,EAAI,CAAC,OAGlBsY,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,IAAIkB,CAAC,IAAIo6C,MACrB,CAACD,EAAI,CAAC,WAGb7gC,EAAM,OAAO,EACT6gC,IAAM,IACJr7C,IAAM,IACRsY,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,IAAIkB,CAC/B,GAAas6C,CAAC,KAAKH,CAAC,IAAIr7C,CAAC,IAAI,CAACkB,EAAI,CAAC,KAEzBoX,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,IAAIkB,CAC/B,GAAas6C,CAAC,KAAKH,CAAC,IAAI,CAACr7C,EAAI,CAAC,OAGtBsY,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,IAAIkB,MAChB,CAACm6C,EAAI,CAAC,UAIf7gC,EAAM,eAAgBlC,CAAG,EAClBA,CACX,CAAG,CACH,EAEM2iC,GAAiB,CAACjB,EAAMnhC,KAC5B2B,EAAM,iBAAkBw/B,EAAMnhC,CAAO,EAC9BmhC,EACJ,MAAM,KAAK,EACX,IAAKt4C,GAAM+5C,EAAc/5C,EAAGmX,CAAO,CAAC,EACpC,KAAK,GAAG,GAGP4iC,EAAgB,CAACzB,EAAMnhC,IAAY,CACvCmhC,EAAOA,EAAK,KAAI,EAChB,MAAMpxC,EAAIiQ,EAAQ,MAAQmkB,EAAGxE,EAAE,WAAW,EAAIwE,EAAGxE,EAAE,MAAM,EACzD,OAAOwhB,EAAK,QAAQpxC,EAAG,CAAC0P,EAAKojC,EAAML,EAAGr7C,EAAGkB,EAAGo6C,IAAO,CACjD9gC,EAAM,SAAUw/B,EAAM1hC,EAAKojC,EAAML,EAAGr7C,EAAGkB,EAAGo6C,CAAE,EAC5C,MAAMK,EAAKR,EAAIE,CAAC,EACVO,GAAKD,GAAMR,EAAIn7C,CAAC,EAChB67C,EAAKD,IAAMT,EAAIj6C,CAAC,EAChB46C,GAAOD,EAEb,OAAIH,IAAS,KAAOI,KAClBJ,EAAO,IAKTJ,EAAKziC,EAAQ,kBAAoB,KAAO,GAEpC8iC,EACED,IAAS,KAAOA,IAAS,IAE3BpjC,EAAM,WAGNA,EAAM,IAECojC,GAAQI,IAGbF,KACF57C,EAAI,GAENkB,EAAI,EAEAw6C,IAAS,KAGXA,EAAO,KACHE,IACFP,EAAI,CAACA,EAAI,EACTr7C,EAAI,EACJkB,EAAI,IAEJlB,EAAI,CAACA,EAAI,EACTkB,EAAI,IAEGw6C,IAAS,OAGlBA,EAAO,IACHE,GACFP,EAAI,CAACA,EAAI,EAETr7C,EAAI,CAACA,EAAI,GAIT07C,IAAS,MACXJ,EAAK,MAGPhjC,EAAM,GAAGojC,EAAOL,CAAC,IAAIr7C,CAAC,IAAIkB,CAAC,GAAGo6C,CAAE,IACvBM,GACTtjC,EAAM,KAAK+iC,CAAC,OAAOC,CAAE,KAAK,CAACD,EAAI,CAAC,SACvBQ,IACTvjC,EAAM,KAAK+iC,CAAC,IAAIr7C,CAAC,KAAKs7C,CAC5B,KAAWD,CAAC,IAAI,CAACr7C,EAAI,CAAC,QAGlBwa,EAAM,gBAAiBlC,CAAG,EAEnBA,CACX,CAAG,CACH,EAIM4iC,EAAe,CAAClB,EAAMnhC,KAC1B2B,EAAM,eAAgBw/B,EAAMnhC,CAAO,EAE5BmhC,EACJ,KAAI,EACJ,QAAQhd,EAAGxE,EAAE,IAAI,EAAG,EAAE,GAGrB0hB,EAAc,CAACF,EAAMnhC,KACzB2B,EAAM,cAAew/B,EAAMnhC,CAAO,EAC3BmhC,EACJ,KAAI,EACJ,QAAQhd,EAAGnkB,EAAQ,kBAAoB2f,EAAE,QAAUA,EAAE,IAAI,EAAG,EAAE,GAS7DmhB,EAAgBoC,GAAS,CAACC,EAC9B9kC,EAAM+kC,EAAIjtC,EAAIktC,EAAIC,EAAKC,EACvBjlC,EAAIklC,EAAIC,GAAIC,EAAIC,MACZrB,EAAIc,CAAE,EACR/kC,EAAO,GACEikC,EAAInsC,CAAE,EACfkI,EAAO,KAAK+kC,CAAE,OAAOF,EAAQ,KAAO,EAAE,GAC7BZ,EAAIe,CAAE,EACfhlC,EAAO,KAAK+kC,CAAE,IAAIjtC,CAAE,KAAK+sC,EAAQ,KAAO,EAAE,GACjCI,EACTjlC,EAAO,KAAKA,CAAI,GAEhBA,EAAO,KAAKA,CAAI,GAAG6kC,EAAQ,KAAO,EAAE,GAGlCZ,EAAIkB,CAAE,EACRllC,EAAK,GACIgkC,EAAImB,EAAE,EACfnlC,EAAK,IAAI,CAACklC,EAAK,CAAC,SACPlB,EAAIoB,CAAE,EACfplC,EAAK,IAAIklC,CAAE,IAAI,CAACC,GAAK,CAAC,OACbE,GACTrlC,EAAK,KAAKklC,CAAE,IAAIC,EAAE,IAAIC,CAAE,IAAIC,EAAG,GACtBT,EACT5kC,EAAK,IAAIklC,CAAE,IAAIC,EAAE,IAAI,CAACC,EAAK,CAAC,KAE5BplC,EAAK,KAAKA,CAAE,GAGP,GAAGD,CAAI,IAAIC,CAAE,GAAG,KAAI,GAGvBujC,EAAU,CAAChY,EAAKpV,EAASzU,IAAY,CACzC,QAASpR,EAAI,EAAGA,EAAIi7B,EAAI,OAAQj7B,IAC9B,GAAI,CAACi7B,EAAIj7B,CAAC,EAAE,KAAK6lB,CAAO,EACtB,MAAO,GAIX,GAAIA,EAAQ,WAAW,QAAU,CAACzU,EAAQ,kBAAmB,CAM3D,QAASpR,EAAI,EAAGA,EAAIi7B,EAAI,OAAQj7B,IAE9B,GADA+S,EAAMkoB,EAAIj7B,CAAC,EAAE,MAAM,EACfi7B,EAAIj7B,CAAC,EAAE,SAAWwxC,EAAW,KAI7BvW,EAAIj7B,CAAC,EAAE,OAAO,WAAW,OAAS,EAAG,CACvC,MAAMg1C,EAAU/Z,EAAIj7B,CAAC,EAAE,OACvB,GAAIg1C,EAAQ,QAAUnvB,EAAQ,OAC1BmvB,EAAQ,QAAUnvB,EAAQ,OAC1BmvB,EAAQ,QAAUnvB,EAAQ,MAC5B,MAAO,EAEjB,CAII,MAAO,EACX,CAEE,MAAO,EACT,yDC1iBA,MAAMovB,EAAM,OAAO,YAAY,EAE/B,MAAMzD,CAAW,CACf,WAAW,KAAO,CAChB,OAAOyD,CACX,CAEE,YAAa1C,EAAMnhC,EAAS,CAG1B,GAFAA,EAAUs7B,EAAat7B,CAAO,EAE1BmhC,aAAgBf,EAAY,CAC9B,GAAIe,EAAK,QAAU,CAAC,CAACnhC,EAAQ,MAC3B,OAAOmhC,EAEPA,EAAOA,EAAK,KAEpB,CAEIA,EAAOA,EAAK,KAAI,EAAG,MAAM,KAAK,EAAE,KAAK,GAAG,EACxCx/B,EAAM,aAAcw/B,EAAMnhC,CAAO,EACjC,KAAK,QAAUA,EACf,KAAK,MAAQ,CAAC,CAACA,EAAQ,MACvB,KAAK,MAAMmhC,CAAI,EAEX,KAAK,SAAW0C,EAClB,KAAK,MAAQ,GAEb,KAAK,MAAQ,KAAK,SAAW,KAAK,OAAO,QAG3CliC,EAAM,OAAQ,IAAI,CACtB,CAEE,MAAOw/B,EAAM,CACX,MAAMpxC,EAAI,KAAK,QAAQ,MAAQo0B,EAAGxE,EAAE,eAAe,EAAIwE,EAAGxE,EAAE,UAAU,EAChEx4B,EAAIg6C,EAAK,MAAMpxC,CAAC,EAEtB,GAAI,CAAC5I,EACH,MAAM,IAAI,UAAU,uBAAuBg6C,CAAI,EAAE,EAGnD,KAAK,SAAWh6C,EAAE,CAAC,IAAM,OAAYA,EAAE,CAAC,EAAI,GACxC,KAAK,WAAa,MACpB,KAAK,SAAW,IAIbA,EAAE,CAAC,EAGN,KAAK,OAAS,IAAI40C,EAAO50C,EAAE,CAAC,EAAG,KAAK,QAAQ,KAAK,EAFjD,KAAK,OAAS08C,CAIpB,CAEE,UAAY,CACV,OAAO,KAAK,KAChB,CAEE,KAAMpvB,EAAS,CAGb,GAFA9S,EAAM,kBAAmB8S,EAAS,KAAK,QAAQ,KAAK,EAEhD,KAAK,SAAWovB,GAAOpvB,IAAYovB,EACrC,MAAO,GAGT,GAAI,OAAOpvB,GAAY,SACrB,GAAI,CACFA,EAAU,IAAIsnB,EAAOtnB,EAAS,KAAK,OAAO,CAClD,MAAmB,CACX,MAAO,EACf,CAGI,OAAO+qB,EAAI/qB,EAAS,KAAK,SAAU,KAAK,OAAQ,KAAK,OAAO,CAChE,CAEE,WAAY0sB,EAAMnhC,EAAS,CACzB,GAAI,EAAEmhC,aAAgBf,GACpB,MAAM,IAAI,UAAU,0BAA0B,EAGhD,OAAI,KAAK,WAAa,GAChB,KAAK,QAAU,GACV,GAEF,IAAIF,EAAMiB,EAAK,MAAOnhC,CAAO,EAAE,KAAK,KAAK,KAAK,EAC5CmhC,EAAK,WAAa,GACvBA,EAAK,QAAU,GACV,GAEF,IAAIjB,EAAM,KAAK,MAAOlgC,CAAO,EAAE,KAAKmhC,EAAK,MAAM,GAGxDnhC,EAAUs7B,EAAat7B,CAAO,EAG1BA,EAAQ,oBACT,KAAK,QAAU,YAAcmhC,EAAK,QAAU,aAG3C,CAACnhC,EAAQ,oBACV,KAAK,MAAM,WAAW,QAAQ,GAAKmhC,EAAK,MAAM,WAAW,QAAQ,GAC3D,GAIL,QAAK,SAAS,WAAW,GAAG,GAAKA,EAAK,SAAS,WAAW,GAAG,GAI7D,KAAK,SAAS,WAAW,GAAG,GAAKA,EAAK,SAAS,WAAW,GAAG,GAK9D,KAAK,OAAO,UAAYA,EAAK,OAAO,SACrC,KAAK,SAAS,SAAS,GAAG,GAAKA,EAAK,SAAS,SAAS,GAAG,GAIvD3B,EAAI,KAAK,OAAQ,IAAK2B,EAAK,OAAQnhC,CAAO,GAC5C,KAAK,SAAS,WAAW,GAAG,GAAKmhC,EAAK,SAAS,WAAW,GAAG,GAI3D3B,EAAI,KAAK,OAAQ,IAAK2B,EAAK,OAAQnhC,CAAO,GAC5C,KAAK,SAAS,WAAW,GAAG,GAAKmhC,EAAK,SAAS,WAAW,GAAG,GAInE,EAGA2C,GAAiB1D,EAEjB,MAAM9E,EAAer+B,GACf,CAAE,OAAQknB,EAAI,EAAAxE,GAAM3e,GACpBw+B,EAAMv+B,GACNU,EAAQT,GACR66B,EAAS36B,GACT8+B,EAAQh+B,GAAA,YC5Id,MAAMg+B,GAAQjjC,GAAA,EACR8mC,GAAY,CAACtvB,EAAS0rB,EAAOngC,IAAY,CAC7C,GAAI,CACFmgC,EAAQ,IAAID,GAAMC,EAAOngC,CAAO,CACpC,MAAe,CACX,MAAO,EACX,CACE,OAAOmgC,EAAM,KAAK1rB,CAAO,CAC3B,EACA,IAAAuvB,GAAiBD,GCTjB,MAAM7D,GAAQjjC,GAAA,EAGRgnC,GAAgB,CAAC9D,EAAOngC,IAC5B,IAAIkgC,GAAMC,EAAOngC,CAAO,EAAE,IACvB,IAAImhC,GAAQA,EAAK,IAAIt4C,GAAKA,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,KAAI,EAAG,MAAM,GAAG,CAAC,EAEnE,IAAAq7C,GAAiBD,GCPjB,MAAMlI,GAAS9+B,GACTijC,GAAQl/B,GAAA,EAERmjC,GAAgB,CAACC,EAAUjE,EAAOngC,IAAY,CAClD,IAAIikB,EAAM,KACNogB,EAAQ,KACRC,EAAW,KACf,GAAI,CACFA,EAAW,IAAIpE,GAAMC,EAAOngC,CAAO,CACvC,MAAe,CACX,OAAO,IACX,CACE,OAAAokC,EAAS,QAAShyB,GAAM,CAClBkyB,EAAS,KAAKlyB,CAAC,IAEb,CAAC6R,GAAOogB,EAAM,QAAQjyB,CAAC,IAAM,MAE/B6R,EAAM7R,EACNiyB,EAAQ,IAAItI,GAAO9X,EAAKjkB,CAAO,EAGvC,CAAG,EACMikB,CACT,EACA,IAAAsgB,GAAiBJ,GCxBjB,MAAMpI,GAAS9+B,GACTijC,GAAQl/B,GAAA,EACRwjC,GAAgB,CAACJ,EAAUjE,EAAOngC,IAAY,CAClD,IAAIuU,EAAM,KACNkwB,EAAQ,KACRH,EAAW,KACf,GAAI,CACFA,EAAW,IAAIpE,GAAMC,EAAOngC,CAAO,CACvC,MAAe,CACX,OAAO,IACX,CACE,OAAAokC,EAAS,QAAShyB,GAAM,CAClBkyB,EAAS,KAAKlyB,CAAC,IAEb,CAACmC,GAAOkwB,EAAM,QAAQryB,CAAC,IAAM,KAE/BmC,EAAMnC,EACNqyB,EAAQ,IAAI1I,GAAOxnB,EAAKvU,CAAO,EAGvC,CAAG,EACMuU,CACT,EACA,IAAAmwB,GAAiBF,GCvBjB,MAAMzI,GAAS9+B,GACTijC,GAAQl/B,GAAA,EACR49B,GAAK39B,GAEL0jC,GAAa,CAACxE,EAAO3C,IAAU,CACnC2C,EAAQ,IAAID,GAAMC,EAAO3C,CAAK,EAE9B,IAAIoH,EAAS,IAAI7I,GAAO,OAAO,EAM/B,GALIoE,EAAM,KAAKyE,CAAM,IAIrBA,EAAS,IAAI7I,GAAO,SAAS,EACzBoE,EAAM,KAAKyE,CAAM,GACnB,OAAOA,EAGTA,EAAS,KACT,QAASh2C,EAAI,EAAGA,EAAIuxC,EAAM,IAAI,OAAQ,EAAEvxC,EAAG,CACzC,MAAM2yC,EAAcpB,EAAM,IAAIvxC,CAAC,EAE/B,IAAIi2C,EAAS,KACbtD,EAAY,QAASuC,GAAe,CAElC,MAAMgB,EAAU,IAAI/I,GAAO+H,EAAW,OAAO,OAAO,EACpD,OAAQA,EAAW,SAAQ,CACzB,IAAK,IACCgB,EAAQ,WAAW,SAAW,EAChCA,EAAQ,QAERA,EAAQ,WAAW,KAAK,CAAC,EAE3BA,EAAQ,IAAMA,EAAQ,OAAM,EAE9B,IAAK,GACL,IAAK,MACC,CAACD,GAAUjG,GAAGkG,EAASD,CAAM,KAC/BA,EAASC,GAEX,MACF,IAAK,IACL,IAAK,KAEH,MAEF,QACE,MAAM,IAAI,MAAM,yBAAyBhB,EAAW,QAAQ,EAAE,CACxE,CACA,CAAK,EACGe,IAAW,CAACD,GAAUhG,GAAGgG,EAAQC,CAAM,KACzCD,EAASC,EAEf,CAEE,OAAID,GAAUzE,EAAM,KAAKyE,CAAM,EACtBA,EAGF,IACT,EACA,IAAAG,GAAiBJ,GC5DjB,MAAMzE,GAAQjjC,GAAA,EACR+nC,GAAa,CAAC7E,EAAOngC,IAAY,CACrC,GAAI,CAGF,OAAO,IAAIkgC,GAAMC,EAAOngC,CAAO,EAAE,OAAS,GAC9C,MAAe,CACX,OAAO,IACX,CACA,EACA,IAAAy8B,GAAiBuI,GCVjB,MAAMjJ,GAAS9+B,GACTmjC,GAAap/B,GAAA,EACb,CAAA,IAAE6iC,EAAG,EAAKzD,GACVF,GAAQj/B,GAAA,EACR8iC,GAAY7iC,GACZ09B,GAAKx9B,GACL09B,GAAK58B,GACLo9B,GAAMxyB,GACNsyB,GAAMryB,GAENk4B,GAAU,CAACxwB,EAAS0rB,EAAO+E,EAAMllC,IAAY,CACjDyU,EAAU,IAAIsnB,GAAOtnB,EAASzU,CAAO,EACrCmgC,EAAQ,IAAID,GAAMC,EAAOngC,CAAO,EAEhC,IAAImlC,EAAMC,EAAOC,EAAMlE,EAAMmE,EAC7B,OAAQJ,EAAI,CACV,IAAK,IACHC,EAAOvG,GACPwG,EAAQ9F,GACR+F,EAAOvG,GACPqC,EAAO,IACPmE,EAAQ,KACR,MACF,IAAK,IACHH,EAAOrG,GACPsG,EAAQhG,GACRiG,EAAOzG,GACPuC,EAAO,IACPmE,EAAQ,KACR,MACF,QACE,MAAM,IAAI,UAAU,uCAAuC,CACjE,CAGE,GAAIvB,GAAUtvB,EAAS0rB,EAAOngC,CAAO,EACnC,MAAO,GAMT,QAASpR,EAAI,EAAGA,EAAIuxC,EAAM,IAAI,OAAQ,EAAEvxC,EAAG,CACzC,MAAM2yC,EAAcpB,EAAM,IAAIvxC,CAAC,EAE/B,IAAI22C,EAAO,KACPC,EAAM,KAuBV,GArBAjE,EAAY,QAASuC,GAAe,CAC9BA,EAAW,SAAWD,KACxBC,EAAa,IAAI1D,GAAW,SAAS,GAEvCmF,EAAOA,GAAQzB,EACf0B,EAAMA,GAAO1B,EACTqB,EAAKrB,EAAW,OAAQyB,EAAK,OAAQvlC,CAAO,EAC9CulC,EAAOzB,EACEuB,EAAKvB,EAAW,OAAQ0B,EAAI,OAAQxlC,CAAO,IACpDwlC,EAAM1B,EAEd,CAAK,EAIGyB,EAAK,WAAapE,GAAQoE,EAAK,WAAaD,IAM3C,CAACE,EAAI,UAAYA,EAAI,WAAarE,IACnCiE,EAAM3wB,EAAS+wB,EAAI,MAAM,EAC3B,MAAO,GACF,GAAIA,EAAI,WAAaF,GAASD,EAAK5wB,EAAS+wB,EAAI,MAAM,EAC3D,MAAO,EAEb,CACE,MAAO,EACT,EAEA,IAAAC,GAAiBR,GC9EjB,MAAMA,GAAUhoC,GACVyoC,GAAM,CAACjxB,EAAS0rB,EAAOngC,IAAYilC,GAAQxwB,EAAS0rB,EAAO,IAAKngC,CAAO,EAC7E,IAAA2lC,GAAiBD,GCHjB,MAAMT,GAAUhoC,GAEV2oC,GAAM,CAACnxB,EAAS0rB,EAAOngC,IAAYilC,GAAQxwB,EAAS0rB,EAAO,IAAKngC,CAAO,EAC7E,IAAA6lC,GAAiBD,GCHjB,MAAM1F,GAAQjjC,GAAA,EACR6oC,GAAa,CAACC,EAAIC,EAAIhmC,KAC1B+lC,EAAK,IAAI7F,GAAM6F,EAAI/lC,CAAO,EAC1BgmC,EAAK,IAAI9F,GAAM8F,EAAIhmC,CAAO,EACnB+lC,EAAG,WAAWC,EAAIhmC,CAAO,GAElC,IAAAimC,GAAiBH,GCHjB,MAAM/B,GAAY9mC,GACZ4gC,GAAU78B,GAChB,IAAAklC,GAAiB,CAAC9B,EAAUjE,EAAOngC,IAAY,CAC7C,MAAM6pB,EAAM,CAAA,EACZ,IAAIyL,EAAQ,KACRR,EAAO,KACX,MAAM1iB,EAAIgyB,EAAS,KAAK,CAACh9C,EAAGC,IAAMw2C,GAAQz2C,EAAGC,EAAG2Y,CAAO,CAAC,EACxD,UAAWyU,KAAWrC,EACH2xB,GAAUtvB,EAAS0rB,EAAOngC,CAAO,GAEhD80B,EAAOrgB,EACF6gB,IACHA,EAAQ7gB,KAGNqgB,GACFjL,EAAI,KAAK,CAACyL,EAAOR,CAAI,CAAC,EAExBA,EAAO,KACPQ,EAAQ,MAGRA,GACFzL,EAAI,KAAK,CAACyL,EAAO,IAAI,CAAC,EAGxB,MAAM6Q,EAAS,CAAA,EACf,SAAW,CAAC5xB,EAAK0P,CAAG,IAAK4F,EACnBtV,IAAQ0P,EACVkiB,EAAO,KAAK5xB,CAAG,EACN,CAAC0P,GAAO1P,IAAQnC,EAAE,CAAC,EAC5B+zB,EAAO,KAAK,GAAG,EACLliB,EAED1P,IAAQnC,EAAE,CAAC,EACpB+zB,EAAO,KAAK,KAAKliB,CAAG,EAAE,EAEtBkiB,EAAO,KAAK,GAAG5xB,CAAG,MAAM0P,CAAG,EAAE,EAJ7BkiB,EAAO,KAAK,KAAK5xB,CAAG,EAAE,EAO1B,MAAM6xB,EAAaD,EAAO,KAAK,MAAM,EAC/BE,EAAW,OAAOlG,EAAM,KAAQ,SAAWA,EAAM,IAAM,OAAOA,CAAK,EACzE,OAAOiG,EAAW,OAASC,EAAS,OAASD,EAAajG,CAC5D,EC9CA,MAAMD,GAAQjjC,GAAA,EACRmjC,GAAap/B,GAAA,EACb,CAAE,IAAA6iC,EAAG,EAAKzD,GACV2D,GAAY9iC,GACZ48B,GAAU38B,GAsCVolC,GAAS,CAACC,EAAKC,EAAKxmC,EAAU,CAAA,IAAO,CACzC,GAAIumC,IAAQC,EACV,MAAO,GAGTD,EAAM,IAAIrG,GAAMqG,EAAKvmC,CAAO,EAC5BwmC,EAAM,IAAItG,GAAMsG,EAAKxmC,CAAO,EAC5B,IAAIymC,EAAa,GAEjBC,EAAO,UAAWC,KAAaJ,EAAI,IAAK,CACtC,UAAWK,KAAaJ,EAAI,IAAK,CAC/B,MAAMK,EAAQC,GAAaH,EAAWC,EAAW5mC,CAAO,EAExD,GADAymC,EAAaA,GAAcI,IAAU,KACjCA,EACF,SAASH,CAEjB,CAKI,GAAID,EACF,MAAO,EAEb,CACE,MAAO,EACT,EAEMM,GAA+B,CAAC,IAAI3G,GAAW,WAAW,CAAC,EAC3D4G,GAAiB,CAAC,IAAI5G,GAAW,SAAS,CAAC,EAE3C0G,GAAe,CAACP,EAAKC,EAAKxmC,IAAY,CAC1C,GAAIumC,IAAQC,EACV,MAAO,GAGT,GAAID,EAAI,SAAW,GAAKA,EAAI,CAAC,EAAE,SAAW1C,GAAK,CAC7C,GAAI2C,EAAI,SAAW,GAAKA,EAAI,CAAC,EAAE,SAAW3C,GACxC,MAAO,GACE7jC,EAAQ,kBACjBumC,EAAMQ,GAENR,EAAMS,EAEZ,CAEE,GAAIR,EAAI,SAAW,GAAKA,EAAI,CAAC,EAAE,SAAW3C,GAAK,CAC7C,GAAI7jC,EAAQ,kBACV,MAAO,GAEPwmC,EAAMQ,EAEZ,CAEE,MAAMC,EAAQ,IAAI,IAClB,IAAIrI,EAAIE,EACR,UAAWj2C,KAAK09C,EACV19C,EAAE,WAAa,KAAOA,EAAE,WAAa,KACvC+1C,EAAKsI,GAAStI,EAAI/1C,EAAGmX,CAAO,EACnBnX,EAAE,WAAa,KAAOA,EAAE,WAAa,KAC9Ci2C,EAAKqI,GAAQrI,EAAIj2C,EAAGmX,CAAO,EAE3BinC,EAAM,IAAIp+C,EAAE,MAAM,EAItB,GAAIo+C,EAAM,KAAO,EACf,OAAO,KAGT,IAAIG,EACJ,GAAIxI,GAAME,EAAI,CAEZ,GADAsI,EAAWvJ,GAAQe,EAAG,OAAQE,EAAG,OAAQ9+B,CAAO,EAC5ConC,EAAW,EACb,OAAO,KACF,GAAIA,IAAa,IAAMxI,EAAG,WAAa,MAAQE,EAAG,WAAa,MACpE,OAAO,IAEb,CAGE,UAAWE,KAAMiI,EAAO,CAKtB,GAJIrI,GAAM,CAACmF,GAAU/E,EAAI,OAAOJ,CAAE,EAAG5+B,CAAO,GAIxC8+B,GAAM,CAACiF,GAAU/E,EAAI,OAAOF,CAAE,EAAG9+B,CAAO,EAC1C,OAAO,KAGT,UAAWnX,KAAK29C,EACd,GAAI,CAACzC,GAAU/E,EAAI,OAAOn2C,CAAC,EAAGmX,CAAO,EACnC,MAAO,GAIX,MAAO,EACX,CAEE,IAAIqnC,EAAQl6C,EACRm6C,EAAUC,EAGVC,EAAe1I,GACjB,CAAC9+B,EAAQ,mBACT8+B,EAAG,OAAO,WAAW,OAASA,EAAG,OAAS,GACxC2I,EAAe7I,GACjB,CAAC5+B,EAAQ,mBACT4+B,EAAG,OAAO,WAAW,OAASA,EAAG,OAAS,GAExC4I,GAAgBA,EAAa,WAAW,SAAW,GACnD1I,EAAG,WAAa,KAAO0I,EAAa,WAAW,CAAC,IAAM,IACxDA,EAAe,IAGjB,UAAW3+C,KAAK29C,EAAK,CAGnB,GAFAe,EAAWA,GAAY1+C,EAAE,WAAa,KAAOA,EAAE,WAAa,KAC5Dy+C,EAAWA,GAAYz+C,EAAE,WAAa,KAAOA,EAAE,WAAa,KACxD+1C,GASF,GARI6I,GACE5+C,EAAE,OAAO,YAAcA,EAAE,OAAO,WAAW,QAC3CA,EAAE,OAAO,QAAU4+C,EAAa,OAChC5+C,EAAE,OAAO,QAAU4+C,EAAa,OAChC5+C,EAAE,OAAO,QAAU4+C,EAAa,QAClCA,EAAe,IAGf5+C,EAAE,WAAa,KAAOA,EAAE,WAAa,MAEvC,GADAw+C,EAASH,GAAStI,EAAI/1C,EAAGmX,CAAO,EAC5BqnC,IAAWx+C,GAAKw+C,IAAWzI,EAC7B,MAAO,WAEAA,EAAG,WAAa,MAAQ,CAACmF,GAAUnF,EAAG,OAAQ,OAAO/1C,CAAC,EAAGmX,CAAO,EACzE,MAAO,GAGX,GAAI8+B,GASF,GARI0I,GACE3+C,EAAE,OAAO,YAAcA,EAAE,OAAO,WAAW,QAC3CA,EAAE,OAAO,QAAU2+C,EAAa,OAChC3+C,EAAE,OAAO,QAAU2+C,EAAa,OAChC3+C,EAAE,OAAO,QAAU2+C,EAAa,QAClCA,EAAe,IAGf3+C,EAAE,WAAa,KAAOA,EAAE,WAAa,MAEvC,GADAsE,EAAQg6C,GAAQrI,EAAIj2C,EAAGmX,CAAO,EAC1B7S,IAAUtE,GAAKsE,IAAU2xC,EAC3B,MAAO,WAEAA,EAAG,WAAa,MAAQ,CAACiF,GAAUjF,EAAG,OAAQ,OAAOj2C,CAAC,EAAGmX,CAAO,EACzE,MAAO,GAGX,GAAI,CAACnX,EAAE,WAAai2C,GAAMF,IAAOwI,IAAa,EAC5C,MAAO,EAEb,CAgBE,MAXI,EAAAxI,GAAM0I,GAAY,CAACxI,GAAMsI,IAAa,GAItCtI,GAAMyI,GAAY,CAAC3I,GAAMwI,IAAa,GAOtCK,GAAgBD,EAKtB,EAGMN,GAAW,CAAC9/C,EAAGC,EAAG2Y,IAAY,CAClC,GAAI,CAAC5Y,EACH,OAAOC,EAET,MAAM85C,EAAOtD,GAAQz2C,EAAE,OAAQC,EAAE,OAAQ2Y,CAAO,EAChD,OAAOmhC,EAAO,EAAI/5C,EACd+5C,EAAO,GACP95C,EAAE,WAAa,KAAOD,EAAE,WAAa,KAD1BC,EAEXD,CACN,EAGM+/C,GAAU,CAAC//C,EAAGC,EAAG2Y,IAAY,CACjC,GAAI,CAAC5Y,EACH,OAAOC,EAET,MAAM85C,EAAOtD,GAAQz2C,EAAE,OAAQC,EAAE,OAAQ2Y,CAAO,EAChD,OAAOmhC,EAAO,EAAI/5C,EACd+5C,EAAO,GACP95C,EAAE,WAAa,KAAOD,EAAE,WAAa,KAD1BC,EAEXD,CACN,EAEA,IAAAsgD,GAAiBpB,GCrPjB,MAAMqB,GAAa1qC,GACbD,GAAYgE,GACZ+6B,GAAS96B,GACT46B,GAAc36B,GACd0P,GAAQxP,GACRq7B,GAAQv6B,GACR1T,GAAQse,GACR8vB,GAAM7vB,GACNlY,GAAOgb,GACPmc,GAAQlc,GACRmc,GAAQuN,GACRj8B,GAAQk8B,GACR4C,GAAa3C,GACbmE,GAAUlE,GACVoE,GAAWnE,GACXqE,GAAepE,GACfsE,GAAerE,GACfyE,GAAOxE,GACP2E,GAAQ1E,GACR4E,GAAK3E,GACL6E,GAAK5E,GACL8E,GAAK7E,GACL+E,GAAM0I,GACNxI,GAAMyI,GACNvI,GAAMwI,GACNtI,GAAMuI,GACN12B,GAAS22B,GACT5H,GAAa6H,GAAA,EACb/H,GAAQgI,GAAA,EACRnE,GAAYoE,GACZlE,GAAgBmE,GAChBjE,GAAgBkE,GAChB7D,GAAgB8D,GAChB3D,GAAa4D,GACbvD,GAAawD,GACbvD,GAAUwD,GACV/C,GAAMgD,GACN9C,GAAM+C,GACN7C,GAAa8C,GACbC,GAAgBC,GAChBxC,GAASyC,GACf,IAAAzM,GAAiB,CACf,MAAA1rB,GACA,MAAA6rB,GACA,MAAAjuC,GACA,IAAAouC,GACA,KAAA/nC,GACA,MAAAm3B,GACA,MAAAC,GACA,MAAA1uB,GACA,WAAA8+B,GACA,QAAAwB,GACA,SAAAE,GACA,aAAAE,GACA,aAAAE,GACA,KAAAI,GACA,MAAAG,GACA,GAAAE,GACA,GAAAE,GACA,GAAAE,GACA,IAAAE,GACA,IAAAE,GACA,IAAAE,GACA,IAAAE,GACA,OAAAnuB,GACA,WAAA+uB,GACA,MAAAF,GACA,UAAA6D,GACA,cAAAE,GACA,cAAAE,GACA,cAAAK,GACA,WAAAG,GACA,WAAAK,GACA,QAAAC,GACA,IAAAS,GACA,IAAAE,GACA,WAAAE,GACA,cAAA+C,GACA,OAAAvC,GACA,OAAAvK,GACA,GAAI4L,GAAW,GACf,IAAKA,GAAW,IAChB,OAAQA,GAAW,EACnB,oBAAqB3qC,GAAU,oBAC/B,cAAeA,GAAU,cACzB,mBAAoB6+B,GAAY,mBAChC,oBAAqBA,GAAY,mBACnC,kDChFA,IAAImN,EAAmB,IAGnBC,EAAiB,4BAGjBC,EAAuB,EACvBC,EAAyB,EAGzB5O,EAAmB,iBAGnB6O,EAAU,qBACVC,EAAW,iBACXC,EAAW,yBACXC,EAAU,mBACVC,EAAU,gBACVC,EAAW,iBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBACZC,EAAU,gBACVC,EAAY,kBACZC,EAAa,mBACbC,EAAW,iBACXC,EAAY,kBACZC,GAAS,eACTC,EAAY,kBACZC,GAAY,kBACZC,EAAe,qBACfC,EAAa,mBAEbC,EAAiB,uBACjBC,EAAc,oBACdC,EAAa,wBACbC,EAAa,wBACbC,EAAU,qBACVC,EAAW,sBACXC,EAAW,sBACXC,EAAW,sBACXC,EAAkB,6BAClBC,EAAY,uBACZC,EAAY,uBAMZC,EAAe,sBAGfC,EAAe,8BAGfC,GAAW,mBAGXC,EAAiB,CAAA,EACrBA,EAAeZ,CAAU,EAAIY,EAAeX,CAAU,EACtDW,EAAeV,CAAO,EAAIU,EAAeT,CAAQ,EACjDS,EAAeR,CAAQ,EAAIQ,EAAeP,CAAQ,EAClDO,EAAeN,CAAe,EAAIM,EAAeL,CAAS,EAC1DK,EAAeJ,CAAS,EAAI,GAC5BI,EAAelC,CAAO,EAAIkC,EAAejC,CAAQ,EACjDiC,EAAed,CAAc,EAAIc,EAAe/B,CAAO,EACvD+B,EAAeb,CAAW,EAAIa,EAAe9B,CAAO,EACpD8B,EAAe7B,CAAQ,EAAI6B,EAAe5B,CAAO,EACjD4B,EAAe1B,CAAM,EAAI0B,EAAezB,CAAS,EACjDyB,EAAevB,CAAS,EAAIuB,EAAepB,CAAS,EACpDoB,EAAenB,EAAM,EAAImB,EAAelB,CAAS,EACjDkB,EAAef,CAAU,EAAI,GAG7B,IAAIgB,GAAa,OAAO3pC,IAAU,UAAYA,IAAUA,GAAO,SAAW,QAAUA,GAGhF4pC,EAAW,OAAO,MAAQ,UAAY,MAAQ,KAAK,SAAW,QAAU,KAGxEC,EAAOF,IAAcC,GAAY,SAAS,aAAa,EAAC,EAGxDE,EAA4CzmC,GAAW,CAACA,EAAQ,UAAYA,EAG5E0mC,EAAaD,GAAe,IAA6Bj4B,GAAU,CAACA,EAAO,UAAYA,EAGvFm4B,EAAgBD,GAAcA,EAAW,UAAYD,EAGrDG,GAAcD,GAAiBL,GAAW,QAG1CO,GAAY,UAAW,CACzB,GAAI,CACF,OAAOD,IAAeA,GAAY,SAAWA,GAAY,QAAQ,MAAM,CAC3E,MAAc,CAAA,CACd,IAGIE,GAAmBD,IAAYA,GAAS,aAW5C,SAASE,GAAYC,EAAOC,EAAW,CAMrC,QALIxrC,EAAQ,GACR1B,EAASitC,GAAS,KAAO,EAAIA,EAAM,OACnCE,GAAW,EACX75C,EAAS,CAAA,EAEN,EAAEoO,EAAQ1B,GAAQ,CACvB,IAAIvS,GAAQw/C,EAAMvrC,CAAK,EACnBwrC,EAAUz/C,GAAOiU,EAAOurC,CAAK,IAC/B35C,EAAO65C,IAAU,EAAI1/C,GAE3B,CACE,OAAO6F,CACT,CAUA,SAAS85C,GAAUH,EAAOI,EAAQ,CAKhC,QAJI3rC,EAAQ,GACR1B,EAASqtC,EAAO,OAChB/jD,GAAS2jD,EAAM,OAEZ,EAAEvrC,EAAQ1B,GACfitC,EAAM3jD,GAASoY,CAAK,EAAI2rC,EAAO3rC,CAAK,EAEtC,OAAOurC,CACT,CAYA,SAASK,GAAUL,EAAOC,EAAW,CAInC,QAHIxrC,EAAQ,GACR1B,EAASitC,GAAS,KAAO,EAAIA,EAAM,OAEhC,EAAEvrC,EAAQ1B,GACf,GAAIktC,EAAUD,EAAMvrC,CAAK,EAAGA,EAAOurC,CAAK,EACtC,MAAO,GAGX,MAAO,EACT,CAWA,SAASM,GAAU5hC,EAAG6hC,EAAU,CAI9B,QAHI9rC,EAAQ,GACRpO,EAAS,MAAMqY,CAAC,EAEb,EAAEjK,EAAQiK,GACfrY,EAAOoO,CAAK,EAAI8rC,EAAS9rC,CAAK,EAEhC,OAAOpO,CACT,CASA,SAASm6C,GAAUC,EAAM,CACvB,OAAO,SAASjgD,EAAO,CACrB,OAAOigD,EAAKjgD,CAAK,CACrB,CACA,CAUA,SAASkgD,GAAS/L,EAAO/qC,EAAK,CAC5B,OAAO+qC,EAAM,IAAI/qC,CAAG,CACtB,CAUA,SAAS+2C,GAAS5mB,EAAQnwB,EAAK,CAC7B,OAAOmwB,GAAU,KAAO,OAAYA,EAAOnwB,CAAG,CAChD,CASA,SAASg3C,GAAWjoB,EAAK,CACvB,IAAIlkB,EAAQ,GACRpO,EAAS,MAAMsyB,EAAI,IAAI,EAE3B,OAAAA,EAAI,QAAQ,SAASn4B,EAAOoJ,GAAK,CAC/BvD,EAAO,EAAEoO,CAAK,EAAI,CAAC7K,GAAKpJ,CAAK,CACjC,CAAG,EACM6F,CACT,CAUA,SAASw6C,GAAQJ,EAAMK,EAAW,CAChC,OAAO,SAASC,EAAK,CACnB,OAAON,EAAKK,EAAUC,CAAG,CAAC,CAC9B,CACA,CASA,SAASC,GAAWpjB,EAAK,CACvB,IAAInpB,EAAQ,GACRpO,EAAS,MAAMu3B,EAAI,IAAI,EAE3B,OAAAA,EAAI,QAAQ,SAASp9B,EAAO,CAC1B6F,EAAO,EAAEoO,CAAK,EAAIjU,CACtB,CAAG,EACM6F,CACT,CAGA,IAAI46C,GAAa,MAAM,UACnBC,GAAY,SAAS,UACrBC,GAAc,OAAO,UAGrBC,GAAa5B,EAAK,oBAAoB,EAGtC6B,GAAeH,GAAU,SAGzBI,GAAiBH,GAAY,eAG7BI,GAAc,UAAW,CAC3B,IAAIvvC,EAAM,SAAS,KAAKovC,IAAcA,GAAW,MAAQA,GAAW,KAAK,UAAY,EAAE,EACvF,OAAOpvC,EAAO,iBAAmBA,EAAO,EAC1C,IAOIwvC,GAAuBL,GAAY,SAGnCM,GAAa,OAAO,IACtBJ,GAAa,KAAKC,EAAc,EAAE,QAAQpC,EAAc,MAAM,EAC7D,QAAQ,yDAA0D,OAAO,EAAI,GAChF,EAGIwC,GAAS/B,EAAgBH,EAAK,OAAS,OACvCmC,GAASnC,EAAK,OACdoC,GAAapC,EAAK,WAClBqC,GAAuBV,GAAY,qBACnCW,GAASb,GAAW,OACpBc,GAAiBJ,GAASA,GAAO,YAAc,OAG/CK,GAAmB,OAAO,sBAC1BC,GAAiBP,GAASA,GAAO,SAAW,OAC5CQ,GAAarB,GAAQ,OAAO,KAAM,MAAM,EAGxCsB,GAAWC,GAAU5C,EAAM,UAAU,EACrC6C,GAAMD,GAAU5C,EAAM,KAAK,EAC3B8C,GAAUF,GAAU5C,EAAM,SAAS,EACnC+C,GAAMH,GAAU5C,EAAM,KAAK,EAC3BgD,GAAUJ,GAAU5C,EAAM,SAAS,EACnCiD,GAAeL,GAAU,OAAQ,QAAQ,EAGzCM,GAAqBC,GAASR,EAAQ,EACtCS,GAAgBD,GAASN,EAAG,EAC5BQ,GAAoBF,GAASL,EAAO,EACpCQ,GAAgBH,GAASJ,EAAG,EAC5BQ,GAAoBJ,GAASH,EAAO,EAGpCQ,GAAcrB,GAASA,GAAO,UAAY,OAC1CsB,GAAgBD,GAAcA,GAAY,QAAU,OASxD,SAASE,GAAK5lD,EAAS,CACrB,IAAImX,EAAQ,GACR1B,EAASzV,GAAW,KAAO,EAAIA,EAAQ,OAG3C,IADA,KAAK,MAAK,EACH,EAAEmX,EAAQ1B,GAAQ,CACvB,IAAIxV,EAAQD,EAAQmX,CAAK,EACzB,KAAK,IAAIlX,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CAC/B,CACA,CASA,SAAS4lD,IAAY,CACnB,KAAK,SAAWV,GAAeA,GAAa,IAAI,EAAI,CAAA,EACpD,KAAK,KAAO,CACd,CAYA,SAASW,GAAWx5C,EAAK,CACvB,IAAIvD,EAAS,KAAK,IAAIuD,CAAG,GAAK,OAAO,KAAK,SAASA,CAAG,EACtD,YAAK,MAAQvD,EAAS,EAAI,EACnBA,CACT,CAWA,SAASg9C,GAAQz5C,EAAK,CACpB,IAAIpL,EAAO,KAAK,SAChB,GAAIikD,GAAc,CAChB,IAAIp8C,EAAS7H,EAAKoL,CAAG,EACrB,OAAOvD,IAAW22C,EAAiB,OAAY32C,CACnD,CACE,OAAOi7C,GAAe,KAAK9iD,EAAMoL,CAAG,EAAIpL,EAAKoL,CAAG,EAAI,MACtD,CAWA,SAAS05C,GAAQ15C,EAAK,CACpB,IAAIpL,EAAO,KAAK,SAChB,OAAOikD,GAAgBjkD,EAAKoL,CAAG,IAAM,OAAa03C,GAAe,KAAK9iD,EAAMoL,CAAG,CACjF,CAYA,SAAS25C,GAAQ35C,EAAKpJ,EAAO,CAC3B,IAAIhC,EAAO,KAAK,SAChB,YAAK,MAAQ,KAAK,IAAIoL,CAAG,EAAI,EAAI,EACjCpL,EAAKoL,CAAG,EAAK64C,IAAgBjiD,IAAU,OAAaw8C,EAAiBx8C,EAC9D,IACT,CAGA0iD,GAAK,UAAU,MAAQC,GACvBD,GAAK,UAAU,OAAYE,GAC3BF,GAAK,UAAU,IAAMG,GACrBH,GAAK,UAAU,IAAMI,GACrBJ,GAAK,UAAU,IAAMK,GASrB,SAASC,GAAUlmD,EAAS,CAC1B,IAAImX,EAAQ,GACR1B,EAASzV,GAAW,KAAO,EAAIA,EAAQ,OAG3C,IADA,KAAK,MAAK,EACH,EAAEmX,EAAQ1B,GAAQ,CACvB,IAAIxV,EAAQD,EAAQmX,CAAK,EACzB,KAAK,IAAIlX,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CAC/B,CACA,CASA,SAASkmD,IAAiB,CACxB,KAAK,SAAW,CAAA,EAChB,KAAK,KAAO,CACd,CAWA,SAASC,GAAgB95C,EAAK,CAC5B,IAAIpL,EAAO,KAAK,SACZiW,EAAQkvC,GAAanlD,EAAMoL,CAAG,EAElC,GAAI6K,EAAQ,EACV,MAAO,GAET,IAAImvC,EAAYplD,EAAK,OAAS,EAC9B,OAAIiW,GAASmvC,EACXplD,EAAK,IAAG,EAERsjD,GAAO,KAAKtjD,EAAMiW,EAAO,CAAC,EAE5B,EAAE,KAAK,KACA,EACT,CAWA,SAASovC,GAAaj6C,EAAK,CACzB,IAAIpL,EAAO,KAAK,SACZiW,EAAQkvC,GAAanlD,EAAMoL,CAAG,EAElC,OAAO6K,EAAQ,EAAI,OAAYjW,EAAKiW,CAAK,EAAE,CAAC,CAC9C,CAWA,SAASqvC,GAAal6C,EAAK,CACzB,OAAO+5C,GAAa,KAAK,SAAU/5C,CAAG,EAAI,EAC5C,CAYA,SAASm6C,GAAan6C,EAAKpJ,EAAO,CAChC,IAAIhC,EAAO,KAAK,SACZiW,EAAQkvC,GAAanlD,EAAMoL,CAAG,EAElC,OAAI6K,EAAQ,GACV,EAAE,KAAK,KACPjW,EAAK,KAAK,CAACoL,EAAKpJ,CAAK,CAAC,GAEtBhC,EAAKiW,CAAK,EAAE,CAAC,EAAIjU,EAEZ,IACT,CAGAgjD,GAAU,UAAU,MAAQC,GAC5BD,GAAU,UAAU,OAAYE,GAChCF,GAAU,UAAU,IAAMK,GAC1BL,GAAU,UAAU,IAAMM,GAC1BN,GAAU,UAAU,IAAMO,GAS1B,SAASC,GAAS1mD,EAAS,CACzB,IAAImX,EAAQ,GACR1B,EAASzV,GAAW,KAAO,EAAIA,EAAQ,OAG3C,IADA,KAAK,MAAK,EACH,EAAEmX,EAAQ1B,GAAQ,CACvB,IAAIxV,EAAQD,EAAQmX,CAAK,EACzB,KAAK,IAAIlX,EAAM,CAAC,EAAGA,EAAM,CAAC,CAAC,CAC/B,CACA,CASA,SAAS0mD,IAAgB,CACvB,KAAK,KAAO,EACZ,KAAK,SAAW,CACd,KAAQ,IAAIf,GACZ,IAAO,IAAKb,IAAOmB,IACnB,OAAU,IAAIN,EAClB,CACA,CAWA,SAASgB,GAAet6C,EAAK,CAC3B,IAAIvD,EAAS89C,GAAW,KAAMv6C,CAAG,EAAE,OAAUA,CAAG,EAChD,YAAK,MAAQvD,EAAS,EAAI,EACnBA,CACT,CAWA,SAAS+9C,GAAYx6C,EAAK,CACxB,OAAOu6C,GAAW,KAAMv6C,CAAG,EAAE,IAAIA,CAAG,CACtC,CAWA,SAASy6C,GAAYz6C,EAAK,CACxB,OAAOu6C,GAAW,KAAMv6C,CAAG,EAAE,IAAIA,CAAG,CACtC,CAYA,SAAS06C,GAAY16C,EAAKpJ,EAAO,CAC/B,IAAIhC,EAAO2lD,GAAW,KAAMv6C,CAAG,EAC3B26C,EAAO/lD,EAAK,KAEhB,OAAAA,EAAK,IAAIoL,EAAKpJ,CAAK,EACnB,KAAK,MAAQhC,EAAK,MAAQ+lD,EAAO,EAAI,EAC9B,IACT,CAGAP,GAAS,UAAU,MAAQC,GAC3BD,GAAS,UAAU,OAAYE,GAC/BF,GAAS,UAAU,IAAMI,GACzBJ,GAAS,UAAU,IAAMK,GACzBL,GAAS,UAAU,IAAMM,GAUzB,SAASE,GAASpE,EAAQ,CACxB,IAAI3rC,EAAQ,GACR1B,EAASqtC,GAAU,KAAO,EAAIA,EAAO,OAGzC,IADA,KAAK,SAAW,IAAI4D,GACb,EAAEvvC,EAAQ1B,GACf,KAAK,IAAIqtC,EAAO3rC,CAAK,CAAC,CAE1B,CAYA,SAASgwC,GAAYjkD,EAAO,CAC1B,YAAK,SAAS,IAAIA,EAAOw8C,CAAc,EAChC,IACT,CAWA,SAAS0H,GAAYlkD,EAAO,CAC1B,OAAO,KAAK,SAAS,IAAIA,CAAK,CAChC,CAGAgkD,GAAS,UAAU,IAAMA,GAAS,UAAU,KAAOC,GACnDD,GAAS,UAAU,IAAME,GASzB,SAASC,GAAMrnD,EAAS,CACtB,IAAIkB,EAAO,KAAK,SAAW,IAAIglD,GAAUlmD,CAAO,EAChD,KAAK,KAAOkB,EAAK,IACnB,CASA,SAASomD,IAAa,CACpB,KAAK,SAAW,IAAIpB,GACpB,KAAK,KAAO,CACd,CAWA,SAASqB,GAAYj7C,EAAK,CACxB,IAAIpL,EAAO,KAAK,SACZ6H,EAAS7H,EAAK,OAAUoL,CAAG,EAE/B,YAAK,KAAOpL,EAAK,KACV6H,CACT,CAWA,SAASy+C,GAASl7C,EAAK,CACrB,OAAO,KAAK,SAAS,IAAIA,CAAG,CAC9B,CAWA,SAASm7C,GAASn7C,EAAK,CACrB,OAAO,KAAK,SAAS,IAAIA,CAAG,CAC9B,CAYA,SAASo7C,GAASp7C,EAAKpJ,EAAO,CAC5B,IAAIhC,EAAO,KAAK,SAChB,GAAIA,aAAgBglD,GAAW,CAC7B,IAAI/lB,EAAQj/B,EAAK,SACjB,GAAI,CAAC6jD,IAAQ5kB,EAAM,OAASsf,EAAmB,EAC7C,OAAAtf,EAAM,KAAK,CAAC7zB,EAAKpJ,CAAK,CAAC,EACvB,KAAK,KAAO,EAAEhC,EAAK,KACZ,KAETA,EAAO,KAAK,SAAW,IAAIwlD,GAASvmB,CAAK,CAC7C,CACE,OAAAj/B,EAAK,IAAIoL,EAAKpJ,CAAK,EACnB,KAAK,KAAOhC,EAAK,KACV,IACT,CAGAmmD,GAAM,UAAU,MAAQC,GACxBD,GAAM,UAAU,OAAYE,GAC5BF,GAAM,UAAU,IAAMG,GACtBH,GAAM,UAAU,IAAMI,GACtBJ,GAAM,UAAU,IAAMK,GAUtB,SAASC,GAAczkD,EAAO0kD,EAAW,CACvC,IAAIC,EAAQC,GAAQ5kD,CAAK,EACrB6kD,EAAQ,CAACF,GAASG,GAAY9kD,CAAK,EACnC+kD,GAAS,CAACJ,GAAS,CAACE,GAASG,GAAShlD,CAAK,EAC3CilD,EAAS,CAACN,GAAS,CAACE,GAAS,CAACE,IAAUG,GAAallD,CAAK,EAC1DmlD,GAAcR,GAASE,GAASE,IAAUE,EAC1Cp/C,GAASs/C,GAAcrF,GAAU9/C,EAAM,OAAQ,MAAM,EAAI,CAAA,EACzDuS,GAAS1M,GAAO,OAEpB,QAASuD,MAAOpJ,EACI8gD,GAAe,KAAK9gD,EAAOoJ,EAAG,GAC5C,EAAE+7C,KAEC/7C,IAAO,UAEN27C,KAAW37C,IAAO,UAAYA,IAAO,WAErC67C,IAAW77C,IAAO,UAAYA,IAAO,cAAgBA,IAAO,eAE7Dg8C,GAAQh8C,GAAKmJ,EAAM,KAExB1M,GAAO,KAAKuD,EAAG,EAGnB,OAAOvD,EACT,CAUA,SAASs9C,GAAa3D,EAAOp2C,EAAK,CAEhC,QADImJ,EAASitC,EAAM,OACZjtC,KACL,GAAIggC,GAAGiN,EAAMjtC,CAAM,EAAE,CAAC,EAAGnJ,CAAG,EAC1B,OAAOmJ,EAGX,MAAO,EACT,CAaA,SAAS8yC,GAAe9rB,EAAQ+rB,EAAUC,EAAa,CACrD,IAAI1/C,EAASy/C,EAAS/rB,CAAM,EAC5B,OAAOqrB,GAAQrrB,CAAM,EAAI1zB,EAAS85C,GAAU95C,EAAQ0/C,EAAYhsB,CAAM,CAAC,CACzE,CASA,SAASisB,GAAWxlD,EAAO,CACzB,OAAIA,GAAS,KACJA,IAAU,OAAY69C,EAAeR,EAEtCkE,IAAkBA,MAAkB,OAAOvhD,CAAK,EACpDylD,GAAUzlD,CAAK,EACf0lD,GAAe1lD,CAAK,CAC1B,CASA,SAAS2lD,GAAgB3lD,EAAO,CAC9B,OAAO4lD,GAAa5lD,CAAK,GAAKwlD,GAAWxlD,CAAK,GAAK28C,CACrD,CAgBA,SAASkJ,GAAY7lD,EAAOuvC,EAAOuW,EAASC,EAAYC,GAAO,CAC7D,OAAIhmD,IAAUuvC,EACL,GAELvvC,GAAS,MAAQuvC,GAAS,MAAS,CAACqW,GAAa5lD,CAAK,GAAK,CAAC4lD,GAAarW,CAAK,EACzEvvC,IAAUA,GAASuvC,IAAUA,EAE/B0W,GAAgBjmD,EAAOuvC,EAAOuW,EAASC,EAAYF,GAAaG,EAAK,CAC9E,CAgBA,SAASC,GAAgB1sB,EAAQgW,EAAOuW,EAASC,EAAYG,GAAWF,EAAO,CAC7E,IAAIG,GAAWvB,GAAQrrB,CAAM,EACzB6sB,GAAWxB,GAAQrV,CAAK,EACxB8W,GAASF,GAAWvJ,EAAW0J,GAAO/sB,CAAM,EAC5CgtB,GAASH,GAAWxJ,EAAW0J,GAAO/W,CAAK,EAE/C8W,GAASA,IAAU1J,EAAUW,EAAY+I,GACzCE,GAASA,IAAU5J,EAAUW,EAAYiJ,GAEzC,IAAIC,GAAWH,IAAU/I,EACrBmJ,GAAWF,IAAUjJ,EACrBoJ,GAAYL,IAAUE,GAE1B,GAAIG,IAAa1B,GAASzrB,CAAM,EAAG,CACjC,GAAI,CAACyrB,GAASzV,CAAK,EACjB,MAAO,GAET4W,GAAW,GACXK,GAAW,EACf,CACE,GAAIE,IAAa,CAACF,GAChB,OAAAR,IAAUA,EAAQ,IAAI7B,IACdgC,IAAYjB,GAAa3rB,CAAM,EACnCotB,GAAYptB,EAAQgW,EAAOuW,EAASC,EAAYG,GAAWF,CAAK,EAChEY,GAAWrtB,EAAQgW,EAAO8W,GAAQP,EAASC,EAAYG,GAAWF,CAAK,EAE7E,GAAI,EAAEF,EAAUrJ,GAAuB,CACrC,IAAIoK,GAAeL,IAAY1F,GAAe,KAAKvnB,EAAQ,aAAa,EACpEutB,GAAeL,IAAY3F,GAAe,KAAKvR,EAAO,aAAa,EAEvE,GAAIsX,IAAgBC,GAAc,CAChC,IAAIC,GAAeF,GAAettB,EAAO,MAAK,EAAKA,EAC/CytB,GAAeF,GAAevX,EAAM,MAAK,EAAKA,EAElD,OAAAyW,IAAUA,EAAQ,IAAI7B,IACf+B,GAAUa,GAAcC,GAAclB,EAASC,EAAYC,CAAK,CAC7E,CACA,CACE,OAAKU,IAGLV,IAAUA,EAAQ,IAAI7B,IACf8C,GAAa1tB,EAAQgW,EAAOuW,EAASC,EAAYG,GAAWF,CAAK,GAH/D,EAIX,CAUA,SAASkB,GAAalnD,EAAO,CAC3B,GAAI,CAAC81B,GAAS91B,CAAK,GAAKmnD,GAASnnD,CAAK,EACpC,MAAO,GAET,IAAIonD,EAAUC,GAAWrnD,CAAK,EAAIihD,GAAatC,EAC/C,OAAOyI,EAAQ,KAAKjF,GAASniD,CAAK,CAAC,CACrC,CASA,SAASsnD,GAAiBtnD,EAAO,CAC/B,OAAO4lD,GAAa5lD,CAAK,GACvBunD,GAASvnD,EAAM,MAAM,GAAK,CAAC,CAAC6+C,EAAe2G,GAAWxlD,CAAK,CAAC,CAChE,CASA,SAASwnD,GAASjuB,EAAQ,CACxB,GAAI,CAACkuB,GAAYluB,CAAM,EACrB,OAAOmoB,GAAWnoB,CAAM,EAE1B,IAAI1zB,EAAS,CAAA,EACb,QAASuD,KAAO,OAAOmwB,CAAM,EACvBunB,GAAe,KAAKvnB,EAAQnwB,CAAG,GAAKA,GAAO,eAC7CvD,EAAO,KAAKuD,CAAG,EAGnB,OAAOvD,CACT,CAeA,SAAS8gD,GAAYnH,EAAOjQ,EAAOuW,EAASC,EAAYG,GAAWF,EAAO,CACxE,IAAI0B,GAAY5B,EAAUrJ,EACtBkL,GAAYnI,EAAM,OAClBoI,GAAYrY,EAAM,OAEtB,GAAIoY,IAAaC,IAAa,EAAEF,IAAaE,GAAYD,IACvD,MAAO,GAGT,IAAIE,GAAU7B,EAAM,IAAIxG,CAAK,EAC7B,GAAIqI,IAAW7B,EAAM,IAAIzW,CAAK,EAC5B,OAAOsY,IAAWtY,EAEpB,IAAIt7B,GAAQ,GACRpO,GAAS,GACTiiD,GAAQhC,EAAUpJ,EAA0B,IAAIsH,GAAW,OAM/D,IAJAgC,EAAM,IAAIxG,EAAOjQ,CAAK,EACtByW,EAAM,IAAIzW,EAAOiQ,CAAK,EAGf,EAAEvrC,GAAQ0zC,IAAW,CAC1B,IAAII,GAAWvI,EAAMvrC,EAAK,EACtB+zC,GAAWzY,EAAMt7B,EAAK,EAE1B,GAAI8xC,EACF,IAAIkC,GAAWP,GACX3B,EAAWiC,GAAUD,GAAU9zC,GAAOs7B,EAAOiQ,EAAOwG,CAAK,EACzDD,EAAWgC,GAAUC,GAAU/zC,GAAOurC,EAAOjQ,EAAOyW,CAAK,EAE/D,GAAIiC,KAAa,OAAW,CAC1B,GAAIA,GACF,SAEFpiD,GAAS,GACT,KACN,CAEI,GAAIiiD,IACF,GAAI,CAACjI,GAAUtQ,EAAO,SAASyY,GAAUE,GAAU,CAC7C,GAAI,CAAChI,GAAS4H,GAAMI,EAAQ,IACvBH,KAAaC,IAAY9B,GAAU6B,GAAUC,GAAUlC,EAASC,EAAYC,CAAK,GACpF,OAAO8B,GAAK,KAAKI,EAAQ,CAEvC,CAAW,EAAG,CACNriD,GAAS,GACT,KACR,UACe,EACLkiD,KAAaC,IACX9B,GAAU6B,GAAUC,GAAUlC,EAASC,EAAYC,CAAK,GACzD,CACLngD,GAAS,GACT,KACN,CACA,CACE,OAAAmgD,EAAM,OAAUxG,CAAK,EACrBwG,EAAM,OAAUzW,CAAK,EACd1pC,EACT,CAmBA,SAAS+gD,GAAWrtB,EAAQgW,EAAOzgC,EAAKg3C,EAASC,GAAYG,EAAWF,GAAO,CAC7E,OAAQl3C,EAAG,CACT,KAAKkvC,EACH,GAAKzkB,EAAO,YAAcgW,EAAM,YAC3BhW,EAAO,YAAcgW,EAAM,WAC9B,MAAO,GAEThW,EAASA,EAAO,OAChBgW,EAAQA,EAAM,OAEhB,KAAKwO,EACH,MAAK,EAAAxkB,EAAO,YAAcgW,EAAM,YAC5B,CAAC2W,EAAU,IAAI9E,GAAW7nB,CAAM,EAAG,IAAI6nB,GAAW7R,CAAK,CAAC,GAK9D,KAAKuN,EACL,KAAKC,EACL,KAAKK,EAGH,OAAO7K,GAAG,CAAChZ,EAAQ,CAACgW,CAAK,EAE3B,KAAKyN,EACH,OAAOzjB,EAAO,MAAQgW,EAAM,MAAQhW,EAAO,SAAWgW,EAAM,QAE9D,KAAKkO,EACL,KAAKE,EAIH,OAAOpkB,GAAWgW,EAAQ,GAE5B,KAAK4N,EACH,IAAIgL,GAAU/H,GAEhB,KAAK1C,GACH,IAAIgK,GAAY5B,EAAUrJ,EAG1B,GAFA0L,KAAYA,GAAU3H,IAElBjnB,EAAO,MAAQgW,EAAM,MAAQ,CAACmY,GAChC,MAAO,GAGT,IAAIG,GAAU7B,GAAM,IAAIzsB,CAAM,EAC9B,GAAIsuB,GACF,OAAOA,IAAWtY,EAEpBuW,GAAWpJ,EAGXsJ,GAAM,IAAIzsB,EAAQgW,CAAK,EACvB,IAAI1pC,GAAS8gD,GAAYwB,GAAQ5uB,CAAM,EAAG4uB,GAAQ5Y,CAAK,EAAGuW,EAASC,GAAYG,EAAWF,EAAK,EAC/F,OAAAA,GAAM,OAAUzsB,CAAM,EACf1zB,GAET,KAAK+3C,GACH,GAAI6E,GACF,OAAOA,GAAc,KAAKlpB,CAAM,GAAKkpB,GAAc,KAAKlT,CAAK,EAGnE,MAAO,EACT,CAeA,SAAS0X,GAAa1tB,EAAQgW,EAAOuW,EAASC,EAAYG,GAAWF,EAAO,CAC1E,IAAI0B,GAAY5B,EAAUrJ,EACtB2L,GAAWC,GAAW9uB,CAAM,EAC5B+uB,GAAYF,GAAS,OACrBG,GAAWF,GAAW9Y,CAAK,EAC3BqY,GAAYW,GAAS,OAEzB,GAAID,IAAaV,IAAa,CAACF,GAC7B,MAAO,GAGT,QADIzzC,GAAQq0C,GACLr0C,MAAS,CACd,IAAI7K,GAAMg/C,GAASn0C,EAAK,EACxB,GAAI,EAAEyzC,GAAYt+C,MAAOmmC,EAAQuR,GAAe,KAAKvR,EAAOnmC,EAAG,GAC7D,MAAO,EAEb,CAEE,IAAIy+C,GAAU7B,EAAM,IAAIzsB,CAAM,EAC9B,GAAIsuB,IAAW7B,EAAM,IAAIzW,CAAK,EAC5B,OAAOsY,IAAWtY,EAEpB,IAAI1pC,GAAS,GACbmgD,EAAM,IAAIzsB,EAAQgW,CAAK,EACvByW,EAAM,IAAIzW,EAAOhW,CAAM,EAGvB,QADIivB,GAAWd,GACR,EAAEzzC,GAAQq0C,IAAW,CAC1Bl/C,GAAMg/C,GAASn0C,EAAK,EACpB,IAAIw0C,GAAWlvB,EAAOnwB,EAAG,EACrB4+C,GAAWzY,EAAMnmC,EAAG,EAExB,GAAI28C,EACF,IAAIkC,GAAWP,GACX3B,EAAWiC,GAAUS,GAAUr/C,GAAKmmC,EAAOhW,EAAQysB,CAAK,EACxDD,EAAW0C,GAAUT,GAAU5+C,GAAKmwB,EAAQgW,EAAOyW,CAAK,EAG9D,GAAI,EAAEiC,KAAa,OACVQ,KAAaT,IAAY9B,GAAUuC,GAAUT,GAAUlC,EAASC,EAAYC,CAAK,EAClFiC,IACD,CACLpiD,GAAS,GACT,KACN,CACI2iD,KAAaA,GAAWp/C,IAAO,cACnC,CACE,GAAIvD,IAAU,CAAC2iD,GAAU,CACvB,IAAIE,GAAUnvB,EAAO,YACjBovB,GAAUpZ,EAAM,YAGhBmZ,IAAWC,IACV,gBAAiBpvB,GAAU,gBAAiBgW,GAC7C,EAAE,OAAOmZ,IAAW,YAAcA,cAAmBA,IACnD,OAAOC,IAAW,YAAcA,cAAmBA,MACvD9iD,GAAS,GAEf,CACE,OAAAmgD,EAAM,OAAUzsB,CAAM,EACtBysB,EAAM,OAAUzW,CAAK,EACd1pC,EACT,CASA,SAASwiD,GAAW9uB,EAAQ,CAC1B,OAAO8rB,GAAe9rB,EAAQvlB,GAAM40C,EAAU,CAChD,CAUA,SAASjF,GAAWxrB,EAAK/uB,EAAK,CAC5B,IAAIpL,EAAOm6B,EAAI,SACf,OAAO0wB,GAAUz/C,CAAG,EAChBpL,EAAK,OAAOoL,GAAO,SAAW,SAAW,MAAM,EAC/CpL,EAAK,GACX,CAUA,SAAS4jD,GAAUroB,EAAQnwB,EAAK,CAC9B,IAAIpJ,EAAQmgD,GAAS5mB,EAAQnwB,CAAG,EAChC,OAAO89C,GAAalnD,CAAK,EAAIA,EAAQ,MACvC,CASA,SAASylD,GAAUzlD,EAAO,CACxB,IAAI8oD,EAAQhI,GAAe,KAAK9gD,EAAOuhD,EAAc,EACjDzyC,EAAM9O,EAAMuhD,EAAc,EAE9B,GAAI,CACFvhD,EAAMuhD,EAAc,EAAI,OACxB,IAAIwH,EAAW,EACnB,MAAc,CAAA,CAEZ,IAAIljD,GAASm7C,GAAqB,KAAKhhD,CAAK,EAC5C,OAAI+oD,IACED,EACF9oD,EAAMuhD,EAAc,EAAIzyC,EAExB,OAAO9O,EAAMuhD,EAAc,GAGxB17C,EACT,CASA,IAAI+iD,GAAcpH,GAA+B,SAASjoB,EAAQ,CAChE,OAAIA,GAAU,KACL,CAAA,GAETA,EAAS,OAAOA,CAAM,EACfgmB,GAAYiC,GAAiBjoB,CAAM,EAAG,SAASyvB,EAAQ,CAC5D,OAAO3H,GAAqB,KAAK9nB,EAAQyvB,CAAM,CACnD,CAAG,EACH,EARqCC,GAiBjC3C,GAASd,IAGR7D,IAAY2E,GAAO,IAAI3E,GAAS,IAAI,YAAY,CAAC,CAAC,CAAC,GAAK3D,GACxD6D,IAAOyE,GAAO,IAAIzE,EAAG,GAAK1E,GAC1B2E,IAAWwE,GAAOxE,GAAQ,QAAO,CAAE,GAAKvE,GACxCwE,IAAOuE,GAAO,IAAIvE,EAAG,GAAKrE,IAC1BsE,IAAWsE,GAAO,IAAItE,EAAO,GAAKlE,KACrCwI,GAAS,SAAStmD,EAAO,CACvB,IAAI6F,EAAS2/C,GAAWxlD,CAAK,EACzBkpD,EAAOrjD,GAAUy3C,EAAYt9C,EAAM,YAAc,OACjDmpD,EAAaD,EAAO/G,GAAS+G,CAAI,EAAI,GAEzC,GAAIC,EACF,OAAQA,EAAU,CAChB,KAAKjH,GAAoB,OAAOlE,EAChC,KAAKoE,GAAe,OAAOjF,EAC3B,KAAKkF,GAAmB,OAAO9E,EAC/B,KAAK+E,GAAe,OAAO5E,GAC3B,KAAK6E,GAAmB,OAAOzE,EAGnC,OAAOj4C,CACX,GAWA,SAASu/C,GAAQplD,EAAOuS,EAAQ,CAC9B,OAAAA,EAASA,GAAiBu7B,EACnB,CAAC,CAACv7B,IACN,OAAOvS,GAAS,UAAY4+C,GAAS,KAAK5+C,CAAK,IAC/CA,EAAQ,IAAMA,EAAQ,GAAK,GAAKA,EAAQuS,CAC7C,CASA,SAASs2C,GAAU7oD,EAAO,CACxB,IAAI+f,EAAO,OAAO/f,EAClB,OAAQ+f,GAAQ,UAAYA,GAAQ,UAAYA,GAAQ,UAAYA,GAAQ,UACvE/f,IAAU,YACVA,IAAU,IACjB,CASA,SAASmnD,GAASlH,EAAM,CACtB,MAAO,CAAC,CAACc,IAAeA,MAAcd,CACxC,CASA,SAASwH,GAAYznD,EAAO,CAC1B,IAAIkpD,EAAOlpD,GAASA,EAAM,YACtBopD,EAAS,OAAOF,GAAQ,YAAcA,EAAK,WAAcvI,GAE7D,OAAO3gD,IAAUopD,CACnB,CASA,SAAS1D,GAAe1lD,EAAO,CAC7B,OAAOghD,GAAqB,KAAKhhD,CAAK,CACxC,CASA,SAASmiD,GAASlC,EAAM,CACtB,GAAIA,GAAQ,KAAM,CAChB,GAAI,CACF,OAAOY,GAAa,KAAKZ,CAAI,CACnC,MAAgB,CAAA,CACZ,GAAI,CACF,OAAQA,EAAO,EACrB,MAAgB,CAAA,CAChB,CACE,MAAO,EACT,CAkCA,SAAS1N,GAAGvyC,EAAOuvC,EAAO,CACxB,OAAOvvC,IAAUuvC,GAAUvvC,IAAUA,GAASuvC,IAAUA,CAC1D,CAoBA,IAAIuV,GAAca,GAAgB,UAAW,CAAE,OAAO,SAAU,GAAI,EAAIA,GAAkB,SAAS3lD,EAAO,CACxG,OAAO4lD,GAAa5lD,CAAK,GAAK8gD,GAAe,KAAK9gD,EAAO,QAAQ,GAC/D,CAACqhD,GAAqB,KAAKrhD,EAAO,QAAQ,CAC9C,EAyBI4kD,GAAU,MAAM,QA2BpB,SAASyE,GAAYrpD,EAAO,CAC1B,OAAOA,GAAS,MAAQunD,GAASvnD,EAAM,MAAM,GAAK,CAACqnD,GAAWrnD,CAAK,CACrE,CAmBA,IAAIglD,GAAWvD,IAAkB6H,GA8BjC,SAASC,GAAQvpD,EAAOuvC,EAAO,CAC7B,OAAOsW,GAAY7lD,EAAOuvC,CAAK,CACjC,CAmBA,SAAS8X,GAAWrnD,EAAO,CACzB,GAAI,CAAC81B,GAAS91B,CAAK,EACjB,MAAO,GAIT,IAAI8O,EAAM02C,GAAWxlD,CAAK,EAC1B,OAAO8O,GAAOmuC,GAAWnuC,GAAOouC,GAAUpuC,GAAO+tC,GAAY/tC,GAAO0uC,CACtE,CA4BA,SAAS+J,GAASvnD,EAAO,CACvB,OAAO,OAAOA,GAAS,UACrBA,EAAQ,IAAMA,EAAQ,GAAK,GAAKA,GAAS8tC,CAC7C,CA2BA,SAAShY,GAAS91B,EAAO,CACvB,IAAI+f,EAAO,OAAO/f,EAClB,OAAOA,GAAS,OAAS+f,GAAQ,UAAYA,GAAQ,WACvD,CA0BA,SAAS6lC,GAAa5lD,EAAO,CAC3B,OAAOA,GAAS,MAAQ,OAAOA,GAAS,QAC1C,CAmBA,IAAIklD,GAAe5F,GAAmBU,GAAUV,EAAgB,EAAIgI,GA8BpE,SAAStzC,GAAKulB,EAAQ,CACpB,OAAO8vB,GAAY9vB,CAAM,EAAIkrB,GAAclrB,CAAM,EAAIiuB,GAASjuB,CAAM,CACtE,CAoBA,SAAS0vB,IAAY,CACnB,MAAO,CAAA,CACT,CAeA,SAASK,IAAY,CACnB,MAAO,EACT,CAEAtiC,EAAA,QAAiBuiC,sCCtzDjB,OAAO,eAAeC,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,uBAAiC,OACjCA,GAAA,qBAA+BC,GAC/B,MAAMjgC,GAAWhZ,GACXkZ,GAAOnV,EAEPg1C,GAAU/0C,GACVk1C,GAAaj1C,GACbpb,GAAOsb,EAEb,MAAMg1C,EAAuB,CACzB,YAAYC,EAAU,CAClB,KAAK,SAAWA,EAChB,KAAK,MAAQ,KACb,KAAK,aAAe,KACpB,KAAK,YAAc,KACnB,KAAK,SAAW,KAChB,KAAK,oBAAsB,IACnC,CACI,IAAI,oBAAqB,CACrB,OAAO,KAAK,mBACpB,CACI,IAAI,MAAO,CACP,OAAO,KAAK,KACpB,CACI,IAAI,aAAc,CACd,OAAO,KAAK,YACpB,CACI,IAAI,0BAA2B,CAC3B,OAAOvwD,GAAK,KAAK,KAAK,SAAU,SAAS,CACjD,CACI,MAAM,uBAAuBwwD,EAAYC,EAAYC,EAAU/7C,EAAQ,CACnE,GAAI,KAAK,aAAe,MAAQ,KAAK,OAAS67C,GAAc,KAAK,UAAY,KAGzE,OAAIN,GAAQ,KAAK,YAAaO,CAAU,GAAKP,GAAQ,KAAK,SAAS,KAAMQ,EAAS,IAAI,GAAM,QAAUL,GAAW,YAAYG,CAAU,EAC5HA,EAGA,KAIf,MAAMG,EAAmB,MAAM,KAAK,yBAAyBD,EAAU/7C,CAAM,EAC7E,OAAIg8C,IAAqB,KACd,MAEXh8C,EAAO,KAAK,yCAAyC67C,CAAU,IAAI,EACnE,KAAK,MAAQG,EACNA,EACf,CACI,MAAM,kBAAkBC,EAAgBC,EAAaC,EAAaJ,EAAUK,EAAgBC,EAAa,CACrG,KAAK,MAAQJ,EACb,KAAK,aAAeC,EACpB,KAAK,YAAcC,EACnB,KAAK,SAAWJ,EAChB,KAAK,oBAAsB,CACvB,SAAUK,EACV,OAAQL,EAAS,KAAK,OACtB,sBAAuBA,EAAS,KAAK,wBAA0B,EAC3E,EACYM,GACA,QAAUX,GAAW,YAAY,KAAK,kBAAiB,EAAI,KAAK,mBAAmB,CAE/F,CACI,MAAM,OAAQ,CACV,KAAK,MAAQ,KACb,KAAK,aAAe,KACpB,KAAK,YAAc,KACnB,KAAK,SAAW,KAChB,MAAM,KAAK,8BAA6B,CAChD,CACI,MAAM,+BAAgC,CAClC,GAAI,CAEA,QAAUA,GAAW,UAAU,KAAK,wBAAwB,CACxE,MACwB,CAExB,CACA,CAMI,MAAM,yBAAyBK,EAAU/7C,EAAQ,CAC7C,MAAMs8C,EAAqB,KAAK,kBAAiB,EAEjD,GAAI,CAD4B,QAAUZ,GAAW,YAAYY,CAAkB,EAE/E,OAAO,KAEX,IAAIC,EACJ,GAAI,CACAA,EAAa,QAAUb,GAAW,UAAUY,CAAkB,CAC1E,OACen6C,EAAO,CACV,IAAIpB,EAAU,kCACd,OAAIoB,EAAM,OAAS,WACf,MAAM,KAAK,8BAA6B,EACxCpB,GAAW,oBAAoBoB,EAAM,OAAO,KAEhDnC,EAAO,KAAKe,CAAO,EACZ,IACnB,CAEQ,GAAI,GAD+Bw7C,GAAe,KAAgC,OAASA,EAAW,YAAc,MAEhH,OAAAv8C,EAAO,KAAK,2FAA2F,EACvG,MAAM,KAAK,8BAA6B,EACjC,KAEX,GAAI+7C,EAAS,KAAK,SAAWQ,EAAW,OACpC,OAAAv8C,EAAO,KAAK,mHAAmHu8C,EAAW,MAAM,eAAeR,EAAS,KAAK,MAAM,+CAA+C,EAClO,MAAM,KAAK,8BAA6B,EACjC,KAEX,MAAMF,EAAaxwD,GAAK,KAAK,KAAK,yBAA0BkxD,EAAW,QAAQ,EAC/E,GAAI,CAAE,QAAUb,GAAW,YAAYG,CAAU,EAC7C,OAAA77C,EAAO,KAAK,kCAAkC,EACvC,KAEX,MAAMye,EAAS,MAAM+9B,GAASX,CAAU,EACxC,OAAIE,EAAS,KAAK,SAAWt9B,GACzBze,EAAO,KAAK,qGAAqGye,CAAM,eAAes9B,EAAS,KAAK,MAAM,EAAE,EAC5J,MAAM,KAAK,8BAA6B,EACjC,OAEX,KAAK,oBAAsBQ,EACpBV,EACf,CACI,mBAAoB,CAChB,OAAOxwD,GAAK,KAAK,KAAK,yBAA0B,kBAAkB,CAC1E,CACA,CACAmwD,GAAA,uBAAiCG,GACjC,SAASa,GAASriD,EAAM+jB,EAAY,SAAUrK,EAAW,SAAUtO,EAAS,CACxE,OAAO,IAAI,QAAQ,CAAC1U,EAASC,IAAW,CACpC,MAAMomB,KAAWsE,GAAS,YAAY0C,CAAS,EAC/ChH,EAAK,GAAG,QAASpmB,CAAM,EAAE,YAAY+iB,CAAQ,KACzC6H,GAAK,kBAAkBvhB,EAAM,CAAE,GAAGoL,EAAS,cAAe,KAAO,IAAI,CAAkD,EACtH,GAAG,QAASzU,CAAM,EAClB,GAAG,MAAO,IAAM,CACjBomB,EAAK,IAAG,EACRrmB,EAAQqmB,EAAK,MAAM,CAC/B,CAAS,EACI,KAAKA,EAAM,CAAE,IAAK,EAAK,CAAE,CACtC,CAAK,CACL,CACA,eAAeukC,GAAqB/sD,EAAMktD,EAAUj7C,EAAK,CAErD,IAAI87C,EAAc,EACd5kD,EAASxM,GAAK,KAAKuwD,EAAUltD,CAAI,EACrC,QAASyF,EAAI,EAAGA,EAAI,EAAGA,IACnB,GAAI,CACA,eAAUunD,GAAW,QAAQ7jD,CAAM,EAC5BA,CACnB,OACezF,EAAG,CACN,GAAIA,EAAE,OAAS,SACX,OAAOyF,EAEX8I,EAAI,KAAK,qCAAqCvO,CAAC,EAAE,EACjDyF,EAASxM,GAAK,KAAKuwD,EAAU,GAAGa,GAAa,IAAI/tD,CAAI,EAAE,CACnE,CAEI,OAAOmJ,CACX,iBCtKA,OAAO,eAAe6kD,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,eAAyBC,GACzB,MAAMtxD,GAAOmX,EACPo6C,GAAOr2C,GACb,SAASo2C,IAAiB,CACtB,MAAME,KAAcD,GAAK,SAAA,EAEzB,IAAI/kD,EACJ,OAAI,QAAQ,WAAa,QACrBA,EAAS,YAAY,cAAmBxM,GAAK,KAAKwxD,EAAS,UAAW,OAAO,EAExE,QAAQ,WAAa,SAC1BhlD,EAASxM,GAAK,KAAKwxD,EAAS,UAAW,QAAQ,EAG/ChlD,EAAS,YAAY,gBAAqBxM,GAAK,KAAKwxD,EAAS,QAAQ,EAElEhlD,CACX,CClBA,OAAO,eAAeilD,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,mBAA6B,OAC7B,MAAMzxD,GAAOmX,EACPu6C,GAAex2C,GACrB,MAAMy2C,EAAmB,CACrB,YAAYC,EAAMz2C,EAAoB,IAAK,CACvC,KAAK,IAAMy2C,CACnB,CACI,WAAY,CACR,OAAO,KAAK,IAAI,UAAS,CACjC,CACI,IAAI,SAAU,CACV,OAAO,KAAK,IAAI,WAAU,CAClC,CACI,IAAI,MAAO,CACP,OAAO,KAAK,IAAI,QAAO,CAC/B,CACI,IAAI,YAAa,CACb,OAAO,KAAK,IAAI,aAAe,EACvC,CACI,IAAI,qBAAsB,CACtB,OAAO,KAAK,WAAa5xD,GAAK,KAAK,QAAQ,cAAe,gBAAgB,EAAIA,GAAK,KAAK,KAAK,IAAI,WAAU,EAAI,oBAAoB,CAC3I,CACI,IAAI,cAAe,CACf,OAAO,KAAK,IAAI,QAAQ,UAAU,CAC1C,CACI,IAAI,eAAgB,CAChB,SAAW0xD,GAAa,gBAAc,CAC9C,CACI,MAAO,CACH,KAAK,IAAI,KAAI,CACrB,CACI,UAAW,CACP,KAAK,IAAI,SAAQ,CACzB,CACI,OAAO97C,EAAS,CACZ,KAAK,IAAI,KAAK,OAAQ,CAACjQ,EAAGksD,IAAaj8C,EAAQi8C,CAAQ,CAAC,CAChE,CACA,CACAJ,GAAA,mBAA6BE,0BCvC7B,OAAO,eAAcxyC,EAAU,aAAc,CAAE,MAAO,GAAM,EAC5DA,EAAA,qBAA+BA,EAAA,iBAA2B,OAC1DA,EAAA,cAAwB2yC,EACxB,MAAMC,EAAyB56C,GAC/BgI,EAAA,iBAA2B,mBAC3B,SAAS2yC,GAAgB,CACrB,OAAO52C,EAAoB,QAAQ,cAAciE,EAAQ,iBAAkB,CACvE,MAAO,EACf,CAAK,CACL,CACA,MAAM6yC,UAA6BD,EAAuB,YAAa,CACnE,YAAYE,EAAoB,CAC5B,MAAK,EACL,KAAK,mBAAqBA,EAC1B,KAAK,cAAgB,IAC7B,CACI,MAAM,SAAS1gC,EAAKqV,EAAa1sB,EAAS,CACtC,OAAO,MAAMA,EAAQ,kBAAkB,cAAc,CAAC1U,EAASC,EAAQurB,IAAa,CAChF,MAAMS,EAAiB,CACnB,QAASvX,EAAQ,SAAW,OAC5B,SAAU,QAC1B,KACgB63C,EAAuB,qBAAqBxgC,EAAKE,CAAc,KAC/DsgC,EAAuB,yBAAyBtgC,CAAc,EAClE,KAAK,WAAWA,EAAgB,CAC5B,YAAAmV,EACA,QAAA1sB,EACA,SAAA8W,EACA,SAAUla,GAAS,CACXA,GAAS,KACTtR,EAAQohC,CAAW,EAGnBnhC,EAAOqR,CAAK,CAEpC,EACgB,gBAAiB,MAClB,CAAC,CAChB,CAAS,CACT,CACI,cAAcoD,EAASb,EAAU,CAEzBa,EAAQ,SAAWA,EAAQ,QAAQ,OAEnCA,EAAQ,KAAOA,EAAQ,QAAQ,KAE/B,OAAOA,EAAQ,QAAQ,MAGvB,KAAK,eAAiB,OACtB,KAAK,cAAgB43C,EAAa,GAEtC,MAAM7gC,EAAU/V,EAAoB,IAAI,QAAQ,CAC5C,GAAGhB,EACH,QAAS,KAAK,aAC1B,CAAS,EACD,OAAA+W,EAAQ,GAAG,WAAY5X,CAAQ,EAC3B,KAAK,oBAAsB,MAC3B4X,EAAQ,GAAG,QAAS,KAAK,kBAAkB,EAExCA,CACf,CACI,oBAAoBA,EAAS/W,EAASzU,EAAQsrB,EAAenb,EAAS,CAClEqb,EAAQ,GAAG,WAAY,CAACP,EAAY7c,EAAQud,IAAgB,CAGxDH,EAAQ,MAAK,EACTF,EAAgB,KAAK,aACrBtrB,EAAO,KAAK,wBAAwB,EAGpCmQ,EAAQm8C,EAAuB,aAAa,0BAA0B3gC,EAAalX,CAAO,CAAC,CAE3G,CAAS,CACT,EAEAiF,EAAA,qBAA+B6yC,wBC5E/B,OAAO,eAAe32C,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,WAAqB62C,GACrB72C,GAAA,eAAyB82C,GACzB92C,GAAA,mBAA6B+2C,GAE7B,MAAM9hC,GAAQnZ,GAEd,SAAS+6C,GAAW3gC,EAAK,CACrB,MAAM/kB,EAAS,IAAI8jB,GAAM,IAAIiB,CAAG,EAChC,OAAK/kB,EAAO,SAAS,SAAS,GAAG,IAC7BA,EAAO,UAAY,KAEhBA,CACX,CAGA,SAAS2lD,GAAeE,EAAU5/B,EAAS6/B,EAA+B,GAAO,CAC7E,MAAM9lD,EAAS,IAAI8jB,GAAM,IAAI+hC,EAAU5/B,CAAO,EAExC5F,EAAS4F,EAAQ,OACvB,OAAI5F,GAAU,MAAQA,EAAO,SAAW,EACpCrgB,EAAO,OAASqgB,EAEXylC,IACL9lD,EAAO,OAAS,WAAW,KAAK,MAAM,SAAS,EAAE,CAAC,IAE/CA,CACX,CACA,SAAS4lD,GAAmBG,EAAS,CACjC,MAAO,GAAGA,CAAO,MACrB,WClBIhO,GAAY,kBAMZc,GAAe,sBACfmN,GAAkB,OAAOnN,GAAa,MAAM,EAG5CI,GAAa,OAAO3pC,IAAU,UAAYA,IAAUA,GAAO,SAAW,QAAUA,GAGhF4pC,GAAW,OAAO,MAAQ,UAAY,MAAQ,KAAK,SAAW,QAAU,KAGxEC,GAAOF,IAAcC,IAAY,SAAS,aAAa,EAAC,EAGxD4B,GAAc,OAAO,UAOrB+E,GAAiB/E,GAAY,SAG7BQ,GAASnC,GAAK,OAGdwD,GAAcrB,GAASA,GAAO,UAAY,OAC1C2K,GAAiBtJ,GAAcA,GAAY,SAAW,OAU1D,SAASuJ,GAAa/rD,EAAO,CAE3B,GAAI,OAAOA,GAAS,SAClB,OAAOA,EAET,GAAIgsD,GAAShsD,CAAK,EAChB,OAAO8rD,GAAiBA,GAAe,KAAK9rD,CAAK,EAAI,GAEvD,IAAI6F,EAAU7F,EAAQ,GACtB,OAAQ6F,GAAU,KAAQ,EAAI7F,GAAU,KAAa,KAAO6F,CAC9D,CA0BA,SAAS+/C,GAAa5lD,EAAO,CAC3B,MAAO,CAAC,CAACA,GAAS,OAAOA,GAAS,QACpC,CAmBA,SAASgsD,GAAShsD,EAAO,CACvB,OAAO,OAAOA,GAAS,UACpB4lD,GAAa5lD,CAAK,GAAK0lD,GAAe,KAAK1lD,CAAK,GAAK49C,EAC1D,CAuBA,SAASqO,GAASjsD,EAAO,CACvB,OAAOA,GAAS,KAAO,GAAK+rD,GAAa/rD,CAAK,CAChD,CAiBA,SAASksD,GAAa91B,EAAQ,CAC5B,OAAAA,EAAS61B,GAAS71B,CAAM,EAChBA,GAAUy1B,GAAgB,KAAKz1B,CAAM,EACzCA,EAAO,QAAQsoB,GAAc,MAAM,EACnCtoB,CACN,CAEA,IAAA+1B,GAAiBD,GCpKjB,OAAO,eAAeE,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,SAAmB,OACnBA,GAAA,SAAmBC,GACnBD,GAAA,gBAA0BE,GAC1BF,GAAA,YAAsBG,GACtBH,GAAA,aAAuBI,GACvB,MAAMpB,GAAyB56C,GACzBi8C,GAAYl4C,GACZoV,GAAQnV,GACRk4C,GAASj4C,GAETy3C,GAAev3C,GACrB,MAAMg4C,EAAS,CACX,YAAYC,EAAgB,CACxB,KAAK,eAAiBA,EACtB,KAAK,eAAiB,KACtB,KAAK,SAAWA,EAAe,QAAA,CAInC,iBAAiB9gC,EAAS+gC,EAAYC,EAAYC,EAAyB,KAAM,CAC7E,MAAMC,KAAqBN,GAAO,gBAAgB,GAAG5gC,EAAQ,QAAQ,YAAaA,CAAO,EAEzF,MAAO,IADoB4gC,GAAO,gBAAgB,GAAG5gC,EAAQ,SAAS,QAAQ,IAAI,OAAOogC,GAAaY,CAAU,EAAG,GAAG,EAAGD,CAAU,CAAC,YAAaE,EAAyB,IAAIpjC,GAAM,IAAIojC,CAAsB,EAAIjhC,CAAO,EACjMkhC,CAAc,CAAA,CAE1C,IAAI,2BAA4B,CAC5B,OAAO,KAAK,eAAe,4BAA8B,EAAA,CAE7D,sBAAuB,CACnB,GAAI,KAAK,eAAe,WAAa,QAAS,CAC1C,MAAMC,EAAO,QAAA,IAAY,mBAAwB,QAAQ,KAEzD,MAAO,UADYA,IAAS,MAAQ,GAAK,IAAIA,CAAI,GAC/B,KAGlB,QAAO,KAAK,eAAe,WAAa,SAAW,OAAS,EAChE,CAGJ,uBAAwB,CACpB,OAAO,KAAK,qBAAqB,QAAQ,CAAA,CAE7C,qBAAqBrB,EAAS,CAC1B,MAAO,GAAGA,CAAO,GAAG,KAAK,sBAAsB,EAAA,CAEnD,IAAI,0BAA2B,CAC3B,OAAO,IAAA,CAEX,kBAAkB5rD,EAAO,CACrB,KAAK,eAAiBA,CAAA,CAK1B,YAAY4qB,EAAKV,EAASrB,EAAmB,CACzC,OAAO,KAAK,SAAS,QAAQ,KAAK,qBAAqB+B,EAAKV,CAAO,EAAGrB,CAAiB,CAAA,CAE3F,qBAAqB+B,EAAKV,EAAS,CAC/B,MAAMrkB,EAAS,CAAA,EACf,OAAI,KAAK,gBAAkB,KACnBqkB,GAAW,OACXrkB,EAAO,QAAUqkB,GAIrBrkB,EAAO,QAAUqkB,GAAW,KAAO,KAAK,eAAiB,CAAE,GAAG,KAAK,eAAgB,GAAGA,CAAA,KAEtFkhC,GAAuB,qBAAqBxgC,EAAK/kB,CAAM,EACpDA,CAAA,CAEf,CACAumD,GAAA,SAAmBO,GACnB,SAASN,GAASn1C,EAAOg2C,EAAWC,EAAK,CACrC,IAAIxxD,EACJ,GAAIub,EAAM,SAAW,EACjB,QAAUk0C,GAAuB,UAAU,oBAAqB,+BAA+B,EAEnG,MAAMgC,EAAgBl2C,EAAM,OAAO2M,GAAMA,EAAG,IAAI,SAAS,YAAA,EAAc,SAAS,IAAIqpC,EAAU,YAAA,CAAa,EAAE,CAAC,EACxGrnD,GAAUlK,EAAKyxD,EAAc,KAAKvpC,GAAM,CAACA,EAAG,IAAI,SAAUA,EAAG,KAAK,GAAG,EAAE,KAAK3F,GAAKA,EAAE,SAAS,QAAQ,IAAI,CAAC,CAAC,KAAO,MAAQviB,IAAO,OAASA,EAAKyxD,EAAc,MAAA,EAClK,OAAIvnD,IAGKsnD,GAAO,KACLj2C,EAAM,CAAC,EAGPA,EAAM,KAAK6yC,GAAY,CAACoD,EAAI,QAAYpD,EAAS,IAAI,SAAS,YAAA,EAAc,SAAS,IAAItpD,EAAI,aAAa,EAAE,CAAC,CAAC,EAE7H,CACA,SAAS6rD,GAAgBe,EAASC,EAAaC,EAAgB,CAC3D,GAAIF,GAAW,KACX,QAAUjC,GAAuB,UAAU,iCAAiCkC,CAAW,qCAAqCC,CAAc,mBAAoB,iCAAiC,EAEnM,IAAI1nD,EACJ,GAAI,CACAA,KAAa4mD,GAAU,MAAMY,CAAO,CAAA,OAEjCjtD,EAAG,CACN,QAAUgrD,GAAuB,UAAU,iCAAiCkC,CAAW,qCAAqCC,CAAc,MAAMntD,EAAE,OAASA,EAAE,OAAO,cAAcitD,CAAO,GAAI,iCAAiC,CAAA,CAElO,OAAOxnD,CACX,CACA,SAAS0mD,GAAYzC,EAAY,CAC7B,MAAM5yC,EAAQ4yC,EAAW,MACzB,GAAI5yC,GAAS,MAAQA,EAAM,OAAS,EAChC,OAAOA,EAGX,GAAI4yC,EAAW,MAAQ,KAEnB,MAAO,CACH,CACI,IAAKA,EAAW,KAChB,KAAMA,EAAW,KACjB,OAAQA,EAAW,MAAA,CACvB,EAIJ,QAAUsB,GAAuB,UAAU,yBAA0BA,GAAuB,mBAAmBtB,CAAU,CAAC,GAAI,+BAA+B,CAErK,CACA,SAAS0C,GAAa1C,EAAYh+B,EAAS0hC,EAAmB5xD,GAAMA,EAAG,CAEnE,MAAMiK,EADQ0mD,GAAYzC,CAAU,EACf,IAAIC,GAAY,CACjC,GAAIA,EAAS,MAAQ,MAAQA,EAAS,QAAU,KAC5C,QAAUqB,GAAuB,UAAU,sEAAuEA,GAAuB,mBAAmBrB,CAAQ,CAAC,GAAI,yBAAyB,EAEtM,MAAO,CACH,OAAS2C,GAAO,gBAAgBc,EAAgBzD,EAAS,GAAG,EAAGj+B,CAAO,EACtE,KAAMi+B,CAAA,CACV,CACH,EACK0D,EAAW3D,EAAW,SACtB4D,EAAcD,GAAY,KAAO,KAAOA,EAAS,QAAQ,IAAI,GAAKA,EAAS,KACjF,OAAIC,GAAe,OAEf7nD,EAAO,CAAC,EAAE,YAAc,CACpB,GAAG6nD,EACH,QAAUhB,GAAO,gBAAgBc,EAAgBE,EAAY,IAAI,EAAG5hC,CAAO,EAAE,IAAA,GAG9EjmB,CACX,CC/IA,OAAO,eAAe8nD,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,gBAA0B,OAC1B,MAAMvC,GAAyB56C,GACzBk8C,GAASn4C,GACT63C,GAAa53C,GACnB,MAAMo5C,WAAwBxB,GAAW,QAAS,CAC9C,YAAYv+B,EAAeggC,EAASjB,EAAgB,CAChD,MAAMA,CAAc,EACpB,KAAK,cAAgB/+B,EACrB,KAAK,QAAUggC,EACf,KAAK,WAAcnB,GAAO,YAAY,KAAK,cAAc,GAAG,CACpE,CACI,IAAI,SAAU,CACV,MAAM7mD,EAAS,KAAK,QAAQ,SAAW,KAAK,cAAc,QAC1D,OAAOA,GAAU,KAAO,KAAK,sBAAqB,EAAK,KAAK,qBAAqBA,CAAM,CAC/F,CACI,MAAM,kBAAmB,CACrB,MAAMynD,KAAkBZ,GAAO,oBAAoB,KAAK,OAAO,EACzDoB,KAAiBpB,GAAO,gBAAgBY,EAAa,KAAK,QAAS,KAAK,QAAQ,iBAAiB,EACvG,QAASzhC,EAAgB,GAAIA,IACzB,GAAI,CACA,SAAWugC,GAAW,iBAAiB,MAAM,KAAK,YAAY0B,CAAU,EAAGR,EAAaQ,CAAU,CAClH,OACmB1tD,EAAG,CACN,GAAIA,aAAagrD,GAAuB,WAAahrD,EAAE,aAAe,IAClE,QAAUgrD,GAAuB,UAAU,wBAAwBkC,CAAW,kBAAkBltD,EAAE,OAASA,EAAE,OAAO,GAAI,oCAAoC,EAE3J,GAAIA,EAAE,OAAS,gBACZyrB,EAAgB,EAAG,CACnB,MAAM,IAAI,QAAQ,CAAChtB,EAASC,IAAW,CACnC,GAAI,CACA,WAAWD,EAAS,IAAOgtB,CAAa,CACxE,OACmCzrB,EAAG,CACNtB,EAAOsB,CAAC,CACxC,CACA,CAAyB,EACD,QACxB,CAEgB,MAAMA,CACtB,CAEA,CACI,aAAa0pD,EAAY,CACrB,SAAWsC,GAAW,cAActC,EAAY,KAAK,OAAO,CACpE,CACA,CACA6D,GAAA,gBAA0BC,mBChD1B,OAAO,eAAeG,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,kBAA4B,OAC5B,MAAM3C,GAAyB56C,GACzBk8C,GAASn4C,GACT63C,GAAa53C,GACnB,MAAMw5C,WAA0B5B,GAAW,QAAS,CAChD,YAAYv+B,EAAeggC,EAASjB,EAAgB,CAChD,MAAM,CACF,GAAGA,EACH,0BAA2B,EACvC,CAAS,EACD,KAAK,cAAgB/+B,EACrB,KAAK,QAAUggC,EACf,KAAM,CAAE,MAAAI,EAAO,KAAAC,CAAI,EAAKrgC,EACxB,KAAK,WAAc6+B,GAAO,YAAY,8CAA8CuB,CAAK,IAAIC,CAAI,YAAY,CACrH,CACI,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,SAAW,KAAK,cAAc,SAAW,QACrE,CACI,MAAM,kBAAmB,CACrB,MAAMrlC,EAAoB,IAAIuiC,GAAuB,kBAC/CkC,KAAkBZ,GAAO,oBAAoB,KAAK,qBAAqB,KAAK,OAAO,CAAC,EACpFoB,KAAiBpB,GAAO,gBAAgBY,EAAa,KAAK,QAAS,KAAK,QAAQ,iBAAiB,EACvG,GAAI,CACA,MAAMxD,EAAa,MAAM,KAAK,YAAYgE,EAAY,OAAWjlC,CAAiB,EAClF,SAAWujC,GAAW,iBAAiBtC,EAAYwD,EAAaQ,CAAU,CACtF,OACe1tD,EAAG,CACN,QAAUgrD,GAAuB,UAAU,oCAAoC,KAAK,SAAQ,CAAE,mCAAmChrD,EAAE,OAASA,EAAE,OAAO,GAAI,sCAAsC,CAC3M,CACA,CACI,aAAa0pD,EAAY,CACrB,SAAWsC,GAAW,cAActC,EAAY,KAAK,OAAO,CACpE,CACI,UAAW,CACP,KAAM,CAAE,MAAAmE,EAAO,KAAAC,CAAI,EAAK,KAAK,cAC7B,MAAO,qBAAqBD,CAAK,WAAWC,CAAI,cAAc,KAAK,OAAO,GAClF,CACA,CACAH,GAAA,kBAA4BC,aCvC5B,OAAO,eAAeG,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,eAAyBA,GAAA,mBAA6B,OACtDA,GAAA,oBAA8BC,GAC9B,MAAMhD,GAAyB56C,GACzBq/B,GAASt7B,GACToV,GAAQnV,GACRk4C,GAASj4C,GACT23C,GAAaz3C,GACb05C,GAAa,kBACnB,MAAMC,WAA2BlC,GAAW,QAAS,CACjD,YAAY74C,EAASqa,EAAag/B,EAAgB,CAC9C,MAAM,CACF,GAAGA,EAEH,0BAA2B,EACvC,CAAS,EACD,KAAK,QAAUr5C,EACf,KAAK,WAAcm5C,GAAO,eAAgBtB,GAAuB,WAAW73C,EAASqa,CAAW,CAAC,EACjG,MAAM2gC,EAAU3gC,IAAgB,aAAe,iBAAmBA,EAClE,KAAK,cAAiB8+B,GAAO,eAAgBtB,GAAuB,WAAW73C,EAASg7C,CAAO,CAAC,CACxG,CACI,sBAAsB1oD,EAAQ,CAE1B,MAAM2oD,EAAO,KAAK,QAAQ,KAC1B,OAAOA,GAAQ,CAAC,CAAC,aAAc,gBAAgB,EAAE,SAASA,CAAI,EAAI,UAAU3oD,CAAM,GAAKA,CAC/F,CACA,CACAsoD,GAAA,mBAA6BG,GAC7B,MAAMG,WAAuBH,EAAmB,CAC5C,YAAY/6C,EAASs6C,EAASjB,EAAgB,CAC1C,MAAMr5C,EAAS,aAAcq5C,CAAc,EAC3C,KAAK,QAAUr5C,EACf,KAAK,QAAUs6C,CACvB,CACI,IAAI,SAAU,CACV,MAAMhoD,EAAS,KAAK,QAAQ,SAAW,KAAK,QAAQ,QACpD,OAAOA,GAAU,KAAO,KAAK,sBAAqB,EAAK,KAAK,qBAAqBA,CAAM,CAC/F,CACI,MAAM,kBAAmB,CACrB,IAAIlK,EAAI0K,EAAIC,EAAIooD,EAAIC,EACpB,MAAM9lC,EAAoB,IAAIuiC,GAAuB,kBAC/CwD,EAAW,MAAM,KAAK,eAAgBlC,GAAO,gBAAgB,GAAG,KAAK,QAAQ,QAAS,KAAK,OAAO,EAAG,CACvG,OAAQ,sDACpB,EAAW7jC,CAAiB,EACdgmC,KAAWzD,GAAuB,UAAUwD,CAAO,EAEzD,IAAIE,EAAgBD,EAAK,QAAQ,QAAS,GAAO,iCAAiC,EAC9E//C,EAAM,KACV,GAAI,CACA,GAAI,KAAK,QAAQ,gBAAiB,CAC9B,MAAMigD,IAAmBpzD,EAAK,KAAK,WAAa,MAAQA,IAAO,OAAS,OAASA,EAAG,YAAc0K,EAAKwpC,GAAO,WAAW,KAAK,QAAQ,cAAc,KAAO,MAAQxpC,IAAO,OAAS,OAASA,EAAG,CAAC,IAAM,KACtM,GAAI0oD,IAAmB,KAEnBjgD,EAAMu/C,GAAW,KAAKS,EAAc,QAAQ,MAAM,EAAE,UAAU,MAAM,CAAC,EAAE,CAAC,MAGxE,WAAWh6B,KAAW+5B,EAAK,YAAY,OAAO,EAAG,CAE7C,MAAMG,EAAcX,GAAW,KAAKv5B,EAAQ,QAAQ,MAAM,EAAE,UAAU,MAAM,CAAC,EAE7E,GAAIk6B,IAAgB,KAChB,SAGJ,MAAMC,EAAUD,EAAY,CAAC,EAEvBE,IAAgB5oD,EAAKupC,GAAO,WAAWof,CAAO,KAAO,MAAQ3oD,IAAO,OAAS,OAASA,EAAG,CAAC,IAAM,KAChG6oD,EAAqB,CAACJ,GAAkB,CAAC,QAAS,MAAM,EAAE,SAASA,CAAc,EACjFK,GAAkBF,IAAgB,MAAQ,CAAC,CAAC,QAAS,MAAM,EAAE,SAAS,OAAOA,CAAW,CAAC,EAG/F,GAAIC,GAAsB,CAACC,IAAmB,EADtBL,IAAmB,QAAUG,IAAgB,SACL,CAC5DpgD,EAAMmgD,EACN,KAC5B,CAEwB,GADyBC,GAAeA,IAAgBH,EAClC,CAClBjgD,EAAMmgD,EACN,KAC5B,CACA,CAEA,KACiB,CACDngD,EAAM,MAAM,KAAK,iBAAiB+Z,CAAiB,EACnD,UAAWiM,KAAW+5B,EAAK,YAAY,OAAO,EAE1C,GAAIR,GAAW,KAAKv5B,EAAQ,QAAQ,MAAM,EAAE,UAAU,MAAM,CAAC,EAAE,CAAC,IAAMhmB,EAAK,CACvEggD,EAAgBh6B,EAChB,KACxB,CAEA,CACA,OACe10B,EAAG,CACN,QAAUgrD,GAAuB,UAAU,+BAA+BhrD,EAAE,OAASA,EAAE,OAAO;AAAA;AAAA,EAAYwuD,CAAO,GAAI,kCAAkC,CACnK,CACQ,GAAI9/C,GAAO,KACP,QAAUs8C,GAAuB,UAAU,kCAAmC,mCAAmC,EAErH,IAAIiC,EACAC,EAAc,GACdC,EAAiB,GACrB,MAAM8B,EAAY,MAAOC,GAAgB,CACrChC,KAAkBZ,GAAO,oBAAoB4C,CAAW,EACxD/B,KAAqBb,GAAO,gBAAgB,KAAK,oBAAoB,OAAO59C,CAAG,EAAGw+C,CAAW,EAAG,KAAK,OAAO,EAC5G,MAAMxiC,EAAiB,KAAK,qBAAqByiC,CAAc,EAC/D,GAAI,CACA,OAAQ,MAAM,KAAK,SAAS,QAAQziC,EAAgBjC,CAAiB,CACrF,OACmBzoB,EAAG,CACN,MAAIA,aAAagrD,GAAuB,WAAahrD,EAAE,aAAe,OACxDgrD,GAAuB,UAAU,eAAekC,CAAW,qCAAqCC,CAAc,MAAMntD,EAAE,OAASA,EAAE,OAAO,GAAI,oCAAoC,EAExLA,CACtB,CACA,EACQ,GAAI,CACA,IAAIwrD,EAAU,KAAK,QACf,KAAK,QAAQ,kBAAqB,GAAA8C,EAAK7e,GAAO,WAAW/gC,CAAG,KAAO,MAAQ4/C,IAAO,SAAkBA,EAAG,CAAC,KACxG9C,EAAU,KAAK,qBAAqB,QAAQ+C,EAAK9e,GAAO,WAAW/gC,CAAG,KAAO,MAAQ6/C,IAAO,OAAS,OAASA,EAAG,CAAC,CAAC,CAAC,GAExHtB,EAAU,MAAMgC,EAAUzD,CAAO,CAC7C,OACexrD,EAAG,CACN,GAAI,KAAK,QAAQ,gBAEbitD,EAAU,MAAMgC,EAAU,KAAK,sBAAqB,CAAE,MAGtD,OAAMjvD,CAEtB,CACQ,MAAMyF,KAAaumD,GAAW,iBAAiBiB,EAASC,EAAaC,CAAc,EACnF,OAAI1nD,EAAO,aAAe,OACtBA,EAAO,YAAcipD,EAAc,oBAAoB,OAAO,GAE9DjpD,EAAO,cAAgB,OACvBA,EAAO,aAAeuoD,GAAoB,KAAK,QAAQ,eAAgB,KAAK,QAAQ,cAAeS,EAAMC,CAAa,GAEnH,CACH,IAAKhgD,EACL,GAAGjJ,CACf,CACA,CACI,MAAM,iBAAiBgjB,EAAmB,CACtC,MAAMtV,EAAU,KAAK,QAEfqX,EAAMrX,EAAQ,MAAQ,MAAQA,EAAQ,OAAS,gBAC3Cm5C,GAAO,gBAAgB,GAAG,KAAK,QAAQ,UAAW,KAAK,OAAO,EAClE,IAAI/iC,GAAM,IAAI,GAAG,KAAK,sBAAsB,UAAUpW,EAAQ,KAAK,IAAIA,EAAQ,IAAI,WAAW,CAAC,UAAW,KAAK,UAAU,EAC/H,GAAI,CACA,MAAM85C,EAAU,MAAM,KAAK,YAAYziC,EAAK,CAAE,OAAQ,kBAAkB,EAAI/B,CAAiB,EAC7F,OAAIwkC,GAAW,KACJ,KAES,KAAK,MAAMA,CAAO,EACnB,QAC/B,OACejtD,EAAG,CACN,QAAUgrD,GAAuB,UAAU,4CAA4CxgC,CAAG,iDAAiDxqB,EAAE,OAASA,EAAE,OAAO,GAAI,sCAAsC,CACrN,CACA,CACI,IAAI,UAAW,CACX,MAAO,IAAI,KAAK,QAAQ,KAAK,IAAI,KAAK,QAAQ,IAAI,WAC1D,CACI,aAAa0pD,EAAY,CAErB,SAAWsC,GAAW,cAActC,EAAY,KAAK,QAASluD,GAAK,KAAK,oBAAoBkuD,EAAW,IAAKluD,EAAE,QAAQ,KAAM,GAAG,CAAC,CAAC,CACzI,CACI,oBAAoBkT,EAAKygD,EAAU,CAC/B,MAAO,GAAG,KAAK,QAAQ,aAAazgD,CAAG,IAAIygD,CAAQ,EAC3D,CACA,CACApB,GAAA,eAAyBM,GACzB,SAASe,GAAa5sC,EAAQ,CAC1B,MAAM/c,EAAS+c,EAAO,oBAAoB,SAAS,EAEnD,OAAO/c,IAAW,cAAgB,GAAKA,CAC3C,CACA,SAASuoD,GAAoBqB,EAAgBC,EAAiBb,EAAMC,EAAe,CAC/E,GAAI,CAACY,EACD,OAAOF,GAAaV,CAAa,EAErC,MAAMa,EAAe,CAAA,EACrB,UAAWngB,KAAWqf,EAAK,YAAY,OAAO,EAAG,CAE7C,MAAMe,EAAiB,oBAAoB,KAAKpgB,EAAQ,QAAQ,MAAM,EAAE,UAAU,MAAM,CAAC,EAAE,CAAC,EACxFK,GAAO,MAAM+f,CAAc,GAAK/f,GAAO,GAAG4f,EAAgBG,CAAc,GACxED,EAAa,KAAK,CACd,QAASC,EACT,KAAMJ,GAAahgB,CAAO,CAC1C,CAAa,CAEb,CACI,OAAOmgB,EAAa,KAAK,CAACh1D,EAAGC,IAAMi1C,GAAO,SAASl1C,EAAE,QAASC,EAAE,OAAO,CAAC,CAC5E,WCpMA,OAAO,eAAei1D,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,eAAyB,OACzB,MAAMzE,GAAyB56C,GACzBmZ,GAAQpV,GAER23C,GAAe13C,GACfk4C,GAASj4C,GACT23C,GAAaz3C,GACnB,MAAMm7C,WAAuB1D,GAAW,QAAS,CAe7C,kBAAkBtpD,EAAU,CACxB,OAAOA,EAAS,QAAQ,OAAQ,GAAG,CAC3C,CACI,YAAYyQ,EAASs6C,EAASjB,EAAgB,CAC1C,MAAM,CACF,GAAGA,EAEH,0BAA2B,EACvC,CAAS,EACD,KAAK,QAAUr5C,EACf,KAAK,QAAUs6C,EAEf,KAAK,oBAAsB,KAE3B,MAAMW,EAAOj7C,EAAQ,MADD,aAEpB,KAAK,cAAiBm5C,GAAO,YAAY,WAAW8B,CAAI,SAAS,CACzE,CACI,IAAI,SAAU,CACV,MAAM3oD,EAAS,KAAK,QAAQ,SAAW,KAAK,QAAQ,QACpD,OAAOA,GAAU,KAAO,KAAK,sBAAqB,EAAK,KAAK,qBAAqBA,CAAM,CAC/F,CACI,MAAM,kBAAmB,CACrB,MAAMgjB,EAAoB,IAAIuiC,GAAuB,kBAE/C2E,KAAuBrD,GAAO,gBAAgB,YAAY,KAAK,QAAQ,SAAS,6BAA8B,KAAK,UAAU,EACnI,IAAIoC,EACJ,GAAI,CACA,MAAMkB,EAAS,CAAE,eAAgB,mBAAoB,GAAG,KAAK,sBAAsB,KAAK,QAAQ,OAAS,IAAI,CAAC,EACxGC,EAAkB,MAAM,KAAK,YAAYF,EAAkBC,EAAQnnC,CAAiB,EAC1F,GAAI,CAAConC,EACD,QAAU7E,GAAuB,UAAU,0BAA2B,mCAAmC,EAE7G0D,EAAgB,KAAK,MAAMmB,CAAe,CACtD,OACe7vD,EAAG,CACN,QAAUgrD,GAAuB,UAAU,4CAA4C2E,CAAgB,MAAM3vD,EAAE,OAASA,EAAE,OAAO,GAAI,sCAAsC,CACvL,CACQ,MAAM0O,EAAMggD,EAAc,SAE1B,IAAIzB,EAAU,KACVC,EAAc,GACdC,EAAiB,KACrB,MAAM2C,EAAmB,MAAOZ,GAAgB,CAC5ChC,KAAkBZ,GAAO,oBAAoB4C,CAAW,EAExD,MAAMa,EAAerB,EAAc,OAAO,MAAM,KAAKsB,GAASA,EAAM,OAAS9C,CAAW,EACxF,GAAI,CAAC6C,EACD,QAAU/E,GAAuB,UAAU,eAAekC,CAAW,gCAAiC,oCAAoC,EAE9IC,EAAiB,IAAI5jC,GAAM,IAAIwmC,EAAa,gBAAgB,EAC5D,MAAMjmC,EAAU,KAAK,QAAQ,MAAQ,CAAE,gBAAiB,KAAK,QAAQ,KAAK,EAAK,OAC/E,GAAI,CACA,MAAMrkB,EAAS,MAAM,KAAK,YAAY0nD,EAAgBrjC,EAASrB,CAAiB,EAChF,GAAI,CAAChjB,EACD,QAAUulD,GAAuB,UAAU,uBAAuBmC,CAAc,GAAI,oCAAoC,EAE5H,OAAO1nD,CACvB,OACmBzF,EAAG,CACN,MAAIA,aAAagrD,GAAuB,WAAahrD,EAAE,aAAe,OACxDgrD,GAAuB,UAAU,eAAekC,CAAW,qCAAqCC,CAAc,MAAMntD,EAAE,OAASA,EAAE,OAAO,GAAI,oCAAoC,EAExLA,CACtB,CACA,EACQ,GAAI,CACAitD,EAAU,MAAM6C,EAAiB,KAAK,OAAO,CACzD,OACe9vD,EAAG,CAEN,GAAI,KAAK,UAAY,KAAK,sBAAqB,EAC3CitD,EAAU,MAAM6C,EAAiB,KAAK,sBAAqB,CAAE,MAG7D,OAAM9vD,CAEtB,CACQ,GAAI,CAACitD,EACD,QAAUjC,GAAuB,UAAU,qCAAqCkC,CAAW,GAAI,iCAAiC,EAEpI,MAAMznD,KAAaumD,GAAW,iBAAiBiB,EAASC,EAAaC,CAAc,EAE/E1nD,EAAO,aAAe,OACtBA,EAAO,YAAcipD,EAAc,MAGnCjpD,EAAO,cAAgB,OACvBA,EAAO,aAAeipD,EAAc,aAAe,MAGvD,MAAMuB,EAAY,IAAI,IACtB,UAAWD,KAAStB,EAAc,OAAO,MACrCuB,EAAU,IAAI,KAAK,kBAAkBD,EAAM,IAAI,EAAGA,EAAM,gBAAgB,EAE5E,MAAME,EAAmB,CACrB,IAAKxhD,EACL,OAAQuhD,EACR,GAAGxqD,CACf,EAEQ,YAAK,oBAAsByqD,EACpBA,CACf,CAKI,mBAAmBC,EAAQ,CACvB,MAAMF,EAAY,IAAI,IACtB,UAAWD,KAASG,EAAO,MACvBF,EAAU,IAAI,KAAK,kBAAkBD,EAAM,IAAI,EAAGA,EAAM,gBAAgB,EAE5E,OAAOC,CACf,CAII,qBAAqBE,EAAQztD,EAAU,CACnC,MAAM0tD,EAAwB,CAAC,GAAG1tD,CAAQ,YAAa,GAAG,KAAK,kBAAkBA,CAAQ,CAAC,WAAW,EACrG,UAAW2tD,KAAgBD,EAAuB,CAC9C,MAAME,EAAWH,EAAO,IAAIE,CAAY,EACxC,GAAIC,EACA,OAAO,IAAI/mC,GAAM,IAAI+mC,CAAQ,CAE7C,CACQ,OAAO,IACf,CACI,MAAM,0BAA0B1oC,EAAS,CACrC,MAAMa,EAAoB,IAAIuiC,GAAuB,kBAE/CuF,EAAqB,CAAC,IAAI3oC,CAAO,GAAIA,CAAO,EAClD,UAAW4oC,KAAaD,EAAoB,CACxC,MAAME,KAAiBnE,GAAO,gBAAgB,YAAY,KAAK,QAAQ,SAAS,aAAa,mBAAmBkE,CAAS,CAAC,GAAI,KAAK,UAAU,EAC7I,GAAI,CACA,MAAMZ,EAAS,CAAE,eAAgB,mBAAoB,GAAG,KAAK,sBAAsB,KAAK,QAAQ,OAAS,IAAI,CAAC,EACxGC,EAAkB,MAAM,KAAK,YAAYY,EAAYb,EAAQnnC,CAAiB,EACpF,GAAIonC,EAEA,OADgB,KAAK,MAAMA,CAAe,CAG9D,OACmB7vD,EAAG,CAEN,GAAIA,aAAagrD,GAAuB,WAAahrD,EAAE,aAAe,IAClE,SAGJ,QAAUgrD,GAAuB,UAAU,0BAA0BwF,CAAS,eAAeC,CAAU,MAAMzwD,EAAE,OAASA,EAAE,OAAO,GAAI,+BAA+B,CACpL,CACA,CAEQ,QAAUgrD,GAAuB,UAAU,uCAAuCpjC,CAAO,YAAY2oC,EAAmB,KAAK,IAAI,CAAC,cAAe,+BAA+B,CACxL,CACI,sBAAsB/jC,EAAO,CACzB,MAAM1C,EAAU,CAAA,EAChB,OAAI0C,GAAS,OAILA,EAAM,WAAW,QAAQ,EACzB1C,EAAQ,cAAgB0C,EAGxB1C,EAAQ,eAAe,EAAI0C,GAG5B1C,CACf,CAII,MAAM,0BAA0BlC,EAAS,CAErC,GAAI,KAAK,qBAAuB,KAAK,oBAAoB,UAAYA,EACjE,OAAO,KAAK,oBAAoB,OAGpC,MAAMmiC,EAAc,MAAM,KAAK,0BAA0BniC,CAAO,EAChE,OAAImiC,GAAeA,EAAY,OACpB,KAAK,mBAAmBA,EAAY,MAAM,EAE9C,IACf,CAII,MAAM,2BAA2B0C,EAAYC,EAAYgE,EAAc,CACnE,IAAI9D,EAAiB,KACjB+D,EAAiB,KAErB,MAAMC,EAAmB,MAAM,KAAK,0BAA0BlE,CAAU,EACpEkE,IACAhE,EAAiB,KAAK,qBAAqBgE,EAAkBF,CAAY,GAG7E,MAAMG,EAAmB,MAAM,KAAK,0BAA0BpE,CAAU,EACxE,GAAIoE,EAAkB,CAClB,MAAMC,EAAcJ,EAAa,QAAQ,IAAI,OAAO5E,GAAaY,CAAU,EAAG,GAAG,EAAGD,CAAU,EAC9FkE,EAAiB,KAAK,qBAAqBE,EAAkBC,CAAW,CACpF,CACQ,MAAO,CAACH,EAAgB/D,CAAc,CAC9C,CACI,MAAM,iBAAiBlhC,EAAS+gC,EAAYC,EAAYC,EAAyB,KAAM,CAInF,GAAI,KAAK,QAAQ,eAAiB,iBAAkB,CAEhD,MAAM+D,EAAehlC,EAAQ,SAAS,MAAM,GAAG,EAAE,IAAG,GAAM,GAEpD,CAACilC,EAAgB/D,CAAc,EAAI,MAAM,KAAK,2BAA2BH,EAAYC,EAAYgE,CAAY,EACnH,GAAI,CAAC9D,EACD,QAAU5B,GAAuB,UAAU,iCAAiC0B,CAAU,oBAAqB,qCAAqC,EAEpJ,GAAI,CAACiE,EACD,QAAU3F,GAAuB,UAAU,iCAAiCyB,CAAU,oBAAqB,qCAAqC,EAEpJ,MAAO,CAACkE,EAAgB/D,CAAc,CAClD,KAEY,QAAO,MAAM,iBAAiBlhC,EAAS+gC,EAAYC,EAAYC,CAAsB,CAEjG,CACI,aAAajD,EAAY,CACrB,SAAWsC,GAAW,aAAatC,CAAU,EAAE,IAAKC,GAAa,CAM7D,MAAMoH,EAJgB,CAClBpH,EAAS,IACT,KAAK,kBAAkBA,EAAS,GAAG,CACnD,EACoD,KAAKrtD,GAAQotD,EAAW,OAAO,IAAIptD,CAAI,CAAC,EAC1Eg0D,EAAWS,EAAoBrH,EAAW,OAAO,IAAIqH,CAAiB,EAAI,OAChF,GAAI,CAACT,EACD,QAAUtF,GAAuB,UAAU,sBAAsBrB,EAAS,GAAG,iDAAiD,MAAM,KAAKD,EAAW,OAAO,MAAM,EAAE,KAAK,IAAI,CAAC,GAAI,6BAA6B,EAElN,MAAO,CACH,IAAK,IAAIngC,GAAM,IAAI+mC,CAAQ,EAC3B,KAAM3G,CACtB,CACA,CAAS,CACT,CACI,UAAW,CACP,MAAO,sBAAsB,KAAK,QAAQ,SAAS,cAAc,KAAK,OAAO,GACrF,CACA,CACA8F,GAAA,eAAyBC,aC5QzB,OAAO,eAAesB,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,eAAyB,OACzB,MAAMhG,GAAyB56C,GACzBk8C,GAASn4C,GACT63C,GAAa53C,GACnB,MAAM68C,WAAuBjF,GAAW,QAAS,CAC7C,YAAYv+B,EAAeggC,EAASjB,EAAgB,CAChD,MAAM,CACF,GAAGA,EACH,0BAA2B,EACvC,CAAS,EACD,KAAK,cAAgB/+B,EACrB,KAAK,QAAUggC,EACf,KAAK,gBAAkB,gBACvB,MAAMW,EAAO,KAAK,cAAc,MAAQ,KAAK,gBAC7C,KAAK,WAAc9B,GAAO,YAAY,WAAW8B,CAAI,gBAAgB,KAAK,cAAc,OAAO,sBAAsB,KAAK,cAAc,OAAO,EAAE,CACzJ,CACI,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,SAAW,KAAK,cAAc,SAAW,QACrE,CACI,MAAM,kBAAmB,CACrB,MAAM3lC,EAAoB,IAAIuiC,GAAuB,kBAC/CkC,KAAkBZ,GAAO,oBAAoB,KAAK,qBAAqB,KAAK,OAAO,CAAC,EACpFoB,KAAiBpB,GAAO,gBAAgBY,EAAa,KAAK,QAAS,KAAK,QAAQ,iBAAiB,EACvG,GAAI,CACA,MAAMxD,EAAa,MAAM,KAAK,YAAYgE,EAAY,CAClD,OAAQ,2BACR,iBAAkB,KAClC,EAAejlC,CAAiB,EACpB,SAAWujC,GAAW,iBAAiBtC,EAAYwD,EAAaQ,CAAU,CACtF,OACe1tD,EAAG,CACN,QAAUgrD,GAAuB,UAAU,oCAAoC,KAAK,SAAQ,CAAE,mCAAmChrD,EAAE,OAASA,EAAE,OAAO,GAAI,sCAAsC,CAC3M,CACA,CACI,aAAa0pD,EAAY,CACrB,SAAWsC,GAAW,cAActC,EAAY,KAAK,OAAO,CACpE,CACI,UAAW,CACP,KAAM,CAAE,QAAAwH,EAAS,QAAAC,EAAS,SAAA5gD,CAAQ,EAAK,KAAK,cAC5C,MAAO,oBAAoB2gD,CAAO,cAAcC,CAAO,eAAe5gD,CAAQ,cAAc,KAAK,OAAO,GAChH,CACA,CACAygD,GAAA,eAAyBC,aC3CzB,OAAO,eAAeG,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,sBAAgC,OAChC,MAAMpG,GAAyB56C,GACzBi8C,GAAYl4C,GACZlb,GAAOmb,EACPmV,GAAQlV,GACRi4C,GAAS/3C,GACTw5C,GAAmB14C,GACnB22C,GAAa/rC,GACnB,MAAMoxC,WAA8BtD,GAAiB,kBAAmB,CACpE,YAAY56C,EAASs6C,EAASjhC,EAAOggC,EAAgB,CACjD,MAAMr5C,EAAS,iBAAkBq5C,CAAc,EAC/C,KAAK,QAAUiB,EACf,KAAK,MAAQjhC,CACrB,CACI,qBAAqBhC,EAAKV,EAAS,CAC/B,MAAMrkB,EAAS,MAAM,qBAAqB+kB,EAAKV,CAAO,EACtD,OAAArkB,EAAO,SAAW,SACXA,CACf,CACI,MAAM,kBAAmB,CACrB,MAAMgjB,EAAoB,IAAIuiC,GAAuB,kBAC/CkC,KAAkBZ,GAAO,oBAAoB,KAAK,sBAAqB,CAAE,EACzEgF,EAAc,MAAM,KAAK,qBAAqB7oC,CAAiB,EAC/DunC,EAAQsB,EAAY,OAAO,KAAK7tC,GAAMA,EAAG,OAASypC,CAAW,EACnE,GAAI8C,GAAS,KAET,QAAUhF,GAAuB,UAAU,eAAekC,CAAW,mBAAmBoE,EAAY,UAAYA,EAAY,IAAI,GAAI,oCAAoC,EAE5K,MAAM9mC,EAAM,IAAIjB,GAAM,IAAIymC,EAAM,GAAG,EACnC,IAAIvqD,EACJ,GAAI,CACAA,KAAa4mD,GAAU,MAAO,MAAM,KAAK,YAAY7hC,EAAK,KAAK,iBAAiB,0BAA0B,EAAG/B,CAAiB,CAAC,CAC3I,OACezoB,EAAG,CACN,MAAIA,aAAagrD,GAAuB,WAAahrD,EAAE,aAAe,OACxDgrD,GAAuB,UAAU,eAAekC,CAAW,qCAAqC1iC,CAAG,MAAMxqB,EAAE,OAASA,EAAE,OAAO,GAAI,oCAAoC,EAE7KA,CAClB,CAEQ,OAAAyF,EAAO,OAAS6rD,EAAY,OACrB7rD,CACf,CACI,IAAI,0BAA2B,CAC3B,OAAO,KAAK,iBAAiB,0BAA0B,CAC/D,CACI,iBAAiB8rD,EAAQ,CACrB,MAAO,CACH,OAAAA,EACA,cAAe,SAAS,KAAK,KAAK,EAC9C,CACA,CACI,MAAM,qBAAqB9oC,EAAmB,CAC1C,MAAM+oC,EAAkB,KAAK,QAAQ,gBACrC,IAAIC,EAAW,KAAK,SACfD,IACDC,EAAW,GAAGA,CAAQ,WAE1B,MAAMjnC,KAAU8hC,GAAO,gBAAgBmF,EAAU,KAAK,OAAO,EAC7D,GAAI,CACA,MAAM7pC,EAAU,KAAK,MAAO,MAAM,KAAK,YAAY4C,EAAK,KAAK,iBAAiB,gCAAgC,EAAG/B,CAAiB,CAAC,EACnI,OAAI+oC,EACO5pC,EAAQ,KAAKnE,GAAMA,EAAG,UAAU,GAAKmE,EAAQ,CAAC,EAG9CA,CAEvB,OACe5nB,EAAG,CACN,QAAUgrD,GAAuB,UAAU,4CAA4CxgC,CAAG,iDAAiDxqB,EAAE,OAASA,EAAE,OAAO,GAAI,sCAAsC,CACrN,CACA,CACI,IAAI,UAAW,CACX,OAAO,KAAK,sBAAsB,UAAU,KAAK,QAAQ,KAAK,IAAI,KAAK,QAAQ,IAAI,WAAW,CACtG,CACI,aAAa0pD,EAAY,CACrB,SAAWsC,GAAW,aAAatC,CAAU,EAAE,IAAIjmC,GAAM,CACrD,MAAMnnB,EAAOrD,GAAK,MAAM,SAASwqB,EAAG,GAAG,EAAE,QAAQ,KAAM,GAAG,EACpDusC,EAAQtG,EAAW,OAAO,KAAKjmC,GAAMA,GAAM,MAAQA,EAAG,OAASnnB,CAAI,EACzE,GAAI0zD,GAAS,KACT,QAAUhF,GAAuB,UAAU,sBAAsB1uD,CAAI,SAAS,KAAK,UAAUotD,EAAW,OAAQ,KAAM,CAAC,CAAC,GAAI,6BAA6B,EAE7J,MAAO,CACH,IAAK,IAAIngC,GAAM,IAAIymC,EAAM,GAAG,EAC5B,KAAMvsC,CACtB,CACA,CAAS,CACT,CACA,CACA2tC,GAAA,sBAAgCC,GC1FhC,OAAO,eAAeK,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,uCAAiDC,GACjDD,GAAA,aAAuBE,GACvB,MAAM5G,GAAyB56C,GACzBu9C,GAAsBx5C,GACtBo5C,GAAoBn5C,GACpB25C,GAAmB15C,GACnBo7C,GAAmBl7C,GACnBy8C,GAAmB37C,GACnB+7C,GAA0BnxC,GAChC,SAAS0xC,GAAuCnnC,EAAK,CACjD,MAAO,CAACA,EAAI,SAAS,kBAAkB,CAC3C,CACA,SAASonC,GAAah0D,EAAM6vD,EAASjB,EAAgB,CAEjD,GAAI,OAAO5uD,GAAS,SAChB,QAAUotD,GAAuB,UAAU,0CAA2C,4CAA4C,EAEtI,MAAMt9B,EAAW9vB,EAAK,SACtB,OAAQ8vB,EAAA,CACJ,IAAK,SAAU,CACX,MAAMmkC,EAAgBj0D,EAChB4uB,GAASqlC,EAAc,QAAU,QAAA,IAAY,UAAe,QAAA,IAAY,aAAkB,OAASA,EAAc,MACvH,OAAIrlC,GAAS,KACF,IAAIuhC,GAAiB,eAAe8D,EAAepE,EAASjB,CAAc,EAG1E,IAAI4E,GAAwB,sBAAsBS,EAAepE,EAASjhC,EAAOggC,CAAc,CAC1G,CAEJ,IAAK,YACD,OAAO,IAAImB,GAAoB,kBAAkB/vD,EAAM6vD,EAASjB,CAAc,EAClF,IAAK,SACD,OAAO,IAAIiD,GAAiB,eAAe7xD,EAAM6vD,EAASjB,CAAc,EAC5E,IAAK,SACD,OAAO,IAAIwE,GAAiB,eAAepzD,EAAM6vD,EAASjB,CAAc,EAC5E,IAAK,KACL,IAAK,SACD,OAAO,IAAIe,GAAkB,gBAAgB,CACzC,SAAU,UACV,OAASvC,GAAuB,0BAA0BptD,CAAI,EAC9D,QAASA,EAAK,SAAW,IAAA,EAC1B6vD,EAAS,CACR,GAAGjB,EAEH,0BAA2B,EAAA,CAC9B,EACL,IAAK,UAAW,CACZ,MAAMr5C,EAAUvV,EAChB,OAAO,IAAI2vD,GAAkB,gBAAgBp6C,EAASs6C,EAAS,CAC3D,GAAGjB,EACH,0BAA2Br5C,EAAQ,0BAA4B,IAASw+C,GAAuCx+C,EAAQ,GAAG,CAAA,CAC7H,CAAA,CAEL,IAAK,SAAU,CACX,MAAMA,EAAUvV,EACVk0D,EAAc3+C,EAAQ,eAC5B,GAAI,CAAC2+C,EACD,QAAU9G,GAAuB,UAAU,gCAAiC,4CAA4C,EAE5H,OAAO,IAAI8G,EAAY3+C,EAASs6C,EAASjB,CAAc,CAAA,CAE3D,QACI,QAAUxB,GAAuB,UAAU,yBAAyBt9B,CAAQ,GAAI,kCAAkC,CAAA,CAE9H,6BCjEA,OAAO,eAAeqkC,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,cAAwB,OACxBA,GAAA,kBAA4BC,GAC5B,IAAIC,IACH,SAAUA,EAAe,CACtBA,EAAcA,EAAc,KAAU,CAAC,EAAI,OAC3CA,EAAcA,EAAc,SAAc,CAAC,EAAI,UACnD,GAAGA,KAAkBF,GAAA,cAAwBE,GAAgB,CAAA,EAAG,EAChE,SAASD,GAAkBE,EAAaC,EAAavkD,EAAQ,CACzD,MAAMwkD,EAAkBC,GAAkBH,EAAY,KAAK,EACrDI,EAAkBD,GAAkBF,EAAY,KAAK,EAC3D,IAAII,EAAgB,KAEpB,MAAMC,EAAeL,EAAY,MAAM,CAAC,EAClCM,EAAa,CAAA,EACbn2D,EAAOk2D,EAAa,KACpBE,EAAWN,EAAgB,IAAI91D,CAAI,EACzC,GAAIo2D,GAAY,KAEZ,MAAM,IAAI,MAAM,WAAWp2D,CAAI,kBAAkB,EAErD,MAAMq2D,EAAUL,EAAgB,IAAIh2D,CAAI,EACxC,IAAIs2D,EAAoB,EACxB,KAAM,CAAE,iBAAkBC,EAAqB,kBAAAC,CAAA,EAAsBC,GAAiBX,EAAgB,IAAI91D,CAAI,EAAGo2D,EAAS,OAAQ9kD,CAAM,EACxI,IAAIolD,EAAYR,EAAa,OAC7B,QAASzwD,EAAI,EAAGA,EAAI4wD,EAAQ,UAAU,OAAQK,GAAaL,EAAQ,MAAM5wD,CAAC,EAAGA,IAAK,CAC9E,MAAMkxD,EAAYN,EAAQ,MAAM5wD,CAAC,EAC3BmxD,EAAWP,EAAQ,UAAU5wD,CAAC,EACpC,IAAIoxD,EAAYN,EAAoB,IAAIK,CAAQ,EAC5CC,GAAa,MAAQL,EAAkB,IAAII,CAAQ,IAAMD,IACzDrlD,EAAO,KAAK,cAAcslD,CAAQ,sCAAsCJ,EAAkB,IAAII,CAAQ,CAAC,UAAUD,CAAS,GAAG,EAC7HE,EAAY,QAEZA,IAAc,QAEdP,IACIL,GAAiB,MAAQA,EAAc,OAASN,GAAc,UAAYM,EAAc,MAAQS,EAChGT,EAAc,KAAOU,GAGrBV,EAAgB,CACZ,KAAMN,GAAc,SACpB,MAAOe,EACP,IAAKA,EAAYC,CAAA,EAGrBG,GAAeb,EAAeE,EAAYS,EAAUnxD,CAAC,IAKrDwwD,GAAiB,MAAQA,EAAc,OAASN,GAAc,MAAQM,EAAc,MAAQY,EAC5FZ,EAAc,KAAOU,GAIrBV,EAAgB,CACZ,KAAMN,GAAc,KACpB,MAAOkB,EACP,IAAKA,EAAYF,CAAA,EAGrBG,GAAeb,EAAeE,EAAYS,EAAUnxD,CAAC,EAE7D,CAEJ,OAAI6wD,EAAoB,GACpBhlD,EAAO,KAAK,OAAO4kD,EAAa,OAAS,OAAS,GAAK,IAAMA,EAAa,IAAI,QAAQI,CAAiB,iBAAiB,EAErHH,CACX,CACA,MAAMY,GAA2B,QAAA,IAAY,qDAA0D,OACvG,SAASD,GAAeE,EAAWb,EAAYS,EAAUr/C,EAAO,CAC5D,GAAIw/C,IAA4BZ,EAAW,SAAW,EAAG,CACrD,MAAMF,EAAgBE,EAAWA,EAAW,OAAS,CAAC,EACtD,GAAIF,EAAc,OAASe,EAAU,MAAQA,EAAU,MAAQf,EAAc,KAAOe,EAAU,MAAQf,EAAc,MAAO,CACvH,MAAM7qC,EAAM,CAAC6qC,EAAc,MAAOA,EAAc,IAAKe,EAAU,MAAOA,EAAU,GAAG,EAAE,OAAO,CAAC93D,EAAG+pB,IAAO/pB,EAAI+pB,EAAI/pB,EAAI+pB,CAAE,EACrH,MAAM,IAAI,MAAM,2BAA2B1R,CAAK,eAAeq/C,CAAQ,WAAWjB,GAAcqB,EAAU,IAAI,CAAC,4CAA4CJ,CAAQ;AAAA,OACvJX,EAAc,KAAK,UAAUA,EAAc,GAAG,QAAQe,EAAU,KAAK,UAAUA,EAAU,GAAG;AAAA,OAC5Ff,EAAc,MAAQ7qC,CAAG,UAAU6qC,EAAc,IAAM7qC,CAAG,QAAQ4rC,EAAU,MAAQ5rC,CAAG,UAAU4rC,EAAU,IAAM5rC,CAAG,EAAE,CAAA,CACtI,CAEJ+qC,EAAW,KAAKa,CAAS,CAC7B,CACA,SAASP,GAAiBhrD,EAAMwrD,EAAY3lD,EAAQ,CAChD,MAAM4lD,MAAuB,IACvBC,MAAqB,IAC3B,IAAIh4D,EAAS83D,EACb,QAASxxD,EAAI,EAAGA,EAAIgG,EAAK,UAAU,OAAQhG,IAAK,CAC5C,MAAMmxD,EAAWnrD,EAAK,UAAUhG,CAAC,EAC3B4hD,EAAO57C,EAAK,MAAMhG,CAAC,EACnB2xD,EAAWD,EAAe,IAAIP,CAAQ,EAC5C,GAAIQ,IAAa,OACbF,EAAiB,IAAIN,EAAUz3D,CAAM,EACrCg4D,EAAe,IAAIP,EAAUvP,CAAI,UAE5B/1C,EAAO,OAAS,KAAM,CAC3B,MAAM+lD,EAAkBD,IAAa/P,EAAO,cAAgB,UAAU+P,CAAQ,gBAAgB/P,CAAI,IAClG/1C,EAAO,MAAM,GAAGslD,CAAQ,2BAA2BS,CAAe,gGAAgG,CAAA,CAEtKl4D,GAAUkoD,CAAA,CAEd,MAAO,CAAE,iBAAA6P,EAAkB,kBAAmBC,CAAA,CAClD,CACA,SAASpB,GAAkB1gB,EAAM,CAC7B,MAAMlsC,MAAa,IACnB,UAAW4W,KAAQs1B,EACflsC,EAAO,IAAI4W,EAAK,KAAMA,CAAI,EAE9B,OAAO5W,CACX,CC9GA,OAAO,eAAemuD,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,aAAuB,OACvBA,GAAA,SAAmBC,GACnB,MAAM7I,GAAyB56C,GACzBkZ,GAAOnV,EACPmU,GAAWlU,GACX0/C,GAAwBz/C,GACxB0/C,GAAc,OAAO,KAAK;AAAA;AAAA,CAAU,EAC1C,IAAIC,IACH,SAAUA,EAAW,CAClBA,EAAUA,EAAU,KAAU,CAAC,EAAI,OACnCA,EAAUA,EAAU,OAAY,CAAC,EAAI,SACrCA,EAAUA,EAAU,KAAU,CAAC,EAAI,MACvC,GAAGA,KAAcA,GAAY,CAAA,EAAG,EAChC,SAASH,GAAStoC,EAAM0oC,EAAKC,EAAWx1D,EAAQD,EAAS,CACrD,MAAM01D,KAAiB7qC,GAAK,kBAAkB,GAAI,CAC9C,GAAI4qC,EACJ,UAAW,GACX,MAAO3oC,EAAK,MAEZ,IAAKA,EAAK,IAAM,CACxB,CAAK,EACD4oC,EAAW,GAAG,QAASz1D,CAAM,EAC7By1D,EAAW,KAAK,MAAO11D,CAAO,EAC9B01D,EAAW,KAAKF,EAAK,CACjB,IAAK,EACb,CAAK,CACL,CACA,MAAMG,WAAqB9rC,GAAS,QAAS,CACzC,YAAY2rC,EAAK9gD,EAASkhD,EAAsBC,EAAUC,EAAmBC,EAAeC,EAAiB/rC,EAAY,CACrH,MAAK,EACL,KAAK,IAAMurC,EACX,KAAK,QAAU9gD,EACf,KAAK,qBAAuBkhD,EAC5B,KAAK,kBAAoBE,EACzB,KAAK,cAAgBC,EACrB,KAAK,gBAAkBC,EACvB,KAAK,WAAa/rC,EAElB,KAAK,MAAQ,KAAK,MAClB,KAAK,WAAa,KAAK,MAAQ,IAC/B,KAAK,YAAc,EACnB,KAAK,MAAQ,EACb,KAAK,UAAY,GACjB,KAAK,iBAAmB,KACxB,KAAK,UAAYsrC,GAAU,KAC3B,KAAK,gBAAkB,EACvB,KAAK,uBAAyB,EAC9B,KAAK,iBAAmB,EACxB,KAAK,eAAiBM,EAAS,OAAS,EAExC,KAAK,gBAAkB,KAAK,eAAiB,CACrD,CACI,IAAI,YAAa,CACb,OAAO,KAAK,YAAc,KAAK,kBAAkB,MACzD,CAEI,OAAO12D,EAAM6jB,EAAUnP,EAAU,CAC7B,GAAI,KAAK,WAAY,CACjB,QAAQ,MAAM,0BAA0B1U,EAAK,MAAM,QAAQ,EAC3D,MACZ,CACQ,KAAK,WAAWA,CAAI,EACf,KAAK,IAAM,CACZ,GAAI,KAAK,WAAY,CACjB,MAAMhD,EAAM,KAAK,IAAG,GACfA,GAAO,KAAK,YAAc,KAAK,cAAgB,KAAK,kBAAoB,KAAK,kBAAoBA,EAAM,KAAK,OAAS,MACtH,KAAK,WAAaA,EAAM,IACxB,KAAK,WAAW,CACZ,MAAO,KAAK,gBACZ,MAAO,KAAK,MACZ,YAAa,KAAK,YAClB,QAAU,KAAK,YAAc,KAAK,gBAAmB,IACrD,eAAgB,KAAK,MAAM,KAAK,cAAgBA,EAAM,KAAK,OAAS,IAAK,CACjG,CAAqB,EACD,KAAK,MAAQ,EAEjC,CACY0X,EAAQ,CACpB,CAAS,EACI,MAAMA,CAAQ,CAC3B,CACI,MAAM,WAAWqW,EAAO,CACpB,IAAIjX,EAAQ,EACZ,GAAI,KAAK,kBAAoB,GAAK,KAAK,yBAA2B,EAC9D,QAAUs5C,GAAuB,UAAU,iBAAkB,uCAAuC,EAExG,GAAI,KAAK,gBAAkB,EAAG,CAC1B,MAAM0J,EAAW,KAAK,IAAI,KAAK,gBAAiB/rC,EAAM,MAAM,EAC5D,KAAK,iBAAmB+rC,EACxBhjD,EAAQgjD,CACpB,SACiB,KAAK,uBAAyB,EAAG,CACtC,MAAMC,EAAS,KAAK,IAAI,KAAK,uBAAwBhsC,EAAM,MAAM,EACjE,KAAK,wBAA0BgsC,EAC/B,MAAM,KAAK,gBAAgBhsC,EAAO,EAAGgsC,CAAM,EAC3CjjD,EAAQijD,CACpB,CACQ,GAAIjjD,IAAUiX,EAAM,OAGpB,IAAI,KAAK,YAAcqrC,GAAU,OAAQ,CACrC,MAAMY,EAAgB,KAAK,oBAAoBjsC,EAAOjX,CAAK,EAC3D,GAAIkjD,IAAkB,GAClB,OAEJljD,EAAQkjD,EACR,KAAK,UAAYZ,GAAU,KAE3B,KAAK,iBAAmB,IACpC,CACQ,OAAa,CACT,GAAI,KAAK,YAAcA,GAAU,KAC7B,KAAK,UAAYA,GAAU,SAE1B,CACD,KAAK,YACL,IAAIa,EAAY,KAAK,qBAAqB,IAAI,KAAK,SAAS,EAC5D,GAAIA,GAAa,KACb,GAAI,KAAK,WACLA,EAAY,KAAK,QAAQ,QAGzB,SAAU7J,GAAuB,UAAU,oBAAqB,sCAAsC,EAG9G,MAAM8J,EAAgB,KAAK,YAAc,EAAI,KAAK,QAAQ,MAAQ,KAAK,qBAAqB,IAAI,KAAK,UAAY,CAAC,EAAI,EACtH,GAAIA,EAAgBD,EAChB,MAAM,KAAK,iBAAiBC,EAAeD,CAAS,UAE/CC,EAAgBD,EACrB,QAAU7J,GAAuB,UAAU,oCAAqC,4CAA4C,EAEhI,GAAI,KAAK,WAAY,CACjB,KAAK,UAAS,EACd,KAAK,cAAa,EAClB,MACpB,CAEgB,GADAt5C,EAAQ,KAAK,oBAAoBiX,EAAOjX,CAAK,EACzCA,IAAU,GAAI,CACd,KAAK,UAAYsiD,GAAU,OAC3B,MACpB,CACA,CACY,MAAMe,EAAa,KAAK,kBAAkB,KAAK,SAAS,EAClDpkC,EAAMjf,EAAQqjD,EACdC,EAAe,KAAK,IAAIrkC,EAAKhI,EAAM,MAAM,EAG/C,GAFA,MAAM,KAAK,mBAAmBA,EAAOjX,EAAOsjD,CAAY,EACxD,KAAK,uBAAyBD,GAAcC,EAAetjD,GACvD,KAAK,uBAAyB,EAC9B,OAGJ,GADAA,EAAQif,EAAM,KAAK,eACfjf,GAASiX,EAAM,OAAQ,CACvB,KAAK,gBAAkB,KAAK,gBAAkBA,EAAM,OAASgI,GAC7D,MAChB,CACA,EACA,CACI,iBAAiB9c,EAAO8c,EAAK,CACzB,OAAO,IAAI,QAAQ,CAAClyB,EAASC,IAAW,CACpC,MAAMklB,EAAI,IAAM,CACZ,GAAI/P,IAAU8c,EAAK,CACflyB,EAAO,EACP,MACpB,CACgB,MAAM8sB,EAAO,KAAK,QAAQ,MAAM1X,CAAK,EACrC,GAAI0X,EAAK,OAASuoC,GAAsB,cAAc,KAAM,CACxDp1D,EAAO,IAAI,MAAM,wBAAwB,CAAC,EAC1C,MACpB,CACgBm1D,GAAStoC,EAAM,KAAK,IAAK,KAAK,QAAQ,UAAW7sB,EAAQ,IAAM,CAC3DmV,IACA+P,EAAC,CACrB,CAAiB,CACjB,EACYA,EAAC,CACb,CAAS,CACT,CACI,oBAAoB+E,EAAOssC,EAAY,CACnC,MAAML,EAAgBjsC,EAAM,QAAQorC,GAAakB,CAAU,EAC3D,GAAIL,IAAkB,GAClB,OAAOA,EAAgBb,GAAY,OAGvC,MAAMmB,EAAeD,IAAe,EAAItsC,EAAQA,EAAM,MAAMssC,CAAU,EACtE,OAAI,KAAK,kBAAoB,KACzB,KAAK,iBAAmBC,EAGxB,KAAK,iBAAmB,OAAO,OAAO,CAAC,KAAK,iBAAkBA,CAAY,CAAC,EAExE,EACf,CACI,WAAY,CACR,MAAMC,EAAiB,KAAK,kBAAkB,KAAK,UAAY,CAAC,EAChE,GAAI,KAAK,mBAAqBA,EAC1B,QAAUnK,GAAuB,UAAU,oBAAoBmK,CAAc,yBAAyB,KAAK,gBAAgB,GAAI,mCAAmC,EAEtK,KAAK,iBAAmB,CAChC,CACI,mBAAmBv3D,EAAM8T,EAAOif,EAAK,CACjC,OAAI,KAAK,YAAc,GACnB,KAAK,UAAS,EAEX,KAAK,gBAAgB/yB,EAAM8T,EAAOif,CAAG,CACpD,CACI,gBAAgB/yB,EAAM8T,EAAOif,EAAK,CAC9B,KAAK,kBAAoBA,EAAMjf,EAC/B,KAAK,aAAeif,EAAMjf,EAC1B,KAAK,OAASif,EAAMjf,EACpB,MAAMuiD,EAAM,KAAK,IACjB,OAAIA,EAAI,MAAMviD,IAAU,GAAK9T,EAAK,SAAW+yB,EAAM/yB,EAAOA,EAAK,MAAM8T,EAAOif,CAAG,CAAC,EACrE,QAAQ,QAAO,EAGf,IAAI,QAAQ,CAAClyB,EAASC,IAAW,CACpCu1D,EAAI,GAAG,QAASv1D,CAAM,EACtBu1D,EAAI,KAAK,QAAS,IAAM,CACpBA,EAAI,eAAe,QAASv1D,CAAM,EAClCD,EAAO,CAC3B,CAAiB,CACjB,CAAa,CAEb,CACA,CACAm1D,GAAA,aAAuBQ,aClOvB,OAAO,eAAegB,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,uCAAiDC,GACjDD,GAAA,uBAAiCE,GACjC,MAAMtK,GAAyB56C,GACzBwjD,GAAiBz/C,GACjB2/C,GAAwB1/C,GAC9B,SAASihD,GAAuCE,EAAwBC,EAAOvB,EAAKC,EAAWx1D,EAAQ,CACnG,MAAMklB,EAAK6xC,GAAe,CACtB,GAAIA,GAAcD,EAAM,OAAQ,CACxBD,EAAuB,oBAAsB,MAC7CtB,EAAI,MAAMsB,EAAuB,kBAAkB,EAEvDtB,EAAI,IAAG,EACP,MACZ,CACQ,MAAMyB,EAAaD,EAAa,IAChCE,GAAeJ,EAAwB,CACnC,MAAAC,EACA,MAAOC,EACP,IAAK,KAAK,IAAID,EAAM,OAAQE,CAAU,EACtC,UAAAxB,CACZ,EAAWD,EAAK,IAAMrwC,EAAE8xC,CAAU,EAAGh3D,CAAM,CAC3C,EACI,OAAOklB,CACX,CACA,SAAS+xC,GAAeJ,EAAwBpiD,EAAS8gD,EAAKx1D,EAASC,EAAQ,CAC3E,IAAI46C,EAAS,SACTsc,EAAY,EACZnB,EAAkB,EACtB,MAAMJ,EAAuB,IAAI,IAC3BE,EAAoB,CAAA,EAC1B,QAASxyD,EAAIoR,EAAQ,MAAOpR,EAAIoR,EAAQ,IAAKpR,IAAK,CAC9C,MAAMwpB,EAAOpY,EAAQ,MAAMpR,CAAC,EACxBwpB,EAAK,OAASuoC,GAAsB,cAAc,WAClDxa,GAAU,GAAG/tB,EAAK,KAAK,IAAIA,EAAK,IAAM,CAAC,KACvC8oC,EAAqB,IAAIuB,EAAW7zD,CAAC,EACrC6zD,IACArB,EAAkB,KAAKhpC,EAAK,IAAMA,EAAK,KAAK,EAC5CkpC,GAAmBlpC,EAAK,IAAMA,EAAK,MAE/C,CACI,GAAIqqC,GAAa,EAAG,CAEhB,MAAMhyC,EAAK/P,GAAU,CACjB,GAAIA,GAASV,EAAQ,IAAK,CACtB1U,EAAO,EACP,MAChB,CACY,MAAM8sB,EAAOpY,EAAQ,MAAMU,GAAO,EAClC,GAAI0X,EAAK,OAASuoC,GAAsB,cAAc,QAC9CF,GAAe,UAAUroC,EAAM0oC,EAAK9gD,EAAQ,UAAWzU,EAAQ,IAAMklB,EAAE/P,CAAK,CAAC,MAEhF,CACD,MAAM6W,EAAiB6qC,EAAuB,qBAAoB,EAClE7qC,EAAe,QAAQ,MAAQ,SAASa,EAAK,KAAK,IAAIA,EAAK,IAAM,CAAC,GAClE,MAAMrB,EAAUqrC,EAAuB,aAAa,cAAc7qC,EAAgBtb,GAAY,CAC1FA,EAAS,GAAG,QAAS1Q,CAAM,EACtB42D,GAAuBlmD,EAAU1Q,CAAM,IAG5C0Q,EAAS,KAAK6kD,EAAK,CACf,IAAK,EAC7B,CAAqB,EACD7kD,EAAS,KAAK,MAAO,IAAMwU,EAAE/P,CAAK,CAAC,EACvD,CAAiB,EACD0hD,EAAuB,aAAa,2BAA2BrrC,EAASxrB,CAAM,EAC9EwrB,EAAQ,IAAG,CAC3B,CACA,EACQtG,EAAEzQ,EAAQ,KAAK,EACf,MACR,CACI,MAAMuX,EAAiB6qC,EAAuB,qBAAoB,EAClE7qC,EAAe,QAAQ,MAAQ4uB,EAAO,UAAU,EAAGA,EAAO,OAAS,CAAC,EACpE,MAAMpvB,EAAUqrC,EAAuB,aAAa,cAAc7qC,EAAgBtb,GAAY,CAC1F,GAAI,CAACkmD,GAAuBlmD,EAAU1Q,CAAM,EACxC,OAEJ,MAAM4rB,KAAkB0gC,GAAuB,eAAe57C,EAAU,cAAc,EAChF9U,EAAI,+DAA+D,KAAKgwB,CAAW,EACzF,GAAIhwB,GAAK,KAAM,CACXoE,EAAO,IAAI,MAAM,6DAA6D4rB,CAAW,GAAG,CAAC,EAC7F,MACZ,CACQ,MAAMurC,EAAQ,IAAIjC,GAAe,aAAaK,EAAK9gD,EAASkhD,EAAsB/5D,EAAE,CAAC,GAAKA,EAAE,CAAC,EAAGi6D,EAAmB91D,EAASg2D,EAAiBc,EAAuB,QAAQ,UAAU,EACtLM,EAAM,GAAG,QAASn3D,CAAM,EACxB0Q,EAAS,KAAKymD,CAAK,EACnBzmD,EAAS,GAAG,MAAO,IAAM,CACrB,WAAW,IAAM,CACb8a,EAAQ,MAAK,EACbxrB,EAAO,IAAI,MAAM,4CAA4C,CAAC,CAC9E,EAAe,GAAK,CACpB,CAAS,CACT,CAAK,EACD62D,EAAuB,aAAa,2BAA2BrrC,EAASxrB,CAAM,EAC9EwrB,EAAQ,IAAG,CACf,CACA,SAASorC,GAAuBlmD,EAAU1Q,EAAQ,CAE9C,GAAI0Q,EAAS,YAAc,IACvB,OAAA1Q,KAAWssD,GAAuB,iBAAiB57C,CAAQ,CAAC,EACrD,GAEX,GAAIA,EAAS,aAAe,IAAK,CAC7B,MAAM0mD,KAAmB9K,GAAuB,eAAe57C,EAAU,eAAe,EACxF,GAAI0mD,GAAgB,MAAQA,IAAiB,OACzC,OAAAp3D,EAAO,IAAI,MAAM,uDAAuD0Q,EAAS,UAAU,GAAG,CAAC,EACxF,EAEnB,CACI,MAAO,EACX,WC/GA,OAAO,eAAe2mD,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,8CAAwD,OACxD,MAAMztC,GAAWlY,GACjB,IAAI6hD,IACH,SAAUA,EAAe,CACtBA,EAAcA,EAAc,KAAU,CAAC,EAAI,OAC3CA,EAAcA,EAAc,SAAc,CAAC,EAAI,UACnD,GAAGA,KAAkBA,GAAgB,CAAA,EAAG,EACxC,MAAM+D,WAAsD1tC,GAAS,SAAU,CAC3E,YAAY2tC,EAAkCxtC,EAAmBC,EAAY,CACzE,MAAK,EACL,KAAK,iCAAmCutC,EACxC,KAAK,kBAAoBxtC,EACzB,KAAK,WAAaC,EAClB,KAAK,MAAQ,KAAK,IAAG,EACrB,KAAK,YAAc,EACnB,KAAK,MAAQ,EACb,KAAK,cAAgB,EACrB,KAAK,MAAQ,EACb,KAAK,cAAgBupC,GAAc,KACnC,KAAK,WAAa,KAAK,MAAQ,GACvC,CACI,WAAWtpC,EAAOlH,EAAUnP,EAAU,CAClC,GAAI,KAAK,kBAAkB,UAAW,CAClCA,EAAS,IAAI,MAAM,WAAW,EAAG,IAAI,EACrC,MACZ,CAEQ,GAAI,KAAK,eAAiB2/C,GAAc,KAAM,CAC1C3/C,EAAS,KAAMqW,CAAK,EACpB,MACZ,CACQ,KAAK,aAAeA,EAAM,OAC1B,KAAK,OAASA,EAAM,OACpB,MAAM/tB,EAAM,KAAK,IAAG,EAChBA,GAAO,KAAK,YACZ,KAAK,cAAgB,KAAK,eAC1B,KAAK,cAAgB,KAAK,iCAAiC,aAC3D,KAAK,WAAaA,EAAM,IACxB,KAAK,WAAW,CACZ,MAAO,KAAK,iCAAiC,WAC7C,MAAO,KAAK,MACZ,YAAa,KAAK,YAClB,QAAU,KAAK,YAAc,KAAK,iCAAiC,WAAc,IACjF,eAAgB,KAAK,MAAM,KAAK,cAAgBA,EAAM,KAAK,OAAS,IAAK,CACzF,CAAa,EACD,KAAK,MAAQ,GAEjB0X,EAAS,KAAMqW,CAAK,CAC5B,CACI,eAAgB,CACZ,KAAK,cAAgBspC,GAAc,IAC3C,CACI,oBAAqB,CACjB,KAAK,cAAgBA,GAAc,SACnC,KAAK,eAAiB,KAAK,iCAAiC,mBAAmB,KAAK,OAAO,CACnG,CACI,kBAAmB,CAEX,KAAK,cAAgB,KAAK,iCAAiC,YAC3D,KAAK,WAAW,CACZ,MAAO,KAAK,iCAAiC,WAC7C,MAAO,KAAK,MACZ,YAAa,KAAK,YAClB,QAAU,KAAK,YAAc,KAAK,iCAAiC,WAAc,IACjF,eAAgB,KAAK,MAAM,KAAK,cAAgB,KAAK,MAAQ,KAAK,OAAS,IAAK,CAChG,CAAa,CAEb,CAEI,OAAO3/C,EAAU,CACb,GAAI,KAAK,kBAAkB,UAAW,CAClCA,EAAS,IAAI,MAAM,WAAW,CAAC,EAC/B,MACZ,CACQ,KAAK,WAAW,CACZ,MAAO,KAAK,iCAAiC,WAC7C,MAAO,KAAK,MACZ,YAAa,KAAK,YAClB,QAAS,IACT,eAAgB,KAAK,MAAM,KAAK,cAAgB,KAAK,MAAQ,KAAK,OAAS,IAAK,CAC5F,CAAS,EACD,KAAK,MAAQ,EACb,KAAK,YAAc,EACnBA,EAAS,IAAI,CACrB,CACA,CACAyjD,GAAA,8CAAwDC,GCvFxD,OAAO,eAAeE,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,uBAAiC,OACjC,MAAMlL,GAAyB56C,GACzBk5C,GAAan1C,GACbmV,GAAOlV,EACPw/C,GAAiBv/C,GACjBkV,GAAQhV,GACRu/C,GAAwBz+C,GACxB8gD,GAA4Bl2C,GAC5B81C,GAAkD71C,GACxD,MAAMk2C,EAAuB,CAEzB,YAAYC,EAAoBztC,EAAczV,EAAS,CACnD,KAAK,mBAAqBkjD,EAC1B,KAAK,aAAeztC,EACpB,KAAK,QAAUzV,EACf,KAAK,mBAAqB,KAC1B,KAAK,OAASA,EAAQ,MAC9B,CACI,sBAAuB,CACnB,MAAM1N,EAAS,CACX,QAAS,CACL,GAAG,KAAK,QAAQ,eAChB,OAAQ,KACxB,CACA,EACQ,SAAIulD,GAAuB,qBAAqB,KAAK,QAAQ,OAAQvlD,CAAM,KAEvEulD,GAAuB,yBAAyBvlD,CAAM,EACnDA,CACf,CACI,WAAWysD,EAAaC,EAAa,CAEjC,GAAID,EAAY,UAAYC,EAAY,QACpC,MAAM,IAAI,MAAM,yBAAyBD,EAAY,OAAO,MAAMC,EAAY,OAAO,8BAA8B,EAEvH,MAAMvkD,EAAS,KAAK,OACd6kD,KAAiBqB,GAAsB,mBAAmB5B,EAAaC,EAAavkD,CAAM,EAC5FA,EAAO,OAAS,MAChBA,EAAO,MAAM,KAAK,UAAU6kD,EAAY,KAAM,CAAC,CAAC,EAEpD,IAAI6D,EAAe,EACfC,EAAW,EACf,UAAWjD,KAAab,EAAY,CAChC,MAAMtgD,EAASmhD,EAAU,IAAMA,EAAU,MACrCA,EAAU,OAASQ,GAAsB,cAAc,SACvDwC,GAAgBnkD,EAGhBokD,GAAYpkD,CAE5B,CACQ,MAAMqkD,EAAU,KAAK,mBAAmB,KACxC,GAAIF,EAAeC,GAAY,KAAK,oBAAsB,KAAO,EAAI,KAAK,mBAAmB,UAAYC,EACrG,MAAM,IAAI,MAAM,gDAAgDF,CAAY,eAAeC,CAAQ,cAAcC,CAAO,EAAE,EAE9H,OAAA5oD,EAAO,KAAK,SAAS6oD,GAAYD,CAAO,CAAC,kBAAkBC,GAAYH,CAAY,CAAC,KAAK,KAAK,MAAMA,GAAgBE,EAAU,IAAI,CAAC,IAAI,EAChI,KAAK,aAAa/D,CAAU,CAC3C,CACI,aAAa+C,EAAO,CAChB,MAAMkB,EAAS,CAAA,EACTC,EAAa,IACR,QAAQ,IAAID,EAAO,IAAIE,MACftN,GAAW,OAAOsN,EAAW,UAAU,EAAE,MAAO52D,GAAM,CAC7D,KAAK,OAAO,MAAM,sBAAsB42D,EAAW,IAAI,MAAM52D,CAAC,EAAE,CACpF,CAAiB,CACJ,CAAC,EAEN,OAAO,KAAK,eAAew1D,EAAOkB,CAAM,EACnC,KAAKC,CAAU,EACf,MAAO32D,GAED22D,EAAU,EACZ,MAAME,GAAmB,CAE1B,GAAI,CACA,KAAK,OAAO,MAAM,uBAAuBA,CAAe,EAAE,CAC9E,OACuBC,EAAY,CACf,GAAI,CACA,QAAQ,MAAMA,CAAU,CAChD,MACqC,CAErC,CACA,CACgB,MAAM92D,CACtB,CAAa,EACI,KAAK,IAAM,CACZ,MAAMA,CACtB,CAAa,CACJ,CACT,CACI,MAAM,eAAew1D,EAAOkB,EAAQ,CAChC,MAAMxC,EAAY,QAAU5K,GAAW,MAAM,KAAK,QAAQ,QAAS,GAAG,EACtEoN,EAAO,KAAK,CAAE,WAAYxC,EAAW,KAAM,KAAK,QAAQ,QAAS,EACjE,MAAM6C,EAAY,QAAUzN,GAAW,MAAM,KAAK,QAAQ,QAAS,GAAG,EACtEoN,EAAO,KAAK,CAAE,WAAYK,EAAW,KAAM,KAAK,QAAQ,QAAS,EACjE,MAAMzqC,KAAchD,GAAK,mBAAmB,KAAK,QAAQ,QAAS,CAAE,GAAIytC,EAAW,EACnF,MAAM,IAAI,QAAQ,CAACt4D,EAASC,IAAW,CACnC,MAAMytB,EAAU,CAAA,EAEhB,IAAI6qC,EACJ,GAAI,CAAC,KAAK,QAAQ,2BAA6B,KAAK,QAAQ,WAAY,CACpE,MAAMC,EAAqB,CAAA,EAC3B,IAAIxC,EAAkB,EACtB,UAAWlpC,KAAQiqC,EACXjqC,EAAK,OAASuoC,GAAsB,cAAc,WAClDmD,EAAmB,KAAK1rC,EAAK,IAAMA,EAAK,KAAK,EAC7CkpC,GAAmBlpC,EAAK,IAAMA,EAAK,OAG3C,MAAM0qC,EAAmC,CACrC,mBAAoBgB,EACpB,WAAYxC,CAChC,EACgBuC,EAAwB,IAAIjB,GAAgD,8CAA8CE,EAAkC,KAAK,QAAQ,kBAAmB,KAAK,QAAQ,UAAU,EACnN9pC,EAAQ,KAAK6qC,CAAqB,CAClD,CACY,MAAME,EAAkB,IAAIlM,GAAuB,gBAAgB,KAAK,mBAAmB,MAAM,EAEjGkM,EAAgB,gBAAkB,GAClC/qC,EAAQ,KAAK+qC,CAAe,EAE5B5qC,EAAQ,GAAG,SAAU,IAAM,CAEvBA,EAAQ,MAAM,IAAM,CAEhBoqC,EAAO,OAAO,EAAG,CAAC,EAClB,GAAI,CACAQ,EAAgB,SAAQ,CAChD,OAC2Bl3D,EAAG,CACNtB,EAAOsB,CAAC,EACR,MACxB,CACoBvB,EAAQ,MAAS,CACrC,CAAiB,CACjB,CAAa,EACD0tB,EAAQ,KAAKG,CAAO,EACpB,IAAIC,EAAa,KACjB,UAAWjrB,KAAU6qB,EACjB7qB,EAAO,GAAG,QAAS5C,CAAM,EACrB6tB,GAAc,KACdA,EAAajrB,EAGbirB,EAAaA,EAAW,KAAKjrB,CAAM,EAG3C,MAAM61D,EAAchrC,EAAQ,CAAC,EAC7B,IAAIvI,EACJ,GAAI,KAAK,QAAQ,0BAA2B,CACxCA,KAAQuyC,GAA0B,wCAAwC,KAAMX,EAAO2B,EAAajD,EAAWx1D,CAAM,EACrHklB,EAAE,CAAC,EACH,MAChB,CACY,IAAIwzC,EAAyB,EACzBC,EAAY,KAChB,KAAK,OAAO,KAAK,0BAA0B,KAAK,QAAQ,MAAM,EAAE,EAChE,MAAM3sC,EAAiB,KAAK,qBAAoB,EAChDA,EAAe,SAAW,SAC1B9G,EAAK/P,GAAU,CACX,IAAItY,EAAI0K,EACR,GAAI4N,GAAS2hD,EAAM,OAAQ,CACnB,KAAK,oBAAsB,MAC3B2B,EAAY,MAAM,KAAK,kBAAkB,EAE7CA,EAAY,IAAG,EACf,MACpB,CACgB,MAAM7D,EAAYkC,EAAM3hD,GAAO,EAC/B,GAAIy/C,EAAU,OAASQ,GAAsB,cAAc,KAAM,CAEzDkD,GACAA,EAAsB,cAAa,KAEnCpD,GAAe,UAAUN,EAAW6D,EAAajD,EAAWx1D,EAAQ,IAAMklB,EAAE/P,CAAK,CAAC,EACtF,MACpB,CACgB,MAAMy/B,EAAQ,SAASggB,EAAU,KAAK,IAAIA,EAAU,IAAM,CAAC,GAC3D5oC,EAAe,QAAQ,MAAQ4oB,GAC9BrtC,GAAM1K,EAAK,KAAK,UAAY,MAAQA,IAAO,OAAS,OAASA,EAAG,SAAW,MAAQ0K,IAAO,QAAkBA,EAAG,KAAK1K,EAAI,mBAAmB+3C,CAAK,EAAE,EAE/I0jB,GACAA,EAAsB,mBAAkB,EAE5C,MAAM9sC,GAAU,KAAK,aAAa,cAAcQ,EAAgBtb,GAAY,CACxEA,EAAS,GAAG,QAAS1Q,CAAM,EAC3B0Q,EAAS,GAAG,UAAW,IAAM,CACzB1Q,EAAO,IAAI,MAAM,yCAAyC,CAAC,CACnF,CAAqB,EAEG0Q,EAAS,YAAc,KACvB1Q,KAAWssD,GAAuB,iBAAiB57C,CAAQ,CAAC,EAEhEA,EAAS,KAAK+nD,EAAa,CACvB,IAAK,EAC7B,CAAqB,EACD/nD,EAAS,KAAK,MAAO,IAAM,CAEnB4nD,GACAA,EAAsB,iBAAgB,EAEtC,EAAEI,IAA2B,KAC7BA,EAAyB,EACzB,WAAW,IAAMxzC,EAAE/P,CAAK,EAAG,GAAI,GAG/B+P,EAAE/P,CAAK,CAEnC,CAAqB,CACrB,CAAiB,EACDqW,GAAQ,GAAG,WAAY,CAACP,EAAY7c,GAAQud,IAAgB,CACxD,KAAK,OAAO,KAAK,eAAeitC,GAAYjtC,CAAW,CAAC,EAAE,EAC1DgtC,EAAYhtC,KACR2gC,GAAuB,qBAAqB,IAAIzhC,GAAM,IAAI8tC,CAAS,EAAG3sC,CAAc,EACxFR,GAAQ,eAAc,CAC1C,CAAiB,EACD,KAAK,aAAa,2BAA2BA,GAASxrB,CAAM,EAC5DwrB,GAAQ,IAAG,CAC3B,EACYtG,EAAE,CAAC,CACf,CAAS,CACT,CACI,MAAM,gBAAgBlS,EAAO6lD,EAAc,CACvC,MAAMl4D,EAAS,OAAO,YAAYk4D,EAAe,EAAI7lD,CAAK,EACpDgZ,EAAiB,KAAK,qBAAoB,EAChDA,EAAe,QAAQ,MAAQ,SAAShZ,CAAK,IAAI6lD,CAAY,GAC7D,IAAInlD,EAAW,EAKf,GAJA,MAAM,KAAK,QAAQsY,EAAgB/B,GAAS,CACxCA,EAAM,KAAKtpB,EAAQ+S,CAAQ,EAC3BA,GAAYuW,EAAM,MAC9B,CAAS,EACGvW,IAAa/S,EAAO,OACpB,MAAM,IAAI,MAAM,wBAAwB+S,CAAQ,6BAA6B/S,EAAO,MAAM,EAAE,EAEhG,OAAOA,CACf,CACI,QAAQqrB,EAAgB8sC,EAAa,CACjC,OAAO,IAAI,QAAQ,CAAC/4D,EAASC,IAAW,CACpC,MAAMwrB,EAAU,KAAK,aAAa,cAAcQ,EAAgBtb,GAAY,IAC/D+mD,GAA0B,wBAAwB/mD,EAAU1Q,CAAM,IAG3E0Q,EAAS,GAAG,QAAS1Q,CAAM,EAC3B0Q,EAAS,GAAG,UAAW,IAAM,CACzB1Q,EAAO,IAAI,MAAM,yCAAyC,CAAC,CAC/E,CAAiB,EACD0Q,EAAS,GAAG,OAAQooD,CAAW,EAC/BpoD,EAAS,GAAG,MAAO,IAAM3Q,EAAO,CAAE,EAClD,CAAa,EACD,KAAK,aAAa,2BAA2ByrB,EAASxrB,CAAM,EAC5DwrB,EAAQ,IAAG,CACvB,CAAS,CACT,CACA,CACAgsC,GAAA,uBAAiCE,GACjC,SAASK,GAAY72D,EAAOgpD,EAAS,MAAO,CACxC,OAAO,IAAI,KAAK,aAAa,IAAI,EAAE,QAAQhpD,EAAQ,MAAM,QAAQ,CAAC,CAAC,EAAIgpD,CAC3E,CAEA,SAAS0O,GAAY9sC,EAAK,CACtB,MAAM3W,EAAQ2W,EAAI,QAAQ,GAAG,EAC7B,OAAO3W,EAAQ,EAAI2W,EAAMA,EAAI,UAAU,EAAG3W,CAAK,CACnD,CCzQA,OAAO,eAAe4jD,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,8BAAwC,OACxC,MAAMvB,GAA2B9lD,GACjC,MAAMsnD,WAAsCxB,GAAyB,sBAAuB,CACxF,SAAShE,EAAaC,EAAa,CAC/B,OAAO,KAAK,WAAWD,EAAaC,CAAW,CACvD,CACA,CACAsF,GAAA,8BAAwCC,0BCRxC,OAAO,eAAct/C,EAAU,aAAc,CAAE,MAAO,GAAM,EAC5DA,EAAA,cAAwBA,EAAA,kBAA4BA,EAAA,kBAA4BA,EAAA,kBAA4B,OAC5GA,EAAA,WAAqBu/C,EACrB,MAAM3M,EAAyB56C,GAC/B,OAAO,eAAegI,EAAS,oBAAqB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO4yC,EAAuB,iBAAkB,CAAE,CAAE,EAC/I5yC,EAAA,kBAA4B,oBAC5BA,EAAA,kBAA4B,oBAC5B,MAAMw/C,CAAc,CAChB,YAAYC,EAAS,CACjB,KAAK,QAAUA,CACvB,CAII,MAAMhpD,EAAS,CACX8oD,EAAW,KAAK,QAAS,QAAS9oD,CAAO,CACjD,CACI,SAASA,EAAS,CACd8oD,EAAW,KAAK,QAASv/C,EAAQ,kBAAmBvJ,CAAO,CACnE,CACI,iBAAiBA,EAAS,CACtB8oD,EAAW,KAAK,QAASv/C,EAAQ,kBAAmBvJ,CAAO,CACnE,CACI,gBAAgBA,EAAS,CACrB8oD,EAAW,KAAK,QAAS,mBAAoB9oD,CAAO,CAC5D,EAEAuJ,EAAA,cAAwBw/C,EAExB,SAASD,EAAWE,EAASzyD,EAAOyJ,EAAS,CAQrCgpD,EAAQ,GAAGzyD,EAAOyJ,CAAO,CAEjC,QCvCA,OAAO,eAAeipD,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,WAAqBA,GAAA,WAAqB,OAC1C,MAAM9M,GAAyB56C,GACzBgZ,GAAWjV,GACXq2C,GAAOp2C,GACP+O,GAAW9O,GACXi1C,GAAa/0C,GACb83C,GAAYh3C,GACZ0iD,GAAa93C,GACbhnB,GAAOinB,EACP83C,GAAWh1C,GACXomC,GAA2BnmC,GAC3BynC,GAAuB/d,GACvBsrB,GAAyBrrB,GACzB2gB,GAAoB1gB,GACpBqrB,GAAoBprB,GACpBqrB,GAASprB,GACT0qB,GAAkCzqB,GAClCorB,GAAUnrB,GAChB,MAAMorB,WAAmBl1C,GAAS,YAAa,CAI3C,IAAI,SAAU,CACV,OAAO,KAAK,QACpB,CAMI,IAAI,QAAQvjB,EAAO,CACf,GAAI,KAAK,UAAY,KAAM,CAEvB,GAAI,OAAOA,GAAU,SACjB,QAAUorD,GAAuB,UAAU,sCAAsCprD,CAAK,GAAI,6BAA6B,EAEtH,GAAIA,EAAM,SAAW,EACtB,QAAUorD,GAAuB,UAAU,sCAAuC,6BAA6B,CAE/H,CACQ,KAAK,SAAWprD,EAChB,KAAK,eAAiB,EAC9B,CAII,cAAc4sB,EAAO,CACjB,KAAK,eAAiB,OAAO,OAAO,CAAA,EAAI,KAAK,eAAgB,CACzD,cAAeA,CAC3B,CAAS,CACT,CAEI,IAAI,YAAa,CACb,SAAWyrC,GAAuB,eAAa,CACvD,CAKI,IAAI,QAAS,CACT,OAAO,KAAK,OACpB,CACI,IAAI,OAAOr4D,EAAO,CACd,KAAK,QAAUA,GAAgB,IAAI04D,EAC3C,CAMI,IAAI,iBAAiB14D,EAAO,CACxB,KAAK,cAAgB,KACrB,KAAK,qBAAuBA,EAC5B,KAAK,aAAe,IAAIm4D,GAAW,KAAK,IAAM,KAAK,kBAAkB,CAC7E,CAKI,IAAI,mBAAoB,CACpB,OAAO,KAAK,kBACpB,CACI,IAAI,kBAAkBn4D,EAAO,CACrBA,IACA,KAAK,mBAAqBA,EAEtC,CAMI,IAAI,qBAAsB,CACtB,OAAO,KAAK,oBACpB,CACI,IAAI,oBAAoBA,EAAO,CACvBA,IACA,KAAK,qBAAuBA,EAExC,CACI,YAAYuT,EAAS03C,EAAK,CACtB,MAAK,EAKL,KAAK,aAAe,GAKpB,KAAK,qBAAuB,GAK5B,KAAK,uBAAyB,GAM9B,KAAK,gBAAkB,GAKvB,KAAK,cAAgB,GAQrB,KAAK,eAAiB,GAStB,KAAK,oBAAsB,GAM3B,KAAK,4BAA8B,GAQnC,KAAK,qBAAuB,GAW5B,KAAK,gCAAkC,KACvC,KAAK,SAAW,KAChB,KAAK,uBAAyB,KAI9B,KAAK,eAAiB,KACtB,KAAK,QAAU,QAKf,KAAK,QAAU,IAAIuN,GAAQ,cAAc,IAAI,EAC7C,KAAK,qBAAuB,KAC5B,KAAK,mBAAqB1O,GAAc,KAAK,uBAAuBA,CAAU,EAC9E,KAAK,qBAAuBA,GAAc,KAAK,eAAeA,CAAU,EACxE,KAAK,cAAgB,KACrB,KAAK,qBAAuB,IAAIqO,GAAW,KAAK,IAAM,KAAK,0BAA0B,EAGrF,KAAK,aAAe,IAAIA,GAAW,KAAK,IAAM,KAAK,kBAAkB,EACrE,KAAK,uBAAyB,KAC9B,KAAK,gBAAkB,KACvB,KAAK,sBAAwB,KAK7B,KAAK,iBAAmB,KACxB,KAAK,GAAG,QAAUhoD,GAAU,CACxB,KAAK,QAAQ,MAAM,UAAUA,EAAM,OAASA,EAAM,OAAO,EAAE,CACvE,CAAS,EACG86C,GAAO,MACP,KAAK,IAAM,IAAIH,GAAqB,mBACpC,KAAK,aAAe,IAAIuN,GAAuB,qBAAqB,CAACM,EAAUjmD,IAAa,KAAK,KAAK,QAASimD,EAAUjmD,CAAQ,CAAC,IAGlI,KAAK,IAAMu4C,EACX,KAAK,aAAe,MAExB,MAAM2N,EAAuB,KAAK,IAAI,QAChCnJ,KAAqB2I,GAAS,OAAOQ,CAAoB,EAC/D,GAAInJ,GAAkB,KAClB,QAAUrE,GAAuB,UAAU,+CAA+CwN,CAAoB,IAAK,6BAA6B,EAEpJ,KAAK,eAAiBnJ,EACtB,KAAK,gBAAkBoJ,GAAwBpJ,CAAc,EACzDl8C,GAAW,OACX,KAAK,WAAWA,CAAO,EACnB,OAAOA,GAAY,UAAYA,EAAQ,iBACvC,KAAK,eAAiBA,EAAQ,gBAG9C,CAEI,YAAa,CACT,MAAO,4BACf,CAKI,WAAWA,EAAS,CAChB,MAAMq5C,EAAiB,KAAK,6BAA4B,EAExD,IAAI9+B,EACA,OAAOva,GAAY,SACnBua,EAAW,IAAI6/B,GAAkB,gBAAgB,CAAE,SAAU,UAAW,IAAKp6C,CAAO,EAAI,KAAM,CAC1F,GAAGq5C,EACH,6BAA+B0L,GAAkB,wCAAwC/kD,CAAO,CAChH,CAAa,EAGDua,KAAewqC,GAAkB,cAAc/kD,EAAS,KAAMq5C,CAAc,EAEhF,KAAK,cAAgB,QAAQ,QAAQ9+B,CAAQ,CACrD,CAKI,iBAAkB,CACd,GAAI,CAAC,KAAK,kBACN,OAAO,QAAQ,QAAQ,IAAI,EAE/B,IAAIgrC,EAAyB,KAAK,uBAClC,GAAIA,GAA0B,KAC1B,YAAK,QAAQ,KAAK,2CAA2C,EACtDA,EAEX,MAAMC,EAAiB,IAAO,KAAK,uBAAyB,KAC5D,YAAK,QAAQ,KAAK,qBAAqB,EACvCD,EAAyB,KAAK,kBAAiB,EAC1C,KAAKj1C,IACNk1C,EAAc,EACPl1C,EACV,EACI,MAAOzjB,GAAM,CACd,MAAA24D,EAAc,EACd,KAAK,KAAK,QAAS34D,EAAG,8BAA8BA,EAAE,OAASA,GAAG,SAAQ,CAAE,EAAE,EACxEA,CAClB,CAAS,EACD,KAAK,uBAAyB04D,EACvBA,CACf,CACI,iBAAkB,CAEd,OADkB,KAAK,IAAI,YAAc,KAAK,qBAKvC,IAHH,KAAK,QAAQ,KAAK,4FAA4F,EACvG,GAGnB,CAEI,yBAAyBE,EAAsB,CAC3C,OAAO,KAAK,kBAAkB,KAAKn1C,GACzBA,GAAO,MAAiCA,EAAG,iBAM5CA,EAAG,gBAAgB,KAAK,IAAM,CAC/B,MAAMo1C,EAAsBR,GAAW,2BAA2B50C,EAAG,WAAW,QAAS,KAAK,IAAI,KAAMm1C,CAAoB,EAC5H,IAAK1rB,EAAoB,aAAc2rB,CAAmB,EAAE,KAAI,CAChF,CAAa,EACMp1C,IATC,KAAK,QAAQ,OAAS,MACtB,KAAK,QAAQ,MAAM,0DAA0D,EAE1EA,EAOd,CACT,CACI,OAAO,2BAA2BmE,EAASkxC,EAASF,EAAsB,CACtE,OAAIA,GAAwB,OACxBA,EAAuB,CACnB,MAAO,mCACP,KAAM,6FACtB,GAEQA,EAAuB,CACnB,MAAOA,EAAqB,MAAM,QAAQ,YAAaE,CAAO,EAAE,QAAQ,YAAalxC,CAAO,EAC5F,KAAMgxC,EAAqB,KAAK,QAAQ,YAAaE,CAAO,EAAE,QAAQ,YAAalxC,CAAO,CACtG,EACegxC,CACf,CACI,MAAM,eAAelP,EAAY,CAC7B,MAAMqP,EAAuBrP,EAAW,kBACxC,IAAIsP,EAAoBD,EACxB,GAAIC,GAAqB,KACrB,MAAO,GAGX,GADAA,EAAoB,SAASA,EAAmB,EAAE,EAC9C,MAAMA,CAAiB,EACvB,YAAK,QAAQ,KAAK,8BAA8BD,CAAoB,EAAE,EAC/D,GAGXC,EAAoBA,EAAoB,IACxC,MAAMC,EAAgB,MAAM,KAAK,qBAAqB,MAEhDC,EADMlO,GAAuB,KAAK,MAAMiO,CAAa,EAAE,aAAa,EAAE,EACnD,WACzB,YAAK,QAAQ,KAAK,uBAAuBD,CAAiB,iBAAiBE,CAAU,cAAcD,CAAa,EAAE,EAC3GC,EAAaF,CAC5B,CACI,oBAAoBlvC,EAAS,CACzB,OAAI,KAAK,gBAAkB,MACvB,OAAO,OAAOA,EAAS,KAAK,cAAc,EAEvCA,CACf,CACI,MAAM,kBAAkB4/B,EAAY,CAChC,MAAMyP,KAAoBnB,GAAS,OAAOtO,EAAW,OAAO,EAC5D,GAAIyP,GAAiB,KACjB,QAAUnO,GAAuB,UAAU,wHAAwHtB,EAAW,OAAO,IAAK,6BAA6B,EAE3N,MAAM2F,EAAiB,KAAK,eAQ5B,MAPQ2I,GAAS,IAAImB,EAAe9J,CAAc,GAG9C,CAAE,MAAM,QAAQ,QAAQ,KAAK,kBAAkB3F,CAAU,CAAC,GAI1D,CADwB,MAAM,QAAQ,QAAQ,KAAK,oBAAoBA,CAAU,CAAC,EAElF,MAAO,GAIX,MAAM0P,KAA2BpB,GAAS,IAAImB,EAAe9J,CAAc,EACrEgK,KAA2BrB,GAAS,IAAImB,EAAe9J,CAAc,EAC3E,OAAI+J,EACO,GAEJ,KAAK,gBAAkBC,CACtC,CACI,uBAAuB3P,EAAY,CAC/B,MAAM4P,EAAuB5P,GAAe,KAAgC,OAASA,EAAW,qBAC1F6P,KAAuB/O,GAAK,SAAO,EACzC,GAAI8O,EACA,GAAI,CACA,MAAQtB,GAAS,IAAIuB,EAAkBD,CAAoB,EACvD,YAAK,QAAQ,KAAK,sBAAsBC,CAAgB,iDAAiDD,CAAoB,gBAAgBC,CAAgB,EAAE,EACxJ,EAE3B,OACmBv5D,EAAG,CACN,KAAK,QAAQ,KAAK,wCAAwCu5D,CAAgB,6BAA6BD,CAAoB,OAAOt5D,EAAE,SAAWA,GAAG,SAAQ,CAAE,EAAE,CAC9K,CAEQ,MAAO,EACf,CACI,MAAM,0BAA2B,CAC7B,MAAM,KAAK,IAAI,UAAS,EACpB,KAAK,eAAiB,OACtB,KAAK,cAAgB,KAAK,aAAa,MAAM,KAAKyjB,MAAUy0C,GAAkB,cAAcz0C,EAAI,KAAM,KAAK,6BAA4B,CAAE,CAAC,GAE9I,MAAM+1C,EAAS,MAAM,KAAK,cACpBP,EAAgB,MAAM,KAAK,qBAAqB,MACtD,OAAAO,EAAO,kBAAkB,KAAK,oBAAoB,CAAE,oBAAqBP,CAAa,CAAE,CAAC,EAClF,CACH,KAAM,MAAMO,EAAO,iBAAgB,EACnC,SAAUA,CACtB,CACA,CACI,8BAA+B,CAC3B,MAAO,CACH,0BAA2B,GAC3B,SAAU,KAAK,kBAAoB,KAAO,QAAQ,SAAW,KAAK,iBAAiB,SACnF,SAAU,KAAK,YAC3B,CACA,CACI,MAAM,mBAAoB,CACtB,KAAK,KAAK,qBAAqB,EAC/B,MAAM/zD,EAAS,MAAM,KAAK,yBAAwB,EAC5CikD,EAAajkD,EAAO,KAC1B,GAAI,CAAE,MAAM,KAAK,kBAAkBikD,CAAU,EACzC,YAAK,QAAQ,KAAK,sBAAsB,KAAK,eAAe,QAAQ,sCAAsCA,EAAW,OAAO,kBAAkB,KAAK,eAAiB,UAAY,YAAY,IAAI,EAChM,KAAK,KAAK,uBAAwBA,CAAU,EACrC,CACH,kBAAmB,GACnB,YAAaA,EACb,WAAAA,CAChB,EAEQ,KAAK,sBAAwBjkD,EAC7B,KAAK,kBAAkBikD,CAAU,EACjC,MAAMjhC,EAAoB,IAAIuiC,GAAuB,kBAErD,MAAO,CACH,kBAAmB,GACnB,YAAatB,EACb,WAAAA,EACA,kBAAAjhC,EACA,gBAAiB,KAAK,aAAe,KAAK,eAAeA,CAAiB,EAAI,IAC1F,CACA,CACI,kBAAkBihC,EAAY,CAC1B,KAAK,QAAQ,KAAK,iBAAiBA,EAAW,OAAO,aAAcsB,GAAuB,SAAStB,EAAW,KAAK,EAC9G,IAAIjmC,GAAMA,EAAG,GAAG,EAChB,KAAK,IAAI,CAAC,GAAG,EAClB,KAAK,KAAK,mBAAoBimC,CAAU,CAChD,CAKI,eAAejhC,EAAoB,IAAIuiC,GAAuB,kBAAqB,CAC/E,MAAMyO,EAAwB,KAAK,sBACnC,GAAIA,GAAyB,KAAM,CAC/B,MAAM1pD,EAAQ,IAAI,MAAM,2BAA2B,EACnD,YAAK,cAAcA,CAAK,EACjB,QAAQ,OAAOA,CAAK,CACvC,CACQ,GAAI,KAAK,iBAAmB,KACxB,YAAK,QAAQ,KAAK,0CAA0C,EACrD,KAAK,gBAEhB,KAAK,QAAQ,KAAK,8BAA+Bi7C,GAAuB,SAASyO,EAAsB,KAAK,KAAK,EAC5G,IAAIh2C,GAAMA,EAAG,GAAG,EAChB,KAAK,IAAI,CAAC,EAAE,EACjB,MAAMi2C,EAAgB15D,GAAM,CAExB,GAAI,EAAEA,aAAagrD,GAAuB,mBACtC,GAAI,CACA,KAAK,cAAchrD,CAAC,CACxC,OACuB25D,EAAa,CAChB,KAAK,QAAQ,KAAK,gCAAgCA,EAAY,OAASA,CAAW,EAAE,CACxG,CAEY,OAAO35D,CACnB,EACQ,YAAK,gBAAkB,KAAK,iBAAiB,CACzC,sBAAAy5D,EACA,eAAgB,KAAK,sBAAsBA,EAAsB,QAAQ,EACzE,kBAAAhxC,EACA,oBAAqB,KAAK,oBAC1B,4BAA6B,KAAK,2BAC9C,CAAS,EACI,MAAOzoB,GAAM,CACd,MAAM05D,EAAa15D,CAAC,CAChC,CAAS,EACI,QAAQ,IAAM,CACf,KAAK,gBAAkB,IACnC,CAAS,EACM,KAAK,eACpB,CACI,cAAcA,EAAG,CACb,KAAK,KAAK,QAASA,GAAIA,EAAE,OAASA,GAAG,UAAU,CACvD,CACI,yBAAyBoF,EAAO,CAC5B,KAAK,KAAKgzD,GAAQ,kBAAmBhzD,CAAK,CAClD,CACI,MAAM,kBAAmB,CACrB,OAAI,KAAK,sBAAwB,OAC7B,KAAK,qBAAuB,KAAK,IAAI,wBAE9BinD,GAAU,MAAM,QAAU/C,GAAW,UAAU,KAAK,qBAAsB,OAAO,CAAC,CACrG,CACI,sBAAsB57B,EAAU,CAC5B,MAAMksC,EAA2BlsC,EAAS,yBAC1C,GAAIksC,GAA4B,KAAM,CAClC,MAAMC,EAAiB,KAAK,eAC5B,OAAOA,GAAkB,KACnBD,EACA,CACE,GAAGA,EACH,GAAGC,CACvB,CACA,CACQ,OAAO,KAAK,oBAAoB,CAAE,OAAQ,KAAK,CAAE,CACzD,CACI,MAAM,0BAA2B,CAC7B,MAAM9xD,EAAO9O,GAAK,KAAK,KAAK,IAAI,aAAc,YAAY,EAC1D,GAAI,CACA,MAAM4M,EAAK,QAAUyjD,GAAW,UAAUvhD,EAAM,OAAO,EACvD,GAAIijD,GAAuB,KAAK,MAAMnlD,CAAE,EACpC,OAAOA,EAGP,KAAK,QAAQ,KAAK,yDAAyDA,CAAE,EAAE,CAE/F,OACe7F,EAAG,CACFA,EAAE,OAAS,UACX,KAAK,QAAQ,KAAK,wDAAwDA,CAAC,EAAE,CAE7F,CACQ,MAAM6F,EAAKmlD,GAAuB,KAAK,MAAO5hC,GAAS,aAAa,IAAI,EAAG4hC,GAAuB,KAAK,GAAG,EAC1G,KAAK,QAAQ,KAAK,kCAAkCnlD,CAAE,EAAE,EACxD,GAAI,CACA,QAAUyjD,GAAW,YAAYvhD,EAAMlC,CAAE,CACrD,OACe7F,EAAG,CACN,KAAK,QAAQ,KAAK,uCAAuCA,CAAC,EAAE,CACxE,CACQ,OAAO6F,CACf,CAEI,IAAI,mBAAoB,CACpB,MAAMikB,EAAU,KAAK,eAErB,GAAIA,GAAW,KACX,MAAO,GAEX,UAAWgwC,KAAc,OAAO,KAAKhwC,CAAO,EAAG,CAC3C,MAAMpoB,EAAIo4D,EAAW,YAAW,EAChC,GAAIp4D,IAAM,iBAAmBA,IAAM,gBAC/B,MAAO,EAEvB,CACQ,MAAO,EACf,CACI,MAAM,2BAA4B,CAC9B,IAAI+D,EAAS,KAAK,uBAClB,GAAIA,GAAU,KAAM,CAChB,MAAMs0D,GAAW,MAAM,KAAK,aAAa,OAAO,oBAC1CnsD,EAAS,KAAK,QAChBmsD,GAAW,MACXnsD,EAAO,MAAM,+GAA+G,EAEhI,MAAM47C,EAAWvwD,GAAK,KAAK,KAAK,IAAI,cAAe8gE,GAAW,KAAK,IAAI,IAAI,EACvEnsD,EAAO,OAAS,MAChBA,EAAO,MAAM,sBAAsB47C,CAAQ,EAAE,EAEjD/jD,EAAS,IAAI2jD,GAAyB,uBAAuBI,CAAQ,EACrE,KAAK,uBAAyB/jD,CAC1C,CACQ,OAAOA,CACf,CACI,MAAM,gBAAgBu0D,EAAa,CAC/B,MAAMrQ,EAAWqQ,EAAY,SACvBC,EAAkB,CACpB,QAASD,EAAY,sBAAsB,eAC3C,kBAAmBA,EAAY,sBAAsB,kBACrD,KAAMrQ,EAAS,KAAK,KACpB,OAAQA,EAAS,KAAK,MAClC,EACY,KAAK,cAAcyO,GAAQ,iBAAiB,EAAI,IAChD6B,EAAgB,WAAax2C,GAAM,KAAK,KAAK20C,GAAQ,kBAAmB30C,CAAE,GAE9E,MAAMimC,EAAasQ,EAAY,sBAAsB,sBAAsB,KACrEpyC,EAAU8hC,EAAW,QACrB4D,EAAc3D,EAAS,YAC7B,SAASuQ,GAAyB,CAE9B,MAAMC,EAAU,mBAAmBH,EAAY,SAAS,IAAI,QAAQ,EACpE,OAAIG,EAAQ,cAAc,SAAS,IAAIH,EAAY,cAAc,aAAa,EAAE,EACrE/gE,GAAK,SAASkhE,CAAO,EAIrBH,EAAY,SAAS,KAAK,GAEjD,CACQ,MAAMI,EAAyB,MAAM,KAAK,0BAAyB,EAC7D5Q,EAAW4Q,EAAuB,yBACxC,QAAU9Q,GAAW,OAAOE,EAAU,CAAE,UAAW,GAAM,EACzD,MAAMQ,EAAiBkQ,EAAsB,EAC7C,IAAIzQ,EAAaxwD,GAAK,KAAKuwD,EAAUQ,CAAc,EACnD,MAAMF,EAAcwD,GAAe,KAAO,KAAOr0D,GAAK,KAAKuwD,EAAU,WAAW5hC,CAAO,GAAG3uB,GAAK,QAAQq0D,EAAY,IAAI,GAAK,KAAK,EAAE,EAC7H3tD,EAAO,MAAOsqD,GAAgB,CAChC,MAAMmQ,EAAuB,kBAAkB3Q,EAAYK,EAAaJ,EAAYC,EAAUK,EAAgBC,CAAW,EACzH,MAAM+P,EAAY,KAAK,CACnB,GAAGtQ,EACH,eAAgBD,CAChC,CAAa,EACD,MAAM4Q,EAAsBphE,GAAK,KAAKuwD,EAAU,kBAAkB,EAClE,OAAI,QAAUF,GAAW,YAAY+Q,CAAmB,GACpD,QAAU/Q,GAAW,UAAU+Q,EAAqBphE,GAAK,KAAKmhE,EAAuB,SAAU,kBAAkB,CAAC,EAE/GtQ,GAAe,KAAO,CAACL,CAAU,EAAI,CAACA,EAAYK,CAAW,CAChF,EACcv7C,EAAM,KAAK,QACXq7C,EAAmB,MAAMwQ,EAAuB,uBAAuB3Q,EAAYC,EAAYC,EAAUp7C,CAAG,EAClH,GAAIq7C,GAAoB,KACpB,OAAAH,EAAaG,EACN,MAAMjqD,EAAK,EAAK,EAE3B,MAAM26D,EAAkB,UACpB,MAAMF,EAAuB,QAAQ,MAAM,IAAM,CAE7D,CAAa,EACM,QAAU9Q,GAAW,QAAQG,CAAU,EAAE,MAAM,IAAM,CAExE,CAAa,GAEC8Q,EAAiB,QAAUnR,GAAyB,sBAAsB,QAAQY,CAAc,GAAIR,EAAUj7C,CAAG,EACvH,GAAI,CACA,MAAMyrD,EAAY,KAAKO,EAAgBN,EAAiBnQ,EAAawQ,CAAe,EACpF,QAAUtP,GAAuB,OAAO,OAAU1B,GAAW,QAAQiR,EAAgB9Q,CAAU,EAAG,CAC9F,QAAS,GACT,SAAU,IACV,YAAc15C,GACNA,aAAiB,OAAS,UAAU,KAAKA,EAAM,OAAO,EAC/C,IAEXxB,EAAI,KAAK,0CAA0CwB,EAAM,SAAWA,EAAM,KAAK,EAAE,EAC1E,GAE3B,CAAa,CACb,OACe/P,EAAG,CACN,YAAMs6D,EAAe,EACjBt6D,aAAagrD,GAAuB,oBACpCz8C,EAAI,KAAK,WAAW,EACpB,KAAK,KAAK,mBAAoBm7C,CAAU,GAEtC1pD,CAClB,CACQ,OAAAuO,EAAI,KAAK,eAAeqZ,CAAO,2BAA2B6hC,CAAU,EAAE,EAC/D,MAAM9pD,EAAK,EAAI,CAC9B,CACI,MAAM,8BAA8BgqD,EAAU6Q,EAAuBC,EAAe/sC,EAAUgtC,EAAsB,CAChH,GAAI,CACA,GAAI,KAAK,kBAAoB,MAAQ,CAAC,KAAK,iBAAiB,0BACxD,MAAO,GAEX,MAAMhtC,EAAW8sC,EAAsB,sBAAsB,SACvDG,EAAmB,MAAMjtC,EAAS,iBAAiBi8B,EAAS,IAAK,KAAK,IAAI,QAAS6Q,EAAsB,sBAAsB,KAAK,QAAS,KAAK,+BAA+B,EACvL,KAAK,QAAQ,KAAK,8BAA8BG,EAAiB,CAAC,CAAC,WAAWA,EAAiB,CAAC,CAAC,GAAG,EACpG,MAAMC,EAAmB,MAAOpwC,GAAQ,CACpC,MAAM5sB,EAAO,MAAM,KAAK,aAAa,iBAAiB4sB,EAAK,CACvD,QAASgwC,EAAsB,eAC/B,kBAAmBA,EAAsB,iBAC7D,CAAiB,EACD,GAAI58D,GAAQ,MAAQA,EAAK,SAAW,EAChC,MAAM,IAAI,MAAM,aAAa4sB,EAAI,IAAI,YAAY,EAErD,GAAI,CACA,OAAO,KAAK,SAAU2tC,GAAO,YAAYv6D,CAAI,EAAE,UAAU,CAC7E,OACuBoC,EAAG,CACN,MAAM,IAAI,MAAM,0BAA0BwqB,EAAI,IAAI,aAAaxqB,CAAC,EAAE,CACtF,CACA,EACkBi6D,EAAkB,CACpB,OAAQtQ,EAAS,IACjB,QAAS1wD,GAAK,KAAK,KAAK,uBAAuB,SAAUyhE,CAAoB,EAC7E,OAAQ,KAAK,QACb,QAASD,EACT,0BAA2B/sC,EAAS,0BACpC,eAAgB8sC,EAAsB,eACtC,kBAAmBA,EAAsB,iBACzD,EACgB,KAAK,cAAcpC,GAAQ,iBAAiB,EAAI,IAChD6B,EAAgB,WAAax2C,GAAM,KAAK,KAAK20C,GAAQ,kBAAmB30C,CAAE,GAE9E,MAAMo3C,EAAyB,MAAOC,EAActR,IAAa,CAC7D,MAAMgJ,EAAev5D,GAAK,KAAKuwD,EAAU,kBAAkB,EAC3D,QAAUF,GAAW,YAAYkJ,KAAkB2F,GAAO,UAAU,KAAK,UAAU2C,CAAY,CAAC,CAAC,CACjH,EACkBC,EAA0B,MAAOvR,GAAa,CAChD,MAAMgJ,EAAev5D,GAAK,KAAKuwD,EAAU,kBAAkB,EAC3D,GAAI,CACA,GAAI,QAAUF,GAAW,YAAYkJ,CAAY,EAC7C,OAAO,KAAK,SAAU2F,GAAO,YAAY,QAAU7O,GAAW,UAAUkJ,CAAY,CAAC,EAAE,SAAQ,CAAE,CAEzH,OACuBxyD,EAAG,CACN,KAAK,QAAQ,KAAK,0BAA0BwyD,CAAY,aAAaxyD,CAAC,EAAE,CAC5F,CACgB,OAAO,IACvB,EACkBg7D,EAAkB,MAAMJ,EAAiBD,EAAiB,CAAC,CAAC,EAClE,MAAME,EAAuBG,EAAiB,KAAK,uBAAuB,wBAAwB,EAElG,IAAIC,EAAkB,MAAMF,EAAwB,KAAK,uBAAuB,QAAQ,EACxF,OAAIE,GAAmB,OACnBA,EAAkB,MAAML,EAAiBD,EAAiB,CAAC,CAAC,GAEhE,MAAM,IAAIlD,GAAgC,8BAA8B9N,EAAS,KAAM,KAAK,aAAcsQ,CAAe,EAAE,SAASgB,EAAiBD,CAAe,EAC7J,EACnB,OACeh7D,EAAG,CAEN,GADA,KAAK,QAAQ,MAAM,8DAA8DA,EAAE,OAASA,CAAC,EAAE,EAC3F,KAAK,kBAAoB,KAEzB,MAAMA,EAEV,MAAO,EACnB,CACA,CACA,CACA83D,GAAA,WAAqBO,GACrB,SAASI,GAAwB7wC,EAAS,CACtC,MAAMszC,KAAiClD,GAAS,YAAYpwC,CAAO,EACnE,OAAOszC,GAA8B,MAAQA,EAA2B,OAAS,CACrF,CAEA,MAAM5C,EAAW,CAEb,KAAK3pD,EAAS,CAElB,CAEI,KAAKA,EAAS,CAElB,CAEI,MAAMA,EAAS,CAEnB,CACA,CACAmpD,GAAA,WAAqBQ,GC3tBrB,OAAO,eAAe6C,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,YAAsB,OACtB,MAAMC,GAAkBhrD,GAClB0nD,GAAe3jD,GACrB,MAAMknD,WAAoBvD,GAAa,UAAW,CAC9C,YAAY3kD,EAAS03C,EAAK,CACtB,MAAM13C,EAAS03C,CAAG,EAClB,KAAK,qBAAuB,GAC5B,KAAK,iBAAmB,EAAA,CAE5B,eAAeyQ,EAAW,GAAOC,EAAkB,GAAO,CACtD,KAAK,QAAQ,KAAK,oCAAoC,EAElC,KAAK,QAAQD,EAAUA,EAAWC,EAAkB,KAAK,sBAAsB,EAE/F,aAAa,IAAM,CAEfnnD,EAAoB,YAAY,KAAK,wBAAwB,EAC7D,KAAK,IAAI,KAAA,CAAK,CACjB,EAGD,KAAK,qBAAuB,EAChC,CAEJ,gBAAgB4lD,EAAa,CACzB,OAAO,MAAM,gBAAgB,CACzB,GAAGA,EACH,KAAM50D,IACF,KAAK,yBAAyBA,CAAK,EACnC,KAAK,eAAA,EACE,QAAQ,QAAA,EACnB,CACH,CAAA,CAEL,IAAI,eAAgB,CAChB,OAAO,KAAK,wBAA0B,KAAO,KAAO,KAAK,uBAAuB,IAAA,CAGpF,QAAQk2D,EAAW,GAAOC,EAAkB,GAAO,CAC/C,GAAI,KAAK,qBACL,YAAK,QAAQ,KAAK,2DAA2D,EACtE,GAEX,MAAMnB,EAAyB,KAAK,uBAC9BK,EAAgB,KAAK,cACrBe,EAAqBpB,GAA0B,KAAO,KAAOA,EAAuB,mBAC1F,GAAIK,GAAiB,MAAQe,GAAsB,KAC/C,YAAK,cAAc,IAAI,MAAM,qDAAqD,CAAC,EAC5E,GAGX,KAAK,qBAAuB,GAC5B,GAAI,CACA,YAAK,QAAQ,KAAK,sBAAsBF,CAAQ,sBAAsBC,CAAe,EAAE,EAChF,KAAK,UAAU,CAClB,SAAAD,EACA,gBAAAC,EACA,sBAAuBC,EAAmB,qBAAA,CAC7C,CAAA,OAEEx7D,EAAG,CACN,YAAK,cAAcA,CAAC,EACb,EAAA,CACX,CAEJ,gBAAiB,CACT,KAAK,kBAAoB,CAAC,KAAK,uBAGnC,KAAK,iBAAmB,GACxB,KAAK,IAAI,OAAO8qD,GAAY,CACxB,GAAI,KAAK,qBAAsB,CAC3B,KAAK,QAAQ,KAAK,oEAAoE,EACtF,MAAA,CAEJ,GAAI,CAAC,KAAK,qBAAsB,CAC5B,KAAK,QAAQ,KAAK,oFAAoF,EACtG,MAAA,CAEJ,GAAIA,IAAa,EAAG,CAChB,KAAK,QAAQ,KAAK,uFAAuFA,CAAQ,EAAE,EACnH,MAAA,CAEJ,KAAK,QAAQ,KAAK,6BAA6B,EAC/C,KAAK,QAAQ,GAAM,EAAK,CAAA,CAC3B,EAAA,CAEL,aAAa2Q,EAAKpuD,EAAO,CAAA,EAAIiX,EAAM,CAAA,EAAI,CACnC,KAAK,QAAQ,KAAK,cAAcm3C,CAAG,eAAepuD,CAAI,EAAE,EACxD,MAAM+B,KAAegsD,GAAgB,WAAWK,EAAKpuD,EAAM,CACvD,IAAK,CAAE,GAAG,QAAA,IAAa,GAAGiX,CAAA,EAC1B,SAAU,QACV,MAAO,EAAA,CACV,EACK,CAAE,MAAAvU,EAAO,OAAA/K,EAAQ,OAAA02D,EAAQ,OAAAC,GAAWvsD,EAC1C,GAAIW,GAAS,KACT,WAAK,QAAQ,MAAM4rD,CAAM,EACnB5rD,EACV,GACS/K,GAAU,MAAQA,IAAW,EAClC,WAAK,QAAQ,MAAM22D,CAAM,EACnB,IAAI,MAAM,WAAWF,CAAG,qBAAqBz2D,CAAM,EAAE,EAE/D,OAAO02D,EAAO,KAAA,CAAK,CASvB,MAAM,SAASD,EAAKpuD,EAAO,CAAA,EAAIiX,EAAM,OAAWs3C,EAAQ,SAAU,CAC9D,YAAK,QAAQ,KAAK,cAAcH,CAAG,eAAepuD,CAAI,EAAE,EACjD,IAAI,QAAQ,CAAC5O,EAASC,IAAW,CACpC,GAAI,CACA,MAAMm9D,EAAS,CAAE,MAAAD,EAAO,IAAAt3C,EAAK,SAAU,EAAA,EACjC9oB,KAAQ4/D,GAAgB,OAAOK,EAAKpuD,EAAMwuD,CAAM,EACtDrgE,EAAE,GAAG,QAASuU,GAAS,CACnBrR,EAAOqR,CAAK,CAAA,CACf,EACDvU,EAAE,MAAA,EACEA,EAAE,MAAQ,QACViD,EAAQ,EAAI,CAChB,OAEGsR,EAAO,CACVrR,EAAOqR,CAAK,CAAA,CAChB,CACH,CAAA,CAET,CACAorD,GAAA,YAAsBE,mBCrItB,OAAO,eAAeS,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,+CAAyD,OACzD,MAAMxS,GAAal5C,GACb8lD,GAA2B/hD,GAC3BgkD,GAAS/jD,GACf,MAAM2nD,WAAuD7F,GAAyB,sBAAuB,CACzG,MAAM,UAAW,CACb,MAAM5I,EAAc,KAAK,mBACnB0O,EAAW1O,EAAY,KACvB7xD,EAASugE,GAAY1O,EAAY,aAAe,GACtD,KAAK,mBAAqB,MAAM,KAAK,gBAAgB7xD,EAAQugE,EAAW,CAAC,EACzE,MAAM7J,EAAc8J,GAAa,KAAK,mBAAmB,MAAM,EAAG,KAAK,mBAAmB,OAAS,CAAC,CAAC,EACrG,MAAM,KAAK,WAAW,MAAMC,GAAyB,KAAK,QAAQ,OAAO,EAAG/J,CAAW,CAC/F,CACA,CACA2J,GAAA,+CAAyDC,GACzD,SAASE,GAAar+D,EAAM,CACxB,OAAO,KAAK,SAAUu6D,GAAO,gBAAgBv6D,CAAI,EAAE,UAAU,CACjE,CACA,eAAes+D,GAAyBn0D,EAAM,CAC1C,MAAMmK,EAAK,QAAUo3C,GAAW,MAAMvhD,EAAM,GAAG,EAC/C,GAAI,CACA,MAAMi0D,GAAY,QAAU1S,GAAW,OAAOp3C,CAAE,GAAG,KAC7CiqD,EAAa,OAAO,YAAY,CAAC,EACvC,QAAU7S,GAAW,MAAMp3C,EAAIiqD,EAAY,EAAGA,EAAW,OAAQH,EAAWG,EAAW,MAAM,EAC7F,MAAMC,EAAa,OAAO,YAAYD,EAAW,aAAa,CAAC,CAAC,EAChE,eAAU7S,GAAW,MAAMp3C,EAAIkqD,EAAY,EAAGA,EAAW,OAAQJ,EAAWG,EAAW,OAASC,EAAW,MAAM,EACjH,QAAU9S,GAAW,OAAOp3C,CAAE,EACvB+pD,GAAaG,CAAU,CACtC,OACWp8D,EAAG,CACN,cAAUspD,GAAW,OAAOp3C,CAAE,EACxBlS,CACd,CACA,CClCA,OAAO,eAAeq8D,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,gBAA0B,OAC1B,MAAMrR,GAAyB56C,GACzBgrD,GAAkBjnD,GAClBm1C,GAAal1C,GACbkV,GAAOjV,EACPpb,GAAOsb,EACP4mD,GAAgB9lD,GAChBymD,GAAmD77C,GACnD+rC,GAAa9rC,GACbk4C,GAAUp1C,GAChB,MAAMs5C,WAAwBnB,GAAc,WAAY,CACpD,YAAYhoD,EAAS03C,EAAK,CACtB,MAAM13C,EAAS03C,CAAG,CAAA,CAEtB,iBAAkB,CACd,OAAI,YAAY,UAAe,MAAQ,CAAC,KAAK,sBACrC,QAAA,IAAY,MAAW,KACvB,KAAK,QAAQ,KAAK,qEAAqE,EAGvF,KAAK,QAAQ,KAAK,0CAA0C,EAEzD,IAEJ,MAAM,gBAAA,CAAgB,CAGjC,iBAAiB2P,EAAuB,CACpC,MAAM9sC,EAAW8sC,EAAsB,sBAAsB,SACvD7Q,KAAeqC,GAAW,UAAUt+B,EAAS,aAAa8sC,EAAsB,sBAAsB,IAAI,EAAG,WAAY,CAAC,MAAO,MAAO,QAAQ,CAAC,EACvJ,OAAO,KAAK,gBAAgB,CACxB,cAAe,WACf,SAAA7Q,EACA,sBAAA6Q,EACA,KAAM,MAAO/Q,EAAYwQ,IAAoB,CACzC,MAAMsC,EAAU,YAAY,SAC5B,GAAIA,GAAW,KACX,QAAUvR,GAAuB,UAAU,8BAA+B,gCAAgC,GAE1GwP,EAAsB,6BAAgC,MAAM,KAAK,qBAAqB7Q,EAAU4S,EAAS9S,EAAY/7B,EAAU8sC,CAAqB,IACpJ,MAAM,KAAK,aAAa,SAAS7Q,EAAS,IAAKF,EAAYwQ,CAAe,EAE9E,QAAU3Q,GAAW,OAAOG,EAAY,GAAK,CAAA,CACjD,CACH,CAAA,CAEL,MAAM,qBAAqBE,EAAU4S,EAAS9S,EAAY/7B,EAAU8sC,EAAuB,CACvF,GAAI,CACA,MAAMP,EAAkB,CACpB,OAAQtQ,EAAS,IACjB,QAAA4S,EACA,OAAQ,KAAK,QACb,QAAS9S,EACT,0BAA2B/7B,EAAS,0BACpC,eAAgB8sC,EAAsB,eACtC,kBAAmBA,EAAsB,iBAAA,EAE7C,OAAI,KAAK,cAAcpC,GAAQ,iBAAiB,EAAI,IAChD6B,EAAgB,WAAax2C,GAAM,KAAK,KAAK20C,GAAQ,kBAAmB30C,CAAE,GAE9E,MAAM,IAAIq4C,GAAiD,+CAA+CnS,EAAS,KAAM,KAAK,aAAcsQ,CAAe,EAAE,SAAA,EACtJ,EAAA,OAEJj6D,EAAG,CACN,YAAK,QAAQ,MAAM,8DAA8DA,EAAE,OAASA,CAAC,EAAE,EAExF,QAAQ,WAAa,OAAA,CAChC,CAEJ,UAAUmT,EAAS,CACf,MAAMqpD,EAAe,YAAY,SACjC,GAAIA,GAAgB,KAChB,QAAUxR,GAAuB,UAAU,8BAA+B,gCAAgC,KAG1G1hC,GAAK,YAAYkzC,CAAY,EACjC,IAAI38B,EACJ,MAAM48B,EAAmBxjE,GAAK,SAASujE,CAAY,EAC7C/B,EAAgB,KAAK,cAC3B,GAAIA,GAAiB,KACjB,YAAK,cAAc,IAAI,MAAM,qDAAqD,CAAC,EAC5E,GAIPxhE,GAAK,SAASwhE,CAAa,IAAMgC,GAAoB,CAAC,gBAAgB,KAAKA,CAAgB,EAE3F58B,EAAc28B,EAGd38B,EAAc5mC,GAAK,KAAKA,GAAK,QAAQujE,CAAY,EAAGvjE,GAAK,SAASwhE,CAAa,CAAC,KAEhFW,GAAgB,cAAc,KAAM,CAAC,KAAMX,EAAe56B,CAAW,CAAC,EACtEA,IAAgB28B,GAChB,KAAK,KAAK,4BAA6B38B,CAAW,EAEtD,MAAMvb,EAAM,CACR,GAAG,QAAA,IACH,wBAAyB,MAAA,EAE7B,OAAInR,EAAQ,gBAER,KAAK,SAAS0sB,EAAa,CAAA,EAAIvb,CAAG,GAGlCA,EAAI,4BAA8B,UAC9B82C,GAAgB,cAAcv7B,EAAa,CAAA,EAAI,CAAE,IAAAvb,EAAK,GAEvD,EAAA,CAEf,CACA+3C,GAAA,gBAA0BC,mBChH1B,OAAO,eAAeI,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,aAAuB,OACvB,MAAMvB,GAAgB/qD,GACtB,MAAMusD,WAAqBxB,GAAc,WAAY,CACjD,YAAYhoD,EAAS03C,EAAK,CACtB,MAAM13C,EAAS03C,CAAG,CAAA,CAKtB,iBAAkB,CACd,IAAItvD,EACJ,QAASA,EAAK,QAAQ,UAAY,MAAQA,IAAO,OAAS,OAASA,EAAG,KAAK,OAAO,KAAO,CAAA,CAK7F,IAAI,eAAgB,CAChB,IAAIA,EAAI0K,EACR,OAAQA,GAAM1K,EAAK,MAAM,iBAAmB,MAAQA,IAAO,OAAS,OAASA,EAAG,QAAQ,MAAO,MAAM,EAAE,QAAQ,KAAM,KAAK,KAAO,MAAQ0K,IAAO,OAASA,EAAK,IAAA,CAElK,2BAA2B22D,EAAiB,CACxC,GAAI,KAAK,kBACL,YAAK,QAAQ,KAAK,sCAAsC,EACjD,KAAK,aAAaA,EAAgB,CAAC,EAAGA,EAAgB,MAAM,CAAC,CAAC,EAEzE,KAAM,CAAE,KAAAtgE,GAAS,KAAK,IAChBugE,EAAiB,IAAIvgE,CAAI,yBACzBwgE,EAAO,KAAK,aAAaD,CAAc,EAC7C,KAAK,QAAQ,KAAK,oDAAoDC,CAAI,EAAE,EAC5E,IAAIC,EAAU,IAEd,OAAI,UAAU,KAAKD,EAAK,CAAC,CAAC,GAAKA,EAAK,CAAC,IAAM,UACvCC,EAAU,IAEP,KAAK,aAAaD,EAAK,CAAC,EAAG,CAAC,GAAIA,EAAK,OAAS,EAAIA,EAAK,MAAM,CAAC,EAAI,CAAA,EAAK,GAAGC,CAAO,YAAa,KAAM,IAAIH,EAAgB,KAAK,GAAG,CAAC,IAAIG,CAAO,EAAE,CAAC,CAAA,CAE1J,aAAaF,EAAgB,CACzB,MAAMC,EAAO,KAAK,qBAAA,EACZE,EAAU,CAACF,CAAI,EACrB,MAAI,WAAW,KAAKA,CAAI,GACpBE,EAAQ,KAAK,YAAaH,CAAc,EACxCG,EAAQ,KAAK,IAAI,GAEZ,UAAU,KAAKF,CAAI,EACxBE,EAAQ,KAAK,YAAaH,CAAc,EAEnC,UAAU,KAAKC,CAAI,GACxBE,EAAQ,KAAK,0BAA0B,EAEpCA,CAAA,CAEX,WAAWvB,EAAK,CACZ,GAAI,CACA,YAAK,aAAa,UAAW,CAAC,KAAMA,CAAG,CAAC,EACjC,EAAA,MAEL,CACF,MAAO,EAAA,CACX,CAEJ,sBAAuB,CACnB,MAAMwB,EAAQ,CAAC,SAAU,UAAW,SAAU,OAAO,EACrD,UAAWH,KAAQG,EACf,GAAI,KAAK,WAAWH,CAAI,EACpB,OAAOA,EAGf,MAAO,MAAA,CAUX,qBAAqBI,EAAK,CACtB,IAAI3hE,EACJ,MAAM4hE,GAAc5hE,EAAK,QAAA,IAAY,0CAA4C,MAAQA,IAAO,OAAS,OAASA,EAAG,KAAA,EACrH,GAAI4hE,EACA,OAAOA,EAGX,UAAWC,KAAMF,EACb,GAAI,KAAK,WAAWE,CAAE,EAClB,OAAOA,EAIf,YAAK,QAAQ,KAAK,yCAAyCF,EAAI,KAAK,IAAI,CAAC,kCAAkCA,EAAI,CAAC,CAAC,EAAE,EAC5GA,EAAI,CAAC,CAAA,CAEpB,CACAR,GAAA,aAAuBC,GC/FvB,OAAO,eAAeU,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,WAAqB,OACrB,MAAMrR,GAAa57C,GACbgoD,GAAUjkD,GACVuoD,GAAiBtoD,GACvB,MAAMkpD,WAAmBZ,GAAe,YAAa,CACjD,YAAYvpD,EAAS03C,EAAK,CACtB,MAAM13C,EAAS03C,CAAG,CAC1B,CAEI,iBAAiB2P,EAAuB,CACpC,MAAM9sC,EAAW8sC,EAAsB,sBAAsB,SACvD7Q,KAAeqC,GAAW,UAAUt+B,EAAS,aAAa8sC,EAAsB,sBAAsB,IAAI,EAAG,MAAO,CAAC,WAAY,MAAO,QAAQ,CAAC,EACvJ,OAAO,KAAK,gBAAgB,CACxB,cAAe,MACf,SAAA7Q,EACA,sBAAA6Q,EACA,KAAM,MAAO/Q,EAAYwQ,IAAoB,CACrC,KAAK,cAAc7B,GAAQ,iBAAiB,EAAI,IAChD6B,EAAgB,WAAax2C,GAAM,KAAK,KAAK20C,GAAQ,kBAAmB30C,CAAE,GAE9E,MAAM,KAAK,aAAa,SAASkmC,EAAS,IAAKF,EAAYwQ,CAAe,CAC1F,CACA,CAAS,CACT,CACI,UAAU9mD,EAAS,CACf,MAAMsnD,EAAgB,KAAK,cAC3B,GAAIA,GAAiB,KACjB,YAAK,cAAc,IAAI,MAAM,qDAAqD,CAAC,EAC5E,GAEX,GAAI,CAAC,KAAK,WAAW,MAAM,GAAK,CAAC,KAAK,WAAW,KAAK,EAClD,YAAK,cAAc,IAAI,MAAM,kEAAkE,CAAC,EACzF,GAEX,MAAM8C,EAAe,CAAC,OAAQ,KAAK,EAC7BC,EAAiB,KAAK,qBAAqBD,CAAY,EAC7D,GAAI,CACAD,GAAW,yBAAyBE,EAAgB/C,EAAe,KAAK,2BAA2B,KAAK,IAAI,EAAG,KAAK,OAAO,CACvI,OACe1qD,EAAO,CACV,YAAK,cAAcA,CAAK,EACjB,EACnB,CACQ,OAAIoD,EAAQ,iBACR,KAAK,IAAI,SAAQ,EAEd,EACf,CACI,OAAO,yBAAyBqqD,EAAgB/C,EAAegD,EAAe7vD,EAAQ,CAClF,IAAIrS,EACJ,GAAIiiE,IAAmB,OACnB,GAAI,CAEAC,EAAc,CAAC,OAAQ,KAAMhD,CAAa,CAAC,CAC3D,OACmB1qD,EAAO,CAEVnC,EAAO,MAAMrS,EAAKwU,EAAM,WAAa,MAAQxU,IAAO,OAASA,EAAKwU,CAAK,EACvEnC,EAAO,KAAK,0EAA0E,EACtF6vD,EAAc,CAAC,UAAW,UAAW,KAAM,IAAI,CAAC,CAChE,SAEiBD,IAAmB,MAExB5vD,EAAO,KAAK,oGAAoG,EAChH6vD,EAAc,CACV,MACA,UACA,KACA,0BACA,qBACA,+BACAhD,CAChB,CAAa,MAGD,OAAM,IAAI,MAAM,mBAAmB+C,CAAc,gBAAgB,CAE7E,CACA,CACAH,GAAA,WAAqBC,aCjFrB,OAAO,eAAeI,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,cAAwB,OACxB,MAAMtF,GAAUhoD,GACV47C,GAAa73C,GACbuoD,GAAiBtoD,GACvB,MAAMupD,WAAsBjB,GAAe,YAAa,CACpD,YAAYvpD,EAAS03C,EAAK,CACtB,MAAM13C,EAAS03C,CAAG,CAC1B,CAEI,iBAAiB2P,EAAuB,CACpC,MAAM9sC,EAAW8sC,EAAsB,sBAAsB,SACvD7Q,KAAeqC,GAAW,UAAUt+B,EAAS,aAAa8sC,EAAsB,sBAAsB,IAAI,EAAG,SAAU,CAAC,WAAY,MAAO,KAAK,CAAC,EACvJ,OAAO,KAAK,gBAAgB,CACxB,cAAe,SACf,SAAA7Q,EACA,sBAAA6Q,EACA,KAAM,MAAO/Q,EAAYwQ,IAAoB,CACrC,KAAK,cAAc7B,GAAQ,iBAAiB,EAAI,IAChD6B,EAAgB,WAAax2C,GAAM,KAAK,KAAK20C,GAAQ,kBAAmB30C,CAAE,GAE9E,MAAM,KAAK,aAAa,SAASkmC,EAAS,IAAKF,EAAYwQ,CAAe,CAC1F,CACA,CAAS,CACT,CACI,UAAU9mD,EAAS,CACf,MAAMsnD,EAAgB,KAAK,cAC3B,GAAIA,GAAiB,KACjB,YAAK,cAAc,IAAI,MAAM,qDAAqD,CAAC,EAC5E,GAEX,GAAI,CACAkD,GAAc,yBAAyBlD,EAAe,KAAK,2BAA2B,KAAK,IAAI,EAAG,KAAK,OAAO,CAC1H,OACe1qD,EAAO,CACV,YAAK,cAAcA,CAAK,EACjB,EACnB,CACQ,OAAIoD,EAAQ,iBACR,KAAK,IAAI,WAEN,EACf,CACI,OAAO,yBAAyBsnD,EAAegD,EAAe7vD,EAAQ,CAClE,IAAIrS,EACJ,GAAI,CACAkiE,EAAc,CAAC,SAAU,KAAM,cAAehD,CAAa,CAAC,CACxE,OACe1qD,EAAO,CACVnC,EAAO,MAAMrS,EAAKwU,EAAM,WAAa,MAAQxU,IAAO,OAASA,EAAKwU,CAAK,EACvEnC,EAAO,KAAK,6EAA6E,EACzF,GAAI,CAEA6vD,EAAc,CAAC,SAAU,MAAO,aAAa,CAAC,EAE9CA,EAAc,CAAC,SAAU,KAAM,cAAehD,CAAa,CAAC,CAC5E,OACmBmD,EAAY,CACf,MAAAhwD,EAAO,MAAM,+BAA+B,EACtCgwD,CACtB,CACA,CACA,CACA,CACAF,GAAA,cAAwBC,aChExB,OAAO,eAAeE,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,WAAqB,OACrB,MAAMzF,GAAUhoD,GACV47C,GAAa73C,GACbuoD,GAAiBtoD,GACvB,MAAM0pD,WAAmBpB,GAAe,YAAa,CACjD,YAAYvpD,EAAS03C,EAAK,CACtB,MAAM13C,EAAS03C,CAAG,CAC1B,CAEI,iBAAiB2P,EAAuB,CACpC,MAAM9sC,EAAW8sC,EAAsB,sBAAsB,SACvD7Q,KAAeqC,GAAW,UAAUt+B,EAAS,aAAa8sC,EAAsB,sBAAsB,IAAI,EAAG,MAAO,CAAC,WAAY,MAAO,QAAQ,CAAC,EACvJ,OAAO,KAAK,gBAAgB,CACxB,cAAe,MACf,SAAA7Q,EACA,sBAAA6Q,EACA,KAAM,MAAO/Q,EAAYwQ,IAAoB,CACrC,KAAK,cAAc7B,GAAQ,iBAAiB,EAAI,IAChD6B,EAAgB,WAAax2C,GAAM,KAAK,KAAK20C,GAAQ,kBAAmB30C,CAAE,GAE9E,MAAM,KAAK,aAAa,SAASkmC,EAAS,IAAKF,EAAYwQ,CAAe,CAC1F,CACA,CAAS,CACT,CACI,UAAU9mD,EAAS,CACf,MAAMsnD,EAAgB,KAAK,cAC3B,GAAIA,GAAiB,KACjB,YAAK,cAAc,IAAI,MAAM,qDAAqD,CAAC,EAC5E,GAEX,MAAM8C,EAAe,CAAC,SAAU,MAAO,MAAO,KAAK,EAC7CC,EAAiB,KAAK,qBAAqBD,CAAY,EAC7D,GAAI,CACAO,GAAW,yBAAyBN,EAAgB/C,EAAe,KAAK,2BAA2B,KAAK,IAAI,EAAG,KAAK,OAAO,CACvI,OACe1qD,EAAO,CACV,YAAK,cAAcA,CAAK,EACjB,EACnB,CACQ,OAAIoD,EAAQ,iBACR,KAAK,IAAI,SAAQ,EAEd,EACf,CACI,OAAO,yBAAyBqqD,EAAgB/C,EAAegD,EAAe7vD,EAAQ,CAClF,GAAI4vD,IAAmB,SACnB,OAAOC,EAAc,CAAC,SAAU,oBAAqB,eAAgB,UAAW,uBAAwB,KAAMhD,CAAa,CAAC,EAEhI,GAAI+C,IAAmB,MACnB,OAAOC,EAAc,CAAC,MAAO,UAAW,eAAgB,KAAMhD,CAAa,CAAC,EAEhF,GAAI+C,IAAmB,MACnB,OAAOC,EAAc,CAAC,MAAO,UAAW,eAAgB,KAAMhD,CAAa,CAAC,EAEhF,GAAI+C,IAAmB,MACnB,OAAA5vD,EAAO,KAAK,sDAAsD,EAC3D6vD,EAAc,CAAC,MAAO,OAAQ,gBAAiB,iBAAkB,WAAYhD,CAAa,CAAC,EAEtG,MAAM,IAAI,MAAM,mBAAmB+C,CAAc,gBAAgB,CACzE,CACA,CACAK,GAAA,WAAqBC,aC9DrB,OAAO,eAAeC,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,WAAqB,OACrB,MAAM/S,GAAyB56C,GACzBk5C,GAAan1C,GACbmV,GAAOlV,EACPnb,GAAOob,EACP2pD,GAASzpD,GACTujD,GAAeziD,GACf22C,GAAa/rC,GACbm7C,GAAkBl7C,GAClBkJ,GAAWpG,GACjB,MAAMi7C,WAAmBnG,GAAa,UAAW,CAC7C,YAAY3kD,EAAS03C,EAAK,CACtB,MAAM13C,EAAS03C,CAAG,EAClB,KAAK,cAAgB5nC,EAAoB,YACzC,KAAK,yBAA2B,GAChC,KAAK,cAAc,GAAG,QAASQ,GAAM,CACjC,KAAK,QAAQ,KAAKA,CAAE,EACpB,KAAK,KAAK,QAASA,CAAE,CACjC,CAAS,EACD,KAAK,cAAc,GAAG,oBAAqB,IAAM,CAC7C,KAAK,yBAA2B,GAChC,KAAK,MAAM,iCAAiC,CACxD,CAAS,CACT,CACI,MAAM9U,EAAS,CACP,KAAK,QAAQ,OAAS,MACtB,KAAK,QAAQ,MAAMA,CAAO,CAEtC,CACI,qBAAsB,CACd,KAAK,SACL,KAAK,MAAM,sBAAsB,EACjC,KAAK,OAAO,MAAMpV,GAAO,CACjBA,GACA,KAAK,MAAM,kGAAkG,CAEjI,CAAa,EAEb,CACI,MAAM,iBAAiBihE,EAAuB,CAC1C,IAAI1jD,EAAQ0jD,EAAsB,sBAAsB,SAAS,aAAaA,EAAsB,sBAAsB,IAAI,EAC9H,MAAMjsD,EAAM,KAAK,QAEX2vD,EAAuB,yBAC7B,IAAIC,EAAY,GAChB,GAAI,CACA,KAAK,MAAM,wCAAwC,EAEnDA,KADmB/C,GAAgB,cAAc,SAAU,CAAC8C,CAAoB,EAAG,CAAE,SAAU,MAAM,CAAE,EACpF,SAAS,GAAGA,CAAoB,KAAK,EACxD3vD,EAAI,KAAK,oDAAoD4vD,CAAS,GAAG,CACrF,OACen+D,EAAG,CACNuO,EAAI,KAAK,uEAAuEvO,CAAC,EAAE,CAC/F,CACQ,IAAIo+D,EAAa,GACjB,GAAI,CACA,KAAK,MAAM,6BAA6B,EAExC,MAAMC,KADajD,GAAgB,cAAc,QAAS,CAAC,IAAI,EAAG,CAAE,SAAU,MAAM,CAAE,EACjE,SAAS,KAAK,EACnC7sD,EAAI,KAAK,6BAA6B8vD,CAAK,EAAE,EAC7CD,EAAaA,GAAcC,CACvC,OACer+D,EAAG,CACNuO,EAAI,KAAK,kDAAkDvO,CAAC,EAAE,CAC1E,CACQo+D,EAAaA,GAAc,QAAQ,OAAS,SAAWD,EAEvD,MAAMG,EAAWv2D,GAAS,CAAE,IAAIxM,EAAI,OAAOwM,EAAK,IAAI,SAAS,SAAS,OAAO,KAAOxM,EAAKwM,EAAK,KAAK,OAAS,MAAQxM,IAAO,OAAS,OAASA,EAAG,SAAS,OAAO,EAAG,EAC/J6iE,GAActnD,EAAM,KAAKwnD,CAAO,EAChCxnD,EAAQA,EAAM,OAAO/O,GAAQq2D,IAAeE,EAAQv2D,CAAI,CAAC,EAGzD+O,EAAQA,EAAM,OAAO/O,GAAQ,CAACu2D,EAAQv2D,CAAI,CAAC,EAE/C,MAAMw2D,KAAkBvS,GAAW,UAAUl1C,EAAO,MAAO,CAAC,MAAO,KAAK,CAAC,EACzE,GAAIynD,GAAe,KACf,QAAUvT,GAAuB,UAAU,6BAA8BA,GAAuB,mBAAmBl0C,CAAK,CAAC,GAAI,gCAAgC,EAEjK,MAAM4W,EAAW8sC,EAAsB,sBAAsB,SACvDgE,EAAgC,aACtC,OAAO,KAAK,gBAAgB,CACxB,cAAe,MACf,SAAUD,EACV,sBAAA/D,EACA,KAAM,MAAOiE,EAAiBxE,IAAoB,CAC9C,MAAMyE,EAAuBzlE,GAAK,KAAK,KAAK,uBAAuB,SAAUulE,CAA6B,EACpGG,EAA0B,OACnBrV,GAAW,gBAAgBoV,CAAoB,EAIjD,CAAClE,EAAsB,6BAH1BjsD,EAAI,KAAK,wHAAwH,EAC1H,IAIf,IAAIqwD,EAA6B,GAC7BD,EAAuB,IACvBC,EAA6B,MAAM,KAAK,8BAA8BL,EAAa/D,EAAuBiE,EAAiB/wC,EAAU8wC,CAA6B,GAElKI,GACA,MAAM,KAAK,aAAa,SAASL,EAAY,IAAKE,EAAiBxE,CAAe,CAEtG,EACY,KAAM,MAAO70D,GAAU,CACnB,GAAI,CAACo1D,EAAsB,4BACvB,GAAI,CACA,MAAMkE,EAAuBzlE,GAAK,KAAK,KAAK,uBAAuB,SAAUulE,CAA6B,EAC1G,QAAUlV,GAAW,UAAUlkD,EAAM,eAAgBs5D,CAAoB,CACjG,OAC2B3uD,EAAO,CACV,KAAK,QAAQ,KAAK,sEAAsEA,EAAM,OAAO,EAAE,CAC/H,CAEgB,OAAO,KAAK,iBAAiBwuD,EAAan5D,CAAK,CAC/D,CACA,CAAS,CACT,CACI,MAAM,iBAAiBm5D,EAAan5D,EAAO,CACvC,IAAI7J,EACJ,MAAMsuD,EAAiBzkD,EAAM,eACvBy5D,GAAkBtjE,EAAKgjE,EAAY,KAAK,QAAU,MAAQhjE,IAAO,OAASA,GAAM,QAAU+tD,GAAW,MAAMO,CAAc,GAAG,KAC5Ht7C,EAAM,KAAK,QACXuwD,EAAa,eAAeP,EAAY,IAAI,IAAI,GACtD,KAAK,oBAAmB,EACxB,KAAK,MAAM,kDAAkDO,CAAU,GAAG,EAC1E,KAAK,UAAad,GAAO,cAAY,EACrC,KAAK,MAAM,oDAAoDc,CAAU,GAAG,EAC5E,KAAK,OAAO,GAAG,QAAS,IAAM,CAC1BvwD,EAAI,KAAK,mDAAmDuwD,CAAU,GAAG,CACrF,CAAS,EAED,MAAMC,EAAgBr9D,GAAM,CACxB,MAAMs9D,EAAUt9D,EAAE,QAAO,EACzB,OAAI,OAAOs9D,GAAY,SACZA,EAEJ,oBAAoBA,GAAY,KAA6B,OAASA,EAAQ,IAAI,EACrG,EACQ,OAAO,MAAM,IAAI,QAAQ,CAACvgE,EAASC,IAAW,CAC1C,MAAMugE,KAAW71C,GAAS,aAAa,EAAE,EAAE,SAAS,QAAQ,EAAE,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,GAAG,EAC9FmvC,EAAW,OAAO,KAAK,eAAe0G,CAAI,GAAI,OAAO,EAErDC,EAAU,OAAQ91C,GAAS,aAAa,EAAE,EAAE,SAAS,KAAK,CAAC,OACjE,KAAK,OAAO,GAAG,UAAW,CAACc,EAAS9a,IAAa,CAC7C,MAAM+vD,EAAaj1C,EAAQ,IAE3B,GADA3b,EAAI,KAAK,GAAG4wD,CAAU,YAAY,EAC9BA,IAAe,IAAK,CAEpB,GAAI,CAACj1C,EAAQ,QAAQ,eAAiBA,EAAQ,QAAQ,cAAc,QAAQ,QAAQ,IAAM,GAAI,CAC1F9a,EAAS,WAAa,IACtBA,EAAS,cAAgB,qCACzBA,EAAS,IAAG,EACZb,EAAI,KAAK,yBAAyB,EAClC,MACxB,CAEoB,MAAM6wD,EAAoBl1C,EAAQ,QAAQ,cAAc,MAAM,GAAG,EAAE,CAAC,EAC9Dm1C,EAAc,OAAO,KAAKD,EAAmB,QAAQ,EAAE,SAAS,OAAO,EACvE,CAACE,EAAUthE,EAAQ,EAAIqhE,EAAY,MAAM,GAAG,EAClD,GAAIC,IAAa,eAAiBthE,KAAaihE,EAAM,CACjD7vD,EAAS,WAAa,IACtBA,EAAS,cAAgB,qCACzBA,EAAS,IAAG,EACZb,EAAI,KAAK,qCAAqC,EAC9C,MACxB,CACoB,MAAM3Q,EAAO,OAAO,KAAK,aAAamhE,EAAa,KAAK,MAAM,CAAC,GAAGG,CAAO,KAAK,EAC9E9vD,EAAS,UAAU,IAAK,CAAE,eAAgB,mBAAoB,iBAAkBxR,EAAK,OAAQ,EAC7FwR,EAAS,IAAIxR,CAAI,EACjB,MACpB,CACgB,GAAI,CAACuhE,EAAW,WAAWD,CAAO,EAAG,CACjC3wD,EAAI,KAAK,GAAG4wD,CAAU,+BAA+B,EACrD/vD,EAAS,UAAU,GAAG,EACtBA,EAAS,IAAG,EACZ,MACpB,CACgBb,EAAI,KAAK,GAAG2wD,CAAO,oCAAoCrV,CAAc,EAAE,EACvE,IAAI0V,EAAgB,GACpBnwD,EAAS,GAAG,SAAU,IAAM,CACnBmwD,IACD,KAAK,cAAc,eAAe,QAAS7gE,CAAM,EACjDD,EAAQ,CAAA,CAAE,EAElC,CAAiB,EACD,MAAM01D,KAAiB7qC,GAAK,kBAAkBugC,CAAc,EAC5DsK,EAAW,GAAG,QAASpkD,GAAS,CAC5B,GAAI,CACAX,EAAS,IAAG,CACpC,OAC2BpP,EAAG,CACNuO,EAAI,KAAK,wBAAwBvO,CAAC,EAAE,CAC5D,CACoBu/D,EAAgB,GAChB,KAAK,cAAc,eAAe,QAAS7gE,CAAM,EACjDA,EAAO,IAAI,MAAM,gBAAgBmrD,CAAc,MAAM95C,CAAK,EAAE,CAAC,CACjF,CAAiB,EACDX,EAAS,UAAU,IAAK,CACpB,eAAgB,kBAChB,iBAAkByvD,CACtC,CAAiB,EACD1K,EAAW,KAAK/kD,CAAQ,CACxC,CAAa,EACD,KAAK,MAAM,+DAA+D0vD,CAAU,GAAG,EACvF,KAAK,OAAO,OAAO,EAAG,YAAa,IAAM,CACrC,KAAK,MAAM,8DAA8DC,EAAa,KAAK,MAAM,CAAC,KAAKD,CAAU,GAAG,EACpH,KAAK,cAAc,WAAW,CAC1B,IAAKC,EAAa,KAAK,MAAM,EAC7B,QAAS,CACL,gBAAiB,WACjB,cAAe,SAASxG,EAAS,SAAS,QAAQ,CAAC,EAC3E,CACA,CAAiB,EAED,KAAK,yBAAyBnzD,CAAK,EAC/B,KAAK,sBACL,KAAK,cAAc,KAAK,QAAS1G,CAAM,EAEvC,KAAK,cAAc,gBAAe,GAGlCD,EAAQ,CAAA,CAAE,CAE9B,CAAa,CACb,CAAS,CACT,CACI,wBAAyB,CACjB,KAAK,uBACL,KAAK,cAAc,eAAc,EAGjC,KAAK,IAAI,KAAI,EAEjB,KAAK,oBAAmB,CAChC,CACI,gBAAiB,CACT,KAAK,yBAEL,KAAK,uBAAsB,GAI3B,KAAK,cAAc,GAAG,oBAAqB,IAAM,KAAK,wBAAwB,EACzE,KAAK,sBAKN,KAAK,cAAc,gBAAe,EAGlD,CACA,CACAs/D,GAAA,WAAqBE,mBC5PrB,OAAO,eAAeuB,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,gBAA0BC,GAC1B,MAAMzU,GAAyB56C,GACzBgrD,GAAkBjnD,GAClBjb,GAAKkb,GACLnb,GAAOob,EACb,SAASqrD,GAAsB1C,EAAS7yC,EAAS,CAY7C,MAAO,CANY,yDACN,CAAC,aAAc,kBAAmB,eAAgB,OAAQ,WAAY6yC,CAAO,EAC1E,CACZ,MAAO,GACP,QAAA7yC,CACR,CACqC,CACrC,CAIA,SAASs1C,GAAgBE,EAAgBC,EAAyBhyD,EAAQ,CACtE,OAAO,IAAI,QAAQ,CAACnP,EAASC,IAAW,CAmBpC,MAAM67D,EAAiBqF,EAAwB,QAAQ,KAAM,IAAI,EACjEhyD,EAAO,KAAK,uBAAuB2sD,CAAc,EAAE,KAC/Ca,GAAgB,UAAU,GAAGsE,GAAsB,4CAA4CnF,CAAc,gCAAiC,GAAK,GAAI,EAAG,CAACxqD,EAAO2rD,EAAQC,IAAW,CACrL,IAAIpgE,EACJ,GAAI,CACA,GAAIwU,GAAS,MAAQ4rD,EAAQ,CACzBkE,GAAYjyD,EAAQmC,EAAO4rD,EAAQj9D,CAAM,EACzCD,EAAQ,IAAI,EACZ,MACpB,CACgB,MAAMb,EAAOkiE,GAASpE,CAAM,EAC5B,GAAI99D,EAAK,SAAW,EAAG,CACnB,GAAI,CACA,MAAMmiE,EAA2B9mE,GAAK,UAAU2E,EAAK,IAAI,EACnDoiE,EAA2B/mE,GAAK,UAAU2mE,CAAuB,EAEvE,GADAhyD,EAAO,KAAK,gBAAgBmyD,CAAwB,kBAAkBC,CAAwB,EAAE,EAC5FD,IAA6BC,EAA0B,CACvDH,GAAYjyD,EAAQ,IAAI,MAAM,kBAAkBmyD,CAAwB,sBAAsBC,CAAwB,EAAE,EAAGrE,EAAQj9D,CAAM,EACzID,EAAQ,IAAI,EACZ,MAC5B,CACA,OAC2BsR,EAAO,CACVnC,EAAO,KAAK,sHAAsHrS,EAAKwU,EAAM,WAAa,MAAQxU,IAAO,OAASA,EAAKwU,EAAM,KAAK,EAAE,CAC5N,CACoB,MAAM0lB,KAAcu1B,GAAuB,SAASptD,EAAK,kBAAkB,OAAO,EAClF,IAAIkL,EAAQ,GACZ,UAAWxM,KAAQqjE,EAAgB,CAC/B,MAAMM,KAASjV,GAAuB,SAAS1uD,CAAI,EAYnD,GAXI2jE,EAAG,KAGHn3D,EADgB,MAAM,KAAKm3D,EAAG,KAAI,CAAE,EACpB,MAAMj3D,GACXi3D,EAAG,IAAIj3D,CAAG,IAAMysB,EAAQ,IAAIzsB,CAAG,CACzC,EAEI1M,IAASm5B,EAAQ,IAAI,IAAI,IAC9B7nB,EAAO,KAAK,qCAAqCtR,CAAI,gFAAgF,EACrIwM,EAAQ,IAERA,EAAO,CACPrK,EAAQ,IAAI,EACZ,MAC5B,CACA,CACA,CACgB,MAAMgH,EAAS,mBAAmBk6D,EAAe,KAAK,KAAK,CAAC,eAAiB,KAAK,UAAU/hE,EAAM,CAACtB,EAAMsD,IAAWtD,IAAS,UAAY,OAAYsD,EAAQ,CAAC,EAC9JgO,EAAO,KAAK,0EAA0EnI,CAAM,EAAE,EAC9FhH,EAAQgH,CAAM,CAC9B,OACmBzF,EAAG,CACN6/D,GAAYjyD,EAAQ5N,EAAG,KAAMtB,CAAM,EACnCD,EAAQ,IAAI,EACZ,MAChB,CACA,CAAS,CACT,CAAK,CACL,CACA,SAASqhE,GAAS7L,EAAK,CACnB,MAAMr2D,EAAO,KAAK,MAAMq2D,CAAG,EAC3B,OAAOr2D,EAAK,WACZ,OAAOA,EAAK,WACZ,OAAOA,EAAK,cACZ,MAAMsiE,EAAoBtiE,EAAK,kBAC/B,OAAIsiE,GAAqB,OACrB,OAAOA,EAAkB,SACzB,OAAOA,EAAkB,WACzB,OAAOA,EAAkB,OACzB,OAAOA,EAAkB,cAEzB,OAAOA,EAAkB,aAEtBtiE,CACX,CACA,SAASiiE,GAAYjyD,EAAQmC,EAAO4rD,EAAQj9D,EAAQ,CAChD,GAAIyhE,GAAS,EAAI,CACbvyD,EAAO,KAAK,6CAA6CmC,GAAS4rD,CAAM,kHAAkH,EAC1L,MACR,CACI,GAAI,IACIP,GAAgB,cAAc,GAAGsE,GAAsB,sBAAuB,GAAK,GAAI,CAAC,CACpG,OACWU,EAAW,CACdxyD,EAAO,KAAK,kCAAkCwyD,EAAU,OAAO,kHAAkH,EACjL,MACR,CACQrwD,GAAS,MACTrR,EAAOqR,CAAK,EAEZ4rD,GACAj9D,EAAO,IAAI,MAAM,qDAAqDi9D,CAAM,uDAAuD,CAAC,CAE5I,CACA,SAASwE,IAAY,CACjB,MAAME,EAAannE,GAAG,QAAO,EAC7B,OAAOmnE,EAAW,WAAW,IAAI,GAAK,CAACA,EAAW,WAAW,KAAK,CACtE,CC3IA,OAAO,eAAeC,GAAS,aAAc,CAAE,MAAO,EAAI,CAAE,EAC5DA,GAAA,YAAsB,OACtB,MAAMtV,GAAyB56C,GACzBnX,GAAOkb,EACPgnD,GAAgB/mD,GAChB0nD,GAAmDznD,GACnD+jD,GAAU7jD,GACVy3C,GAAa32C,GACbi0C,GAAarpC,GACbsgD,GAA2CrgD,GAC3CqJ,GAAQvG,GACd,MAAMw9C,WAAoBrF,GAAc,WAAY,CAChD,YAAYhoD,EAAS03C,EAAK,CACtB,MAAM13C,EAAS03C,CAAG,EAClB,KAAK,2BAA6B,CAAC8U,EAAgBC,OAAgCW,GAAyC,iBAAiBZ,EAAgBC,EAAyB,KAAK,OAAO,CAC1M,CAKI,IAAI,2BAA4B,CAC5B,OAAO,KAAK,0BACpB,CACI,IAAI,0BAA0BhgE,EAAO,CAC7BA,IACA,KAAK,2BAA6BA,EAE9C,CAEI,iBAAiB46D,EAAuB,CACpC,MAAM9sC,EAAW8sC,EAAsB,sBAAsB,SACvD7Q,KAAeqC,GAAW,UAAUt+B,EAAS,aAAa8sC,EAAsB,sBAAsB,IAAI,EAAG,KAAK,EACxH,OAAO,KAAK,gBAAgB,CACxB,cAAe,MACf,sBAAAA,EACA,SAAA7Q,EACA,KAAM,MAAO8U,EAAiBxE,EAAiBnQ,EAAa2W,IAAuB,CAC/E,MAAMnT,EAAc3D,EAAS,YACvB+W,EAAiBpT,GAAe,MAAQxD,GAAe,KAC7D,GAAI4W,GAAkBlG,EAAsB,oBACxC,QAAUxP,GAAuB,UAAU,kCAAkCwP,EAAsB,sBAAsB,KAAK,OAAO,gCAAiC,oCAAoC,EAE1M,CAACkG,GAAkB,CAAClG,EAAsB,qBAC1C,KAAK,QAAQ,KAAK,4JAA4J,GAE9KkG,GACAlG,EAAsB,6BACrB,MAAM,KAAK,8BAA8B7Q,EAAU6Q,EAAuBiE,EAAiB/wC,EAAUs9B,GAAuB,+BAA+B,IAC5J,MAAM,KAAK,aAAa,SAASrB,EAAS,IAAK8U,EAAiBxE,CAAe,EAEnF,MAAM0G,EAA8B,MAAM,KAAK,gBAAgBlC,CAAe,EAC9E,GAAIkC,GAA+B,KAC/B,YAAMF,EAAkB,KAEdzV,GAAuB,UAAU,eAAewP,EAAsB,sBAAsB,KAAK,OAAO,4CAA4CmG,CAA2B,GAAI,+BAA+B,EAEhO,GAAID,GACI,MAAM,KAAK,+BAA+BlG,EAAuBlN,EAAaxD,EAAap8B,CAAQ,EACnG,GAAI,CACA,MAAM,KAAK,aAAa,SAAS,IAAInE,GAAM,IAAI+jC,EAAY,IAAI,EAAGxD,EAAa,CAC3E,QAAS0Q,EAAsB,eAC/B,kBAAmBA,EAAsB,kBACzC,OAAQlN,EAAY,MACpD,CAA6B,CAC7B,OAC+BttD,EAAG,CACN,GAAI,CACA,QAAUspD,GAAW,QAAQQ,CAAW,CACxE,MAC6C,CAE7C,CAC4B,MAAM9pD,CAClC,CAGA,CACA,CAAS,CACT,CAII,MAAM,gBAAgBu6D,EAAgB,CAClC,IAAIqG,EACJ,GAAI,CAEA,GADAA,GAAiB,MAAM,KAAK,aAAa,OAAO,cAC5CA,GAAiB,KACjB,OAAO,IAEvB,OACe5gE,EAAG,CACN,GAAIA,EAAE,OAAS,SAEX,OAAO,KAEX,MAAMA,CAClB,CACQ,OAAO,MAAM,KAAK,2BAA2B,MAAM,QAAQ4gE,CAAa,EAAIA,EAAgB,CAACA,CAAa,EAAGrG,CAAc,CACnI,CACI,UAAUpnD,EAAS,CACf,MAAMsnD,EAAgB,KAAK,cAC3B,GAAIA,GAAiB,KACjB,YAAK,cAAc,IAAI,MAAM,qDAAqD,CAAC,EAC5E,GAEX,MAAMptD,EAAO,CAAC,WAAW,EACrB8F,EAAQ,UACR9F,EAAK,KAAK,IAAI,EAEd8F,EAAQ,iBACR9F,EAAK,KAAK,aAAa,EAEvB,KAAK,kBAELA,EAAK,KAAK,MAAM,KAAK,gBAAgB,EAAE,EAE3C,MAAMwzD,EAAc,KAAK,wBAA0B,KAAO,KAAO,KAAK,uBAAuB,YACzFA,GAAe,MAEfxzD,EAAK,KAAK,kBAAkBwzD,CAAW,EAAE,EAE7C,MAAMC,EAAqB,IAAM,CAC7B,KAAK,SAAS7nE,GAAK,KAAK,QAAQ,cAAe,aAAa,EAAG,CAACwhE,CAAa,EAAE,OAAOptD,CAAI,CAAC,EAAE,MAAMrN,GAAK,KAAK,cAAcA,CAAC,CAAC,CACzI,EACQ,OAAImT,EAAQ,uBACR,KAAK,QAAQ,KAAK,uEAAuE,EACzF2tD,EAAkB,EACX,KAEX,KAAK,SAASrG,EAAeptD,CAAI,EAAE,MAAOrN,GAAM,CAG5C,MAAM+gE,EAAY/gE,EAAE,KACpB,KAAK,QAAQ,KAAK,qCAAqC+gE,CAAS,qBAAqB/gE,EAAE,OAAO,0GAA0G,EACpM+gE,IAAc,WAAaA,IAAc,SACzCD,EAAkB,EAEbC,IAAc,SACnB99C,EACK,MAAM,SAASw3C,CAAa,EAC5B,MAAOlhE,GAAQ,KAAK,cAAcA,CAAG,CAAC,EAG3C,KAAK,cAAcyG,CAAC,CAEpC,CAAS,EACM,GACf,CACI,MAAM,+BAA+Bw6D,EAAuBlN,EAAauT,EAAanzC,EAAU,CAC5F,GAAI4/B,EAAY,cAAgB,KAC5B,MAAO,GAEX,GAAI,CACA,MAAM2M,EAAkB,CACpB,OAAQ,IAAI1wC,GAAM,IAAI+jC,EAAY,IAAI,EACtC,QAASr0D,GAAK,KAAK,KAAK,uBAAuB,SAAU+xD,GAAuB,6BAA6B,EAC7G,OAAQ,KAAK,QACb,QAAS6V,EACT,eAAgB,KAAK,eACrB,0BAA2BnzC,EAAS,0BACpC,kBAAmB8sC,EAAsB,iBACzD,EACgB,KAAK,cAAcpC,GAAQ,iBAAiB,EAAI,IAChD6B,EAAgB,WAAax2C,GAAM,KAAK,KAAK20C,GAAQ,kBAAmB30C,CAAE,GAE9E,MAAM,IAAIq4C,GAAiD,+CAA+CxO,EAAa,KAAK,aAAc2M,CAAe,EAAE,SAAQ,CAC/K,OACej6D,EAAG,CACN,YAAK,QAAQ,MAAM,8DAA8DA,EAAE,OAASA,CAAC,EAAE,EAExF,QAAQ,WAAa,OACxC,CACQ,MAAO,EACf,CACA,CACAsgE,GAAA,YAAsBE,gBC/KtB,IAAIQ,EAAmBC,IAAQA,GAAK,kBAAqB,OAAO,OAAU,SAAShxC,EAAG31B,EAAG2tB,EAAGi5C,EAAI,CACxFA,IAAO,SAAWA,EAAKj5C,GAC3B,IAAIk5C,EAAO,OAAO,yBAAyB7mE,EAAG2tB,CAAC,GAC3C,CAACk5C,IAAS,QAASA,EAAO,CAAC7mE,EAAE,WAAa6mE,EAAK,UAAYA,EAAK,iBAClEA,EAAO,CAAE,WAAY,GAAM,IAAK,UAAW,CAAE,OAAO7mE,EAAE2tB,CAAC,CAAE,CAAE,GAE7D,OAAO,eAAegI,EAAGixC,EAAIC,CAAI,CACrC,EAAM,SAASlxC,EAAG31B,EAAG2tB,EAAGi5C,EAAI,CACpBA,IAAO,SAAWA,EAAKj5C,GAC3BgI,EAAEixC,CAAE,EAAI5mE,EAAE2tB,CAAC,CACf,GACIm5C,EAAgBH,IAAQA,GAAK,cAAiB,SAAS3mE,EAAG8d,EAAS,CACnE,QAAS5c,KAAKlB,EAAOkB,IAAM,WAAa,CAAC,OAAO,UAAU,eAAe,KAAK4c,EAAS5c,CAAC,GAAGwlE,EAAgB5oD,EAAS9d,EAAGkB,CAAC,CAC5H,EACA,OAAO,eAAc4c,EAAU,aAAc,CAAE,MAAO,GAAM,EAC5DA,EAAA,YAAsBA,EAAA,WAAqBA,EAAA,WAAqBA,EAAA,cAAwBA,EAAA,WAAqBA,EAAA,gBAA0BA,EAAA,SAAmBA,EAAA,WAAqBA,EAAA,WAAqBA,EAAA,YAAsB,OAC1N,MAAMkxC,EAAal5C,GACbnX,EAAOkb,EACb,IAAIgnD,EAAgB/mD,GACpB,OAAO,eAAegE,EAAS,cAAe,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO+iD,EAAc,WAAY,CAAE,CAAE,EAC1H,IAAIrD,EAAezjD,GACnB,OAAO,eAAe+D,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO0/C,EAAa,UAAW,CAAE,CAAE,EACvH,OAAO,eAAe1/C,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO0/C,EAAa,UAAW,CAAE,CAAE,EACvH,IAAI9L,EAAaz3C,GACjB,OAAO,eAAe6D,EAAS,WAAY,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO4zC,EAAW,QAAS,CAAE,CAAE,EACjH,IAAIqQ,EAAoBhnD,GACxB,OAAO,eAAe+C,EAAS,kBAAmB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOikD,EAAkB,eAAgB,CAAE,CAAE,EACtI,IAAIgB,EAAep9C,GACnB,OAAO,eAAe7H,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOilD,EAAa,UAAW,CAAE,CAAE,EACvH,IAAIK,EAAkBx9C,GACtB,OAAO,eAAe9H,EAAS,gBAAiB,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOslD,EAAgB,aAAc,CAAE,CAAE,EAChI,IAAIG,EAAe76C,GACnB,OAAO,eAAe5K,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOylD,EAAa,UAAW,CAAE,CAAE,EACvH,IAAIE,EAAe96C,GACnB,OAAO,eAAe7K,EAAS,aAAc,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAO2lD,EAAa,UAAW,CAAE,CAAE,EACvH,IAAIuC,EAAgB3zB,GACpB,OAAO,eAAev0B,EAAS,cAAe,CAAE,WAAY,GAAM,IAAK,UAAY,CAAE,OAAOkoD,EAAc,WAAY,CAAE,CAAE,EAC1Hc,EAAax0B,GAAoBx0B,CAAO,EAExC,IAAIipD,EACJ,SAASC,GAAoB,CAEzB,GAAI,QAAQ,WAAa,QACrBD,EAAe,IAAK10B,GAAyB,oBAExC,QAAQ,WAAa,SAC1B00B,EAAe,IAAKp+C,GAAwB,eAE3C,CACDo+C,EAAe,IAAKhsD,GAA6B,gBACjD,GAAI,CACA,MAAMksD,EAAWtoE,EAAK,KAAK,QAAQ,cAAe,cAAc,EAChE,GAAI,IAAKqwD,EAAW,YAAYiY,CAAQ,EACpC,OAAOF,EAGX,UADqB/X,EAAW,cAAciY,CAAQ,EAAE,SAAQ,EAAG,KAAI,EACvD,CACZ,IAAK,MACDF,EAAe,IAAKphD,GAAwB,WAC5C,MACJ,IAAK,MACDohD,EAAe,IAAKr+C,GAAwB,WAC5C,MACJ,IAAK,SACDq+C,EAAe,IAAKnhD,GAA2B,cAC/C,MACJ,QACI,MAEpB,OACenQ,EAAO,CACV,QAAQ,KAAK,8JAA+JA,EAAM,OAAO,CACrM,CACA,CACI,OAAOsxD,CACX,CACA,OAAO,eAAejpD,EAAS,cAAe,CAC1C,WAAY,GACZ,IAAK,IACMipD,GAAgBC,EAAiB,CAEhD,CAAC,QC9ED,IAAIE,GAA6B,KAE1B,SAASC,GAAgBx8D,EAA0B,CACxDu8D,GAAOv8D,EAKPy8D,GAAAA,YAAY,aAAe,GAC3BA,GAAAA,YAAY,qBAAuB,GAEnCA,GAAAA,YAAY,GAAG,mBAAqBC,GAAS,CAC3CH,IAAA,MAAAA,GAAM,YAAY,KAAK,oBAAqB,CAC1C,QAASG,EAAK,QACd,aAAcA,EAAK,cAAgB,IAAA,EAEvC,CAAC,EAEDD,eAAY,GAAG,uBAAwB,IAAM,CAE7C,CAAC,EAEDA,GAAAA,YAAY,GAAG,oBAAsBE,GAAa,CAChDJ,IAAA,MAAAA,GAAM,YAAY,KAAK,mBAAoB,KAAK,MAAMI,EAAS,OAAO,EACxE,CAAC,EAEDF,eAAY,GAAG,oBAAqB,IAAM,CACxCF,IAAA,MAAAA,GAAM,YAAY,KAAK,gBACzB,CAAC,EAEDE,GAAAA,YAAY,GAAG,QAAUnoE,GAAQ,CAC/B,QAAQ,MAAM,mBAAoBA,EAAI,OAAO,EAC7CioE,IAAA,MAAAA,GAAM,YAAY,KAAK,gBAAiBjoE,EAAI,QAC9C,CAAC,EAGDkK,UAAQ,OAAO,gBAAiB,SAAY,CAC1C,GAAI,CACF,MAAMi+D,GAAAA,YAAY,gBAAA,CACpB,OAAS1hE,EAAG,CACV,QAAQ,MAAM,oCAAqCA,CAAC,CACtD,CACF,CAAC,EAGDyD,UAAQ,OAAO,2BAA4B,IAAM,CAC/Ci+D,eAAY,eAAe,GAAO,EAAI,CACxC,CAAC,CACH,CAEO,SAASG,IAAwB,CACtCH,GAAAA,YAAY,gBAAA,EAAkB,MAAO,GAAM,CACzC,QAAQ,MAAM,qCAAsC,CAAC,CACvD,CAAC,CACH,CC1CA,SAASI,IAAc,CACrB,GAAI,QAAQ,WAAa,QAAS,OAClC,GAAI,CACF,MAAM36D,EAAQ,YAAY,OAAS,WAC7B46D,EAAY7kE,GAAAA,SAAS,GAAGiK,CAAK,sBAAuB,CAAE,QAAS,GAAA,CAAM,EAAE,SAAA,EAAW,KAAA,EACxF,GAAI46D,EAAW,CACb,QAAA,IAAY,KAAOA,EACnB,MACF,CACF,MAAQ,CAAC,CAET,MAAMC,EAAO9oE,GAAG,QAAA,EACV+oE,EAAa,CACjB,iBACA,oBACA,iBACA,GAAGD,CAAI,mBACP,yBAAA,EAEF,GAAI,CACF,MAAME,EAASjpE,EAAK,KAAK+oE,EAAM,OAAQ,WAAY,MAAM,EACzD,GAAI3oE,EAAG,WAAW6oE,CAAM,EAAG,CACzB,MAAM38C,EAAIlsB,EAAG,YAAY6oE,CAAM,EAAE,KAAA,EAAO,QAAA,EAAU,CAAC,EAC/C38C,KAAc,KAAKtsB,EAAK,KAAKipE,EAAQ38C,EAAG,KAAK,CAAC,CACpD,CACF,MAAQ,CAAC,CACT,MAAM48C,EAAU,YAAY,MAAQ,GAC9BzO,EAAW,IAAI,IAAIyO,EAAQ,MAAM,GAAG,EAAE,OAAO,OAAO,CAAC,EACrDC,EAAQH,EAAW,OAAOzmE,GAAK,CAACk4D,EAAS,IAAIl4D,CAAC,CAAC,EACjD4mE,EAAM,SAAQ,QAAA,IAAY,KAAO,CAAC,GAAGA,EAAOD,CAAO,EAAE,KAAK,GAAG,EACnE,CAEAL,GAAA,EAEA,MAAMO,GAAYppE,EAAK,QAAQqpE,GAAAA,cAAc,OAAA,SAAA,IAAA,QAAA,KAAA,EAAA,cAAA,UAAA,EAAA,KAAAC,IAAAA,GAAA,QAAA,YAAA,IAAA,UAAAA,GAAA,KAAA,IAAA,IAAA,UAAA,SAAA,OAAA,EAAA,IAAe,CAAC,EAE7D,QAAA,IAAY,KAAOtpE,EAAK,KAAKopE,GAAW,SAAS,EACjD,QAAA,IAAY,YAAcxX,EAAAA,IAAI,WAC1B,QAAA,IAAY,KACZ5xD,EAAK,KAAK,QAAA,IAAY,KAAM,WAAW,EAE3C,IAAIgM,GACAu9D,GAAiC,KACjCl/D,GAAgC,KAChCC,GAAgC,KAEpC,MAAMk/D,GAAsB,YAAY,oBAExC,SAASC,IAAgB,CACvB,MAAMC,EAAQ,QAAQ,WAAa,SAC7BC,EAAQ,CAAC,CAACH,GAEV18C,EAAkD,CACtD,GAAI48C,EAAQ,CAAC,CACX,MAAO9X,EAAAA,IAAI,KACX,QAAS,CACP,CAAE,KAAM,OAAA,EACR,CAAE,KAAM,WAAA,EACR,CAAE,KAAM,UAAA,EACR,CAAE,KAAM,WAAA,EACR,CAAE,KAAM,MAAA,EACR,CAAE,KAAM,YAAA,EACR,CAAE,KAAM,QAAA,EACR,CAAE,KAAM,WAAA,EACR,CAAE,KAAM,MAAA,CAAgB,CAC1B,CACD,EAAI,CAAA,EACL,CACE,MAAO,OACP,QAAS,CACP,CAAE,KAAM,MAAA,EACR,CAAE,KAAM,MAAA,EACR,CAAE,KAAM,WAAA,EACR,CAAE,KAAM,KAAA,EACR,CAAE,KAAM,MAAA,EACR,CAAE,KAAM,OAAA,EACR,GAAI8X,EAAQ,CACV,CAAE,KAAM,oBAAA,EACR,CAAE,KAAM,QAAA,EACR,CAAE,KAAM,WAAA,CAAqB,EAC3B,CACF,CAAE,KAAM,QAAA,EACR,CAAE,KAAM,WAAA,EACR,CAAE,KAAM,WAAA,CAAqB,CAC/B,CACF,EAEF,CACE,MAAO,OACP,QAAS,CACP,GAAIC,EAAQ,CACV,CAAE,KAAM,QAAA,EACR,CAAE,KAAM,aAAA,EACR,CAAE,KAAM,gBAAA,EACR,CAAE,KAAM,WAAA,CAAqB,EAC3B,CAAA,EACJ,CAAE,KAAM,WAAA,EACR,CAAE,KAAM,QAAA,EACR,CAAE,KAAM,SAAA,EACR,CAAE,KAAM,WAAA,EACR,CAAE,KAAM,kBAAA,CAA4B,CACtC,EAEF,CACE,MAAO,SACP,QAAS,CACP,CAAE,KAAM,UAAA,EACR,CAAE,KAAM,MAAA,EACR,GAAID,EAAQ,CACV,CAAE,KAAM,WAAA,EACR,CAAE,KAAM,OAAA,CAAiB,EACvB,CACF,CAAE,KAAM,OAAA,CAAiB,CAC3B,CACF,CACF,EAGFE,EAAAA,KAAK,mBAAmBA,EAAAA,KAAK,kBAAkB98C,CAAQ,CAAC,CAC1D,CAEA,SAAS+8C,IAAe,CACtB,OAAA79D,GAAM,IAAI89D,EAAAA,cAAc,CACtB,MAAO,KACP,OAAQ,IACR,SAAU,IACV,UAAW,IACX,cAAe,cACf,qBAAsB,CAAE,EAAG,GAAI,EAAG,EAAA,EAClC,SAAU,eACV,kBAAmB,SACnB,gBAAiB,UACjB,KAAM,GACN,eAAgB,CACd,QAAS9pE,EAAK,KAAKopE,GAAW,YAAY,EAC1C,iBAAkB,GAClB,gBAAiB,GACjB,QAAS,EAAA,CACX,CACD,EAEDp9D,GAAI,KAAK,gBAAiB,IAAM,CAC9BA,IAAA,MAAAA,GAAK,MACP,CAAC,EAED+9D,cAAY,GAAG,UAAW,IAAM,CAC9B/9D,IAAA,MAAAA,GAAK,YAAY,KAAK,uBAAwB+9D,EAAAA,YAAY,oBAC5D,CAAC,EAEGP,IACFx9D,GAAI,QAAQw9D,EAAmB,EAC/Bx9D,GAAI,YAAY,aAAa,CAAE,KAAM,SAAU,GAE/CA,GAAI,SAAShM,EAAK,KAAK,QAAA,IAAY,KAAO,YAAY,CAAC,EAGzDgM,GAAI,GAAG,SAAU,IAAM,CACrBA,GAAM,IACR,CAAC,EAEMA,EACT,CAEA,SAASg+D,IAAoB,CAE3B,OAAIT,IAAY,CAACA,GAAS,eACxBA,GAAS,MAAA,EACFA,KAGTA,GAAW,IAAIO,EAAAA,cAAc,CAC3B,MAAO,KACP,OAAQ,IACR,SAAU,IACV,UAAW,IACX,cAAe,cACf,qBAAsB,CAAE,EAAG,GAAI,EAAG,EAAA,EAClC,SAAU,eACV,kBAAmB,SACnB,gBAAiB,UACjB,MAAO,cACP,KAAM,GACN,eAAgB,CACd,QAAS9pE,EAAK,KAAKopE,GAAW,YAAY,EAC1C,iBAAkB,GAClB,gBAAiB,GACjB,QAAS,EAAA,CACX,CACD,EAEDG,GAAS,KAAK,gBAAiB,IAAMA,IAAA,YAAAA,GAAU,MAAM,EACrDA,GAAS,GAAG,SAAU,IAAM,CAAEA,GAAW,IAAK,CAAC,EAE3CC,GACFD,GAAS,QAAQ,GAAGC,EAAmB,aAAa,EAEpDD,GAAS,SAASvpE,EAAK,KAAK,QAAA,IAAY,KAAO,YAAY,EAAG,CAAE,MAAO,CAAE,KAAM,OAAA,EAAW,EAGrFupE,GACT,CAEA,SAASU,IAAiB,CACxB,OAAA5/D,GAAa,IAAIiK,GACVjK,EACT,CAEA,SAAS6/D,IAAiB,CACxB,OAAA5/D,GAAa,IAAI6H,GACV7H,EACT,CAEAsnD,EAAAA,IAAI,GAAG,oBAAqB,IAAM,CAC5B,QAAQ,WAAa,WACvBA,EAAAA,IAAI,KAAA,EACJ5lD,GAAM,KAEV,CAAC,EAED4lD,EAAAA,IAAI,GAAG,cAAe,SAAY,CAC5BvnD,IAAY,MAAMA,GAAW,QAAA,EAC7BC,IAAY,MAAMA,GAAW,QAAA,CACnC,CAAC,EAEDsnD,EAAAA,IAAI,GAAG,WAAY,IAAM,CACnBkY,gBAAc,gBAAgB,SAAW,GAC3CD,GAAA,CAEJ,CAAC,EAEDjY,EAAAA,IAAI,UAAA,EAAY,KAAK,IAAM,CACzBA,EAAAA,IAAI,KAAO,QACX,MAAMuY,EAASF,GAAA,EACTG,EAAUF,GAAA,EAChB9/D,GAAiB+/D,EAAQC,EAAS,IAAMp+D,EAAG,EAC3Cy9D,GAAA,EAGAj/D,UAAQ,OAAO,oBAAqB,IAAM,CAAEw/D,GAAA,CAAoB,CAAC,EAEjE,MAAMK,EAAUR,GAAA,EAGZjY,EAAAA,IAAI,YACNyY,EAAQ,YAAY,KAAK,kBAAmB,IAAM,CAChD7B,GAAgB6B,CAAO,EAEvB,WAAWzB,GAAiB,GAAI,CAClC,CAAC,CAEL,CAAC","x_google_ignoreList":[10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168]}
|